118. AND для нулевой страницы
добавить код операции AND для нулевой страницы ``0x25``.
Урок 118 из 356 · tests/chapter_01_cpu/test_118_AND_zero_page.py
На этом шаге, поскольку `and_a импортирована в уроке 117, добавьте только обработчик нулевой страницы и запись в таблице в emulator/cpu/opcodes.py`.
Зачем нужен этот шаг
AND должен также получать значения из памяти; режим нулевой страницы проверяет, что байт-операнд трактуется как адрес, а не как непосредственное значение.
Предлагаемая реализация
def and_zero_page(cpu: CPU):
addr = zero_page(cpu)
value = cpu.bus.read(addr)
and_a(cpu, value)
OPCODE_TABLE = {
...
0x25: and_zero_page,
}`addressing_modes.zero_page выполняет выборку однобайтового адреса; в отличие от непосредственного режима, обработчик должен считать значение по этому адресу перед вызовом instructions.and_a. 25 10 использует cpu.bus[$0010]`, изменяет A и Z/N, сохраняет Carry/Overflow и память и увеличивает PC на два байта.
Заблуждение: нельзя ни передавать адрес `0x10 напрямую в and_a, ни записывать результат обратно в $0010`; AND — не инструкция чтения-модификации-записи. Вне области задачи: zero-page,X и более широкие режимы AND (уроки 119-124).
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_118_AND_zero_page.py -v