121. AND, абсолютная адресация с X

добавить опкод AND absolute,X ``0x3D``.

Урок 121 из 356 · tests/chapter_01_cpu/test_121_AND_absolute_x.py

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

Программам нужен AND для табличной памяти, адресуемой полной базой плюс X; этот шаг связывает вычисление эффективного адреса с общим поведением AND.

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

def and_absolute_x(cpu: CPU):
    addr = absolute_x(cpu)
    value = cpu.bus.read(addr)
    and_a(cpu, value)

OPCODE_TABLE = {
    ...
    0x3D: and_absolute_x,
}

`emulator/cpu/addressing_modes.py::absolute_x считывает базовое слово в порядке little-endian, затем прибавляет cpu.x. Обработчик читает значение по вычисленному адресу и передаёт его в instructions.and_a`. A и Z/N изменяются; X, флаг переноса/переполнения и память не меняются; опкод плюс слово продвигают PC на три байта.

Заблуждение: X индексирует декодированный адрес, а не байт операнда или загруженное значение. Вне рамок: AND absolute,Y и режимы косвенной адресации (уроки 122-124), а также работа над ORA/EOR/BIT в уроках 125-145.

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

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