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