141. Eor indirect x
добавить опкод EOR (indirect,X) ``0x41``.
Урок 141 из 356 · tests/chapter_01_cpu/test_141_EOR_indirect_x.py
Зачем нужен этот шаг
Предындексированный косвенный режим EOR обеспечивает доступ через таблицу указателей в нулевой странице, сохраняя разделение между вычислением эффективного адреса и операцией исключающего ИЛИ.
На этом шаге уроки 134–140 уже предоставляют `or_e, импорт его опкода и предыдущие режимы адресации EOR. Добавьте в emulator/cpu/opcodes.py` ровно следующее:
def eor_indirect_x(cpu: CPU):
addr = indirect_x(cpu)
value = cpu.bus.read(addr)
or_e(cpu, value)
OPCODE_TABLE = {
...
0x41: eor_indirect_x,
}`emulator/cpu/addressing_modes.py::indirect_x прибавляет X к операнду в нулевой странице, считывает по этому адресу обёрнутый little-endian указатель и возвращает целевой адрес. Обработчик читает значение по этому адресу и делегирует семантику XOR функции emulator/cpu/instructions.py::or_e`. A и флаги Z/N могут измениться; Carry, Overflow, X, Y и память остаются неизменными; опкод и операнд продвигают PC на два байта.
Заблуждение: X индексирует расположение указателя в нулевой странице, а не конечный адрес. Вне рамок урока: EOR (indirect),Y — урок 142; BIT начинается в уроке 143.
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_141_EOR_indirect_x.py -v