044. Ldy zero page x

Добавьте LDY zero page,X ($B4).

Урок 44 из 356 · tests/chapter_01_cpu/test_044_LDY_zero_page_x.py

Файл для обновления

emulator/cpu/opcodes.py

Расположения

opcodes imports of zero_page_x and ldy
opcodes.ldy_zero_page_x
opcodes.OPCODE_TABLE[$B4]

Зачем нужен этот шаг

Эта кодировка повторно использует уже реализованное вычисление адреса zero-page,X, включая перенос в пределах восьми бит, перед загрузкой вычисленного байта через базовую инструкцию ldy.

Полный пример реализации

# emulator/cpu/opcodes.py
from emulator.cpu.addressing_modes import zero_page_x
from emulator.cpu.instructions import ldy


def ldy_zero_page_x(cpu: CPU):
    addr = zero_page_x(cpu)
    value = cpu.bus.read(addr)
    ldy(cpu, value)


OPCODE_TABLE = {
    # Preserve existing entries.
    0xB4: ldy_zero_page_x,
}

Важные инварианты

  • $B4 сопоставляется с ldy_zero_page_x и потребляет один байт операнда
  • операнд нулевой страницы индексируется регистром X, а не Y
  • эффективный адрес переносится в пределах страницы $00
  • вычисленное значение из памяти передаётся в ldy, которая обновляет Zero и Negative

Распространённое заблуждение

LDY указывает регистр назначения, а не индексный регистр. Кодировка $B4 использует X для вычисления адреса.

Вне рамок задания

  • кодировки LDY absolute и absolute,X
  • изменение zero_page_x
  • тайминг циклов

Запустить этот урок

uv run pytest tests/chapter_01_cpu/test_044_LDY_zero_page_x.py -v