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