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