133. Ora indirect y
добавить опкод ORA (indirect),Y ``0x11``.
Урок 133 из 356 · tests/chapter_01_cpu/test_133_ORA_indirect_y.py
Зачем нужен этот шаг
Этот урок завершает формы адресации ORA, разрешая указатель в нулевой странице и лишь затем прибавляя Y, не дублируя при этом логику результата или флагов операции.
На этом шаге завершите ORA после уроков 125-132, добавив следующее в `emulator/cpu/opcodes.py`:
def ora_indirect_y(cpu: CPU):
addr = indirect_y(cpu)
value = cpu.bus.read(addr)
or_a(cpu, value)
OPCODE_TABLE = {
...
0x11: ora_indirect_y,
}`emulator/cpu/addressing_modes.py::indirect_y считывает указатель в нулевой странице, читает его целевой адрес в порядке little-endian с переносом при поиске старшего байта и лишь затем прибавляет Y. Обработчик читает это индексированное целевое значение и вызывает instructions.or_a`. A и Z/N могут измениться; Carry/Overflow, память, X и Y неизменны; опкод вместе с операндом сдвигает PC на два байта.
Заблуждение: в отличие от (indirect,X), Y не выбирает расположение указателя; он индексирует уже разрешённый целевой адрес. Вне рамок: EOR и BIT (уроки 134-145).
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_133_ORA_indirect_y.py -v