066. Sbc absolute

Añadir SBC Absolute.

Lección 66 de 356 · tests/chapter_01_cpu/test_066_SBC_absolute.py

Archivo a actualizar

emulator/cpu/opcodes.py

Símbolos a añadir/actualizar

opcodes.sbc_absolute and OPCODE_TABLE[0xED]

Por qué existe este paso

Esta lección conecta SBC con una dirección absoluta de 16 bits en little-endian ya existente, siguiendo la misma frontera de resolver-leer-delegar que otros opcodes de memoria.

Implementación de ejemplo completa

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

OPCODE_TABLE = {
    # ... existing entries ...
    0xED: sbc_absolute,
}

Invariantes importantes

  • absolute consume dos bytes de operando y devuelve la dirección de 16 bits
  • el manejador lee un byte de esa dirección
  • solo sbc cambia A y las flags aritméticas
  • ejecutar la instrucción de tres bytes avanza PC en tres bytes

Concepto erróneo común

Los dos bytes de operando forman una dirección en orden little-endian; no son el valor a restar y no deben volver a ensamblarse en este envoltorio.

Fuera de alcance

  • envoltorios de SBC absolutos indexados e indirectos
  • cambios en el direccionamiento absoluto o en la aritmética de SBC
  • la temporización de ciclos

Ejecutar esta lección

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