124. AND, косвенная адресация с Y

добавить опкод AND (indirect),Y ``0x31``.

Урок 124 из 356 · tests/chapter_01_cpu/test_124_AND_indirect_y.py

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

Этот шаг завершает покрытие режимов адресации AND, используя указатель в нулевой странице с последующей индексацией по Y и повторно применяя как вспомогательную функцию косвенной адресации, так и общий примитив AND.

На этом шаге завершите пронумерованные режимы AND, добавив следующее в `emulator/cpu/opcodes.py`:

def and_indirect_y(cpu: CPU):
    addr = indirect_y(cpu)
    value = cpu.bus.read(addr)
    and_a(cpu, value)

OPCODE_TABLE = {
    ...
    0x31: and_indirect_y,
}

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

Заблуждение: в (indirect),Y значение Y не прибавляется к ячейке указателя в нулевой странице; такой порядок относится к (indirect,X). Вне рамок: работа над ORA, EOR и BIT, начиная с урока 125.

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

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