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