187. Rts implied
подключить опкод RTS implied $60.
Урок 187 из 356 · tests/chapter_01_cpu/test_187_RTS_implied.py
Предусловие: на шаге 186 была добавлена `rts. На этом шаге добавьте её импорт и прямую привязку в таблице в emulator/cpu/opcodes.py`:
from emulator.cpu.instructions import rts
OPCODE_TABLE = {
# existing entries...
0x60: rts,
}Опкод
0x60 -> RTSЦель
добавить опкод 0x60 в OPCODE_TABLE.
Рекомендации
RTS использует подразумеваемую (implied) адресацию. Это значит, что у опкода нет операндных байтов. Инструкция получает всю необходимую информацию из стека CPU.
Пример
60 -> RTSШаги выполнения
1. CPU.step() fetches opcode 0x60.
2. OPCODE_TABLE dispatches directly to rts(cpu).
3. RTS pulls the return address from the stack.
4. RTS sets PC to pulled_address + 1.Частая ошибка
Не считывайте операндный байт для RTS. Это инструкция с подразумеваемой адресацией.
Зачем нужен этот шаг
`CPU.step уже считал единственный байт опкода, а rts` получает слово возврата из стека, поэтому обёртка или режим адресации не нужны. Инварианты: $60 отображается напрямую на функцию с одним аргументом; диспетчеризация не потребляет $8001; RTS сама выполняет два извлечения и обновление PC. Заблуждение: не каждый опкод требует именованного обработчика.
За рамками шага: вспомогательные функции флагов и BRK — шаги 188–190; RTI и опкод $40 — шаги 191–192.
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_187_RTS_implied.py -v