Interruption 10h |
Fonction 09h |
Écriture du caractère et l'attribut |
---|---|---|
MDA, CGA, PC Junior, EGA, MCGA, VGA, IBM 8514/A, Super VGA |
Description
Cette fonction permet l'écriture d'un caractère et son attribut à la position du curseur.
Entrée
Registre | Description | |||
---|---|---|---|---|
AH | 09h | |||
AL | Ce registre permet d'indiquer le caractère à afficher (voir la table ASCII) | |||
BH | Ce registre permet d'indiquer la page (la première page est ou la page par défaut, correspond à la valeur 0) | |||
BL | Ce registre permet d'indiquer l'attribut (en mode texte) ou la couleur (en mode graphique). Voici le format d'un attribut en couleur : | |||
Bits | Description | |||
0 à 3 | Couleur de l'écriture: | |||
Valeur | Description | |||
0 (0000b) | Cette valeur permet d'indiquer la couleur noir | |||
1 (0001b) | Cette valeur permet d'indiquer la couleur bleu | |||
2 (0010b) | Cette valeur permet d'indiquer la couleur verte | |||
3 (0011b) | Cette valeur permet d'indiquer la couleur cyan | |||
4 (0100b) | Cette valeur permet d'indiquer la couleur rouge | |||
5 (0101b) | Cette valeur permet d'indiquer la couleur magenta | |||
6 (0110b) | Cette valeur permet d'indiquer la couleur brune | |||
7 (0111b) | Cette valeur permet d'indiquer la couleur gris clair | |||
8 (1000b) | Cette valeur permet d'indiquer la couleur gris foncé | |||
9 (1001b) | Cette valeur permet d'indiquer la couleur bleu clair | |||
10 (1010b) | Cette valeur permet d'indiquer la couleur vert clair | |||
11 (1011b) | Cette valeur permet d'indiquer la couleur cyan clair | |||
12 (1100b) | Cette valeur permet d'indiquer la couleur rouge clair | |||
13 (1101b) | Cette valeur permet d'indiquer la couleur magenta clair | |||
14 (1110b) | Cette valeur permet d'indiquer la couleur jaune | |||
15 (1111b) | Cette valeur permet d'indiquer la couleur blanche | |||
4 à 6 | Couleur de l'arrière-plan de l'écriture: | |||
Valeur | Description | |||
0 (000b) | Cette valeur permet d'indiquer la couleur noir | |||
1 (001b) | Cette valeur permet d'indiquer la couleur bleu | |||
2 (010b) | Cette valeur permet d'indiquer la couleur verte | |||
3 (011b) | Cette valeur permet d'indiquer la couleur cyan | |||
4 (100b) | Cette valeur permet d'indiquer la couleur rouge | |||
5 (101b) | Cette valeur permet d'indiquer la couleur magenta | |||
6 (110b) | Cette valeur permet d'indiquer la couleur brune | |||
7 (111b) | Cette valeur permet d'indiquer la couleur gris clair | |||
7 | Ce bit permet d'indiquer un clignotement ou un arrière-plan de haute-intensité | |||
Voici le format d'un attribut en monochrome : | ||||
Bits | Description | |||
0 | Soulignement de l'écriture | |||
1 à 3 | Teinte de l'écriture | |||
Valeur | Description | |||
0 (000b) | Cette valeur permet d'indiquer la teinte noir | |||
1 (001b) | Cette valeur permet d'indiquer la teinte grise | |||
2 (010b) | Cette valeur permet d'indiquer la teinte grise | |||
3 (011b) | Cette valeur permet d'indiquer la teinte grise | |||
4 (100b) | Cette valeur permet d'indiquer la teinte noir | |||
5 (101b) | Cette valeur permet d'indiquer la teinte grise | |||
6 (110b) | Cette valeur permet d'indiquer la teinte grise | |||
7 (111b) | Cette valeur permet d'indiquer la teinte blanche | |||
4 à 6 | Teinte de l'arrière-plan de l'écriture | |||
Valeur | Description | |||
0 (000b) | Cette valeur permet d'indiquer la teinte noir | |||
1 (001b) | Cette valeur permet d'indiquer la teinte grise | |||
2 (010b) | Cette valeur permet d'indiquer la teinte grise | |||
3 (011b) | Cette valeur permet d'indiquer la teinte grise | |||
4 (100b) | Cette valeur permet d'indiquer la teinte grise | |||
5 (101b) | Cette valeur permet d'indiquer la teinte grise | |||
6 (110b) | Cette valeur permet d'indiquer la teinte grise | |||
7 (111b) | Cette valeur permet d'indiquer la teinte grise | |||
7 | Ce bit permet d'indiquer un clignotement ou un arrière-plan de haute-intensité | |||
CX | Ce registre permet d'indiquer le nombre de caractères à écrire (facteur de duplication) |
Sortie
Aucune
Remarques
- Cette fonction ne modifie pas la position du curseur, ainsi, par exemple, si vous appeler 10 fois cette fonction avec des caractères différents, sans avoir changer la position du curseur, vous verrez uniquement l'affichage de votre 10ième caractères.
- Le facteur de duplication ne s'applique sur la ligne texte courante en mode d'affichage graphique.
- Les caractères inférieur à 32, soit les caractères de contrôles, sont affichés comme n'importe quel autre caractères. Ainsi, toutes les valeurs de AL entraînent une sorte d'affichage; les caractères de contrôle, notamment le bip, le retour en arrière, le retour de chariot et le saut de ligne, ne sont pas reconnus comme caractères spéciaux et n'affectent pas la position du curseur.
- Les cartes vidéo CGA et le micro-ordinateur PC Junior, utilisant les modes vidéo de 04h à 06h, la police de caractères entre les codes ASCII 80h et FFh sont indiqué à l'adresse pointer par l'Interruption 1Fh. Sur le PC Junior, l'adresse de la table pour les codes de caractères 00h à 7Fh est entreposée dans le vecteur d'interruption 44h. Des jeux de caractères alternatifs peuvent être installés en les chargeant en mémoire et en mettant à jour ce vecteur.
- Les cartes vidéo EGA, MCGA, VGA et IBM 8514/A propose en mode d'affichage graphique, une adresse de table de définitions de caractères, étant indiqué par l'interruption 43h. Vous pouvez donc changer l'adresse de l'Interruption 43h afin de changer l'apparence des caractères que vous souhaitez afficher.
- Après l'écriture d'un caractère, le curseur doit être déplacé explicitement avec l'interruption 10h, fonction 02h vers la position suivante.
- Pour écrire un caractère sans modifier l'attribut à la position actuelle du curseur, utilisez l'interruption 10h, fonction 0Ah.
- Si cette fonction est utilisée pour écrire des caractères en mode graphique et que le bit 7 de BL est fixé sur 1, le caractère sera un OU exclusif (XOR) avec le contenu d'affichage actuel. Cette fonction peut être utilisée pour écrire des caractères puis les «effacer».
Exemples
L'exemple suivant, en Turbo Pascal, permet d'afficher un 80 caractères de trèfle sur une ligne avec un fond vert et l'écriture verte :
on obtiendra le résultat suivant :
L'exemple suivant, en Turbo Pascal, permet d'afficher une chaine de caractères «Gladir.com!» en haut de l'écran avec un fond bleu et la couleur cyan clair :
- Program Write09hSamples;
-
- Procedure LocateXY(X,Y:Byte);Assembler;ASM
- MOV DH,Y
- MOV DL,X
- MOV AH,02h
- MOV BH,0
- INT 10h
- END;
-
- Procedure WriteChar(C:Char);Assembler;ASM
- MOV AH,09h
- MOV AL,Byte(C)
- MOV BL,1Bh { Arrière-plan bleu, couleur de premier plan cyan clair }
- MOV BH,0
- MOV CX,1
- INT 10h
- END;
-
-
- Procedure WriteString(Const S:String);
- Var
- I:Byte;
- Begin
- For I:=1 to Length(S)do Begin
- LocateXY(I-1,0);
- WriteChar(S[I]);
- End;
- End;
-
- BEGIN
- WriteString('Gladir.com!');
- END.
on obtiendra le résultat suivant sur la première ligne d'affichage :
Gladir.com!Voir également
La Bible du PC: Programmation système - Sixième Edition, Edition Micro-Application, Michael Tischer, 1996, ISBN: 2-7429-0544-8, page 1583.
Aide-mémoire des interruptions du MS-DOS, Edition Marabout, Philippe Mercier, 1990, ISBN: 2-501-01297-6, page 45 à 46.
The Undocumented PC: A programmer's Guide to I/O, CPUs, and Fixed Memory Areas - Second Edition, Edition Addison-Wesley, Frank van Gilluwe, 1997, ISBN: 0-201-47950-8, page 402 à 403.