090. Asl accumulator

Подключить опкод ASL для аккумулятора.

Урок 90 из 356 · tests/chapter_01_cpu/test_090_ASL_accumulator.py

На этом шаге используйте asl_a из теста 089 и добавьте только диспетчеризацию для аккумулятора. Тесты 091-094 добавляют формы для памяти.

Расположение в продакшн-коде и символы

emulator/cpu/opcodes.py: imported `asl_a` and `OPCODE_TABLE[0x0A]`

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

Опкод 0x0A выбирает сам аккумулятор, поэтому диспетчеризация может вызывать asl_a(cpu) напрямую, а не разрешать адрес в памяти.

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

# emulator/cpu/opcodes.py
from emulator.cpu.instructions import asl_a  # alongside existing imports

OPCODE_TABLE = {
    # ... existing entries ...
    0x0A: asl_a,
}

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

  • опкод 0x0A отображается точно на функцию asl_a(cpu)
  • не выполняется ни один помощник адресации, ни чтение/запись памяти
  • эта однобайтовая инструкция продвигает PC ровно на один
  • функция из теста 089 отвечает за маскирование A и обновление C/Z/N

Частое заблуждение

ASL A — это не ASL для нулевой страницы с пропущенным операндом; это отдельная форма для аккумулятора, и поэтому ей не нужна обёртка адресации asl_*.

Вне рамок

  • asl_zero_page, asl_zero_page_x, asl_absolute и asl_absolute_x
  • отображения 0x06, 0x16, 0x0E и 0x1E из тестов 091-094
  • тайминги циклов и точное с точки зрения шины поведение чтения-модификации-записи

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

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