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