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