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