034. Ldx absoluto

Añadir LDX absoluto ($AE).

Lección 34 de 356 · tests/chapter_01_cpu/test_034_LDX_absolute.py

Archivo a actualizar

emulator/cpu/opcodes.py

Ubicaciones

opcodes.ldx_absolute
opcodes.OPCODE_TABLE[$AE]

Por qué existe este paso

Esta lección extiende LDX de direcciones de un byte a una dirección de memoria completa de 16 bits, preservando el límite establecido: absolute decodifica el operando, el manejador lee la memoria y ldx actualiza X y sus flags.

Implementación de ejemplo completa

# emulator/cpu/opcodes.py
def ldx_absolute(cpu: CPU):
    addr = absolute(cpu)
    value = cpu.bus.read(addr)
    ldx(cpu, value)


OPCODE_TABLE = {
    # Preserve existing entries.
    0xAE: ldx_absolute,
}

Invariantes importantes

  • $AE se corresponde con ldx_absolute
  • absolute consume el byte de operando bajo antes que el byte de operando alto
  • se lee un byte de la dirección de 16 bits resultante y se pasa a ldx
  • la instrucción completa avanza PC en tres bytes

Concepto erróneo habitual

AE 00 02 direcciona $0200 porque los operandos del 6502 son little-endian; no direcciona $0002 ni carga directamente ninguno de los bytes de operando.

Fuera de alcance

  • LDX absoluto,Y
  • cambios en absolute o ldx
  • la temporización de ciclos

Ejecutar esta lección

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