150. Cmp absolute

добавить опкод CMP absolute ``0xCD``.

Урок 150 из 356 · tests/chapter_01_cpu/test_150_CMP_absolute.py

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

Абсолютный CMP позволяет сравнить A с байтом в любом месте памяти CPU, сохраняя разделение между декодированием little-endian эффективного адреса и семантикой флагов.

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

def cmp_absolute(cpu: CPU):
    addr = absolute(cpu)
    value = cpu.bus.read(addr)
    cmp(cpu, value)

OPCODE_TABLE = {
    ...
    0xCD: cmp_absolute,
}

`emulator/cpu/addressing_modes.py::absolute получает little-endian слово через CPU.fetch_word; таким образом, CD 00 02 сравнивает A со значением, считанным по адресу $0200`. C/Z/N могут измениться; A, Overflow, X, Y и память остаются неизменными; опкод и слово продвигают PC на три байта.

Заблуждение: слово операнда является адресом, а не непосредственным значением для сравнения, и его байты не в формате big-endian. Вне рамок урока: CMP absolute,X, absolute,Y, (indirect,X) и (indirect),Y — уроки 151–154; CPX/CPY следуют далее.

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

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