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.

Image non trouvée !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.

Les procédures sont:

  • 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.

    Image non trouvée !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.

    Image non trouvée !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.