130. Ora absolute x
añadir el opcode ORA absolute,X ``0x1D``.
Lección 130 de 356 · tests/chapter_01_cpu/test_130_ORA_absolute_x.py
Por qué existe este paso
Esto permite usar ORA contra tablas de direcciones completas indexadas por X manteniendo la resolución de direcciones separada de la semántica de acumulador y flags de la operación.
En este paso, tras el ORA absoluto sin indexar de la lección 129, añade solo este código a `emulator/cpu/opcodes.py`:
def ora_absolute_x(cpu: CPU):
addr = absolute_x(cpu)
value = cpu.bus.read(addr)
or_a(cpu, value)
OPCODE_TABLE = {
...
0x1D: ora_absolute_x,
}`emulator/cpu/addressing_modes.py::absolute_x obtiene la palabra base en little-endian antes de sumar cpu.x. El manejador lee esa dirección resuelta y pasa su valor a instructions.or_a`. A y Z/N cambian; X, Carry/Overflow y la memoria son invariantes; el opcode más la palabra avanza el PC tres bytes.
Concepto erróneo: X indexa la dirección decodificada, no un byte del operando ni el dato leído de memoria. Fuera de alcance: ORA absolute,Y y los modos indirectos (lecciones 131-133), seguidos de EOR y BIT en las lecciones 134-145.
Ejecutar esta lección
uv run pytest tests/chapter_01_cpu/test_130_ORA_absolute_x.py -v