161. Cpy: нулевая страница

добавить код операции CPY с адресацией нулевой страницы ``0xC4``.

Урок 161 из 356 · tests/chapter_01_cpu/test_161_CPY_zero_page.py

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

CPY с адресацией нулевой страницы интерпретирует свой операнд как компактный адрес в памяти и сравнивает Y с байтом, считанным по этому адресу, через общий примитив CPY.

На этом шаге уроки 159-160 уже предоставляют `instructions.cpy, импорт его кода операции и CPY с непосредственной адресацией. Добавьте в emulator/cpu/opcodes.py` в точности следующее:

def cpy_zero_page(cpu: CPU):
    addr = zero_page(cpu)
    value = cpu.bus.read(addr)
    cpy(cpu, value)

OPCODE_TABLE = {
    ...
    0xC4: cpy_zero_page,
}

`emulator/cpu/addressing_modes.py::zero_page потребляет однобайтовый операнд как адрес; затем обработчик считывает байт по этому адресу и делегирует семантику флагов функции emulator/cpu/instructions.py::cpy`.

Инварианты: Y и память не изменяются; CPY обновляет только C/Z/N, а код операции плюс операнд продвигают PC на два байта. Заблуждение: операнд — это не значение, сравниваемое с Y; он указывает байт нулевой страницы, содержащий это значение.

Вне рамок этого шага: CPY с абсолютной адресацией `0xCC` — это урок 162. CMP/CPX и CPY с непосредственной адресацией относятся к урокам 146-160.

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

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