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