149. Cmp zero page x

añadir el opcode CMP en página cero,X ``0xD5``.

Lección 149 de 356 · tests/chapter_01_cpu/test_149_CMP_zero_page_x.py

Por qué existe este paso

El CMP indexado en página cero admite búsquedas compactas en tablas y confirma que la suma de X se envuelve dentro de la página cero antes de leer el valor de comparación.

En este paso, apoyándote solo en las lecciones 146-148, añade exactamente lo siguiente a `emulator/cpu/opcodes.py`:

def cmp_zero_page_x(cpu: CPU):
    addr = zero_page_x(cpu)
    value = cpu.bus.read(addr)
    cmp(cpu, value)

OPCODE_TABLE = {
    ...
    0xD5: cmp_zero_page_x,
}

`addressing_modes.zero_page_x calcula (operand + X) & 0xFF` antes de la lectura del bus. C/Z/N pueden cambiar; A, Overflow, X, Y y la memoria permanecen invariantes; el opcode más el operando avanza el PC dos bytes.

Concepto erróneo: indexar más allá de `$FF` no se propaga a la página uno; se envuelve dentro de la página cero. Fuera de alcance: el CMP absoluto empieza en la lección 150, con sus variantes indexadas e indirectas aplazadas a las lecciones 151-154.

Ejecutar esta lección

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