099. Lsr zero page x

Добавить LSR Zero Page,X.

Урок 99 из 356 · tests/chapter_01_cpu/test_099_LSR_zero_page_x.py

На этом шаге к форме LSR Zero Page из теста 098 добавляется индексация по X.

Файл и символы

emulator/cpu/opcodes.py: lsr_zero_page_x, OPCODE_TABLE[0x56]

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

Этот переход добавляет индексированный LSR для нулевой страницы, объединяя уже существующий резолвер zero_page_x с lsr для памяти; новая семантика сдвига не добавляется.

Предлагаемая реализация для этого шага

# emulator/cpu/opcodes.py
def lsr_zero_page_x(cpu: CPU):
    addr = zero_page_x(cpu)
    lsr(cpu, addr)

OPCODE_TABLE = {
    # existing entries unchanged
    0x56: lsr_zero_page_x,
}

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

  • вычисление эффективного адреса переносится в пределах восьми бит внутри нулевой страницы
  • считывается только один байт операнда, поэтому PC увеличивается на два с учётом опкода
  • lsr отвечает за запись в память и изменения C/Z/N
  • X выбирает пункт назначения и не изменяется

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

База 0xFE плюс X=0x03 указывает на $0001, а не на $0101.

Вне рамок

  • LSR Absolute и Absolute,X в тестах 100-101
  • изменения в адресации или поведении LSR
  • точность тактов

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

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