067. Sbc absolute x

Añadir SBC Absolute,X.

Lección 67 de 356 · tests/chapter_01_cpu/test_067_SBC_absolute_x.py

Archivo a actualizar

emulator/cpu/opcodes.py

Símbolos a añadir/actualizar

opcodes.sbc_absolute_x and OPCODE_TABLE[0xFD]

Por qué existe este paso

SBC gana acceso absoluto indexado por X reutilizando el resolutor absolute_x existente; el envoltorio de opcode sigue siendo responsable únicamente de leer y delegar.

Implementación de ejemplo completa

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

OPCODE_TABLE = {
    # ... existing entries ...
    0xFD: sbc_absolute_x,
}

Invariantes importantes

  • absolute_x consume dos bytes de operando y suma X a la dirección base
  • el manejador lee el byte en la dirección indexada final
  • el valor leído se pasa una sola vez a sbc
  • ejecutar la instrucción de tres bytes avanza PC en tres bytes

Concepto erróneo común

No sumes X de nuevo en el envoltorio; absolute_x ya devuelve la dirección indexada final.

Fuera de alcance

  • envoltorios de SBC Absolute,Y e indirectos
  • penalizaciones de ciclos por cruce de página
  • cambios en los asistentes de direccionamiento o en la aritmética de SBC

Ejecutar esta lección

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