148. Cmp zero page

добавить опкод CMP zero-page ``0xC5``.

Урок 148 из 356 · tests/chapter_01_cpu/test_148_CMP_zero_page.py

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

CMP должен сравнивать A не только с литералами, но и с памятью; эта форма вычисляет компактный адрес в нулевой странице и передаёт считанный байт общей логике сравнения.

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

def cmp_zero_page(cpu: CPU):
    addr = zero_page(cpu)
    value = cpu.bus.read(addr)
    cmp(cpu, value)

OPCODE_TABLE = {
    ...
    0xC5: cmp_zero_page,
}

Операнд задаёт адрес в нулевой странице; с A сравнивается значение, считанное по шине, а не сам байт адреса. C/Z/N могут измениться; A, Overflow, X, Y и память остаются неизменными; PC продвигается на два байта.

Заблуждение: `C5 10 сравнивает со значением RAM[$0010], а не с литералом $10`. Вне рамок урока: индексированная нулевая страница — урок 149, а более широкие и косвенные режимы CMP — уроки 150–154.

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

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