129. ORA, абсолютная адресация
добавить опкод ORA absolute ``0x0D``.
Урок 129 из 356 · tests/chapter_01_cpu/test_129_ORA_absolute.py
Зачем нужен этот шаг
Абсолютная адресация расширяет операцию ORA за пределы нулевой страницы, декодируя полный адрес в порядке little-endian и считывая его значение перед обновлением A и Z/N.
На этом шаге `or_a и обработчики непосредственной и нулевой страничной адресации уже существуют, поэтому добавьте ровно следующее в emulator/cpu/opcodes.py`:
def ora_absolute(cpu: CPU):
addr = absolute(cpu)
value = cpu.bus.read(addr)
or_a(cpu, value)
OPCODE_TABLE = {
...
0x0D: ora_absolute,
}`emulator/cpu/addressing_modes.py::absolute получает слово в порядке little-endian через CPU.fetch_word. Таким образом, 0D 00 02 читает $0200 и передаёт это значение в instructions.or_a`. A и Z/N изменяются; флаг переноса/переполнения и память не меняются; опкод плюс слово продвигают PC на три байта.
Заблуждение: слово операнда — это адрес, а не непосредственное значение, и первым идёт его младший байт. Вне рамок: индексированные абсолютные и косвенные режимы ORA (уроки 130-133).
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_129_ORA_absolute.py -v