133. Ora indirect y
añadir el opcode ORA (indirect),Y ``0x11``.
Lección 133 de 356 · tests/chapter_01_cpu/test_133_ORA_indirect_y.py
Por qué existe este paso
Esto completa las formas de direccionamiento de ORA resolviendo un puntero en la página cero y sumando después Y, sin duplicar la lógica del resultado ni de las flags de la operación.
En este paso, completa ORA tras las lecciones 125-132 añadiendo lo siguiente a `emulator/cpu/opcodes.py`:
def ora_indirect_y(cpu: CPU):
addr = indirect_y(cpu)
value = cpu.bus.read(addr)
or_a(cpu, value)
OPCODE_TABLE = {
...
0x11: ora_indirect_y,
}`emulator/cpu/addressing_modes.py::indirect_y obtiene un puntero en la página cero, lee su destino en little-endian con una búsqueda circular del byte alto, y solo entonces suma Y. El manejador lee ese destino indexado y llama a instructions.or_a`. A y Z/N pueden cambiar; Carry/Overflow, la memoria, X e Y son invariantes; el opcode más el operando avanza el PC dos bytes.
Concepto erróneo: a diferencia de (indirect,X), Y no selecciona la ubicación del puntero; indexa el destino ya resuelto. Fuera de alcance: EOR y BIT (lecciones 134-145).
Ejecutar esta lección
uv run pytest tests/chapter_01_cpu/test_133_ORA_indirect_y.py -v