157. Cpx zero page

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

Урок 157 из 356 · tests/chapter_01_cpu/test_157_CPX_zero_page.py

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

CPX для нулевой страницы отличает компактный адрес памяти от непосредственного значения и передаёт считанный байт уже существующему примитиву сравнения.

На этом шаге, когда `cpx и непосредственный режим уже есть, добавьте в emulator/cpu/opcodes.py`:

def cpx_zero_page(cpu: CPU):
    addr = zero_page(cpu)
    value = cpu.bus.read(addr)
    cpx(cpu, value)

OPCODE_TABLE = {
    ...
    0xE4: cpx_zero_page,
}

`emulator/cpu/addressing_modes.py::zero_page считывает однобайтовый адрес; обработчик должен прочитать значение по этому адресу перед вызовом instructions.cpx`. Меняются только C/Z/N; X и память остаются неизменными, а опкод вместе с операндом сдвигают PC на два байта.

Заблуждение: в отличие от непосредственного CPX, байт операнда указывает на ячейку памяти, а не является сравниваемым значением. Вне рамок: CPX absolute (158) и вся работа над CPY (159-162).

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

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