# Apple Desktop Bus

El Apple Desktop Bus (o ADB) es un bus serie usado para conectar dispositivos de baja velocidad a las computadoras. Usado primordialmente en la plataforma Apple Macintosh, los equipos ADB siguen estando disponibles pero no soportados por la mayoría del hardware fabricado por Apple desde 1998. ADB usa un conector mini-DIN.

## Historia

ADB fue creado por Steve Wozniak, quien había estado buscando un proyecto en que trabajar desde mediados de los años 1980. Alguien sugirió que podía crear un nuevo sistema de conexión para dispositivos como ratones y teclados, uno que solo requiriese un único cable daisy chain y fuese barato de fabricar. Según cuenta la historia, se marchó durante un mes y volvió con el ADB.
El primer sistema que usó ADB fue el Apple IIgs en 1986. Posteriormente fue usado en todos los Apple Macintosh empezando con los Macintosh II y Macintosh SE, hasta que fue reemplazado por el USB, empezando con el Apple iMac en 1998. ADB también fue usado en las últimas series de ordenadores NeXT, modelos que serían conocidos como los «Turbo ABD's».
Ninguna máquina fabricada en la actualidad usa ADB para la interconexión de dispositivo, si bien hasta febrero de 2005 los PowerBooks e iBooks seguían usando ADB internamente como interfaz con el teclado y el touchpad integrados. Actualmente dicha conexión interna ha cambiado a USB.

## Especificaciones
### Conector

Dada la simplicidad del sistema, no es sorprendente que el cableado sea igualmente simple. El único pin de datos era etiquetado como ADB y se acompañaba de un pin de alimentación a + 5 V y otro de masa. El pin de alimentación garantizaba un mínimo de 500 mA, y requería que los dispositivos no usasen más de 100 mA cada uno. Sin embargo, curiosamente el cable ADB también incluía el pin PSW que estaba directamente conectado a la alimentación del ordenador. Esto se incluyó para permitir que una tecla del teclado encendiese el ordenador sin necesidad de que el software ADB interpretase la señal. Los cables ADB usan conectores mini-DIN, el mismo que los cables S-Video.

### Comunicación

El sistema ADB se basa en que los dispositivos tengan la capacidad de decodificar un número simple (su dirección) y de guardar varios datos pequeños (sus registros). Usa un único pin para los datos, haciendo que sea uno de los buses menos caros de la historia: el hardware ADB es tan barato que el conector siempre resulta más caro.
Todo el tráfico del bus es gestionado por el ordenador, que envía comandos para leer o escribir datos: no se permite a los dispositivos usar el bus a menos que el ordenador haga primero una petición. Estas peticiones toman la forma de cadenas de un solo byte. Los cuatro bits altos contienen la dirección (el identificador de un dispositivo en la cadena), permitiendo así hasta 16 dispositivos por bus. Los siguientes dos bits especifican uno de los cuatro comandos posibles y los dos bits más bajos indican uno de los cuatro registros del dispositivo. Los comandos eran:
* talk (‘hablar’) - envía los contenidos de un registro al computador
* listen (‘escuchar’) - establece el registro al valor que sigue
* flush (‘limpiar’) - limpia el contenido del registro
* reset (‘reiniciar’) - ordena a todos los dispositivos del bus que se reinicien
Por ejemplo, si el ratón tenía la dirección $D, el ordenador enviaría periódicamente un mensaje al bus con el siguiente contenido:
    1101 11 00
Esto dice que el dispositivo $D (1101) debe hablar (11) y devolver el contenido del registro cero (00). Los registros podían contener entre dos y ocho bytes. El registro cero era normalmente el canal de comunicación primario. Los registros uno y dos estaban sin definir, y se destinaban habitualmente a permitir que los terceros desarrolladores almacenaran información de configuración. El registro tres siempre contenían la información de identificación del dispositivo.
Las direcciones y enumeración de los dispositivos se establecían a valores por defectos durante un reinicio. Por ejemplo, todos los teclados se establecían a $2 y todos los ratones a $3. Cuando el ordenador era encendido por ver primera el controlador de dispositivo ADB enviaba comandos talk a cada una de estas direcciones por defecto conocidas para leer el contenido del registro tres. Si no se recibía respuesta de una dirección concreta, la computadora la marcaba como muerta y no molestaba en hacer polling más adelante.
Si un dispositivo respondía, lo hacía diciendo que se trasladaba a una dirección nueva más alta seleccionada aleatoriamente. El ordenador respondía entonces enviando otro comando a esa nueva dirección, pidiendo al dispositivo que se trasladase a otra dirección nueva. Una vez se completaba esto el dispositivo era marcado como vivo y el sistema le haría polling en el futuro.
Aunque raro, era posible que el bus ADB tuviese más de un dispositivo del mismo tipo conectado, por ejemplo dos tabletas gráficas o mochilas de protección. En este caso, cuando se preguntaba por los dispositivos en esa dirección por defecto, ambos respondían y se producía una colisión. Para evitar este problema los dispositivos incorporaban un pequeño retardo. Tras recibir un mensaje del ordenador, los dispositivos esperaban un pequeño tiempo aleatorio antes de responder, y tras este lo hacía solo tras «fisgar» en el bus para asegurarse de que no estaba ocupado. Si se conectaban dos mochila, cuando el bus fuera inicializado una de ellas sería la primera en responder y la otra advertiría que el bus estaba ocupado y no lo haría. El ordenador enviaría entonces otro mensaje a la dirección original, pero dado que el primero se trasladó a una nueva dirección, solo el otro respondería. Este proceso continuaba hasta que nadie respondiese a las peticiones en la dirección original, lo que significaba que no quedaban dispositivos de ese tipo por enumerar. De esta forma el ordenador elaboraba su lista de dispositivos.
La velocidad del bus podía alcanzar teóricamente los 125 Kbit/s. Sin embargo la velocidad de comunicación era como mucho la mitad debido a que solo había un pin compartido entre el ordenador y los dispositivos. En el uso real la velocidad era mucho menor, ya que el sistema dependía de la velocidad a la que el ordenador sondeaba (poll) el bus. El sistema operativo Mac OS no resultaba particularmente adecuado para esta tarea, y el bus a menudo se atascaba a unos 10 kbit/s.
Otro problema era que aunque el bus realizaba un comando reset, los dispositivos no tenían un medio de indicar al bus algún cambio de estado. Esto significaba que si el bus cambiaba, por ejemplo al conectar un nuevo dispositivo, no había forma de que el ordenador lo supiera. Así, el sistema no soportaba el hot swapping, aunque esto podría haber sido implementado muy fácilmente usando el pin PSW.

## Problemas

No era seguro conectar un dispositivo cuando el sistema estaba encendido (a diferencia del USB en los ordenadores modernos), lo que se intentaba con frecuencia si el ratón se desconectaba. Algunas veces, la avería que esto ocasionaba suponía reemplazar un fusible soldado en la placa base, que en los servicios técnicos oficiales suponía una factura elevada. Una alternativa simple para evitar este problema era soldar un fusible en paralelo al de la placa base (que, si se hacía bien, ni siquiera exigía soldadura).
El conector DIN no estaba diseñado para más de 400 inserciones, siendo fácil doblar un pin si no se conectaba con cuidado.