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