065. Sbc zero page x

Добавляем SBC Zero Page,X.

Урок 65 из 356 · tests/chapter_01_cpu/test_065_SBC_zero_page_x.py

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

emulator/cpu/opcodes.py

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

opcodes.sbc_zero_page_x and OPCODE_TABLE[0xF5]

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

SBC теперь получает индексированный доступ к нулевой странице за счёт сочетания существующего разрешителя zero_page_x с чтением из памяти и существующей инструкцией sbc.

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

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

OPCODE_TABLE = {
    # ... existing entries ...
    0xF5: sbc_zero_page_x,
}

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

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

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

Не воспроизводите индексирование в обёртке опкода и не допускайте, чтобы $FF + X переходило на страницу $01; оборачивание уже является обязанностью zero_page_x.

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

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

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

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