154. Cmp indirecto y
añade el opcode CMP (indirect),Y ``0xD1``.
Lección 154 de 356 · tests/chapter_01_cpu/test_154_CMP_indirect_y.py
Por qué existe este paso
La forma (indirect),Y completa el direccionamiento de CMP indexando un puntero de página cero resuelto en lugar de la propia ubicación del puntero.
En este paso, cierra la secuencia de opcodes de CMP añadiendo lo siguiente a `emulator/cpu/opcodes.py`:
def cmp_indirect_y(cpu: CPU):
addr = indirect_y(cpu)
value = cpu.bus.read(addr)
cmp(cpu, value)
OPCODE_TABLE = {
...
0xD1: cmp_indirect_y,
}`emulator/cpu/addressing_modes.py::indirect_y` lee un puntero little-endian de la página cero (haciendo wraparound en la búsqueda del byte alto del puntero) y luego suma Y a esa dirección de 16 bits. Solo cambian C/Z/N; A, Y, los bytes del puntero, la memoria de destino y Overflow son invariantes; el opcode más el operando avanzan PC dos bytes.
Concepto erróneo: a diferencia de (indirect,X), Y se suma después de desreferenciar el puntero, no al operando de página cero. Fuera de alcance: CPX y CPY en las lecciones 155-162.
Ejecutar esta lección
uv run pytest tests/chapter_01_cpu/test_154_CMP_indirect_y.py -v