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