115. ROR для абсолютной адресации с индексом X
завершить ROR кодом операции ``0x7E`` для absolute,X.
Урок 115 из 356 · tests/chapter_01_cpu/test_115_ROR_absolute_x.py
На этом шаге, после урока 114, добавьте только обработчик Absolute,X и запись в таблице в `emulator/cpu/opcodes.py`.
Зачем нужен этот шаг
Это завершает покрытие режимов адресации ROR, разрешая полный базовый адрес в формате little-endian плюс X перед циклическим сдвигом выбранного байта памяти.
Предлагаемая реализация
def ror_absolute_x(cpu: CPU):
addr = absolute_x(cpu)
ror(cpu, addr)
OPCODE_TABLE = {
...
0x7E: ror_absolute_x,
}`emulator/cpu/addressing_modes.py::absolute_x выполняет выборку 16-битной базы в формате little-endian и затем добавляет cpu.x. 7E 00 02 с X 0x04 поэтому выполняет чтение/модификацию/запись $0204 посредством instructions.ror. A остается неизменным, C/Z/N сохраняют семантику ROR, и PC увеличивается на три байта. В отличие от zero-page,X, absolute,X не заворачивает на $00FF`.
Заблуждение: X индексирует декодированный адрес, а не какой-либо из байтов операнда и не загруженное значение. Вне области задачи: тайминг тактов/перехода через страницу и вся работа над AND, которая начинается с урока 116; после этого урока дополнительные режимы ROR не добавлялись.
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_115_ROR_absolute_x.py -v