Accéder à l'imprimante à partir du BIOS
Le BIOS propose trois fonctions, appelées par interruption 17h, pour communiquer avec une ou plusieurs imprimantes interfacées au PC. Ces fonctions ont un avantage sur les fonctions de sortie d'imprimante DOS : elles peuvent spécifier l'imprimante vers laquelle la sortie doit aller. Le numéro de l'imprimante (0, 1 ou 2) doit être chargé dans le registre DX lors de l'appel de la fonction. Après chacun des trois appels de fonction, l'état de l'imprimante passe au registre AH. Chaque bit de cet octet de flux fournit des informations sur la tâche de l'imprimante, s'il y a encore du papier,...
Voici l'octet d'état de l'imprimante :
Bit | Description |
---|---|
0 | Erreur de dépassement de délai |
3 | Erreur de transfère |
4 | 1=Imprimante en ligne 0=Imprimante hors ligne |
5 | 1=Manque de papier dans l'imprimante |
6 | Mode de réception sélectionné |
7 | 0=Imprimante occupé |
Dépassement de délai
Une erreur de temporisation se produit lorsque le BIOS essaie d'envoyer des données pendant un certain temps à l'imprimante, mais l'imprimante refuse les données et renvoie un message d'occupation (le bit 7 devient 0). Le nombre d'essais effectués par le BIOS avant de signaler une erreur de temporisation dépend du contenu de l'adresse 0040h:0078h dans la RAM. La ROM utilise cette adresse pour stocker les variables. La valeur 20 que le BIOS entre dans ces emplacements de mémoire lors du démarrage du système est différente du facteur de répétition de 20. La valeur dans ces emplacements de mémoire doit d'abord être multipliée par 4, puis par 65 536. Une valeur de 20 correspond en fait à 5 millions de tentatives. Ce nombre est relatif puisque la boucle qui vérifie l'imprimante ne comporte que quelques instructions en langage assembleur traitées très rapidement par le microprocesseur. Il en résulte une période d'attente de quelques secondes seulement avant que le BIOS ne signale une erreur de temporisation. Si travailler avec la routine du BIOS semble créer plus d'erreurs de temporisation que d'habitude, essayez d'augmenter la valeur dans les emplacements de mémoire mentionnés ci-dessus afin que le BIOS fasse plus de tentatives. Cela peut faciliter la communication entre le BIOS et l'imprimante.
Diverses conditions d'impression peuvent modifier une série de bits dans l'octet d'état. Une imprimante EN LIGNE (prête à imprimer) définit les bits 7 et 4. Si l'imprimante passe en HORS LIGNE (par exemple, pour l'avance de page), les bits 7 et 4 sont réinitialisés et le bit 3 est défini, indiquant une erreur de transmission.
Le programme doit décider si de nouvelles données doivent être envoyées à l'imprimante, si la sortie de l'imprimante doit se terminer ou si d'autres mesures doivent être prises.
Fonction 0 : Envoyer un caractère
La fonction 0 transmet un caractère à l'imprimante. Chargez le numéro de fonction dans le registre AH et le code ASCII du caractère que vous souhaitez envoyer dans le registre AL. Après l'appel de la fonction, le registre AH contient l'octet d'état. Si la transmission/impression des caractères a échoué, le registre AH contient la valeur 1.
Fonction 1 : Initialiser l'imprimante
La deuxième fonction initialise les ports de l'imprimante. Vous devez toujours exécuter cette fonction avant d'envoyer des données à l'imprimante pour la première fois. Chargez le numéro de fonction 1 dans le registre AH ; aucun autre paramètre n'est requis.
Fonction 2 : Lire l'état de l'imprimante
La fonction 2 charge l'octet d'état dans le registre AH. Comme mentionné ci-dessus, l'octet d'état vous indique l'état actuel de l'imprimante. Chargez la fonction numéro 2 dans le registre AH ; aucun autre paramètre n'est requis.