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