153. Cmp indirect x

добавить опкод CMP (indirect,X) ``0xC1``.

Урок 153 из 356 · tests/chapter_01_cpu/test_153_CMP_indirect_x.py

Зачем нужен этот шаг

Форма (indirect,X) позволяет CMP использовать предварительно индексированные таблицы указателей в нулевой странице, оставляя разрешение указателя вспомогательной функции адресации.

На этом шаге, после уроков 146-152, добавьте точно следующее в `emulator/cpu/opcodes.py`:

def cmp_indirect_x(cpu: CPU):
    addr = indirect_x(cpu)
    value = cpu.bus.read(addr)
    cmp(cpu, value)

OPCODE_TABLE = {
    ...
    0xC1: cmp_indirect_x,
}

`emulator/cpu/addressing_modes.py::indirect_x считывает операнд, вычисляет (base + X) & 0xFF` и читает указатель в порядке little-endian, у которого поиск старшего байта тоже происходит с переносом в пределах нулевой страницы. Затем обработчик читает значение по этому указателю. Меняются только C/Z/N; A, X, байты указателя, целевая память и Overflow не изменяются; опкод и операнд сдвигают PC на два байта.

Заблуждение: X применяется до разыменования, а не к итоговому 16-битному адресу. Вне рамок: CMP (indirect),Y (154) и CPX/CPY (155-162).

Запустить этот урок

uv run pytest tests/chapter_01_cpu/test_153_CMP_indirect_x.py -v