035. Ldx абсолютный y
Добавление LDX абсолютный,Y ($BE).
Урок 35 из 356 · tests/chapter_01_cpu/test_035_LDX_absolute_y.py
Файл для изменения
emulator/cpu/opcodes.pyРасположения
opcodes.ldx_absolute_y
opcodes.OPCODE_TABLE[$BE]Почему этот шаг существует
Этот урок завершает семейство опкодов LDX, доступное на данный момент, повторно используя уже существующую вспомогательную функцию абсолютной адресации,Y. Как и в других формах работы с памятью, обработчик вычисляет и читает операнд перед передачей его значения в ldx.
Полная примерная реализация
# emulator/cpu/opcodes.py
def ldx_absolute_y(cpu: CPU):
addr = absolute_y(cpu)
value = cpu.bus.read(addr)
ldx(cpu, value)
OPCODE_TABLE = {
# Preserve existing entries.
0xBE: ldx_absolute_y,
}Важные инварианты
- $BE отображается на ldx_absolute_y
- базовый адрес в формате little-endian индексируется с помощью Y, а не X
- байт по индексированному адресу передаётся в ldx
- потребляются два байта операнда, поэтому вся инструкция увеличивает PC на три
Распространённое заблуждение
Не оборачивайте абсолютный,Y адрес в пределах страницы $00; в отличие от нулевой страницы,Y, его индексированный адрес является 16-битным результатом.
Вне рамок
- инструкции store-X и load-Y
- изменения в absolute_y или ldx
- тайминг циклов и штрафы за пересечение страниц
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_035_LDX_absolute_y.py -v