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