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.pyUbicaciones
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