120. AND для абсолютной адресации
добавить код операции AND для абсолютной адресации ``0x2D``.
Урок 120 из 356 · tests/chapter_01_cpu/test_120_AND_absolute.py
На этом шаге используйте `and_a`, ее импорт для кодов операций и более простые режимы из уроков 116-119, затем добавьте только обработчик абсолютного режима и запись в таблице.
Зачем нужен этот шаг
Абсолютный режим позволяет AND читать из всего адресного пространства CPU и проверяет разделение между декодированием адреса в формате little-endian и логической операцией.
Предлагаемая реализация в `emulator/cpu/opcodes.py`:
def and_absolute(cpu: CPU):
addr = absolute(cpu)
value = cpu.bus.read(addr)
and_a(cpu, value)
OPCODE_TABLE = {
...
0x2D: and_absolute,
}`emulator/cpu/addressing_modes.py::absolute получает слово в формате little-endian через CPU.fetch_word. Поэтому 2D 00 02 читает значение по адресу $0200 и передает его в instructions.and_a`. A и Z/N изменяются; Carry/Overflow и память остаются инвариантными; код операции плюс слово увеличивают PC на три байта.
Заблуждение: слово-операнд — это адрес, а не значение, и его байты следуют не в порядке big-endian. Последующая работа вне области задачи: AND absolute,X, absolute,Y, (indirect,X) и (indirect),Y относятся к урокам 121-124; ORA/EOR/BIT — к урокам 125-145.
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_120_AND_absolute.py -v