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