112. ROR для нулевой страницы
добавить код операции ROR для нулевой страницы ``0x66``.
Урок 112 из 356 · tests/chapter_01_cpu/test_112_ROR_zero_page.py
На этом шаге, после урока 111, добавьте `ror в импорты инструкций в emulator/cpu/opcodes.py` и добавьте обработчик для нулевой страницы и запись в таблице.
Зачем нужен этот шаг
Это связывает общую операцию ROR над памятью с первой компактной формой адресации, доказывая, что закодированный адрес в нулевой странице выбирает байт для циклического сдвига.
Предлагаемая реализация
def ror_zero_page(cpu: CPU):
addr = zero_page(cpu)
ror(cpu, addr)
OPCODE_TABLE = {
...
0x66: ror_zero_page,
}`zero_page уже существует в emulator/cpu/addressing_modes.py и выполняет выборку одного байта. ror уже существует в emulator/cpu/instructions.py; она выполняет чтение-модификацию-запись на шине, циклически сдвигает через старое значение Carry, устанавливает Carry по старому биту 0 и устанавливает Zero/Negative по результату. Таким образом, 66 10 изменяет cpu.bus[$0010]`, а не A, и PC в сумме увеличивается на два байта.
Заблуждение: выбранный байт `0x10 — это адрес, а не значение, передаваемое ror`. Вне области задачи: индексированный и абсолютный режимы ROR относятся к урокам 113-115; не дублируйте в этом обработчике кода операции логику адресации или циклического сдвига.
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_112_ROR_zero_page.py -v