051. Опкоды передачи регистров
Зарегистрировать четыре инструкции передачи как опкоды с неявной адресацией.
Урок 51 из 356 · tests/chapter_01_cpu/test_051_transfer_opcodes.py
Файл для обновления
emulator/cpu/opcodes.pyСимволы для обновления
the instruction import and OPCODE_TABLEПочему этот шаг нужен
Операции передачи из теста 050 уже имеют ту же форму с одним аргументом, которую CPU.step ожидает от записи в таблице опкодов. У инструкций с неявной адресацией нет операнда для декодирования, поэтому промежуточный обработчик опкода не добавил бы никакого поведения.
Полный пример реализации
# emulator/cpu/opcodes.py
from emulator.cpu.instructions import (
lda, sta, ldx, stx, ldy, sty, tax, txa, tay, tya,
)
OPCODE_TABLE = {
# ...the existing load/store entries...
0xAA: tax,
0x8A: txa,
0xA8: tay,
0x98: tya,
}Важные инварианты
- каждый опкод напрямую отображается на свою функцию-инструкцию
CPU.stepпотребляет только опкод, продвигая PC на один байт- поведение передачи и обновления флагов Zero/Negative остаётся на уровне инструкций
Распространённое заблуждение
Не создавайте обёртки вида tax_implied и не извлекайте операнд; эти четыре инструкции используют неявную адресацию и уже соответствуют контракту диспетчеризации.
Вне рамок задачи
- рефакторинг FlagsHandler, вводимый в тесте 052
- ADC и его обработчики опкодов
- учёт циклов
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_051_transfer_opcodes.py -v