064. Sbc zero page
Добавляем SBC Zero Page.
Урок 64 из 356 · tests/chapter_01_cpu/test_064_SBC_zero_page.py
Файл для обновления
emulator/cpu/opcodes.pyСимволы для добавления/обновления
opcodes.sbc_zero_page and OPCODE_TABLE[0xE5]Зачем нужен этот шаг
В этом уроке добавляется первая обёртка SBC с адресацией памяти, повторно использующая уже установленный разрешитель адреса нулевой страницы и базовую операцию sbc, работающую со значением.
Полная эталонная реализация
# emulator/cpu/opcodes.py
def sbc_zero_page(cpu: CPU):
addr = zero_page(cpu)
value = cpu.bus.read(addr)
sbc(cpu, value)
OPCODE_TABLE = {
# ... existing entries ...
0xE5: sbc_zero_page,
}Важные инварианты
zero_pageполучает один операнд и возвращает адрес на странице $00- обработчик читает один байт по этому адресу и передаёт значение в
sbc - арифметика и поведение флагов SBC остаются централизованы в
sbc - выполнение двухбайтовой инструкции продвигает PC на два байта
Распространённое заблуждение
zero_page возвращает адрес, а не байт для вычитания; обработчик должен выполнить чтение с шины перед вызовом sbc.
Вне рамок этого шага
- индексированные, абсолютные и косвенные обёртки SBC
- изменения адресации нулевой страницы или арифметики SBC
- тайминг циклов
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_064_SBC_zero_page.py -v