152. Cmp absolute y

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

Урок 152 из 356 · tests/chapter_01_cpu/test_152_CMP_absolute_y.py

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

Absolute,Y даёт соответствующее индексированное сравнение через Y, повторно используя общую логику CMP.

На этом шаге урок 151 уже добавил absolute,X. Добавьте точно следующее в `emulator/cpu/opcodes.py`:

def cmp_absolute_y(cpu: CPU):
    addr = absolute_y(cpu)
    value = cpu.bus.read(addr)
    cmp(cpu, value)

OPCODE_TABLE = {
    ...
    0xD9: cmp_absolute_y,
}

`emulator/cpu/addressing_modes.py::absolute_y считывает базовое слово в порядке little-endian и прибавляет Y перед чтением с шины. instructions.cmp` меняет только C/Z/N; A, Y, память и Overflow остаются неизменными, а опкод вместе со словом сдвигают PC на три байта.

Заблуждение: Y изменяет эффективный адрес, а не считанное значение, и базовые байты не в порядке big-endian. Вне рамок: CMP (indirect,X) и (indirect),Y (153-154), затем CPX/CPY (155-162).

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

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