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