124. And indirect y
añadir el opcode AND (indirect),Y ``0x31``.
Lección 124 de 356 · tests/chapter_01_cpu/test_124_AND_indirect_y.py
Por qué existe este paso
Esto completa la cobertura de direccionamiento de AND con un puntero en página cero seguido de indexación por Y, reutilizando tanto el ayudante indirecto como la primitiva común de AND.
En este paso, completa los modos numerados de AND añadiendo lo siguiente a `emulator/cpu/opcodes.py`:
def and_indirect_y(cpu: CPU):
addr = indirect_y(cpu)
value = cpu.bus.read(addr)
and_a(cpu, value)
OPCODE_TABLE = {
...
0x31: and_indirect_y,
}`emulator/cpu/addressing_modes.py::indirect_y obtiene una ubicación de puntero en página cero, lee su palabra en little-endian con envoltura de página cero para el byte alto, y solo entonces suma cpu.y. El valor destino se pasa a instructions.and_a`. A y Z/N cambian; Y, Carry/Overflow, los bytes del puntero y la memoria destino permanecen invariantes; el PC avanza dos bytes.
Concepto erróneo: (indirect),Y no suma Y a la ubicación del puntero en página cero; ese orden pertenece a (indirect,X). Fuera de alcance: el trabajo de ORA, EOR y BIT, a partir de la lección 125.
Ejecutar esta lección
uv run pytest tests/chapter_01_cpu/test_124_AND_indirect_y.py -v