La table des périphériques
Le CIO utilise une table des périphériques localisée à l'adresse HATABS ($31A)
- device name sur 1 octet
- adresse de la table des vecteurs pour le handler (driver) sur 2 octets
Lors d'un appel CIO, le CIO recherche dans cette table le périphérique dont le premier caractère du nom correspond. S'il y a correspondance, il récupère les 2 octets pour déterminer l'adresse de la table des vecteurs pour ce handler.
Le CIO
commence par la fin de la table des périphériques: $33d. Ce qui
permet de customiser les handler de périphériques !
Table des vecteurs par handlers
Cette table permet au CIO de trouver les procédures (via les vecteurs) qui vont permettre de gérer le périphérique.
- open
Valide les paramètres ICAx (cf. structure IOCB) et contrôle que les commandes ne sont pas illégales. Cf. Open du CIO
- close
Vide les données qui seraient restées dans le buffer vers le périphérique et positionne le EOF pour indiquer la fin du fichier, ...
- get byte
Récupère un octet du périphérique ou du buffer du handler et positionne celui-ci dans l'accumulateur.
Pour les périphériques pouvant avoir des time outs long, il faudra gérer la touche break ($11) et positionner le registre Y à $80 si break est pressée.
- put byte
Permet d'envoyer la valeur stockée dans l'accumulateur vers le périphérique ou vers le buffer du handler.
Si le buffer est plein, il faut transférer les données vers le périphérique.
- get stat
Retourne l'état du périphérique dans DVSTAT ($02EA) à DVSTAT + 3
- special
Il faut regarder la commande passée au CIO (cf. structure IOCB) pour déterminer le traitement à faire et laisser la routine correspondante.
- JMP init code (3 bytes)
Contient l'adresse d'origine de DOSINI ($000c). Le handler doit en effet rediriger cette adresse pour y placer l'adresse de son propre code qui initialise les vecteurs dans la table des vecteurs du handler et lance ensuite le code d'origine via JMP init code.