ANAIIS - Another Native Amiga Input/output Interface Stack - 0.99

ANAIIS, est un acronyme pompeux qui signifirait en mauvais anglais "Another Native Amiga IO Interface Stack", soit une autre pile native interfaçant l'USB à quelques fonctions du système AmigaOS.
Another parce qu'il en existe d'autres comme Poseidon ou Sirion.
Native parce que elle a été réalisée en C, c'est du spécifique exec, pas du pompage Linux.
Amiga parce cette machine méritait bien ce genre de programme.
Input/output input parce que c'est pour une souris ou un clavier, output pour une imprimante.
Interface parce que j'avais besoin d'un autre I.
Stack parce que ce genre de programme s'appelle ainsi.
Anaiis est une autre écriture du prénom Anaïs, dérivé du prénom féminin Anne, et qui signifie "la grâce" en hébreu. Il y avait déjà Paula, Denise, Agnès (qui est devenu par la suite Agnus, Fat Lady, Fat Agnus, SuperFat Agnus) pour tenir compagnie au 68000, alors pourquoi pas une de plus...

USB, un port série universel
Depuis 1997, les ports série, parallèle et scsi sont devenus obsolètes face au standard USB. USB acronyme d'Universal Serial Bus, est un bus de liaison entre périphériques (devices) et ordinateur (host). L'objectif est de remplacer les interfaces série et parallèle de l'ordinateur et de concurrencer les interfaces disques.

Différentes vitesses peuvent cohabiter sur un même bus USB, 1.5Mbps (low-speed pour clavier, souris, joystick), 12Mbp (full-speed pour modem, réseau, audio, vidéo non compressée, imprimante et toutes les applications nécessitant une garantie de bande passante). Dans sa version 2.0, l'USB autorise hi-speed à 480Mbps et rivalise avec d'autres types de connexion (FireWire, IDE et SCSI) comme la vidéo non compressée, le stockage (Disque Dur), les scanners... Il devient difficile de nos jours de trouver des périphériques pourvus d'une interface autre que l'USB (imprimante ou scanner). Autrement dit vous serez obligé d'utiliser l'USB si vous voulez continuer à survivre dans le monde de l'informatique. Des passerelles USB parallèle ou USB série existent, et permettent de continuer à utiliser de vieux périphériques sur un ordinateur dépourvu de port série ou parallèle.

