127. ORA, адресация нулевой страницы
добавить опкод ORA zero-page ``0x05``.
Урок 127 из 356 · tests/chapter_01_cpu/test_127_ORA_zero_page.py
Зачем нужен этот шаг
ORA должна отличать операнд-адрес в нулевой странице от литеральных данных, считывать байт по этому адресу и затем применять уже определённое поведение включающего ИЛИ.
На этом шаге, при импортированном в уроке 126 `or_a, полная дополнительная реализация в emulator/cpu/opcodes.py` выглядит так:
def ora_zero_page(cpu: CPU):
addr = zero_page(cpu)
value = cpu.bus.read(addr)
or_a(cpu, value)
OPCODE_TABLE = {
...
0x05: ora_zero_page,
}`emulator/cpu/addressing_modes.py::zero_page считывает однобайтовый адрес, после чего обработчик читает его значение перед вызовом instructions.or_a. A и Z/N изменяются; флаг переноса/переполнения и память остаются неизменными; 05 10 читает $0010` и продвигает PC на два байта.
Заблуждение: в `or_a нужно передавать байт, хранящийся по адресу $0010, а не адрес 0x10`, и результат не записывается обратно в память. Вне рамок: режимы ORA от zero-page,X до indirect,Y (уроки 128-133).
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_127_ORA_zero_page.py -v