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