Accueil des Chevaliers de Malte - Développeur Notes légal des Chevaliers de Malte/Développeur Flux RSS des nouvelles du site Les Chevaliers de Malte/Développeur - Assembleur et Pascal - Interruption 10h: Fonction 02h Section du logiciel DOS «MonsterBook» des Chevaliers de Malte/Développeur Inventaire de la bibliothèque des Chevaliers de Malte/Développeur Entrée administrateur

00h à 07h 08h à 0Fh 10h 11h 12h 13h 14h 15h 16h 17h 18h 19h 1Ah 1Bh 1Ch 1Dh 1Eh 1Fh 20h 21h 22h 23h 24h 25h 26h 27h 28h 29h 2Ah 2Bh 2Eh 2Fh 33h 41h 4Bh 59h 5Ch 67h 7Ah 80h à F0h Rechercher

Interruption 10h Fonction 02h Position du curseur
MDA, CGA, PC Junior, EGA, MCGA, VGA, IBM 8514/AI, SVGA

Description

Cette fonction permet le positionnement du curseur dans la page vidéo spécifié.


Entrée

Registre Description
AH 02h
BH Ce registre permet d'indiquer la page
DH Ce registre permet d'indiquer la ligne (Coordonnnée Y)
DL Ce registre permet d'indiquer la colonne (Coordonnnée X)


Sortie

 Aucune

Remarques
  • La coordonnée (x,y)=(0,0) représente le point en haut à gauche de l'écran.

    La valeur maximale de chaque coordonnée texte dépend de la carte vidéo et du mode d'affichage, voici un tableau récapitulatif:

    Mode X maximum Y maximum Optionnel seulement
    00h 39 24  
    01h 39 24  
    02h 79 24  
    03h 79 24  
    04h 39 24  
    05h 39 24  
    06h 79 24  
    07h 79 24  
    08h 19 24 PC Junior
    08h 131 24 Graphics Solution (Super CGA d'ATI)
    09h 39 24  
    0Ah 79 24  
    0Bh Réservé Réservé  
    0Ch Réservé Réservé  
    0Dh 39 24  
    0Eh 79 24  
    0Fh 79 24  
    10h 79 24  
    11h 79 29  
    12h 79 29  
    13h 39 24  
    ... ... ... ...

    Pour les autres modes, il suffit de soustraire 1 au nombre de colonne texte et d'également soustraire 1 au nombre de ligne texte.

    Voici l'algorithme de cette fonction d'interruption en Turbo Pascal:

    Procedure SetCursorPos;
    Var 
     Offset:Word;
    Begin
     Offset:=DH*MemW[$0040:$4A]+DL;
     Port[MemW[$0040:$63]]:=$0E; Port[MemW[$0040:$63]+1]:=Hi(Offset);
     Port[MemW[$0040:$63]]:=$0F; Port[MemW[$0040:$63]+1]:=Lo(Offset);
     MemW[$0040:$50+(BH shl 1)]:=DX;
    End;


Exemple

L'exemple suivant permet de position le curseur au coordonnées de colonne 7, ligne 8:

Ligne   DB 8
Colonne DB 7 
...
        MOV DH,Ligne    ; Met la ligne dans le registre
        MOV DL,Colonne  ; Met la colonne dans le registre
        MOV AH,02h      ; Fixe le numéro de la fonction
        MOV BH,0        ; Fixe le numéro de la page, soit 0
        INT 10h         ; Appelle l'interruption vidéo (10h)

Voir également

Interruption 10h, Fonction 03h: Demander la position du curseur,
Interruption 10h, Fonction 05h: Sélection de la page affichée

Références

Aide-mémoire des interruptions du MS-DOS, Edition Marabout, Philippe Mercier, 1990, ISBN: 2-501-01297-6, page 37 à 38.
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 399.

Dernière mise à jour: Jeudi, le 2 juillet 2009