122. AND, абсолютная адресация с Y

добавить опкод AND absolute,Y ``0x39``.

Урок 122 из 356 · tests/chapter_01_cpu/test_122_AND_absolute_y.py

Зачем нужен этот шаг

Этот шаг добавляет Y-индексированный аналог absolute,X, чтобы AND мог использовать любой из индексных регистров без дублирования семантики аккумулятора и флагов.

На этом шаге, после absolute,X из урока 121, добавьте в `emulator/cpu/opcodes.py` только этот обработчик и его регистрацию:

def and_absolute_y(cpu: CPU):
    addr = absolute_y(cpu)
    value = cpu.bus.read(addr)
    and_a(cpu, value)

OPCODE_TABLE = {
    ...
    0x39: and_absolute_y,
}

`emulator/cpu/addressing_modes.py::absolute_y считывает базовое слово в порядке little-endian, прежде чем прибавить cpu.y. Полученное значение из памяти передаётся в уже существующий instructions.and_a`; A и Z/N изменяются, а Y, флаг переноса/переполнения и память остаются неизменными. Опкод и слово занимают три байта.

Заблуждение: absolute,Y — это не zero-page,Y и не ограничивает индексацию нулевой страницей. Вне рамок: AND (indirect,X)/(indirect),Y (уроки 123-124) и добавления ORA/EOR/BIT в уроках 125-145.

Запустить этот урок

uv run pytest tests/chapter_01_cpu/test_122_AND_absolute_y.py -v