033. Ldx нулевая страница y
Добавление LDX нулевая страница,Y ($B6).
Урок 33 из 356 · tests/chapter_01_cpu/test_033_LDX_zero_page_y.py
Файл для изменения
emulator/cpu/opcodes.pyРасположения
opcodes.ldx_zero_page_y
opcodes.OPCODE_TABLE[$B6]Почему этот шаг существует
Тест 029 ввёл вспомогательную функцию адресации нулевой страницы,Y с оборачиванием. Этот урок даёт этой функции первое применение в опкоде, комбинируя её с чтением памяти и уже существующей инструкцией ldx.
Полная примерная реализация
# emulator/cpu/opcodes.py
def ldx_zero_page_y(cpu: CPU):
addr = zero_page_y(cpu)
value = cpu.bus.read(addr)
ldx(cpu, value)
OPCODE_TABLE = {
# Preserve existing entries.
0xB6: ldx_zero_page_y,
}Важные инварианты
- $B6 отображается на ldx_zero_page_y
- индекс — это Y, а не X
- база плюс Y оборачивается до восьми бит перед чтением с шины
- потребляется один байт операнда, а ldx владеет обновлением X и флагов
Распространённое заблуждение
Регистр назначения LDX не определяет индексный регистр: эта кодировка использует Y, и $FF,Y при Y=$01 читает $0000, а не $0100.
Вне рамок
- изменение zero_page_y или ldx
- абсолютные кодировки LDX
- тайминг циклов
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_033_LDX_zero_page_y.py -v