A restrictive multi-level-cell (MLC) flash memory prohibits regressive
page-writes. When a regressive page-write is requested, an empty block
having a low wear-level count is found, and data from the regressive
page-write and data from pages stored in the old block are written to the
empty block in page order. The old block is erased and recycled. A
two-level look-up table is stored in volatile random-access memory (RAM).
A logical page address from a host is divided by a modulo divider to
generate a quotient and a remainder. The quotient is a logical block
address that indexes a first-level look-up table to find a mapping entry
with a physical block address that selects a row in a second-level
look-up table. The remainder locates a column in the row in the
second-level look-up table. If any page-valid bits above the column
pointed to by the remainder are set, the write is regressive.