Z80 Sudoku — 3x3 Box Validation Routine

Validates each of the nine 3×3 sub-grids for duplicate digits (1–9). Zero values are ignored. Uses bitmask duplicate detection identical to row and column validators.

Memory Model

Board base address: $A000 (81 bytes, row-major).

Cell value stored in low nibble (bits 0–3). High nibble reserved.

Algorithm

1. For each of 9 boxes, compute base offset: 0,3,6,27,30,33,54,57,60 (relative to $A000).

2. Clear 9-bit mask (stored in 16-bit register pair).

3. Iterate 3 rows × 3 columns within box:

• Read cell value.

• Mask low nibble.

• If zero, skip.

• Compute bit = 1 << (value-1).

• If bit already set → invalid.

• Else set bit and continue.

4. Within box traversal:

• Move +1 across columns.

• After 3 columns, add +6 to reach next box row (net +9 from row start).

5. If all boxes validated with no duplicates, return success.

Register Strategy

HL → pointer into board.

DE → base address for current box.

BC → loop counters (box index and inner cell counter).

AF/alternate register set may be used for mask manipulation.

Return Convention

Z flag set on success.

NZ flag set if duplicate detected.