192. Rti, неявная адресация

зарегистрировать RTI с неявной адресацией.

Урок 192 из 356 · tests/chapter_01_cpu/test_192_RTI_implied.py

Предварительное условие: шаг 191 добавил `rti. На этом шаге измените только emulator/cpu/opcodes.py, импортировав этот символ и зарегистрировав опкод $40 в OPCODE_TABLE`.

Зачем нужен этот шаг

RTI — это однобайтовая инструкция с неявной адресацией. `CPU.step()` уже извлёк $40, а все оставшиеся входные данные берутся из стека, поэтому диспетчеризация должна быть подключена напрямую к операции без чтения операнда.

Предлагаемая реализация

from emulator.cpu.instructions import rti

OPCODE_TABLE = {
    # existing entries
    0x40: rti,
}

Инварианты: сохраните все существующие записи опкодов; сопоставьте ровно целое число $40 с тем же объектом функции `rti; не добавляйте чтение операнда или обёртку; позвольте rti(cpu)` определять PC из стека, а не из последовательного выполнения.

Заблуждение: неявная адресация не означает, что байт после $40 является операндом. Его чтение привело бы к потреблению следующей инструкции до того, как RTI восстановит PC.

Вне рамок: алгоритм работы со стеком для RTI — это шаг 191. PHA и остальные инструкции работы со стеком начинаются с шага 193. Вход в NMI — это более позднее поведение, и его не следует предвосхищать здесь.

Запустить этот урок

uv run pytest tests/chapter_01_cpu/test_192_RTI_implied.py -v