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-$00FFlsrвыполняет чтение/изменение/запись и заменяет 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