068. Sbc absolute y

Добавляем SBC Absolute,Y.

Урок 68 из 356 · tests/chapter_01_cpu/test_068_SBC_absolute_y.py

Файл для обновления

emulator/cpu/opcodes.py

Символы для добавления/обновления

opcodes.sbc_absolute_y and OPCODE_TABLE[0xF9]

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

Этот урок повторяет структуру Absolute,X, используя существующий разрешитель absolute_y, чтобы SBC могла вычитать байт по 16-битному адресу с индексацией по Y.

Полная эталонная реализация

# emulator/cpu/opcodes.py
def sbc_absolute_y(cpu: CPU):
    addr = absolute_y(cpu)
    value = cpu.bus.read(addr)
    sbc(cpu, value)

OPCODE_TABLE = {
    # ... existing entries ...
    0xF9: sbc_absolute_y,
}

Важные инварианты

  • absolute_y потребляет два байта операнда и прибавляет Y, а не X
  • обработчик читает по итоговому индексированному адресу ровно один раз
  • sbc получает байтовое значение и отвечает за обновление арифметических флагов
  • выполнение трёхбайтовой инструкции продвигает PC на три байта

Распространённое заблуждение

Не копируйте обёртку Absolute,X, оставив в ней использование X или absolute_x; опкод $F9 должен разрешаться через Y.

Вне рамок этого шага

  • косвенные обёртки SBC
  • штрафы циклов за пересечение страницы
  • изменения вспомогательных методов адресации или арифметики SBC

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

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