190. Brk implied
подключить опкод BRK implied $00.
Урок 190 из 356 · tests/chapter_01_cpu/test_190_BRK_implied.py
Предусловие: на шаге 189 была завершена `brk с требуемым поведением битов статуса. На этом шаге добавьте импорт и прямую привязку в emulator/cpu/opcodes.py`:
from emulator.cpu.instructions import brk
OPCODE_TABLE = {
# existing entries...
0x00: brk,
}Опкод
0x00 -> BRKЦель
добавить опкод 0x00 в OPCODE_TABLE.
Рекомендации
BRK обычно указывается как инструкция с подразумеваемой адресацией, но имеет особую длину:
opcode byte: $00
padding byte: one ignored byte after $00
total length: 2 bytesЭто НЕ означает, что для BRK существуют две записи опкодов.
Существует только один официальный опкод
0x00Байт после BRK может иметь любое значение. CPU пропускает его и записывает адрес возврата после этого байта.
Пример
$8000: 00 BRK opcode
$8001: AB padding/signature byte, ignored by BRK
$8002: EA next real instructionПосле выполнения CPU.step() для BRK записанный адрес возврата должен быть $8002.
Зачем нужен этот шаг
`CPU.step считывает $00 и однократно продвигает PC; прямая диспетчеризация к brk` учитывает неявный байт-заполнитель и выполняет всю работу со стеком и вектором. Инварианты: в таблице одна запись без выборки режима адресации; содержимое заполнителя не влияет на A или адрес назначения; состояние и правила стека из шага 189 остаются без изменений. Заблуждение: двухбайтовая архитектурная длина BRK не подразумевает двухбайтовый опкод или обёртку для декодирования операнда.
За рамками шага: RTI/$40 — шаги 191–192. Аппаратная диспетчеризация прерываний, NMI, общие вспомогательные функции стека и последующие API опкодов не являются частью этого перехода.
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_190_BRK_implied.py -v