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