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