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