093. Asl absolute

Añadir ASL Absolute.

Lección 93 de 356 · tests/chapter_01_cpu/test_093_ASL_absolute.py

En este paso, extiende ASL en memoria al resolutor absoluto de 16 bits ya existente.

Archivo y símbolos

emulator/cpu/opcodes.py: asl_absolute, OPCODE_TABLE[0x0E]

Por qué existe este paso

Esta transición extiende el mismo comportamiento de ASL en memoria desde direcciones de página cero hasta el resolutor absolute de 16 bits ya existente; la semántica de la instrucción no cambia.

Implementación sugerida para este paso

# emulator/cpu/opcodes.py
def asl_absolute(cpu: CPU):
    addr = absolute(cpu)
    asl(cpu, addr)

OPCODE_TABLE = {
    # existing entries unchanged
    0x0E: asl_absolute,
}

Invariantes importantes

  • absolute(cpu) consume primero el byte bajo y después el byte alto, y devuelve una dirección de 16 bits
  • la instrucción de tres bytes avanza PC en tres posiciones incluyendo el opcode
  • asl lee y escribe en la ubicación de memoria resuelta y actualiza C, Z y N
  • A y X no cambian

Error conceptual habitual

Para 0E 00 02, la decodificación little-endian apunta a $0200, no a $0002.

Fuera de alcance

  • ASL Absolute,X en el test 094
  • cambios en el direccionamiento absoluto o en la semántica de ASL
  • la precisión de ciclos

Ejecutar esta lección

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