151. Cmp absolute x

добавить опкод CMP absolute,X ``0xDD``.

Урок 151 из 356 · tests/chapter_01_cpu/test_151_CMP_absolute_x.py

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

Absolute,X позволяет CMP сравнивать A с индексированными таблицами за пределами нулевой страницы, оставляя вычисление адреса отдельным от семантики сравнения.

На этом шаге уроки 146-150 уже предоставляют `cmp, импорт его опкода и предыдущие режимы CMP. Добавьте следующее в emulator/cpu/opcodes.py`:

def cmp_absolute_x(cpu: CPU):
    addr = absolute_x(cpu)
    value = cpu.bus.read(addr)
    cmp(cpu, value)

OPCODE_TABLE = {
    ...
    0xDD: cmp_absolute_x,
}

`emulator/cpu/addressing_modes.py::absolute_x` считывает слово в порядке little-endian и прибавляет X; обработчик читает значение по этому эффективному адресу и сравнивает его с A. Меняются только C/Z/N; A, X, память и Overflow не изменяются, а опкод вместе со словом сдвигают PC на три байта.

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

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

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