132. Ora indirect x

добавить опкод ORA (indirect,X) ``0x01``.

Урок 132 из 356 · tests/chapter_01_cpu/test_132_ORA_indirect_x.py

Зачем нужен этот шаг

Предындексированная косвенная ORA поддерживает таблицы указателей в нулевой странице и подтверждает, что поиск указателя завершается до того, как результирующее значение из памяти объединяется по ИЛИ с A.

На этом шаге урок 131 уже завершает прямые режимы ORA. Добавьте ровно следующее в `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 считывает операнд, прибавляет X с переносом внутри нулевой страницы и читает указатель в порядке little-endian, чей старший байт также ищется с переносом внутри нулевой страницы. Обработчик читает значение по указателю и передаёт результат и флаги ORA в instructions.or_a`. A и Z/N могут измениться; Carry/Overflow, память, X и Y остаются неизменными; PC сдвигается на два байта.

Заблуждение: X прибавляется до разыменования указателя, а не к итоговому 16-битному адресу. Вне рамок: ORA (indirect),Y (урок 133) и EOR/BIT (134-145).

Запустить этот урок

uv run pytest tests/chapter_01_cpu/test_132_ORA_indirect_x.py -v