117. AND для непосредственной адресации

предоставить AND с непосредственной адресацией как код операции ``0x29``.

Урок 117 из 356 · tests/chapter_01_cpu/test_117_AND_immediate.py

На этом шаге используйте инструкцию из урока 116 и добавьте ее импорт, обработчик непосредственного режима и запись в таблице кодов операций в `emulator/cpu/opcodes.py`.

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

Непосредственная форма делает только что введенный примитив AND исполняемым с литеральным операндом и устанавливает его первую интеграцию с таблицей кодов операций.

Предлагаемая реализация

from emulator.cpu.instructions import (..., and_a)

def and_immediate(cpu: CPU):
    and_a(cpu, immediate(cpu))

OPCODE_TABLE = {
    ...
    0x29: and_immediate,
}

`emulator/cpu/addressing_modes.py::immediate вызывает CPU.fetch_byte и возвращает этот байт как значение. and_a` сохраняет A & value и изменяет только Z/N, поэтому Carry и Overflow остаются инвариантными; код операции и операнд увеличивают PC на два байта, и память не изменяется.

Заблуждение: непосредственный режим не возвращает адрес, поэтому лишний `cpu.bus.read` интерпретировал бы литерал как указатель. Вне области задачи: обработчики AND от нулевой страницы до indirect,Y (уроки 118-124) и работа над ORA/EOR/BIT в уроках 125-145.

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

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