BIOSCOM |
COM du BIOS |
Turbo C++ |
bios.h |
Syntaxe
int bioscom(int cmd, char abyte, int port);
|
Paramètres
Nom |
Description |
cmd |
Ce paramètre permet d'indiquer la fonction BIOS à exécuter via INT 14h. |
abyte |
Ce paramètre permet d'indiquer si cmd = 0 (envoi), d'envoyer un caractère. Sinon, il peut être ignoré. |
port |
Ce paramètre permet d'indiquer quel port série utiliser. |
Description
Cette fonction permet d'appeler une fonction de l'interruption 14h du BIOS permettant la communication série.
Remarques
- bioscom effectue diverses communications RS-232 via le port d'entrée/sortie indiqué dans port.
- Une valeur de port de 0 correspond à COM1, 1 à COM2, et ainsi de suite.
- La valeur de cmd peut être l'une des suivantes :
Valeur |
Description |
0 |
Définit les paramètres de communication sur la valeur en octet. |
1 |
Envoie le caractère dans un octet via la ligne de communication. |
2 |
Reçoit un caractère de la ligne de communication. |
3 |
Renvoie l'état actuel du port de communication. |
- abyte est une combinaison des bits suivants (une valeur est sélectionnée dans chacun des groupes) :
Valeur |
Description |
Valeur |
Description |
0x02
| 7 bits de données |
0x00 |
110 bauds |
0x03 |
8 bits de données |
0x20 |
150 bauds |
|
|
0x40 |
300 bauds |
0x00 |
1 bit d'arrêt |
|
|
|
|
0x60 |
600 bauds |
0x04 |
2 bits d'arrêt |
0x80 |
1200 bauds |
0x00 |
Aucune parité |
0xA0 |
2400 bauds |
0x08 |
Parité impaire |
0xC0 |
4800 bauds |
0x18 |
Parité paire |
0xE0 |
9600 bauds |
Par exemple, une valeur de 0xEB (0xE0 |0x08 |0x00 |0x03) pour abyte définit le port de communication à 9 600 bauds, parité impaire, 1 bit d'arrêt
et 8 bits de données. bioscom utilise l'interruption BIOS 0x14.
- Valeur de retour : Pour toutes les valeurs de cmd, bioscom renvoie un entier de 16 bits dont les 8 bits supérieurs sont des bits d'état et les 8 bits inférieurs
varient selon la valeur de cmd. Les bits supérieurs de la valeur de retour sont définis comme suit :
Bit |
Description |
Bit 15 |
Délai d'attente |
Bit 14 |
Registre à décalage de transmission vide |
Bit 13 |
Registre de maintien de transmission vide |
Bit 12 |
Détection de rupture |
Bit 11 |
Erreur de trame |
Bit 10 |
Erreur de parité |
Bit 9 |
Erreur de dépassement |
Bit 8 |
Données prêtes |
Si la valeur abyte n'a pas pu être envoyée, le bit 15 est mis à 1. Sinon, les bits supérieurs et inférieurs restants sont correctement
définis. Par exemple, en cas d'erreur de trame, le bit 11 est mis à 1.
- Avec une valeur cmd de 2, l'octet lu se trouve dans les bits inférieurs de la valeur de retour en l'absence d'erreur. En cas d'erreur, au moins un des
bits supérieurs est mis à 1. Si aucun bit supérieur n'est mis à 1, l'octet a été reçu sans erreur.
- Avec une valeur cmd de 0 ou 3, la valeur de retour a les bits supérieurs définis comme défini, et les bits inférieurs comme suit :
Bit |
Description |
Bit 7 |
Détection du signal de ligne reçu |
Bit 6 |
Indicateur de sonnerie |
Bit 5 |
Ensemble de données prêt |
Bit 4 |
Prêt à envoyer |
Bit 3 |
Détecteur de changement de signal de ligne reçue |
Bit 2 |
Détecteur de sonnerie de bord arrière |
Bit 1 |
Changement de l'ensemble de données prêt |
Bit 0 |
Changement de l'état prêt à envoyer |
- Portabilité : bioscom fonctionne uniquement avec les IBM PC et compatibles.
Exemple
- #include <bios.h>
- #include <conio.h>
-
- #define COM1 0
- #define DATA READY 0x100
- #define SETTINGS (0x80|0x02|0x00|0x00)
-
- int main(void) {
- register int in, out, status;
- bioscom(0, SETTINGS, COM1);
- cprintf("... BIOSCOM [ESC] pour quitter ... \n");
- while (1) {
- status=bioscom(3, 0, COM1);
- if (status & DATA_READY);
- if ((out = bioscom(2, 0, COM1) & 0x7F) != 0) putch(out);
- if (kbhit ()) {
- if ((in= getch()) == '\x1B') return 0;
- bioscom(1, in, COM1);
- }
- }
- return 0
- }
Dernière mise à jour : Dimanche, le 28 Février 2021