132. Ora indirect x
añadir el opcode ORA (indirect,X) ``0x01``.
Lección 132 de 356 · tests/chapter_01_cpu/test_132_ORA_indirect_x.py
Por qué existe este paso
El ORA indirecto preindexado admite tablas de punteros en la página cero y confirma que la búsqueda del puntero se completa antes de que el valor de memoria resultante se combine con A mediante OR.
En este paso, la lección 131 ha completado los modos directos de ORA. Añade exactamente lo siguiente a `emulator/cpu/opcodes.py`:
def ora_indirect_x(cpu: CPU):
addr = indirect_x(cpu)
value = cpu.bus.read(addr)
or_a(cpu, value)
OPCODE_TABLE = {
...
0x01: ora_indirect_x,
}`emulator/cpu/addressing_modes.py::indirect_x obtiene el operando, le suma X con ajuste circular en la página cero, y lee un puntero en little-endian cuya búsqueda del byte alto también se ajusta de forma circular en la página cero. El manejador lee el valor apuntado y delega el resultado y las flags de ORA en instructions.or_a`. A y Z/N pueden cambiar; Carry/Overflow, la memoria, X e Y permanecen invariantes; el PC avanza dos bytes.
Concepto erróneo: X se suma antes de la desreferenciación del puntero, no a la dirección final de 16 bits. Fuera de alcance: ORA (indirect),Y (lección 133) y EOR/BIT (134-145).
Ejecutar esta lección
uv run pytest tests/chapter_01_cpu/test_132_ORA_indirect_x.py -v