121. And absolute x

añadir el opcode AND absolute,X ``0x3D``.

Lección 121 de 356 · tests/chapter_01_cpu/test_121_AND_absolute_x.py

Por qué existe este paso

Los programas necesitan AND sobre memoria organizada en tablas direccionada mediante una base completa más X; este paso conecta ese cálculo de dirección efectiva con el comportamiento compartido de AND.

En este paso, con la semántica de AND y el manejador absoluto sin indexar ya presentes, añade exactamente este código incremental a `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 obtiene la palabra base en little-endian y luego suma cpu.x. El manejador lee la dirección resuelta y pasa su valor a instructions.and_a`. A y Z/N cambian; X, Carry/Overflow y la memoria son invariantes; el opcode más la palabra avanza el PC tres bytes.

Concepto erróneo: X indexa la dirección decodificada, no ninguno de los bytes del operando ni el valor cargado. Fuera de alcance: AND absolute,Y y los modos indirectos (lecciones 122-124), además del trabajo de ORA/EOR/BIT en las lecciones 125-145.

Ejecutar esta lección

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