091. Asl zero page
Добавить ASL Zero Page.
Урок 91 из 356 · tests/chapter_01_cpu/test_091_ASL_zero_page.py
На этом шаге добавляется первая адресуемая форма ASL. Тесты 088-090 являются предпосылками для поведения с памятью, поведения с аккумулятором и диспетчеризации аккумулятора.
Файл и символы
emulator/cpu/opcodes.py: asl_zero_page, OPCODE_TABLE[0x06]Зачем нужен этот шаг
Тесты 088-090 уже определили instructions.asl, instructions.asl_a и опкод для режима с аккумулятором. Этот переход раскрывает реализацию для памяти через первую адресуемую форму, не дублируя поведение сдвига или флагов в обработчике.
Предлагаемая реализация для этого шага
# emulator/cpu/opcodes.py
def asl_zero_page(cpu: CPU):
addr = zero_page(cpu)
asl(cpu, addr)
OPCODE_TABLE = {
# existing entries unchanged
0x06: asl_zero_page,
}Важные инварианты
zero_page(cpu)считывает один байт операнда, поэтому вся инструкция занимает два байта- операнд — это адрес;
aslвыполняет чтение/изменение/запись по этому адресу - старый бит 7 устанавливает Carry; Zero и Negative вычисляются из результата с маской
- A не изменяется
Распространённое заблуждение
Для 06 10 значение 0x10 не сдвигается напрямую. Оно указывает на RAM[$0010].
Вне рамок
- ASL Zero Page,X и абсолютные формы в тестах 092-094
- LSR, начиная с теста 095
- точность тактов и точность цикла шины при чтении/изменении/записи
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_091_ASL_zero_page.py -v