050. Инструкции пересылки
Добавьте базовые инструкции TAX, TXA, TAY и TYA.
Урок 50 из 356 · tests/chapter_01_cpu/test_050_transfer_instructions.py
Файл для обновления
emulator/cpu/instructions.pyРасположения
instructions.tax
instructions.txa
instructions.tay
instructions.tyaЗачем нужен этот шаг
Эти операции с неявной адресацией копируют значения между A, X и Y без извлечения операнда. Затем к каждому значению назначения применяется то же обновление Zero/Negative, что уже используется инструкциями загрузки.
Полный пример реализации
# emulator/cpu/instructions.py
def tax(cpu: CPU):
cpu.x = cpu.a
cpu._update_zero_and_negative_flags(cpu.x)
def txa(cpu: CPU):
cpu.a = cpu.x
cpu._update_zero_and_negative_flags(cpu.a)
def tay(cpu: CPU):
cpu.y = cpu.a
cpu._update_zero_and_negative_flags(cpu.y)
def tya(cpu: CPU):
cpu.a = cpu.y
cpu._update_zero_and_negative_flags(cpu.a)Важные инварианты
- TAX копирует A в X, TXA копирует X в A, TAY копирует A в Y, а TYA копирует Y в A
- исходный регистр остаётся неизменным
- Zero устанавливается ровно для $00, а Negative отражает бит 7 регистра назначения
- оба флага также сбрасываются, когда скопированное значение перестаёт им удовлетворять
- эти функции не извлекают байты и не выполняют обращений к шине
Распространённое заблуждение
Обновление только тех флагов, которые становятся установленными, оставляет устаревшее состояние. После каждого копирования повторно используйте cpu._update_zero_and_negative_flags с регистром назначения.
Вне рамок задания
- импорты опкодов пересылки и записи в OPCODE_TABLE, вводимые в Test 051
- пересылки с участием указателя стека
- тайминг циклов
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_050_transfer_instructions.py -v