111. ROR для аккумулятора
предоставить уже реализованный ROR A как код операции ``0x6A``.
Урок 111 из 356 · tests/chapter_01_cpu/test_111_ROR_accumulator.py
На этом шаге используйте `ror и ror_a из уроков 109-110 и добавьте только интеграцию кода операции для аккумулятора в emulator/cpu/opcodes.py`.
Зачем нужен этот шаг
ROR A требует записи в таблице кодов операций, чтобы программы могли обращаться к примитиву для аккумулятора при обычном выполнении CPU без ошибочной выборки операнда.
Предлагаемая реализация
from emulator.cpu.instructions import (..., ror_a)
OPCODE_TABLE = {
...
0x6A: ror_a,
}Прямая запись в таблице является полным примером реализации: `CPU.step уже выполнил выборку кода операции, а ror_a(cpu)` не нуждается в декодере операнда. Она циклически сдвигает A вправо через старое значение Carry, переносит старый бит 0 из A в Carry, обновляет Zero/Negative по 8-битному результату и оставляет память нетронутой. Поэтому однобайтовая инструкция увеличивает PC ровно на единицу.
Заблуждение: режим аккумулятора — это не обертка над режимом адресации; добавление обработчика `ror_accumulator или выборка операнда потребовала бы дополнительного байта. Вне области данного шага: обработчики/коды операций для памяти 0x66, 0x76, 0x6E и 0x7E` относятся к урокам 112-115; AND начинается с урока 116.
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_111_ROR_accumulator.py -v