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