# Apple Desktop Bus

L'Apple Desktop Bus (ou ADB, que l'on peut traduire « bus de bureau Apple ») est un bus série conçu pour connecter des périphériques bas débit à un ordinateur.

## Ordinateurs compatibles

Le premier système à avoir utilisé l'ADB était l'Apple IIgs en 1986. Par la suite, il a été utilisé sur tous les Macintosh d'Apple à partir du Macintosh II et du Macintosh SE, avant qu'il soit remplacé par l'USB à la fin des années 1990 dans l'iMac et les Macintosh lui succédant. L'ADB a aussi été utilisé dans les dernières séries d'ordinateurs NeXT, machines surnommées « Turbo ADB ». Plus aucun nouvel ordinateur n'utilise l'ADB pour connecter des périphériques, mais jusqu'en février 2005, les PowerBook et les iBook utilisaient toujours un port ADB interne comme interface de communication avec le clavier et le trackpad embarqués. La connexion interne est maintenant en interface USB.

## L'invention

Le système a été créé par Steve Wozniak (cofondateur d'Apple), qui se cherchait au milieu des années 1980 un projet ; on lui a proposé de créer un nouveau système de connexion pour les périphériques tels que les souris et les claviers, se branchant à la chaîne avec un seul câble ainsi que bon marché. On raconte qu'il serait parti durant un mois et revenu avec l'ADB.

## Fonctionnement

Il utilise une seule broche pour les données, ce qui en faisait l'un des bus les meilleur marché. Le système complet est basé sur des dispositifs capables de décoder un seul nombre (l'adresse) et de mémoriser quelques bits de données (les registres). l'ADB peut être implémenté pour moins d'un centime, le connecteur coûtant plus cher que l'électronique.
Tout le trafic du bus est contrôlé par l'ordinateur hôte, qui envoie les ordres de lecture et d'écriture de données : les périphériques ne sont pas autorisés à utiliser le bus à moins que l'ordinateur ne le leur demande préalablement. Ces requêtes prennent la forme d'un seul octet : les 4 bits de poids fort contiennent l'adresse, c'est-à-dire l'identifiant du périphérique sur la chaîne, permettant donc de connecter jusqu'à 16 périphériques sur un seul bus ; les deux bits suivants spécifient une commande parmi quatre, et les deux derniers bits indiquent un registre parmi quatre. Les commandes sont :
* talk (parle) - envoie le contenu d'un registre à l'ordinateur
* listen (écoute) - définit la valeur du registre à la valeur succédant
* flush (nettoie) - efface le contenu du registre
* reset (réinitialise) - signifie à tous les périphériques du bus de se réinitialiser.
Par exemple, si la souris possède l'identité $3, l'ordinateur va périodiquement envoyer un message sur le bus qui ressemblera à :
0011 11 00
Ceci signifie que le périphérique numéro trois (0011) doit parler (11), donc retourner le contenu du registre zéro (00). Pour une souris ceci signifie « Dis-moi si le bouton a été cliqué ». Ce qui est habituellement suivi de deux commandes supplémentaires demandant le contenu des registres 1 et 2, les déplacements en x et en y (horizontal et vertical). Le registre 3 contient toujours les informations du périphérique. Une souris pourrait de cette façon être implémentée avec 4 octets de mémoire et un contrôleur très simple.
L'adressage du périphérique et l'énumération est tout autant astucieuse : les adresses des périphériques prennent une valeur par défaut en cas de réinitialisation. Par exemple, tous les claviers prennent la valeur $2 et toutes les souris prennent la valeur $3. Quand l'ordinateur est mis sous tension, le driver ADB scanne toutes ces adresses par défaut, leur demandant respectivement le contenu de leur registre 3. S'il n'y a pas de réponse pour une adresse particulière, l'ordinateur le considère inexistant sur le bus et ne le considère pas par la suite.
Si un périphérique répond, il dit qu'il se place à une nouvelle adresse aléatoire. L'ordinateur répond à cette nouvelle adresse par une commande qui lui demande de se déplacer vers une autre adresse. Cette technique de bootstrap permet d'être sûr que le périphérique en question fonctionne correctement, pour l'ordinateur de constituer une liste de périphériques, et enfin d'utiliser plusieurs périphériques du même type simultanément.
Étant donné que tous les claviers ont l'adresse $2, et que l'on n'a généralement qu'un clavier branché à l'ordinateur, aucun problème se pose dans ce cas-là ; il répond donc à cette adresse. Mais les périphériques sont activés après un petit laps de temps, permettant d'éviter le problème de multiples réponses simultanées : après avoir reçu le message de l'hôte, les périphériques attendent une durée aléatoire courte avant de répondre tout en vérifiant que le bus n'est pas employé à ce moment-là. Si vous branchez deux claviers, ou plus simplement deux tablettes graphiques, à la première initialisation un des deux répondra sur le bus, alors que les autres remarqueront que le bus est utilisé et ne répondront pas. L'hôte répondra un autre message à cette adresse d'origine, mais puisqu'un des deux périphériques s'est déplacé à une nouvelle adresse, l'autre répondra alors. Ce procédé continue jusqu'à ce que plus aucun périphérique ne réponde ; C'est ainsi que l'ordinateur construit sa liste de périphériques.
Étant donné la simplicité du système, il n'est pas surprenant que le câblage soit simple. La broche unique de données est appelée ADB, et est doublée d'une alimentation +5 V et masse. La broche +5 V garantit au moins 500 mA et les périphériques ne doivent pas consommer plus de 100 mA chacun. Curieusement, le câble ADB comprend une broche PSW qui est directement connectée à l'alimentation électrique de l'ordinateur, ceci afin de permettre d'allumer l'ordinateur à l'aide d'une touche du clavier, et ceci sans avoir besoin de logiciel pour interpréter le signal.
Les câbles employés sont les mêmes que les câbles S-Video.

## Débit

Le débit théorique du bus est 125 kbit/s. Cependant le débit pratique est au maximum deux fois moindre, puisqu'une seule broche est partagée entre les émissions et les réceptions. Dans les cas réels, le débit est encore bien inférieur, puisque c'est à l'ordinateur de piloter le bus.

## Inconvénients

Mac OS n'est pas particulièrement adapté à la tâche d'émission-réception constante, et le bus se traîne souvent à 10 kbit/s.
Un autre problème est l'absence de reset sur le bus, qui ne permet pas aux périphériques de signaler un changement sur la chaîne, interdisant ainsi le branchement à chaud de périphériques.

## Successeur

Pour les souris, l'USB a remplacé ADB, L'Apple USB Mouse a été la première souris réalisant cette transition.

## Lien externe (en anglais)

* https://web.archive.org/web/20030605055637/http://developer.apple.com/techpubs/mac/Devices/Devices-205.html