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