USB et Amiga
Sur Amiga, Chris Hodges a eu la fantastique initiative de créer une pile USB fonctionnelle sous le nom de Poseidon. Grâce à sa conception modulaire, Poseidon et son interface Trident sont utilisable sur AmigaOS et MorphOS, avec les contrôleurs suivant: Highway (bus Zorro II), Subway (port horloge A1200), Pegasos (morphOS), UHCI PCI de DCE sur platine G-Rex, Thylacine USB (bus Zorro II) et bien d'autres. Malheureusement, il est impossible de faire fonctionner Poseidon et Highway sur un Amiga de base avec un 68000 à 7.14 MHz. Ceci est dû à l'utilisation de structures non cadrées sur des adresses paires (le 68000 est incapable de lire ou d'écrire un mot de 16 ou 32 bits à une adresse impaire) et d'interruptions ajustées à la milliseconde (le 68000 de base est trop lent).

La carte Highway
C'est une carte Zorro II compacte et très propre, sur laquelle sont connectés 4 ports USB à travers un hub intégré. Les 4 ports sont répartis sur 2 connecteurs de fond d'ordinateur (attention différents des PC!!). Cette carte est très ouverte: un module Norway peut s'insérer pour avoir une carte réseau, un module de rom flash permet d'accueillir une image de rom ou des programmes à charger pendant la phase de démarrage, un clockport est aussi présent, pour une interface série rapide ou tout simplement brancher une carte Subway pour le développement. L'installation matérielle ne pose aucun problème.

La carte Subway
C'est une petite plaque entourée de plastique isolant sur laquelle sont connectés d'un coté 4 ports USB à travers un hub intégré et de l'autre un connecteur pour clockport. La puce qui gère le hub est un uhc124, comme dans la carte Highway, mais gérée d'une autre façon. L'installation matérielle ne pose aucun problème, il suffit de connecter calmement les câbles et de suivre les conseils du site du constructeur www.e3b.de .

La programmation de l'uhc124
La carte Highway et Subway sont équipés d'une puce uhc124 de Transdimension. La façon dont sont implémentés les registres sont secrets et appartiennent à E3B. La puce uhc124 permet de gérer 16 requêtes USB par transaction. Dans Highway, la puce est configurée pour effectuer des accès à partir d'une adresse de base (8 bits random access) Dans Subway, elle effectue des accès en séquence à partir de registres (8 bits sequential access).
Dans un premier temps, le programme détecte la carte Highway à partir de la bibliothèque expansion.library, ensuite Subway qui doit résider 0x00d80001 (clockport standard du A1200) ou à une addresse fournie par l'utilisateur sur une carte tierce (manufacturer, product, offset) ou a une adresse fixe (address).

La pile ANAIIS
Une fois la liste de cartes établie, on détermine les périphériques connectés sur le concentrateur racine (root hub) de façon récursive, en allumant les ports un à un et en interrogeant le périphérique connecté.
Ensuite une une boucle infinie scrute toutes les 10 millisecondes, l'état des portes (end point) IN connectées. Si un changement intervient sur un noeud (hub), en débranchement, le périphérique en question est retiré des listes, en branchement, un pilote (9,0,0) hub, (3,1,2) souris et (3,1,1) clavier prend en compte immédiatement (sans chargement) le périphérique. Pour une souris, ou un clavier, les requêtes sont traduites en évènements Intuition (intuition events). Les jeux qui utilisent directement le matériel ne fonctionneront pas. Une interface ieee1284.device utilisera la porte OUT pour les imprimantes usb ou une imprimante classique connectée à un émulateur (usb to ieee1284).
C'est peu mais c'est déjà pas mal. N'oublions pas que l'on s'adresse à des machines de plus de vingt ans, dont les concepteurs n'avaient même pas à l'idée de les faire durer autant.

Installation de la pile ANAIIS
Dans un premier temps, il faut s'assurer d'avoir au moins:

  • un Amiga avec un 68000 à 7.14Mhz (ne fonctionne pas avec un PPC seul)
  • un kickstart 1.1 ou le dernier AmigaOS4.x
  • une carte Highway ou une carte Subway
  • 70 Ko de RAM de libre
  • un peu de patience

  • Etape 1
    Télécharger ANAIIS et copier les fichiers.
    http://aminet.net/package/driver/other/anaiis

    WB 1.1 (Kickstart version 31) et WB 1.2 (Kickstart version 33)
    L'interface graphique ne fonctionne pas, il faudra utiliser la commande en ligne usbprefs à la place.
    Faire un peu de place sur la disquette en enlevant les fontes par exemple... copier usbprefs où l'on veut (si possible à coté de Preferences).
    copier usbstart et son icône dans sys:system
    copier usbstop et son icône dans sys:system
    copier usbreset et son icône dans sys:system

    WB 1.3 (Kickstart 34 et plus)
    copier anaiis où l'on veut (si possible à coté de Preferences dans sys:prefs).
    copier usbstart et son icône dans sys:system
    copier usbstop et son icône dans sys:system
    copier usbreset et son icône dans sys:system

    AmigaOS4.0 (version 50 et plus)
    !!Attention!! certains fichiers ont les mêmes noms.
    Effectuer une copie du système avant d'installer ANAIIS.
    Pour un utilisateur basique, seuls usbstart et s:anaiis.prefs sont important. usbstop et usbreset ne devraient jamais être activés.

    Etape 2
    Démarrer la pile en cliquant sur usbstart. Brancher les périphériques. S'ils fonctionnent, tant mieux! sinon certains points sont à paramétrer. L'interface d'ANAIIS utilise pleinement intuition, en allant un peu au delà de ses limites, mais suffisante pour mettre en place quelques réglages. Pour les plus téméraires, il y a usbprefs en ligne de commande.
    Si rien ne fonctionne, ouvrir l'icône anaiis et vérifier l'onglet "Hardware". Si c'est noté "dummy1" c'est mal parti (ze ugly). Si "Highway" ou "Subway" est écrit c'est bien (ze good), si rien n'est écrit ce n'est pas bien (ze bad). Pour une Highway, vérifier que l'item "auto detection" est en place dans l'onglet "Preferences" sous-onglet "System". Pour une Subway, si l'adresse du "clockport" n'est pas 0x00d80001, il faut savoir où on l'a branché, en connaissant l'adresse de base de la carte et son offset.

    adresse de base   : 0x00e90000
    offset            : 0x00004000
    adresse clockport : 0x00e94000
    
    Dans l'onglet "Preferences", sous-onglet "System", sélectionner l'item "Subway" avec le pseudo bouton cyclique (on clique pour avancer, shift-click pour reculer) et saisir 0x00e94000 dans la zone "Param1". Ensuite retourner à l'onglet "Hardware", cliquer sur "Close Stack" et fermer. Les paramètres sont sauvés dans s:anaiis.prefs, comme font la plupart des vieux programmes. Recommencer avec usbstart. !!ATTENTION!! si l'adresse est farfelue, le gourou peut très bien venir vous rendre une petite visite.
    D'une manière moins brutale, on peut connaitre une carte par son identificateur de fabricant (manufacturer ID) et son identifiant de produit (product ID) et bien sûr l'offset du "clockport". Dans l'onglet "Preferences", sous-onglet "System", sélectionner l'item "Host" et saisir
    Param1 manufacturer 0x00000861
    Param2 product      0x000000c8
    Param3 offset       0x00004000
    
    !!ATTENTION!! si l'adresse est farfelue, le gourou peut très bien venir vous rendre une petite visite.

    Etape 3
    Si la pile fonctionne, il est recommandé de modifier la séquence de démarrage s:startup-sequence en ajoutant la commande suivante, si possible au début.

    run >NIL: sys:system/usbstart >NIL:
    


    Imprimante
    Là aussi, pas de mystère, une seule imprimante est gérée pour l'instant. Cette limitation est surtout due au printer.device, pas à ANAIIS.
    copier ieee1284.device dans devs:
    copier usbprint où l'on veut ( c: ... )
    Ne pas oublier de cocher l'option "parallel device patch" dans l'onglet "Preferences", sous-onglet "Printer".


    La face visible d'ANAIIS
    Un fichier de localisation anaiis.catalog existe. Il faut le copier dans un répertoire catalog/français au même niveau que le programme anaiis en 1.3 et en dessous ou alors dans le système lui-même au dessus. Mais c'est tellement mieux de conserver tous les textes en anglais!

    Onglet "Hardware"
    Montre les cartes gérant l'usb visibles dans le système.
    Quantum
    Un truc pas important qui peut perturber pas mal de choses
    Bouton "Reset"
    Même chose que l'outil "usbreset".
    Bouton "Close Stack"
    Même chose que l'outil "usbstop".




    Onglet "Devices"
    usbstat est mieux équipé que cet onglet.

    Onglet "Preferences/System"
    Param1,
    Param2,
    Param3 regarder "Installation de la pile ANAIIS", étape 2.

    Quantum: pas toucher!
    8:
    9:
    10: nominal
    11:
    12:

    Spoof like usbsys.device:
    Si coché, usbsys.device et usbresource.library sont utilisés, sinon anaiis.device et anaiisresource.library sont présents.

    Disable internal drivers:
    Si coché, seuls les noeuds (hubs) sont gérés, sinon ANAIIS gère les souris, claviers.

    Preferences/Mouse
    Goofy mode: Comme pour les snowboarders :),
    Si coché, la souris pour les gauchers, sinon c'est pour les droitiers.

    Middle button:
    Si coché, les évènements pour le bouton du milieu sont générés, aucun sinon.
    Wheel:
    Si coché, les codes 0x7a pour haut, 0x7b pour bas, 0x7c pour gauche, 0x7d pour droite sont générés comme évènements claviers (et oui!), sinon rien.

    Wheel OS4:
    Si coché, les évènements roulette spécifiques à OS4.x sont générés.
    Aucun effet sur les autres versions du système.

    Preferences/Keyboard

    ColdReboot on ctrl winl winr
    Si coché, il est possible de redémarrer le système avec la combinaison ctrl+winl+winr sur le clavier usb, comme ctrl+lamiga+ramiga. (Les doubleurs de ROM ne fonctionnent pas...)

    Key repeat delay
    Délai de répétition du clavier
    Le délai en secondes avant répétition est affiché à droite, ce qui est rare sur Amiga...

    Key repeat speed
    Vitesse de répétition du clavier
    Le délai en secondes entre deux émissions de caractères est affiché à droite.


    Preferences/HID
    Cet onglet concerne la lowlevel.library. Deux colonnes à droite de chaque port indique son état. La présence d'une seule colonne indique l'absence de la lowlevel.library (ce qui est le cas ici avec le WB1.3). Pour plus de détails consulter la documentation sur les fonctions GetKey() et ReadJoyPort(). L'utilisateur peut influer sur le comportement de ces deux fonctions en sélectionnant le mode à l'aide du bouton cyclique.
    -- Laisser faire la lowlevel.library.
    USB Le périphérique usb est pris en compte.
    Merge Le périphérique usb et l'existant sont pris en compte.

    Keyboard clavier
    Port 0 port 0 (souris)
    Port 1 port 1 (souris ou joystick)
    Port 2 port 2 (souris ou joystick)
    Port 3 port 3 (souris ou joystick)

    Le programme playHID prend en compte un joypad Thrustmaster et rend ses données dans le port 3. Jamais pu le tester dans un jeu, vu que la plupart tuent le système, or ANAIIS a un besoin vital d'exec.

    Preferences/Printer

    Parallel device patch
    Si coché, la fonction exec OpenDevice() est modifiée pour détourner tous les appels au "parallel.device" en "ieee1284.device". Dans Preferences (ou Prefs) vérifier que l'imprimante est bien de type parallèle, et que son pilote est compatible.


    About
    Devinez!?

    Debug
    Pour l'utilisateur de base, merci de laisser Trace et Audit à 0, sinon le système risque d'être très perturbé. Le programme USBTrace est nécessaire pour générer des traces ou des fichiers d'audit en RAM:.


    La face cachée d'ANAIIS
    L'interface API est compatible avec Sirion. Consulter les documentations usbsys.doc inclues dans le sdk OS4.x disponible sur le site d'Hyperion.
    Attention toutefois, certaines fonctions ne réagissent certainement pas de la même manière que sur l'original Sirion, car le code et l'architecture sont vraiment différents.
    Dans le palais des horreurs logicielles, on peut citer:
    usblist (liste des interfaces) http://aminet.net/package/dev/c/usblist
    anaiis_print (imprimante) http://aminet.net/package/dev/c/anaiis_print
    X-Mass (masstorage, en cours de dev)
    Donkey'shoot (ptp + massstorage, en cours de dev, encore une histoire d'ânes)
    et certainement d'autres comme pl2303 (connecteur série) http://thylacine.boing.net/updates.html


    ANAIIS, tout comme l'Amiga ou la vraie Anaïs est caractérielle, imprévisible, mais tellement attachante et passionnante à développer ;) Maintenant, arrêtez de vous plaindre si vous n'arrivez toujours pas à dessiner avec un ordinateur. Les souris bas de gamme actuelles sont bien meilleures que le haut de gamme d'il y a 20 ans, et les souris optiques ne s'encrasent jamais!. L'USB existe bel et bien sur Amiga.