032. Ldx нулевая страница

Добавление LDX нулевая страница ($A6).

Урок 32 из 356 · tests/chapter_01_cpu/test_032_LDX_zero_page.py

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

emulator/cpu/opcodes.py

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

opcodes.ldx_zero_page
opcodes.OPCODE_TABLE[$A6]

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

После непосредственной LDX этот урок добавляет первую кодировку LDX, работающую с памятью. Обработчик комбинирует уже существующее вычисление адреса нулевой страницы, чтение с шины и уже существующую операцию над значением ldx.

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

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


OPCODE_TABLE = {
    # Preserve existing entries.
    0xA6: ldx_zero_page,
}

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

  • $A6 отображается на ldx_zero_page
  • zero_page извлекает один байт операнда и возвращает адрес на странице $00
  • обработчик читает этот адрес и передаёт полученное значение в ldx
  • вся инструкция увеличивает PC на два байта, а ldx обновляет флаги

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

Не передавайте адрес нулевой страницы напрямую в ldx; LDX загружает байт, хранящийся по этому адресу.

Вне рамок

  • индексированные и абсолютные кодировки LDX
  • изменения в zero_page или ldx
  • тайминг циклов

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

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