072. Inc página cero

cablear INC Página Cero (`0xE6`).

Lección 72 de 356 · tests/chapter_01_cpu/test_072_INC_zero_page.py

En este paso, con emulator/cpu/instructions.py:inc de la lección 071 como requisito previo, añade solo el cableado de página cero en emulator/cpu/opcodes.py.

Por qué existe este paso

Los manejadores de opcode traducen bytes de instrucción en una dirección efectiva. Reutilizar addressing_modes.zero_page conserva la obtención del operando y el avance del PC, mientras que instructions.inc permanece independiente del modo de direccionamiento.

Implementación sugerida en emulator/cpu/opcodes.py:

from emulator.cpu.instructions import lda, sta, ldx, stx, ldy, sty, tax, txa, tay, tya, adc, sbc, inc

def inc_zero_page(cpu: CPU):
    addr = zero_page(cpu)
    inc(cpu, addr)

Añade exactamente esta entrada a la OPCODE_TABLE existente:

0xE6: inc_zero_page,

El manejador se insertó bajo # ------ INC Opcodes, y el mapeo se añadió a OPCODE_TABLE.

Invariantes: zero_page(cpu) consume un byte de operando, devuelve una dirección de página cero y avanza el PC una vez; el manejador delega una lectura-modificación-escritura a inc; 0xE6 se mapea al objeto función; la longitud de la instrucción es de dos bytes; INC sigue cambiando solo la memoria y Z/N.

Concepto erróneo: el byte de operando es una dirección, no el byte a incrementar. No lo leas en el manejador ni dupliques la aritmética de INC allí.

Fuera de alcance: inc_zero_page_x, inc_absolute e inc_absolute_x, junto con sus mapeos 0xF6, 0xEE y 0xFE, son las lecciones 073-075.

Ejecutar esta lección

uv run pytest tests/chapter_01_cpu/test_072_INC_zero_page.py -v