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