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