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