098. Lsr zero page

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

Урок 98 из 356 · tests/chapter_01_cpu/test_098_LSR_zero_page.py

На этом шаге lsr для памяти из теста 095 раскрывается через первый адресуемый опкод.

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

emulator/cpu/opcodes.py: imported lsr, lsr_zero_page, OPCODE_TABLE[0x46]

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

Поскольку lsr для памяти уже определён тестом 095, этот переход вводит его первый адресуемый опкод и сохраняет декодирование операнда отдельно от поведения инструкции.

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

# emulator/cpu/opcodes.py
from emulator.cpu.instructions import lsr

def lsr_zero_page(cpu: CPU):
    addr = zero_page(cpu)
    lsr(cpu, addr)

OPCODE_TABLE = {
    # existing entries unchanged
    0x46: lsr_zero_page,
}

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

  • zero_page(cpu) считывает один операнд и даёт адрес в диапазоне $0000-$00FF
  • lsr выполняет чтение/изменение/запись и заменяет C/Z/N
  • двухбайтовая инструкция увеличивает PC на два
  • A не изменяется

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

Для 46 10 операнд 0x10 указывает на RAM[$0010]; это не сдвигаемое значение.

Вне рамок

  • индексированные и абсолютные формы LSR в тестах 099-101
  • изменения в zero_page или lsr
  • точное по тактам поведение шины

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

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