148. Cmp zero page
añadir el opcode CMP en página cero ``0xC5``.
Lección 148 de 356 · tests/chapter_01_cpu/test_148_CMP_zero_page.py
Por qué existe este paso
CMP debe comparar A tanto con memoria como con literales; esta forma resuelve una dirección compacta de página cero y pasa el byte obtenido a la lógica de comparación común.
En este paso, las lecciones 146-147 ya proporcionan la semántica de CMP, su importación y la conexión del modo inmediato. Añade exactamente lo siguiente a `emulator/cpu/opcodes.py`:
def cmp_zero_page(cpu: CPU):
addr = zero_page(cpu)
value = cpu.bus.read(addr)
cmp(cpu, value)
OPCODE_TABLE = {
...
0xC5: cmp_zero_page,
}El operando nombra una ubicación de página cero; su valor en el bus, no el byte de la dirección, se compara con A. C/Z/N pueden cambiar; A, Overflow, X, Y y la memoria permanecen invariantes; el PC avanza dos bytes.
Concepto erróneo: `C5 10 compara contra RAM[$0010], no contra el literal $10`. Fuera de alcance: la página cero indexada es la lección 149 y los modos de CMP más amplios/indirectos son las lecciones 150-154.
Ejecutar esta lección
uv run pytest tests/chapter_01_cpu/test_148_CMP_zero_page.py -v