034. Ldx абсолютный

Добавление LDX абсолютный ($AE).

Урок 34 из 356 · tests/chapter_01_cpu/test_034_LDX_absolute.py

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

emulator/cpu/opcodes.py

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

opcodes.ldx_absolute
opcodes.OPCODE_TABLE[$AE]

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

Этот урок расширяет LDX с однобайтовых адресов до полного 16-битного адреса памяти, сохраняя установленную границу: absolute декодирует операнд, обработчик читает память, а ldx обновляет X и его флаги.

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

# emulator/cpu/opcodes.py
def ldx_absolute(cpu: CPU):
    addr = absolute(cpu)
    value = cpu.bus.read(addr)
    ldx(cpu, value)


OPCODE_TABLE = {
    # Preserve existing entries.
    0xAE: ldx_absolute,
}

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

  • $AE отображается на ldx_absolute
  • absolute потребляет младший байт операнда перед старшим байтом операнда
  • один байт читается по полученному 16-битному адресу и передаётся в ldx
  • вся инструкция увеличивает PC на три байта

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

AE 00 02 адресует $0200, поскольку операнды 6502 хранятся в порядке little-endian; она не адресует $0002 и не загружает напрямую ни один из байтов операнда.

Вне рамок

  • LDX абсолютный,Y
  • изменения в absolute или ldx
  • тайминг циклов

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

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