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