067. Sbc absolute x
Добавляем SBC Absolute,X.
Урок 67 из 356 · tests/chapter_01_cpu/test_067_SBC_absolute_x.py
Файл для обновления
emulator/cpu/opcodes.pyСимволы для добавления/обновления
opcodes.sbc_absolute_x and OPCODE_TABLE[0xFD]Зачем нужен этот шаг
SBC получает абсолютный доступ с индексацией по X за счёт повторного использования существующего разрешителя absolute_x; обёртка опкода по-прежнему отвечает только за чтение и делегирование.
Полная эталонная реализация
# emulator/cpu/opcodes.py
def sbc_absolute_x(cpu: CPU):
addr = absolute_x(cpu)
value = cpu.bus.read(addr)
sbc(cpu, value)
OPCODE_TABLE = {
# ... existing entries ...
0xFD: sbc_absolute_x,
}Важные инварианты
absolute_xпотребляет два байта операнда и прибавляет X к базовому адресу- обработчик читает байт по итоговому индексированному адресу
- прочитанное значение передаётся в
sbcодин раз - выполнение трёхбайтовой инструкции продвигает PC на три байта
Распространённое заблуждение
Не прибавляйте X повторно в обёртке; absolute_x уже возвращает итоговый индексированный адрес.
Вне рамок этого шага
- обёртки SBC для Absolute,Y и косвенной адресации
- штрафы циклов за пересечение страницы
- изменения вспомогательных методов адресации или арифметики SBC
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_067_SBC_absolute_x.py -v