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