097. Lsr accumulator

Добавить опкод LSR Accumulator.

Урок 97 из 356 · tests/chapter_01_cpu/test_097_LSR_accumulator.py

На этом шаге поведение с аккумулятором из теста 096 раскрывается через диспетчеризацию опкодов.

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

emulator/cpu/opcodes.py: imported lsr_a, OPCODE_TABLE[0x4A]

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

Тест 096 определил поведение с аккумулятором. Этот переход обеспечивает прямой доступ диспетчеризации CPU к этой функции, поскольку режим с аккумулятором не имеет операнда или декодирования адреса.

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

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

OPCODE_TABLE = {
    # existing entries unchanged
    0x4A: lsr_a,
}

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

  • таблица напрямую отображается на instructions.lsr_a; обёртка не нужна
  • ни один вспомогательный обработчик адресации не считывает байты
  • CPU.step уже считал опкод, поэтому PC увеличивается ровно на один байт
  • изменяться могут только A и C/Z/N

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

Режим с аккумулятором — это не режим нулевой страницы с неявным адресом; у 0x4A нет операнда.

Вне рамок

  • опкоды LSR для памяти в тестах 098-101
  • изменения в диспетчеризации CPU или lsr_a
  • точность тактов

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

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