162. Cpy: абсолютная адресация

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

Урок 162 из 356 · tests/chapter_01_cpu/test_162_CPY_absolute.py

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

CPY с абсолютной адресацией сравнивает Y с байтом в любом месте памяти CPU и проверяет, что двухбайтовый операнд декодируется как адрес в формате little-endian.

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

def cpy_absolute(cpu: CPU):
    addr = absolute(cpu)
    value = cpu.bus.read(addr)
    cpy(cpu, value)

OPCODE_TABLE = {
    ...
    0xCC: cpy_absolute,
}

`emulator/cpu/addressing_modes.py::absolute потребляет адрес в формате little-endian через CPU.fetch_word; поэтому CC 00 02 сравнивает Y с байтом, считанным из $0200, через instructions.cpy`.

Инварианты: Y и память не изменяются; изменяются только C/Z/N, а код операции плюс двухбайтовый операнд продвигают PC на три байта. Заблуждение: `00 02 — это не литеральное значение 0x0002`, с которым нужно сравнивать, и не big-endian адрес.

Вне рамок этого шага: относительная адресация и ветвления начинаются с урока 163.

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

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