130. ORA, абсолютная адресация с X

добавить опкод ORA absolute,X ``0x1D``.

Урок 130 из 356 · tests/chapter_01_cpu/test_130_ORA_absolute_x.py

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

Этот шаг позволяет применять ORA к таблицам с полным адресом, индексируемым X, сохраняя вычисление адреса отдельно от семантики аккумулятора и флагов операции.

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

Заблуждение: X индексирует декодированный адрес, а не байт операнда или данные, считанные из памяти. Вне рамок: ORA absolute,Y и режимы косвенной адресации (уроки 131-133), за которыми следуют EOR и BIT в уроках 134-145.

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

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