Interruption 10h |
Fonction 01h |
Sélection du type de curseur |
---|---|---|
MDA, CGA, PC Junior, EGA, MCGA, VGA, IBM 8514/A, Super VGA |
Description
Cette fonction permet de sélectionner le format du curseur matériel en mode texte. En mode graphique, cette fonction est sans effet apparente mais les variables du BIOS sont malgré tout modifié.
Entrée
Registre | Description | |
---|---|---|
AH | 01h | |
CH | Ce registre permet d'indiquer la ligne de début du curseur. Les bits 5 et 6 ont des fonctionnalités particulières : | |
Bits 5 et 6 | Description | |
00b | Le curseur est normal | |
01b | Le curseur est invisible | |
10b | Le curseur clignote de façon irrégulière (MDA, CGA, HGC); Invisible (EGA+) | |
11b | Le curseur clignote lentement (MDA, CGA, HGC); Invisible (EGA+) | |
CL | Ce registre permet d'indiquer la ligne de fin du curseur. Les bits 5 et 6 ont des fonctionnalités particulières : | |
Bits 5 et 6 | Description | |
00b | Le curseur est normal | |
01b | Le curseur est invisible | |
10b | Le curseur clignote de façon irrégulière (MDA, CGA, HGC); Invisible (EGA+) | |
11b | Le curseur clignote lentement (MDA, CGA, HGC); Invisible (EGA+) |
Sortie
Aucune
Remarques
- Lorsqu'on est dans un mode d'affichage texte, la carte vidéo provoque un clignotement du curseur, lequel ne peut pas être interdit. Tandis qu'en mode d'affichage graphique, le curseur n'est pas disponible avec les cartes vidéo standard proposé par le standard IBM PC.
- Dans le cas des cartes vidéo EGA, MCGA, VGA, IBM 8514/AI dans les modes d'affichages de 0 à 3 (voir Interruption 10h, Fonction 00h), le BIOS situé en ROM applique une émulation du curseur, afin que les valeurs de début et de fin du curseur correspond à une police de caractères avec une taille de 8x8 pixels.
- On peut faire disparaître le curseur de plusieurs façons. Officiellement, il est recommandé, afin d'être compatible avec les cartes vidéos MDA, CGA, EGA, VGA et IBM 8514/AI d'IBM, de mettre la valeur 20h dans le registre CH de cette fonction d'interruption. Par ailleurs, il existe une autre technique fortement déconseillé, étant de fixer des valeurs illégales de début de fin de lignes de curseur afin de le faire faire disparaître; cette technique fait disparaître le curseur sur certaines cartes vidéo et le fait apparaître avec une inversion de la ligne de début et de fin du curseur sur d'autres cartes vidéo. Enfin, il existe aussi la technique de positionner le curseur à une position en dehors de l'écran, mais beaucoup de cartes vidéo ignorent la position demandé lorsqu'elle est situé en dehors de l'affichage et donc le curseur est toujours présent. Ainsi, la seule technique vraiment compatible avec toutes les cartes vidéos, consiste à mettre la valeur 20h dans le registre CH de cette fonction d'interruption.
- Si le BIOS de la carte vidéo est 100% compatible avec le standard des IBM PC, la position du curseur est préservé à l'adresse de cellule mémoire 0040h:0050h et son format est conservé à l'adresse de cellule mémoire 0040h:0060h.
- Voici l'algorithme de cette fonction d'interruption en «Turbo Pascal»:
- Procedure SetCursor;Begin
- Port[MemW[$0040:$63]]:=$0A; Port[MemW[$0040:$63]+1]:=CL;
- Port[MemW[$0040:$63]]:=$0B; Port[MemW[$0040:$63]+1]:=CH;
- MemW[$0040:$60]:=CX;
- End;
- UltraVision : Il existe un bogue avec la cartes vidéo EGA du fabricant UltraVision, le BIOS reforme le curseur pour le mode en 43 lignes, mais renvoie le curseur sans l'avoir changé de format. Ainsi, la cartes vidéo UltraVision réduisent la taille de la police de caractères en supposant que les polices de caractères ont 14 lignes de hauteur en monochrome et 8 lignes de hauteur en couleurs (cet appel n'est pas valide si le curseur en mode émulation est désactivé). Par conséquent, les applications souhaitant modifier le curseur en programmant directement le matériel de la carte EGA devront appeler l'interruption 10h, Fonction 11h, Sous-Fonction 30h ou lire la cellule mémoire 0040:0085h en premier afin de déterminer la hauteur de la police de caractères courante. De plus, sur certaines cartes vidéos, le réglage de la ligne de fin à un nombre de lignes supérieur à la police de caractères provoquera un déplacement du curseur vers le haut de la cellule du caractère suivant à droit.
- Il existe un bogue dans les BIOS de l'AMI (American Megatrends Incorporated) pour les microprocesseurs 80386 et les BIOS AST Premier 386, ainsi, si le registre AL ne contient pas une valeur égale au mode vidéo, alors le système plantera.
Exemples
L'exemple suivant permet de rendre invisible l'affichage du curseur en mode texte :
Voici le même exemple en utilisant le langage de programmation Turbo Pascal 6 ou supérieur de Borland :
Voici encore le même exemple en utilisant le langage de programmation Turbo C de Borland :
- #include <DOS.H>
- void main(void){
- _AH=0x01;
- _CX=0x2020;
- geninterrupt(0x10);
- }
Voir également
Interruption 10h, Fonction 03h: Demander la position du curseur,
Interruption 10h, Fonction 12h, Sous-Fonction 34h: Activer/désactiver l'émulation curseur,
Interruption 10h, Fonction CDh, Sous-Fonction 05h: Fixer le type de curseur
Références
La Bible du PC: Programmation système - Sixième Edition, Edition Micro-Application, Michael Tischer, 1996, ISBN: 2-7429-0544-8, page 1578.
Aide-mémoire des interruptions du MS-DOS, Edition Marabout, Philippe Mercier, 1990, ISBN: 2-501-01297-6, page 36 à 37.
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 398 à 399.