153. Cmp indirecto x
añade el opcode CMP (indirect,X) ``0xC1``.
Lección 153 de 356 · tests/chapter_01_cpu/test_153_CMP_indirect_x.py
Por qué existe este paso
La forma (indirect,X) permite que CMP use tablas de punteros de página cero preindexadas mientras deja la resolución de punteros al helper de direccionamiento.
En este paso, tras las lecciones 146-152, añade exactamente lo siguiente a `emulator/cpu/opcodes.py`:
def cmp_indirect_x(cpu: CPU):
addr = indirect_x(cpu)
value = cpu.bus.read(addr)
cmp(cpu, value)
OPCODE_TABLE = {
...
0xC1: cmp_indirect_x,
}`emulator/cpu/addressing_modes.py::indirect_x obtiene el operando, calcula (base + X) & 0xFF` y lee un puntero little-endian cuya búsqueda del byte alto también hace wraparound dentro de la página cero. A continuación, el handler lee el valor señalado. Solo cambian C/Z/N; A, X, los bytes del puntero, la memoria de destino y Overflow son invariantes; el opcode y el operando avanzan PC dos bytes.
Concepto erróneo: X se aplica antes de desreferenciar, no a la dirección final de 16 bits. Fuera de alcance: CMP (indirect),Y (154) y CPX/CPY (155-162).
Ejecutar esta lección
uv run pytest tests/chapter_01_cpu/test_153_CMP_indirect_x.py -v