128. ORA, адресация нулевой страницы с X
добавить опкод ORA zero-page,X ``0x15``.
Урок 128 из 356 · tests/chapter_01_cpu/test_128_ORA_zero_page_x.py
Зачем нужен этот шаг
Этот шаг обеспечивает компактный индексированный доступ ORA и проверяет, что прибавление X подчиняется оборачиванию в пределах нулевой страницы, прежде чем выбранный байт объединяется с A.
На этом шаге, следуя уроку 127, добавьте в `emulator/cpu/opcodes.py` только этот обработчик и запись в таблице:
def ora_zero_page_x(cpu: CPU):
addr = zero_page_x(cpu)
value = cpu.bus.read(addr)
or_a(cpu, value)
OPCODE_TABLE = {
...
0x15: ora_zero_page_x,
}`emulator/cpu/addressing_modes.py::zero_page_x вычисляет (base + cpu.x) & 0xFF перед чтением с шины. Полученное значение передаётся в instructions.or_a; A и Z/N изменяются, а X, флаг переноса/переполнения и память — нет, и PC продвигается на два байта. Так, база 0xFE плюс X 0x03 дают чтение из $0001`.
Заблуждение: индексация в нулевой странице оборачивается к `$0001, а не к $0101`; X не изменяет загруженное значение. Вне рамок: абсолютные и косвенные режимы ORA (уроки 129-133).
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_128_ORA_zero_page_x.py -v