031. Ldx непосредственный

Добавление LDX непосредственный ($A2).

Урок 31 из 356 · tests/chapter_01_cpu/test_031_LDX_immediate.py

Файл для изменения

emulator/cpu/opcodes.py

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

opcodes import of ldx
opcodes.ldx_immediate
opcodes.OPCODE_TABLE[$A2]

Почему этот шаг существует

Тест 030 ввёл инструкцию ldx на уровне значений. Этот урок связывает её первую кодировку машинного кода, извлекая непосредственный операнд и делегируя поведение регистра и флагов уже существующей инструкции.

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

# emulator/cpu/opcodes.py
from emulator.cpu.instructions import lda, sta, ldx


def ldx_immediate(cpu: CPU):
    ldx(cpu, immediate(cpu))


OPCODE_TABLE = {
    # Preserve existing entries.
    0xA2: ldx_immediate,
}

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

  • $A2 отображается на ldx_immediate
  • непосредственная адресация извлекает ровно один байт, поэтому вся инструкция увеличивает PC на два
  • сам байт операнда загружается в X; он не используется как адрес
  • ldx по-прежнему отвечает за обновление флагов Zero и Negative

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

Не читайте память по числовому значению операнда. A2 42 загружает в X само значение $42.

Вне рамок

  • кодировки LDX в режимах нулевая страница, нулевая страница,Y и абсолютный
  • изменения в immediate или ldx
  • тайминг циклов

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

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