151. Cmp absoluto x

añade el opcode CMP absolute,X ``0xDD``.

Lección 151 de 356 · tests/chapter_01_cpu/test_151_CMP_absolute_x.py

Por qué existe este paso

Absolute,X permite que CMP compare A con tablas indexadas fuera de la página cero mientras mantiene el cálculo de direcciones separado de la semántica de la comparación.

En este paso, las lecciones 146-150 ya proporcionan `cmp, la importación de su opcode y los modos CMP anteriores. Añade lo siguiente a emulator/cpu/opcodes.py`:

def cmp_absolute_x(cpu: CPU):
    addr = absolute_x(cpu)
    value = cpu.bus.read(addr)
    cmp(cpu, value)

OPCODE_TABLE = {
    ...
    0xDD: cmp_absolute_x,
}

`emulator/cpu/addressing_modes.py::absolute_x` obtiene la palabra base little-endian y suma X; el handler lee esa dirección efectiva y compara su valor con A. Solo cambian C/Z/N; A, X, la memoria y Overflow son invariantes, y el opcode más la palabra avanzan PC tres bytes.

Concepto erróneo: X indexa la dirección decodificada, no los bytes del operando, y no se modifica a sí mismo. Fuera de alcance: CMP absolute,Y y los modos indirectos (lecciones 152-154), además del trabajo con CPX/CPY en las lecciones 155-162.

Ejecutar esta lección

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