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