066. Sbc absolute
Добавляем SBC Absolute.
Урок 66 из 356 · tests/chapter_01_cpu/test_066_SBC_absolute.py
Файл для обновления
emulator/cpu/opcodes.pyСимволы для добавления/обновления
opcodes.sbc_absolute and OPCODE_TABLE[0xED]Зачем нужен этот шаг
В этом уроке SBC подключается к существующему 16-битному абсолютному адресу с порядком байтов little-endian, следуя той же границе «разрешить-прочитать-делегировать», что и другие опкоды с адресацией памяти.
Полная эталонная реализация
# emulator/cpu/opcodes.py
def sbc_absolute(cpu: CPU):
addr = absolute(cpu)
value = cpu.bus.read(addr)
sbc(cpu, value)
OPCODE_TABLE = {
# ... existing entries ...
0xED: sbc_absolute,
}Важные инварианты
absoluteпотребляет два байта операнда и возвращает 16-битный адрес- обработчик читает один байт по этому адресу
- только
sbcизменяет A и арифметические флаги - выполнение трёхбайтовой инструкции продвигает PC на три байта
Распространённое заблуждение
Два байта операнда образуют адрес в порядке little-endian; это не значение для вычитания, и их не следует повторно собирать в этой обёртке.
Вне рамок этого шага
- индексированные абсолютные и косвенные обёртки SBC
- изменения абсолютной адресации или арифметики SBC
- тайминг циклов
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_066_SBC_absolute.py -v