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