100. Lsr absolute

Добавить LSR Absolute.

Урок 100 из 356 · tests/chapter_01_cpu/test_100_LSR_absolute.py

На этом шаге LSR для памяти раскрывается через уже существующий 16-битный резолвер absolute.

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

emulator/cpu/opcodes.py: lsr_absolute, OPCODE_TABLE[0x4E]

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

После форм для нулевой страницы этот переход раскрывает LSR для памяти через уже существующий 16-битный резолвер absolute, сохраняя реализацию на уровне инструкций.

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

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

OPCODE_TABLE = {
    # existing entries unchanged
    0x4E: lsr_absolute,
}

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

  • absolute(cpu) декодирует сначала младший байт, затем старший
  • два байта операнда делают эту инструкцию трёхбайтовой
  • lsr считывает и записывает по эффективному адресу и заменяет C/Z/N
  • A и индексные регистры остаются неизменными

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

Для 4E 00 02 цель в порядке little-endian — $0200, а не $0002.

Вне рамок

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

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

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