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