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