161. Cpy en página cero

añadir el opcode CPY de página cero ``0xC4``.

Lección 161 de 356 · tests/chapter_01_cpu/test_161_CPY_zero_page.py

Por qué existe este paso

CPY en página cero interpreta su operando como una dirección de memoria compacta y compara Y con el byte leído en esa dirección a través de la primitiva CPY compartida.

En este paso, las lecciones 159-160 ya proporcionan `instructions.cpy, su importación de opcode y CPY inmediato. Añade exactamente lo siguiente a emulator/cpu/opcodes.py`:

def cpy_zero_page(cpu: CPU):
    addr = zero_page(cpu)
    value = cpu.bus.read(addr)
    cpy(cpu, value)

OPCODE_TABLE = {
    ...
    0xC4: cpy_zero_page,
}

`emulator/cpu/addressing_modes.py::zero_page consume el operando de un byte como una dirección; el manejador entonces lee esa dirección y delega la semántica de flags a emulator/cpu/instructions.py::cpy`.

Invariantes: Y y la memoria no cambian; CPY solo actualiza C/Z/N, y el opcode más el operando avanza PC en dos bytes. Concepto erróneo: el operando no es el valor comparado con Y; identifica el byte de página cero que contiene ese valor.

Fuera de alcance: CPY absoluto `0xCC` es la lección 162. CMP/CPX y CPY inmediato pertenecen a las lecciones 146-160.

Ejecutar esta lección

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