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