149. Cmp zero page x

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

Урок 149 из 356 · tests/chapter_01_cpu/test_149_CMP_zero_page_x.py

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

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

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

def cmp_zero_page_x(cpu: CPU):
    addr = zero_page_x(cpu)
    value = cpu.bus.read(addr)
    cmp(cpu, value)

OPCODE_TABLE = {
    ...
    0xD5: cmp_zero_page_x,
}

`addressing_modes.zero_page_x вычисляет (operand + X) & 0xFF` перед чтением по шине. C/Z/N могут измениться; A, Overflow, X, Y и память остаются неизменными; опкод и операнд продвигают PC на два байта.

Заблуждение: индексирование за пределы `$FF` не переносится на первую страницу; оно оборачивается в пределах нулевой страницы. Вне рамок урока: абсолютный CMP начинается в уроке 150, а его индексированные и косвенные варианты отложены до уроков 151–154.

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

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