030. Instruction ldx

Добавление базовой инструкции LDX.

Урок 30 из 356 · tests/chapter_01_cpu/test_030_instruction_ldx.py

Файл для обновления

emulator/cpu/instructions.py

Расположение

instructions.ldx, beside lda and sta

Зачем нужен этот шаг

LDX открывает следующее семейство инструкций загрузки, сохраняя границу между инструкцией и опкодом, установленную для LDA. Базовая инструкция получает уже разрешённое значение, сохраняет его в X и применяет те же правила Zero/Negative, что и lda.

Полная реализация примера

# emulator/cpu/instructions.py
def ldx(cpu, value) -> None:
    cpu.x = value
    cpu._update_zero_and_negative_flags(cpu.x)

Важные инварианты

  • ldx получает значение, а не адрес
  • X получает значение, а A и Y остаются без изменений
  • Zero устанавливается ровно для $00 и сбрасывается в остальных случаях
  • Negative повторяет бит 7 и сбрасывается, когда бит 7 равен нулю

Распространённое заблуждение

Не выбирайте операнд и не читайте шину внутри ldx; обработчики опкодов выполнят адресацию и доступ к памяти до вызова этой инструкции.

Вне рамок

  • все обработчики опкодов LDX и записи в таблице опкодов
  • интеграция zero-page,Y с опкодом
  • последующий рефакторинг FlagsHandler

Запустить этот урок

uv run pytest tests/chapter_01_cpu/test_030_instruction_ldx.py -v