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