113. ROR для нулевой страницы с индексом X
добавить код операции ``0x76`` для ROR zero-page,X.
Урок 113 из 356 · tests/chapter_01_cpu/test_113_ROR_zero_page_x.py
На этом шаге, поскольку `ror импортирована в уроке 112, добавьте только обработчик индексированного режима нулевой страницы и запись в таблице в emulator/cpu/opcodes.py`.
Зачем нужен этот шаг
Индексированный режим нулевой страницы для ROR должен объединять X с восьмибитным базовым адресом, включая заворачивание в пределах нулевой страницы, перед применением уже заданных правил циклического сдвига.
Предлагаемая реализация
def ror_zero_page_x(cpu: CPU):
addr = zero_page_x(cpu)
ror(cpu, addr)
OPCODE_TABLE = {
...
0x76: ror_zero_page_x,
}`emulator/cpu/addressing_modes.py::zero_page_x выполняет выборку базового байта и вычисляет (base + cpu.x) & 0xFF. instructions.ror отвечает за чтение/запись памяти и изменения C/Z/N. Инвариантом является заворачивание нулевой страницы: база 0xFE плюс X 0x03 указывают на 0x0001, а не на 0x0101`; PC увеличивается на два байта, и A не изменяется.
Заблуждение: обычного целочисленного сложения недостаточно для индексации в нулевой странице. Вне области задачи: ROR в режимах absolute и absolute,X (уроки 114-115), а также любая новая реализация циклического сдвига или вспомогательная функция адресации.
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_113_ROR_zero_page_x.py -v