Copyright: (c) 1996 MICRO APPLICATION


INTERRUPTIONS ET FONCTIONS DU PC

LA BIBLE PC 5e EDITION - Copyright Micro Application


Fonctions BIOS

Les interruptions 10h à 1Ah permettent d'accéder aux diverses fonctions qui rendent le BIOS en ROM disponible pour assurer la communication entre un programme et le matériel. Il s'agit non seulement des fonctions autorisant l'accès au matériel vidéo, au clavier, aux disques durs et unités de disquettes, mais aussi pour le contrôle des données de configuration ainsi que la programmation des interfaces série et parallèle et l'horloge alimentée par piles.

Notez que les fonctions de l'interruption 13h sont citées deux fois selon qu'elles interviennent sur des unités de disquettes ou disques durs. Ainsi, choisissez le paragraphe qui vous intéresse sachant que vous souhaitez utiliser ces fonctions pour accéder à des disquettes ou des disques durs.

Sauf indication supplémentaire, les diverses fonctions conviennent à tous les types de PC. Mais il existe toute une série de fonctions ne concernant que les XT, d'autres les AT. Nous avons omis d'énumérer les innombrables extensions du BIOS développées par des sociétés telles que Compaq à l'origine du BIOS en ROM pour la bonne raison qu'elles ne sont pas reconnues comme des standards. Il en est de même des fonctions étendues du PS/2 d'IBM, mais elles sont cependant entièrement compatibles avec les fonctions présentées dans ce contexte.

Interruption 10h	Interruption 11h	Interruption 12h

Interruption 13h	Interruption 14h	Interruption 15h

Interruption 16h	Interruption 17h	Interruption 18h

Interruption 19h	Interruption 1Ah


Interruption 10h

Fonction 00h	Définir le mode vidéo

Fonction 01h	Définr l'apparence du curseur

Fonction 02h	Placer le curseur

Fonction 03h	Lire la position du curseur

Fonction 04h	Lire la position du crayon optique

Fonction 05h	Sélectionner la page actuelle de l'écran

Fonction 06h	Faire défiler des lignes de texte vers le haut

Fonction 07h	Faire défiler des lignes de texte vers le bas

Fonction 08h 	Lire un caractère/une couleur

Fonction 09h	Ecrire un caractère/une couleur

Fonction 0Ah	Ecrire un caractère

Fonction 0Bh, Sous-Fct 0	Sélectionner les couleurs de cadre et de fond

Fonction 0Bh, Sous-Fct 1	Sélectionner la palette de couleurs

Fonction 0Ch	Ecrire un point graphique

Fonction 0Dh	Lire un point graphique

Fonction 0Eh	Ecrire un caractère

Fonction 0Fh	Lire le mode vidéo

Fonction 13h	Ecrire une chaîne de caractères


Int 10h, Fct 00h    Ecran : Définir le mode vidéo    BIOS

Cette fonction permet de sélectionner et initialiser un mode vidéo. L'écran est alors entièrement effacé. De ce fait, cette fonction peut aussi être appelée pour vider l'écran d'une façon très simple même lorsqu'on ne souhaite pas changer le mode vidéo.

Entrée :

AH 	= 00h

AL	Mode	Résolution	Résolution	Couleurs	Système

T/G	texte	graphique

00h	T	40x25  8x8	Gris	CGA,PCjr

T	40x25  8x14	Gris	EGA

T	40x25  8x16	16	MCGA

T	40x25  9x16	16	VGA

01h	T	40x25  8x8	16	CGA,PCjr

T	40x25  8x14	16	EGA

T	40x25  8x16	16	MCGA

T	40x25  9x16	16	VGA

02h	T	80x25  8x8	16 gris	CGA,PCjr

T	80x25  8x14	16 gris	EGA

T	80x25  8x16	16	MCGA

T	80x25  9x16	16	VGA

03h	T	80x25  8x8	16	CGA,PCjr

T	80x25  8x14	16	EGA

T	80x25  8x16	16	MCGA

T	80x25  9x16	16	VGA

04h	G	40x25  8x8	320x200	4	CGA,PCjr,EGA,MCGA,VGA

05h	G	40x25  8x8	320x200	4 gris	CGA,PCjr,EGA

G	40x25  8x8	320x200	4	MCGA,VGA

06h	G	80x25  8x8	640x200	2	CGA,PCjr,EGA,MCGA,VGA

07h	T	80x25  9x14	mono	MDA,Hercules,EGA

T	80x25  9x16	mono	VGA

08h	G	20x25  8x8	160x200	16	PCjr

G	90x43  8x8	720x352	mono	Hercules + MSHERC.COM

09h	G	40x25  8x8	320x200	16	PCjr

0Ah	G	80x25  8x8	640x200	4	PCjr

0Bh	réservé pour le BIOS EGA

0Ch	réservé pour le BIOS EGA

0Dh	G	40x25  8x8	320x200	16	EGA,VGA

0Eh	G	80x25  8x8	640x200	16	EGA,VGA

0Fh	G	80x25  8x14	640x350	mono	EGA,VGA

10h	G	80x25  8x14	640x350	4	EGA 64 Ko

G	640x350	16	EGA 256 Ko,VGA

11h	G	80x30  8x16	640x480	mono	VGA,MCGA

12h	G	80x30  8x16	640x480 	16/256k	VGA

13h	G	40x25  8x8	320x200 	256/256k	VGA,MCGA

18h	T	132x44  8x8	mono	Tseng Labs EVA

T	132x44  8x8	16/256	Tseng ET4000

19h	T	132x25  8x14	mono	Tseng Labs EVA

T	132x25  8x14	16/256	Tseng ET4000

1Ah	T	132x28  8x13	mono	Tseng Labs EVA

T	132x28  8x13	16/256	Tseng ET4000

22h	T	132x44  8x8	Tseng Labs EVA

T	132x44  8x8	16/256	Tseng ET4000

T	132x44	16	Orchid Prodesigner VGA

23h	T	132x25  6x14	Tseng Labs EVA

T	132x25  8x14	16/256	Tseng ET4000

T	132x28	16	Orchid Prodesigner VGA

24h	T	132x28  6x13	Tseng Labs EVA

T	132x28  8x13	16/256	Tseng ET4000

T	132x25	16	Orchid Prodesigner VGA

25h	G	80x60  8x8	640x480	Tseng Labs EVA

G	80x60  8x8	640x480	16/256	Tseng ET4000

G	80x60  8x8	640x480	16	Orchid Prodesigner VGA

26h	T	80x60  8x8	Tseng Labs EVA

T	80x60  8x8	16/256	Tseng ET4000

T	80x60	16	Orchid ProDesigner VGA

G	100x37  8x16	800x600	16	Orchid

G	100x37  8x16	800x600	16/256	Tseng ET4000

T	100x40  8x16	16	Orchid Prodesigner VGA

T	100x40  8x15	16/256	Tseng ET4000

2Dh	G	80x25  8x14	640x350	256/256k	Tseng ET4000

2Eh	G	80x30  8x16	640x480 	256/256k	Orchid

G	80x30  8x16	640x480	256/256k 	Tseng ET4000

2Fh	G	80x25  8x16	640x400	256/256k	Tseng ET4000

30h	G	100x37  8x16	800x600 	256/256k	Orchid

G	100x37  8x16	800x600 	256/256k	Tseng ET4000

37h	G	128x48  8x16 	1024x768	16	Orchid

38h	G	128x48  8x16 	1024x768 	256/256k 	Tseng ET4000

6Ah	G	800x600	16	VESA standard

Sortie :

aucune sortie

Remarques :

·	Les couleurs pour les modes 4, 5 et 6 peuvent être fixées à l'aide de la fonction 11.

·	Le contenu des registres BX, CX, DX et des registres SS, CS et DS n'est pas modifié. Le contenu de tous les autres registres, et notamment celui des registres SI et DI, peut avoir été modifié


Int 10h, Fct 01h    Ecran : Définition de l'apparence du curseur    BIOS
Int 10h, Fct 01h    Ecran : Définir l'apparence du curseur    BIOS

Les lignes de départ et de fin du curseur de l'écran sont fixées en  appelant cette fonction. Cette fonction ne dépend pas de la page écran actuellement affichée sur l'écran.

Entrée :

AH 	= 01h

CH 	= Ligne de départ du curseur

CL 	= Ligne de fin du curseur

Sortie :

aucune sortie

Remarques :

·	Les valeurs autorisées pour les lignes de départ et de fin dépendent de la carte vidéo installée. Les valeurs suivantes sont autorisées :

Cartes écran monochromes :	0 - 13

Cartes écran couleur :	0 - 7

·	Le BIOS fixe au départ les valeurs suivantes :

Cartes écran monochromes :	lignes 11 et 12

Cartes écran couleur :	lignes 6 et 7

·	Il ne faut pas définir des valeurs non autorisées à l'aide de cette fonction car cela peut avoir des conséquences imprévisibles (en général, une disparition du curseur).

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Int 10h, Fct 02h    Ecran : Positionnement du curseur    BIOS
Int 10h, Fct 02h    Ecran : Placer le curseur    BIOS

Cette fonction permet de déplacer le curseur qui fixe la position de la sortie de caractères sur l'écran, à l'aide d'une des fonctions de sortie de caractères du BIOS.

Entrée :

AH 	= 02h

BH 	= Numéro de la page écran

DH	= Ligne de l'écran

DL 	= Colonne de l'écran

Sortie :

aucune sortie

Remarques :

·	Le curseur clignotant de l'écran n'est déplacé par cette fonction qu'à condition que la page écran appelée soit la page actuelle de l'écran.

·	La ligne de l'écran est une valeur entre 0 et 24.

·	La colonne de l'écran est une valeur comprise entre 0 et 79 (en 80 colonnes) ou entre 0 et 39 (en 40 colonnes), suivant le mode vidéo fixé.

·	Une méthode pour faire disparaître le curseur clignotant consiste à le placer dans une position hors du champ de l'écran (par exemple colonne 0, ligne 25).

·	Le numéro de la page écran dépend aussi du nombre de pages écran disponibles sur la carte vidéo utilisée.

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Int 10h, Fct 03h    Ecran : Lecture de la position du curseur    BIOS
Int 10h, Fct 03h    Ecran : Lire la position du curseur    BIOS

Lecture de la position du curseur de texte dans une page écran et lecture des lignes de départ et de fin du curseur clignotant de l'écran.

Entrée :

AH	 = 03h

BH 	= Numéro de la page écran

Sortie :

DH 	= Ligne de l'écran dans laquelle figure le curseur

DL 	= Colonne de l'écran dans laquelle figure le curseur

CH 	= Ligne de départ du curseur clignotant de l'écran

CL 	= Ligne de fin du curseur clignotant de l'écran

Remarques :

·	Le numéro de la page écran dépend aussi du nombre de pages écran disponibles sur la carte vidéo utilisée.

·	Les ligne et colonne de l'écran se réfèrent au système de coordonnées de texte.

·	Le contenu du registre BX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Int 10h, Fct 04h    Ecran : Lecture de la position du crayon optique    BIOS
Int 10h, Fct 04h    Ecran : Lire la position du crayon optique    BIOS

Si possible, la position du crayon optique sur l'écran est lue.

Entrée :

AH 	= 04h

Sortie :

AH 	= 0 : position du crayon optique ne peut être testée pour le moment.

AH 	= 1 : position du crayon optique a pu être obtenue, auquel cas :

DH = Ligne écran du crayon optique (mode texte)

DL = Colonne écran du crayon optique (mode texte)

CH = Ligne écran du crayon optique (mode graphique)

BX = Colonne écran du crayon optique (mode graphique)

Remarques :

·	L'appel de cette fonction doit être répété jusqu'à ce qu'un 1 soit renvoyé dans le registre AH car ce n'est que dans ce cas que les coordonnées peuvent être lues dans les autres registres.

·	Les coordonnées indiquées se réfèrent naturellement au mode vidéo actuel et à sa résolution horizontale et verticale.

·	Les coordonnées du crayon optique ne peuvent pas être déterminées très précisément, surtout en mode graphique. La coordonnée Y (ligne) est toujours une valeur paire de sorte qu'il n'est pas possible de distinguer si le crayon optique se trouve sur la ligne 8 ou 9. En mode graphique 320*200 points, la coordonnée X (colonne) est toujours un multiple entier de 4 et en mode graphique 640*200 points toujours un multiple entier de 8.

·	Le contenu du registre CL et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Int 10h, Fct 05h    Ecran : Sélection de la page actuelle de l'écran    BIOS
Int 10h, Fct 05h    Ecran : Sélectionner la page actuelle de l'écran    BIOS

Sélection de la page écran actuelle, c'est-à-dire de celle qui doit être affichée sur l'écran (mode texte uniquement).

Entrée :

AH 	=  05h

AL 	= Numéro de la page écran

Sortie :

aucune sortie

Remarques :

·	Le numéro de la page écran dépend aussi du nombre de pages écran disponibles sur la carte vidéo.

·	Lorsqu'une nouvelle page écran est activée le curseur clignotant de l'écran est toujours fixé sur la position du curseur de texte sur cette page.

·	Le fait de passer d'une page écran à l'autre n'affecte pas le contenu de ces pages.

·	Il n'est pas nécessaire qu'une page écran soit activée pour pouvoir y écrire.

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Int 10h, Fct 06h    Ecran : Faire défiler des lignes de texte vers le haut (scrolling)    BIOS
Int 10h, Fct 06h    Ecran : Faire défiler des lignes de texte vers le haut    BIOS

Faire défiler d'une ou plusieurs lignes vers le haut ou effacer une partie de la page écran actuelle

Entrée :

AH 	=  06h

AL 	= Nombre de lignes dont la fenêtre doit être décalée vers le haut (0 signifie effacer la fenêtre)

CH 	= Ligne écran du coin supérieur gauche de la fenêtre

CL 	= Colonne écran du coin supérieur gauche de la fenêtre

DH 	= Ligne écran du coin inférieur droit de la fenêtre

DL 	= Colonne écran du coin inférieur droit de la fenêtre

BH 	= Couleur (attribut) pour les lignes vides

Sortie :

aucune sortie

Remarques :

·	Seule la page écran actuelle peut être modifiée par cette fonction

·	Le fait d'effacer la zone de l'écran (nombre de lignes = 0) revient à la remplir d'espaces (code ASCII 32).

·	Le contenu des lignes expulsées de l'écran lors du défilement est définitivement perdu et ne peut être récupéré.

·	Pour vider l'écran tout entier, il est préférable d'employer la fonction 0 de cette interruption.

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Int 10h, Fct 07h    Ecran : Faire défiler des lignes de texte vers le bas (scrolling)    BIOS
Int 10h, Fct 07h    Ecran : Faire défiler des lignes de texte vers le bas    BIOS

Faire défiler d'une ou plusieurs lignes vers le haut ou effacer une partie de la page écran actuelle

Entrée :

AH	= 07h

AL 	= Nombre de lignes dont la fenêtre doit être décalée vers le bas (0 signifie effacer la fenêtre)

CH 	= Ligne écran du coin supérieur gauche de la fenêtre

CL 	= Colonne écran du coin supérieur gauche de la fenêtre

DH 	= Ligne écran du coin inférieur droit de la fenêtre

DL 	= Colonne écran du coin inférieur droit de la fenêtre

BH 	= Couleur (attribut) pour les lignes vides

Sortie :

aucune sortie

Remarques :

·	Seule la page écran actuelle peut être modifiée par cette fonction

·	Le fait d'effacer la zone de l'écran (nombre de lignes = 0) revient à la remplir d'espaces (code ASCII 32).

·	Le contenu des lignes expulsées de l'écran lors du défilement est définitivement perdu et ne peut être récupéré.

·	Pour vider l'écran tout entier, il est préférable d'employer la fonction 0 de cette interruption.

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Int 10h, Fct 08h     Ecran : Lecture d'un caractère/d'une couleur    BIOS
Int 10h, Fct 08h     Ecran : Lire un caractère/d'une couleur    BIOS

Lecture du code ASCII et de la couleur (attribut) du caractère figurant dans la position actuelle du curseur.

Entrée :

AH 	= 08h

BH 	= Numéro de la page écran

Sortie :

AL 	= Code ASCII du caractère

AH 	= Couleur (attribut)

Remarques :

·	Le numéro de la page écran dépend aussi du nombre de pages écran disponibles sur la carte vidéo

·	Cette fonction peut également être appelée en mode graphique. Dans ce cas, le modèle de bits du caractère sur l'écran sera comparé avec les modèles de bits des caractères définis dans la ROM de caractères de la carte vidéo et avec les caractères qui ont été stockés dans une table en RAM dont l'adresse figure à l'interruption 1Fh. Si le caractère ne peut être identifié, le registre AL contiendra la valeur 0 après appel de la fonction.

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Int 10h, Fct 09h    Ecran : Ecriture d'un caractère/d'une couleur    BIOS
Int 10h, Fct 09h    Ecran : Ecrire un caractère/une couleur    BIOS

Ecrire un caractère dans une couleur déterminée dans la position actuelle du curseur (dans la page écran spécifiée).

Entrée :

AH 	=  09h

BH 	= Numéro de la page écran

CX 	= Nombre d'écritures successives du caractère

AL 	= Code ASCII du caractère

BL 	= Attribut

Sortie :

aucune sortie

Remarques :

·	Si le caractère indiqué doit être sorti plusieurs fois (auquel cas la valeur du registre CX est supérieure à 1), il faut, en mode graphique, que tous les caractères rentrent dans la page écran actuelle.

·	Les codes de commande "bell", "carriage return", etc..., ne sont pas identifiés comme tels mais sortis comme des codes ASCII normaux.

·	Cette fonction permet également de sortir des caractères en mode graphique. Dans ce cas, les modèles des caractères portant les codes 0 à 127 sont tirés dans une table en ROM et les modèles des caractères portant les codes 128 à 255 sont tirés d'une table en RAM qui doit avoir été installée préalablement avec l'instruction GRAFTABL du DOS.

·	En mode de texte, le contenu du registre BL définit l'octet d'attribut du caractère. En mode graphique, il détermine la couleur du caractère. En mode graphique 640*200 points, les valeurs 0 et 1, en mode graphique 320*200 points, les valeurs 0 à 3 sont possibles pour définir les différentes couleurs de la palette de couleurs sélectionnée.

·	Si le mode graphique est activé lors de la sortie de caractères et si le bit 7 du registre BL est fixé, le modèle de caractère est combiné par un 'ou exclusif' avec les points graphiques figurant sous ce caractère.

·	Seule la page écran actuelle peut être modifiée par cette fonction

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Int 10h, Fct 0Ah    Ecran : Ecriture d'un caractère    BIOS
Int 10h, Fct 0Ah    Ecran : Ecrire un caractère    BIOS

Un caractère est écrit dans la position actuelle du curseur dans la page écran spécifiée. La couleur de l'ancien caractère dans cette position de l'écran est maintenue.

Entrée :

AH 	= 0Ah

BH 	= Numéro de la page écran

CX 	= Nombre d'écritures successives du caractère

AL 	= Code ASCII du caractère

Sortie :

aucune sortie

Remarques :

·	Si le caractère indiqué doit être sorti plusieurs fois (auquel cas la valeur du registre CX est supérieure à 1), il faut, en mode graphique, que tous les caractères rentrent dans la page écran actuelle.

·	Les codes de commande "bell", "carriage return", etc..., ne sont pas identifiés comme tels mais sortis comme des codes ASCII normaux.

·	Cette fonction permet également de sortir des caractères en mode graphique. Dans ce cas, les modèles des caractères portant les codes 0 à 127 sont tirés dans une table en ROM et les modèles des caractères portant les codes 128 à 255 sont tirés d'une table en RAM qui doit avoir été installée préalablement avec l'instruction GRAFTABL du DOS.

·	En mode de texte, le contenu du registre BL définit l'octet d'attribut du caractère. En mode graphique, il détermine la couleur du caractère. En mode graphique 640*200 points, les valeurs 0 et 1, en mode graphique 320*200 points, les valeurs 0 à 3 sont possibles pour définir les différentes couleurs de la palette de couleurs sélectionnée.

·	Si le mode graphique est activé lors de la sortie de caractères et si le bit 7 du registre BL est fixé, le modèle de caractère est combiné par un 'ou exclusif' avec les points graphiques figurant sous ce caractère.

·	Cette fonction ne fait pas avancer le curseur vers la prochaine position de l'écran.

Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Int 10h, Fct 0Bh, Sous-Fct 0    Ecran : Sélection des couleurs de cadre et de fond    BIOS
Int 10h, Fct 0Bh, Sous-Fct 0    Ecran : Sélectionner des couleurs de cadre et de fond    BIOS

Cette fonction sert à sélectionner les couleurs de cadre et de fond pour les modes graphique et de texte.

Entrée :

AH 	= 0Bh

BH 	= 0

BL 	= Couleurs de cadre/de fond

Sortie :

aucune sortie

Remarques :

·	En mode graphique, la valeur de couleur transmise définit aussi bien la couleur du cadre de l'écran que celle du fond de l'écran. En mode de texte, la couleur du fond est définie séparément pour chaque caractère, de sorte que la valeur de couleur transmise définit uniquement la couleur du cadre de l'écran.

·	La valeur de couleur transmise peut être comprise entre 0 et 15 et peut donc représenter les 16 couleurs possibles.

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Int 10h, Fct 0Bh, Sous-Fct 1    Ecran : Sélection de la palette de couleurs    BIOS
Int 10h, Fct 0Bh, Sous-Fct 1    Ecran : Sélectionner la palette de couleurs    BIOS

Sélection d'une des deux palettes de couleurs pour le mode graphique 320*200 points.

Entrée :

AH 	= 0Bh

BH 	= 1

BL 	= Numéro de la palette de couleurs

Sortie :

aucune sortie

Remarques :

·	Deux palettes de couleurs sont disponibles. Elles portent les numéros 0 et 1 et contiennent les couleurs suivantes :

Palette 0 : vert, rouge, jaune

Palette 1 : turquoise, magenta, blanc

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Int 10h, Fct 0Ch    Ecran : Ecrire un point graphique    BIOS

Définir la valeur de couleur pour un point écran en mode graphique.

Entrée :

AH 	= 0Ch

DX 	= Ligne de l'écran

CX 	= Colonne de l'écran

AL 	= Valeur de couleur

Sortie :

aucune sortie

Remarques :

·	La valeur de couleur se réfère au mode graphique actuel.

·	En mode 640*200 points, seules les valeurs 0 et 1 sont autorisées.

·	En mode 320*200 points, les valeurs 0 à 3 sont autorisées. Elles génèrent une couleur en fonction de la palette de couleurs sélectionnée. La valeur 0 correspond à la couleur sélectionnée pour le fond, 1 à la première couleur de la palette sélectionnée, 2 à la seconde, etc...

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Int 10h, Fct 0Dh    Ecran : Lire un point graphique     BIOS

Lire la couleur d'un point écran en mode graphique.

Entrée :

AH 	= 0Dh

DX 	= Ligne de l'écran

CX 	= Colonne de l'écran

Sortie :

AL 	= Valeur de couleur

Remarques :

·	La valeur de couleur se réfère au mode graphique actuel.

·	En mode 640*200 points, seules les valeurs 0 et 1 sont possibles.

·	En mode 320*200 points, les valeurs 0 à 3 sont autorisées. Elles génèrent une couleur en fonction de la palette de couleurs sélectionnée. La valeur 0 correspond à la couleur sélectionnée pour le fond, 1 à la première couleur de la palette sélectionnée, 2 à la seconde, etc...

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Int 10h, Fct 0Eh    Ecran : Ecrire un caractère     BIOS

Un caractère est écrit dans la position actuelle du curseur dans la page écran actuelle. La couleur de l'ancien caractère dans cette position de l'écran est maintenue.

Entrée :

AH 	= 0Eh

AL 	= Code ASCII du caractère

BL 	= Couleur de premier plan du caractère (en mode graphique uniquement)

Sortie :

aucune sortie

Remarques :

·	Cette fonction n'interprète pas les différents codes de commande tels que "bell" et "carriage return" comme des codes ASCII normaux mais comme des codes de commande particuliers. La sortie du caractère "bell" produira par exemple un bip.

·	Après sortie d'un caractère à l'aide de cette fonction, la position du curseur est incrémentée de sorte que le caractère suivant sera sorti dans la position suivante de l'écran. Lorsque la dernière position de l'écran est atteinte, l'écran défile d'une ligne vers le haut et la sortie se poursuit dans la première colonne de la dernière ligne de l'écran.

·	La couleur de premier plan se réfère au mode graphique actuel.

·	En mode 640*200 points, seules les valeurs 0 et 1 sont possibles.

·	En mode 320*200 points, les valeurs 0 à 3 sont autorisées. Elles génèrent une couleur en fonction de la palette de couleurs sélectionnée. La valeur 0 correspond à la couleur sélectionnée pour le fond, 1 à la première couleur de la palette sélectionnée, 2 à la seconde, etc...

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Int 10h, Fct 0Fh    Ecran : Lecture du mode vidéo     BIOS
Int 10h, Fct 0Fh    Ecran : Lire le mode vidéo     BIOS

Lire le numéro du mode vidéo actuel, le nombre de caractères par ligne et le numéro de la page écran actuelle.

Entrée :

AH 	= 0Fh

Sortie :

AL 	= Mode vidéo (voir plus bas)

AH	= Nombre de caractères par ligne

BH	= Numéro de la page écran actuelle

Remarques :

AL	Mode	Résolution	Résolution	Couleurs	Système

T/G	texte	graphique

00h	T	40x25  8x8	Gris	CGA,PCjr

T	40x25  8x14	Gris	EGA

T	40x25  8x16	16	MCGA

T	40x25  9x16	16	VGA

01h	T	40x25  8x8	16	CGA,PCjr

T	40x25  8x14	16	EGA

T	40x25  8x16	16	MCGA

T	40x25  9x16	16	VGA

02h	T	80x25  8x8	16 gris	CGA,PCjr

T	80x25  8x14	16 gris	EGA

T	80x25  8x16	16	MCGA

T	80x25  9x16	16	VGA

03h	T	80x25  8x8	16	CGA,PCjr

T	80x25  8x14	16	EGA

T	80x25  8x16	16	MCGA

T	80x25  9x16	16	VGA

04h	G	40x25  8x8	320x200	4	CGA,PCjr,EGA,MCGA,VGA

05h	G	40x25  8x8	320x200	4 gris	CGA,PCjr,EGA

G	40x25  8x8	320x200	4	MCGA,VGA

06h	G	80x25  8x8	640x200	2	CGA,PCjr,EGA,MCGA,VGA

07h	T	80x25  9x14	mono	MDA,Hercules,EGA

T	80x25  9x16	mono	VGA

08h	G	20x25  8x8	160x200	16	PCjr

G	90x43  8x8	720x352	mono	Hercules + MSHERC.COM

09h	G	40x25  8x8	320x200	16	PCjr

0Ah	G	80x25  8x8	640x200	4	PCjr

0Bh	réservé pour le BIOS EGA

0Ch	réservé pour le BIOS EGA

0Dh	G	40x25  8x8	320x200	16	EGA,VGA

0Eh	G	80x25  8x8	640x200	16	EGA,VGA

0Fh	G	80x25  8x14	640x350	mono	EGA,VGA

10h	G	80x25  8x14	640x350	4	EGA 64 Ko

G	640x350	16	EGA 256 Ko,VGA

11h	G	80x30  8x16	640x480	mono	VGA,MCGA

12h	G	80x30  8x16	640x480 	16/256k	VGA

13h	G	40x25  8x8	320x200 	256/256k	VGA,MCGA

18h	T	132x44  8x8	mono	Tseng Labs EVA

T	132x44  8x8	16/256	Tseng ET4000

19h	T	132x25  8x14	mono	Tseng Labs EVA

T	132x25  8x14	16/256	Tseng ET4000

1Ah	T	132x28  8x13	mono	Tseng Labs EVA

T	132x28  8x13	16/256	Tseng ET4000

22h	T	132x44  8x8	Tseng Labs EVA

T	132x44  8x8	16/256	Tseng ET4000

T	132x44	16	Orchid Prodesigner VGA

23h	T	132x25  6x14	Tseng Labs EVA

T	132x25  8x14	16/256	Tseng ET4000

T	132x28	16	Orchid Prodesigner VGA

24h	T	132x28  6x13	Tseng Labs EVA

T	132x28  8x13	16/256	Tseng ET4000

T	132x25	16	Orchid Prodesigner VGA

25h	G	80x60  8x8	640x480	Tseng Labs EVA

G	80x60  8x8	640x480	16/256	Tseng ET4000

G	80x60  8x8	640x480	16	Orchid Prodesigner VGA

26h	T	80x60  8x8	Tseng Labs EVA

T	80x60  8x8	16/256	Tseng ET4000

T	80x60	16	Orchid ProDesigner VGA

G	100x37  8x16	800x600	16	Orchid

G	100x37  8x16	800x600	16/256	Tseng ET4000

T	100x40  8x16	16	Orchid Prodesigner VGA

T	100x40  8x15	16/256	Tseng ET4000

2Dh	G	80x25  8x14	640x350	256/256k	Tseng ET4000

2Eh	G	80x30  8x16	640x480 	256/256k	Orchid

G	80x30  8x16	640x480	256/256k 	Tseng ET4000

2Fh	G	80x25  8x16	640x400	256/256k	Tseng ET4000

30h	G	100x37  8x16	800x600 	256/256k	Orchid

G	100x37  8x16	800x600 	256/256k	Tseng ET4000

37h	G	128x48  8x16 	1024x768	16	Orchid

38h	G	128x48  8x16 	1024x768 	256/256k 	Tseng ET4000

6Ah	G	800x600	16	VESA standard

·	Le contenu des registres BL, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Int 10h, Fct 13h    Ecran : Sortie d'une chaîne de caractères     BIOS (> AT)
Int 10h, Fct 13h    Ecran : Ecrire une chaîne de caractères     BIOS (> AT)

Une chaîne de caractères est sortie sur l'écran, dans une page écran déterminée, à partir d'une position spécifiée de l'écran. Les caractères sont retirés d'un buffer dont l'adresse doit être transmise à la fonction.

Entrée :

AH 	= 13h

AL 	= Mode de sortie (0 - 3)

0 = Attribut dans BL, conserver position du curseur

1 = Attribut dans BL, actualiser position du curseur

2 = Attribut dans le buffer, conserver position du curseur

3 = Attribut dans le buffer, actualiser position du curseur

BL 	= Octet d'attribut des caractères (modes 0 et 1 seulement)

CX 	= Nombre de caractères à sortir

DH	= Ligne de l'écran

DL 	= Colonne de l'écran

BH 	= Page écran

ES 	= Adresse de segment du buffer

BP 	= Adresse d'offset du buffer

Sortie :

aucune sortie

Remarques :

·	En modes 1 et 3, la position du curseur est fixée à la suite du dernier caractère de la chaîne de caractères sortie, de sorte que, lors des appels ultérieurs d'une fonction BIOS de sortie de caractères, les caractères seront sortis à la suite de la chaîne de caractères. Ce n'est pas le cas en modes 0 et 2.

·	En modes 0 et 1, le buffer contient uniquement les codes ASCII des caractères à sortir. La couleur de tous les caractères de la chaîne de caractères est dans ce cas fixée par le registre BL. En modes 2 et 3, par contre, chaque caractère est suivi, dans le buffer, de l'octet d'attribut correspondant de sorte que chaque caractère est doté d'un attribut individuel. Bien que la taille en octets de la chaîne de caractères soit deux fois supérieure au nombre de caractères à sortir, c'est bien ce nombre de caractères ASCII qui doit être spécifié dans le registre CX et non la longueur effective de la chaîne.

·	Les codes de commande spéciaux tels que "bell" et "carriage return" sont interprétés comme des codes de commande et non comme des codes ASCII normaux.

·	Lorsqu'est atteinte la dernière position de l'écran, l'écran défile d'une ligne vers le haut et la sortie se poursuit sur la première colonne de la dernière ligne de l'écran.

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Interruption 11h
Interruption 11h : Lire la configuration

Lit la configuration du système telle qu'elle a été constatée lors de l'opération de lancement du système.

Entrée :

aucune entrée

Sortie :

AX	= la configuration

Pour le PC et le XT :

Bit 0	vaut 1 si le système dispose d'un ou plusieurs lecteurs de disquette

Bit 1	inutilisé

Bits 2 et 3	Mémoire RAM sur la carte mère

00 = 16 Ko

01 = 32 Ko

10 = 48 Ko

11 = 64 Ko

Bits 4 et 5	Mode vidéo lors du lancement du système

00 : inutilisé

01 : 40*25 car. sur carte couleur

02 : 80*25 car. sur carte couleur

03 : 80*25 car. sur carte mono

Bits 6 et 7	indiquent le nombre de lecteurs de disquette si le bit 0 vaut 1

00 = 1 lecteur de disquette

01 = 2 lecteurs de disquette

10 = 3 lecteurs de disquette

11 = 4 lecteurs de disquette

Bit 8	vaut 0 s'il y a un circuit DMA

Bits 9 à 11	Nombre de cartes RS232 connectées

Bit 12	vaut 1 si l'adaptateur de jeux est connecté

Bit 13	inutilisé

Bits 14 et 15	indiquent le nombre d'imprimantes

Pour l'AT :

Bit 0	vaut 1 si le système dispose d'un ou plusieurs lecteurs de disquette

Bit 1	vaut 1 si un coprocesseur mathématique est implanté sur le système

Bits 2 et 3	inutilisés

Bits 4 et 5	Mode vidéo lors du lancement du système

00 : inutilisé

01 : 40*25 car. sur carte couleur

02 : 80*25 car. sur carte couleur

03 : 80*25 car. sur carte mono

Bits 6 et 7	indiquent le nombre de lecteurs de disquette si le bit 0 vaut 1

00 = 1 lecteur de disquette

01 = 2 lecteurs de disquette

10 = 3 lecteurs de disquette

11 = 4 lecteurs de disquette

Bit 8	sans signification

Bits 9 à 11	Nombre de cartes RS232 connectées

Bits 12 et 13	inutilisés

Bits 14 et 15	indiquent le nombre d'imprimantes

Remarques :

·	Pour pouvoir interpréter la signification des différents bits du mot de configuration, il faut connaître le type du PC (PC/XT ou AT).

·	La taille de la mémoire indiquée dans les bits 2 et 3 du mot de configuration du PC/XT se réfère uniquement à la carte mère. L'interruption 12h permet de connaître la taille totale de la mémoire.

·	Le mode vidéo indiqué dans les bits 4 et 5 correspond au mode vidéo qui était activé lors de la mise en marche du système. Pour connaître le mode vidéo actuel, c'est d'une autre fonction, la fonction 15 de l'interruption 10h qu'il convient donc de se servir.

·	Seul le contenu du registre AX est modifié à la suite de l'appel de cette fonction.


Interruption 12h
Interruption 12h : Lire la taille de la mémoire

Entrée :

aucune entrée

Sortie :

AX 	= Taille de la mémoire en Ko

Remarques :

·	Le PC et le XT ne peuvent recevoir plus de 640 Ko de RAM alors que l'AT peut encore recevoir jusqu'à 14 Mo de mémoire RAM au-delà de la limite de 1 Mo. La taille de cette mémoire supplémentaire n'est pas prise en compte dans la taille de mémoire indiquée par cette fonction. Pour connaître le volume de la mémoire au-delà de la limite de 1 Mo, vous pouvez utiliser la fonction 88h de l'interruption 15h. Cette fonction n'existe d'ailleurs que sur l'AT.

·	Seul le contenu du registre AX est modifié par l'appel de cette fonction.


Interruption 13h

Disque dur

Fonction 00h	Reset

Fonction 01h	Consulter l'état

Fonction 02h	Lecture

Fonction 03h	Ecriture

Fonction 04h	Vérification

Fonction 05h	Formatage

Fonction 06h	Formatage XT

Fonction 07h	Formatage XT

Fonction 08h	Lire le format (XT AT)

Fonction 09h	Adaptation de disques durs étrangers

Fonction 0Ah	Lecture de secteurs étendus

Fonction 0Bh	Ecriture de secteurs étendus

Fonction 0Ch	Déplacer tête de lecture/écriture (> XT)

Fonction 0Dh	Réinitialisation

Fonction 0Eh	Test de lecture du contrôleur (PS/2)

Fonction 0Fh	Test d'écriture du contrôleur (PS/2)

Fonction 10h	Le lecteur est-il prêt ?

Fonction 11h	Recalibrage du lecteur

Fonction 12h	Test du contrôleur RAM (PS/2)

Fonction 13h	Test de lecteur (PS/2)

Fonction 14h	Test du contrôleur interne

Fonction 15h	Lire le type de lecteur (> AT)

Fonction 19h	Ranger les têtes de lecture

Disquette

Fonction 00h	Réinitialisation du lecteur de disquette

Fonction 01h	Lire l'état disquette

Fonction 02h	Lecture

Fonction 03h	Ecriture

Fonction 04h	Vérification

Fonction 05h	Formatage

Fonction 08h	Lire le format (> AT)

Fonction 15h	Lire le type de lecteur (> AT)

Fonction 16h	Détecter un changement de disquette (> AT)

Fonction 17h	Définir le format de disquette (> AT)

Fonction 18h	Définir le format de disquette (> AT)


Int 13h, Fct 00h    Disquette : Réinitialisation du lecteur de disquette     BIOS

L'appel de cette fonction déclenche une réinitialisation du contrôleur de disquette ainsi que des lecteurs de disquette connectés. Il convient d'effectuer une réinitialisation (Reset) après toute opération disquette à la suite de laquelle une erreur a été signalée.

Entrée :

AH	= 00h

DL 	= 0 ou 1

Sortie :

Flag Carry = 0 : Opération exécutée, dans ce cas AH=0

Flag Carry = 1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	La valeur dans le registre DL ne sert à rien en fait car la réinitialisation est effectuée sur tous les lecteurs de disquette. Elle est cependant utilisée sur le XT et l'AT pour signaler si la réinitialisation doit concerner les lecteurs de disquette ou le disque dur.

·	Les codes d'erreur suivants peuvent se présenter :

01h :	Numéro de fonction non autorisé

02h :	Marque d'adresse non trouvée

03h :	Tentative d'écriture sur disquette protégée contre l'écriture

04h :	Secteur appelé non trouvé

08h :	Débordement DMA

09h :	Transfert de données par-delà la limite de segment

10h :	Erreur de lecture

20h :	Erreur sur le contrôleur de disque

40h :	Piste non trouvée

80h :	Erreur de Time Out, le lecteur ne réagit pas

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 00h    Disque dur : Reset     BIOS

Si vous appelez cette fonction, un Reset est effectué aussi bien sur le contrôleur de disque dur que sur les lecteurs de disque dur connectés. Il convient d'effectuer une réinitialisation après toute opération disque dur à la suite de laquelle une erreur a été signalée.

Entrée :

AH 	= 00h

DL 	= 80h ou 81h

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	La valeur dans le registre DL ne sert à rien en fait car une réinitialisation est effectuée sur tous les lecteurs de disque dur. Elle est utilisée sur le XT et sur l'AT pour distinguer si la réinitialisation doit concerner les lecteurs de disquette ou de disque dur.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 01h    Disquette : Lire l'état disquette     BIOS

Cette fonction permet de consulter l'état de la dernière opération disquette.

Entrée :

AH 	= 01h

DL 	= 0 ou 1

Sortie :

Flag Carry =0 : Opération exécutée, dans ce cas AH=0

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	La valeur dans le registre DL ne sert à rien en fait car l'état est toujours renvoyé pour le lecteur de disquette auquel il avait été accédé en dernier. Il est cependant utilisé sur le XT et l'AT pour distinguer si c'est l'état du lecteur de disquette ou du disque dur qui doit être consulté.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 01h    Disque dur : Consulter état du disque dur     BIOS

Cette fonction permet de connaître l'état de la dernière opération sur disque dur.

Entrée :

AH 	= 01h

DL 	= 80h ou 81h

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	La valeur dans le registre DL ne sert à rien en fait car l'état est toujours renvoyé pour le disque dur auquel il a été accédé en dernier lieu. Elle est utilisée sur le XT et sur l'AT pour distinguer si c'est l'état d'un lecteur de disquette ou de disque dur qui doit être obtenu.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 02h    Disquette : Lecture     BIOS

Cette fonction permet de lire un ou plusieurs secteurs sur la disquette pour les transférer dans un buffer.

Entrée :

AH 	= 02h

DL 	= Numéro du lecteur de disquette

DH 	= Numéro de la face de disquette (0 ou 1)

CH 	= Numéro de piste

CL 	= Numéro de secteur

AL 	= Nombre de secteurs à lire

ES 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Opération exécutée, dans ce cas AH=0

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le nombre de secteurs à lire, qui est spécifié dans le registre AL, est limité par le fait qu'un seul appel de fonction ne permet de lire que des secteurs consécutifs sur une même piste d'une même face de disquette.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 02h    Disque dur : Lecture     BIOS

Cette fonction permet de lire un ou plusieurs secteurs sur le disque dur, pour les transférer dans un buffer.

Entrée :

AH 	= 02h

DL 	= Numéro de disque dur (80h ou 81h)

DH 	= Numéro de tête de lecture/écriture

CH 	= Numéro de cylindre

CL 	= Numéro de secteur

AL 	= Nombre de secteurs à lire (1 - 128)

ES 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Les 8 bits du registre CH ne permettant d'adresser que 256 cylindres, les bits 6 et 7 du numéro de secteur (registre CL) représentent les bits 8 et 9 du numéro de cylindre et permettent ainsi d'adresser jusqu'à 1023 cylindres.

·	Si plusieurs secteurs sont lus et que le dernier secteur d'un cylindre est atteint, la lecture se poursuit sur le premier secteur du même cylindre sur la prochaine tête de lecture/écriture. Une fois la dernière tête de lecture/écriture atteinte, la lecture se poursuit sur le premier secteur du cylindre suivant sur la première tête de lecture/écriture.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 03h    Disquette : Ecriture     BIOS

Cette fonction permet d'écrire un ou plusieurs secteurs sur la disquette. Les données à transférer sont tirées d'un buffer.

Entrée :

AH 	= 03h

DL 	= Numéro du lecteur de disquette

DH 	= Numéro de la face de disquette (0 ou 1)

CH 	= Numéro de piste

CL 	= Numéro de secteur

AL 	= Nombre de secteurs à écrire

ES 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Opération exécutée, dans ce cas AH=0

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le nombre de secteurs à écrire, qui est spécifié dans le registre AL, est limité par le fait qu'un seul appel de fonction ne permet d'écrire que sur des secteurs consécutifs sur une même piste d'une même face de disquette.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 03h    Disque dur : Ecriture     BIOS

Cette fonction permet d'écrire sur un ou plusieurs secteurs du disque dur. Les données à transférer sont tirées d'un buffer mis en place dans le programme d'appel.

Entrée :

AH 	= 03h

DL 	= Numéro de disque dur (80h ou 81h)

DH 	= Numéro de tête de lecture/écriture

CH 	= Numéro de cylindre

CL 	= Numéro de secteur

AL 	= Nombre de secteurs à écrire (1 - 128)

ES 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Les 8 bits du registre CH ne permettant d'adresser que 256 cylindres, les bits 6 et 7 du numéro de secteur (registre CL) représentent les bits 8 et 9 du numéro de cylindre et permettent ainsi d'adresser jusqu'à 1023 cylindres.

·	Si on écrit sur plusieurs secteurs et que le dernier secteur d'un cylindre est atteint, l'écriture se poursuit sur le premier secteur du même cylindre sur la prochaine tête de lecture/écriture. Une fois la dernière tête de lecture/écriture atteinte, l'écriture se poursuit sur le premier secteur du cylindre suivant sur la première tête de lecture/écriture.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 04h    Disquette : Vérification     BIOS

Cette fonction permet de comparer un ou plusieurs secteurs de la disquette avec les données d'un buffer en mémoire. Cela permet par exemple, à la suite d'une instruction d'écriture, de vérifier si les données ont été correctement transférées sur la disquette.

Entrée :

AH 	= 04h

DL 	= Numéro du lecteur de disquette

DH 	= Numéro de la face de disquette (0 ou 1)

CH 	= Numéro de piste

CL 	= Numéro de secteur

AL 	= Nombre de secteurs à vérifier

ES 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Opération exécutée, dans ce cas AH=0

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le nombre de secteurs à vérifier, qui est spécifié dans le registre AL, est limité par le fait qu'un seul appel de fonction ne permet de vérifier que des secteurs consécutifs sur une même piste d'une même face de disquette.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 04h    Disque dur : Vérification     BIOS

Cette fonction permet de vérifier un ou plusieurs secteurs du disque dur. Contrairement à la fonction disquette équivalente, cette fonction ne compare cependant pas les données du disque dur avec des données en mémoire. 4 octets de contrôle sont en effet systématiquement sauvegardés avec chaque secteur. Ils permettent ainsi de vérifier le contenu d'un secteur, même bien après qu'il ait été sauvegardé.

Entrée :

AH 	= 04h

DL 	= Numéro de disque dur (80h ou 81h)

DH 	= Numéro de tête de lecture/écriture

CH 	= Numéro de cylindre

CL 	= Numéro de secteur

AL 	= Nombre de secteurs à vérifier (1 - 128)

ES 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Les 8 bits du registre CH ne permettant d'adresser que 256 cylindres, les bits 6 et 7 du numéro de secteur (registre CL) représentent les bits 8 et 9 du numéro de cylindre et permettent ainsi d'adresser jusqu'à 1023 cylindres.

·	Si on vérifie plusieurs secteurs et que le dernier secteur d'un cylindre est atteint, la vérification se poursuit sur le premier secteur du même cylindre sur la prochaine tête de lecture/écriture. Une fois la dernière tête de lecture/écriture atteinte, la vérification se poursuit sur le premier secteur du cylindre suivant sur la première tête de lecture/écriture.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 05h    Disquette : Formatage     BIOS

En appelant cette fonction, vous pouvez formater une piste complète d'une face de la disquette. Il faut communiquer à la fonction, à cet effet, l'adresse d'un buffer contenant certaines informations sur les secteurs à formater.

Entrée :

AH 	= 05h

DL 	= Numéro du lecteur de disquette

DH 	= Numéro de la face de disquette (0 ou 1)

CH 	= Numéro de piste

AL 	= Nombre de secteurs à vérifier

ES 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Opération exécutée, dans ce cas AH=0

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le nombre de secteurs à formater, qui est spécifié dans le registre AL, est limité par le fait qu'un seul appel de fonction ne permet de formater que des secteurs consécutifs sur une même piste d'une même face de disquette.

·	En ce qui concerne les AT et les systèmes équipés d'un processeur 80386 ou 80486, il faut appeler la fonction 17h avant d'appeler cette fonction pour déterminer le type de la disquette à formater.

·	Le buffer dont l'adresse est fournie dans ES:BX contient pour chaque secteur à formater une entrée composée de 4 octets consécutifs :

1. Numéro de piste

2. Numéro de face

3. Numéro logique du secteur

4. Nombre d'octets dans ce secteur

0 : 128 octets

1 : 256 octets

2 : 512 octets (Standard PC)

3 : 1024 octets

Les numéros de piste et de face doivent être identiques pour tous les secteurs alors que le numéro de secteur doit être au contraire différent pour chacun. Ce numéro de secteur peut être décalé par rapport au numéro de secteur physique.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 05h    Disque dur : Formatage     BIOS

Cette fonction permet de formater un cylindre complet, par exemple 17 secteurs du disque dur. La fonction a cependant besoin pour cela que le programme d'appel lui communique dans un buffer un certain nombre d'informations supplémentaires.

Entrée :

AH 	= 05h

DL 	= Numéro de disque dur (80h ou 81h)

DH 	= Numéro de tête de lecture/écriture

CH 	= Numéro de cylindre

CL 	= Numéro de secteur (1 en général)

AL 	= Nombre de secteurs / cylindre

ES 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Les 8 bits du registre CH ne permettant d'adresser que 256 cylindres, les bits 6 et 7 du numéro de secteur (registre CL) représentent les bits 8 et 9 du numéro de cylindre et permettent ainsi d'adresser jusqu'à 1023 cylindres.

·	Comme c'est toujours un cylindre complet qui est formaté à la fois, le premier secteur à formater, dans le registre CL, est toujours le secteur 1. Pour la même raison, le nombre de secteurs à formater, dans le registre AL, est souvent 17 car les disques durs standard travaillent avec 17 secteurs par cylindre.

·	Le buffer dont l'adresse est fournie en ES:BX doit avoir une taille de 512 octets au moins. Les 17 secteurs à formater d'un cylindre n'occupent toutefois que les 34 premiers octets de ce buffer. Les informations correspondant à chaque secteur physique sont chaque fois stockées dans deux octets consécutifs. Le premier octet n'a aucune signification avant appel de la fonction mais indique après l'appel de fonction si le secteur a pu être formaté (00h) ou non (80h). Le second octet spécifie le numéro de secteur logique. Il doit être inscrit dans le buffer par le programme d'appel avant appel de la fonction.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 06h    Disque dur : Formatage XT     BIOS

Auparavant, cette fonction servait à formater les disques durs XT. A l'heure actuelle, elle ne joue aucun rôle dans la programmation.


Int 13h, Fct 07h    Disque dur : Formatage XT     BIOS

Auparavant, cette fonction servait à formater les disques durs XT. A l'heure actuelle, elle ne joue aucun rôle dans la programmation.


Int 13h, Fct 08h    Disquette : Lire le format    BIOS (> AT)

Cette fonction permet de déterminer la capacité d'une unité de disquettes et le format des disquettes. On se réfère ici aux capacités physiques de l'unité et non au format de la disquette qui y est insérée.

Entrée :

AH	= 08h

DL	= Numéro de l'unité de disquettes

Sortie :

Flag Carry	= 0 : Opération exécutée, dans ce cas

AH	= 0

BL	= Type de l'unité

01h = 5,25", 360 Ko

02h = 5,25", 1,2 Mo

03h = 3,5", 720 Ko

04h = 3,5", 1,44 Mo

DH	= Numéro de tête (toujours 1)

CH	= Nombre de pistes

CL	= Nombre de secteurs

Flag Carry	= 1 : Erreur, dans ce cas AH = Code d'erreur

Remarques :

·	Le contenu des registres SI, BP et des registres de segment CS, DS et SS n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 08h    Disque dur : Lire le format     BIOS (XT AT)

En appelant cette fonction, un programme peut connaître le format ou les caractéristiques du disque dur.

Entrée :

AH 	= 08h

DL 	= Numéro de disque dur (80h ou 81h)

Sortie :

Flag Carry =0 : Opération exécutée, dans ce cas

DL = Nombre de disques durs connectés

DH = Nombre de têtes de lecture/écriture (0=première tête)

CH = Nombre de cylindres

CL = Nombre de secteurs

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Les 8 bits du registre CH ne permettant d'adresser que 256 cylindres, les bits 6 et 7 du numéro de secteur (registre CL) représentent les bits 8 et 9 du numéro de cylindre et permettent ainsi d'adresser jusqu'à 1023 cylindres.

·	La formule suivante permet de calculer la capacité totale du disque dur en octets :

Capacité = Têtes * Cylindres * Secteurs * 512

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 09h    Disque dur : Adaptation de disques durs étrangers    BIOS

Cette fonction permet d'adapter des lecteurs étrangers de façon à ce que les fonctions du BIOS puissent y accéder.

Entrée :

AH 	= 09h

DL 	= Numéro de disque dur (80h ou 81h)

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Le BIOS tire les informations nécessaires sur le disque dur à adapter (nombre de têtes de lecture/écriture, etc...) d'une table. L'adresse de cette table figure dans le vecteur d'interruption 41h pour le disque dur numéro 80h et dans le vecteur 46h pour le disque dur numéro 81h. C'est sous ces vecteurs que vous trouverez de plus amples renseignements sur cette table.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 0Ah    Disque dur : Lecture de secteurs étendus    BIOS

Cette fonction permet de lire un ou plusieurs secteurs sur le disque dur pour les transférer dans un buffer. Outre les 512 octets que comporte le secteur, seront également lus les 4 octets de contrôle (ECC) qui sont stockés à la fin de chaque secteur.

Entrée :

AH 	= 0Ah

DL 	= Numéro de disque dur (80h ou 81h)

DH 	= Numéro de tête de lecture/écriture

CH 	= Numéro de cylindre

CL 	= Numéro de secteur

AL 	= Nombre de secteurs à lire (1 - 127)

ES 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Les 4 octets de contrôle sont normalement calculés par le contrôleur mais ici il les tire directement du buffer.

·	Les 8 bits du registre CH ne permettant d'adresser que 256 cylindres, les bits 6 et 7 du numéro de secteur (registre CL) représentent les bits 8 et 9 du numéro de cylindre et permettent ainsi d'adresser jusqu'à 1023 cylindres.

·	Si on lit plusieurs secteurs et que le dernier secteur d'un cylindre est atteint, la lecture se poursuit sur le premier secteur du même cylindre sur la prochaine tête de lecture/écriture. Une fois la dernière tête de lecture/écriture atteinte, la lecture se poursuit sur le premier secteur du cylindre suivant sur la première tête de lecture/écriture.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 0Bh    Disque dur : Ecriture de secteurs étendus    BIOS

Cette fonction permet d'écrire un ou plusieurs secteurs sur le disque dur provenant d'un buffer. Outre les 512 octets que comporte le secteur, seront également écrits les 4 octets de contrôle (ECC), tirés du buffer, qui sont stockés à la fin de chaque secteur.

Entrée :

AH 	= 0Bh

DL 	= Numéro de disque dur (80h ou 81h)

DH 	= Numéro de tête de lecture/écriture

CH 	= Numéro de cylindre

CL 	= Numéro de secteur

AL 	= Nombre de secteurs à écrire (1 - 127)

ES 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Les 4 octets de contrôle sont normalement calculés par le contrôleur mais ici il les tire directement du buffer.

·	Les 8 bits du registre CH ne permettant d'adresser que 256 cylindres, les bits 6 et 7 du numéro de secteur (registre CL) représentent les bits 8 et 9 du numéro de cylindre et permettent ainsi d'adresser jusqu'à 1023 cylindres.

·	Si on écrit sur plusieurs secteurs et que le dernier secteur d'un cylindre est atteint, l'écriture se poursuit sur le premier secteur du même cylindre sur la prochaine tête de lecture/écriture. Une fois la dernière tête de lecture/écriture atteinte, l'écriture se poursuit sur le premier secteur du cylindre suivant sur la première tête de lecture/écriture.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 0Ch    Disque dur : Déplacer tête de lecture/écriture     BIOS (> XT)

Cette fonction permet de positionner l'une des têtes de lecture/écriture du disque dur sur un cylindre donné. Cette option s'avère particulièrement utile lors d'un transport pour éviter que la tête ne vienne s'écraser sur un cylindre utilisé.

Entrée :

AH 	= 0Ch

DL 	= Numéro du lecteur de disque (80h ou 81h)

DH 	= Numéro de tête de lecture/écriture

CH 	= Numéro du cylindre

CL 	= Numéro du secteur

Sortie :

Flag Carry = 0 : Opération exécutée

Flag Carry = 1 : Erreur, dans ce cas AH = Code d'erreur.

Remarques :

·	Le premier lecteur de disque porte le numéro 80h, le second le numéro 81h.

·	Comme les 8 bits du registre CH ne permettent d'adresser que 256 cylindres, les bits 6 et 7 constituent le numéro de secteur (registre CL), les bits 8 et 9 le numéro de cylindre et permettent ainsi d'adresser jusqu'à 1023 cylindres.

·	Lors des opérations de lecture/écriture, la tête de lecture/écriture se positionne automatiquement, si bien qu'il n'est pas nécessaire d'appeler préalablement cette fonction.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 0Dh    Disque dur : Réinitialisation    BIOS

Lorsque cette fonction est appelée, une réinitialisation est opérée sur le contrôleur de disque dur ainsi que sur les disques durs connectés. Il convient d'effectuer une réinitialisation après toute opération sur disque dur à la suite de laquelle une erreur a été signalée.

Entrée :

AH 	= 0Dh

DL 	= (80h ou 81h)

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	La valeur dans le registre DL ne sert à rien en fait car la réinitialisation est systématiquement opérée sur tous les disques durs connectés. Elle est cependant utilisée, sur le XT et l'AT, pour distinguer si la réinitialisation doit concerner les lecteurs de disquette ou le disque dur.

·	Cette fonction est identique à la fonction 0.

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 0Eh    Disque dur : Test de lecture du contrôleur     BIOS (PS/2)

Cette fonction effectue un test interne de la transmission des données entre le contrôleur et le CPU dans le cas des ordinateurs PS/2 uniquement. Elle n'est pas conçue pour être appelée par un programme d'application.


Int 13h, Fct 0Fh    Disque dur : Test d'écriture du contrôleur     BIOS (PS/2)

Cette fonction effectue un test interne de la transmission des données entre le contrôleur et le CPU dans le cas des ordinateurs PS/2 uniquement. Elle n'est pas conçue pour être appelée par un programme d'application.


Int 13h, Fct 10h    Disque dur : Le lecteur est-il prêt ?     BIOS

Cette fonction permet de déterminer si le lecteur de disque dur est prêt, c'est-à-dire si la dernière opération est déjà achevée.

Entrée :

AH 	= 10h

DL 	= (80h ou 81h)

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 11h    Disque dur : Recalibrage du lecteur     BIOS

Après apparition d'une erreur (surtout s'il s'agit d'une erreur de lecture ou écriture), il est conseillé d'opérer non seulement une réinitialisation mais aussi un recalibrage du disque dur.

Entrée :

AH 	= 11h

DL 	= (80h ou 81h)

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 12h    Disque dur : Test du contrôleur RAM    BIOS (PS/2)

Cette fonction n'effectue un test interne du contrôleur RAM que pour les ordinateurs PS/2. Elle n'est donc pas conçue pour être appelée par un programme d'application.


Int 13h, Fct 13h    Disque dur : Test de lecteur    BIOS (PS/2)

Cette fonction n'effectue un test interne du contrôleur du lecteur que pour les ordinateurs PS/2. Elle n'est donc pas conçue pour être appelée par un programme d'application.


Int 13h, Fct 14h        Disque dur : Test du contrôleur interne    BIOS

Après appel de cette fonction, le contrôleur disque est soumis à un test interne.

Entrée :

AH = 14h

DL = 80h ou 81h

Sortie :

Flag Carry = 0 : Opération exécutée

Flag Carry = 1 : Erreur, dans ce cas AH=Code d'erreur

Le premier lecteur de disque porte le numéro 80h, le deuxième 81h.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

Cette fonction ne modifie pas le contenu des registres BX, CX, DX, SI, DI, BP et le registre de segment. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 15h    Disquette : Lire le type de lecteur    BIOS (> AT)

L'AT soutient non seulement les anciens lecteurs 320/360 Ko mais aussi les nouveaux lecteurs 1,2 Mo. Ces nouveaux lecteurs disposent, contrairement aux précédents, de la possibilité de détecter un changement de disquette. Cette fonction vous permet de tester si le lecteur utilisé dispose de cette possibilité.

Entrée :

AH	= 15h

DL 	= Numéro du lecteur de disquette (0 ou 1)

Sortie :

Flag Carry =0 : Opérations exécutée, dans ce cas

AH	=type du lecteur

0 : Périphérique absent

1 : Lecteur ne détecte pas les changements de disquette

2 : Lecteur détecte les changements de disquette

3 : Disque dur (voir Remarques)

1 : Erreur

Remarques :

·	Il se peut que l'unité testée soit un disque dur car l'AT comporte un contrôleur qui peut gérer, au choix, 2 lecteurs de disquette et un disque dur ou bien un lecteur de disquette et 2 disques durs. Dans ce dernier cas, le premier disque dur porte le numéro 1 et peut donc être testé à l'aide de cette fonction.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 15h    Disque dur : Lire le type de lecteur     BIOS (> AT)

L'AT contient un contrôleur qui peut gérer aussi bien des disques durs que des lecteurs de disquette. Il peut gérer soit 2 lecteurs de disquette et un disque dur, soit 2 disques durs et un lecteur de disquette. Cette fonction vous permet donc de déterminer si les périphériques portant les numéros 80h et 81h sont des lecteurs de disquette ou de disque dur.

Entrée :

AH 	= 15h

DL 	= Numéro de lecteur (80h ou 81h)

Sortie :

Flag Carry =0 : Opération exécutée, dans ce cas AH = 03h

CX	= Mot de poids fort du nombre de secteurs

DX 	= Mot de poids faible du nombre de secteurs

Flag Carry =1 : Erreur, pas de lecteur de disque dur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	La capacité du disque dur en octets se calcule d'après la formule ((CX*65536) + DX) * 512

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 16h    Disquette : Détecter un changement de disquette     BIOS (> AT)

L'AT soutient non seulement les anciens lecteurs 320/360 Ko mais aussi les nouveaux lecteurs 1,2 Mo. Ces nouveaux lecteurs disposent, contrairement aux précédents, de la possibilité de détecter un changement de disquette. Si vous disposez d'un lecteur de disquette de ce type, cette fonction vous permet de tester si un changement de disquette est intervenu depuis le dernier accès à la disquette.

Entrée :

AH 	= 16h

DL 	= Numéro du lecteur de disquette (0 ou 1)

Sortie :

AH 	= 0 : Pas de changement de disquette

AH 	= 6 : Disquette changée depuis le dernier accès disquette

Remarques :

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 17h    Disquette : Définir le format de disquette     BIOS (> AT)

Cette fonction permet de configurer un lecteur par rapport à un format de disquette précis. Cette fonction est déjà utilisée dans les versions 3.0 et 3.1 de DOS, mais à partir de la version 3.2, cette tâche est remplie par la fonction 18h. Les programmes doivent également éviter cette fonction d'autant qu'elle ne convient pas aux lecteurs 3,5" qui se sont largement répandus dans le monde PC.

Entrée :

AH 	= 17h

AL 	= Format

1:	formater en 320/360 Ko sur un lecteur 320/360 Ko

2:	formater en 320/360 Ko sur un lecteur 1,2 Mo

3:	formater en 1,2 Mo sur un lecteur 1,2 Mo

4:	formater en 720 Ko sur un lecteur 720 Ko

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur

Remarques :

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 18h    Disquette : Définir le format de disquette     BIOS (> AT)

Cette fonction remplace la fonction 17h. Elle doit être appelée pour définir le format des disquettes. Mais elle ne doit être appelée qu'après avoir inséré une disquette dans le lecteur spécifié, sinon elle signale une erreur.

Entrée :

AH 	= 18h

CH 	= Nombre de pistes

CL 	= Nombre de secteurs

DL 	= Numéro du lecteur (0 ou 1)

Sortie :

Flag Carry = 0 : Opération exécutée

Flag Carry = 1 : Erreur

Remarques :

·	Dans ce cas, cette fonction doit être appelée avant le premier appel de la fonction de formatage 05h pour que le BIOS puisse être configuré au format de disquette souhaité.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 19h    Disque dur : Ranger les têtes de lecture    BIOS

Cette fonction permet de parquer les têtes du disque dur avant un transport.

Entrée :

AH 	= 19h

DL 	= (80h ou 81h)

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Interruption 14h
Interruption 14h : interface série

Fonction 00h	Initialisation de l'interface série

Fonction 01h	Emission de caractères sur l'interface série

Fonction 02h	Réception d'un caractère sur l'interface série

Fonction 03h	Tester l'état de l'interface série


Int 14h, Fct 00h    Interface série : Initialisation    BIOS

Cette fonction permet d'initialiser et de configurer une interface série connectée sur le PC en définissant la parité de la transmission ainsi que le nombre de bits d'arrêt et la vitesse de transmission en bauds.

Entrée :

AH 	= 00h

DX 	= Numéro d'interface série (la première interface série porte le numéro 0)

AL 	= Paramètres de configuration

Bits 0-1 : 	largeur de données

10(b) = 7 bits

11(b) = 8 bits

Bit 2 : 	Nombre de bits d'arrêt

0(b) = 1 bit d'arrêt

1(b) = 2 bits d'arrêt

Bit 3-4 : 	Contrôle de parité

00(b) = aucun

01(b) = impaire

11(b) = paire

Bits 5-7 : 	Vitesse de transmission

000(b) = 110 bauds

001(b) = 150 bauds

010(b) = 300 bauds

011(b) = 600 bauds

100(b) = 1200 bauds

101(b) = 2400 bauds

110(b) = 4800 bauds

111(b) = 9600 bauds

Sortie :

AH 	= Etat de l'interface série

Bit 0 :	Données prêtes

Bit 1 :	Débordement

Bit 2 :	Erreur de parité

Bit 3 :	Erreur de protocole

Bit 4 :	 Break détecté

Bit 5 :	Registre d'attente de transmission vide

Bit 6 :	Registre de décalage de transmission vide

Bit 7 :	Time Out (Périphérique ne répond pas)

AL 	= Etat du modem

Bit 0 :	(Delta) Modem prêt à émettre

Bit 1 :	(Delta) Modem activé

Bit 2 :	(Delta) Téléphone sonne

Bit 3 :	(Delta) Liaison avec modem récepteur établie

Bit 4 :	Modem prêt à émettre

Bit 5 :	Modem activé

Bit 6 :	Téléphone sonne

Bit 7 :	Liaison avec modem récepteur établie

Remarques :

·	L'interface série appelée COM1 par le DOS porte le numéro 0, COM2 le numéro 1.

·	Les bits Delta montrent la modification de l'état en cours par rapport au dernier appel de la fonction. Si un bit Delta est posé, cela signifie que l'état correspondant a changé entre-temps.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 14h, Fct 01h    Interface série : Emission de caractères    BIOS

Cette fonction est appelée pour envoyer des caractères à travers une interface série.

Entrée :

AH = 	01h

DX = 	Numéro d'interface série (la première interface série porte le numéro 0)

AL = 	Code du caractère à transmettre

Sortie :

AH :

Bit 7 = 0 : Caractère a été transmis

Bit 7 = 1 : Erreur, dans ce cas :

Bits 0 à 6 = 	Etat de l'interface série

Bit 0 : Données prêtes

Bit 1 : Débordement

Bit 2 : Erreur de parité

Bit 3 : Erreur de protocole

Bit 4 : Break détecté

Bit 5 : Registre d'attente de transmission vide

Bit 6 : Registre de décalage de transmission vide

Remarques :

·	L'interface série appelée COM1 par le DOS porte le numéro 0, COM2 le numéro 1.

·	Si le bit 7 du registre AH est réglé après l'appel de la fonction, on est en présence d'une erreur Time Out (dépasseement de délai). Les bits restants spécifient alors avec précision la cause de l'erreur.

·	Le contenu des registres AL, BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 14h, Fct 02h    Interface série : Réception d'un caractère    BIOS

Reçoit un caractère de l'interface série.

Entrée :

AH 	= 02h

DX 	= Numéro d'interface série (la première interface série porte le numéro 0)

Sortie :

AH : 	Bit 7 = 0 : Caractère a été reçu, dans ce cas : AL = Caractère reçu

Bit 7 = 1 : Erreur, dans ce cas :

Bits 0-6 :	Etat de l'interface série

Bit 0 :	Données prêtes

Bit 1 :	Débordement

Bit 2 :	Erreur de parité

Bit 3 :	Erreur de protocole

Bit 4 :	Break détecté

Bit 5 :	Registre d'attente de transmission vide

Bit 6 :	Registre de décalage de transmission vide

Remarques :

·	L'interface série appelée COM1 par le DOS porte le numéro 0, COM2 le numéro 1.

·	Il convient de n'appeler cette fonction qu'après que la fonction 3 ait permis de constater qu'un caractère était prêt à être reçu.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 14h, Fct 03h    Interface série : Tester état    BIOS

Teste l'état de l'interface série et du modem éventuellement connecté.

Entrée :

AH 	= 03h

DX 	= Numéro d'interface série (la première interface série porte le numéro 0)

Sortie :

AH 	= Etat de l'interface série

Bit 0 :	Données prêtes

Bit 1 :	Débordement

Bit 2 :	Erreur de parité

Bit 3 :	Erreur de protocole

Bit 4 :	Break détecté

Bit 5 :	Registre d'attente de transmission vide

Bit 6 :	Registre de décalage de transmission vide

Bit 7 :	Time Out (Périphérique ne répond pas)

AL 	= Etat du modem

Bit 0 :	(Delta) Modem prêt à émettre

Bit 1 :	(Delta) Modem activé

Bit 2 :	(Delta) Téléphone sonne

Bit 3 :	(Delta) Liaison avec modem récepteur établie

Bit 4 :	Modem prêt à émettre

Bit 5 :	Modem activé

Bit 6 :	Téléphone sonne

Bit 7 :	Liaison avec modem récepteur établie

Remarques :

·	L'interface série appelée COM1 par le DOS porte le numéro 0, COM2 le numéro 1.

·	Cette fonction doit être appelée avant d'appeler la fonction 2 (Réception de caractères) pour déterminer si un caractère est prêt à être reçu. Dans ce cas, le bit 0 du registre AH vaut 1.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Interruption 15h

Fonction 83h	Définir un flag après délai

Fonction 84h, Sous-Fct 0	Test des boutons de tir de joystick

Fonction 84h, Sous-Fct 1	Test de la position du joystick

Fonction 85h	Etat de la touche SyReq actionnée

Fonction 86h	Attente

Fonction 87h	Déplacement de bloc mémoire

Fonction 88h	Lire la taille de mémoire étendue

Fonction 89h	Passage en mode protégé


Int 15h, Fct 83h    Définir un flag après délai     BIOS (> AT)

L'appel de cette fonction a pour effet de fixer sur 1 le bit 7 d'un flag spécifié par le programme d'appel, au bout d'un délai indiqué en microsecondes.

Entrée :

AH 	= 83h

ES 	= Adresse de segment du flag

BX 	= Adresse d'offset du flag

CX 	= Mot fort du délai exprimé en microsecondes

DX 	= Mot faible du délai exprimé en microsecondes

Sortie :

Aucune

Remarques :

·	Une microseconde correspond à un millionième de seconde.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 15h, Fct 84h, Sous-Fct 0    Test des boutons de tir de joystick    BIOS (> AT)

Si un adaptateur de jeux avec les joysticks correspondants est connecté sur le PC, l'état des boutons Feu peut être testé à l'aide de cette fonction.

Entrée :

AH 	= 84h

DX 	= 0

Sortie :

Flag Carry =1 : Pas d'adaptateur de jeux connecté

Flag Carry =0 : Adaptateur de jeux présent, dans ce cas

AL =	Etat des boutons Feu

Bit 7 = 1 : Premier bouton Feu du premier joystick enfoncé

Bit 6 = 1 : Second bouton Feu du premier joystick enfoncé

Bit 5 = 1 : Premier bouton Feu du second joystick enfoncé

Bit 4 = 1 : Second bouton Feu du second joystick enfoncé

Remarques :

·	La position des joysticks peut être testée à l'aide de la sous-fonction 1.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 15h, Fct 84h, Sous-Fct 1    Test de la position du joystick    BIOS (> AT)

Si un adaptateur de jeux avec les joysticks correspondants est connecté sur le PC, la position des joysticks peut être testée à l'aide de cette fonction.

Entrée :

AH 	= 84h

DX 	= 1

Sortie :

Flag Carry =1 : Pas d'adaptateur de jeux connecté

Flag Carry =0 : Adaptateur de jeux présent, dans ce cas

AX = Position X du premier joystick

BX = Position Y du premier joystick

CX = Position X du second joystick

DX = Position Y du second joystick

Remarques :

·	L'état des boutons Feu peut être testé à l'aide de la sous-fonction 0.

·	Le contenu des registres SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 15h, Fct 85h    Etat de la touche SyReq actionnée    BIOS (> AT)

Si la touche SysReq est enfoncée ou relâchée, cette fonction sera appelée par la routine du clavier.

Entrée :

AH 	= 85h

AL 	= 0 : Touche a été enfoncée

AL 	= 1 : Touche a été relâchée

Sortie :

aucune

Remarques :

·	Cette fonction n'est pas conçue pour être appelée directement par un programme d'application mais elle peut être redirigée par un programme d'application sur une routine de ce programme, de façon à ce que le fait d'actionner la touche SysReq soit enregistré et entraîne les actions appropriées.


Int 15h, Fct 86h    Attente    BIOS (> AT)

Après appel de cette fonction, le contrôle n'est rendu au programme d'appel qu'une fois écoulé un délai déterminé.

Entrée :

AH 	= 86h

CX 	= Mot de poids fort de la pause en microsecondes

DX 	= Mot de poids faible de la pause en microsecondes

Sortie :

aucune

Remarques :

·	Une microseconde correspond à un millionième de seconde.

·	Le contenu des registres BX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 15h, Fct 87h    Déplacement de bloc mémoire    BIOS (> AT)

Cette fonction permet de déplacer un nombre déterminé de cellules de mémoire entre la RAM sous la limite de 1 Mo et la RAM située au-dessus de cette limite.

Entrée :

AH 	= 87h

CX 	= Nombre de mots à transférer

ES 	= Adresse de segment de la GDT (table générale des descripteurs)

SI 	= Adresse d'offset de la GDT

Sortie :

Flag Carry =0 :	aucune erreur

Flag Carry =1 :	Erreur, dans ce cas

AH = 1 :	Erreur de parité de la RAM

AH = 2 :	GDT incorrecte lors d'appel de fonction

AH = 3 :	Mode protégé n'a pu être initialisé

Remarques :

·	Seuls des mots, et non des octets isolés, peuvent être transférés.

·	64 Ko au maximum peuvent être transférés. La valeur dans le registre CX ne doit donc pas être supérieure à 8000h.

·	Toutes les interruptions sont désactivées pendant le transfert du bloc de mémoire.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 15h, Fct 88h    Lire la taille de mémoire étendue    BIOS (> AT)

Cette fonction permet de déterminer la taille de la mémoire installée au-delà de la limite de 1 Mo.

Entrée :

AH 	= 88h

Sortie :

AX 	= Taille de la mémoire

Remarques :

·	Le paramètre dans le registre AX est exprimé en Ko.

·	La taille de la mémoire sous la limite de 1 Mo peut être lu à l'aide de l'interruption 12h.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 15h, Fct 89h    Passage en mode protégé     BIOS (> AT)

Après appel de cette fonction, le processeur 80286 est en mode protégé.

Entrée :

AH 	= 89h

Sortie :

aucune

Remarques :

·	Cette fonction ne doit être appelée que si vous connaissez bien le fonctionnement du processeur en mode protégé car tout emploi inconsidéré de cette fonction peut aisément entraîner un plantage du système.


Interruption 16h
Interruption 16h : clavier

Fonction 00h	Lire un caractère au clavier

Fonction 01h	Contenu du buffer clavier

Fonction 02h	Tester l'état du clavier

Fonction 03h	Définir la fréquence de répétition

Fonction 05h	Simuler l'appui sur une touche du clavier

Fonction 10h	Test de claviers étendus

Fonction 11h	Test de claviers étendus


Int 16h, Fct 00h    Clavier : Lire un caractère    BIOS

Cette fonction lit un caractère dans le buffer clavier. Si aucun caractère n'y est stocké, la fonction attend qu'un caractère ait été entré. Le caractère lu est retiré du buffer clavier.

Entrée :

AH 	= 00h

Sortie :

AL 	= 0 : Code clavier étendu, dans ce cas :

AH = Code clavier étendu différent de 0

Touche normale actionnée, dans ce cas

AL = Code ASCII de la touche

AH = Code clavier de la touche

Remarques :

·	Le code ASCII d'un caractère est défini indépendamment de tel ou tel modèle de clavier, alors que le code clavier ne s'applique que sur le type de clavier connecté sur le PC.

·	Le contenu des registres CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 16h, Fct 01h    Clavier : Contenu du buffer clavier    BIOS

Cette fonction détermine si un caractère figure dans le buffer du clavier. Si c'est le cas, elle renvoie cette fonction à la fonction d'appel. Le caractère n'est toutefois pas retiré du buffer clavier, de sorte qu'il peut être à nouveau lu lors d'un appel consécutif de la fonction 1 ou 0. Dans tous les cas, la fonction revient au programme d'appel immédiatement après avoir été appelée.

Entrée :

AH 	= 01h

Sortie :

Flag Zéro = 1 : Aucun caractère dans le buffer clavier

Flag Zéro = 0 : Caractère présent, dans ce cas :

AL = 0 : Code clavier étendu, dans ce cas

AH = Code clavier étendu différent de 0

Touche normale actionnée, dans ce cas

AL = Code ASCII de la touche

AH = Code clavier de la touche

Remarques :

·	Le code ASCII d'un caractère est défini indépendamment de tel ou tel modèle de clavier, alors que le code clavier ne s'applique que sur le type de clavier connecté sur le PC.

·	Le contenu des registres CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 16h, Fct 02h    Clavier : Tester l'état du clavier     BIOS

Cette fonction permet de consulter la position de certaines touches de commande ainsi que l'état de différents modes du clavier.

Entrée :

AH 	= 02h

Sortie :

AL 	= Etat du clavier

Bit 0 = 1	touche Maj droite appuyée

Bit 1 = 1	touche Maj gauche appuyée

Bit 2 = 1	touche Ctrl appuyée

Bit 3 = 1	touche Alt appuyée

Bit 4 = 1	touche Arrêt Défil appuyée

Bit 5 = 1	touche Verr Num appuyée

Bit 6 = 1	touche Verr Maj appuyée

Bit 7 = 1	touche Ins appuyée

Remarques :

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 16h, Fct 03h    Clavier : Définir la fréquence de répétition     BIOS (> AT)

Cette fonction permet d'agir sur la répétition des touches du clavier pour qu'elles soient répétées automatiquement au bout d'un certain délai.

Entrée :

AH 	= 03h

AL 	= 05h

BH 	= Ralentissement jusqu'à la mise en place de la répétition

BL 	= Fréquence de répétition

Sortie :

aucune

Remarques :

·	Attention ! Cette fonction n'est pas reconnue par tous les BIOS.

·	Les valeurs suivantes peuvent être indiquées pour spécifier la durée de ralentissement dans le registre BL :

00h : 1/4 seconde

01h : 1/2 seconde

10h : 1/4 seconde

11h : 1 seconde

·	Les valeurs suivantes peuvent être utilisées pour le taux de répétition dans le registre BL :

Code	RPS*Code	RPS*	Code	RPS*	Code	RPS*

00h	30	1Fh	2,0	17h	4,0	0Fh	8,0

02h	24	1Eh	2,1	16h	4,3	0Eh	8,6

04h	20	1Dh	2,3	15h	4,6	0Dh	9,2

06h	17,1	1Ch	2,5	14h	5,0	0Ch	10,0

08h	15,0	1Bh	2,7	13h	5,5	0Bh	10,9

09h	13,3	1Ah	3,0	12h	6,0	0Ah	12,0

19h	3,3	11h	6,7

18h	3,7	10h	7,5

* Répétition/Seconde

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 16h, Fct 05h    Clavier : Simuler l'appui sur une touche     BIOS (> AT)

Cette fonction permet à un programme de simuler l'appui sur une touche en ajoutant un code de touche particulier à la fin actuelle du buffer de clavier.

Entrée :

AH 	= 05h

CH 	= Scan code de la touche

CL 	= Code ASCII de la touche

Sortie :

AL 	= 00h:ok

AL 	= 01h : buffer de clavier saturé

Remarques :

·	Attention ! Tous les BIOS ne reconnaissent pas cette fonction.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 16h, Fct 10h    Clavier : Test de claviers étendus     BIOS (> AT)

Cette fonction est conçue spécialement pour tester la présence de claviers étendus (F11 + F12) avec 101 ou 102 touches. Elle fonctionne comme la fonction 00h, mais ne construit pas les scan codes des touches selon la disposition d'un clavier normal à 84 touches.

Entrée :

AH 	= 10h

AH 	= scan code de la touche

AL 	= code ASCII de la touche

Remarques :

·	Attention ! Tous les BIOS ne reconnaissent pas cette fonction.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 16h, Fct 11h    Clavier : Test de claviers étendus     BIOS (> AT)

Cette fonction est conçue spécialement pour tester la présence de claviers étendus (F11 + F12) avec 101 ou 102 touches. Elle fonctionne comme la fonction 00h, mais ne construit pas les scan codes des touches selon la disposition d'un clavier normal à 84 touches.

Entrée :

AH 	= 11h

Sortie :

Flag zéro	= 1 : pas de caractères dans le buffer de clavier

Flag zéro	= 0 : présence de caractères, dans ce cas

AL 	= 0 : code clavier étendu, dans ce cas

AH 	= code clavier étendu

AL	= différent de 0 : touche normale, dans ce cas

AL 	= code ASCII de la touche

AH 	= scan code de la touche

Remarques :

·	Attention ! Tous les BIOS ne reconnaissent pas cette fonction.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Interruption 17h

Fonction 00h	Sortie de caractères sur une imprimante

Fonction 01h	Initialisation de l'imprimante

Fonction 02h	Tester l'état de l'imprimante


Int 17h, Fct 00h    Imprimante (parallèle) : Sortie de caractères     BIOS

Cette fonction envoie un caractère sur l'une des imprimantes connectées au PC.

Entrée :

AH 	= 00h

AL 	= Code du caractère à sortir

DX 	= Numéro d'imprimante

Sortie :

AH 	= Etat de l'imprimante

Bit 0 = 1	time out

Bit 3 = 1	erreur de transmission

Bit 4 = 1	imprimante On Line

Bit 5 = 1	plus de papier

Bit 6 = 1	accusé de réception

Bit 7 = 0	imprimante occupée

Remarques :

·	La première imprimante connectée sur le PC porte le numéro 0.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 17h, Fct 01h    Imprimante (parallèle) : Initialisation imprimante     BIOS

Cette fonction initialise une imprimante connectée sur le PC. Il convient d'y recourir avant toute première transmission d'un caractère sur une imprimante donnée.

Entrée :

AH 	= 01h

DX 	= Numéro d'imprimante

Sortie :

AH 	= Etat de l'imprimante

Bit 0 = 1	time out

Bit 3 = 1	erreur de transmission

Bit 4 = 1	imprimante On Line

Bit 5 = 1	plus de papier

Bit 6 = 1	accusé de réception

Bit 7 = 0	imprimante occupée

Remarques :

·	La première imprimante connectée sur le PC porte le numéro 0.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.

Interruption 17h, Fonction 02h


Int 17h, Fct 02h    Imprimante (parallèle) : Tester l'état de l'imprimante     BIOS

La seule tâche de cette fonction consiste à renvoyer l'état d'une imprimante connectée sur le PC.

Entrée :

AH 	= 02h

DX 	= Numéro d'imprimante

Sortie :

AH 	= Etat de l'imprimante

Bit 0 = 1	time out

Bit 3 = 1	erreur de transmission

Bit 4 = 1	imprimante On Line

Bit 5 = 1	plus de papier

Bit 6 = 1	accusé de réception

Bit 7 = 0	imprimante occupée

Remarques :

·	La première imprimante connectée sur le PC porte le numéro 0.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Interruption 18h
Interruption 18h : Appel de la ROM Basic

Si le PC utilisé dispose d'un BASIC placé en ROM, celui-ci peut être lancé en appelant cette interruption.

Entrée :

aucune

Sortie :

aucune

Remarques :

·	De nombreux modèles récents de PC ne disposent plus d'un BASIC intégré en ROM. Dans ce cas, l'interruption 18h revient immédiatement au programme d'appel ou provoque un plantage du système. Si par contre le PC comporte bien un BASIC intégré en ROM, l'interruption 18h ne rendra pas la main au programme d'appel. Il ne sera alors plus possible de revenir au DOS à moins de déclencher un démarrage à chaud du système (en actionnant ALT-Control-Delete) ou d'éteindre puis de rallumer l'ordinateur.


Interruption 19h
Interruption 19h : démarrage système

L'appel de cette interruption déclenche un lancement du système.

Entrée :

aucune

Sortie :

aucune

Remarques :

·	Il arrive que cette interruption ne relance pas l'ordinateur, mais au contraire provoque un plantage. Cela dépend du fait que le contenu de la mémoire RAM est effacé alors que la table des vecteurs d'interruption reste intacte dans la zone des interruptions 00h à 1Ch. Si un programme résident atteint l'une de ces interruptions, le prochain appel de cette interruption provoque irrémédiablement un plantage. Cela s'applique surtout à l'interruption 08h qui est utilisée par la plupart des programmes résidents.

·	Par conséquent, évitez d'utiliser cette interruption et adoptez plutôt la technique suivante pour relancer le système : pour effectuer un démarrage à chaud, sauvegardez d'abord la valeur 1234h dans la cellule 0040:0072 de la mémoire et exécutez ensuite un FAR-jump vers la cellule FFFF:0000.

·	Cette méthode permet en outre de réaliser un démarrage à froid à condition de charger à cet effet la valeur 0000h dans la cellule 0040:0072.


Interruption 1Ah

Fonction 00h	Lire le compteur de l'horloge système

Fonction 01h	Régler le compteur de l'horloge système

Fonction 02h	Lecture de l'horloge temps réel

Fonction 03h	Régler l'horloge temps réel

Fonction 04h	Lecture de la date sur l'horloge temps réel

Fonction 05h	Régler la date de l'horloge temps réel

Fonction 06h	Régler l'heure d'alarme

Fonction 07h	Annuler l'heure d'alarme


Int 1Ah, Fct 00h    Date et heure : Lire le compteur de l'horloge système    BIOS

Cette fonction permet de lire le contenu du compteur horaire. Il est incrémenté 18,2 fois par seconde et permet de calculer le temps écoulé depuis la mise en marche de l'ordinateur ou depuis minuit.

Entrée :

AH 	= 00h

Sortie :

CX 	= Mot fort du compteur

DX 	= Mot faible du compteur

AL 	= 0 : Moins de 24 heures se sont écoulées depuis la dernière fois que l'heure a été lue.

Différent de 0 : Plus de 24 heures se sont écoulées depuis la dernière  fois que l'heure a été lue.

Remarques :

·	L'AT, qui dispose d'une horloge alimentée par batterie, règle le compteur horaire sur l'heure réelle lors du lancement de l'ordinateur. Les PC qui ne disposent pas d'horloge en temps réel règlent ce compteur sur 0 lors du lancement.

·	Le contenu des registres BX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 1Ah, Fct 01h    Date et heure : Régler le compteur de l'horloge système    BIOS

Cette fonction permet de régler le contenu du compteur horaire. Ce compteur étant augmenté 18,2 fois par seconde, il permet de connaître le temps écoulé depuis la mise en marche de l'ordinateur ou depuis minuit, à moins que cette fonction ne soit utilisée pour le régler.

Entrée :

AH 	= 01h

CX 	= Mot fort du compteur horaire

DX 	= Mot faible du compteur horaire

Sortie :

aucune

Remarques :

·	L'AT, qui dispose d'une horloge alimentée par batterie, règle le compteur horaire sur l'heure réelle lors du lancement de l'ordinateur. Les PC qui ne disposent pas d'horloge en temps réel fixent ce compteur sur 0 lors du lancement. C'est pourquoi, sur ces modèles, il convient d'utiliser cette fonction si l'on veut que le compteur horaire soit réglé sur l'heure actuelle.

·	Le contenu des registres AX, BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 1Ah, Fct 02h    Date et heure : Lecture de l'horloge temps réel BIOS (> AT)

Cette fonction permet de lire l'heure de l'horloge temps réel alimentée par batterie. Comme ce type d'horloge n'existe que sur les AT, seul ce modèle de PC soutient cette fonction.

Entrée :

AH 	= 02h

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas

CH = Heures

CL = Minutes

DH = Secondes

Flag Carry =1 : La batterie de l'horloge est déchargée

Remarques :

·	Toutes les indications sont fournies en format BCD.

·	Le contenu des registres BX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 1Ah, Fct 03h    Date et heure : Régler l'horloge temps réel     BIOS (> AT)

Cette fonction permet de régler l'heure sur l'horloge temps réel alimentée par batterie. Comme ce type d'horloge n'existe que sur les AT, seul ce modèle de PC soutient cette fonction.

Entrée :

AH 	= 03h

CH 	= Heures

CL 	= Minutes

DH 	= Secondes

DL 	= 1 : c'est l'heure d'été

DL 	= 0 : ce n'est pas l'heure d'été

Sortie :

aucune

Remarques :

·	Les indications d'heures, minutes et secondes doivent être fournies en format BCD.

·	Le contenu des registres BX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 1Ah, Fct 04h    Date et heure : Lecture de la date sur l'horloge temps réel     BIOS (> AT)

Cette fonction permet de lire la date qui est stockée dans la mémoire RAM de l'horloge en temps réel alimentée par batterie. Cette fonction n'est soutenue que par l'AT.

Entrée :

AH 	= 04h

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas

CH = Siècle (19 ou 20)

CL = Année

DH = Mois

DL = Jour

Flag Carry =1 : La batterie de l'horloge est déchargée

Remarques :

·	Toutes les indications renvoyées par la fonction sont fournies en format BCD.

·	Le contenu des registres BX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 1Ah, Fct 05h    Date et heure: Régler la date de l'horloge temps réel    BIOS (> AT)

Cette fonction permet de régler la date qui est stockée dans la mémoire RAM de l'horloge temps réel alimentée par batterie. Cette fonction n'est soutenue que par l'AT qui dispose seul d'une horloge en temps réel.

Entrée :

AH 	= 05h

CH 	= Siècle (19 ou 20)

CL 	= Année

DH 	= Mois

DL 	= Jour

Sortie :

aucune

Remarques :

·	Toutes les indications fournies à la fonction doivent être codées en format BCD.

·	Le contenu des registres BX, CX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 1Ah, Fct 06h    Date et heure : Régler l'heure d'alarme     BIOS (> AT)

Cette fonction permet de régler une heure d'alarme se référant au jour actuel. Lorsque cette heure d'alarme est atteinte, l'interruption 4Ah est déclenchée. L'horloge en temps réel alimentée par batterie n'existe que sur les AT.

Entrée :

AH 	= 06h

CH 	= Heures

CL 	= Minutes

DH 	= Secondes

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : soit la batterie de l'horloge est déchargée, soit une autre heure d'alarme a déjà été programmée.

Remarques :

·	Les indications fournies à la fonction doivent être codées en format BCD.

·	L'interruption 4Ah est dirigée, lors du lancement du système, sur une instruction langage machine IRET. Si cette interruption n'est donc pas redirigée sur une routine spéciale, il ne se passera rien lorsque l'heure d'alarme sera atteinte.

·	Il n'est pas possible d'activer plus d'une heure d'alarme à la fois. Si une heure d'alarme est déjà programmée, il faut d'abord l'annuler à l'aide de la fonction 7.

·	Le contenu des registres BX, CX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 1Ah, Fct 07h    Date et heure : Annuler l'heure d'alarme     BIOS (> AT)

Cette fonction permet d'annuler une heure d'alarme déjà programmée. Aucune alarme ne sera donc plus déclenchée lorsque cette heure sera atteinte (seulement AT).

Entrée :

AH 	= 07h

Sortie :

aucune

Remarques :

·	Cette fonction doit notamment être appelée chaque fois que l'on veut modifier l'heure d'alarme. Dans ce cas en effet, il ne sera possible de programmer une nouvelle heure d'alarme, en appelant la fonction 6, qu'après avoir appelé cette fonction.

·	Le contenu des registres BX, CX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Fonctions BIOS EGA/VGA

Les cartes EGA et VGA augmentent les capacités de l'interruption vidéo 10h du BIOS grâce à l'apport d'innombrables fonctions servant à accéder aux techniques performantes de ces cartes. Vous trouverez ci-après la description de ces fonctions qui peuvent être appelées comme n'importe quelle fonction BIOS de l'interruption 10h.

Fonction 00h	Définir le mode vidéo

Fonction 01h	Définir l'apparence du curseur

Fonction 02h	Placer le curseur

Fonction 03h	Lire la position du curseur

Fonction 04h	Lire la position crayon optique

Fonction 05h	Sélectionner la page écran actuelle

Fonction 06h	Faire défiler les lignes de texte vers le haut

Fonction 07h	Faire défiler les lignes de texte vers le bas

Fonction 08h	Lire un caractère et sa couleur

Fonction 09h	Ecrire un caractère et une couleur

Fonction 0Ah	Ecrire un caractère

Fonction 0Bh, Sous-Fct 0	Sélectionner la couleur du cadre et du fond

Fonction 0Bh, Sous-Fct 1	sélectionner la palette de couleurs

Fonction 0Ch	Ecrire un point graphique

Fonction 0Dh	Lire un point graphique

Fonction 0Eh	Ecrire un caractère

Fonction 0Fh	Lire le mode vidéo

Fonction 10h, Sous-Fct 00h	Définir le registre de palette

Fonction 10h, Sous-Fct 01h	Définir la couleur du cadre de l'écran

Fonction 10h, Sous-Fct 02h	Définir tous les registres de palette

Fonction 10h, Sous-Fct 03h	Définir l'attribut de clignotement

Fonction 10h, Sous-Fct 07h	Lire le registre de palette

Fonction 10h, Sous-Fct 08h	Lire le contenu du registre Overscan

Fonction 10h, Sous-Fct 09h	Lire le contenu de tous les registres de palette et Overscan

Fonction 10h, Sous-Fct 10h	Charger un registre de couleur DAC

Fonction 10h, Sous-Fct 12h	Charger plusieurs registres de couleur DAC

Fonction 10h, Sous-Fct 13h	Sélectionner des couleurs ou choisir des registres DAC

Fonction 10h, Sous-Fct 15h	Lire un des registres de couleur DAC

Fonction 10h, Sous-Fct 17h	Définir le contenu de plusieurs registres de couleur DAC

Fonction 10h, Sous-Fct 18h	Définir le registre de masque DAC

Fonction 10h, Sous-Fct 19h	Lire le contenu du registre de masque DAC

Fonction 10h, Sous-Fct 1Ah	Lire la méthode de sélection de couleur et le contenu du registre

Fonction 10h, Sous-Fct 1Bh	Convertir le contenu des registres de couleur DAC en gris

Fonction 11h, Sous-Fct 00h	Charger le jeu de caractères défini par l'utilisateur

Fonction 11h, Sous-Fct 01h	Charger le jeu de caractères 8*14

Fonction 11h, Sous-Fct 02h	Charger le jeu de caractères 8*8

Fonction 11h, Sous-Fct 03h	Sélectionner un jeu de caractères

Fonction 11h, Sous-Fct 04h	Charger le jeu de caractères 8*16

Fonction 11h, Sous-Fct 10h	Charger et activer un jeu de caractères défini par l'utilisateur

Fonction 11h, Sous-Fct 11h	Charger et activer le jeu de caractères 8*14

Fonction 11h, Sous-Fct 12h	Charger le jeu de caractères 8*8

Fonction 11h, Sous-Fct 14h	Charger jeu de caractères 8*16

Fonction 11h, Sous-Fct 30h	Lire des informations sur le générateur de caractères

Fonction 12h, Sous-Fct 10h	Lire la configuration

Fonction 12h, Sous-Fct 20h	Définir une autre routine de copie d'écran

Fonction 12h, Sous-Fct 30h	Définir le nombre de lignes de balayage

Fonction 12h, Sous-Fct 31h	Activer ou désactiver le chargement des registres de palette

Fonction 12h, Sous-Fct 32h	Autoriser/verrouiller l'accès de l'unité centrale à la RAM vidéo

Fonction 12h, Sous-Fct 33h	Activer/désactiver la conversion en gris des registres DAC

Fonction 12h, Sous-Fct 34h	Activer/désactiver l'émulation du curseur

Fonction 12h, Sous-Fct 36h	Interdire la construction de l'écran

Fonction 13h	Afficher une chaîne de caractères

Fonction 14h	Non documentée

Fonction 15h	Non documentée

Fonction 16h	Non documentée

Fonction 17h	Non documentée

Fonction 18h	Non documentée

Fonction 19h	Non documentée

Fonction 1Ah, Sous-Fct 00h	Lire le type d'adaptateur vidéo primaire et secondaire

Fonction 1Ah, Sous-Fct 01h	Définir les cartes vidéo primaire et secondaire

Fonction 1Bh	Lire les informations d'état concernant le mode vidéo et le BIOS

Fonction 1Ch, Sous-Fct 00h	Demander la taille de la zone de sauvegarde

Fonction 1Ch, Sous-Fct 01h	Sauvegarder l'état vidéo

Fonction 1Ch, Sous-Fct 02h	Restaurer l'état vidéo


Int 10h, Fct 00h    Ecran : Définir le mode vidéo    BIOS EGA/VGA

Cette fonction permet de sélectionner et initialiser un mode vidéo.

AH 	= 00h

AL	Mode	Résolution	Résolution	Couleurs	Système

T/G	texte	graphique

00h	T	40x25  8x8	Gris	CGA,PCjr

T	40x25  8x14	Gris	EGA

T	40x25  8x16	16	MCGA

T	40x25  9x16	16	VGA

01h	T	40x25  8x8	16	CGA,PCjr

T	40x25  8x14	16	EGA

T	40x25  8x16	16	MCGA

T	40x25  9x16	16	VGA

02h	T	80x25  8x8	16 gris	CGA,PCjr

T	80x25  8x14	16 gris	EGA

T	80x25  8x16	16	MCGA

T	80x25  9x16	16	VGA

03h	T	80x25  8x8	16	CGA,PCjr

T	80x25  8x14	16	EGA

T	80x25  8x16	16	MCGA

T	80x25  9x16	16	VGA

04h	G	40x25  8x8	320x200	4	CGA,PCjr,EGA,MCGA,VGA

05h	G	40x25  8x8	320x200	4 gris	CGA,PCjr,EGA

G	40x25  8x8	320x200	4	MCGA,VGA

06h	G	80x25  8x8	640x200	2	CGA,PCjr,EGA,MCGA,VGA

07h	T	80x25  9x14	mono	MDA,Hercules,EGA

T	80x25  9x16	mono	VGA

08h	G	20x25  8x8	160x200	16	PCjr

G	90x43  8x8	720x352	mono	Hercules + MSHERC.COM

09h	G	40x25  8x8	320x200	16	PCjr

0Ah	G	80x25  8x8	640x200	4	PCjr

0Bh	réservé pour le BIOS EGA

0Ch	réservé pour le BIOS EGA

0Dh	G	40x25  8x8	320x200	16	EGA,VGA

0Eh	G	80x25  8x8	640x200	16	EGA,VGA

0Fh	G	80x25  8x14	640x350	mono	EGA,VGA

10h	G	80x25  8x14	640x350	4	EGA 64 Ko

G	640x350	16	EGA 256 Ko,VGA

11h	G	80x30  8x16	640x480	mono	VGA,MCGA

12h	G	80x30  8x16	640x480 	16/256k	VGA

13h	G	40x25  8x8	320x200 	256/256k	VGA,MCGA

18h	T	132x44  8x8	mono	Tseng Labs EVA

T	132x44  8x8	16/256	Tseng ET4000

19h	T	132x25  8x14	mono	Tseng Labs EVA

T	132x25  8x14	16/256	Tseng ET4000

1Ah	T	132x28  8x13	mono	Tseng Labs EVA

T	132x28  8x13	16/256	Tseng ET4000

22h	T	132x44  8x8	Tseng Labs EVA

T	132x44  8x8	16/256	Tseng ET4000

T	132x44	16	Orchid Prodesigner VGA

23h	T	132x25  6x14	Tseng Labs EVA

T	132x25  8x14	16/256	Tseng ET4000

T	132x28	16	Orchid Prodesigner VGA

24h	T	132x28  6x13	Tseng Labs EVA

T	132x28  8x13	16/256	Tseng ET4000

T	132x25	16	Orchid Prodesigner VGA

25h	G	80x60  8x8	640x480	Tseng Labs EVA

G	80x60  8x8	640x480	16/256	Tseng ET4000

G	80x60  8x8	640x480	16	Orchid Prodesigner VGA

26h	T	80x60  8x8	Tseng Labs EVA

T	80x60  8x8	16/256	Tseng ET4000

T	80x60	16	Orchid ProDesigner VGA

G	100x37  8x16	800x600	16	Orchid

G	100x37  8x16	800x600	16/256	Tseng ET4000

T	100x40  8x16	16	Orchid Prodesigner VGA

T	100x40  8x15	16/256	Tseng ET4000

2Dh	G	80x25  8x14	640x350	256/256k	Tseng ET4000

2Eh	G	80x30  8x16	640x480 	256/256k	Orchid

G	80x30  8x16	640x480	256/256k 	Tseng ET4000

2Fh	G	80x25  8x16	640x400	256/256k	Tseng ET4000

30h	G	100x37  8x16	800x600 	256/256k	Orchid

G	100x37  8x16	800x600 	256/256k	Tseng ET4000

37h	G	128x48  8x16 	1024x768	16	Orchid

38h	G	128x48  8x16 	1024x768 	256/256k 	Tseng ET4000

6Ah	G	800x600	16	VESA standard

Sortie :

pas de sortie

Remarques :

·	Les modes 0 et 1, 2 et 3 ainsi que 4 et 5 se distinguent normalement par le fait que sous le premier mode de chaque paire indiquée, aucun signal de couleur n'est envoyé au moniteur. Comme ce n'est cependant pas possible avec la carte EGA, les modes 0 et 1, 2 et 3 ainsi que 4 et 5 sont donc identiques.

·	Si le bit 7 du registre AL est mis lors de l'appel de cette fonction, le contenu de la RAM vidéo n'est pas effacé lors du passage au nouveau mode vidéo.

·	Cette fonction sert à programmer le contrôleur vidéo de la carte EGA/VGA et à définir une palette de couleurs. Les autres tâches de cette fonction peuvent en outre être définies à l'aide de la fonction 12h.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 01h    Ecran : Définition de l'apparence du curseur    BIOS EGA/VGA

Cette fonction permet de définir les lignes de départ et de fin du curseur clignotant de l'écran. Elle est indépendante de la page écran affichée sur l'écran.

Entrée :

AH	= 01h

CH	= ligne de départ du curseur

CL	= ligne de fin du curseur

Sortie :

pas de sortie

Remarques :

·	Comme les réglages possibles avec la carte EGA/VGA dépendent de la taille de la matrice de caractère sous le mode vidéo actuel, les spécifications dans les registres CH et CL se réfèrent ici toujours à une matrice de caractère composée de 8 lignes. Les valeurs spécifiées doivent donc être comprises entre 0 et 7. Le BIOS EGA/VGA adapte ces spécifications à la taille actuelle de la matrice de caractère en les convertissant donc d'une matrice de 8 lignes vers la hauteur actuelle de la matrice.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 02h    Ecran : Positionnement du curseur    BIOS EGA/VGA

Cette fonction permet de définir le curseur, qui fixe la position de l'écran que les fonctions BIOS pour la sortie de caractères doivent employer.

Entrée :

AH	= 02h

BH	= numéro de page écran

DH	= ligne de l'écran

DL	= colonne de l'écran

Sortie :

pas de sortie

Remarques :

·	Le curseur clignotant de l'écran n'est déplacé par cette fonction que si la page écran appelée est la page écran actuellement affichée.

·	Les valeurs pour la ligne de l'écran et la colonne de l'écran dépendent de la résolution sous le mode vidéo actuel.

·	Une méthode pour faire disparaître le curseur qui clignote est de le mettre à une position écran non existante (par exemple colonne 0, ligne 25).

·	Le numéro de la page dépendante du nombre de pages écran de la carte vidéo à votre disposition.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 03h    Ecran : Lecture de la position du curseur    BIOS EGA/VGA

Cette fonction renvoie la position du curseur de texte dans une page écran et les lignes de départ et de fin du curseur clignotant de l'écran.

Entrée :

AH	= 03h

BH	= numéro de page écran

Sortie :

DH	= ligne de l'écran dans laquelle figure le curseur

DL	= colonne de l'écran dans laquelle figure le curseur

CH	= ligne de départ du curseur clignotant de l'écran

CL	= ligne de fin du curseur clignotant de l'écran

Remarques :

·	les ligne et colonne de l'écran se réfèrent toujours au système de coordonnées de texte, même lorsque c'est un mode graphique qui est activé.

·	Les lignes de départ et de fin du curseur ne sont fournies de façon exacte que dans le cadre des modes de texte. Dans les modes graphiques, ces indications sont dépourvues de signification.

·	Le contenu des registres BX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 04h    Crayon optique : Lire la position    EGA

La position d'un crayon optique sur l'écran est lue si cela est possible. Cela ne concerne principalement que les cartes EGA parce que les cartes VGA n'utilisent pas un crayon optique.

Entrée :

AH 	= 04h

Sortie :

AH 	= 0 : La position du crayon optique ne peut pas être obtenue dans l'immédiat

AH 	= 1 : Position du crayon optique demandée, dans ce cas,

DH 	= Ligne de l'écran du crayon optique (mode texte)

DL 	= Colonne de l'écran du crayon optique (mode texte)

CH 	= Ligne de l'écran du crayon optique (mode graphique)

BX 	= Colonne de l'écran du crayon optique (mode graphique)

Remarques :

·	L'appel de cette fonction doit se répéter tant que la valeur 1 n'est pas retournée dans le registre AH. La position du crayon optique n'est transmise qu'à ce moment-là.

·	Il se peut que les coordonnées du crayon optique ne soient pas rendues correctement surtout dans le mode graphique. La coordonnée Y (ligne) est toujours un multiple de 2 et il est difficile de distinguer si le crayon optique se trouve dans la ligne 8 ou 9.

·	En mode graphique 320*200 points, la coordonnée X (colonne) est toujours un multiple de 4 et en mode 640*200 points, un multiple de 8.

·	Le contenu du registre CL et le contenu des registres de segment SS, CS et DS ne sont pas modifiés par cette fonction. Le contenu de tous les autres registres, en particulier SI et DI, peuvent être modifiés.


Int 10h, Fct 05h    Ecran : Sélection de la page écran actuelle    BIOS EGA/VGA

Sélection de la page écran actuelle, c'est-à-dire de la page écran devant être affichée sur l'écran (seulement en mode de texte).

Entrée :

AH	= 05h

AL	= numéro de page écran

Sortie :

pas de sortie

Remarques :

·	Le nombre de pages écran disponibles dépend de la taille de la mémoire RAM installée sur la carte EGA/VGA.

·	Lors du passage à une autre page écran, le curseur clignotant de l'écran est fixé sur la position du curseur de texte dans cette page.

·	La commutation entre différentes pages écran ne modifie pas leur contenu.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 06h    Ecran : Défilement des lignes de texte vers le haut (scrolling)    BIOS EGA/VGA
Int 10h, Fct 06h    Ecran : Faire défiler des lignes de texte vers le haut (scrolling)    BIOS EGA/VGA

Une partie de la page écran actuelle est décalée vers le haut d'une ou plusieurs lignes ou bien vidée.

Entrée :

AH	= 06h

AL	= nombre de lignes sur lesquelles la fenêtre doit être décalée vers le haut (0 signifie vider la fenêtre)

CH	= ligne de l'écran du coin supérieur gauche de la fenêtre

CL	= colonne de l'écran du coin supérieur gauche de la fenêtre

DH	= ligne de l'écran du coin inférieur droit de la fenêtre

DL	= colonne de l'écran du coin inférieur droit de la fenêtre

BH	= couleur (attribut) pour la ou les lignes vides

Sortie :

pas de sortie

Remarques :

·	C'est normalement le contenu de la page écran actuelle qui est décalé mais lorsque cette fonction est appelée en mode graphique 320*200 points avec 4 couleurs, c'est toujours la page vidéo 0 qui est affectée.

·	Le fait de vider cette zone de l'écran (nombre de lignes = 0) revient en fait à la remplir d'espaces (code ASCII 32).

·	Le contenu des lignes expulsées de la fenêtre est irrémédiablement perdu.

·	Pour vider l'écran en totalité, il est préférable d'avoir recours à la fonction 0 de cette interruption.

·	L'interprétation de l'octet d'attribut dépend du mode vidéo actuel. En mode de texte, il est interprété comme n'importe quel autre octet d'attribut dans la RAM vidéo. En mode graphique 640*200 points avec 2 couleurs, cet octet représente par contre chaque fois les codes couleur pour 8 points consécutifs. En mode 320*200 points avec 4 couleurs, il représente les codes couleur pour 4 points consécutifs chaque fois. Sous tous les autres modes graphiques, il indique la couleur pour un point graphique qui devra être attribuée à tous les points graphiques dans la zone de l'écran effacée.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 07h    Ecran : Faire défiler des lignes de texte vers le bas (scrolling)    BIOS EGA/VGA

Une partie de la page écran actuelle est décalée vers le bas d'une ou plusieurs lignes ou bien vidée.

Entrée :

AH	= 07h

AL	= nombre de lignes sur lesquelles la fenêtre doit être décalée vers le bas (0 signifie vider la fenêtre)

CH	= ligne de l'écran du coin supérieur gauche de la fenêtre

CL	= colonne de l'écran du coin supérieur gauche de la fenêtre

DH	= ligne de l'écran du coin inférieur droit de la fenêtre

DL	= colonne de l'écran du coin inférieur droit de la fenêtre

BH	= couleur (attribut) pour la ou les lignes vides

Sortie :

pas de sortie

Remarques :

·	C'est normalement le contenu de la page écran actuelle qui est décalé mais lorsque cette fonction est appelée en mode graphique 320*200 points avec 4 couleurs, c'est toujours la page vidéo 0 qui est affectée.

·	Le fait de vider cette zone de l'écran (nombre de lignes = 0) revient en fait à la remplir d'espaces (code ASCII 32).

·	Le contenu des lignes expulsées de la fenêtre est irrémédiablement perdu.

·	Pour vider l'écran en totalité, il est préférable d'avoir recours à la fonction 0 de cette interruption.

·	L'interprétation de l'octet d'attribut dépend du mode vidéo actuel. En mode de texte, il est interprété comme n'importe quel autre octet d'attribut dans la RAM vidéo. En mode graphique 640*200 points avec 2 couleurs, cet octet représente par contre chaque fois les codes couleur pour 8 points consécutifs. En mode 320*200 points avec 4 couleurs, il représente les codes couleur pour 4 points consécutifs chaque fois. Sous tous les autres modes graphiques, il indique la couleur pour un point graphique qui devra être attribuée à tous les points graphiques dans la zone de l'écran effacée.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 08h    Ecran : Lecture d'un caractère et de sa couleur    BIOS EGA/VGA

Cette fonction renvoie le code ASCII du caractère dans la position actuelle du curseur ainsi que sa couleur (son attribut).

Entrée :

AH	= 08h

BH	= numéro de page écran

Sortie :

AL	= code ASCII du caractère

AH	= couleur (attribut)

Remarques :

·	Cette fonction peut également être appelée en mode graphique, auquel cas le motif de bits du caractère sur l'écran sera comparé avec les motifs de bits des caractères. Si le caractère ne peut être identifié de cette manière, le registre AL contiendra la valeur 0 après appel de la fonction.

·	En mode graphique 320*200 points avec 4 couleurs, cette fonction ne travaille correctement que lorsqu'on accède à la page écran 0.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 09h    Ecran : Ecriture d'un caractère et d'une couleur    BIOS EGA/VGA

Un caractère est écrit avec une couleur déterminée dans la position actuelle du curseur (dans la page écran spécifiée).

Entrée :

AH	= 09h

BH	= numéro de page écran

CX	= coefficient de répétition

AL	= code ASCII du caractère

BL	= attribut

Sortie :

pas de sortie

Remarques :

·	Si le caractère spécifié doit être sorti plusieurs fois (c'est-à-dire que le registre CX est supérieur à 1), il faut, en mode graphique, que tous les caractères puissent tenir dans la ligne d'écran actuelle.

·	En mode graphique 320*200 points avec 4 couleurs, cette fonction ne travaille correctement que lorsqu'on accède à la page écran 0.

·	Dans le cadre d'un mode graphique, l'attribut dans le registre BL indique la couleur de premier plan du caractère, la couleur de fond étant toujours 0. Si le bit 7 est mis, le caractère est combiné par un XOR avec le motif de points écran actuel dans la position de sortie.

·	Les codes de contrôle Bell, Carriage Return etc. ne sont pas identifiés comme tels mais sortis comme des caractères ASCII ordinaires.

·	Cette fonction permet aussi de sortir des caractères en mode graphique, les motifs des caractères étant tirés de l'une des tables de caractères EGA/VGA.

·	Cette fonction ne déplace pas le curseur vers la prochaine position de l'écran.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 0Ah    Ecran : Ecriture d'un caractère    BIOS EGA/VGA

Un caractère est écrit dans la position actuelle du curseur dans la page écran spécifiée, la couleur du caractère qui figurait auparavant dans cette position de l'écran restant inchangée.

Entrée :

AH	= 0Ah

BH	= numéro de page écran

BL	= couleur de premier plan du caractère pour les modes graphiques

CX	= coefficient de répétition

AL	= code ASCII du caractère

Sortie :

pas de sortie

Remarques :

·	Si le caractère spécifié doit être sorti plusieurs fois (c'est-à-dire que le registre CX est supérieur à 1), il faut, en mode graphique, que tous les caractères puissent tenir dans la ligne d'écran actuelle.

·	Les codes de contrôle Bell, Carriage Return etc. ne sont pas identifiés comme tels mais sortis comme des caractères ASCII ordinaires.

·	Cette fonction permet aussi de sortir des caractères en mode graphique, les motifs des caractères étant tirés de l'une des tables de caractères EGA.

·	Dans le cadre d'un mode graphique, l'attribut dans le registre BL indique la couleur de premier plan du caractère, la couleur de fond étant toujours 0. Si le bit 7 est mis, le caractère est combiné par un XOR avec le motif de points écran actuel dans la position de sortie.

·	Cette fonction ne déplace pas le curseur vers la prochaine position de l'écran.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 0Bh, Sous-Fct 0    Ecran : sélection de la couleur du cadre et du fond    BIOS EGA/VGA

Cette fonction permet de sélectionner la couleur du cadre et du fond pour les modes graphique ou texte.

Entrée :

AH	= 0Bh

BH	= 0

BL	= couleur de cadre et de fond

Sortie :

pas de sortie

Remarques :

·	Cette fonction ne doit être appelée que si la carte EGA/VGA est en mode graphique 320*200 points ou 640*200 points. Dans tous les autres modes, il est préférable d'utiliser plutôt la fonction 10h.

·	Les bits 0 à 3 du registre BL définissent la couleur du fond et du cadre. On peut en outre obtenir des couleurs plus intenses en fixant le bit 4.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 0Bh, Sous-Fct 1    Ecran : sélection de la palette de couleurs    BIOS EGA/VGA

Sélection de l'une des palettes de couleurs pour le mode graphique 320*200 points.

Entrée :

AH	= 0Bh

BH	= 1

BL	= numéro de la palette de couleur

Sortie :

pas de sortie

Remarques :

·	Cette fonction ne doit être appelée que si la carte EGA/VGA est en mode graphique 320*200 points ou 640*200 points. Dans tous les autres modes, il est préférable d'utiliser plutôt la fonction 10h.

·	Le BIOS EGA/VGA émule les deux palettes de couleurs CGA avec les numéros 0 et 1. Elles comportent les couleurs suivantes :

Palette 0 : vert, rouge, jaune

Palette 1 : cyan, magenta, blanc

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 0Ch    Ecran : Ecrire un point graphique    BIOS EGA/VGA

Fixe le code couleur d'un point écran en mode graphique.

Entrée :

AH	= 0Ch

BH	= page écran

DX	= ligne de l'écran

CX	= colonne de l'écran

AL	= code couleur

Sortie :

pas de sortie

Remarques :

·	Le code couleur dépend du nombre de couleurs affichées sous le mode graphique actuel.

·	Si le bit 7 du registre AL est mis, le code couleur sera combiné par un XOR avec le code couleur antérieur des points graphiques.

·	L'indication de la page écran est ignorée en mode graphique 320*200 points avec 4 couleurs.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 0Dh    Ecran : Lire un point graphique    BIOS EGA/VGA

Lecture du code couleur d'un point écran en mode graphique.

Entrée :

AH	= 0Dh

BH	= page écran

DX	= ligne de l'écran

CX	= colonne de l'écran

Sortie :

AL	= code couleur

Remarques :

·	Le code couleur dépend du nombre de couleurs affichées sous le mode graphique actuel.

·	L'indication de la page écran est ignorée en mode graphique 320*200 points avec 4 couleurs.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 0Eh    Ecran : Ecriture d'un caractère    BIOS EGA/VGA

Un caractère est écrit dans la position actuelle du curseur dans la page écran actuelle, la couleur du caractère qui figurait auparavant dans cette position de l'écran étant conservée.

Entrée :

AH	= 0Eh

AL	= code ASCII du caractère

BL	= couleur de premier plan du caractère pour le mode graphique

Sortie :

pas de sortie

Remarques :

·	Cette fonction n'interprète pas les différents codes de contrôle tels que Bell et Carriage Return comme des codes ASCII ordinaires mais bien comme des codes de contrôle. Un bip sera donc émis par exemple au lieu d'afficher le caractère Bell.

·	Après qu'un caractère ait été sorti avec cette fonction, la position du curseur est incrémentée de façon à ce que le caractère suivant soit sorti sur la prochaine position de l'écran. Si la dernière position de l'écran est atteinte, l'écran est décalé d'une ligne vers le haut et la sortie se poursuit dans la première colonne de la dernière ligne de l'écran.

·	Si le bit 7 du registre AL est mis, le code couleur sera combiné par un XOR avec le code couleur antérieur des points graphiques. La couleur de fond des caractères est toujours 0.

·	Cette fonction permet aussi de sortir des caractères en mode graphique, les motifs des caractères étant tirés de l'une des tables de caractères EGA.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 0Fh    Ecran : lecture du mode vidéo    BIOS EGA/VGA

Lecture du mode vidéo actuel, du nombre de caractères par ligne et du numéro de la page écran actuelle.

Entrée :

AH	= 0Fh

Sortie :

AL	= Mode vidéo en cours (voir plus bas)

AH 	= Nombre de caractères par ligne

BH 	= Numéro de la page écran en cours

Remarques :

AL	Mode	Résolution	Résolution	Couleurs	Système

T/G	texte	graphique

00h	T	40x25  8x8	Gris	CGA,PCjr

T	40x25  8x14	Gris	EGA

T	40x25  8x16	16	MCGA

T	40x25  9x16	16	VGA

01h	T	40x25  8x8	16	CGA,PCjr

T	40x25  8x14	16	EGA

T	40x25  8x16	16	MCGA

T	40x25  9x16	16	VGA

02h	T	80x25  8x8	16 gris	CGA,PCjr

T	80x25  8x14	16 gris	EGA

T	80x25  8x16	16	MCGA

T	80x25  9x16	16	VGA

03h	T	80x25  8x8	16	CGA,PCjr

T	80x25  8x14	16	EGA

T	80x25  8x16	16	MCGA

T	80x25  9x16	16	VGA

04h	G	40x25  8x8	320x200	4	CGA,PCjr,EGA,MCGA,VGA

05h	G	40x25  8x8	320x200	4 gris	CGA,PCjr,EGA

G	40x25  8x8	320x200	4	MCGA,VGA

06h	G	80x25  8x8	640x200	2	CGA,PCjr,EGA,MCGA,VGA

07h	T	80x25  9x14	mono	MDA,Hercules,EGA

T	80x25  9x16	mono	VGA

08h	G	20x25  8x8	160x200	16	PCjr

G	90x43  8x8	720x352	mono	Hercules + MSHERC.COM

09h	G	40x25  8x8	320x200	16	PCjr

0Ah	G	80x25  8x8	640x200	4	PCjr

0Bh	réservé pour le BIOS EGA

0Ch	réservé pour le BIOS EGA

0Dh	G	40x25  8x8	320x200	16	EGA,VGA

0Eh	G	80x25  8x8	640x200	16	EGA,VGA

0Fh	G	80x25  8x14	640x350	mono	EGA,VGA

10h	G	80x25  8x14	640x350	4	EGA 64 Ko

G	640x350	16	EGA 256 Ko,VGA

11h	G	80x30  8x16	640x480	mono	VGA,MCGA

12h	G	80x30  8x16	640x480 	16/256k	VGA

13h	G	40x25  8x8	320x200 	256/256k	VGA,MCGA

18h	T	132x44  8x8	mono	Tseng Labs EVA

T	132x44  8x8	16/256	Tseng ET4000

19h	T	132x25  8x14	mono	Tseng Labs EVA

T	132x25  8x14	16/256	Tseng ET4000

1Ah	T	132x28  8x13	mono	Tseng Labs EVA

T	132x28  8x13	16/256	Tseng ET4000

22h	T	132x44  8x8	Tseng Labs EVA

T	132x44  8x8	16/256	Tseng ET4000

T	132x44	16	Orchid Prodesigner VGA

23h	T	132x25  6x14	Tseng Labs EVA

T	132x25  8x14	16/256	Tseng ET4000

T	132x28	16	Orchid Prodesigner VGA

24h	T	132x28  6x13	Tseng Labs EVA

T	132x28  8x13	16/256	Tseng ET4000

T	132x25	16	Orchid Prodesigner VGA

25h	G	80x60  8x8	640x480	Tseng Labs EVA

G	80x60  8x8	640x480	16/256	Tseng ET4000

G	80x60  8x8	640x480	16	Orchid Prodesigner VGA

26h	T	80x60  8x8	Tseng Labs EVA

T	80x60  8x8	16/256	Tseng ET4000

T	80x60	16	Orchid ProDesigner VGA

G	100x37  8x16	800x600	16	Orchid

G	100x37  8x16	800x600	16/256	Tseng ET4000

T	100x40  8x16	16	Orchid Prodesigner VGA

T	100x40  8x15	16/256	Tseng ET4000

2Dh	G	80x25  8x14	640x350	256/256k	Tseng ET4000

2Eh	G	80x30  8x16	640x480 	256/256k	Orchid

G	80x30  8x16	640x480	256/256k 	Tseng ET4000

2Fh	G	80x25  8x16	640x400	256/256k	Tseng ET4000

30h	G	100x37  8x16	800x600 	256/256k	Orchid

G	100x37  8x16	800x600 	256/256k	Tseng ET4000

37h	G	128x48  8x16 	1024x768	16	Orchid

38h	G	128x48  8x16 	1024x768 	256/256k 	Tseng ET4000

6Ah	G	800x600	16	VESA standard

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 10h, Sous-Fct 00h    Ecran : Définir le registre de palette    BIOS EGA/VGA

Cette fonction permet de régler le contenu de l'un des registres de palette du contrôleur d'attribut de la carte EGA/VGA.

Entrée :

AH	= 10h

AL	= 00h

BL	= code couleur

BH	= registre à adresser

Sortie :

aucune

Remarques :

·	Le numéro de registre n'étant pas contrôlé par le BIOS, cette fonction permet de programmer aussi les autres registres du contrôleur d'attribut. Il s'agit notamment des registres Mode Control, Overscan etc.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 10h, Sous-Fct 01h    Ecran : Définir la couleur du cadre de l'écran    BIOS EGA/VGA

La valeur spécifiée est copiée par cette fonction dans le registre Overscan du contrôleur d'attribut EGA/VGA.

Entrée :

AH	= 10h

AL	= 01h

BH	= couleur du cadre

Sortie :

aucune

Remarques :

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 10h, Sous-Fct 02h    Ecran : Définir tous les registres de palette    BIOS EGA/VGA

Ces fonctions permettent de régler simultanément les 16 registres de palette et le registre Overscan.

Entrée :

AH	= 10h

AL	= 02h

ES	= adresse de segment de la table de couleurs

DX	= adresse d'offset de la table de couleurs

Sortie :

aucune

Remarques :

·	La paire de registres ES:BX désigne une table qui doit avoir une longueur de 17 octets. Les 16 premiers octets seront transférés dans les 16 registres de palette du contrôleur d'attribut alors que le 17ème registre sera copié dans le registre Overscan.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 10h, Sous-Fct 03h    Ecran : Définirr attribut de clignotement    BIOS EGA/VGA
Int 10h, Fct 10h, Sous-Fct 03h    Ecran : définir attribut de clignotement    BIOS EGA/VGA

L'appel de cette fonction permet de savoir si le bit 7 de l'octet d'attribut d'un caractère entraîne, en mode de texte, un clignotement de ce caractère, ou un affichage plus intense du fond du caractère.

Entrée :

AH	= 10h

AL	= 03h

BL	= attribut de clignotement

0 = couleur de fond intense

1 = clignotement

Sortie :

aucune

Remarques :

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 10h, Sous-Fct 07h    Lire le registre de palette    VGA

Cette fonction offre à un programme la possibilité de connaître le contenu de l'un des registres de palette du contrôleur d'attribut.

Entrée :

AH	= 10h

AL	= 07h

BL	= Numéro du registre de palette

Sortie :

BH	= Contenu du registre de palette adressé

Remarques :

·	Le numéro du registre de palette appelé n'étant pas contrôlé par le BIOS, cette fonction permet en fait de lire tous les registres du contrôleur d'attribut.

·	Le contenu des registres BL, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Int 10h, Fct 10h, Sous-Fct 08h    Lire le contenu du registre Overscan    VGA

Cette fonction renvoie au programme d'appel le contenu du registre Overscan, qui définit la couleur du cadre de l'écran.

Entrée :

AH	= 10h

AL	= 08h

Sortie :

BH	= Contenu du registre Overscan

Remarques :

·	Le contenu des registres BL, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Int 10h, Fct 10h, Sous-Fct 09h    Lire le contenu de tous les registres de palette et le registre Overscan        VGA

Lorsque cette fonction est appelée, le contenu des 16 registres de palette ainsi que le contenu du registre Overscan sont copiés dans un buffer du programme d'appel.

Entrée :

AH	= 10h

AL	= 09h

ES	= Adresse de segment du buffer

DX	= Adresse d'offset du buffer

Sortie :

Aucune

Remarques :

·	Le buffer doit disposer d'une place d'au moins 17 octets pour pouvoir recevoir le contenu de tous les registres de palette (octets 0 à 15) et le contenu du registre Overscan (octet 16).

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Int 10h, Fct 10h, Sous-Fct 10h    Charger un registre de couleur DAC    VGA

Cette fonction permet de définir le contenu de l'un des 256 registres de couleurs DAC.

Entrée :

AH	= 10h

AL	= 10h

BX	= Numéro du registre de couleur DAC (0 à 255)

CH	= Vert

CL	= Bleu

DH	= Rouge

Sortie :

Aucune

Remarques :

·	Seuls les bits 0 à 5 des registres CH, CL et DH servent à composer le mélange de la couleur, les autres bits sont ignorés.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Int 10h, Fct 10h, Sous-Fct 12h    Charger plusieurs registres de couleur DAC    VGA

Cette fonction représente une extension de la fonction 10h et permet de charger des valeurs dans plusieurs registres de couleur DAC simultanément.

Entrée :

AH	= 10h

AL	= 12h

BX	= Numéro du premier registre de couleur DAC appelé (0 à 255)

CX	= Nombre de registres à définir

ES	= Adresse de segment du buffer

DX	= Adresse d'offset du buffer

Sortie :

Aucune

Remarques :

·	Le buffer spécifié doit comporter pour chacun des registres de couleur à définir un groupe de 3 octets consécutifs, dont le premier définit la part de rouge, le deuxième la part de vert et le troisième la part de bleu. Les trois premiers octets correspondent au premier registre de couleur DAC appelé, les trois octets suivants au registre de couleur DAC suivant, etc.

·	Pour le mélange de la couleur, seuls les bits 0 à 5 sont significatifs, les autres bits sont ignorés.

·	Si la somme de BX et CX est supérieure à 255, c'est le premier registre de couleur DAC qui sera traité après que le dernier registre de couleur DAC ait été traité. Il y a donc une exécution en boucle (Wrap Around).

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Int 10h, Fct 10h, Sous-Fct 13h    Définir la méthode de sélection des couleurs ou sélectionner un groupe     de registres DAC
Int 10h, Fct 10h, Sous-Fct 13h    Définir la méthode de sélection des couleurs ou sélectionner un groupe de registres DAC    VGA

Cette fonction manipule le bit 7 du registre de contrôle de mode.

Entrée :

AH	= 10h

AL	= 13h

BL	= 00h ou 01h (voir plus bas)

BH	= voir plus bas

Sortie :

Aucune

Remarques :

·	Cette sous-fonction dispose elle-même à son tour de deux sous-fonctions sélectionnées à travers la valeur dans le registre BL. La sous-fonction 00h permet de définir la sélection des couleurs, alors que la sous-fonction 01h sert à sélectionner le groupe de registres DAC activé.

·	La sous-fonction 00h copie le bit 0 du registre BH dans le bit 7 du registre de contrôle de mode, fixant ainsi la méthode de sélection des couleurs. Si le bit 0 de BH contient la valeur 0, les 256 registres de couleur DAC seront divisés en quatre groupes de 64 registres. En ce qui concerne la sélection de couleur, les bits 0 à 5 de chaque registre de palette forment avec les bits 2 à 3 du registre de sélection de couleur les 8 bits utilisés comme index dans la table de couleurs DAC. Si le bit 0 du registre BH contient par contre la valeur 1, les registres de couleur DAC seront groupés en 16 groupes de 16 registres. Les 4 bits inférieurs du registre de palette composeront alors avec les 4 bits inférieurs du registre de sélection de couleur l'index 8 bits sur la table de couleurs DAC.

·	La sous-fonction 01h sert à définir le registre de sélection de couleur, dont le contenu sélectionne le groupe de registres de couleur DAC activé. Le contenu du registre BH est copié à cet effet dans le registre de sélection de couleur.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Int 10h, Fct 10h, Sous-Fct 15h    Lit un des registres de couleur DAC    VGA

Fournit au programme d'appel le contenu de l'un des 256 registres de couleur DAC.

Entrée :

AH	= 10h

AL	= 15h

BX	= Numéro du registre de couleur DAC

Sortie :

CH	= Vert

CL	= Bleu

DH	= Rouge

Remarques :

·	Seuls les bits 0 à 5 des registres CH, CL et DH participent au mélange de la couleur.

·	Le contenu des registres BX, DL, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Interrupt 10h, Fct 10h, Sous-Fct 17h    Définir le contenu de plusieurs registres de couleur DAC    VGA

Cette fonction, qui représente une extension de la fonction 10h, permet de définir en une fois le contenu de plusieurs registres de couleur DAC.

Entrée :

AH	= 10h

AL	= 17h

BX	= Numéro du premier registre de couleur DAC appelé (0 à 255)

CX	= Nombre de registres à définir

ES	= Adresse de segment du buffer

DX	= Adresse d'offset du buffer

Sortie :

Aucune

Remarques :

·	Le buffer spécifié doit comporter pour chacun des registres de couleur à définir un groupe de 3 octets consécutifs, dont le premier définit la part de rouge, le deuxième la part de vert et le troisième la part de bleu. Les trois premiers octets correspondent au premier registre de couleur DAC appelé, les trois octets suivants au registre de couleur DAC suivant, etc.

·	Pour le mélange de la couleur, seuls les bits 0 à 5 sont significatifs, les autres bits sont ignorés.

·	Si la somme de BX et CX est supérieure à 255, c'est le premier registre de couleur DAC qui sera traité après que le dernier registre de couleur DAC ait été traité. Il y a donc une exécution en boucle (Wrap Around).

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Interrupt 10h, Fct 10h, Sous-Fct 18h    Définit le registre de masque DAC    VGA

Charge la valeur transmise dans le registre de masque DAC.

Entrée :

AH	= 10h

AL	= 18h

BL	= Valeur pour le registre de masque DAC

Sortie :

Aucune

Remarques :

·	Le contenu du registre de masque DAC intervient dans la sélection de couleur car il est combiné par un ET logique avec l'index servant à l'accès à la table de couleurs DAC.

·	Le contenu des registres BH, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Int 10h, Fct 10h, Sous-Fct 19h    Lire le contenu du registre de masque DAC    VGA

Lit le contenu actuel du registre de masque DAC.

Entrée :

AH	= 10h

AL	= 19h

Sortie :

BL	= Contenu du registre de masque DAC

Remarques :

·	Le contenu du registre de masque DAC intervient dans la sélection de couleur car il est combiné par un ET logique avec l'index servant à l'accès à la table de couleurs DAC.

·	Le contenu des registres BH, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Interrupt 10h, Fct 10h, Sous-Fct 1Ah    Lire la méthode de sélection de couleur     et le contenu du registre de sélection de co
Interrupt 10h, Fct 10h, Sous-Fct 1Ah    Lire la méthode de sélection de couleur     et le contenu du registre de sélection de couleur    VGA

Cette fonction fournit d'une part le contenu du bit 7 du registre de contrôle de mode, et donc la méthode de sélection de couleur, ainsi que le contenu du registre de sélection de couleur, qui détermine le groupe de registres de couleur DAC activé.

Entrée :

AH	= 10h

AL	= 1Ah

Sortie :

BL	= Bit 7 du registre de contrôle de mode

BH	= Contenu du registre de sélection de couleur

Remarques :

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Int 10h, Fct 10h, Sous-Fct 1Bh    Convertir le contenu des registres de couleur DAC en nuances de gris    VGA

Cette fonction convertit une section déterminée de la table de couleurs DAC en nuances de gris correspondantes.

Entrée :

AH	= 10h

AL	= 1Bh

BX	= Numéro du premier registre de couleur DAC à convertir

CX	= Nombre de registres de couleur DAC à traiter

Sortie :

Aucune

Remarques :

·	La conversion en une nuance de gris s'effectue par une pondération différenciée des parts de rouge, de vert et de bleu, qui reflète les différences d'intensité entre ces couleurs fondamentales sur l'écran. Le coefficient appliqué au rouge est 0,3, celui appliqué au vert 0,59, et celui appliqué au bleu 0,11.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Int 10h, Fct 11h, Sous-Fct 00h    Ecran : Charger le jeu de caractères défini par l'utilisateur    BIOS EGA/VGA

Cette fonction charge un jeu de caractères défini par l'utilisateur de la mémoire RAM dans l'une des deux tables de caractères EGA/VGA.

Entrée :

AH	= 11h

AL	= 00h

BH	= lignes par caractère (et donc octets par caractère)

BL	= table de caractères appelée (0 ou 1)

CX	= nombre de caractères dans la table

DX	= code ASCII du premier caractère dans la table

ES	= adresse de segment de la table de caractères dans la RAM

BP	= adresse d'offset de la table de caractères dans la RAM

Sortie :

aucune

Remarques :

·	512 caractères peuvent être chargés au maximum par table de caractères.

·	Le jeu de caractères chargé n'est pas activé et les registres du CRTC ne sont pas non plus programmés de façon à adapter l'affichage des caractères sur l'écran à la taille des caractères. Les modifications ne sont donc perceptibles sur l'écran que si la table de caractères dans laquelle sont chargées les définitions de caractères est la table actuellement activée.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 11h, Sous-Fct 01h    Ecran : Charger le jeu de caractères 8*14    BIOS EGA/VGA

Cette fonction charge le jeu de caractères 8*14 points tout entier du BIOS en ROM dans l'une des deux tables de caractères.

Entrée :

AH	= 11h

AL	= 01h

BL	= table de caractères appelée (0 ou 1)

Sortie :

aucune

Remarques :

·	Le jeu de caractères chargé n'est pas activé et les registres du CRTC ne sont pas non plus programmés de façon à adapter l'affichage des caractères sur l'écran à la taille des caractères. Les modifications ne sont donc perceptibles sur l'écran que si la table de caractères dans laquelle sont chargées les définitions de caractères est la table actuellement activée. La carte EGA affiche dans ce cas 25 lignes sur l'écran, la carte VGA 28.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 11h, Sous-Fct 02h    Ecran : Charger le jeu de caractères 8*8    BIOS EGA/VGA

Cette fonction charge le jeu de caractères 8*8 points tout entier du BIOS en ROM dans l'une des deux tables de caractères.

Entrée :

AH	= 11h

AL	= 02h

BL	= table de caractères appelée (0 ou 1)

Sortie :

aucune

Remarques :

·	Le jeu de caractères chargé n'est pas activé et les registres du CRTC ne sont pas non plus programmés de façon à adapter l'affichage des caractères sur l'écran à la taille des caractères. Les modifications ne sont donc perceptibles sur l'écran que si la table de caractères dans laquelle sont chargées les définitions de caractères est la table actuellement activée. La carte EGA affiche dans ce cas 43 lignes sur l'écran, la carte VGA 50.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 11h, Sous-Fct 03h    Ecran : Sélectionner un jeu de caractères    BIOS EGA/VGA

Active un (ou deux) des quatre jeux de 256 caractères.

Entrée :

AH	= 11h

AL	= 03h

BL	= numéro du jeu de caractères à activer

Sortie :

aucune

Remarques :

·	Les bits 0 et 1 du registre BL spécifient le numéro du jeu de caractères auquel il faut accéder lorsque le bit 3 de l'octet d'attribut vaut 0.

·	Les bits 2 et 3 du registre BL spécifient le numéro du jeu de caractères auquel il faut accéder lorsque le bit 3 de l'octet d'attribut vaut 1.

·	Si le contenu des bits 0 et 1 ainsi que celui des bits 2 et 3 du registre BL est identique, le bit 3 de l'octet d'attribut d'un caractère est sans effet sur le code ASCII du caractère affiché. Seuls 256 caractères différents peuvent donc être affichés sur l'écran.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 11h, Sous-Fct 04h    Charger le jeu de caractères 8*16    VGA

Cette fonction charge le jeu de caractères 8*16 points complet du BIOS en ROM de la carte VGA dans l'une des deux tables de caractères.

Entrée :

AH	= 11h

AL	= 04h

BL	= table de caractères appelée (0-7)

Sortie :

Aucune

Remarques :

·	Le jeu de caractères chargé n'est pas activé et les registres du CRTC ne sont pas non plus programmés de façon à adapter l'affichage des caractères sur l'écran à la taille des caractères. Les modifications ne sont donc perceptibles sur l'écran que si la table de caractères dans laquelle sont chargées les définitions de caractères est la table actuellement activée. La carte VGA affiche dans ce cas 25 lignes sur l'écran.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 11h, Sous-Fct 10h    Ecran : Charger et activer un jeu de caractères défini par l'utilisateur        BIOS EGA/VGA

Cette fonction charge un jeu de caractères défini par l'utilisateur dans l'une des deux tables de caractères EGA/VGA et l'active en programmant les registres du CRTC.

Entrée :

AH	= 11h

AL	= 10h

BH	= lignes par caractère (et donc octets par caractère)

BL	= table de caractères appelée (0 ou 1)

CX	= nombre de caractères dans la table

DX	= code ASCII du premier caractère dans la table

ES	= adresse de segment de la table de caractères dans la RAM

BP	= adresse d'offset de la table de caractères dans la RAM

Sortie :

aucune

Remarques :

·	256 caractères peuvent être chargés au maximum par table de caractères.

·	Le nombre de lignes de texte affichées sur l'écran dépend de la hauteur des caractères. Il est égal au nombre de lignes de l'écran (350 ou 480) divisé par la hauteur de caractère.

·	Les lignes de début et de fin du curseur clignotant de l'écran sont automatiquement adaptées à la hauteur de la nouvelle matrice de caractère.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 11h, Sous-Fct 11h    Ecran : Charger et activer le jeu de caractères 8*14    BIOS EGA/VGA

Cette fonction charge le jeu de caractères 8*14 points tout entier du BIOS en ROM de la carte EGA/VGA dans l'une des deux tables de caractères et l'active en programmant les registres du CRTC.

Entrée :

AH	= 11h

AL	= 11h

BL	= table de caractères appelée (0 ou 1)

Sortie :

aucune

Remarques :

·	Le fait d'appeler cette fonction fait automatiquement passer l'écran en affichage de 25 lignes pour la carte EGA et de 28 lignes pour la carte VGA.

·	Les lignes de début et de fin du curseur clignotant de l'écran sont automatiquement adaptées à la hauteur de la nouvelle matrice de caractère.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 11h, Sous-Fct 12h    Ecran : Charger le jeu de caractères 8*8    BIOS EGA/VGA

Cette fonction charge le jeu de caractères 8*8 points tout entier du BIOS en ROM de la carte EGA/VGA dans l'une des deux tables de caractères et l'active en programmant les registres du CRTC.

Entrée :

AH	= 11h

AL	= 12h

BL	= table de caractères appelée (0 ou 1)

Sortie :

Aucune

Remarques :

·	Après appel de cette fonction, la carte EGA affiche 43 lignes sur l'écran, et la carte VGA 50 lignes.

·	Les lignes de départ et de fin du curseur clignotant de l'écran sont automatiquement adaptées à la hauteur de la nouvelle matrice de caractère.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 11h, Sous-Fct 14h    Charger jeu de caractères 8*16    VGA
Int 10h, Fct 11h, Sous-Fct 14h    Charger le jeu de caractères 8*16    VGA

Cette fonction charge le jeu de caractères 8*16 points complet du BIOS en ROM de la carte VGA dans l'une des deux tables de caractères et l'active en programmant les registres CRTC.

Entrée :

AH	= 11h

AL	= 14h

BL	= table de caractères appelée (0 ou 1)

Sortie :

Aucune

Remarques :

·	Après appel de cette fonction, la carte VGA affiche 25 lignes de texte sur l'écran.

·	Les lignes de départ et de fin du curseur clignotant de l'écran sont automatiquement adaptées à la hauteur de la nouvelle matrice de caractère.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 11h, Sous-Fct 30h    Ecran : Lire des informations sur le générateur de caractères    BIOS EGA/VGA

Cette fonction permet d'obtenir différentes informations sur l'état actuel du générateur de caractères.

Entrée :

AH	= 11h

AL	= 30h

BH	= Type d'informations recherchées

0 = Contenu du vecteur d'interruption 1Fh

1 = Contenu du vecteur d'interruption 43h

2 = Adresse de la table de caractères 8*14 en ROM

3 = Adresse de la table de caractères 8*8 en ROM

4 = Adresse de la seconde moitié de la table de caractères 8*8

5 = Adresse de la table de caractères 9*14 alternative en ROM

6 = Adresse de la table de caractères 8*16 alternative en ROM

7 = Adresse de la table de caractères 9*16 alternative en ROM

Sortie :

CX	= Hauteur de la matrice de caractère actuelle

DL	= Nombre de colonnes par ligne - 1

ES	= Adresse de segment du pointeur testé

BP	= Adresse de segment du pointeur testé

Remarques :

·	Le contenu des registres BX, DH, SI, DI ainsi que celui des registres de segment CS, DS et SS n'est pas modifié par cette fonction.


Int 10h, Fct 12h, Sous-Fct 10h    Ecran : Lire la configuration EGA/VGA    BIOS EGA/VGA

Cette fonction sert à déterminer la configuration de la carte EGA/VGA.

Entrée :

AH	= 12h

BL	= 10h

Sortie :

BH	= moniteur connecté

0 = moniteur couleur ou haute résolution

1 = moniteur monochrome

BL	= taille de la RAM EGA

0 = 64 Ko

1 = 128 Ko

2 = 192 Ko

3 = 256 Ko

CL	= moniteur connecté

Remarques :

·	Le contenu des registres DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 12h, Sous-Fct 20h    Ecran : Définir une autre routine de copie d'écran    BIOS EGA

Comme la routine de copie d'écran normale du BIOS en ROM sort systématiquement une copie d'écran sur 25 lignes, elle ne convient pas pour une copie d'écran sous les modes EGA/VGA affichant plus de 25 lignes sur l'écran. C'est pourquoi en appelant cette fonction on peut faire installer une routine de copie d'écran de remplacement qui sortira sur l'imprimante autant de lignes qu'il y en a effectivement d'affichées sur l'écran.

Entrée :

AH	= 12h

BL	= 20h

Sortie :

aucune

Remarques :

·	Le contenu des registres BH, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 12h, Sous-Fct 30h    Définir le nombre de lignes de balayage    EGA/VGA

Sélectionne le nombre de lignes apparaissant sur l'écran (à ne pas confondre avec les lignes de texte).

Entrée :

AH	=	12h

BL	=	30h

AL	=	0 : 200 lignes de balayage (EGA et VGA)

1 : 350 lignes de balayage (EGA et VGA)

2 : 400 lignes de balayage (possible uniquement avec VGA)

Sortie :

Aucune

Remarques :

·	Le nombre de lignes sélectionné ne peut être affiché sur l'écran que si un moniteur suffisamment puissant est relié à la carte vidéo. C'est ainsi qu'un moniteur CGA ne permettra jamais d'afficher plus de 200 lignes sur l'écran, même si l'électronique vidéo autorise une résolution plus élevée.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Int 10h, Fct 12h, Sous-Fct 31h    Activer ou désactiver le chargement des registres de palette    VGA

Cette fonction permet à un programme d'indiquer au BIOS VGA si les valeurs défaut doivent automatiquement être chargées dans les registres de palette lorsqu'un changement de mode vidéo est opéré à l'aide de la fonction 00h.

Entrée :

AH	=	12h

BL	=	31h

AL	=	Chargement automatique des registres de palette

0 : Oui

1 : Non

Sortie :

Aucune

Remarques :

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Int 10h, Fct 12h, Sous-Fct 32h    Autoriser/verrouiller l'accès de l'unité centrale à la RAM vidéo    VGA

Cette fonction permet d'autoriser ou de verrouiller l'accès de l'unité centrale à la RAM vidéo et aux différents ports d'entrée/sortie d'une carte VGA.

Entrée :

AH	= 	12h

BL	= 	32h

AL	= 	0 : Accès autorisé

1 : Accès interdit

Sortie :

Aucune

Remarques :

·	Le BIOS EGA ne disposant pas de cette fonction, l'accès direct de l'unité centrale à la carte vidéo peut néanmoins être interdit en manipulant directement le bit 1 du registre de sortie (adresse de port 3C2h).

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Int 10h, Fct 12h, Sous-Fct 33h    Activer/désactiver la conversion en gris des registres de couleur DAC    VGA

Alors que la sous-fonction 1Bh de la fonction 10h entraîne une conversion sélective du contenu des registres de couleur DAC en nuances de gris, cette fonction provoque une conversion systématique, lors de tous les accès à ces registres à travers le BIOS VGA.

Entrée :

AH	=	12h

BL	=	33h

AL	=	Conversion en gris des registres de couleur DAC

0 : oui

1 : non

Sortie :

Aucune

Remarques :

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Int 10h, Fct 12h, Sous-Fct 34h    Activer/désactiver l'émulation du curseur    VGA

Pour que le programme appelant la fonction 01h (définition des lignes de départ et de fin du curseur de l'écran) n'ait pas à tenir compte des différentes résolutions de la matrice de caractère dans les différents modes, il peut se référer systématiquement à une matrice de caractère 8*8 et laisser au BIOS VGA le soin d'effectuer la conversion vers la taille de la matrice de caractère actuelle. Ce n'est cependant possible qu'en mode dit d'émulation du curseur, que cette fonction permet d'activer ou de désactiver.

Entrée :

AH	= 	12h

BL	= 	34h

AL	= 	Mode d'émulation du curseur ...

0 : oui

1 : non

Sortie :

Aucune

Remarques :

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Int 10h, Fct 12h, Sous-Fct 36h    Interdire la construction de l'écran    VGA

Cette fonction permet à un programme d'interdire temporairement la construction de l'écran, pour effectuer des manipulations d'envergure à l'intérieur de la RAM vidéo.

Entrée :

AH	= 	12h

BL	= 	36h

AL	= 	Construction de l'écran ...

0 : oui

1 : non

Sortie :

Aucune

Remarques :

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Int 10h, Fct 13h    Moniteur : Sortie d'une chaîne de caractères    BIOS EGA/VGA

Une chaîne de caractères est sortie sur le moniteur, dans une page déterminée du moniteur, à partir de la position du moniteur spécifiée. Les caractères sont pour cela tirés d'un buffer dont l'adresse doit être communiquée à la fonction.

Entrée :

AH	= 13h

AL	= Mode de sortie (0 à 3)

0 = attribut dans BL, conserver la position du curseur

1 = attribut dans BL, actualiser la position du curseur

2 = attribut dans le buffer, conserver la position du curseur

3 = attribut dans le buffer, actualiser la position du curseur

BL	= octet d'attribut des caractères (seulement modes 0 et 1)

CX	= nombre de caractères à sortir

DH	= ligne du moniteur

DL	= colonne du moniteur

BH	= page du moniteur

ES	= adresse de segment du buffer

BP	= adresse d'offset du buffer

Sortie :

pas de sortie

Remarques :

·	Sous les modes 1 et 3, la position du curseur est fixée, après sortie de la chaîne de caractères, à la suite du dernier caractère de la chaîne, de sorte que lors d'appels ultérieurs de fonctions BIOS de sortie de caractères, les caractères seront sortis à la suite de la chaîne de caractères. La position du curseur n'est pas changée sous les modes 0 et 2.

·	Sous les modes 0 et 1, le buffer ne contient que les codes ASCII des caractères à sortir. La couleur de tous les caractères de la chaîne de caractères est dans ce cas définie par le registre BL. Sous les modes 2 et 3 par contre, chaque caractère est suivi dans le buffer de l'octet d'attribut correspondant, de sorte que chaque caractère dispose d'un attribut particulier. Sous ces modes, il n'est pas nécessaire de définir la valeur du registre BL. Bien que la chaîne de caractères ait, sous ces modes, une taille double du nombre de caractères à sortir, ce n'est pas la longueur de la chaîne de caractères mais bien le nombre de caractères ASCII à sortir qui doit être spécifié dans le registre CX.

·	Les codes de contrôle spéciaux comme "bell" et "carriage return" sont interprétés effectivement comme des codes de contrôle et non comme des codes ASCII. Si cependant Carriage Return et Line Feed sont sortis de la page 0 du moniteur, une erreur en résulte car ces codes sont systématiquement sortis dans la page 0, quelle que soit la page de moniteur spécifiée.

·	Si la dernière position de l'écran est atteinte, l'écran est décalé d'une ligne vers le haut et la sortie se poursuit dans la première colonne de la dernière ligne de l'écran.

·	Pour une sortie en mode graphique, l'attribut dans le registre BL indique la couleur de premier plan du caractère. (La couleur de fond des caractères est toujours 0.). Si le bit 7 du registre AL est mis, le code couleur sera combiné par un XOR avec le code couleur antérieur des points graphiques.

·	Cette fonction permet aussi de sortir des caractères en mode graphique, les motifs des caractères étant tirés de l'une des tables de caractères EGA.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 14h    Non documentée    BIOS EGA/VGA

La signification de cette fonction n'est pas connue. Elle ne doit donc pas être appelée par un programme utilisateur.


Int 10h, Fct 15h    Non documentée    BIOS EGA/VGA

La signification de cette fonction n'est pas connue. Elle ne doit donc pas être appelée par un programme utilisateur.


Int 10h, Fct 16h    Non documentée    BIOS EGA/VGA

La signification de cette fonction n'est pas connue. Elle ne doit donc pas être appelée par un programme utilisateur.


Int 10h, Fct 17h    Non documentée    BIOS EGA/VGA

La signification de cette fonction n'est pas connue. Elle ne doit donc pas être appelée par un programme utilisateur.


Int 10h, Fct 18h    Non documentée    BIOS EGA/VGA

La signification de cette fonction n'est pas connue. Elle ne doit donc pas être appelée par un programme utilisateur.


Int 10h, Fct 19h    Non documentée    BIOS EGA/VGA

La signification de cette fonction n'est pas connue. Elle ne doit donc pas être appelée par un programme utilisateur.


Int 10h, Fct 1Ah, Sous-Fct 00h    Lire le type d’adaptateur vidéo primaire et secondaire    VGA
Int 10h, Fct 1Ah, Sous-Fct 00h    Lire le type d'adaptateur vidéo primaire et secondaire    VGA

Entrée :

AH	= 1Ah

AL	= 00h

Sortie :

AL	= 1Ah

BL	= Code de périphérique de la carte vidéo active

BH	= Code de périphérique de la carte vidéo non passive

Remarques :

·	Si la valeur 1Ah n'est pas renvoyée dans le registre AL, c'est qu'aucun BIOS VGA et donc aucune carte VGA n'est installée.

Les codes de périphérique suivants sont renvoyés :

FFh	=	Carte vidéo inconnue

00h	=	Pas de carte vidéo

01h	=	MDA avec écran monochrome

02h	=	CGA avec moniteur CGA

03h	=	Réservé

04h	=	EGA avec moniteur EGA ou Multisync

05h	=	EGA avec moniteur monochrome

06h	=	Réservé

07h	=	VGA avec écran monochrome analogique

08h	=	VGA avec écran couleur analogique (VGA, Multisync)

09h	=	Réservé

0Ah	=	Carte MCGA avec moniteur CGA (PS/2 uniquement)

0Bh	=	MCGA avec écran monochrome analogique (PS/2 uniquement)

0Ch	=	MCGA avec écran couleur analogique (PS/2 uniquement)

·	Il suffit qu'une seule carte vidéo soit présente dans le registre BH pour que la valeur 00h soit retournée.

·	Le contenu des registres CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Int 10h, Fct 1Ah, Sous-Fct 01h    Définir les cartes vidéo primaire et secondaire    VGA

A l'intérieur d'un système équipé de deux cartes vidéo, cette fonction permet d'activer l'une des deux cartes et de désactiver l'autre.

Entrée :

AH 	= 1Ah

AL 	= 1

BL 	= Code de périphérique de la carte vidéo active

BH 	= Code de périphérique de la carte vidéo passive

Sortie :

AL 	= 1Ah

Remarques :

·	Si la valeur 1Ah n'est pas retournée dans le registre AL, cela signifie que ni un BIOS VGA ni une carte VGA n'est installé.

·	La liste des codes de périphérique est fournie dans le cadre de la description de la sous-fonction 00h.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 1Bh    Lire les informations d'état concernant le mode vidéo et le BIOS VGA        VGA

Cette fonction permet de lire toutes les caractéristiques du mode vidéo en cours ainsi que les informations concernant les techniques fondamentales du BIOS VGA.

Entrée :

 	AH 	= 1Bh

BX 	= 0

ES:DI 	= Pointeur sur un buffer

Sortie :

 	AL 	= 1Bh

Remarques :

·	Si la valeur 1Bh n'est pas retournée dans le registre AL, cela signifie que ni un BIOS VGA ni une carte VGA n'est installé.

·	Le buffer transmis par l'appel de cette fonction doit contenir au moins 64 Ko parce que le BIOS VGA y place une table comme celle présentée plus bas. Cette table contient toutes les informations décrivant le mode vidéo en cours.

Un pointeur se trouve au début de cette table. Il conduit vers une autre table située dans la ROM BIOS et pour laquelle le programme d'appel ne doit allouer aucune place mémoire. Elle reproduit les techniques du BIOS VGA qui sont indépendantes de la définition actuelle des différents paramètres (mode vidéo, registre de palettes, etc.).

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.

Structure du bloc de données avec les informations d'état du BIOS VGA compte tenu du mode

Offset	Contenu	Type

00h	Adresse de la table contenant les informations statiques	1 PTR

04h	Numéro de code du mode vidéo en cours	1 BYTE

05h	Nombre de colonnes de l'écran ou de points affichées	1 WORD

07h	Longueur d'une page écran à l'intérieur de la RAM vidéo	1 WORD

09h	Adresse de début de la page écran en cours dans la RAM vidéo	1 WORD

0Bh	Positions du curseur dans les huit pages écran maximales où la spécification de la colonne prévaut toujours par rapport à celle de la ligne	16 BYTE

1Bh	Ligne de fin du curseur (ligne de points)	1 BYTE

1Ch	Ligne de début du curseur (ligne de points)	1 BYTE

1Dh	Numéro de la page écran en cours	1 BYTE

1Eh	Adresse du port du registre d'adresse du contrôleur CRT	1 WORD

20h	Contenu actuel du registre CRTC dans l'adresse du port 3B8h (émulation DMA) ou 3D8h (VGA)	1 BYTE

21h	Contenu actuel du registre de sélection de couleurs dans l'adresse du port 3D9h 	1 BYTE

22h	Nombre de lignes écran affichées	1 BYTE

23h	Hauteur des caractères en lignes de points	1 WORD

25h	Numéro de code de l'adaptateur vidéo en cours	1 BYTE

26h	Numéro de code de l'adaptateur vidéo inactif	1 BYTE

27h	Nombre de couleurs à afficher (0 = monochrome)	1 WORD

29h	Nombre de pages écran	1 BYTE

2Ah	Nombre de lignes de points affichées	1 BYTE

2Bh	Numéro de la table de caractères utilisée et dont le bit 3 vaut 0 dans l'octet d'attribut	1 BYTE

2Ch	Numéro de la table de caractères utilisée et dont le bit 3 vaut 1 dans l'octet d'attribut	1 BYTE

2Dh	Informations diverses #1 (voir plus bas)	1 BYTE

2Eh	Réservé	3 BYTE

31h	Taille de la RAM vidéo disponible	1 BYTE

32h	Réservé	14 BYTE

64 octets

Structure du bloc de données avec les informations d'état du BIOS VGA compte tenu du mode (informations statiques)

Offset	Contenu	Type

00h	Modes vidéo reconnus (voir plus bas)	3 BYTE

03h	Réservé	4 BYTE

07h	Nombre des lignes de points dans les modes texte (voir plus bas)	1 BYTE

08h	Nombre maximal des jeux de caractères affichables	1 BYTE

09h	Nombre des tables de jeux de caractères à charger dans la RAM vidéo	1 BYTE

0Ah	Informations d'état sur les capacités du BIOS VGA (voir plus bas)	1 BYTE

0Bh	Autres informations d'état sur les capacités du BIOS VGA (voir plus bas)	1 BYTE

0Ch	Réservé	2 BYTE

0Eh	Réservé	2 BYTE

16 octets


Int 10h, Fct 1Ch, Sous-Fct 00h    Demander la taille de la zone de sauvegarde    VGA

Les trois sous-fonctions de la fonction 1Ch permettent de sauvegarder l'état en cours de l'équipement vidéo et du BIOS VGA dans un buffer du programme. A cet effet, le programme d'appel doit d'abord demander la taille du buffer nécessaire à l'aide de cette sous-fonction.

Entrée :

AH 	= 1Ch

AL 	= 0

CX 	= Composantes à sauvegarder (voir plus bas)

Sortie :

AL 	= 1Ch

BX 	= Taille de buffer en unités de 64 octets

Remarques :

·	Si la valeur 1Ch n'est pas retournée dans le registre AL, cela signifie que ni un BIOS VGA ni une carte VGA n'est installé.

·	Lors de l'appel de la fonction, les trois bits inférieurs indiquent les composantes de l'équipement vidéo et le BIOS VGA à sauvegarder dans le registre CX. Le bit approprié est à régler sur 1 si les éléments correspondants doivent être sauvegardés.

Bit 0 	= Equipement vidéo

Bit 1 	= Zone de données du BIOS VGA

Bit 3 	= Contenu du registre DAC

·	Notez que "l'équipement vidéo" n'inclut pas également le contenu de la RAM vidéo. La sauvegarde de ce dernier est à la charge du programme utilisateur.

·	Le contenu des registres CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 1Ch, Sous-Fct 01h    Sauvegarder l'état vidéo    VGA

Après avoir demandé le buffer nécessaire à l'aide de la sous-fonction 00h, vous pouvez sauvegarder l'état du matériel vidéo et/ou du BIOS VGA que vous souhaitez avec cette fonction.

Entrée :

AH 	= 1Ch

AL 	= 1

CX 	= Composantes à sauvegarder

ES:BX = Pointeur sur le buffer devant stocker les informations

Sortie :

AL 	= 1Ch

Remarques :

·	Si la valeur 1Ch n'est pas retournée dans le registre AL, cela signifie que ni un BIOS VGA ni une carte VGA n'est installé.

·	Avant d'appeler cette fonction, il faut d'abord obtenir la taille du buffer nécessaire à l'aide de la sous-fonction 00h. Notez que le contenu du registre CX ne varie pas entre les deux appels sinon le buffer transmis risque d'être trop petit.

·	Lors de l'appel de la fonction, les trois bits inférieurs indiquent les composantes de l'équipement vidéo et le BIOS VGA à sauvegarder dans le registre CX. Le bit approprié est à régler sur 1 si les éléments correspondants doivent être sauvegardés.

Bit 0 	= Equipement vidéo

Bit 1 	= Zone de données du BIOS VGA

Bit 3 	= Contenu du registre DAC

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 1Ch, Sous-Fct 02h    Restaurer l'état vidéo    VGA

Suite à un appel préalable de la sous-fonction 01h, cette fonction peut restaurer l'état sauvegardé du matériel vidéo et/ou du BIOS VGA.

Entrée :

AH 	= 1Ch

AL 	= 2

CX 	= Composantes à restaurer

ES:BX	= Pointeur sur le buffer dans lequel les informations ont été sauvegardées

Sortie :

AL 	= 1Ch

Remarques :

·	Si la valeur 1Ch n'est pas retournée dans le registre AL, cela signifie que ni un BIOS VGA ni une carte VGA n'est installé.

·	L'appel de cette fonction n'a un sens que s'il s'effectue après un appel de la sous-fonction 01h. Le nombre de composantes restaurées dépend naturellement du nombre qui a été préalablement sauvegardé. Avant d'appeler cette fonction, pensez donc à vérifier le contenu du registre CX.

·	Lors de l'appel de la fonction, les trois bits inférieurs indiquent les composantes de l'équipement vidéo et le BIOS VGA à sauvegarder dans le registre CX. Le bit approprié est à régler sur 1 si les éléments correspondants doivent être sauvegardés.

Bit 0 	= Equipement vidéo

Bit 1 	= Zone de données du BIOS VGA

Bit 3 	= Contenu du registre DAC

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Fonctions VESA

L'interface VESA fournit des fonctions standardisées pour l'accès aux cartes Super VGA en libérant un programme des spécificités physiques des diverses cartes. Les six fonctions du standard VESA sont appelées comme des sous-fonctions de la fonction 4Fh, ces dernières étant intégrées par le driver VESA (ou le BIOS VGA étendu au VESA) dans l'interruption vidéo BIOS 10h.

Les modes graphiques suivants sont actuellement reconnus par les diverses fonctions VESA.

Les modes graphiques du BIOS VESA

Code	Résolution	Couleurs	Mémoire

100h	640*400	256	256 Ko

101h	640*480	256	512 Ko

102h	800*600	16/256 Ko

103h	800*600	256	512 Ko

104h	1024*768	16/512 Ko

105h	1024*768	256	1 Mo

106h	1280*1024	256	1,25 Mo

6Ah	800*600	16/256 Ko

Fonction 4Fh

Sous-fonction 00h	Lire les spécificités de la carte Super VGA

Sous-fonction 01h	Lire les données-clés d'un mode VESA

Sous-fonction 02h	Activer le mode VESA

Sous-fonction 03h	Lire le mode en cours

Sous-fonction 04h/00h	Lire la taille du buffer de stockage

Sous-fonction 04h/01h	Sauver l'état vidéo de la carte Super VGA

Sous-fonction 04h/02h	Restaurer l'état vidéo de la carte Super VGA

Sous-fonction 05h/00h	Placer la fenêtre d'accès sur la RAM vidéo

Sous-fonction 05h/01h	Lire la fenêtre d'accès sur la RAM vidéo


Int 10h, Fct 4Fh, Sous-Fct 00h    Lire les spécificités de la carte Super VGA    VESA

Cette fonction permet de prendre connaissance des techniques offertes par la carte Super VGA installée et déterminer si les fonctions VESA sont soutenues.

Entrée :

AH 	= 4Fh

AL 	= 00h

ES:DI : Pointeur FAR sur le buffer Info

Sortie :

AL 	= 4Fh et

AH 	= 00h : Fonctions VESA soutenues

Remarques :

·	Le buffer Info dont l'adresse est à transmettre à la fonction doit disposer de 256 octets. Si la fonction s'exécute correctement, vous obtenez les informations suivantes :

Structure du buffer Info

Offset	Contenu	Type

00h	Signature VESA ("VESA")	4 BYTE

04h	Version VESA, Numéro de version principal	1 BYTE

05h	Version VESA, Numéro de version secondaire	1 BYTE

06h	Pointeur FAR sur chaîne ASCIIZ contenant le nom du fabricant de cartes	1 DWORD

0Ah	Flag indiquant les performances de la carte. Actuellement inutilisé, donc 0000h.

0Eh	Pointeur FAR sur liste contenant les numéros de code des modes vidéo reconnus	1 DWORD

La liste des numéros de codes des modes vidéo reconnus, transmise dans le dernier champ du buffer, se compose de divers Words indiquant chacun le code d'un mode vidéo d'après le tableau ci-dessus. Cette liste se termine par un Word de valeur 0FFFFh. Sa longueur varie d'une carte à l'autre.


Int 10h, Fct 4Fh, Sous-Fct 01h    Lire les données-clés d'un mode VESA    VESA

Cette fonction donne des informations sur un mode VESA sans pour autant l'activer.

Entrée :

AH 	= 4Fh

AL 	= 01h

CX 	= Numéro de code du mode VESA souhaité

ES:DI	= Pointeur FAR sur buffer Info

Sortie :

AL 	= 4Fh et

AH 	= 00h : Fonction non exécutée correctement

Remarques :

·	Cette fonction ne doit être appelée que si la sous-fonction 00h s'est exécutée correctement et ainsi l'existence d'un driver VESA a pu être signalée. En outre, seuls les modes inclus dans la liste de la fonction 00h peuvent être réclamés.

·	Le buffer Info dont l'adresse est à transmettre à la fonction doit disposer de 29 octets. Si la fonction s'exécute correctement, vous obtenez les informations suivantes :

Structure du buffer Info

Offset	Contenu	Type

00h	Flag de mode, voir plus loin	1 WORD

02h	Flags pour la première fenêtre d'accès, voir plus loin	1 BYTE

03h	Flags pour la seconde fenêtre d'accès, voir plus loin	1 BYTE

04h	Granularité en Ko à utiliser pour déplacer les deux fenêtres	1 WORD

06h	Taille des deux fenêtres d'accès en Ko	1 WORD

08h	Adresse de segment de la première fenêtre d'accès	1 WORD

0Ah	Adresse de segment de la seconde fenêtre d'accès	1 WORD

0Ch	Pointeur FAR sur routine de définition de la zone visible dans les deux fenêtres d'accès	1 DWORD

10h	Nombre d'octets occupant chacun une ligne de points dans la RAM vidéo	1 WORD

Informations en option

12h	Résolution X en points/caractères	1 WORD

14h	Résolution Y en points/caractères	1 WORD

16h	Largeur de la matrice de caractères en points	1 BYTE

17h	Hauteur de la matrice de caractères en points	1 BTYE

18h	Nombre des plans de bits	1 BYTE

19h	Nombre de bits par point écran	1 BYTE

1Ah	Nombre de blocs mémoire	1 BYTE

1Bh	Modèle de mémoire	1 BYTE

1Ch	Taille des blocs de mémoire en Ko	1 BYTE

Le flag de mode (offset 00h) indique si les champs optionnels du buffer Info ont été complétés par la fonction VESA et retourne également des informations importantes concernant le mode souhaité.

Les deux fenêtres d'accès (Offset 02h et 03h) sont décrites à travers les champs de bits suivants :

Bit 0 = 0	fenêtre non disponible

Bit 0 = 1	fenêtre disponible

Bit 1 = 0	lecture de la RAM vidéo par cette fenêtre inactive

Bit 1 = 0	lecture de la RAM vidéo par cette fenêtre active

Bit 2 = 0	Ecriture en RAM-vidéo par cette fenêtre inactive

Bit 2 = 1	Ecriture en RAM-vidéo par cette fenêtre active

Bit 3 à 7	Réservés

Le modèle de mémoire (Offset 1Bh) reproduit la structure de la RAM vidéo dans le mode vidéo souhaité. Les codes suivants sont reconnus à cet effet :

Codes de description du modèle de mémoire

Nº	Fonction

00h	Mode texte

01h	Format CGA, soit 2 ou 4 blocs de mémoire

02h	Format Hercules avec 4 blocs de mémoire

03h	Format normal EGA/VGA pour mode graphique 16 couleurs

04h	Format compacté avec deux points à 4 bits par octet

05h	Format normal EGA/VGA pour mode graphique 256 couleurs

06h-0Fh	Réservé

10h-FFh	Code spécifique au constructeur,	actuellement inutilisé


Int 10h, Fct 4Fh, Sous-Fct 02h    Activer le mode VESA    VESA

Cette fonction sert à activer un mode VESA.

Entrée :

AH 	= 4Fh

AL 	= 02h

BX 	= Numéro de code du mode souhaité

Sortie :

AL 	= 4Fh et

AH 	= 00h : Fonction exécutée correctement

Remarques :

·	Cette fonction ne doit être appelée que si la sous-fonction 00h s'est exécutée correctement et ainsi l'existence d'un driver VESA a pu être signalée. En outre, seuls les modes inclus dans la liste de la fonction 00h peuvent être initialisés.

·	Le bit 15 peut être mis dans le registre BX contenant le numéro de code du mode vidéo si la RAM vidéo ne doit pas être effacée pendant l'initialisation du mode vidéo.


Int 10h, Fct 4Fh, Sous-Fct 03h    Lire le mode en cours    VESA

Cette fonction retourne le numéro de code du mode vidéo en cours et tient compte des modes non VESA.

Entrée :

AH 	= 4Fh

AL 	= 03h

Sortie :

AL 	= 4Fh et

AH 	= 00h : Fonction exécutée correctement, dans ce cas

BX	= Numéro de code du mode en cours

Remarques :

·	Cette fonction ne doit être appelée que si la sous-fonction 00h s'est exécutée correctement et ainsi l'existence d'un driver VESA a pu être signalée.


Int 10h, Fct 4Fh, Sous-Fct 04h/00h    Lire la taille du buffer de stockage    VESA

La taille du buffer de stockage nécessaire peut être obtenue à l'aide de cette fonction en vue d'un appel ultérieur de la sous-fonction 04h/01h.

Entrée :

AH 	= 4Fh

AL 	= 04h

DL 	= 00h

CX 	= Eléments de l'état vidéo à sauvegarder

Sortie :

AL 	= 4Fh et

AH 	= 00h : Fonction exécutée correctement, dans ce cas

BX 	= Nombre des 64 blocs d'octets associés nécessaires en guise de buffer de stockage

Remarques :

·	Cette fonction doit être appelée avant la sous-fonction 04h/01h. La taille du buffer nécessaire à la sous-fonction 04h/01h peut ainsi être obtenue.

·	Lors de l'appel de la fonction, les différents bits du registre CX indiquent les éléments de l'état vidéo à sauvegarder. Dans ce cas, seul l'octet faible du registre CX est occupé par les bits suivants :

Bit 0 = 1	Statut de l'électronique vidéo

Bit 1 = 1	Variables de la zone de données BIOS

Bit 2 = 1	Registre de la table de couleurs DAC

Bit 3 = 1	Statut SuperVGA

Bit 4 à 7	Non occupé (0)


Int 10h, Fct 4Fh, Sous-Fct 04h/01h    Sauver l'état vidéo de la carte Super VGA    VESA

Après un appel préalable de la sous-fonction 04h/00h, les informations souhaitées à propos des divers éléments de l'état vidéo sont stockées dans un buffer à l'aide de cette fonction.

Entrée :

AH 	= 4Fh

AL 	= 04h

DL 	= 01h

CX 	= Eléments de l'état vidéo à sauvegarder

ES:BX	= Pointeur FAR sur le buffer de stockage

Sortie :

AL	= 4Fh et

AH	= 00h : Fonction exécutée correctement

Remarques :

·	Le buffer transmis doit indiquer la taille obtenue lors de l'appel préalable de la sous-fonction 04h/00h à travers le registre BX.

·	Lors de l'appel de la fonction, les différents bits du registre CX indiquent les éléments de l'état vidéo à stocker. Dans ce cas, seul l'octet faible du registre CX est occupé par les bits suivants :

Bit 0 = 1	Statut de l'électronique vidéo

Bit 1 = 1	Variables de la zone de données BIOS

Bit 2 = 1	Registre de la table de couleurs DAC

Bit 3 = 1	Statut SuperVGA

Bit 4 à 7	Non occupé (0)


Int 10h, Fct 4Fh, Sous-Fct 04h/02h    Restaurer l'état vidéo de la carte Super VGA    VESA

Après avoir sauvegardé l'état vidéo avec la sous-fonction 04h/01h, vous pouvez le restaurer en appelant cette fonction.

Entrée :

AH 	= 4Fh

AL 	= 04h

DL 	= 01h

CX 	= Eléments de l'état vidéo à restaurer

ES:BX	= Pointeur FAR sur l'adresse de segment du buffer de stockage

Sortie :

AL 	= 4Fh et

AH 	= 00h : Fonction exécutée correctement

Remarques :

·	Le buffer transmis doit auparavant être chargé avec les informations sur l'état vidéo à travers un appel de la sous-fonction 04h/01h.

·	Lors de l'appel de la fonction, les différents bits du registre CX montrent les éléments de l'état vidéo à restaurer. Dans ce cas, seul l'octet faible du registre CX est occupé par les bits suivants :

Bit 0 = 1	Statut de l'électronique vidéo

Bit 1 = 1	Variables de la zone de données BIOS

Bit 2 = 1	Registre de la table de couleurs DAC

Bit 3 = 1	Statut SuperVGA

Bit 4 à 7	Non occupé (0)


Int 10h, Fct 4Fh, Sous-Fct 05h/00h    Placer la fenêtre d'accès sur la RAM vidéo    VESA

Cette fonction sert à insérer une portion précise de la RAM vidéo dans l'une des deux fenêtres d'accès VESA pour qu'un programme puisse l'adresser.

Entrée :

AH 	= 4Fh

AL 	= 05h

BH 	= 00h

BL 	= Fenêtre d'accès (0 ou 1)

DX 	= Adresse de départ

Sortie :

AL 	= 4Fh et

AH 	= 00h : Fonction exécutée correctement

Remarques :

·	Dans le registre DX, l'adresse de départ doit être considérée par rapport à la granularité de la fenêtre obtenue par l'appel de la sous-fonction 01h.

·	La seconde fenêtre d'accès ne doit être réclamée que si un appel préalable de la sous-fonction 00h confirme l'existence de deux fenêtres d'accès.


Int 10h, Fct 4Fh, Sous-Fct 05h/01h    Lire la fenêtre d'accès sur la RAM vidéo    VESA

Cette fonction permet de déterminer l'état de la fenêtre d'accès sur la RAM vidéo de la carte Super VGA.

Entrée :

AH 	= 4Fh

AL 	= 05h

BH 	= 01h

BL 	= Fenêtre d'accès (0 ou 1)

Sortie :

AL 	= 4Fh et

AH 	= 00h : Fonction exécutée correctement, dans ce cas

DX 	= Adresse de départ

Remarques :

L'adresse de départ située dans le registre DX doit être considérée par rapport à la granularité de la fenêtre obtenue par l'appel de la sous-fonction 01h.


Fonctions DOS

Interface de programmation d'application DOS (DOS API)

L'interruption 21h permet d'appeler plus de 100 fonctions que DOS met à la disposition d'un programme et c'est pourquoi on les appelle Interface de programmation d'application (DOS API).

Ces fonctions sont décrites dans cette section ainsi qu'une série d'autres fonctions dont la signification n'a jamais été officialisée par Microsoft. Elles sont donc désignées comme des fonctions non documentées. Les fonctions non documentées citées ici sont toutefois utilisées dans les milliers d'applications commercialisées actuellement. Ainsi, Microsoft ne peut pas se permettre de les éliminer de l'API du jour au lendemain dans le cadre d'une nouvelle version du DOS. Par conséquent, n'hésitez surtout pas à vous en servir toutes les fois que vous ne trouvez pas une fonction officielle répondant à vos besoins.

Interruption 21h

Interruption 22h	Interruption 23h

Interruption 24h	Interruption 25h

Interruption 26h	Interruption 27h


Interruption 21h

Fonction 00h	Fin de programme

Fonction 01h	Entrée de caractères avec sortie

Fonction 02h	Sortie d'un caractère

Fonction 03h	Réception d'un caractère de l'interface série

Fonction 04h	Sortie d'un caractère sur l'interface série

Fonction 05h	Sortie d'un caractère sur l'imprimante

Fonction 06h	Entrée/sortie directe de caractère

Fonction 07h	Entrée de caractères directe sans sortie

Fonction 08h	Entrée de caractères sans sortie

Fonction 09h	Sortie d'une chaîne de caractères

Fonction 0Ah	Entrée d'une chaîne de caractères

Fonction 0Bh	Lire état du périphérique d'entrée

Fonction 0Ch	Vider buffer d'entrée et appeler Fct d'entrée

Fonction 0Dh	Réinitialisation des drivers de bloc

Fonction 0Eh	Sélection du lecteur actuel

Fonction 0Fh	Ouvrir fichier

Fonction 10h	Fermer fichier

Fonction 11h	Rechercher première entrée du répertoire

Fonction 12h	Rechercher prochaine entrée du répertoire

Fonction 13h	Supprimer fichier(s)

Fonction 14h	Lecture séquentielle

Fonction 15h	Ecriture séquentielle

Fonction 16h	Créer ou vider un fichier

Fonction 17h	Renommer fichier(s)

Fonction 18h 	Interne

Fonction 19h	Lire le nom de périphérique du lecteur

Fonction 1Ah	Définir l'adresse de la DTA

Fonction 1Bh	Lire les informations sur le lecteur actuel

Fonction 1Ch	Lire les informations sur un lecteur quelconque

Fonction 1Dh	Interne

Fonction 1Eh	Interne

Fonction 1Fh	Lire le pointeur BPD pour le lecteur en cours

Fonction 20h	Interne

Fonction 21h	Lecture sélective

Fonction 22h	Ecriture sélective

Fonction 23h	Lire la taille du fichier

Fonction 24h	Définir le numéro d'enregistrement

Fonction 25h	Modifier le vecteur d'Interruption

Fonction 26h	Créer un nouveau PSP

Fonction 27h	Lecture sélective de plusieurs enregistrements

Fonction 28h	Ecriture sélective de plusieurs enregistrements

Fonction 29h	Inscrire un nom de fichier dans FCB

Fonction 2Ah	Lire la date

Fonction 2Bh	Modifier la date

Fonction 2Ch	Lire l'heure

Fonction 2Dh	Modifier l'heure

Fonction 2Eh	Définir le flag Verify

Fonction 2Fh	Lire adresse de la DTA

Fonction 30h	Lire le numéro de version du DOS

Fonction 31h	Terminer programme mais laisser en mémoire

Fonction 32h	Pointer sur le BPD d'un lecteur quelconque

Fonction 33h, Sous-Fct 0	Lire le flag Break

Fonction 33h, Sous-Fct 1	Définir le flag Break

Fonction 34h	Placer un pointeur sur le flag INDOS

Fonction 35h	Lire le contenu d'un vecteur d'Interruption

Fonction 36h	Lire l'espace disque disponible

Fonction 37h, Sous-Fct 00h	Lire le code pour ligne de commande

Fonction 37h, Sous-Fct 01h	Définir le caractère de commutateur de ligne de commande

Fonction 38h	Lire les symboles et formats caractéristiques du pays

Fonction 38h, Sous-Fct 0	Lire les symboles et formats caractéristiques d'un pays (DOS >3)

Fonction 38h, Sous-Fct 1	Définir le pays

Fonction 39h	Créer un sous-répertoire

Fonction 3Ah	Supprimer un sous-répertoire

Fonction 3Bh	Défnir le sous-répertoire en cours

Fonction 3Ch	Créer ou vider un fichier (Handle)

Fonction 3Dh	Ouvrir un fichier (Handle)

Fonction 3Eh	Fermer un fichier (Handle)

Fonction 3Fh	Lire un fichier (Handle)

Fonction 40h	Ecrire dans un fichier (Handle)

Fonction 41h	Supprimer un fichier (Handle)

Fonction 42h	Déplacer le pointeur de fichier (handle)

Fonction 43h, Sous-Fct 0	Lire l'attribut d'un fichier

Fonction 43h, Sous-Fct 1	Définir l'attribut d'un fichier

Fonction 44h, Sous-Fct 0	Lire l'attribut de périphérique

Fonction 44h, Sous-Fct 1	Définir l'attribut de périphérique

Fonction 44h, Sous-Fct 2	Recevoir des données d'un driver de caractères

Fonction 44h, Sous-Fct 3	Envoyer des données à un driver de caractères

Fonction 44h, Sous-Fct 4	Recevoir des données d'un driver de bloc

Fonction 44h, Sous-Fct 5	Transmettre des données à un driver de bloc

Fonction 44h, Sous-Fct 6	Tester l'état d'entrée

Fonction 44h, Sous-Fct 7	Tester l'état de sortie

Fonction 44h, Sous-Fct 8	Support amovible

Fonction 44h, Sous-Fct 9	Test périphérique

Fonction 44h, Sous-Fct 0Ah	Test Handle Remote

Fonction 44h, Sous-Fct 0Bh	Définir répétition

Fonction 44h, Sous-Fct 0Ch	Communication avec un driver de caractères

Fonction 44h, Sous-Fct 0Dh	Communication avec un driver de bloc

Fonction 44h, Sous-Fct 0Eh	Lire la dernière désignation de lecteur

Fonction 44h, Sous-Fct 0Fh	Définir la désignation de lecteur suivante

Fonction 44h, Sous-Fct 10h	Solliciter le soutien IOCTL au niveau Handle

Fonction 44h, Sous-Fct 11h	Solliciter le soutien IOCTL au niveau du périphérique

Fonction 45h	Définir un second Handle

Fonction 46h	Affecter un handle à un autre

Fonction 47h	Lire répertoire actuel

Fonction 48h	Réserver mémoire RAM

Fonction 49h	Libérer mémoire RAM

Fonction 4Ah	Modifier la taille d'une zone de mémoire

Fonction 4Bh, Sous-Fct 0	Exécuter un autre programme

Fonction 4Bh, Sous-Fct 3	Charger un autre programme sans l'exécuter

Fonction 4Bh, Sous-Fct 05h	Adapter les EXEC personnels

Fonction 4Ch	Terminer programme avec un code de fin

Fonction 4Dh	Lire le code de fin

Fonction 4Eh	Lire la première entrée du répertoire

Fonction 4Fh	Lire la prochaine entrée du répertoire

Fonction 50h	Définir PSP actif

Fonction 51h	Lire le PSP actif

Fonction 52h	Placer un pointeur sur le bloc info DOS

Fonction 53h	Convertir le BPB en DPB

Fonction 54h	Lire flag Verify

Fonction 55h	Créer un nouveau PSP

Fonction 56h	Renommer ou déplacer un fichier (Handle)

Fonction 57h, Sous-Fct 0	Lire les date et heure de la dernière modification d'un fichier

Fonction 57h, Sous-Fct 1	Définir les date et heure de la dernière modification d'un fichier

Fonction 58h, Sous-Fct 0	Lire principe de répartition de la mémoire

Fonction 58h, Sous-Fct 1	Définir le principe de répartition de la mémoire

Fonction 58h, Sous-Fct 02h	Demander l'utilisation des UMB

Fonction 58h, Sous-Fct 03h	Lire l'utilisation des UMB

Fonction 59h	Lire les informations d'erreur étendues

Fonction 5Ah	Créer fichier temporaire (Handle)

Fonction 5Bh	Créer un nouveau fichier (handle)

Fonction 5Ch, Sous-Fct 00h	Protéger une zone de fichier contre l'accès

Fonction 5Ch, Sous-Fct 01h	Libérer une zone verrouillée dans un fichier

Fonction 5Dh	Réservée à un usage interne

Fonction 5Eh, Sous-Fct 00h	Indiquer le nom de l'ordinateur dans le réseau

Fonction 5Eh, Sous-Fct 02h	Définir la chaîne d'initialisation de l'imprimante réseau

Fonction 5Eh, Sous-Fct 03h	Lire la chaîne d'initialisation d'une imprimante réseau

Fonction 5Fh, Sous-Fct 02h	Lire une entrée de la liste du réseau

Fonction 5Fh, Sous-Fct 03h	Définir une entrée dans la liste du réseau

Fonction 5Fh, Sous-Fct 04h	Supprimer une entrée de la liste du réseau

Fonction 60h	Augmenter le nom de fichier

Fonction 61h	Interne

Fonction 62h	Déterminer adresse de PSP

Fonction 63h	Interne

Fonction 64h	Interne

Fonction 65h	Interne

Fonction 66h, Sous-Fct 01h	Lire la page de code en cours

Fonction 66h, Sous-Fct 02h	Définir la page de code en cours

Fonction 67h	Spécifier le nombre de handles disponibles

Fonction 68h	Libérer le buffer de fichier

Fonction 69h	Interne

Fonction 6Ah	Interne

Fonction 6Bh	Interne

Fonction 6Ch	OPEN étendu


Int 21h, Fct 00h    Fin de programme    DOS (> 1.0)

En appelant cette fonction, on indique au système d'exploitation que l'exécution du programme actuellement traité doit s'achever et que le contrôle doit être rendu au programme d'appel. Avant que cela ne se produise, toutefois, les trois vecteurs d'interruption dont le contenu avait été sauvegardé dans le PSP avant appel du programme, sont restaurés. Si le programme a redirigé ces vecteurs sur des routines à lui, ces routines ne pourront être effacées par un autre programme puisque la mémoire RAM occupée par le programme qu'il s'agit de terminer est à nouveau libérée pour d'autres programmes. Cette mémoire est donc libérée et tous les buffers de fichiers sont vidés avant que le contrôle ne soit rendu au programme d'appel.

Entrée :

AH 	= 00h

CS 	= Adresse de segment du PSP

Sortie :

aucun

Remarques :

·	Pour un programme COM, l'adresse de segment du PSP est de toute façon stockée dans le registre CS. Dans un programme EXE, le code et le PSP ne sont pas logés dans le même segment. Cette fonction ne peut donc être appelée par un programme EXE.

·	Il est préférable d'utiliser, plutôt que cette fonction, les fonctions 31h ou 4Ch de l'interruption 21h du DOS pour terminer un programme.


Int 21h, Fct 01h    Entrée de caractères avec sortie    DOS (> 1.0)

Un caractère est lu sur le périphérique d'entrée standard et sorti sur le périphérique de sortie standard. Si aucun caractère n'est encore prêt au moment de l'appel de fonction, la fonction attend jusqu'à ce qu'un caractère soit disponible. Comme les entrée et sortie standard peuvent être redirigées, cette fonction ne lit pas nécessairement un caractère au clavier et ne le sort pas nécessairement sur l'écran. Les caractères entrés peuvent donc parfaitement provenir d'un autre périphérique ou d'un fichier. Dans ce dernier cas cependant, l'entrée n'est pas redirigée sur le clavier lorsqu'est atteinte la fin du fichier. La fonction continuera donc à essayer de lire des caractères dans le fichier, bien que ce ne soit plus possible.

Entrée :

AH 	= 01h

Sortie :

AL 	= Le caractère lu

Remarques :

·	Lorsque des codes étendus sont lus, le code 0 est tout d'abord renvoyé dans le registre AL. La fonction doit être appelée à nouveau pour lire le code étendu lui-même.

·	Lorsque le caractère entré est le caractère Control C (Code ASCII 3), l'interruption 23h est appelée.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 02h    Sortie d'un caractère    DOS (> 1.0)

Cette fonction permet de sortir un caractère sur le périphérique de sortie standard. Comme ce périphérique peut être redirigé, le caractère ne doit pas nécessairement être sorti sur l'écran mais peut aussi être envoyé sur un autre périphérique ou dans un fichier. Si toutefois le support (disquette, disque dur) sur lequel figure le fichier est déjà plein, la fonction ne détecte pas cette situation et elle continue à essayer d'écrire des caractères dans ce fichier.

Entrée :

AH 	= 02h

DL 	= Code du caractère à sortir

Sortie :

aucune

Remarques :

·	Si les caractères sont envoyés sur l'écran, les codes de commande tels que Backspace, Carriage Return et Line Feed sont traités comme tels. Si par contre la sortie est redirigée vers un fichier, les caractères y sont sauvegardés comme des codes ASCII normaux.

·	Après sortie du caractère, le DOS teste si un caractère Ctrl-C (code ASCII 3) a été reçu ou entré entre-temps. Si c'est le cas, l'interruption 23h est appelée.

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Int 21h, Fct 03h    Réception d'un caractère de l'interface série    DOS (> 1.0)

Cette fonction permet de lire un caractère sur l'interface série. L'accès concerne le périphérique portant la désignation AUX ou COM1.

Entrée :

AH 	= 03h

Sortie :

AL 	= Le caractère reçu

Remarques :

·	Comme l'interface série ne dispose pas de buffer interne, il peut arriver que l'interface série reçoive des caractères plus vite que l'appel de cette fonction ne permet de les lire. Ces caractères sont alors perdus.

·	Les paramètres de communication (vitesse de transmission, nombre de bits Stop, etc.) doivent avoir été fixés préalablement à l'aide de l'instruction MODE. Le DOS définit sinon les valeurs défaut suivantes : vitesse de transmission de 2400 bauds avec un bit Stop, sans contrôle de parité et une largeur de données de 8 bits.

·	Plutôt qu'à cette fonction, il est préférable de recourir aux fonctions du BIOS pour l'accès à l'interface série. Elles peuvent être appelées à travers l'interruption 14h et elles offrent une plus grande souplesse que les fonctions du DOS car elles permettent notamment de tester l'état de l'interface série.

·	Si un caractère Ctrl-C (code ASCII 3) est reçu, l'interruption 23h est appelée.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 04h    Sortie d'un caractère sur l'interface série    DOS (> 1.0)

Cette fonction permet de sortir un caractère sur l'interface série. L'accès concerne le périphérique portant la désignation AUX ou COM1.

Entrée :

AH 	= 04h

DL 	= Le caractère à sortir

Sortie :

aucune

Remarques :

·	Le caractère n'est sorti qu'après que le périphérique qui doit recevoir le caractère ait signalé qu'il est prêt à recevoir. Ce n'est qu'après cela que le contrôle est rendu au programme d'appel.

·	Les paramètres de communication (vitesse de transmission, nombre de bits Stop, etc.) doivent avoir été fixés préalablement à l'aide de l'instruction MODE. Le DOS définit sinon les valeurs défaut suivantes : vitesse de transmission de 2400 bauds avec un bit Stop, sans contrôle de parité et une largeur de données de 8 bits.

·	Plutôt qu'à cette fonction, il est préférable de recourir aux fonctions du BIOS pour l'accès à l'interface série. Elles peuvent être appelées à travers l'interruption 14h et elles offrent une plus grande souplesse que les fonctions du DOS car elles permettent notamment de tester l'état de l'interface série.

·	Si un caractère Ctrl-C (code ASCII 3) est sorti, l'interruption 23h est appelée.

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Int 21h, Fct 05h    Sortie d'un caractère sur l'imprimante    DOS (> 1.0)

Cette fonction sort un caractère sur l'imprimante. A moins que cette sortie n'ait été redirigée avec l'instruction MODE, l'accès se fait sur le périphérique portant la désignation LPT1 (identique à PRN).

Entrée :

AH 	= 05h

DL 	= Code du caractère à sortir.

Sortie :

aucune

Remarques :

·	Le caractère n'est sorti que si l'imprimante signale qu'elle est prête à recevoir. Ce n'est qu'après cela que le contrôle est rendu au programme d'appel.

·	Si un caractère Ctrl-C (code ASCII 3) est détecté, l'interruption 23h est appelée.

·	Pour la sortie de caractères sur l'imprimante, les fonctions du BIOS pour la communication avec l'imprimante, qui peuvent être appelées à travers l'interruption 17h, offrent une plus grande souplesse.

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Int 21h, Fct 06h    Entrée/sortie directe de caractère    DOS (> 1.0)

Cette fonction permet de sortir des caractères sur le périphérique de sortie standard ou de les lire sur le périphérique d'entrée standard. Le caractère reçu ou écrit chaque fois n'est pas examiné par le système d'exploitation. Rien de particulier ne se produit donc lorsqu'un caractère Ctrl-C apparaît. Comme l'entrée et la sortie standard peuvent être redirigées sur d'autres périphériques ou vers un fichier, les caractères sortis ne doivent pas nécessairement apparaître sur l'écran ni les caractères lus provenir obligatoirement du clavier. Toutefois, lorsque l'accès se fait sur un fichier, il est impossible pour le programme d'appel de détecter si tous les caractères de ce fichier ont déjà été lus ou bien si le support (disquette, disque dur) sur lequel figure ce fichier est déjà plein.

Pour l'entrée d'un caractère, la fonction n'attend pas qu'un caractère soit prêt mais revient immédiatement au programme d'appel dans tous les cas.

Entrée :

AH 	= 06h

DL 	= 0 - 254 : Sortir ce caractère

DL 	= 255 : Lire un caractère

Sortie :

Pour la sortie de caractères : aucune

Pour l'entrée de caractères :

Flag Zéro =1 : aucun caractère n'est prêt

Flag Zéro =0 : Le caractère entré figure dans le registre AL

Remarques :

·	Lorsque des codes étendus sont lus, le code 0 est tout d'abord renvoyé dans le registre AL. La fonction doit être appelée à nouveau pour lire le code étendu lui-même.

·	Le caractère de code ASCII 255 ne peut être sorti à l'aide de cette fonction puisqu'il est interprété comme d'entrée d'un caractère.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 07h    Entrée de caractères directe sans sortie    DOS (> 1.0)

Un caractère est lu sur le périphérique d'entrée standard mais sans être sorti sur le périphérique de sortie standard. Si aucun caractère n'est disponible au moment de l'appel de fonction, la fonction attend jusqu'à ce qu'un caractère soit disponible.

Le caractère reçu n'est pas examiné par le système d'exploitation, de sorte que rien ne se passe lorsqu'apparaît un caractère Ctrl-C.

Comme l'entrée standard peut être redirigée sur un autre périphérique ou vers un fichier, le caractère lu ne doit pas nécessairement provenir du clavier. Si les caractères transmis proviennent d'un fichier, le programme d'appel n'a aucune possibilité de détecter si tous les caractères de ce fichier ont déjà été lus, autrement dit si la fin du fichier a ou non déjà été atteinte.

Entrée :

AH 	= 07h

Sortie :

AL 	= Le caractère lu

Remarques :

·	Lorsque des codes étendus sont lus, le code 0 est tout d'abord renvoyé dans le registre AL. La fonction doit être appelée à nouveau pour lire le code étendu lui-même.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 08h    Entrée de caractères sans sortie    DOS (> 1.0)

Un caractère est lu sur le périphérique d'entrée standard mais sans être sorti sur le périphérique de sortie standard. Si aucun caractère n'est disponible au moment de l'appel de fonction, la fonction attend jusqu'à ce qu'un caractère soit disponible.

Comme l'entrée standard peut être redirigée sur un autre périphérique ou vers un fichier, le caractère lu ne doit pas nécessairement provenir du clavier. Si les caractères transmis proviennent d'un fichier, le programme d'appel n'a aucune possibilité de détecter si tous les caractères de ce fichier ont déjà été lus, autrement dit si la fin du fichier a ou non déjà été atteinte.

Entrée :

AH 	= 08h

Sortie :

AL 	= Le caractère lu

Remarques :

·	Lorsque des codes étendus sont lus, le code 0 est tout d'abord renvoyé dans le registre AL. La fonction doit être appelée à nouveau pour lire le code étendu lui-même.

·	Lorsque le caractère Ctrl-C est détecté au cours de l'exécution de cette fonction, l'interruption 23h est appelée.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 09h    Sortie d'une chaîne de caractères     DOS (> 1.0)

Cette fonction permet de sortir une chaîne de caractères sur le périphérique de sortie standard. Comme ce périphérique standard peut être redirigé sur un autre périphérique ou vers un fichier, il n'y a aucune garantie que la chaîne de caractères apparaisse sur l'écran. Si la sortie est redirigée sur un fichier, le programme d'appel n'a aucune possibilité de détecter si le support (disquette, disque dur) sur lequel figure le fichier est déjà plein, autrement dit s'il est encore possible d'écrire la chaîne de caractères dans le fichier.

Entrée :

AH 	= 09h

DS 	= Adresse de segment de la chaîne de caractères

DX 	= Adresse d'offset de la chaîne de caractères

Sortie :

aucune

Remarques :

·	La chaîne de caractères doit être stockée dans la mémoire sous forme d'une séquence d'octets correspondant aux codes ASCII des caractères composant la chaîne. La fin de la chaîne de caractères doit être signalée au DOS à l'aide d'un caractère "$" (code ASCII 36).

·	Si la chaîne de caractères contient des codes de commande comme Backspace, Carriage Return ou Line Feed, ceux-ci seront traités comme tels.

·	Seul le contenu du registre AL est modifié par l'appel de cette fonction.


Int 21h, Fct 0Ah    Entrée d'une chaîne de caractères     DOS (> 1.0)

Cette fonction permet de lire un nombre déterminé de caractères sur le périphérique d'entrée standard et de les transférer dans un buffer. L'entrée se termine lorsque la touche Entrée est actionnée. Le code de cette touche (13) est alors également placé dans le buffer, comme dernier caractère de la chaîne.

Comme l'entrée standard peut être redirigée sur un autre périphérique ou vers un fichier, les caractères entrés ne proviennent pas nécessairement du clavier. Si les caractères transmis proviennent d'un fichier, le programme d'appel n'a aucune possibilité de détecter si tous les caractères de ce fichier ont déjà été lus, autrement dit si la fin de fichier a déjà été atteinte.

Entrée :

AH 	= 0Ah

DS 	= Adresse de segment du buffer

DX 	= Adresse d'offset du buffer

Sortie :

aucune

Remarques :

·	Le premier octet du buffer définit le nombre maximal de caractères (y compris le Carriage Return final) qui pourront être lus et placés dans le buffer à partir de la cellule de mémoire numéro deux. Ce paramètre doit être inscrit dans le buffer avant d'appeler la fonction, pour que celle-ci sache combien de caractères elle doit lire au maximum.

·	Le DOS inscrit dans la cellule de mémoire 1, une fois le travail terminé, le nombre de caractères lus à l'exception du Carriage Return.

·	Le buffer doit donc être d'une longueur égale au nombre de caractères à entrer plus 2 octets.

·	Dès que l'avant-dernière cellule de mémoire du buffer est atteinte, l'entrée d'autres caractères entraîne l'émission d'un bip et seule la touche Entrée est encore acceptée pour conclure l'entrée.

·	Les codes clavier étendus occupent deux octets dans le buffer. Le premier octet contient le code 0 et le second contient le code de la touche étendue.

·	Lorsque le caractère Ctrl-C est détecté au cours de l'entrée, l'interruption 23h est appelée.

·	L'entrée peut être éditée à l'aide de la touche Backspace et des touches curseur, sans que ces touches soient sauvegardées dans le buffer.

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Int 21h, Fct 0Bh    Lire état du périphérique d'entrée    DOS (> 1.0)

Cette fonction permet de déterminer si des caractères sont prêts à être lus sur le périphérique d'entrée standard.

Entrée :

AH 	= 0Bh

Sortie :

AL 	= 0 : Aucun caractère disponible

AL 	= 255 : Un ou plusieurs caractères prêts à être lus

Remarques :

·	Lorsque le caractère Ctrl-C est détecté au cours de l'exécution de cette fonction, l'interruption 23h est appelée.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 0Ch    Vider buffer d'entrée et appeler Fct d'entrée     DOS (> 1.0)

Cette fonction vide tout d'abord le buffer d'entrée et appelle ensuite une des fonctions d'entrée de caractères. Comme les fonctions d'entrée de caractères tirent tous leurs caractères du périphérique d'entrée standard et que ce dernier n'est pas nécessairement le clavier, le fait de vider le buffer d'entrée ne présente d'intérêt que si le périphérique d'entrée standard est le clavier. Dans ce cas en effet, il se peut que des caractères aient été entrés avant appel de la fonction mais n'aient pas encore été lus par celle-ci. En vidant le buffer, on efface donc ces caractères pour avoir l'assurance que la fonction appelée ensuite ne recevra que des caractères entrés au cours de l'exécution de cette fonction.

Entrée :

AH 	= 0Ch

AL 	= Numéro de la fonction d'appel

Pour l'appel de la fonction 10 :

DS = Adresse de segment du buffer d'entrée

DX = Adresse d'offset du buffer d'entrée

Sortie :

Pour les fonctions 01h, 06h, 07h et 08h :

AL = le caractère entré

Pour la fonction 0Ah : aucune

Remarques :

·	Les numéros de fonction 01h, 06h, 07h, 08 et 0Ah peuvent seuls être transmis à cette fonction comme fonctions à appeler.

·	Seul le contenu du registre AL est modifié par l'appel de cette fonction.


Int 21h, Fct 0Dh    Réinitialisation des drivers de bloc     DOS (> 1.0)

Cette fonction permet de transmettre au périphérique approprié (disquette, disque dur) toutes les données censées être transmises à un driver de bloc mais qui étaient encore stockées dans un buffer interne du DOS. Les fichiers ouverts (Handles ou FCB) ne sont pas refermés.

Entrée :

AH 	= 0Dh

Sortie :

aucune

Remarques :

·	Même si cette fonction a été appelée, il faut encore refermer comme il convient tous les fichiers ouverts. Il peut arriver sinon que l'entrée de répertoire correspondant à un fichier donné n'ait pas été actualisée, auquel cas il ne sera pas possible d'accéder aux données nouvellement écrites dans le fichier.

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Int 21h, Fct 0Eh    Sélection du lecteur actuel    DOS (> 1.0)

Cette fonction permet de définir le lecteur actuel dont la désignation apparaîtra désormais sur l'écran comme message de dialogue chaque fois que l'interpréteur de commandes attendra des entrées de l'utilisateur. Tous les accès de fichier pour lesquels aucune désignation de lecteur ne sera spécifiée se feront à l'avenir sur le lecteur indiqué ici.

Entrée :

AH 	= 0Eh

DL 	= Code du lecteur actuel

Sortie :

AL 	= Nombre de lecteurs (ou Volumes) installés

Remarques :

·	Le lecteur A porte le code 0, B le code 1, etc.

·	Même si un PC dispose seulement d'un lecteur de disquette et d'un disque dur, le nombre de volumes dans le registre AL peut être supérieur à 2 car le disque dur peut être subdivisé en plusieurs volumes et un ou plusieurs disques RAM peuvent également avoir été installés.

·	Sur un PC disposant d'un seul lecteur de disquette, le nombre de volumes est de 2 car ce lecteur fait office aussi bien de lecteur A que de lecteur B.

·	La version 2 du DOS autorisait 63 codes de périphériques différents alors que la version 3 du DOS a limité le nombre de périphériques à 26 (les lettres A à Z). Il n'est donc pas possible d'accéder à plus de 26 périphériques à la fois.

·	Le nombre de lecteurs de disquette physiques n'est pas nécessairement identique au nombre de volumes. Il peut donc être déterminé de façon plus précise en appelant l'interruption 11h du BIOS.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 0Fh    Ouvrir fichier (FCB)     DOS (> 1.0)

Cette fonction permet d'ouvrir un fichier (s'il existe). Après exécution réussie de cette fonction, le fichier peut alors être lu ou écrit.

Entrée :

AH 	= 0Fh

DS 	= Adresse de segment du FCB du fichier

DX 	= Adresse d'offset du FCB du fichier

Sortie :

AL 	= 0 : Fichier trouvé et ouvert

AL 	= 255 : Fichier non trouvé

Remarques :

·	Des FCB normaux ainsi que des FCB étendus sont utilisables.

·	Si le fichier a été trouvé, le DOS inscrit dans le FCB la taille du fichier, la date et l'heure de sa création ou de sa dernière modification.

·	Le DOS fixe la longueur d'enregistrement sur 128 octets. Cette longueur d'enregistrement peut être modifiée dans le FCB mais cela ne doit être fait qu'une fois le fichier ouvert. Pour travailler avec une longueur d'enregistrement supérieure, il est en outre nécessaire de déplacer la DTA car la DTA prédéfinie a une taille de 128 octets seulement.

·	Pour effectuer un accès sélectif au fichier, il convient de définir le champ approprié du FCB après ouverture réussie du fichier.

·	Le pointeur de fichier est dirigé sur le premier octet du fichier après ouverture de celui-ci.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 10h    Fermer fichier (FCB)     DOS (> 1.0)

Après appel de cette fonction, toutes les données qui figurent encore dans un des buffers internes du DOS sont écrites dans le fichier qui est ensuite refermé. L'entrée du répertoire correspondant à ce fichier est alors actualisée pour tenir compte de la nouvelle taille du fichier ainsi que des date et heure de modification.

Entrée :

AH 	= 10h

DS 	= Adresse de segment du FCB du fichier

DX 	= Adresse d'offset du FCB du fichier

Sortie :

AL 	= 0 : Fichier refermé et entrée du répertoire actualisée

AL 	= 255 : Fichier non trouvé dans le répertoire

Remarques :

·	Seuls peuvent naturellement être refermés des fichiers qui ont été précédemment ouverts.

·	Pour les fichiers sur disquette, il faut absolument s'assurer que la disquette placée dans le lecteur au moment de l'appel de cette fonction est bien la disquette qui contient le fichier. S'il n'en est pas ainsi, une FAT et un répertoire erronés seront écrits sur la disquette, ce qui rendra inutilisables les données qu'elle contenait.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 11h    Rechercher première entrée du répertoire (FCB)     DOS (> 1.0)

Cette fonction permet de rechercher la première apparition d'un nom de fichier déterminé dans le répertoire actuel du périphérique désigné dans le FCB.

Entrée :

AH 	= 11h

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Fichier trouvé

AL 	= 255 : Fichier non trouvé

Remarques :

·	Le FCB transmis à la fonction contient la désignation du périphérique sur lequel le fichier doit être recherché ainsi que le nom de ce fichier.

·	Le nom de fichier peut contenir le joker "?" si vous voulez faire rechercher un groupe de fichiers.

·	La recherche s'effectue exclusivement sur le répertoire actuel du périphérique spécifié.

·	Si c'est un fichier normal qu'il s'agit de rechercher, un FCB normal doit être transmis à la fonction. S'il s'agit au contraire de rechercher des fichiers dotés d'attributs particuliers (noms de volumes, sous-répertoires, fichiers cachés, etc.), il faut travailler avec des FCB étendus.

·	Si un fichier a été trouvé, la DTA contient un FCB de même type que le FCB transmis, qui contient le nom du fichier trouvé. C'est pourquoi la DTA doit toujours être d'une taille lui permettant de recevoir au moins un FCB normal ou étendu.

·	La DTA peut être déplacée vers un buffer utilisateur à l'aide de la fonction 1Ah pour s'assurer qu'elle sera d'une taille suffisante pour recevoir le FCB correspondant.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 12h    Rechercher prochaine entrée du répertoire (FCB)     DOS (> 1.0)

Après que le premier nom de fichier ait été identifié en appelant la fonction 11h, cette fonction vous permet de faire rechercher tous les autres noms de fichiers (s'il y en a).

Entrée :

AH 	= 12h

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Fichier trouvé

AL 	= 255 : Fichier non trouvé (pas d'autres fichiers présents)

Remarques :

·	Cette fonction ne doit être appelée qu'après que la fonction 11h ait été tout d'abord appelée.

·	Si un autre nom de fichier a été trouvé, son nom figure à nouveau dans le FCB placé au début de la DTA.

·	La recherche s'effectue exclusivement dans le répertoire actuel du périphérique spécifié.

·	La DTA peut être déplacée à l'aide de la fonction 1Ah vers un buffer utilisateur pour garantir que ce buffer soit suffisamment grand pour recevoir le FCB approprié.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 13h    Supprimer fichier(s) (FCB)     DOS (> 1.0)

Cette fonction sert à supprimer un ou plusieurs fichiers dans le répertoire actuel du périphérique spécifié.

Entrée :

AH 	= 13h

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Fichier(s) supprimé(s)

AL 	= 255 : Aucun fichier trouvé ou bien les fichiers trouvés ne pouvaient être supprimés (parce qu'ils étaient dotés de l'attribut "Lecture seule")

Remarques :

·	Le FCB transmis à la fonction contient la désignation du périphérique sur lequel figurent les fichiers à supprimer ainsi que le nom de ces fichiers.

·	Le nom de fichier peut contenir le joker "?" si vous voulez supprimer un groupe de fichiers.

·	Seuls des fichiers du répertoire actuel du périphérique spécifié peuvent être supprimés.

·	Si c'est un fichier normal qu'il s'agit de supprimer, un FCB normal doit être transmis à la fonction. S'il s'agit au contraire de supprimer des fichiers dotés d'attributs particuliers (noms de volumes, fichiers cachés, etc.), il faut travailler avec des FCB étendus.

·	Des noms de volumes peuvent être supprimés à l'aide de cette fonction mais pas des sous-répertoires.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 14h    Lecture séquentielle (FCB)     DOS (> 1.0)

Lire le prochain enregistrement d'un fichier.

Entrée :

AH 	= 14h

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Enregistrement a été lu

AL 	= 1 : Fin du fichier atteinte

AL 	= 2 : Débordement de segment

AL 	= 3 : Lu enregistrement partiel

Remarques :

·	Cette fonction ne doit être appelée qu'après que le fichier ait été ouvert à travers le FCB indiqué.

·	L'enregistrement est transféré dans la DTA. Si celle-ci n'est pas assez grande, il convient de la déplacer auparavant vers un buffer utilisateur à l'aide de la fonction 1Ah.

·	La taille de l'enregistrement, c'est-à-dire le nombre d'octets lus, est inscrit dans le FCB.

·	L'erreur 2 se produit si la DTA est située à la fin d'un segment et que l'enregistrement lu est conduit, de ce fait, à dépasser la limite du segment.

·	L'erreur 3 se produit lorsque la fin d'un fichier ne comporte pas un enregistrement complet mais seulement un enregistrement partiel. Dans ce cas, l'enregistrement partiel est lu mais comblé de zéros jusqu'à la longueur prescrite.

·	Après que l'enregistrement ait été lu, le pointeur de fichier est dirigé sur le début du prochain enregistrement, de sorte que c'est automatiquement le prochain enregistrement qui sera lu lors du prochain appel de cette fonction.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 15h    Ecriture séquentielle (FCB)     DOS (> 1.0)

Ecrire le prochain enregistrement dans un fichier.

Entrée :

AH 	= 15h

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Enregistrement a été écrit

AL 	= 1 : Support (disquette/disque dur) plein

AL 	= 2 : Débordement de segment

Remarques :

·	Cette fonction ne doit être appelée qu'après que le fichier ait été ouvert à travers le FCB indiqué.

·	L'enregistrement est transféré de la DTA dans le fichier. Si la DTA n'est pas assez grande, il convient de la déplacer auparavant vers un buffer utilisateur à l'aide de la fonction 1Ah.

·	La taille de l'enregistrement, c'est-à-dire le nombre d'octets écrits, est inscrit dans le FCB.

·	L'erreur 2 se produit si la DTA est située à la fin d'un segment et que l'enregistrement à écrire est conduit, de ce fait, à dépasser la limite du segment.

·	Après que l'enregistrement ait été écrit, le pointeur de fichier est dirigé sur le début du prochain enregistrement, de sorte que c'est automatiquement le prochain enregistrement qui sera écrit lors du prochain appel de cette fonction.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 16h    Créer ou vider un fichier (FCB)     DOS (> 1.0)

Après appel de cette fonction, un fichier n'existant pas encore sera créé. Un fichier déjà existant sera vidé par l'appel de cette fonction, la longueur de ce fichier passant donc à 0. Le fichier est en même temps ouvert par cette fonction, de sorte que ce fichier pourra être écrit et ensuite lu en appelant d'autres fonctions.

Entrée :

AH 	= 16h

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Fichier a été créé ou vidé

AL 	= 255 : Fichier n'a pu être créé (par exemple parce que le répertoire était déjà plein)

Remarques :

·	Le contenu d'un fichier déjà existant qui aura été vidé à l'aide de cette fonction sera irrémédiablement perdu.

·	Après appel de cette fonction, il n'est plus nécessaire d'ouvrir le fichier à l'aide de la fonction 0Fh.

·	Si le fichier est ouvert à l'aide d'un FCB étendu, il peut aussi posséder certains attributs (nom de volume, fichier caché). Il n'est toutefois pas possible de créer un sous-répertoire à l'aide de cette fonction.

·	Après ouverture du fichier, le pointeur de fichier est dirigé sur le premier octet du fichier.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 17h    Renommer fichier(s) (FCB)     DOS (> 1.0)

Renommer un fichier ou un groupe de fichiers dans le répertoire actuel sur le périphérique spécifié.

Entrée :

AH 	= 17h

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Fichier(s) renommé(s)

AL 	= 255 :

Remarques :

·	Le FCB transmis doit être un FCB spécial. Il est basé sur un FCB normal dont les 12 premiers octets contiennent comme d'habitude la désignation de périphérique et le nom du fichier à renommer. Ce FCB a cependant ceci de particulier qu'il comporte à partir de la cellule de mémoire 16 la désignation de périphérique et le nouveau nom du fichier. La désignation de périphérique doit naturellement être identique à celle spécifiée pour l'ancien nom du fichier.

·	Le nom du fichier à renommer peut contenir le joker "?" si vous voulez renommer plusieurs fichiers à la fois.

·	Si le nouveau nom du fichier contient également le joker "?", les emplacements du nom de fichier ou de l'extension de fichier pour lesquels figure un "?" dans le nouveau nom de fichier ne seront pas modifiés.

·	A partir de la version 2.0, un FCB augmenté peut être spécifié pour renommer un répertoire simultanément avec cette fonction.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 18h     DOS (> 1.0)

Réservée à un usage interne


Int 21h, Fct 19h    Lire la désignation de périphérique du lecteur actuel             DOS (> 1.0)

L'appel de cette fonction renvoie la désignation de périphérique du lecteur actuel.

Entrée :

AH 	= 19h

Sortie :

AL 	= Désignation de périphérique

Remarques :

·	Alors que pour d'autres fonctions DOS la désignation de périphérique 0 correspond au périphérique actuel et que c'est le code 1 qui désigne le lecteur A, c'est ici le code 0 qui désigne le lecteur A, le code 1 désignant le lecteur B, etc..

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 1Ah    Définir l'adresse de la DTA     DOS (> 1.0)

En appelant cette fonction, vous pouvez déplacer vers une autre zone de mémoire la zone de transfert disque (Disk Transfer Area = DTA), qui est utilisée pour le stockage intermédiaire des données lors de tous les accès de fichier soutenus par FCB.

Entrée :

AH 	= 1Ah

DS 	= Adresse de segment de la nouvelle DTA

DX 	= Adresse d'offset de la nouvelle DTA

Sortie :

aucune

Remarques :

·	Cette fonction doit être appelée chaque fois que la DTA prédéfinie n'est pas assez grande pour recevoir les données à transférer.

·	Lors du lancement d'un programme, le DOS place la DTA à l'adresse 128 du PSP du programme. Elle a donc une taille de 128 octets puisque le programme lui-même commence immédiatement après l'adresse 255 du PSP.

·	Le DOS ne connaît pas la longueur de la DTA et il considère toujours a priori qu'elle est suffisamment grande pour absorber les données à transférer. Or s'il n'en est pas ainsi en réalité, les données excédentaires effaceront les données suivantes de la fonction DOS utilisée.

·	Avec différentes fonctions, le DOS détecte toutefois une erreur lorsque la DTA se situe à la fin d'un segment et que les données à transférer sont de ce fait conduites à dépasser la limite du segment.

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Int 21h, Fct 1Bh    Lire les informations sur le lecteur actuel     DOS (> 1.0)

Cette fonction permet d'obtenir un certain nombre d'informations sur le format du lecteur actuel.

Entrée :

AH 	= 1Bh

Sortie :

AL 	= Nombre de secteurs par cluster

DS 	= Adresse de segment du descripteur de support

BX 	= Adresse d'offset du descripteur de support

DX 	= Nombre de clusters

Remarques :

·	Pour le descripteur de support peuvent être renvoyés les codes suivants :

F0h :	Lecteur de disquette : deux faces, 80 pistes, 18 secteurs par piste (3 pouces 1/2)

F8h :	Disque dur

F9h :	Lecteur de disquette : deux faces, 15 secteurs par piste (5 pouces 1/4, AT seulement) ou deux faces, 80 pistes, 9 secteurs par piste (3 pouces 1/2)

FAh :	Lecteur de disquette : une face, 80 pistes, 8 secteurs par piste (5 ou 3 pouces 1/2)

FBh :	Lecteur de disquette : deux faces, 80 pistes, 8 secteurs par piste (5 ou 3 pouces 1/2)

FCh :	Lecteur de disquette : une face, 40 pistes, 9 secteurs par piste (5 pouces 1/4)

FDh :	Lecteur de disquette : deux faces, 40 pistes, 9 secteurs par piste (5 pouces 1/4)

FEh :	Lecteur de disquette : une face, 40 pistes, 8 secteurs par piste (5 pouces 1/4)

FFh :	Lecteur de disquette : deux faces, 40 pistes, 8 secteurs par piste (5 pouces 1/4)

·	La fonction 1Ch vous permet d'obtenir des informations sur n'importe quel lecteur.

·	Le contenu des registres AH, SI, DI, BP, CS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 1Ch    Lire les informations sur un lecteur quelconque     DOS (> 1.0)

Cette fonction permet d'obtenir un certain nombre d'informations sur le format du lecteur spécifié.

Entrée :

AH 	= 1Ch

DL 	= Désignation de périphérique

Sortie :

AL 	= Nombre de secteurs par cluster

DS 	= Adresse de segment du descripteur de support

BX 	= Adresse d'offset du descripteur de support

DX 	= Nombre de clusters

Remarques :

·	Pour la désignation de périphérique, 0 représente le lecteur actuel, 1 le lecteur A, 2 le lecteur B, etc.

·	                                                                                                                                                                                                         Pour le descripteur de support, les codes suivants peuvent être renvoyés :

F0h :	Lecteur de disquette : deux faces, 80 pistes, 18 secteurs par piste (3 pouces 1/2)

F8h :	Disque dur

F9h :	Lecteur de disquette : deux faces, 15 secteurs par piste (5 pouces, AT seulement) ou deux 	faces, 80 pistes, 9 secteurs par piste (3 pouces 1/2)

FAh :	Lecteur de disquette : une face, 80 pistes, 8 secteurs par piste (5 ou 3 pouces 1/2)

FBh :	Lecteur de disquette : deux faces, 80 pistes, 8 secteurs par piste (5 ou 3 pouces 1/2)

FCh :	Lecteur de disquette : une face, 40 pistes, 9 secteurs par piste (5 pouces 1/4)

FDh :	Lecteur de disquette : deux faces, 40 pistes, 9 secteurs par piste (5 pouces 1/4)

FEh :	Lecteur de disquette : une face, 40 pistes, 8 secteurs par piste (5 pouces 1/4)

FFh :	Lecteur de disquette : deux faces, 40 pistes, 8 secteurs par piste (5 pouces 1/4)

·	Le contenu des registres AH, SI, DI, BP, CS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 1Dh    DOS (> 1.0)

Réservée à un usage interne


Int 21h, Fct 1Eh     DOS (> 1.0)

Réservée à un usage interne


Int 21h, Fct 1Fh    Lire le pointeur BPD pour le lecteur en cours     DOS (> 1.0)

A travers l'appel de cette fonction, DOS place un pointeur sur le bloc de paramètres DOS (BPD) du lecteur en cours. Le BPD décrit la structure logique et physique du lecteur.

Entrée :

AH 	= 1Fh

Sortie :

AL 	= 0 : Pas d'erreur, dans ce cas

DS:BX = Pointeur FAR sur BPD

Remarques :

·	S'il s'agit d'un changement de disquette effectué sur le périphérique en cours, DOS s'adresse d'abord au lecteur pour compléter le BPD avec les données concernant le lecteur et le format de la disquette. En revanche, pour le disque dur, ces informations se trouvent déjà dans la mémoire si bien qu'il n'est pas nécessaire d'effectuer un accès au périphérique.

·	La structure du bloc de paramètres DOS varie en fonction des versions DOS.

·	Le contenu des registres AH, CX, DX, SI, DI, BP, CS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 20h    DOS (> 1.0)

Réservée à un usage interne


Int 21h, Fct 21h    Lecture sélective (FCB)     DOS (> 1.0)

Lire un enregistrement déterminé d'un fichier en le transférant dans la DTA.

Entrée :

AH 	= 21h

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Enregistrement lu complètement

AL 	= 1 : Fin du fichier atteinte, rien n'a été lu

AL 	= 2 : Débordement de segment

AL 	= 3 : Enregistrement lu partiellement

Remarques :

·	Cette fonction ne doit être appelée qu'après que le fichier ait été ouvert à travers le FCB indiqué.

·	L'enregistrement lu est celui dont l'adresse est spécifiée dans le FCB à partir de la cellule 21h.

·	L'enregistrement est transféré dans la DTA. Si celle-ci n'est pas assez grande, il convient de la déplacer auparavant vers un buffer utilisateur à l'aide de la fonction 1Ah.

·	La taille de l'enregistrement, c'est-à-dire le nombre d'octets lus, est inscrit dans le FCB.

·	Après appel de cette fonction, le pointeur de fichier est dirigé automatiquement sur le début de l'enregistrement à lire, de sorte qu'un appel consécutif de la fonction de lecture séquentielle d'un enregistrement lirait à nouveau le même enregistrement.

·	Le numéro d'enregistrement n'est pas incrémenté après appel de la fonction, de sorte qu'un nouvel appel de cette fonction lirait le même enregistrement.

·	L'erreur 2 se produit si la DTA est située à la fin d'un segment et que l'enregistrement lu est conduit, de ce fait, à dépasser la limite du segment.

·	L'erreur 3 se produit lorsque la fin d'un fichier ne comporte pas un enregistrement complet mais seulement un enregistrement partiel. Dans ce cas, l'enregistrement partiel est lu mais comblé de zéros jusqu'à la longueur prescrite.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 22h    Ecriture sélective (FCB)     DOS (> 1.0)

Ecrire un enregistrement déterminé dans le fichier.

Entrée :

AH 	= 22h

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Enregistrement écrit entièrement

AL 	= 1 : Support (disquette/disque dur) plein

AL 	= 2 : Débordement de segment

Remarques :

·	Cette fonction ne doit être appelée qu'après que le fichier ait été ouvert à travers le FCB indiqué.

·	L'adresse de l'enregistrement à écrire doit être spécifiée à partir de la cellule de mémoire 21h du FCB.

·	La taille de l'enregistrement, c'est-à-dire le nombre d'octets écrits, est inscrit dans le FCB.

·	L'enregistrement est transféré de la DTA dans le fichier. Si celle-ci n'est pas assez grande, il convient de la déplacer auparavant vers un buffer utilisateur à l'aide de la fonction 1Ah.

·	Après appel de cette fonction, le pointeur de fichier est dirigé automatiquement sur le début de l'enregistrement à écrire, de sorte qu'un appel consécutif de la fonction d'écriture séquentielle d'un enregistrement écrirait à nouveau le même enregistrement.

·	Le numéro d'enregistrement n'est pas incrémenté après appel de la fonction, de sorte qu'un nouvel appel de cette fonction écrirait le même enregistrement.

·	L'erreur 2 se produit si la DTA est située à la fin d'un segment et que l'enregistrement à écrire est conduit, de ce fait, à dépasser la limite du segment.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 23h    Lire la taille du fichier (FCB)     DOS (> 1.0)

Cette fonction permet de connaître le nombre d'enregistrements et donc, de ce fait, la taille d'un fichier.

Entrée :

AH 	= 23h

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Fichier trouvé, dans ce cas le champ d'enregistrement à partir de l'adresse 21h du FCB contient le nombre d'enregistrements dans le fichier.

AL 	= 255 : Fichier non trouvé

Remarques :

·	Le FCB transmis contient la désignation de périphérique ainsi que le nom et l'extension du fichier dont il s'agit de déterminer la taille.

·	Contrairement à tous les autres accès de fichier soutenus par FCB, la taille d'enregistrement doit être inscrite dans le FCB avant appel de cette fonction.

·	Si la taille d'enregistrement spécifiée est 1, cette fonction permet d'obtenir directement et précisément la taille du fichier en octets.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 24h    Définir le numéro d'enregistrement     DOS (> 1.0)

Cette fonction permet de fixer sur la position actuelle du pointeur de fichier le numéro d'enregistrement dans le FCB qui définit l'accès séquentiel à un fichier. Après une série d'accès de fichier séquentiels, on peut ainsi poursuivre avec l'accès sélectif à l'endroit précis où les accès séquentiels avaient été interrompus.

Entrée :

AH 	= 24h

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

aucune

Remarques :

·	Cette fonction ne doit être appelée qu'après que le fichier ait été ouvert à travers le FCB spécifié.

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Int 21h, Fct 25h    Modifier le vecteur d'Int     DOS (> 1.0)

Cette fonction permet de rediriger n'importe quel vecteur d'interruption sur une autre routine.

Entrée :

AH 	= 25h

AL 	= Numéro d'interruption

DS 	= Nouvelle adresse de segment de la routine d'interruption

DX 	= Nouvelle adresse d'offset de la routine d'interruption

Sortie :

aucune

Remarques :

·	Avant d'appeler cette fonction, il convient tout d'abord de lire à l'aide de la fonction 35h l'ancien contenu du vecteur d'interruption à modifier et de le sauvegarder. Une fois le programme terminé, il sera préférable de rétablir cet ancien contenu à l'aide de cette même fonction.

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Int 21h, Fct 26h    Créer un nouveau PSP    DOS (> 1.0)

Le PSP du programme exécuté est copié à l'adresse spécifiée.

Entrée :

AH 	= 26h

DX 	= Adresse de segment du nouveau PSP

Sortie :

aucune

Remarques :

·	L'adresse d'offset du nouveau PSP est 0.

·	Cette fonction était utilisée sous la version 1 du DOS pour exécuter d'autres programmes. A cet effet, un PSP était mis en place, après quoi le programme voulu pouvait être chargé à la suite de ce PSP puis être exécuté.

·	Sous les versions 2 et 3 du DOS, il est préférable de ne plus recourir à cette fonction car les autres programmes peuvent être chargés et exécutés à l'aide de la fonction EXEC 4Bh.

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Int 21h, Fct 27h    Lecture sélective de plusieurs enregistrements (FCB)        DOS (> 1.0)

Lecture de plusieurs enregistrements consécutifs du fichier, à partir de l'enregistrement spécifié.

Entrée :

AH 	= 27h

CX 	= Nombre d'enregistrements à lire

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Enregistrements tous lus

= 1 : Fin du fichier atteinte, pas de lecture

= 2 : Débordement de segment

= 3 : Enregistrements lus partiellement

CX 	= Nombre d'enregistrements lus

Remarques :

·	Cette fonction ne doit être appelée qu'après que le fichier ait été ouvert à travers le FCB indiqué.

·	Le premier enregistrement lu est celui dont l'adresse est spécifiée à partir de la cellule de mémoire 21h du FCB.

·	Les enregistrements sont transférés dans la DTA. Si celle-ci n'est pas assez grande, il convient de la déplacer auparavant vers un buffer utilisateur à l'aide de la fonction 1Ah.

·	La taille de chaque enregistrement est inscrite dans le FCB.

·	Après appel de cette fonction, le pointeur de fichier est dirigé automatiquement à la suite du dernier enregistrement lu. Le numéro d'enregistrement est en outre incrémenté à raison du nombre d'enregistrements lus, de sorte qu'il désigne l'enregistrement suivant le dernier enregistrement lu.

·	L'erreur 2 se produit si la DTA est située à la fin d'un segment et que l'enregistrement lu est conduit, de ce fait, à dépasser la limite du segment.

·	L'erreur 3 se produit lorsque la fin d'un fichier ne comporte pas un enregistrement complet mais seulement un enregistrement partiel. Dans ce cas, l'enregistrement partiel est lu mais comblé de zéros jusqu'à la longueur prescrite.

·	Le contenu des registres AH, BX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 28h    Ecriture sélective de plusieurs enregistrements (FCB)        DOS (> 1.0)

Ecriture de plusieurs enregistrements consécutifs dans un fichier, à partir de l'enregistrement spécifié.

Entrée :

AH 	= 28h

CX 	= Nombre d'enregistrements à écrire

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Enregistrements tous écrits

= 1 : Support (disquette/disque dur) plein

= 2 : Débordement de segment

CX 	= Nombre d'enregistrements écrits

Remarques :

·	Cette fonction ne doit être appelée qu'après que le fichier ait été ouvert à travers le FCB indiqué.

·	L'adresse du premier enregistrement à écrire doit être spécifiée à partir de la cellule de mémoire 21h du FCB.

·	La taille de chaque enregistrement est inscrite dans le FCB.

·	Les enregistrements sont transférés de la DTA dans le fichier. Si celle-ci n'est pas assez grande, il convient de la déplacer auparavant vers un buffer utilisateur à l'aide de la fonction 1Ah.

·	Après appel de cette fonction, le pointeur de fichier est dirigé automatiquement à la suite du dernier enregistrement écrit. Le numéro d'enregistrement est en outre incrémenté à raison du nombre d'enregistrements écrits, de sorte qu'il désigne l'enregistrement suivant le dernier enregistrement écrit.

·	L'erreur 2 se produit si la DTA est située à la fin d'un segment et que l'enregistrement à écrire est conduit, de ce fait, à dépasser la limite du segment.

·	Le contenu des registres AH, BX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 29h    Inscrire un nom de fichier dans FCB     DOS (> 1.0)

Cette fonction inscrit dans les champs appropriés du FCB un nom de fichier fourni sous forme de chaîne ASCII et qui peut contenir une désignation de périphérique, un nom de fichier et une extension de fichier.

Entrée :

AH 	= 29h

DS 	= Adresse de segment du nom de fichier dans la mémoire

SI 	= Adresse d'offset du nom de fichier dans la mémoire

ES 	= Adresse de segment du FCB

DI	= Adresse d'offset du FCB

AL 	= Paramètres de transmission

Bit 1 = 	1 : La désignation de périphérique dans le FCB ne sera modifiée que si le nom de fichier transmis contient une désignation de périphérique.

0: La désignation de périphérique sera modifiée en tout état de cause. Si le nom de fichier transmis ne comporte pas de désignation de périphérique, la valeur 0 (lecteur actuel) sera inscrite dans le FCB.

Bit 2 =	1 : Le nom de fichier dans le FCB ne sera modifié que si le nom de fichier transmis contient un nom de fichier.

0: Le nom de fichier sera modifié en tout état de cause. Si le nom de fichier transmis ne comporte pas de nom de fichier, le nom de fichier sera rempli d'espaces (code ASCII 32) dans le FCB.

Bit 3 =	1 : L'extension de fichier dans le FCB ne sera modifiée que si le nom de fichier transmis contient une extension de fichier.

0: L'extension de fichier sera modifiée en tout état de cause. Si le nom de fichier transmis ne comporte pas d'extension de fichier, ce champ sera rempli d'espaces (code ASCII 32) dans le FCB.

Tous les autres bits doivent contenir la valeur 0.

Sortie :

AL	= 0 : Le nom de fichier transmis ne comportait pas de jokers

= 1 : Le nom de fichier transmis comportait des jokers

= 255 : La désignation de périphérique spécifiée est incorrecte.

DS	= Adresse de segment du premier caractère après le nom de fichier dans le buffer de nom de fichier spécifié

SI	= Adresse d'offset du premier caractère après le nom de fichier dans le buffer de nom de fichier spécifié

ES	= Adresse de segment du FCB

DI	= Adresse d'offset du FCB

Remarques :

·	Le nom de fichier transmis doit être terminé par un caractère de fin (code ASCII 0).

·	Si le nom de fichier transmis comporte le joker "*", tous les emplacements à partir de la position de "*" seront remplis de jokers "?" dans le champ correspondant du FCB.

·	Le contenu des registres AH, BX, CX, DX, BP, CS, SS et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 2Ah    Lire la date    DOS (> 1.0)

Cette fonction permet de déterminer la date actuelle.

Entrée :

AH 	= 2Ah

Sortie :

AL 	= Jour de la semaine (0=Dimanche, 1=Lundi, etc.)

CX 	= Année

DH 	= Mois

DL 	= Jour

Remarques :

·	Pour obtenir la date, le DOS appelle le driver d'horloge.

·	Le contenu des registres AH, BX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 2Bh    Modifier la date    DOS (> 1.0)

Cette fonction permet de modifier la date actuelle.

Entrée :

AH 	= 2Bh

CX 	= Année

DH 	= Mois

DL 	= Jour

Sortie :

AL 	= 0 : Tout va bien

AL 	= 255 : Date impossible

Remarques :

·	La date transmise est communiquée au driver d'horloge.

·	Si le PC n'est pas doté d'une horloge en temps réel sur piles ainsi que d'un driver d'horloge soutenant ce type d'horloge, la date ne sera conservée que jusqu'à l'arrêt de l'ordinateur ou jusqu'à un nouveau lancement du système.

·	L'ancienne heure est conservée si l'heure n'est pas plausible.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 2Ch    Lire l'heure    DOS

Cette fonction permet de déterminer l'heure actuelle.

Entrée :

AH 	= 2Ch

Sortie :

CH 	= Heures

CL 	= Minutes

DH 	= Secondes

DL 	= Centièmes de seconde

Remarques :

·	Pour obtenir l'heure, le DOS appelle le driver d'horloge.

·	Le contenu des registres AX, BX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 2Dh    Modifier l'heure    DOS (> 1.0)

Cette fonction permet de modifier l'heure actuelle.

Entrée :

AH 	= 2Dh

CH 	= Heures

CL 	= Minutes

DH 	= Secondes

DL 	= Centièmes de seconde

Sortie :

AL 	= 0 : Tout va bien

AL 	= 255 : Heure impossible

Remarques :

·	L'heure transmise est communiquée au driver d'horloge.

·	Si le PC n'est pas doté d'une horloge en temps réel sur piles ainsi que d'un driver d'horloge soutenant ce type d'horloge, l'heure ne sera conservée (et actualisée) que jusqu'à l'arrêt de l'ordinateur ou jusqu'à un nouveau lancement du système.

·	L'ancienne heure est conservée si l'heure n'est pas plausible.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 2Eh    Définir le flag Verify     DOS (> 1.0)

L'indicateur de vérification définit si après une opération d'écriture sur un driver de bloc (disquette, disque dur) il convient de vérifier si les données écrites ont été correctement transmises. Cette vérification ralentit naturellement l'accès aux périphériques concernés mais accroît la sécurité de transmission des données.

Entrée :

AH 	= 2Eh

DL 	= 0

AL 	= 0 : Ne pas vérifier les données

AL 	= 1 : Vérifier les données

Sortie :

aucune

Remarques :

·	Au niveau utilisateur, ce flag peut également être manipulé à l'aide des instructions VERIFY ON et VERIFY OFF.

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Int 21h, Fct 2Fh    Lire adresse de la DTA     DOS (> 1.0)

Cette fonction fournit en résultat l'adresse de la zone de transfert disque (DTA) qui sert de buffer de données pour tous les accès de fichier soutenus par FCB.

Entrée :

AH 	= 2Fh

Sortie :

ES 	= Adresse de segment de la DTA

BX 	= Adresse d'offset de la DTA

Remarques :

·	Cette fonction permet bien de déterminer l'adresse de la DTA mais cela ne permet nullement d'en déduire la taille de la DTA.

·	Immédiatement après le lancement d'un programme, la DTA commence à la cellule de mémoire 128 du PSP et présente une longueur de 128 octets.

·	Le contenu des registres AX, CX, DX, SI, DI, BP, CS, DS, SS et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 30h    Lire le numéro de version du DOS     DOS (> 1.0)

Cette fonction permet de déterminer le numéro de version du DOS sous lequel un programme est en train de tourner.

Entrée :

AH 	= 30h

Sortie :

AL 	= Numéro de version principal

AH 	= Numéro de version complémentaire

BH	= Code OEM

Remarques :

·	Le numéro de version principal est le numéro qui apparaît avant le point. Pour le numéro de version 2.1, le numéro de version principal sera donc 2.

·	Le numéro de version complémentaire est le numéro qui apparaît après le point. Ce numéro est toujours indiqué avec deux chiffres. Pour le numéro de version 2.1, le numéro de version complémentaire sera donc 10.

·	Dans le registre BH, le numéro de code OEM n'est pas généralement explicite puisque ce code n'est pas normalisé. Cependant, la règle adoptée est que le PC-DOS (d'IBM) porte le code 0.

·	Si la valeur 0 est renvoyée dans le registre AL, c'est que le programme tourne sous la version 1 du DOS, qui ne connaissait pas encore cette fonction.

·	Le contenu des registres DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 31h    Terminer programme mais laisser en mémoire     DOS (> 1.0)

Cette fonction permet de terminer le programme exécuté et de rendre le contrôle au programme qui l'avait appelé.

Contrairement aux autres fonctions pour terminer un programme, la mémoire occupée par le programme n'est cependant pas libérée pour une utilisation ultérieure. Le programme actuel reste donc résident en mémoire.

Entrée :

AH 	= 31h

AL 	= Code de fin

DX 	= Nombre de paragraphes à réserver

Sortie :

aucune

Remarques :

·	Le code de fin dans le registre AL sert à signaler au programme d'appel si le programme qu'il avait appelé a pu ou non être correctement exécuté. Le programme d'appel peut se faire communiquer cette valeur en appelant la fonction 4Dh. Dans un programme batch, cette valeur peut être testée à l'aide des instructions ERRORLEVEL et IF.

·	Le nombre de paragraphes (groupes de 16 octets) à réserver indique combien d'octets, à partir du PSP, ne devront pas être libérés pour une utilisation ultérieure.

·	Les blocs de mémoire réservés à l'aide de la fonction 48h ne sont pas concernés par la valeur dans le registre DX car ils ne peuvent être à nouveau libérés qu'en appelant la fonction 49h.


Int 21h, Fct 32h    Placer un pointeur sur le BPD d'un lecteur quelconque        DOS (> 1.0)

Cette fonction permet de placer un pointeur sur le bloc de paramètres DOS (BPD) d'un lecteur quelconque.

Entrée :

AH 	= 32h

DL 	= code de lecteur (0 = actuel, 1 = A, 2 = B, etc.)

Sortie :

Flag Carry = 1 : Erreur

0 : Tout va bien, dans ce cas

DS:BX = Pointeur FAR sur le BPD

Remarques :

·	S'il s'agit d'un changement de disquette effectué sur le périphérique spécifié, DOS s'adresse d'abord au lecteur pour compléter le BPD avec les données concernant le lecteur et le format. En revanche, s'il s'agit de disques durs, ces informations se trouvent déjà dans la mémoire si bien qu'il n'est pas nécessaire d'accéder à un périphérique.

·	Lors de l'appel de cette fonction, une erreur ne peut survenir que si un code de lecteur erroné a été spécifié. Dans ce cas, le code d'erreur 15 sera retourné dans le registre AL.

·	La structure du bloc de paramètres DOS varie en fonction des diverses versions DOS.

·	Le contenu des registres AH, CX, DX, SI, DI, BP, CS, SS et ES n'a pas été modifié par cette fonction.


Int 21h, Fct 33h, Sous-Fct 0    Lire le flag Break     DOS (> 1.0)

L'indicateur Break définit si le fait que la touche Ctrl-C ait été actionnée doit être testé lors de tout appel d'une fonction DOS ou seulement lorsqu'est appelée une des fonctions d'entrée et sortie de caractères. Lorsque la touche Ctrl-C est actionnée et que cet événement est effectivement testé, cela déclenche une interruption 23h. Cette fonction permet donc de lire la teneur actuelle de ce flag.

Entrée :

AH 	= 33h

AL 	= 0

Sortie :

DL 	= 0 : Test seulement pour l'entrée et sortie de caractères

DL 	= 1 : Test lors de tout appel de fonction

Remarques :

·	L'indicateur Break ne fait pas partie du bloc d'environnement d'un programme et il ne vaut donc pas uniquement pour un programme bien précis. Il affecte au contraire tous les programmes qui appellent les fonctions DOS d'entrée et sortie de caractères qui, elles-mêmes, testent l'apparition d'un caractère Ctrl-C ou le fait que la touche Break ait été actionnée.

·	Le contenu des registres AX, BX, CX, DH, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 21h, Fct 33h, Sous-Fct 1    Définir le flag Break     DOS (> 1.0)

Le flag Break définit si le fait que la touche Ctrl-C ait été actionnée doit être testé lors de tout appel d'une fonction DOS ou seulement lorsqu'est appelée une des fonctions d'entrée et sortie de caractères. Lorsque la touche Ctrl-C est actionnée et que cet événement est effectivement testé, cela déclenche une interruption 23h. Cette fonction permet donc de mettre ou annuler ce flag.

Entrée :

AH 	= 33h

AL 	= 1

DL 	= 0 : Test seulement pour l'entrée et sortie de caractères

DL 	= 1 : Test lors de tout appel de fonction

Sortie :

aucune

Remarques :

·	Le flag Break ne fait pas partie du bloc d'environnement d'un programme et il ne vaut donc pas uniquement pour un programme bien précis. Il affecte au contraire tous les programmes qui appellent les fonctions DOS d'entrée et sortie de caractères, qui elles-mêmes testent l'apparition d'un caractère Ctrl-C ou le fait que la touche Break ait été actionnée.

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Int 21h, Fct 34h    Placer un pointeur sur le flag INDOS    DOS (> 2.0)

Après appel de cette fonction, DOS communique l'adresse de l'octet d'activité du DOS qui est particulièrement utile pour les programmes résidents.

Entrée :

AH 	= 34h

Sortie :

ES:BX = Pointeur FAR sur le flag INDOS

Remarques :

·	En ce qui concerne le flag INDOS, il s'agit d'un octet qui compte les appels récursifs de l'interruption 21h. Il contient la valeur 0 tant que DOS n'est pas actif et c'est pourquoi les fonctions DOS peuvent être appelées à partir d'un programme résident. Si le flag contient cependant une valeur supérieure à 0, DOS est alors justement actif puisqu'une valeur supérieure à 1 symbolise un nombre correspondant d'appels récursifs. Dans ce cas, DOS ne peut pas être interrompu par un appel de fonction émanant d'un programme TSR au risque de provoquer un plantage dans le pire des cas.

·	Le contenu des registres CX, DX, SI, DI, BP, CS, DS, SS n'est pas modifié par cette fonction.


Int 21h, Fct 35h    Lire le contenu d'un vecteur d'Int     DOS (> 1.0)
Int 21h, Fct 35h    Lire le contenu d'un vecteur d'Interruption     DOS (> 1.0)

Cette fonction fournit en résultat le contenu actuel d'un vecteur d'interruption et donc l'adresse de la routine d'interruption correspondante.

Entrée :

AH 	= 35h

AL 	= Numéro d'interruption

Sortie :

ES 	= Adresse de segment de la routine d'interruption

BX 	= Adresse d'offset de la routine d'interruption

Remarques :

·	Pour garantir la compatibilité de vos programmes avec les versions futures du DOS, il est préférable d'appeler cette fonction pour lire un vecteur d'interruption plutôt que de lire le contenu de ce vecteur directement dans la table de vecteurs d'interruption.

·	Le contenu des registres AX, CX, DX, SI, DI, BP, CS, DS, SS et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 36h    Lire l'espace disque disponible    DOS (> 1.0)

Cette fonction renvoie des informations sur le périphérique spécifié (c'est-à-dire le driver de bloc spécifié) qui permettent de calculer l'espace disque encore libre.

Entrée :

AH 	= 36h

DL 	= Code de périphérique

Sortie :

AX 	= 65535 : Périphérique absent, sinon nombre de secteurs par cluster

BX 	= Nombre de clusters libres

CX 	= Nombre d'octets par secteur

DX 	= Nombre total de clusters du périphérique

Remarques :

·	Pour le code de périphérique transmis, 0 représente le lecteur actuel, 1 le lecteur A, 2 le lecteur B, etc.

·	La mémoire encore libre sur le support se calcule en multipliant le nombre d'octets par secteur par le nombre de secteurs par cluster puis par le nombre de clusters libres.

·	Le contenu des registres SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 37h, Sous-Fct 00h    Lire le code pour paramètres de ligne de commande        DOS (> 2.0)

Le caractère valable pour tous les commutateurs de paramètres lors de l'appel d'un programme peut être obtenu à l'aide de cette fonction.

Entrée :

AH 	= 37h

AL 	= 00h

Sortie :

DL 	= code ASCII du caractère

Remarques :

·	En règle générale, on admet que le caractère servant à introduire les paramètres dans une ligne de commande soit le signe de la division (/). Par conséquent, rares sont les programmes qui demandent le caractère de commutation des lignes de commande et peuvent ne pas réagir à la modification de ce caractère.

·	Le contenu des registres BX, CX, DH, SI, DI, BP, CS, DS, SS, ES n'est pas modifié par cette fonction.


Int 21h, Fct 37h, Sous-Fct 01h    Définir le caractère de commutateur de ligne de commande         DOS (> 2.0)

L'appel de cette fonction permet de définir le caractère que tous les commutateurs de lignes de commande doivent reconnaître lors de l'appel d'un programme.

Entrée :

AH 	= 37h

AL 	= 01h

DL 	= code ASCII du caractère

Sortie :

Flag Carry :	0, caractère accepté

1, Erreur

Remarques :

·	Actuellement, les caractères autorisés pour introduire les paramètres dans une ligne de commande sont (=), (/) et (-). Les autres caractères ne sont pas acceptés et sont rejetés.

·	Vu que les programmes utilisant la sous-fonction 00h sont peu nombreux et que le caractère adopté comme commutateur de lignes de commande est toujours le caractère (/), l'appel de la sous-fonction 01h n'agit que sur de rares programmes. Mais on peut citer les divers programmes DOS internes et externes qui accordent une importance à ce caractère.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS, ES n'est pas modifié par cette fonction.


Int 21h, Fct 38h    Lire les symboles et formats caractéristiques du pays         DOS (Version 2)

Cette fonction permet de déterminer les différents paramètres caractéristiques du pays qui a été spécifié avec l'instruction COUNTRY dans le fichier CONFIG.SYS.

Entrée :

AH 	= 38h

AL 	= 0

DS 	= Adresse de segment d'un buffer

DX 	= Adresse d'offset d'un buffer

Sortie :

aucune

Remarques :

·	Avant d'appeler cette fonction, nous vous conseillons de déterminer à l'aide de la fonction 48 quelle version du DOS est utilisée, pour que vous puissiez tenir compte des différences entre les versions 2 et 3 dans la définition des registres pour l'appel et le retour de cette fonction.

·	Le buffer doit avoir une taille de 32 octets au moins. La fonction y inscrira les différents paramètres caractéristiques du pays.

·	Les différents octets du buffer contiennent, après appel de la fonction, les informations suivantes :

Octets 0 - 1 : 	Format de date

0 = USA : Mois-Jour-Année

1 = Europe : Jour-Mois-Année

2 = Japon : Année-Mois-Jour

Octet 2 :	Code ASCII du symbole de la monnaie

Octet 3 :	0

Octet 4 :	Code ASCII du caractère de millier

Octet 5 :	0

Octet 6 :	Code ASCII du symbole décimal

Octet 7 :	0

Octets 8 - 31 : 	réservés

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Int 21h, Fct 38h, Sous-Fct 0    Lire les symboles et formats caractéristiques d'un pays        DOS (> la version 3)

Cette fonction permet de déterminer les différents paramètres caractéristiques d'un pays. Elle permet d'obtenir aussi bien les paramètres pour le pays qui a été spécifié avec l'instruction COUNTRY dans le fichier CONFIG.SYS que ceux correspondant à n'importe quel autre pays. Les différents paramètres sont placés par la fonction dans le buffer qui lui a été transmis.

Entrée :

AH 	= 38h

AL	= 0

DS 	= Adresse de segment d'un buffer

DX 	= Adresse d'offset d'un buffer

AL 	= 0 : Lire paramètre pour le pays actuel

AL 	= 1 - 254 : Code du pays dont il s'agit de lire les paramètres caractéristiques

AL 	= 255 : Le code du pays dont il s'agit de lire les paramètres caractéristiques figure dans le registre BX

Sortie :

Flag Carry = 0 tout va bien.

Flag Carry = 1 : Code du pays incorrect

Remarques :

·	Avant d'appeler cette fonction, nous vous conseillons de déterminer à l'aide de la fonction 48 quelle version du DOS est utilisée, pour que vous puissiez tenir compte des différences entre les versions 2 et 3 dans la définition des registres pour l'appel et le retour de cette fonction.

·	Le buffer doit avoir une taille de 34 octets au moins. La fonction y inscrira les différents paramètres caractéristiques du pays.

·	Les différents octets du buffer contiennent, après appel de la fonction, les informations suivantes :

Octets 0 - 1 : 	Format de date

0 = USA : Mois-Jour-Année

1 = Europe : Jour-Mois-Année

2 = Japon : Année-Mois-Jour

Octets 2 - 6 : 	Symbole de la monnaie (chaîne ASCII terminée par un caractère de fin)

Octet 7 :	Code ASCII du caractère de millier

Octet 8 :	0

Octet 9 :	Code ASCII du symbole décimal

Octet 10 : 	0

Octet 11 : 	Code ASCII du séparateur dans la date

Octet 12 : 	0

Octet 13 : 	Code ASCII du séparateur de l'heure

Octet 14 : 	0

Octet 15 : 	Format de la monnaie

Bit 0 = 0 : Symbole de la monnaie avant la valeur

Bit 0 = 1 : Symbole de la monnaie après la valeur

Bit 1 = 0 : Pas d'espace entre la valeur et le symbole de la monnaie

Bit 1 = 1 : Un espace entre la valeur et le symbole de la monnaie

Octet 16 : 	Précision (nombre de chiffres après le point décimal)

Octet 17 : 	Format horaire

Bit 0 = 0 : Horloge 12 heures

Bit 0 = 1 : Horloge 24 heures

Octets 18 - 21 : 	Adresse d'une routine de conversion de caractères (voir plus bas)

Octets 22 - 33 : 	réservés

·	Le contenu des adresses 18 à 21 représente les adresses d'offset et de segment d'une procédure FAR qui sert à convertir en majuscules les caractères spéciaux d'un pays, dans le jeu de caractères du PC. Cette routine considère le contenu du registre AL comme le code d'une minuscule à convertir en majuscule. Si une majuscule de ce type existe, elle figurera dans le registre AL après appel de la fonction. Si cette majuscule n'existe pas, par contre, le contenu du registre AL restera inchangé. Nous pourrions par exemple utiliser cette routine pour convertir un é en E, par exemple.

·	Le contenu des registres AX, BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 38h, Sous-Fct 1    Définir le pays    DOS (> la version 3)

Cette fonction permet de choisir le pays actuel. Ainsi, sont du même coup fixés différents paramètres caractéristiques du pays. Ces paramètres peuvent être lus à l'aide de la sous-fonction 0 de cette même fonction. Par rapport aux fonctions précédentes du DOS qui prévoyaient que le pays ne pouvait être choisi qu'à l'aide de l'instruction COUNTRY dans le fichier CONFIG.SYS, cette fonction présente l'avantage de permettre de déterminer ou changer le pays, même après le lancement du système.

Entrée :

AH 	= 38h

DX 	= 65535

AL 	= 1 - 254 : Numéro de pays

AL 	= 255 : Numéro supérieur à 254, auquel cas

BX 	= Numéro du pays

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Code du pays incorrect

Remarques :

·	Avant d'appeler cette fonction, il est préférable de déterminer la version actuelle du DOS à l'aide de la fonction 48, pour s'assurer que cette fonction est réellement disponible.

·	Il n'est pas possible de définir séparément les différents paramètres d'un pays. Vous pouvez seulement fixer le code du pays et le DOS définira automatiquement les paramètres prédéfinis pour ce pays.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 39h    Créer sous-répertoire     DOS (> 1.0)

Cette fonction permet de créer un nouveau sous-répertoire sur le périphérique spécifié.

Entrée :

AH 	= 39h

DS 	= Adresse de segment du chemin du sous-répertoire

DX 	= Adresse d'offset du chemin du sous-répertoire

Sortie :

Flag Carry =0 : Nouveau sous-répertoire créé

Flag Carry =1 : Erreur, dans ce cas

AX = 3 : Chemin non trouvé

AX = 5 : Accès refusé

Remarques :

·	Le chemin de sous-répertoire transmis est une chaîne ASCII terminée par un caractère de fin (code ASCII 0).

·	Si le chemin de sous-répertoire comporte une désignation de périphérique, l'accès se fera sur le périphérique spécifié, sinon le sous-répertoire sera créé sur le périphérique actuel.

·	Une erreur peut se produire si un élément du chemin n'existe pas, si un sous-répertoire existe déjà sous le nom spécifié ou bien si le sous-répertoire devait être créé dans le répertoire racine alors que ce dernier est déjà plein.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 3Ah    Supprimer un sous-répertoire     DOS (> 1.0)

Cette fonction permet de supprimer un sous-répertoire sur le périphérique spécifié.

Entrée :

AH 	= 3Ah

DS 	= Adresse de segment du chemin du sous-répertoire

DX 	= Adresse d'offset du chemin du sous-répertoire

Sortie :

Flag Carry =0 : Sous-répertoire supprimé

Flag Carry =1 : Erreur, dans ce cas

AX = 3 : Chemin non trouvé

AX = 5 : Accès refusé

Remarques :

·	Le chemin de sous-répertoire transmis est une chaîne ASCII terminée par un caractère de fin (code ASCII 0).

·	Si le chemin de sous-répertoire comporte une désignation de périphérique, l'accès se fera sur le périphérique spécifié, sinon le sous-répertoire sera supprimé sur le périphérique actuel.

·	Une erreur peut se produire si un élément du chemin n'existe pas, si le sous-répertoire est le sous-répertoire actuel ou bien si des fichiers figurent encore dans le sous-répertoire à supprimer.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 3Bh    Défnir le sous-répertoire en cours    DOS (> 1.0)

Cette fonction permet d'activer un sous-répertoire sur le périphérique spécifié.

Entrée :

AH 	= 3Bh

DS 	= Adresse de segment du chemin du sous-répertoire

DX 	= Adresse d'offset du chemin du sous-répertoire

Sortie :

Flag Carry =0 : Sous-répertoire indiqué devient le sous-répertoire en cours

Flag Carry =1 : Erreur, dans ce cas

AX = 3 : Chemin non trouvé

Remarques :

·	Le chemin de sous-répertoire transmis est une chaîne ASCII terminée par un caractère de fin (code ASCII 0).

·	Si le chemin de sous-répertoire comporte une désignation de périphérique, l'accès se fera sur le périphérique spécifié, sinon le sous-répertoire actuel sera modifié sur le périphérique actuel.

·	Une erreur peut se produire si un élément du chemin n'existe pas.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 3Ch    Créer ou vider fichier (Handle)     DOS (> 1.0)

Après l'appel de cette fonction, le DOS examine si le fichier spécifié existe déjà. Si c'est le cas, ce fichier est vidé et son contenu antérieur est irrémédiablement perdu. Si cependant le fichier spécifié n'existe pas encore, il est créé.

Entrée :

AH 	= 3Ch

CX 	= Attribut de fichier

Bit 0 = 1 : Fichier peut seulement être lu

Bit 1 = 1 : Fichier caché

Bit 2 = 1 : Fichier système

DS 	= Adresse de segment du nom de fichier

DX 	= Adresse d'offset du nom de fichier

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas AX = Handle du fichier

Flag Carry =1 : Erreur, dans ce cas AX = code d'erreur :

3 : Chemin non trouvé

4 : Plus de handle libre

5 : Accès refusé

Remarques :

·	Les différents bits de l'attribut de fichier peuvent parfaitement être combinés.

·	Le nom de fichier doit être fourni sous forme d'une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Ce nom de fichier peut comporter une désignation de périphérique, une désignation de chemin complète et un nom de fichier proprement dit mais il ne doit pas contenir de jokers. Si la désignation de périphérique ou la désignation de chemin sont omises, l'accès se fera sur le périphérique actuel ou sur le répertoire actuel.

·	Une erreur peut apparaître lors de l'appel de cette fonction si un élément de la désignation de chemin n'existe pas, si le fichier est censé être créé dans le répertoire racine alors que ce dernier est déjà plein ou encore si un fichier existe déjà sous ce nom et qu'il ne peut être vidé parce qu'il est protégé contre l'écriture (bit 0 de l'attribut de fichier = 1).

·	Si l'appel de la fonction s'est conclu sans problème, toutes les autres fonctions handle pourront être appelées à l'aide du handle renvoyé car le fichier a aussi été ouvert.

·	Le pointeur de fichier est dirigé sur le premier octet du fichier.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 3Dh    Ouvrir fichier (Handle)    DOS (> 1.0)

Cette fonction permet d'ouvrir un fichier déjà existant pour pouvoir y accéder à l'aide des autres fonctions.

Entrée :

AH 	= 3Dh

AL 	= Mode d'accès

Bits 0 - 3 : Autorisation de lecture/écriture

0000(b) = 	Fichier peut seulement être lu

0001(b) = 	Fichier peut seulement être écrit

0010(b) = 	Fichier peut être lu ou écrit

Bits 4 - 6 : Mode de partage

000(b) = 	seul le programme actuel peut accéder au fichier (mode FCB)

001(b) = 	seul le programme actuel peut accéder au fichier

010(b) = 	un autre programme peut lire le fichier mais non y écrire

011(b) = 	un autre programme peut écrire dans le fichier mais non le lire

100(b) = 	un autre programme peut lire et écrire le fichier

Bit 7 : Flag Handle

0 = 	le programme-enfant du programme actuel peut accéder au handle de ce fichier

1 = 	seul le programme actuel peut accéder au handle de ce fichier

DS 	= Adresse de segment du nom de fichier

DX 	= Adresse d'offset du nom de fichier

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas AX = Handle du fichier

Flag Carry =1 : Erreur, dans ce cas AX = code d'erreur

1 : Pas de logiciel de gestion de partage (par ex SHARE)

2 : Fichier non trouvé

3 : Chemin non trouvé ou fichier n'existe pas

4 : Plus de handle libre

5 : Accès refusé

12 : Mode d'accès non autorisé

Remarques :

·	Le nom de fichier doit être fourni sous forme d'une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Ce nom de fichier peut comporter une désignation de périphérique, une désignation de chemin complète et un nom de fichier proprement dit mais il ne doit pas contenir de jokers. Si la désignation de périphérique ou la désignation de chemin sont omises, l'accès se fera sur le périphérique actuel ou sur le répertoire actuel.

·	Si l'appel de la fonction s'est conclu sans problème, toutes les autres fonctions handle pourront être appelées à l'aide du handle renvoyé.

·	Le pointeur de fichier est dirigé sur le premier octet du fichier.

·	Sous la version 2 du DOS, seuls les bits 0 à 2 du mode d'accès sont significatifs. Il convient de régler tous les autres bits sur 0 pour garantir une bonne exécution de l'appel de fonction même sous la version 3.

·	Le mode de partage des bits 4 à 6 n'a d'intérêt, même sous la version 3 du DOS, qu'à condition que le fichier figure sur une mémoire de masse faisant partie d'un réseau. Dans ce cas, ces 3 bits définissent si, et si oui dans quelles conditions, d'autres programmes, tournant sur d'autres PC du réseau, pourront accéder au fichier pendant qu'il sera ouvert à la suite de cet appel de fonction.

·	L'erreur 12 ne peut apparaître que sous la version 3 du DOS, et uniquement à l'intérieur d'un réseau, si le fichier a déjà été ouvert par un autre programme et s'il a été décidé qu'aucun autre programme ne peut y accéder pour le moment.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 3Eh    Fermer fichier (Handle)    DOS (> 1.0)

Cette fonction permet de fermer un fichier préalablement ouvert. Auparavant, toutefois, toutes les données qui doivent être écrites dans le fichier mais qui figurent encore dans les buffers internes du DOS sont écrites dans le fichier. Si le fichier a été modifié, l'entrée du répertoire correspondant à ce fichier est encore actualisée, c'est-à-dire que la nouvelle taille du fichier y est inscrite ainsi que les date et heure actuelle, en tant que date et heure de la dernière modification.

Entrée :

AH 	= 3Eh

BX 	= Handle à fermer

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas

AX = 6 : Handle non autorisé ou fichier correspondant non ouvert

Remarques :

·	Il faut veiller à ne pas appeler par mégarde cette fonction avec le numéro d'un des handles prédéfinis (0 à 4) car vous risqueriez ainsi de fermer par exemple le périphérique d'entrée ou le périphérique de sortie standard, la conséquence étant alors que vous ne pourriez plus recevoir de caractères du clavier ou que vous ne pourriez plus en afficher sur l'écran.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 3Fh    Lire fichier (Handle)    DOS (> 1.0)

Cette fonction permet de lire, à l'aide d'un handle, un nombre déterminé de caractères dans un fichier (ou sur un périphérique) préalablement ouvert. Ces caractères sont transférés dans un buffer. L'opération de lecture commence sur la position actuelle du pointeur de fichier.

Entrée :

AH 	= 3Fh

BX 	= Handle du fichier ou du périphérique

CX 	= Nombre d'octets à lire

DS 	= Adresse de segment du buffer

DX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas AX = nombre d'octets lus

Flag Carry =1 : Erreur, dans ce cas AX = code d'erreur

5 : Accès refusé

6 : Handle non autorisé ou fichier non ouvert

Remarques :

·	Cette fonction permet non seulement de lire des caractères sur un fichier mais aussi sur un périphérique comme le périphérique d'entrée standard (le clavier), qui porte le handle 0.

·	Si le flag Carry est annulé après appel de cette fonction mais que le registre AX contient la valeur 0, cela signifie que le pointeur de fichier se trouvait déjà sur la fin du fichier avant même que cette fonction n'ait été appelée. Dans ce cas, aucune donnée n'a pu être lue.

·	Si le flag Carry est annulé après appel de cette fonction mais que le registre AX contient une valeur inférieure à celle du registre CX avant appel de la fonction, cela signifie que le nombre d'octets voulu n'a pu être lu parce que la fin du fichier a été atteinte auparavant.

·	Après appel de cette fonction, le pointeur de fichier est dirigé sur le premier octet immédiatement à la suite du dernier octet lu.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 40h    Ecrire dans fichier (Handle)     DOS (> 1.0)

Cette fonction permet d'écrire, à l'aide d'un handle, un nombre déterminé de caractères dans un fichier (ou sur un périphérique) préalablement ouvert. Ces caractères sont tirés d'un buffer. L'opération d'écriture commence à la position actuelle du pointeur de fichier.

Entrée :

AH 	= 40h

BX 	= Handle du fichier ou du périphérique

CX 	= Nombre d'octets à écrire

DS 	= Adresse de segment du buffer

DX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas AX = nombre d'octets écrits

Flag Carry =1 : Erreur, dans ce cas AX = code d'erreur

5 : Accès refusé

6 : Handle non autorisé ou fichier non ouvert

Remarques :

·	Cette fonction permet non seulement d'écrire des caractères sur un fichier mais aussi sur un périphérique comme le périphérique de sortie standard (l'écran), qui porte le handle 1.

·	Si le flag Carry est annulé après appel de cette fonction mais que le registre AX contient la valeur 0, cela signifie que le périphérique sur lequel figure le fichier était déjà plein avant même que cette fonction n'ait été appelée.

·	Si le flag Carry est annulé après appel de cette fonction mais que le registre AX contient une valeur inférieure à celle du registre CX avant appel de la fonction, cela signifie que le nombre d'octets voulu n'a pu être écrit parce que le périphérique sur lequel figure le fichier a été rempli auparavant.

·	Après appel de cette fonction, le pointeur de fichier est dirigé sur le premier octet immédiatement à la suite du dernier octet écrit.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 41h    Supprimer fichier (Handle)    DOS (> 1.0)

Cette fonction permet de supprimer le fichier dont le nom est transmis à la fonction.

Entrée :

AH 	= 41h

DS 	= Adresse de segment du nom de fichier

DX 	= Adresse d'offset du nom de fichier

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas AX = code d'erreur

2 : Fichier non trouvé

5 : Accès refusé

Remarques :

·	Le nom de fichier doit être fourni sous forme d'une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Ce nom de fichier peut comporter une désignation de périphérique, une désignation de chemin complète et un nom de fichier proprement dit mais il ne doit pas contenir de jokers. Si la désignation de périphérique ou la désignation de chemin sont omises, l'accès se fera sur le périphérique actuel ou sur le répertoire actuel.

·	Une erreur apparaît si un élément de la spécification de chemin n'existe pas ou si le fichier porte l'attribut "lecture seulement", auquel cas il n'est possible ni d'y écrire ni de le supprimer. Cet attribut peut toutefois être modifié à l'aide de la fonction 43h.

·	Cette fonction ne permet de supprimer ni des sous-répertoires ni des noms de volumes.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 42h    Déplacer le pointeur de fichier (handle)    DOS (> 1.0)

Cette fonction permet de déplacer le pointeur de fichier d'un fichier déjà ouvert, à l'aide de son handle. On obtient ainsi une possibilité d'accès sélectif puisque les différents enregistrements ne sont plus nécessairement lus de façon séquentielle, c'est-à-dire dans l'ordre dans lequel ils sont disposés. La nouvelle position du pointeur de fichier n'est pas spécifiée de façon absolue mais sous forme d'une distance (offset) par rapport à la position actuelle, par rapport au début du fichier ou encore par rapport à la fin du fichier. Ce déplacement est défini par un nombre 32 bits.

Entrée :

AH 	= 42h

AL 	= Code du déplacement

0 : Le déplacement se rapporte au début du fichier

1 : La distance se rapporte à la position actuelle du pointeur de fichier

2 : Le déplacement se rapporte à la fin du fichier

BX 	= Handle

CX 	= Mot fort du déplacement

DX 	= Mot faible du déplacement

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas

DX = Mot fort du pointeur de fichier

AX = Mot faible du pointeur de fichier

Flag Carry =1 : dans ce cas AX = code d'erreur

1 : Code de déplacement non autorisé

6 : Handle non autorisé ou fichier non ouvert

Remarques :

·	Si vous travaillez avec les codes d'offset 1 et 2, le déplacement spécifié peut aussi être négatif, soit pour ramener le pointeur de fichier en arrière, soit pour le placer avant le début du fichier. Il est ainsi possible de régler le pointeur de fichier avant la fin du fichier. Dans ce cas, une erreur ne sera cependant signalée qu'au cours du prochain accès en lecture ou écriture à ce fichier.

·	Quel que soit le code de déplacement transmis pour appeler la fonction, la position du pointeur de fichier renvoyée après appel de la fonction se rapporte toujours au début du fichier.

·	Cette fonction permet aussi de déterminer la taille d'un fichier si on lui transmet 2 comme code de distance et 0 comme distance. Le pointeur de fichier étant ainsi amené sur le dernier octet du fichier, sa position, qui est renvoyée au programme ayant appelé la fonction, correspondra au nombre d'octets et donc à la taille du fichier.

·	Le contenu des registres BX, CX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 43h, Sous-Fct 0    Lire l'attribut d'un fichier    DOS (> 1.0)

Cette fonction permet de lire l'attribut d'un fichier quelconque.

Entrée :

AH 	= 43h

AL 	= 0

DS 	= Adresse de segment du nom de fichier

DX 	= Adresse d'offset du nom de fichier

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas CX = Attribut du fichier

Bit 0 = 1 : 	Fichier doit seulement être lu mais on ne peut rien y écrire

Bit 1 = 1 : 	Fichier est caché (ne sera pas affiché par DIR)

Bit 2 = 1 : 	Fichier est un fichier système

Bit 5 = 1 : 	Fichier a été modifié depuis le dernier archivage

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

2 : Fichier non trouvé

3 : Chemin non trouvé

Remarques :

·	Le nom de fichier doit être fourni sous forme d'une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Il peut comporter une désignation de périphérique, une spécification de chemin complète ainsi qu'un nom de fichier proprement dit, mais pas de jokers. Si la désignation de périphérique ou la spécification de chemin sont omises, l'accès se fera sur le périphérique actuel ou sur le répertoire actuel.

·	Une erreur apparaîtra si un élément de la spécification de chemin ou le fichier lui-même n'existe pas.

·	Le contenu des registres BX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 43h, Sous-Fct 1    Définir l'attribut d'un fichier    DOS (> 1.0)

Cette fonction permet de régler l'attribut d'un fichier quelconque.

Entrée :

AH 	= 43h

AL 	= 1

CX 	= Attribut du fichier

Bit 0 = 1 : 	Fichier doit seulement être lu, on ne peut y écrire

Bit 1 = 1 : 	Fichier est caché (ne sera pas affiché par DIR)

Bit 2 = 1 : 	Fichier est un fichier système

Bit 3 = 0 :	Volume

Bit 4 = 0 :	Répertoire	Bit 3 : 0(b)

Bit 5 = 1 : 	Fichier a été modifié depuis le dernier archivage

DS 	= Adresse de segment du nom de fichier

DX 	= Adresse d'offset du nom de fichier

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

2 : Fichier non trouvé

3 : Chemin non trouvé

5 : Attribut ne peut pas être modifié

Remarques :

·	Le nom de fichier doit être fourni sous forme d'une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Il peut comporter une désignation de périphérique, une spécification de chemin complète ainsi qu'un nom de fichier proprement dit, mais pas de jokers. Si la désignation de périphérique ou la spécification de chemin sont omises, l'accès se fera sur le périphérique actuel ou sur le répertoire actuel.

·	Une erreur apparaîtra si un élément de la spécification de chemin ou le fichier lui-même n'existe pas.

·	Cette fonction ne permet pas de manipuler les sous-répertoires ni les noms de volumes. C'est pourquoi les bits 3 et 4 de l'attribut de fichier doivent valoir 0 lors de l'appel de la fonction. Si on tente malgré tout d'accéder à un sous-répertoire ou à un nom de volume, le code d'erreur 5 sera renvoyé.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 21h, Fct 44h, Sous-Fct 0    Accès à un driver de périphérique (IOCTL) :     Lire l'attribut de périphérique    DOS (> 1.0)

Cette fonction permet de lire l'attribut de périphérique d'un driver de caractère, qui est stocké dans l'en-tête de ce driver.

Entrée :

AH 	= 44h

AL 	= 0

BX 	= Handle

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas DX = Attribut de périphérique

Bit 14 =	 1 : 	Le driver peut traiter des chaînes de caractères de commande particulières à travers les sous-fonctions 2 et 3 de la fonction IOCTL.

Bit 7 = 	1 :	Le driver est un driver de caractères.

Bit 5 = 	0 :	Le driver travaille en mode Cooked.

1 :	Le driver travaille en mode Raw.

Bit 3 = 	1 :	Le driver est un driver d'horloge.

Bit 2 = 	1 :	Le driver est le driver NUL.

Bit 1 = 	1 :	Le driver est le driver de sortie console (l'écran).

Bit 0 = 	1 :	Le driver est le driver d'entrée console (le clavier).

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

6 : Handle non ouvert ou qui n'existe pas

Remarques :

·	C'est un handle associé au périphérique voulu qui doit être spécifié et non le nom du driver de caractères appelé. Il peut s'agir par exemple de l'un des 5 handles prédéfinis (numéros 0 à 4). Il est toutefois également possible d'ouvrir au préalable un périphérique déterminé à l'aide de la fonction Ouvrir (fonction numéro 3Dh) puis de transmettre ce handle à la fonction. Comme l'entrée et la sortie standard (Les handles 0 et 1) peuvent avoir été redirigées, cette méthode permet de s'assurer que l'accès se fera bien sur le périphérique voulu.

·	Si le bit 7 de l'attribut de périphérique ne vaut pas 1, c'est que le driver appelé n'est pas un driver de caractères et la signification des différents bits ne correspond donc pas à celle d'un driver de caractères.

·	Le contenu des registres BX, CX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 1    Accès à un driver de périphérique (IOCTL) :     Définir l'attribut de périphérique    DOS (> 1.0
Int 21h, Fct 44h, Sous-Fct 1    Accès à un driver de périphérique (IOCTL) :     Définir l'attribut de périphérique    DOS (> 1.0)

Cette fonction permet de définir l'attribut de périphérique d'un driver de caractère, qui est stocké dans l'en-tête de ce driver.

Entrée :

AH 	= 44h

AL 	= 1

BX 	= Handle

DX 	= Attribut de périphérique

Bit 14 = 	1 : 	Le driver peut traiter des chaînes de caractères de commande particulières à travers les sous-fonctions 2 et 3  de la fonction IOCTL.

Bit 7 = 	1 :	Le driver est un driver de caractères.

Bit 5 = 	0 :	Le driver travaille en mode Cooked.

1 :	Le driver travaille en mode Raw.

Bit 3 = 	1 :	Le driver est un driver d'horloge.

Bit 2 = 	1 :	Le driver est le driver NUL.

Bit 1 = 	1 :	Le driver est le driver de sortie de la console (l'écran).

Bit 0 = 	1 :	Le driver est le driver d'entrée de la console (le clavier).

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

6 : Handle non ouvert ou qui n'existe pas

Remarques :

·	C'est un handle associé au périphérique voulu qui doit être spécifié et non le nom du driver de caractères appelé. Il peut s'agir par exemple de l'un des 5 handles prédéfinis (numéros 0 à 4). Il est toutefois également possible d'ouvrir au préalable un périphérique déterminé à l'aide de la fonction Ouvrir (fonction numéro 3Dh) puis de transmettre ce handle à la fonction. Comme l'entrée et la sortie standard (Les handles 0 et 1) peuvent avoir été redirigées, cette méthode permet de s'assurer que l'accès se fera bien sur le périphérique voulu.

·	Pour modifier différents bits de l'attribut de périphérique à l'aide de cette fonction, il est préférable de lire tout d'abord cet attribut de périphérique à l'aide de la fonction 0. Vous pouvez alors manipuler les bits voulus puis renvoyer l'attribut de périphérique au driver de périphérique, à l'aide de cette fonction.

·	Cette fonction est surtout utile pour faire passer un driver de caractères du mode Raw au mode Cooked, et inversement, à l'aide du bit 5 de l'attribut de périphérique.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 2    Accès à un driver de périphérique (IOCTL) :     Recevoir des données d'un driver de caractères
Int 21h, Fct 44h, Sous-Fct 2    Accès à un driver de périphérique (IOCTL) :     Recevoir des données d'un driver   DOS (> 1.0)

En appelant cette fonction, un programme d'application peut recevoir des données d'un driver de caractères, de façon très directe. Le nombre d'octets à lire, qui seront copiés par le driver dans un buffer, est fixé par le programme d'appel. Le type et la structure des données ne sont pas prédéfinis par le DOS mais peuvent être définis individuellement par chaque driver.

Entrée :

AH 	= 44h

AL 	= 2

BX 	= Handle

CX 	= Nombre d'octets à lire

DS 	= Adresse de segment du buffer

DX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas

AX = Nombre d'octets transférés

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

6 : Handle non ouvert ou qui n'existe pas

Remarques :

·	C'est un handle associé au périphérique voulu qui doit être spécifié et non le nom du driver de caractères appelé. Il peut s'agir par exemple de l'un des 5 handles prédéfinis (numéros 0 à 4). Il est toutefois également possible d'ouvrir au préalable un périphérique déterminé à l'aide de la fonction Ouvrir (fonction numéro 3Dh) puis de transmettre ce handle à la fonction. Comme l'entrée et la sortie standard (Les handles 0 et 1) peuvent avoir été redirigées, cette méthode permet de s'assurer que l'accès se fera bien sur le périphérique voulu.

·	Une erreur apparaîtra si le handle spécifié est associé à un driver de bloc et non à un driver de caractères.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 3    Accès à un driver de périphérique (IOCTL) : Envoyer des données à un driver de caractères

En appelant cette fonction, un programme d'application peut envoyer des données sur un driver de caractères, de façon très directe. Le nombre d'octets à écrire, qui seront tirés d'un buffer pour être transmis au driver, est fixé par le programme d'appel. Le type et la structure des données ne sont pas prédéfinis par le DOS mais peuvent être définis individuellement par chaque driver.

Entrée :

AH 	= 44h

AL 	= 3

BX 	= Handle

CX 	= Nombre d'octets à transmettre

DS 	= Adresse de segment du buffer

DX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas

AX = Nombre d'octets transférés

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

6 : Handle non ouvert ou qui n'existe pas

Remarques :

·	C'est un handle associé au périphérique voulu qui doit être spécifié et non le nom du driver de caractères appelé. Il peut s'agir par exemple de l'un des 5 handles prédéfinis (numéros 0 à 4). Il est toutefois également possible d'ouvrir au préalable un périphérique déterminé à l'aide de la fonction Ouvrir (fonction numéro 3Dh) puis de transmettre ce handle à la fonction. Comme l'entrée et la sortie standard (Les handles 0 et 1) peuvent avoir été redirigées, cette méthode permet de s'assurer que l'accès se fera bien sur le périphérique voulu.

·	Une erreur apparaîtra si le handle spécifié est associé à un driver de bloc et non à un driver de caractères.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 4    Accès à un driver de périphérique (IOCTL) :     Recevoir des données d'un driver de bloc    DOS
Int 21h, Fct 44h, Sous-Fct 4    Accès à un driver de périphérique (IOCTL) :     Recevoir des données d'un driver de bloc    DOS (> 1.0)

En appelant cette fonction, un programme d'application peut recevoir des données d'un driver de bloc, de façon très directe. Le nombre d'octets à lire, qui seront copiés par le driver dans un buffer, est fixé par le programme d'appel. Le type et la structure des données ne sont pas prédéfinis par le DOS mais peuvent être définis individuellement par chaque driver.

Entrée :

AH 	= 44h

AL 	= 4

BX 	= Désignation de périphérique

CX 	= Nombre d'octets à lire

DS 	= Adresse de segment du buffer

DX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas

AX = Nombre d'octets transférés

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

15 : Périphérique inconnu

Remarques :

·	La désignation de périphérique n'indique pas directement le driver de périphérique mais le périphérique duquel les données devront être reçues. Le code 0 désigne ici le périphérique A, 1 le périphérique B, etc.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 5    Accès à un driver de périphérique (IOCTL) :     Transmettre des données à un driver de bloc    D
Int 21h, Fct 44h, Sous-Fct 5    Accès à un driver de périphérique (IOCTL) :     Transmettre des données à un driver de bloc    DOS (> 1.0)

En appelant cette fonction, un programme d'application peut envoyer des données sur un driver de bloc, de façon très directe. Le nombre d'octets à lire, qui seront tirés d'un buffer pour être transmis au driver, est fixé par le programme d'appel. Le type et la structure des données ne sont pas prédéfinis par le DOS mais peuvent être définis individuellement par chaque driver.

Entrée :

AH 	= 44h

AL 	= 5

BX 	= Désignation de périphérique

CX 	= Nombre d'octets à transmettre

DS 	= Adresse de segment du buffer

DX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas

AX = Nombre d'octets transférés

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

15 : Périphérique inconnu

Remarques :

·	La désignation de périphérique n'indique pas directement le driver de périphérique mais le périphérique auquel les données devront être transmises. Le code 0 désigne ici le périphérique A, 1 le périphérique B, etc.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 6    Accès à un driver de périphérique (IOCTL) :     Tester l'état d'entrée    DOS (> 1.0)

Cette fonction permet de déterminer si un driver de périphérique est prêt à transmettre des données à un autre programme.

Entrée :

AH 	= 44h

AL 	= 6

BX 	= Handle

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas AX = Etat d'entrée

0 : Le driver n'est pas prêt

255 : Le driver est prêt

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

5 : Accès refusé

6 : Handle incorrect

Remarques :

·	Le handle spécifié peut être associé à un driver de caractères ou à un fichier.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 7    Accès à un driver de périphérique (IOCTL) :     Tester l'état de sortie    DOS (> 1.0)

Cette fonction permet de déterminer si un driver de périphérique est prêt à recevoir des données d'un autre programme.

Entrée :

AH 	= 44h

AL 	= 7

BX 	= Handle

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas AX = Etat de sortie

0 : Le driver n'est pas prêt

255 : Le driver est prêt

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

5 : Accès refusé

6 : Handle incorrect

Remarques :

·	Le handle spécifié peut être associé à un driver de caractères ou à un fichier.

·	Si le handle est associé à un fichier, le driver de bloc correspondant annoncera toujours que le périphérique est prêt à recevoir des données, même si le support sur lequel figure le fichier est plein et donc même si, de ce fait, il n'est plus possible d'ajouter des données à la suite du fichier.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 8    Accès à un driver de périphérique (IOCTL) :     Support amovible    DOS (> la version 3)

Cette fonction permet de déterminer si le support (disquette, disque dur) d'un périphérique est amovible.

Entrée :

AH 	= 44h

AL 	= 8

BL 	= Désignation de périphérique

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas

AX = 0 : Support amovible

AX = 1 : Support fixe

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

15 : Périphérique inconnu

Remarques :

·	La désignation de périphérique n'indique pas directement le driver de périphérique mais le périphérique duquel les données devront être reçues.Le code 0 désigne ici le périphérique actuel, 1 le lecteur A, 2 le lecteur B, etc.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 9    Accès à un driver de périphérique (IOCTL) :     Test périphérique    DOS (> la version 3.1)

Cette fonction permet de déterminer si le lecteur spécifié (Device) est un élément du PC sur lequel le test est effectué (local) ou bien s'il figure sur un autre PC, dans le cadre d'un réseau (remote).

Entrée :

AH 	= 44h

AL 	= 9

BL 	= Désignation de périphérique

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas DX = Attribut de périphérique

Bit 12 = 0 : local

Bit 12 = 1 : remote

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

15 : Périphérique inconnu

Remarques :

·	Cette fonction ne peut être appelée que si un logiciel de réseau est installé.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 0Ah    Accès à un driver de périphérique (IOCTL) :     Test Handle Remote    DOS (> la version 3.1)

Cette fonction permet de déterminer si le fichier associé au handle spécifié (Device) est un élément du PC sur lequel le test est effectué (local) ou bien s'il figure sur un autre PC, dans le cadre d'un réseau (remote).

Entrée :

AH 	= 44h

AL 	= 0Ah

BX 	= Handle

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas DX = Code IOCTL

Bit 15 = 0 : local

Bit 15 = 1 : remote

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

6 : Handle non ouvert ou qui n'existe pas

Remarques :

·	Cette fonction ne peut être appelée que si un logiciel de réseau est installé.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 0Bh    Accès à un driver de périphérique (IOCTL) :     Définir répétition    DOS (> la version 3)

En réseau, il arrivera souvent qu'un programme souhaite accéder à un fichier alors qu'un autre programme est déjà en train d'y accéder et que ce fichier ne puisse être ouvert de ce fait. Dans une telle situation, il ne serait pas raisonnable de renoncer immédiatement à accéder au fichier car le fichier redeviendra généralement disponible après un très bref délai. C'est pourquoi le DOS gère, sur un plan interne, deux variables qui indiquent combien de fois une tentative d'accès à un fichier doit être répétée et quel délai doit s'écouler entre deux tentatives. Ce sont ces deux paramètres que cette fonction permet de fixer.

Entrée :

AH 	= 44h

AL 	= 0Bh

BX 	= Nombre de répétitions des tentatives

CX 	= Délai entre deux tentatives

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

Remarques :

·	Cette fonction ne doit être appelée que si un logiciel de réseau est installé.

·	Le délai imparti au driver de périphérique dans le registre CX dépend de la vitesse du système informatique en cours. Au lieu de faire référence à une unité de temps constante, il indique notamment le nombre des répétitions d'une boucle vide dont la vitesse d'exécution dépend naturellement de celle du processeur.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 0Ch    Accès à un driver de périphérique (IOCTL) :     Communication avec un driver de caractères

Cette fonction IOCTL représente l'interface entre des sous-fonctions assurant le travail avec les pages de code. Etant donné que les pages de code ne sont reconnues que par quelques drivers de caractères précis, ces fonctions ne sont généralement disponibles qu'avec ces drivers.

Entrée :

AH 	= 44h

AL 	= 0Ch

BX 	= Handle lié au driver de caractères à adresser

CH 	= Code de périphérique

CL 	= Numéro de la sous-fonction à appeler

DS:DX	= Pointeur FAR sur le buffer contenant des informations complémentaires

Sortie :

Flag Carry = 0 : tout va bien

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

Remarques :

·	Le périphérique concerné est défini à l'aide du code de périphérique contenu dans le registre CH. Les affectations suivantes sont prévues dans ce cas :

0 	= Le périphérique n'appartient à aucun des groupes suivants

1 	= COM1, COM2, COM3 ou COM4

2 	= Périphérique CON (écran et clavier)

5 	= LPT1, LPT2 ou LPT3

·	Les sous-fonctions suivantes peuvent être appelées par le registre CL :

45h 	= 	Spécifier le compteur d'accès pour le driver d'imprimante (à partir de DOS 3.2)

4Ah 	= 	Sélectionner la page de code (à partir de DOS 3.3)

4Ch 	= 	Préparer l'initialisation des pages de code (à partir de DOS 3.3)

4Dh 	= 	Terminer l'initialisation des pages de code (à partir de DOS 3.3)

5Fh 	= 	Informations concernant l'écran (à partir de DOS 4.0)

65h 	=	Déterminer le compteur d'accès pour le driver d'imprimante (à partir de DOS 3.2)

6Ah 	= 	Spécifier la page de code en cours (à partir de DOS 3.3)

6Bh 	= 	Définir la liste des pages de code installées (à partir de DOS 3.3)

7Fh 	= 	Lire les informations concernant l'écran (à partir de DOS 4.0)

·	En règle générale, le schéma suivant s'applique à l'utilisation de ces fonctions :

Lire, vérifier et sauvegarder les paramètres en cours à l'aide de la fonction 60h, Spécifier les nouveaux paramètres à l'aide de la fonction 40h, Exécuter la fonction nécessaire,

·	Remettre en place les anciens paramètres avec la fonction 40h.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 0Dh    Accès à un driver de périphérique (IOCTL) :     Communication avec un driver de bloc    DOS (>
Int 21h, Fct 44h, Sous-Fct 0Dh    Accès à un driver de périphérique (IOCTL) :     Communication avec un driver de bloc    DOS (> 3.2)

Tout comme la fonction IOCTL 0Ch, cette fonction permet également d'accéder à de nombreuses sous-fonctions d'un driver de périphérique. Cependant, cette fonction IOCTL ne permet pas d'adresser un driver de caractères, mais un driver de bloc.

Entrée :

AH 	= 44h

AL 	= 0Dh

BL 	= Numéro de lecteur

CH 	= 08h

CL 	= Numéro de la sous-fonction à appeler

DS:DX	= Pointeur FAR sur le buffer contenant des informations complémentaires

Sortie :

Flag Carry 	= 0 : Tout va bien

Flag Carry 	= 1 : Erreur, dans ce cas

AX 	= Code d'erreur

Remarques :

·	En ce qui concerne le code de périphérique, 0 indique le lecteur en cours, 1 est utilisé pour A, 2 pour B, etc.

·	Les sous-fonctions suivantes peuvent être appelées par le registre CL :

40h = Spécifier les paramètres du périphérique (à partir de DOS 3.2)

41h = Ecrire la piste sur le périphérique logique (à partir de DOS 3.2)

42h = Formater et contrôler la piste sur le périphérique logique (à partir de DOS 3.2)

47h = Spécifier le flag d'accès (à partir de DOS 4.0)

60h = Déterminer les paramètres de périphérique (à partir de DOS 3.2)

61h = Lire la piste depuis le périphérique logique (à partir de DOS 3.2)

62h = Contrôler la piste sur le périphérique logique (à partir de DOS 3.2)

67h = Lire le flag d'accès (à partir de DOS 4.0)

·	En règle générale, le schéma suivant s'applique à l'utilisation de ces fonctions :

Þ	Lire, vérifier et sauvegarder les paramètres en cours à l'aide de la fonction 60h,

Þ	Spécifier les nouveaux paramètres à l'aide de la fonction 40h,

Þ	Exécuter la fonction nécessaire,

Þ	Remettre en place les anciens paramètres avec la fonction 40h.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 0Eh    Accès à un driver de périphérique (IOCTL) :     Lire la dernière désignation de lecteur    DOS
Int 21h, Fct 44h, Sous-Fct 0Eh    Accès à un driver de périphérique (IOCTL) :     Lire la dernière désignation de lecteur    DOS (> 3.2)

Cette fonction permet de déterminer la désignation logique du lecteur dernièrement utilisée pour adresser un périphérique.

Entrée :

AH 	= 44h

AL	= 0Eh

BL 	= Code de périphérique (0 = actuel, 1 = A, 2 = B, etc.)

Sortie :

Flag Carry = 0 : Tout va bien, dans ce cas

AL = 0	: Un seul périphérique logique appartient au périphérique spécifié

AL 1	: Numéro du périphérique logique attribué au périphérique spécifié (1 = A, 2 = B, etc.)

Flag Carry = 1	: Erreur, dans ce cas AX = Code d'erreur

Remarques :

·	Cette fonction est surtout intéressante pour les systèmes équipés d'un seul lecteur de disquette. Dans ce cas, ce lecteur peut être appelé sous A et B. Cette fonction permet notamment de spécifier si le lecteur de disquette a été adressé dernièrement en tant que lecteur A ou B. Si le lecteur est adressé au moyen d'une telle désignation, un message DOS apparaît immédiatement pour demander d'insérer une disquette lors de l'accès au lecteur.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 0Fh    Accès à un driver de périphérique (IOCTL) :     Définir la désignation de lecteur suivante
Int 21h, Fct 44h, Sous-Fct 0Fh    Accès à un driver de périphérique (IOCTL) :     Définir la désignation de lecteur suivante    DOS (> 3.2)

Cette fonction permet de spécifier la désignation de lecteur logique utilisée pour appeler un périphérique lors d'un prochain accès.

Entrée :

AH 	= 44h

AL 	= 0Fh

BL 	= Code de périphérique (0 = actuel, 1 = A, 2 = B, etc.)

Sortie :

Flag Carry = 0 : Tout va bien, dans ce cas

AL = Code de périphérique servant à appeler le lecteur lors d'un prochain accès

Flag Carry = 1 : Erreur, dans ce cas AX = Code d'erreur

Remarques :

·	Cette fonction est surtout intéressante pour les systèmes équipés d'un seul lecteur de disquette parce que ce dernier peut être appelé sous A et B. Dans ce cas, cette fonction permet de faire commuter le lecteur de disquette de A vers B. Comme cette fonction travaille en alternance, le lecteur revient sur A à la suite d'un appel ultérieur.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 10h    Solliciter le soutien IOCTL au niveau Handle     DOS (> 5.0)

A partir de la version 5.0, la mise en disponibilité de cette fonction peut être sollicitée avant l'appel d'une fonction IOCTL qui ne fait pas partie de l'environnement des fonctions de la version 3.2.

Entrée :

AH 	= 44h

AL 	= 10h

BX 	= Handle sur le périphérique à adresser lors de l'appel de la fonction IOCTL

CL 	= Numéro de la fonction IOCTL souhaitée

Sortie :

Flag Carry = 0 : La fonction est disponible par rapport au handle spécifié

Flag Carry = 1 : Erreur, la fonction n'est pas disponible par rapport au handle spécifié, dans ce cas AX = 1 (fonction non disponible)

Remarques :

·	Alors que cette fonction ne permet de tester la disponibilité d'une fonction IOCTL précise que par rapport au périphérique qui se cache derrière un handle, la fonction IOCTL 11h permet en revanche d'effectuer un test par rapport à un périphérique précis.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 11h    Solliciter le soutien IOCTL au niveau du périphérique        DOS (> 5.0)

A partir de la version 5.0, la mise en disponibilité de cette fonction peut être sollicitée avant l'appel d'une fonction IOCTL qui ne fait pas partie de l'environnement des fonctions de la version 3.2.

Entrée :

AH 	= 44h

AL 	= 11h

BX 	= Numéro de périphérique (0 = actuel, 1 = A, B = 2, etc.)

CL 	= Numéro de la fonction IOCTL souhaitée

Sortie :

Flag Carry	= 0 : La fonction est disponible par rapport au périphérique spécifié

Flag Carry	= 1 : Erreur, la fonction n'est pas disponible par rapport au périphérique, dans ce cas AX = 1 (fonction non disponible)

Remarques :

·	Alors que cette fonction ne permet de tester la disponibilité d'une fonction IOCTL précise que par rapport à un périphérique précis, la fonction IOCTL 10h permet en revanche d'effectuer un test par rapport à un handle donné et le périphérique qui s'y cache derrière.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 45h    Définir un second Handle    DOS (> 1.0)

Cette fonction permet de mettre en place un second handle pour un handle spécifié. Ce second handle sera associé au même fichier ou au même périphérique que le premier. Si le premier handle se rapportait à un fichier, le pointeur de fichier de ce handle sera couplé avec le pointeur de fichier du nouveau handle.

Entrée :

AH 	= 45h

BX 	= Handle

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas AX = le nouveau Handle

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

Flag Carry =4 : Pas d'autre handle disponible

Flag Carry =6 : Handle spécifié non ouvert ou qui n'existe pas

Remarques :

·	Cette fonction permet, après qu'un fichier ait été modifié, de faire actualiser l'entrée de ce fichier dans le répertoire sans être obligé de refermer le fichier. Il suffit en effet de réclamer à l'aide de cette fonction un nouveau handle pour le fichier puis de refermer le fichier avec ce handle à l'aide de la fonction 3Eh.

·	Lorsque le pointeur de fichier d'un des deux handles est déplacé du fait de l'appel d'une fonction de lecture ou écriture, le pointeur de fichier de l'autre handle est automatiquement déplacé de la même façon.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 46h    Affecter un handle à un autre    DOS (> 1.0)

Cette fonction attend deux handles associés à deux fichiers ou périphériques différents. Le second handle est alors assimilé par la fonction au premier, c'est-à-dire qu'il se retrouve associé au même fichier ou au même périphérique que le premier handle. La valeur de son pointeur de fichier coïncide également avec celle du pointeur de fichier du premier handle.

Entrée :

AH 	= 46h

BX 	= Premier handle

CX 	= Second handle (à assimiler)

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

4 : Pas d'autre handle disponible

6 : Handle spécifié non ouvert ou qui n'existe pas

Remarques :

·	Si le second handle est associé à un fichier ouvert lors de l'appel de cette fonction, ce fichier est tout d'abord fermé.

·	Lorsque le pointeur de fichier d'un des deux handles est déplacé du fait de l'appel d'une fonction de lecture ou écriture, le pointeur de fichier de l'autre handle est automatiquement déplacé de la même façon.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 47h    Lire répertoire actuel     DOS (> 1.0)

Cette fonction inscrit dans un buffer la spécification de chemin complète du répertoire actuel sur le lecteur spécifié.

Entrée :

AH 	= 47h

DL 	= Désignation de périphérique

DS 	= Adresse de segment du buffer

SI 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas

AX = 15 : Périphérique inconnu

Remarques :

·	Pour la désignation de périphérique, 0 représente le lecteur actuel, 1 le lecteur A, 2 le lecteur B, etc.

·	La spécification de chemin placée dans le buffer est terminée par un caractère de fin (code ASCII 0). Elle n'est précédée d'aucune désignation de périphérique ni d'un '\' pour le répertoire racine. Si le répertoire racine est le répertoire actuel, le caractère de fin se trouvera donc être le premier caractère du buffer.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 48h    Réserver mémoire RAM    DOS (> 1.0)

Cette fonction permet de réserver une zone de mémoire à l'usage d'un programme.

Entrée :

AH 	= 48h

BX 	= Nombre de paragraphes réservés

Sortie :

Flag Carry	=0 : Tout va bien, dans ce cas

AX	= Adresse de segment de la zone de mémoire

Flag Carry	=1 : Erreur, dans ce cas

AX	= Code d'erreur

7 : Bloc de contrôle de la mémoire détruit

8 : Mémoire résiduelle insuffisante

BX = Nombre de paragraphes encore disponibles

Remarques :

·	Un paragraphe comporte 16 octets.

·	Si la mémoire demandée a pu être réservée, elle commence à l'adresse AX:0000.

·	Dans un programme COM, l'appel de cette fonction échouera systématiquement puisque la totalité de la place mémoire disponible est toujours affectée à un programme COM lors de son lancement.

·	Le contenu des registres CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 49h    Libérer mémoire RAM    DOS (> 1.0)

Cette fonction permet de libérer une zone de mémoire qui avait été auparavant réservée à l'aide de la fonction 48h, pour qu'elle soit à nouveau disponible pour d'autres programmes.

Entrée :

AH = 49h

BX = Nombre de paragraphes réservés

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas

AX = Code d'erreur

7 : Bloc de contrôle de la mémoire détruit

9 : La zone de mémoire commençant à l'adresse de segment spécifiée n'avait pas été réservée

Remarques :

·	Il n'est pas nécessaire d'indiquer à la fonction la taille de la zone de mémoire à libérer car cette taille est connue du DOS.

·	Si la fonction est appelée avec une adresse de segment erronée dans le registre ES, il se peut que soit libérée une zone de mémoire attribuée à un tout autre programme. Or cela peut avoir des conséquences imprévisibles allant jusqu'à un plantage du système.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 4Ah    Modifier la taille d'une zone de mémoire    DOS (> 1.0)

Cette fonction permet de modifier la taille d'une zone de mémoire qui avait été auparavant réservée avec la fonction 48h. Cette zone peut aussi bien être agrandie que diminuée.

Entrée :

AH 	= 4Ah

BX 	= Nouvelle taille de la zone de mémoire en paragraphes

ES 	= Adresse de segment de la zone de mémoire

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas

AX = Code d'erreur

7 : Bloc de contrôle de la mémoire détruit

8 : Mémoire résiduelle insuffisante

9 : Bloc illégal

BX = Nombre de paragraphes encore disponibles

Remarques :

·	Un paragraphe comporte 16 octets.

·	Si la fonction est appelée avec une adresse de segment erronée dans le registre ES, il se peut que soit libérée une zone de mémoire attribuée à un tout autre programme. Or cela peut avoir des conséquences imprévisibles allant jusqu'à un plantage du système.

·	Dans un programme COM, il est conseillé d'utiliser cette fonction pour libérer toute la mémoire dont le programme n'a pas vraiment besoin car la totalité de la mémoire RAM disponible est toujours affectée à un programme COM lors de son lancement. Cela est notamment indispensable avant d'appeler la fonction EXEC (fonction numéro 4Bh).

·	Le contenu des registres CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 4Bh, Sous-Fct 0    EXEC : Exécuter un autre programme     DOS (> 1.0)

Cette fonction permet à un programme d'en faire exécuter un autre de façon à ce que l'exécution du premier programme reprenne dès que l'exécution du second programme sera achevée. A cet effet, il faut transmettre à la fonction le nom du programme à exécuter ainsi que l'adresse d'un bloc de paramètres qui contienne les informations dont la fonction a besoin.

Entrée :

AH 	= 4Bh

AL 	= 0

ES 	= Adresse de segment du bloc de paramètres

BX 	= Adresse d'offset du bloc de paramètres

DS 	= Adresse de segment du nom de programme

DX 	= Adresse d'offset du nom de programme

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas

AX = Code d'erreur :

1 : Code de fonction inconnu

2 : Chemin ou programme non trouvé

3 : Programme non trouvé

4 : Trop de fichiers ouverts

5 : Accès refusé

8 : Zone mémoire insuffisante

10 : Bloc d'environnement erroné

11 : Format erroné

Remarques :

·	Le nom du programme doit être fourni sous forme d'une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Il peut comporter une désignation de périphérique, une spécification de chemin complète ainsi qu'un nom de fichier, mais pas de jokers. Si la désignation de périphérique ou la spécification de chemin sont omises, l'accès se fera sur le périphérique actuel ou sur le répertoire actuel.

·	Seuls des programmes EXE ou COM peuvent ainsi être exécutés. Pour faire exécuter un fichier batch, il faut appeler l'interpréteur de commandes (COMMAND.COM) avec le paramètre '/c' suivi du nom du fichier batch voulu.

·	Le bloc de paramètres doit présenter le format suivant :

Octets 0 - 1 :	Adresse de segment du bloc d'environnement

Octets 2 - 3 :	Adresse d'offset des paramètres de commande

Octets 4 - 5 :	Adresse de segment des paramètres de commande

Octets 6 - 7 :	Adresse d'offset du premier FCB

Octets 8 - 9 :	Adresse de segment du premier FCB

Octets 10 - 11 : 	Adresse d'offset du second FCB

Octets 12 - 13 : 	Adresse de segment du second FCB

·	Si l'adresse de segment du bloc d'environnement communiquée est la valeur 0, c'est que le programme à appeler dispose du même bloc d'environnement que le programme d'appel.

·	Les paramètres de commande doivent être stockés dans la mémoire de la façon suivante: un premier octet spécifie le nombre de caractères dans la ligne d'instruction ; viennent ensuite les différents caractères ASCII dont la fin est marquée par un Carriage Return (code ASCII 13). Ce Carriage Return ne doit toutefois pas être pris en compte pour le nombre de caractères.

·	Le premier FCB transmis est copié à l'adresse 5Ch, le second à l'adresse 6Ch dans le PSP du programme appelé. Si le programme appelé n'attend aucune information de ces deux FCB, n'importe quelles valeurs peuvent être inscrites dans les champs FCB du bloc de paramètres.

·	Après appel de cette fonction, tous les registres sont modifiés, hormis les registres CS et IP. Il ne faut donc pas oublier de sauvegarder le contenu des registres utiles avant d'appeler cette fonction, de façon à pouvoir les restaurer une fois le programme exécuté.

·	Le programme appelé peut disposer de tous les handles dont pouvait disposer le programme d'appel.


Int 21h, Fct 4Bh, Sous-Fct 3    EXEC : Charger un autre programme sans l'exécuter        DOS (> 1.0)

Cette fonction permet à un programme de charger un autre programme en mémoire sans que ce programme soit pour autant automatiquement exécuté.

Entrée :

AH 	= 4Bh

AL 	= 3

ES 	= Adresse de segment du bloc de paramètres

BX 	= Adresse d'offset du bloc de paramètres

DS 	= Adresse de segment du nom de programme

DX 	= Adresse d'offset du nom de programme

Sortie :

Flag Carry =0: Tout va bien

Flag Carry =1: Erreur, dans ce cas

AX = Code d'erreur

1 : Code de fonction inconnu

2 : Chemin ou programme non trouvé

3 : Programme non trouvé

4 : Trop de fichiers ouverts

5 : Accès refusé

8 : Zone mémoire insuffisante

10 : Bloc d'environnement erroné

11 : Format erroné

Remarques :

·	Le nom du programme doit être fourni sous forme d'une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Il peut comporter une désignation de périphérique, une spécification de chemin complète ainsi qu'un nom de fichier, mais pas de jokers. Si la désignation de périphérique ou la spécification de chemin sont omises, l'accès se fera sur le périphérique actuel ou sur le répertoire actuel.

·	Le bloc de paramètres doit présenter le format suivant :

Octets 0 - 1 :	Adresse de segment à laquelle devra être chargé l'overlay (l'adresse d'offset correspondante est 0)

Octets 2 - 3 :	Facteur de relogement

·	Le facteur de relogement spécifié devra être 0 pour les programmes COM et l'adresse de segment à laquelle le programme doit être chargé pour les programmes EXE.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 4Bh, Sous-Fct 05h    EXEC : Adapter les EXEC personnels     DOS (> 5.0)

A partir de la version DOS 5.0, les applications qui chargent d'autres programmes ou overlays à l'aide de la fonction DOS Exec doivent utiliser cette fonction pour éviter des problèmes lors du chargement de ces programmes ou overlays.

Entrée :

AH 	= 4Bh

AL 	= 05h

DS:DX	= Pointeur FAR sur la structure Exec-State

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

1	: code de fonction inconnu

2	: chemin ou programme non trouvé

3	: programme non trouvé

4	: trop de fichiers ouverts

5	: accès refusé

8	: zone de mémoire insuffisante

10	: bloc d'environnement erroné

11	: format erroné

Remarques :

·	L'appel de cette fonction doit s'effectuer entre le chargement du programme ou overlay et son exécution. Aucune fonction DOS ou BIOS ou une interruption logicielle de quelque nature que ce soit ne doit être appelée entre l'appel de cette fonction et le lancement du programme ou overlay.

·	La structure Exec-State contient des informations sur le programme ou overlay. Elle regroupe 18 octets et présente la structure suivante.

Structure Exec-State

Adr.	Contenu	Type

00h	Réservé, doit contenir 0	1 WORD

02h	1 = Programme EXEC 2 = Overlay	1 WORD

04h	Pointeur sur une chaîne ASCII contenant le nom du programme
ou overlay (l'indication du chemin est autorisée dans cette chaîne)	1 PTR

08h	Adresse de segment du PSP du programme ou overlay	1 WORD

0Ah	Point d'entrée dans le programme ou overlay	1 PTR

0Eh	Taille du programme ou overlay y compris PSP	1 DWORD

Longueur : 12h (18 octets)


Int 21h, Fct 4Ch    Terminer programme avec un code de fin    DOS (> 1.0)

Cette fonction permet de terminer un programme en définissant un code de fin que le programme d'appel pourra tester à l'aide de la fonction 4Dh. La mémoire RAM occupée par le programme à terminer est libérée après appel de cette fonction, de sorte qu'elle peut à nouveau être attribuée à d'autres programmes.

Entrée :

AH 	= 4Ch

AL 	= Code de fin

Sortie :

aucune

Remarques :

·	Cette fonction est à utiliser de préférence aux autres fonctions pour terminer un programme.

·	Lorsque cette fonction est appelée, les 3 vecteurs d'interruption dont le contenu avait été stocké dans le PSP avant le lancement du programme sont restaurés.

·	Avant que le contrôle ne soit rendu au programme d'appel, tous les handles qui ont été ouverts par le programme appelé, ainsi que tous les fichiers correspondants, sont refermés. Cela ne concerne toutefois que les fichiers auquel on accédait par FCB.

·	Le code de fin peut être examiné dans un fichier batch à l'aide des instructions ERRORLEVEL et IF.


Int 21h, Fct 4Dh    EXEC : Lire le code de fin     DOS (> 1.0)

Un programme qui en a appelé un autre à l'aide de la fonction EXEC peut déterminer à l'aide de cette fonction quel code de fin le programme appelé a renvoyé en fin d'exécution.

Entrée :

AH 	= 4Dh

Sortie :

AH 	= Type de fin du programme

0 : Fin normale

1 : Fin à la suite d'un caractère Ctrl-C ou parce que touche Break actionnée

2 : A cause d'une erreur d'accès à un périphérique

3 : Après appel de la fonction 31h ou INT 27h

AL = Code de fin

Remarques :

·	Le code de fin du programme appelé ne peut être lu qu'une seule fois à l'aide de cette fonction.

·	Le contenu des registres AX, BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 4Eh    Lire la première entrée du répertoire     DOS (> 1.0)

Cette fonction attend le nom d'un fichier qu'il s'agit de rechercher. Le fichier peut être doté d'un attribut déterminé, de sorte que des sous-répertoires ou des noms de volumes peuvent également être recherchés.

Entrée :

AH 	= 4Eh

CX 	= Attribut du fichier

DS 	= Adresse de segment du nom de fichier

DX 	= Adresse d'offset du nom de fichier

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur,

dans ce cas AX = Code d'erreur

2 : Chemin non trouvé

18 : Aucun fichier trouvé avec l'attribut spécifié

Remarques :

·	Le nom du fichier doit être fourni sous forme d'une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Ce nom de fichier peut comporter une désignation de périphérique, une spécification de chemin complète, le nom de fichier proprement dit et des jokers. Si la désignation de périphérique ou la spécification de chemin sont omises, l'accès se fera sur le périphérique actuel ou sur le répertoire actuel.

·	L'attribut 0 permet de rechercher les fichiers normaux. Si différents bits sont fixés dans le champ d'attribut, seront recherchés non seulement les fichiers correspondants mais aussi tous les fichiers normaux.

·	Si un fichier spécifié a pu être trouvé, les 43 premiers octets de la DTA fournissent des informations sur ce fichier :

Octets 0 - 20 :	Réservés

Octet 21 :	Attribut du fichier

Octets 22 - 23 : 	Heure de la dernière modification du fichier

Octets 24 - 25 : 	Date de la dernière modification du fichier

Octets 26 - 27 : 	Mot faible de la taille du fichier

Octets 28 - 29 : 	Mot fort de la taille du fichier

Octets 30 - 42 : 	Nom de fichier et extension, sous forme d'une chaîne ASCII terminée par un caractère de fin (code ASCII 0).

·	Cette fonction ne doit être employée que pour rechercher la première apparition d'un fichier. Lorsqu'il s'agit de rechercher un groupe de fichiers (donc lorsque le nom de fichier contient des jokers), c'est la fonction 4Fh qu'il faut appeler pour poursuivre la recherche.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 4Fh    Lire la prochaine entrée du répertoire     DOS (> 1.0)

Après appel réussi de la fonction 4Eh ou après d'autres appels de cette fonction, cette dernière permet de rechercher d'autres fichiers correspondant au nom de fichier spécifié.

Entrée :

AH 	= 4Fh

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

AX = 18 : Plus trouvé de fichier avec l'attribut spécifié

Remarques :

·	Si un fichier spécifié a pu être trouvé, les 43 premiers octets de la DTA fournissent des informations sur ce fichier :

Octets 0 - 20 :	Réservés

Octet 21 :	Attribut du fichier

Octets 22 - 23 : 	Heure de la dernière modification du fichier

Octets 24 - 25 : 	Date de la dernière modification du fichier

Octets 26 - 27 : 	Mot faible de la taille du fichier

Octets 28 - 29 : 	Mot fort de la taille du fichier

Octets 30 - 42 : 	Nom de fichier et extension, sous forme d'une chaîne ASCII terminée par un caractère de fin (code ASCII 0).

·	Cette fonction ne doit être appelée qu'après que la fonction 4Eh ait été appelée en premier lieu.

·	Cette fonction ne doit être appelée que si le contenu de la DTA n'a pas été modifié depuis le dernier appel de la fonction 4Eh ou 4Fh car la DTA contient des informations essentielles pour poursuivre la recherche de fichiers.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 50h    Définir PSP actif     DOS (> 2.0)

Cette fonction spécifie le PSP en cours. Elle est par exemple utile dans les programmes TSR pour que DOS lise les données à partir de son PSP et non celui du programme tournant au premier plan lors de l'accès au fichier.

Entrée :

AH 	= 50h

BX 	= Adresse de segment du PSP

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

Remarques :

·	Implicitement, DOS considère qu'un PSP commence fondamentalement à l'adresse d'offset 0000h à l'intérieur d'un segment. Il faut en tenir compte lors de l'appel de cette fonction.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 51h    Lire le PSP actif     DOS (> 2.0)

Cette fonction permet de connaître l'adresse de segment du PSP du programme en cours. Elle sert particulièrement aux programmes TSR pour lire l'adresse du PSP du programme de premier plan avant de définir leur propre PSP à l'aide de la fonction 50h.

Entrée :

AH 	= 51h

Sortie :

Flag Carry	= 0 : Tout va bien, dans ce cas

BX	= Adresse de segment du PSP en cours

Flag Carry	= 1 : Erreur, dans ce cas

AX	= Code d'erreur

Remarques :

·	Le PSP spécifié commence toujours à l'adresse offset 0000h par rapport à l'adresse de segment indiquée.

·	Vous devez donner la priorité à cette fonction par rapport à la fonction 62h qui est destinée spécialement à cet effet. En outre, elle est plus documentée que la fonction 51h. Mais elle n'est disponible qu'à partir de la version DOS 3.0 alors que la fonction 51h a été déjà introduite avec la version 2.0.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 52h    Placer un pointeur sur le bloc info DOS     DOS (> 2.0)

Cette fonction retourne un pointeur sur le bloc info DOS. Elle permet d'obtenir de nombreuses informations intéressantes qui ne sont pas toujours accessibles par un programme.

Entrée :

AH 	= 52h

Sortie :

Flag Carry = 0 : Tout va bien, dans ce cas

ES:BX = Pointeur FAR sur le DIB

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

Remarques :

·	Le contenu des registres CX, DX, SI, DI, BP, CS, DS et SS n'est pas modifié par cette fonction.


Int 21h, Fct 53h    Convertir le BPB en DPB    DOS (> 2.0)

Ces fonctions non documentées permettent de convertir un bloc de paramètres BIOS en un bloc de paramètres Drive.

Entrée :

AH 	= 53h

DS:SI 	= Pointeur FAR sur le buffer contenant le BPB converti

ES:BP =	Pointeur sur le buffer dans lequel le bloc de paramètres Drive doit être créé

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas

·	AX = Code d'erreur


Int 21h, Fct 54h    Lire flag Verify    DOS (> 1.0)

Le flag Verify définit si les données écrites sur un support tel que le disque dur ou la disquette doivent être contrôlées après une opération d'écriture pour vérifier que la transmission a été correctement effectuée. Cette fonction permet de lire l'état de ce flag qui s'applique à tous les programmes et non pas seulement au programme actuel.

Entrée :

AH 	= 54h

Sortie :

AL 	= Flag Verify

0 : Verify désactivé

1 : Verify activé

Remarques :

·	Le contenu du flag Verify peut être fixé à l'aide de la fonction 2Eh.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 55h    Créer un nouveau PSP    DOS (> 2.0)

Cette fonction crée un nouveau PSP en copiant l'ancien PSP dans le nouveau et en adaptant ensuite les diverses informations dans le nouveau PSP. Il s'agit en particulier d'informations liées à l'état du PSP en mémoire. Par conséquent, elles peuvent être transférées de l'ancien PSP vers le nouveau avec des modifications.

Entrée :

AH 	= 55h

DX 	= Adresse de segment du nouveau PSP

CX 	= Adresse de segment de l'ancien PSP

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur

Remarques :

·	Cette fonction non documentée est conçue pour pouvoir créer un PSP pour un programme avant de le charger. Eu égard à la fonction 4Bh, elle s'avère toutefois inutile car la fonction 4Bh charge automatiquement un programme, crée un nouveau PSP et adapte les adresses de segment dans le PSP et le programme chargé.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 56h    Renommer ou déplacer un fichier (Handle)    DOS (> 1.0)

Cette fonction permet de renommer un fichier ou de le déplacer dans un autre répertoire d'une unité de mémoire de masse. Le transfert ne peut toutefois se faire que dans les limites des différents répertoires d'un même périphérique. Il est donc impossible de déplacer de cette façon un fichier d'un répertoire du disque dur dans un répertoire d'une disquette.

Entrée :

AH 	= 56h

DS 	= Adresse de segment de l'ancien nom de fichier

DX 	= Adresse d'offset de l'ancien nom de fichier

ES 	= Adresse de segment du nouveau nom de fichier

DI 	= Adresse d'offset du nouveau nom de fichier

Sortie :

Flag Carry =	0	: Tout va bien

Flag Carry =	1	: Erreur, dans ce cas AX = Code d'erreur

2	: Fichier non trouvé

3	: Chemin non trouvé

5	: Accès refusé

11	: Périphérique différent

Remarques :

·	Les noms de fichiers doivent être fournis sous forme de chaînes ASCII terminées par un caractère de fin (code ASCII 0). Ces noms de fichiers peuvent comporter une désignation de périphérique, une spécification de chemin complète, le nom de fichier proprement dit, mais pas de jokers. Si la désignation de périphérique ou la spécification de chemin sont omises, l'accès se fera sur le périphérique actuel ou sur le répertoire actuel.

·	Une erreur peut se produire si le fichier est censé être transféré dans le répertoire racine alors que ce dernier est déjà plein.

·	Cette fonction ne permet pas d'accéder aux sous-répertoires ou aux noms de volumes.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 57h, Sous-Fct 0    Lire les date et heure de la dernière modification d'un fichier             DOS(> 1.0)

Cette fonction permet de déterminer la date et l'heure de création ou du moins de la dernière modification d'un fichier.

Entrée :

AH 	= 57h

AL 	= 0

BX 	= Handle

Sortie :

Flag Carry	=0 : Tout va bien, dans ce cas

CX	= Heure

DX	= Date

Flag Carry	=1: Erreur, dans ce cas AX = Code d'erreur

1 : Fonction inconnue

6 : Handle inconnu

Remarques :

·	Le fichier doit avoir été préalablement ouvert ou créé à l'aide d'une fonction Handle, de façon à ce qu'il soit possible d'y accéder à travers son handle.

·	L'heure dans le registre CX présente le format suivant :

Bits 0 - 4 :	Secondes par unités de 2

Bits 5 - 10 :	Minutes

Bits 11 - 15 : 	Heures

·	La date dans le registre DX présente le format suivant :

Bits 0 - 4 :	Jour du mois

Bits 5 - 8 :	Mois

Bits 9 - 15 :	Année (par rapport à 1980)

·	Le contenu des registres BX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 57h, Sous-Fct 1    Définir les date et heure de la dernière modification d'un fichier        DOS (> 1.0)

Cette fonction permet de régler les date et heure de création ou du moins de la dernière modification d'un fichier. Cette information est sauvegardée dans l'entrée du fichier dans le répertoire du périphérique voulu.

Entrée :

AH 	= 57h

AL 	= 1

BX 	= Handle

CX 	= Heure

DX 	= Date

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Fonction inconnue

6 : Handle inconnu

Remarques :

·	Le fichier doit avoir été préalablement ouvert ou créé à l'aide d'une fonction Handle, de façon à ce qu'il soit possible d'y accéder à travers son handle.

·	L'heure dans le registre CX présente le format suivant :

Bits 0 - 4 :	Secondes par unités de 2

Bits 5 - 10 :	Minutes

Bits 11 - 15 : 	Heures

·	La date dans le registre DX présente le format suivant :

Bits 0 - 4 :	Jour du mois

Bits 5 - 8 :	Mois

Bits 9 - 15 :	Année (par rapport à 1980)

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 58h, Sous-Fct 0    Lire principe de répartition de la mémoire     DOS (> la version 3)

Lorsqu'un programme réclame au DOS une zone de mémoire, à l'aide de la fonction 48h, la mémoire se trouve généralement déjà divisée en différentes zones affectées aux divers programmes. Comme ces zones de mémoire sont rarement exactement de la taille requise, le DOS dispose de différentes possibilités pour affecter une zone de mémoire au programme. Il peut rechercher une zone de mémoire appropriée en partant du bas de la mémoire et affecter alors au programme la première zone présentant au moins la taille requise. Il peut au contraire commencer sa recherche par le haut de la mémoire et affecter également la première zone convenable. La méthode la plus efficace consiste cependant à rechercher une zone de mémoire qui soit à peine plus grande que la zone réclamée, de façon à consommer le moins de mémoire possible. Dans ce cas, aucun compte n'est tenu de la situation de cette zone de mémoire à l'intérieur de l'ensemble de la mémoire.

Cette fonction permet donc de déterminer laquelle de ces trois méthodes est utilisée pour répartir la mémoire RAM.

Entrée :

AH 	= 58h

AL 	= 0

Sortie :

Flag Carry	=0 : Tout va bien, dans ce cas

AX	= 0 : Recherche en partant du bas

AX	= 1 : Recherche suivant la meilleure méthode

AX	= 2 : Recherche en partant du haut

Flag Carry	=1 : Erreur, dans ce cas

AX	= 1 : Code de fonction inconnu

Remarques :

·	Le principe de répartition de la mémoire s'applique à tous les programmes et non pas seulement au programme actuel.

·	Le code de la répartition de la mémoire se définit comme suit :

Bit 0-1	= 00b 	: premier bloc convenable

= 01b	: meilleur bloc convenable

= 10b	: dernier bloc convenable

Bit 2-6	= 0b

Bit 7	= 0 	: Rechercher d'abord dans la mémoire conventionnelle (à partir de la version 5)

= 1	: Rechercher d'abord dans le UMB (à partir de la version 5)

Bit 8-15	= 0b

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 58h, Sous-Fct 1    Définir principe de répartition de la mémoire        DOS (> la version 3)

Lorsqu'un programme réclame au DOS une zone de mémoire, à l'aide de la fonction 48h, la mémoire se trouve généralement déjà divisée en différentes zones affectées aux divers programmes. Comme ces zones de mémoire sont rarement exactement de la taille requise, le DOS dispose de différentes possibilités pour affecter une zone de mémoire au programme. Il peut rechercher une zone de mémoire appropriée en partant du bas de la mémoire et affecter alors au programme la première zone présentant au moins la taille requise. Il peut au contraire commencer sa recherche par le haut de la mémoire et affecter également la première zone convenable. La méthode la plus efficace consiste cependant à rechercher une zone de mémoire qui soit à peine plus grande que la zone réclamée, de façon à consommer le moins de mémoire possible. Dans ce cas, aucun compte n'est tenu de la situation de cette zone de mémoire à l'intérieur de l'ensemble de la mémoire.

Cette fonction permet donc de fixer laquelle de ces trois méthodes sera utilisée pour répartir la mémoire RAM.

Entrée :

AH 	= 58h

AL 	= 1

BX 	= Stratégie

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas

AX = 1 : Code de fonction inconnu

Remarques :

·	Le principe de répartition de la mémoire s'applique à tous les programmes et non pas seulement au programme actuel.

·	Le code de la répartition de la mémoire se définit comme suit :

Bit 0-1	= 00b 	: premier bloc convenable

= 01b	: meilleur bloc convenable

= 10b	: dernier bloc convenable

Bit 2-6	= 0b

Bit 7	= 0 	: Rechercher d'abord dans la mémoire conventionnelle (à partir de la version 5)

= 1	: Rechercher d'abord dans le UMB (à partir de la version 5)

Bit 8-15	= 0b

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 58h, Sous-Fct 02h    Demander l'utilisation des UMB    DOS (> 5.0)

A partir de la version 5.0, les blocs de mémoire supérieure (UMB) situés entre la limite des 640 Ko et 1 Mo peuvent être inclus dans la gestion de mémoire DOS. Cette fonction informe le programme d'appel si les UMB participent actuellement à la gestion de la mémoire.

Entrée :

AH 	= 58h

AL 	= 02h

Sortie :

Flag Carry	= 0 : Tout va bien, dans ce cas

AL	= 0 : UMB non utilisés

AL	= 1 : UMB inclus dans la gestion de la mémoire

Flag Carry	= 1 : Erreur, dans ce cas

AX	= 1 : UMB non reconnu car commande DOS = UMB non spécifiée

AX	= 7 : Gestion de la mémoire impossible

Remarques :

·	Le code d'erreur 7 est retourné lorsque DOS remarque une inconsistance dans sa gestion de mémoire. Elle est généralement due à un accès erroné à cette zone de mémoire à l'intérieur d'un programme DOS.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 58h, Sous-Fct 03h    Lire l'utilisation des UMB    DOS (> 5.0)

A partir de la version 5.0, les blocs de mémoire supérieure (UMB) situés entre la limite des 640 Ko et 1 Mo peuvent être inclus dans la gestion de la mémoire DOS. Cette fonction détermine si les UMB peuvent faire partie de la gestion de la mémoire.

Entrée :

AH 	= 58h

AL 	= 03h

BX 	= 0 : UMB non inclus

1 : UMB inclus dans la gestion de mémoire

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas

AX = 1 : UMB non reconnus car commande DOS=UMB non spécifiée

AX = 7 : Gestion de mémoire impossible

Remarques :

·	Le code d'erreur 7 est retourné lorsque DOS remarque une inconsistance dans sa gestion de mémoire. Elle est généralement due à un accès erroné à cette zone de mémoire à l'intérieur d'un programme DOS.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 59h    Lire les informations d'erreur étendues     DOS (> version 3)

Lorsqu'une erreur est apparue à la suite de l'appel d'une des fonctions de l'interruption 21h ou de l'interruption 24h, cette fonction vous permet d'obtenir de plus amples informations sur cette erreur, à savoir d'une part une description détaillée de l'erreur, de sa cause et de son origine mais aussi, d'autre part, une indication sur la conduite à tenir pour résoudre le problème.

Entrée :

AH 	= 59h

BX 	= 0

Sortie :

AX 	= Description de l'erreur

BH 	= Cause de l'erreur

BL 	= Réaction conseillée

CH 	= Origine de l'erreur

Remarques :

·	Les codes suivants sont employés pour décrire l'erreur (dans AX) :

0 : 	Aucune erreur n'est apparue

1 : 	Numéro de fonction inconnu

2 : 	Fichier non trouvé

3 : 	Chemin non trouvé

4 : 	Trop de fichiers sont ouverts simultanément

5 : 	Accès refusé

6 : 	Handle inconnu

7 : 	Bloc de contrôle de la mémoire détruit

8 : 	Mémoire disponible insuffisante

9 : 	Adresse de mémoire incorrecte

10 : 	Environnement incorrect

11 : 	Format incorrect

12 : 	Code d'accès incorrect

13 : 	Données incorrectes

14 : 	(réservé)

15 : 	Lecteur inconnu

16 : 	Le répertoire actuel ne peut pas être ouvert

17 : 	Périphériques différents

18 : 	Plus d'autre fichier

19 : 	Support protégé contre l'écriture

20 : 	Périphérique inconnu

21 : 	Périphérique n'est pas prêt

22 : 	Instruction inconnue

23 : 	Erreur CRC

24 : 	Largeur de données incorrecte

25 : 	Recherche infructueuse

26 : 	Type de périphérique inconnu

27 : 	Secteur non trouvé

28 : 	Plus de papier sur l'imprimante

29 : 	Erreur d'écriture

30 : 	Erreur de lecture

31 : 	Erreur générale

32 : 	Erreur de partage de fichier

33 : 	Erreur de verrouillage de fichier

34 : 	Changement de disquette non autorisé

35 : 	FCB indisponible

36 : 	Plus de place dans la liste réseau

37-49 : 	(réservé)

50 : 	Fonction réseau appelée non supportée

51 : 	Pas d'accès à l'ordinateur à distance

52 : 	Nom répété plusieurs fois à l'intérieur du réseau, risque d'équivoque

53 : 	Périphérique portant le nom spécifié inconnu dans le réseau

54 : 	Réseau occupé

55 : 	Le périphérique n'existe plus dans le réseau

56 : 	Erreur NetBios

57 : 	Erreur dans une carte réseau

58 : 	Réponse erronée de la part du réseau

59 : 	Erreur réseau non attendue

60 : 	Carte réseau incompatible sur l'ordinateur à distance

61 : 	File d'attente de l'imprimante saturée

62 : 	Mémoire insuffisante pour imprimer le fichier

63 : 	Sortie du fichier sur l'imprimante interrompue

64 : 	Nom du réseau effacé

65 : 	Accès au réseau refusé

66 : 	Type de périphérique réseau incorrect

67 : 	Nom du réseau inconnu

68 : 	Nom du réseau trop long

69 : 	Erreur NetBios

70 : 	Partage de fichier instauré momentanément

71 : 	Demande de participer au réseau non acceptée

72 : 	Redirection vers le périphérique et le fichier momentanément désactivée

73-79 : 	(réservé)

80 : 	Fichier existe déjà

82 : 	Répertoire ne peut être créé

83 : 	Arrêt après appel de l'interruption 24h

84 : 	Trop de redirections

85 : 	Redirection doublée

86 : 	Mot de passe incorrect

87 : 	Paramètre incorrect

88 : 	Erreur dans le périphérique du réseau

89 : 	Fonction non reconnue dans le réseau

90 : 	Elément système nécessaire non installé

·	Les codes suivants sont employés pour décrire la cause de l'erreur (dans BH) :

1 : 	Plus d'espace disque libre sur le support

2 : 	Interdiction temporaire d'accès (Sera vraisemblablement bientôt levée)

3 : 	Accès non autorisé

4 : 	Erreur interne du logiciel système

5 : 	Erreur électronique

6 : 	Erreur dans le logiciel système mais qui n'a pas été occasionnée par un programme d'application

7 : 	Erreur dans un programme d'application

8 : 	Fichier non trouvé

9 : 	Fichier de format ou type incorrect

10 : 	Fichier verrouillé

11 : 	Support incorrect sur le lecteur

12 : 	Objet réseau existe déjà

13 : 	Autre erreur

·	Les codes suivants sont employés pour la réaction conseillée en vue de résoudre le problème (dans BL) :

1 : 	Répéter opération plusieurs fois puis laisser à l'utilisateur le soin de décider s'il veut interrompre l'opération ou ignorer l'erreur.

2 : 	Répéter opération plusieurs fois, après un certain délai, puis laisser à l'utilisateur le soin de décider s'il veut interrompre l'opération ou ignorer l'erreur.

3 : 	Demander à l'utilisateur d'entrer des données ou des informations.

4 : 	Terminer le programme par la voie normale

5 : 	Fin immédiate du programme

6 : 	Ignorer l'erreur

7 : 	Demander à l'utilisateur d'éliminer la cause de l'erreur puis de répéter l'opération

·	Les codes suivants sont employés pour décrire l'origine de l'erreur (dans CH) :

1 : 	Inconnue

2 : 	Driver de bloc (disquette, disque dur, etc.)

3 : 	Réseau

4 : 	Périphérique sériel

5 : 	Mémoire RAM

·	Seul le contenu des registres CS, SS et SP n'est pas modifié par cette fonction. Le contenu de tous les autres registres est détruit.


Int 21h, Fct 5Ah    Créer fichier temporaire (Handle)    DOS (> version 3)

Cette fonction permet de créer un fichier qui servira uniquement au stockage intermédiaire de données pendant l'exécution d'un programme mais qui sera supprimé après exécution du programme. Le programme d'appel n'a donc pas à se préoccuper du choix d'un nom de programme. Ce nom sera en effet choisi automatiquement par le DOS. Le programme d'appel doit simplement indiquer dans quel répertoire le fichier temporaire devra être mis en place. L'accès au fichier se fera ensuite à travers le handle qui lui a été attribué, de sorte que le nom de fichier ne jouera vraiment aucun rôle. Comme un programme peut ouvrir plusieurs fichiers simultanément à l'aide de cette fonction, le DOS construit le nom du fichier à partir de la date et de l'heure actuelles. Comme la fonction ne peut jamais être appelée deux fois au même moment, cette méthode garantit que chaque fichier temporaire porte un nom différent.

Entrée :

AH	 = 5Ah

CX 	= Attribut du fichier

DS 	= Adresse de segment du répertoire

DX 	= Adresse d'offset du répertoire

Sortie :

Flag Carry	=0 : Tout va bien, dans ce cas

AX	= Handle

DS	= Adresse de segment du nom de fichier complet

DX	= Adresse d'offset du nom de fichier complet

Flag Carry	=1 : Erreur, dans ce cas

AX = Code d'erreur

3 : Chemin non trouvé

4 : Pas de handle disponible

5 : Accès refusé

Remarques :

·	Le nom du répertoire doit être fourni sous forme d'une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Il peut contenir une désignation de périphérique ainsi qu'une spécification de chemin complète. Si la désignation de périphérique ou la spécification de chemin sont omises, l'accès se fera sur le lecteur actuel ou sur le chemin actuel.

·	Les différents bits de l'attribut de fichier ont la signification suivante :

Bit 0 = 1 : 	Fichier en lecture seule

Bit 1 = 1 : 	Fichier caché

Bit 2 = 1 : 	Fichier système

·	Les fichiers qui ont été créés à l'aide de cette fonction ne sont pas automatiquement supprimés à la fin du programme. Pour les supprimer, il faut tout d'abord refermer chaque fichier (fonction 3Eh) puis les supprimer à l'aide du nom de fichier complet (fonction 41h).

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 5Bh    Créer un nouveau fichier (handle)    DOS (> 3.0)

Tout comme la fonction 3Ch, cette fonction crée également un nouveau fichier et retourne un handle relatif à l'accès. Contrairement à la fonction 3Ch, un fichier existant sous le même nom n'est pas détruit et se trouve protégé contre la réécriture.

Entrée :

AH 	= 3Ch

CX 	= Attribut de fichier

Bit 0 = 1 : Fichier en lecture seule

Bit 1 = 1 : Fichier caché

Bit 2 = 1 : Fichier système

DS:DX = Pointeur FAR sur le buffer contenant le nom de fichier

Sortie :

Flag Carry = 0 : Tout va bien, dans ce cas AX = Handle du fichier

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

3 : Chemin non trouvé

4 : Plus de handle libre

5 : Accès refusé

80 : Le fichier existe déjà

Remarques :

·	Les divers bits de l'attribut de fichier peuvent être combinés.

·	Le nom de fichier doit être une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Outre une désignation de périphérique, il doit contenir une désignation de chemin complète et un nom de fichier mais pas de caractères génériques. Si la désignation de périphérique ou de chemin fait défaut, l'accès portera sur le périphérique ou le répertoire en cours.

·	Une erreur lors de l'appel de cette fonction se produit toujours lorsqu'un élément de la désignation de chemin n'existe pas, le fichier doit être créé dans le répertoire principal qui est saturé ou lorsqu'un fichier portant le même nom existe déjà.

·	Si l'appel de la fonction se termine correctement, toutes les autres fonctions handle peuvent être appelés à l'aide du handle transmis puisque le fichier a été ouvert.

·	Lorsque l'appel de cette fonction a abouti, le pointeur de fichier vient se placer sur le premier octet du fichier.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 5Ch, Sous-Fct 00h    Protéger une zone de fichier contre l'accès     DOS (> 3.0)

L'accès des différentes zones d'un fichier par d'autres programmes doit être interdit en particulier dans les réseaux. Cette fonction aide à assurer la protection contre d'éventuelles modifications de ces zones.

Entrée :

AH 	= 5Ch

AL 	= 00h

BX 	= Handle du fichier

CX 	= Mot de poids fort de l'adresse du premier octet à l'intérieur du fichier à verrouiller

DX 	= Mot de poids faible de l'adresse du premier octet à verrouiller

SI 	= Mot de poids fort du nombre d'octets à verrouiller

DI 	= Mot de poids faible du nombre d'octets à verrouiller

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas AX = Code d'erreur

1 : Logiciel réseau non activé

6 : Handle incorrect

33 : La zone spécifiée est déjà entièrement ou partiellement verrouillée

Remarques :

·	Cette fonction ne peut être appelée qu'après avoir appelé la commande SHARE ou le logiciel réseau.

·	L'offset de début de la zone à verrouiller ainsi que sa longueur doivent être indiqués sous forme de LONGINT positifs composés respectivement de 4 octets.

·	Une région verrouillée à l'aide de cette fonction doit être libérée avec la sous-fonction 01h. Il faut surtout empêcher de terminer le programme sans avoir libéré la zone verrouillée au risque d'obtenir des résultats imprévus lors de l'accès au fichier.

·	Les programmes appelés par la fonction EXEC héritent certes des handles d'accès au fichier via le principe hiérarchique, mais ne disposent pas des zones verrouillées qui leur restent inaccessibles au même titre que tout autre programme.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 5Ch, Sous-Fct 01h    Libérer une zone verrouillée dans un fichier    DOS (> 3.0)

Cette fonction libère une zone préalablement verrouillée par a sous-fonction 00h à l'intérieur d'un fichier.

Entrée :

AH 	= 5Ch

AL 	= 01h

BX 	= Handle du fichier

CX 	= Mot de poids fort de l'adresse du premier octet à libérer à l'intérieur du fichier

DX 	= Mot de poids faible de l'adresse du premier octet à libérer

SI 	= Mot de poids fort du nombre d'octets à libérer

DI 	= Mot de poids faible du nombre d'octets à libérer

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas AX = Code d'erreur

1 : Logiciel réseau non activé

6 : Handle incorrect

33 : La zone spécifiée n'est pas verrouillée

Remarques :

·	Cette fonction ne peut être appelée qu'après avoir appelé la commande SHARE ou le logiciel réseau.

·	L'offset de début de la zone à verrouiller ainsi que sa longueur doivent être indiqués sous forme de LONGINTS positifs composés respectivement de 2 mots et 4 octets. Ils doivent correspondre exactement aux indications données lors d'un précédent appel de la sous-fonction 00h.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 5Dh    Réservée à un usage interne    DOS (> 1.0)


Int 21h, Fct 5Eh, Sous-Fct 00h    Indiquer le nom de l'ordinateur dans le réseau    DOS (> 3.1)

Tout ordinateur connecté au réseau peut porter un nom représenté par une chaîne ASCII. L'ordinateur exécutant peut se servir de cette fonction pour demander ce nom. Le numéro NetBios de l'ordinateur est fourni simultanément.

Entrée :

Ah 	= 5Eh

AL 	= 00h

DS:DX	= Pointeur FAR sur le buffer dans lequel il faut copier le nom

Sortie :

Flag Carry = 0 : Tout va bien, dans ce cas

CH<> = 0 : Pas de nom

CH = 0 : Nom dans le buffer spécifié, dans ce cas

CL = Numéro NetBios de l'ordinateur

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

1 : Pas de logiciel réseau chargé

Remarques :

·	Cette fonction ne peut être appelée qu'une fois le logiciel réseau lancé.

·	Après l'appel de cette fonction, le buffer spécifié contient une chaîne ASCII représentant le nom de l'ordinateur sur lequel s'est effectué l'appel de la fonction. La longueur de la chaîne est toujours de 15 caractères. Elle se termine par le code ASCII nul et comprend ainsi 16 octets.

·	Le contenu des registres BX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 5Eh, Sous-Fct 02h    Définir la chaîne d'initialisation de l'imprimante réseau        DOS (> 3.1)

A l'intérieur d'un réseau, chaque ordinateur peut se servir de cette fonction pour définir une chaîne d'initialisation tout à fait spécifique chargée de transmettre la sortie depuis l'ordinateur concerné vers l'imprimante réseau. Il est par exemple possible de définir un mode d'exploitation particulier et d'utiliser l'imprimante réseau reliée à divers ordinateurs dans des modes d'exploitation variés.

Entrée :

AH 	= 5Eh

AL 	= 02h

BX 	= Identification numérique de l'imprimante adressée par rapport à la liste du réseau

CX 	= Longueur de la chaîne d'initialisation en caractères

DS:SI = Pointeur FAR sur le buffer contenant la chaîne d'initialisation

Sortie :

Flag Carry = 	0 : Tout va bien

Flag Carry = 	1 : Erreur, dans ce cas

AX = Code d'erreur

1 : Logiciel réseau non chargé

Remarques :

·	Cette fonction ne peut être appelée qu'une fois le logiciel réseau lancé.

·	La liste du réseau est une liste permettant d'affecter des noms de périphérique locaux aux périphériques, répertoires et fichiers d'un réseau.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 5Eh, Sous-Fct 03h    Lire la chaîne d'initialisation d'une imprimante réseau        DOS (> 3.1)

La chaîne d'initialisation d'une imprimante réseau spécifiée par la sous-fonction 02h peut être obtenue à l'aide de cette fonction.

Entrée :

AH 	= 5Eh

AL 	= 03h

BX 	= Identification numérique de l'entrée souhaitée dans la liste du réseau

DS:SI	= Pointeur FAR sur le buffer devant recevoir la chaîne d'initialisation

Sortie :

Flag Carry =	0 : Tout va bien, dans ce cas

CX = Longueur de la chaîne d'initialisation transmise

Flag Carry =	1 : Erreur, dans ce cas

AX = Code d'erreur

1 : Logiciel réseau non chargé

Remarques :

·	Cette fonction ne peut être appelée qu'une fois le logiciel réseau lancé.

·	Le buffer spécifié doit contenir suffisamment de place pour recevoir 64 caractères.

·	L'identification numérique de l'imprimante peut être obtenue à l'aide de la sous-fonction 02h de la fonction 5Fh. Elle est définie par la sous-fonction 03h de la fonction 5Fh lors de la création de l'entrée dans la liste du réseau.

·	Le contenu des registres BX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 5Fh, Sous-Fct 02h    Lire une entrée de la liste du réseau     DOS (> 3.1)

Retourne une entrée de la liste du réseau définie préalablement par la sous-fonction 03h de cette fonction.

Entrée :

AH 	= 5Fh

AL 	= 02h

BX 	= Numéro de l'entrée souhaitée comme index dans la liste du réseau

DS:SI	= Pointeur FAR sur le buffer devant recevoir le nom local

ES:DI	= Pointeur FAR sur le buffer devant recevoir le nom réseau du périphérique

Sortie :

Flag Carry = 0 : Tout va bien

BH = Bit 0 : 0 = Périphérique existant

: 1 = Périphérique inexistant

BL = Type de périphérique

: 03 = Imprimante

: 04 = Lecteur (périphérique, répertoire ou fichier)

CX = Identification numérique pour l'accès au périphérique via la liste du réseau

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

1 : Logiciel réseau non chargé

18 : Index spécifié trop grand

Remarques :

·	Cette fonction ne peut être appelée qu'une fois le logiciel réseau lancé.

·	Le buffer réservé pour le nom local doit prévoir une place de 16 caractères et 128 pour celui du nom réseau. Dans les deux cas, l'information souhaitée est retournée sous la forme d'une chaîne ASCII terminée par le code ASCII nul.

·	Vous pouvez utiliser cette fonction pour obtenir toutes les entrées de la liste du réseau. Commencez l'appel à partir de l'indice 0 puis continuez avec des indices croissants jusqu'à ce que la fonction retourne le code d'erreur 18.

·	Le contenu des registres SI, DI, CS, DS, SS et ES n'est pas modifié par cette fonction. En revanche, le contenu de tous les autres registres est modifié même si le registre ne sert pas à retourner des informations.


Int 21h, Fct 5Fh, Sous-Fct 03h    Définir une entrée dans la liste du réseau     DOS (> 3.1)

Ces fonctions permettent de définir une nouvelle entrée dans la liste du réseau utilisée pour représenter un nom local à partir du nom d'une imprimante ou d'un lecteur.

Entrée :

AH 	= 5Fh

AL 	= 03h

BL 	= Type de périphérique

: 03 = Imprimante

: 04 = Lecteur (périphérique, répertoire ou fichier)

CX 	= Identification numérique pour accéder au périphérique via la liste du réseau

DS:SI 	= Pointeur FAR sur le buffer contenant le nom local du périphérique

ES:DI 	= Pointeur FAR sur le buffer contenant le nom réseau du périphérique

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

1 : Logiciel réseau non chargé

3 : Chemin d'accès inexistant

5 : Accès refusé

8 : Mémoire insuffisante pour incorporer une autre entrée dans la liste du réseau

Remarques :

·	Cette fonction ne peut être appelée qu'une fois le logiciel réseau lancé.

·	La longueur du nom du périphérique doit être de 15 caractères et doit se terminer par le code ASCII nul. On obtient ainsi une longueur maximale de 16 octets.

·	La longueur du nom réseau du périphérique peut atteindre 127 caractères et doit se terminer également par le code ASCII nul. La longueur maximal du buffer concerné s'élève ici à 128 octets.

·	Le contenu des registres BX, CX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 5Fh, Sous-Fct 04h    Supprimer une entrée de la liste du réseau DOS (> 3.1)

Cette fonction permet de supprimer de la liste du réseau une entrée définie préalablement par la sous-fonction 03h. La redirection vers le périphérique concerné s'effectue alors automatiquement.

Entrée :

AH 	= 5Fh

AL 	= 04h

DS:SI 	= Pointeur FAR sur le buffer contenant le nom local du périphérique

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

1 : Logiciel réseau non chargé

3 : Entrée inconnue

Remarques :

·	Cette fonction ne peut être appelée qu'une fois le logiciel réseau lancé.

·	La longueur du nom du périphérique doit être de 15 caractères et doit se terminer par le code ASCII nul. On obtient ainsi une longueur maximale de 16 octets.

·	Le contenu des registres BX, CX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 60h    Augmenter le nom de fichier    DOS (> 3.0)

Cette fonction sert à augmenter un nom de fichier si bien qu'il peut contenir une désignation complète de chemin et de périphérique outre le nom de fichier. On parle alors d'un nom de fichier "canonique".

Entrée :

AH 	= 60h

DS:SI 	= Pointeur FAR sur le buffer contenant le nom de fichier à compléter sous forme d'une chaîne ASCII

ES:DI 	= Pointeur FAR sur le buffer devant recevoir le nom complet sous forme d'une chaîne ASCII

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas AX = Code d'erreur

Remarques :

·	Outre l'augmentation du nom, cette fonction permet également de déterminer si un périphérique donné existe physiquement ou s'il est représenté par un autre périphérique. A cet effet, transmettez une chaîne à la fonction qui ne se compose uniquement que de la désignation du périphérique à consulter suivie d'un double point et d'un backslash pour le répertoire principal. Si cette chaîne est identique à la chaîne retournée, cela signifie que le périphérique existe physiquement. Le cas contraire indique qu'il s'agit d'une représentation et la valeur de retour désigne le périphérique et le répertoire sur lequel se trouve le lecteur.

·	Le contenu des registres BX, CX, SI, DI, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 61h    DOS (> 1.0)

Réservée à un usage interne


Int 21h, Fct 62h    Déterminer adresse de PSP    DOS (> version 3)

Cette fonction permet de lire l'adresse du PSP du programme actuellement exécuté.

Entrée :

AH 	= 62h

Sortie :

BX 	= Adresse de segment du PSP

Remarques :

·	Le PSP commence à l'adresse BX:0000.

·	Le contenu des registres AX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 63h    DOS (> 1.0)

Réservée à un usage interne


Int 21h, Fct 64h    DOS (> 1.0)

Réservée à un usage interne


Int 21h, Fct 65h     DOS (> 1.0)

Réservée à un usage interne


Int 21h, Fct 66h, Sous-Fct 01h    Lire la page de code en cours     DOS (> 3.3)

Cette fonction retourne le numéro de la page de code en cours et le numéro de la page standard spécifiées lors du lancement du système.

Entrée :

AH 	= 66h

AL 	= 01h

Sortie :

Flag Carry = 0 : Tout va bien, dans ce cas

BX = Numéro de la page de code en cours

DX = Numéro de la page de code standard

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

2 = La page de code n'existe pas

Remarques :

·	Le contenu des registres CX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 66h, Sous-Fct 02h    Définir la page de code en cours     DOS (> 3.3)

Cette fonction règle la page de code en cours dans la mesure où les commandes NLSFUNC et MODE CP PREPARE ont été préalablement appelées sur l'interface DOS et le driver COUNTRY.SYS a été implanté à travers le fichier de configuration.

Entrée :

AH 	= 66h

AL 	= 02h

BX 	= Numéro de la page de code à sélectionner

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

2 : La page de code ne peut pas être chargée

65 : Le périphérique ne peut pas être commuté vers une nouvelle page de code

Remarques :

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 67h    Spécifier le nombre de handles disponibles     DOS (> 3.3)

Le nombre de handles disponibles ainsi que le nombre de fichiers qu'un programme peut adresser simultanément peut être défini en appelant cette fonction. Alors que jusqu'à la version DOS 3.3, un programme ne pouvait disposer que de 20 handles au maximum, cette fonction permet à un programme de travailler simultanément sur plusieurs milliers de fichiers.

Entrée :

AH 	= 67h

BX 	= Nombre de handles disponibles

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas AX = Code d'erreur

Remarques :

·	Tant que DOS travaille avec l'option par défaut définie à 20, les handles sont remis dans le PSP du programme. Avec une valeur plus grande, les handles ne peuvent plus tenir dans le PSP, ce qui oblige DOS à allouer une cellule mémoire chargée de recevoir les handles à l'avenir. L'appel de la fonction échoue si la mémoire RAM est insuffisante.

·	Un programme ne peut pas accéder à plus de handles que le nombre prévu dans la commande FILES du fichier de configuration CONFIG.SYS. Bien que DOS ne signale pas une erreur en présence d'une valeur plus grande, le nombre des handles disponibles reste toutefois limité à la valeur spécifiée dans FILES.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 68h    Libérer le buffer de fichier     DOS (> 3.3)

En raison de l'appel de cette fonction, DOS est obligé d'inscrire toutes les données non encore écrites dans un fichier mais se trouvant encore dans les buffers de fichier internes dans le fichier spécifié. Cela empêche par exemple de perdre les données à cause d'une panne d'électricité.

Entrée :

AH 	= 68h

BX 	= Handle du fichier adressé

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas AX = Code d'erreur

Remarques :

·	Avant que cette fonction ne soit introduite dans la version DOS 3.3, il existait deux méthodes pour obliger DOS à libérer les buffers de fichier internes dans le fichier concerné. A certains égards, elles ont perdu leur intérêt face à la fonction décrite ici et ne sont d'ailleurs plus utilisées surtout si on exécute un programme sous la version DOS 3.3 ou supérieure.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 69h    DOS (> 1.0)

Réservée à un usage interne


Int 21h, Fct 6Ah    DOS (> 1.0)

Réservée à un usage interne


Int 21h, Fct 6Bh    DOS (> 1.0)

Réservée à un usage interne


Int 21h, Fct 6Ch    Fct OPEN étendue     DOS (> 4.0)

A partir de la version 4.0, cette fonction permet de créer un fichier lors de l'appel OPEN ou d'écraser un fichier existant. La fonction augmente ainsi les possibilités normales de la fonction OPEN 3Dh.

Entrée :

AH 	= 6Ch

AL	= 0

BX 	= Mode d'accès

CX 	= Attribut de fichier

DX 	= Réaction DOS

DS:SI 	= Pointeur FAR sur le buffer contenant le nom de fichier.

Sortie :

Flag Carry = 0 : Tout va bien, dans ce cas

AX = Handle du fichier

CX = Statut

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

1 : Logiciel de partage de fichier absent

2 : Fichier non trouvé

3 : Chemin non trouvé ou fichier inexistant

4 : Plus de handle disponible

5 : Accès refusé

12 : Mode d'accès interdit

Remarques :

·	Le nom de fichier doit être une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Outre la désignation du périphérique, il doit contenir la désignation complète du chemin et un nom de fichier, mais pas de jokers. Si la désignation de périphérique ou de chemin fait défaut, l'accès portera sur le périphérique ou le répertoire en cours.

·	Le mode d'accès se construit comme suit :

Bit 0-2 : Autorisation de lecture/écriture

000b 	= 	Le fichier est destiné uniquement à la lecture

001b 	= 	Le fichier est destiné uniquement à l'écriture

010b 	= 	Le fichier est destiné à la lecture et l'écriture

Bit 3 : 0b

Bit 4-6 : Mode de partage de fichier

000b 	= 	Seul le programme en cours peut accéder au fichier (mode de compatibilité)

001b 	= 	Seul le programme en cours peut accéder au fichier

010b 	= 	Un autre programme peut lire le fichier mais ne peut pas y écrire

011b 	= 	Un autre programme peut écrire dans le fichier mais ne peut pas le lire

100b 	= 	Un autre programme peut écrire dans le fichier et le lire

Bit 7 : Flag Handle

0 	= 	Le programme enfant du programme en cours peut également accéder au handle de ce fichier

1 	= 	Seul le programme en cours peut accéder au handle de ce fichier

Bit 8-12 : 0b

Bit 13:0 	= 	En cas d'erreur grave, appeler l'interruption 24h

1 	= 	En cas d'erreur grave, retourner le code d'erreur correspondant dans AX mais ne pas appeler l'interruption 24h

Bit 14:1 	= 	Lors de tout accès en écriture sur le fichier, adapter immédiatement l'entrée du répertoire

Bit 15 : 0b

·	Avant l'appel de la fonction, l'attribut de fichier du registre CX peut être chargé avec les attributs suivants.

Bit 0 = 1 : 	Le fichier peut uniquement être lu (Read-Only)

Bit 1 = 1 : 	Le fichier est protégé (non affiché par DIR)

Bit 2 = 1 : 	C'est un fichier système

Bit 5 = 1 : 	Fichier modifié depuis la dernière sauvegarde

Bit 6-15 : 	0b

·	Lorsque le fichier à ouvrir n'existe pas encore ou existe déjà, la réaction de la fonction apparaît dans les deux Nibles du registre DX. Les bits 0 à 3 sont réservés à la réaction lorsque le fichier n'existe pas encore. Dans ce cas, les valeurs prennent la signification suivante :

0000b = Terminer la fonction avec un code d'erreur

0001b = Créer le fichier

·	Les bits 4 à 7 signalent la réaction lorsque l'accès porte sur un fichier existant. Les valeurs signifient alors :

0000b = Terminer la fonction avec un code d'erreur

0001b = Ouvrir le fichier existant

·	Sous DOS 4.0 également, la fonction 3Dh peut être naturellement utilisée pour ouvrir un fichier.

·	Si l'appel de la fonction se déroule correctement, on peut utiliser le handle transmis pour appeler toutes les autres fonctions handle. Le registre CX contient alors un statut de la fonction informant sur les actions de la fonction. Dans ce cas :

0 = Fichier ouvert

1 = Nouveau fichier créé ou ouvert

2 = Fichier existant écrasé ou ouvert

·	Le pointeur de fichier est placé sur le premier octet du fichier.

·	Dans la version 4.0 également, le mode de partage de fichier dans les bits 4 à 6 du mode d'accès n'est intéressant que si le fichier se trouve sur une mémoire de masse faisant partie d'un réseau. Dans un tel cas, ces trois bits déterminent si d'autres programmes du réseau peuvent accéder à ce fichier lors de son ouverture et précisent les droits d'accès de ces programmes. Si ce bit possède la valeur 0, DOS traite ce fichier dans le Compatibility-Mode où l'existence d'un réseau est ignorée par rapport à ce fichier. Ainsi, seul le programme en cours peut accéder effectivement à ce fichier.

·	L'erreur 12 ne survient que sous la version DOS 3 et uniquement à l'intérieur d'un réseau lorsque le fichier est déjà ouvert par un autre programme et qu'il a été confirmé qu'aucun autre programme ne peut momentanément y accéder.

·	Le contenu des registres BX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Interruption 22h

Int 22h    Routine pour terminer un programme


Int 22h    Routine pour terminer un programme     DOS (> 1.0)

Le vecteur d'interruption de cette routine, qui figure à l'adresse 0000:0088, contient l'adresse d'une routine servant à terminer un programme. Cette routine sera appelée par toutes les fonctions pour terminer un programme, c'est-à-dire par l'interruption 20h et les fonctions 0h, 21h et 4Ch de l'interruption 21h. Elle rend ensuite le contrôle au programme-père, c'est-à-dire au programme qui avait appelé le programme qu'il s'agit de terminer. Cependant, bien que le vecteur d'interruption contienne l'adresse d'une routine qui pourrait donc être appelée à l'aide de l'instruction (langage machine) INT, cela ne doit jamais être tenté car cette routine est conçue comme une procédure FAR et non comme une routine d'interruption.

Si un programme modifie le contenu de ce vecteur d'interruption au cours de son exécution, la routine du DOS ne pourra plus être appelée pour terminer un programme. Pour éviter cela, le DOS sauvegarde le contenu de ce vecteur d'interruption dans le PSP du programme à exécuter avant de lui passer la main. Lorsqu'un programme est terminé à l'aide des fonctions indiquées plus haut, le contenu du vecteur d'interruption est tout d'abord recopié du PSP dans le vecteur, après quoi la routine voulue peut être appelée.


Interruption 23h

Int 23h    Touche Break actionnée


Int 23h    Touche Break actionnée     DOS

Cette interruption, ou plutôt le vecteur d'interruption correspondant, est également utilisée pour stocker l'adresse d'une routine. Il s'agit ici de la routine qui est appelée chaque fois qu'un caractère Ctrl-C est identifié ou bien que la touche Break est actionnée. Il serait donc possible d'appeler cette routine à l'aide de l'instruction (langage machine) INT mais cela ne doit jamais être tenté car cette routine est conçue comme une procédure FAR et non comme une routine d'interruption.

Un programme peut, au cours de son exécution, modifier le contenu de ce vecteur d'interruption, qui est stocké à partir de la cellule de mémoire 0000:008C, pour que ce ne soit plus la routine du DOS mais une routine du programme qui soit appelée lorsqu'un caractère Ctrl-C est rencontré. C'est un moyen, par exemple, d'empêcher que son exécution puisse être interrompue par la routine du DOS lorsqu'un caractère Ctrl-C est reçu. Lorsque cette routine sera appelée, tous les registres présenteront exactement la valeur qu'ils avaient lorsque avait été appelée la fonction DOS interrompue. Le programme peut alors entreprendre une réaction appropriée à la situation (par exemple en sortant un message sur l'écran) puis rendre le contrôle au DOS à l'aide de l'instruction (langage machine) IRET. Il est également possible de rendre le contrôle au DOS à l'aide d'une instruction (langage machine) FAR ENTREE mais dans ce cas la réaction du DOS dépendra de l'état du flag Carry. Si ce flag est mis, le DOS interrompra l'exécution du programme. S'il est au contraire annulé, rien ne se passera et l'exécution du programme reprendra normalement.

Lorsqu'un programme modifie le contenu de ce vecteur d'interruption, il peut parfaitement arriver qu'il soit terminé sans avoir restauré l'ancien contenu de ce vecteur. Or il se peut que la mémoire RAM qu'il occupait ait été à nouveau libérée et qu'elle soit réemployée par d'autres programmes, auquel cas la routine Ctrl-C risque d'avoir été effacée par d'autres données. Il peut en résulter un plantage du système si un caractère Ctrl-C apparaît, puisqu'un code tout à fait inadapté figure maintenant à la place de l'ancienne routine Ctrl-C.

Pour éviter cela, le DOS sauvegarde le contenu de ce vecteur d'interruption dans le PSP du programme à exécuter avant de lui passer la main. Lorsqu'un programme est terminé, le contenu du vecteur d'interruption est tout d'abord recopié du PSP dans le vecteur, après quoi le contrôle est rendu au programme-père.


Interruption 24h

Int 24h    Erreur critique


Int 24h    Erreur critique    DOS

Cette interruption, ou plutôt le vecteur d'interruption correspondant, est également utilisée pour stocker l'adresse d'une routine. Il s'agit ici de la routine qui est appelée chaque fois qu'une erreur critique est détectée lors d'un accès à l'électronique, lors d'un accès disquette par exemple.

Il serait donc possible d'appeler cette routine à l'aide de l'instruction (langage machine) INT mais cela ne doit jamais être tenté car cette routine est conçue comme une procédure FAR et non comme une routine d'interruption.

Un programme peut, au cours de son exécution, modifier le contenu de ce vecteur d'interruption, qui est stocké à partir de la cellule de mémoire 0000:0090, pour que ce ne soit plus la routine du DOS mais une routine du programme qui soit appelée lorsqu'une erreur de ce type se produit. C'est un moyen, par exemple, d'empêcher que son exécution puisse être interrompue par la routine du DOS lorsque le programme doit accéder au lecteur de disquette alors qu'aucune disquette n'y est placée. Lorsque cette routine est appelée à la suite d'une erreur critique, le bit 7 du registre AH indique le type d'erreur. S'il vaut 0, il s'agit d'une erreur disquette ou disque dur. Pour toute autre erreur, il vaudra 1. Une erreur disquette/disque dur ne sera cependant signalée qu'après plusieurs tentatives infructueuses pour accéder au périphérique. Les 8 bits inférieurs du registre DI (le contenu des 8 bits supérieurs étant indéfini) contiennent lors de l'appel de la routine un code qui décrit plus précisément l'erreur survenue. Les codes suivants peuvent se présenter :

0 : 	Disquette protégée contre l'écriture

1 : 	Accès à un périphérique inconnu

2 : 	Lecteur n'est pas prêt

3 : 	Instruction inconnue

4 : 	Erreur CRC

5 : 	Largeur de données incorrecte

6 : 	Recherche infructueuse

7 : 	Type de périphérique inconnu

8 : 	Secteur non trouvé

9 : 	Plus de papier sur l'imprimante

10 : 	Erreur d'écriture

11 : 	Erreur de lecture

12 : 	Erreur générale

La routine d'erreur doit veiller à ce qu'une fois qu'elle se sera achevée les registres SS, SP, DS, ES, BX, CX et DX contiennent les mêmes valeurs que lorsqu'elle avait été appelée. Au cours de son exécution, elle ne doit, d'autre part, accéder qu'aux fonctions 1 et 12 de l'interruption 21h. Il convient de la terminer par une instruction (langage machine) IRET en renvoyant au DOS, dans le registre AL, un code qui guidera la conduite ultérieure du DOS. Le DOS accepte les codes suivants :

0 : 	Ignorer l'erreur

1 : 	Répéter l'opération (l'accès)

2 : 	Terminer programme en appelant l'interruption 23h

3 : 	Interrompre simplement l'appel de fonction actuel (cette dernière possibilité n'existe qu'à partir de la version 3)

Lorsqu'un programme modifie le contenu de ce vecteur d'interruption, il peut parfaitement arriver qu'il soit terminé sans avoir restauré l'ancien contenu de ce vecteur. Or il se peut que la mémoire RAM qu'il occupait ait été à nouveau libérée et qu'elle soit remployée par d'autres programmes, auquel cas la routine d'erreur risque d'avoir été effacée par d'autres données. Il peut en résulter un plantage du système si une erreur survient, puisqu'un code tout à fait inadapté figure maintenant à la place de l'ancienne routine d'erreur.

Pour éviter cela, le DOS sauvegarde le contenu de ce vecteur d'interruption dans le PSP du programme à exécuter avant de lui passer la main. Lorsqu'un programme est terminé, le contenu du vecteur d'interruption est tout d'abord recopié du PSP dans le vecteur, après quoi le contrôle est rendu au programme-père.


Interruption 25h

Int 25h    Lecture absolue


Int 25h    Lecture absolue    DOS

Cette interruption permet de lire un ou plusieurs secteurs logiques consécutifs sur une disquette ou sur un disque dur. Cette lecture peut accéder à tous les secteurs du support et non pas seulement à la zone de fichiers du DOS au sens strict. Le DOS utilise lui-même cette interruption pour lire le répertoire racine et la FAT d'un support. Les données sont transférées du support dans un buffer du programme d'appel.

Entrée :

AL 	= Désignation de périphérique

CX 	= Nombre de secteurs à lire

DX 	= Premier secteur à lire

DS 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas

AX = Code d'erreur

1	Instruction incorrecte

2	Marque d'adresse incorrecte

4	Secteur non trouvé

8	Erreur DMA

16	Erreur CRC

32	Erreur du contrôleur de disque

64	Recherche infructueuse

128	Périphérique ne répond pas

Remarques :

·	Pour la désignation de périphérique, 0 représente le lecteur A, 1 le lecteur B, etc.

·	Après appel de cette fonction, le contenu de tous les registres peut avoir été modifié hormis celui des registres de segment.

·	Après appel de cette interruption, le pointeur de pile n'a pas la même position que lors de l'appel car deux octets qui avaient été placés sur la pile n'en sont pas retirés. Ces octets représentent le registre de flags, qui peut être retiré de la pile à l'aide de l'instruction (langage machine) POPF. Il suffit donc d'ajouter 2 à la valeur du pointeur de pile pour qu'il retrouve sa valeur d'origine. Si cette correction est négligée, la pile risque de croître sans cesse, jusqu'à déborder. C'est la raison pour laquelle cette interruption ne peut malheureusement être appelée à l'aide de fonctions de langages évolués pour appeler des interruptions.


Interruption 26h

Int 26h    Ecriture absolue


Int 26h    Ecriture absolue    DOS

Cette interruption permet d'écrire un ou plusieurs secteurs logiques consécutifs sur une disquette ou sur un disque dur. Cette écriture peut accéder à tous les secteurs du support et non pas seulement à la zone de fichiers du DOS au sens strict. Le DOS utilise lui-même cette interruption pour écrire le répertoire racine et la FAT d'un support. Les données sont transférées d'un buffer du programme d'appel vers le support.

Entrée :

AL 	= Désignation de périphérique

CX 	= Nombre de secteurs à écrire

DX 	= Premier secteur à écrire

DS 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0	: Tout va bien

Flag Carry =1	: Erreur, dans ce cas

AX = Code d'erreur

1	Instruction incorrecte

2	Marque d'adresse incorrecte

4	Secteur non trouvé

8	Erreur DMA

16	Erreur CRC

32	Erreur du contrôleur de disque

64	Recherche infructueuse

128	Périphérique ne répond pas

Remarques :

·	Pour la désignation de périphérique, 0 représente le lecteur A, 1 le lecteur B, etc.

·	Après appel de cette fonction, le contenu de tous les registres peut avoir été modifié hormis celui des registres de segment.

·	Après appel de cette interruption, le pointeur de pile n'a pas la même position que lors de l'appel car deux octets qui avaient été placés sur la pile n'en sont pas retirés. Ces octets représentent le registre de flags, qui peut être retiré de la pile à l'aide de l'instruction (langage machine) POPF. Il suffit donc d'ajouter 2 à la valeur du pointeur de pile pour qu'il retrouve sa valeur d'origine. Si cette correction est négligée, la pile risque de croître sans cesse, jusqu'à déborder. C'est la raison pour laquelle cette interruption ne peut malheureusement être appelée à l'aide de fonctions de langages évolués pour appeler des interruptions.


Interruption 27h

Int 27h    Terminer programme mais laisser en mémoire


Int 27h    Terminer programme mais laisser en mémoire     DOS

Cette fonction permet de terminer le programme exécuté et de rendre le contrôle au programme qui avait appelé le programme actuel.

Comme quand est appelée la fonction 31h de l'interruption du DOS 21h, cette fonction ne libère cependant pas la mémoire occupée par le programme, qui reste donc résident dans la mémoire.

Entrée :

CS 	= Adresse de segment du PSP

DX 	= Nombre d'octets à réserver + 1

Sortie :

aucune

Remarques :

·	Cette fonction convient uniquement à l'appel de programmes COM.

·	Le nombre d'octets à réserver se rapporte au commencement du PSP.

·	Les blocs de mémoire qui ont été réservés à l'aide de la fonction 48h ne sont pas affectés par la valeur dans le registre DX car ils ne peuvent être à nouveau libérés qu'en appelant la fonction 49h.

·	Il est préférable d'appeler la fonction 31h de l'interruption 21h plutôt que cette interruption.

·	Une erreur apparaîtra si cette interruption est appelée avec une valeur entre FFF1h et FFFFh dans le registre DX.

·	Les fichiers ouverts ne sont pas refermés par l'appel de cette interruption.


Fonctions Multiplexeur 2Fh

L'interruption 2Fh est appelée multiplexeur car elle constitue une interface d'accès aux différents programmes résidents sous DOS. Elle permet notamment aux programmes résidents de mettre leurs fonctions à la disposition des autres programmes.

MUX 01h, Fct 00h	PRINT : Tester l'état d'installation

MUX 01h, Fct 01h	PRINT : Ajouter un fichier à la file d'attente

MUX 01h, Fct 02h	PRINT : Retirer un fichier de la file d'attente

MUX 01h, Fct 03h	PRINT : Supprimer la file d'attente

MUX 01h, Fct 04h	PRINT : Interrompre l'impression pour tester son état

MUX 01h, Fct 05h	PRINT : Reprendre l'impression

MUX 01h, Fct 06h	PRINT : Déterminer l'imprimante en service

MUX 06h, Fct 00h	ASSIGN : Tester la présence

MUX 10h, Fct 00h	SHARE : Tester la présence

MUX 15h, Fct 00h	MSCDEX > 1.0 : Renvoyer le nombre de lecteurs CD-ROM

MUX 15h, Fct 01h	MSCDEX > 1.0 : Fournir des informations sur le gestionnaire CD

MUX 15h, Fct 02h	MSCDEX > 1.0 : Renvoyer le nom du fichier de copyright

MUX 15h, Fct 03h	MSCDEX > 1.0 : Renvoyer le nom du fichier Abstract

MUX 15h, Fct 04h	MSCDEX > 1.0 : Renvoyer le nom du fichier Bibliographic Doc.

MUX 15h, Fct 05h	MSCDEX > 1.0 : Lire VTOC du CD-ROM

MUX 15h, Fct 06h	MSCDEX > 1.0 : Réservé

MUX 15h, Fct 07h	MSCDEX > 1.0 : Réservé

MUX 15h, Fct 08h	MSCDEX > 1.0 : Lire des secteurs du CD-ROM

MUX 15h, Fct 09h	MSCDEX > 1.0 : Ecrire des secteurs sur le CD-R

MUX 15h, Fct 0Ah	MSCDEX > 1.0 : Réservé

MUX 15h, Fct 0Bh	MSCDEX > 2.0 : Interroger le lecteur CD-ROM

MUX 15h, Fct 0Ch	MSCDEX > 2.0 : Interroger le numéro de version MSCDEX

MUX 15h, Fct 0Dh	MSCDEX > 2.0 : Déterminer les lecteurs CD-ROM

MUX 15h, Fct 0Eh, Sous-Fct 00h	MSCDEX > 2.0 : Renvoyer les paramètres du volume

MUX 15h, Fct 0Eh, Sous-Fct 01h	MSCDEX > 2.0 : Paramétrage par défaut du volume

MUX 15h, Fct 0Fh	MSCDEX > 2.0 : Lire une entrée de répertoire du CD-ROM

MUX 15h, Fct 10h	MSCDEX > 2.1 : Envoyer une requête au driver du CD-ROM

MUX 1Ah, Fct 00h	ANSI.SYS : Tester la présence

MUX 43h, Fct 00h	HIMEM.SYS : Tester la présence

MUX 43h, Fct 10h	HIMEM.SYS : Indiquer l'adresse d'appel des Fcts XMS

MUX 48h, Fct 00h	DOSKEY : Tester la présence

MUX 48h, Fct 10h	DOSKEY : Prendre en compte la saisie d'un utilisateur

MUX ADh, Fct 80h	KEYB.COM : Déterminer le numéro de la version

MUX ADh, Fct 81h	KEYB.COM : Définir la page de codes active

MUX B0h, Fct 00h	GRAFTABL : Tester la présence

MUX B7h, Fct 00h	APPEND : Tester la présence

MUX B7h, Fct 02h	APPEND : Déterminer la compatibilité avec DOS 5

MUX B7h, Fct 04h	APPEND : Indiquer la liste des répertoires APPEND

MUX B7h, Fct 06h	APPEND : Lire les paramètres de la commande

MUX B7h, Fct 07h	APPEND : Définir les paramètres de la commande


Int 2Fh, code MUX 01h, Fct 00h    PRINT : Teste l'état d'installation    MUX

Grâce à cette fonction un programme peut détecter si la partie résidente de la commande PRINT de DOS est chargée.

Entrée :

AH	= 01h

Al	= 00h

Sortie :

AL 	= FFh : PRINT installé

Remarque :

·	Lorsque PRINT est installé, la fonction retourne la valeur FFh en AL. Ce n'est qu'à cette condition que les autres fonctions de PRINT pourront être invoquées. L'exploitation des fonctions de PRINT suppose donc que cette fonction ait été déclenchée au préalable.


Int 2Fh, code MUX 01h, Fct 01h    PRINT : Ajoute un fichier à la file d'attente    MUX

Cette fonction permet à un programme d'ajouter un fichier à la fin de la file en attente d'impression pour qu'il soit imprimé par PRINT en tâche de fond.

Entrée :

AH	= 01h

Al	= 01h

DS:DX	= PPointeur FAR sur une structure de données contenant des informations sur le fichier

Sortie :

Indicateur de retenue (flag Carry)

= 0 : ok

=1 : erreur, dans ce cas AX=code d'erreur

Remarque :

·	La structure de données référencée par DS:DX comporte 5 octets et doit être conforme au modèle suivant :

Offset	Signification	Type

00h	0	1 Byte

01h	Pointeur FAR sur chaîne ASCIIZ contenant le nom du fichier	1 Pointeur FAR

Les caractères génériques ne sont pas autorisés dans le nom, mais les désignations de lecteur et de chemin d'accès sont permises.

En cas d'erreur, le code retourné est le suivant :

0001h	Fonction inconnue

0002h	Fichier non trouvé

0003h	Chemin d'accès non trouvé

0004h	Trop de fichiers ouverts

0005h	Accès au fichier refusé

0008h	File d'attente saturée

000Fh	Périphérique inconnu

Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé que la partie résidente de PRINT était installée


Int 2Fh, code MUX 01h, Fct 02h    PRINT : Retirer un fichier de la file d'attente    MUX

Grâce à cette fonction un ou plusieurs fichiers peuvent être supprimés dans la file d'attente. Même le fichier en cours d'impression peut être retiré, ce qui arrête évidemment son impression.

Entrée :

AH	= 01h

AL	= 02h

DS:DX	= Pointeur sur nom de fichier sous forme de chaîne ASCIIZ

Sortie :

Indicateur de retenue

=0 : ok

=1 : Erreur, dans ce cas

AX= code d'erreur

0001h	Fonction inconnue

0002h	Fichier non trouvé

0003h	Chemin d'accès non trouvé

0004h	Trop de fichiers ouverts

0005h	Accès au fichier refusé

0008h	File d'attente saturée

000Fh	Périphérique inconnu

Remarque :

·	La structure de données référencée par DS:DX comporte 5 octets et doit être conforme au modèle suivant :

Offset	Signification	Type

00h	0	1 Byte

01h	Pointeur FAR sur chaîne ASCIIZ contenant le nom du fichier	1 Pointeur FAR

·	Les caractères génériques sont permis dans le nom de fichier indiqué, ce qui permet en un seul appel de retirer plusieurs fichiers de la file d'attente

·	Le seul code d'erreur possible est 0002h, "Fichier non trouvé", qui indique que le fichier en question n'est pas dans la file d'attente.

·	Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé que la partie résidente de PRINT était installée


Int 2Fh, code MUX 01h, Fct 03h    PRINT : Supprime la file d'attente    MUX

Tous les fichiers sont retirés de la file d'attente et l'impression du fichier en cours est stoppée.

Entrée :

AH	= 01h

AL	= 03h

Sortie :

néant

Remarque :

·	Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé au préalable que la partie résidente de PRINT est déjà installée


Int 2Fh, code MUX 01h, Fct 04h    PRINT : Interrompt l'impression pour tester son état    MUX

Cette fonction permet de connaître le contenu courant de la file d'attente et le nombre d'erreurs survenues

Entrée :

AH	= 01h

AL	= 04h

Sortie :

DX	= Compteur d 'erreurs

DS:SI	= pointeur FAR sur la file d'attente

Remarque :

·	L'impression est interrompue et ne reprendra que si on fait appel à la fonction 05h.

·	Le pointeur retourné en DS:SI référence le buffer dans lequel DOS maintient la file d'attente comme une suite d'éléments de 64 octets. Chacun de ces éléments contient la chaîne ASCIIZ du nom du fichier à imprimer. Le dernier élément de la liste commence par un caractère nul.

·	La liste peut être inspectée mais elle ne doit pas être modifiée.

·	Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé au préalable que la partie résidente de PRINT est déjà installée.


Int 2Fh, code MUX 01h, Fct 05h    PRINT : Reprendre l'impression    MUX

Cette fonction permet de reprendre l'impression après interruption par la fonction 04h.

Entrée :

AH	= 01h

AL	= 05h

Sortie :

néant

Remarque :

·	L'usage de cette fonction n'a évidemment de sens que si on a invoqué précédemment la fonction 04h.


Int 2Fh, code MUX 01h, Fct 06h    PRINT : Détermine l'imprimante en service    MUX

Tant qu'il reste au moins un fichier dans la file d'attente, cette fonction indique l'imprimante qui effectue l'impression.

Entrée :

AH	= 01h

AL	= 06h

Sortie :

Indicateur de retenue (flag carry)

=0 : file d'attente vide

=1 : File non vide, dans ce cas AX=0008h

DS:SI = Pointeur FAR sur l'en-tête du driver de périphérique

Remarque :

·	La manière dont cette fonction retourne son résultat est un peu bizarre. L'information cherchée, à savoir le pointeur sur l'en-tête du périphérique, n'est obtenue qu'en liaison avec un indicateur de retenue armé et le code d'erreur 0008 (file non vide). Si la file d'attente est vide et si de ce fait le pointeur n'est pas disponible, l'indicateur de retenue est désarmé.


Int 2Fh, code MUX 06h, Fct 00h    ASSIGN : Teste la présence    MUX

Grâce à cette fonction un programme peut détecter si la partie résidente de la commande ASSIGN est chargée.

Entrée :

AH	= 06h

AL	= 00h

Sortie :

AL	= FFh : ASSIGN installé


Int 2Fh, code MUX 10h, Fct 00h    SHARE : Teste la présence    MUX

Cette fonction permet de tester la présence de la partie résidente de la commande SHARE de DOS.

Entrée :

AH	= 10h

AL	= 00h

Sortie :

Al	=FFh : SHARE installé


Int 2Fh, Code MUX 15h, Fct 00h    MSCDEX > 1.0 : Renvoie le nombre de lecteurs CD-ROM    MUX

Cette fonction indique le nombre de lecteurs CD-ROM installés. Cette fonction exécute également un test d'installation de MSCDEX.

Entrée :

AH	= 15h

AL	= 00h

Sortie :

BX	= Nombre de lecteurs CD-ROM reconnus

CX	= Nom de périphérique du premier lecteur CD-ROM (0=A:, 1=B: etc.)

Remarque :

·	Un programme doit appeler cette fonction avant toutes les autres fonctions pour vérifier que MSCDEX est réellement installé. Avant l'appel de fonction, chargez la valeur 0 dans le registre BX et vérifiez si BX contient toujours 0 en fin d'appel. Si oui, MSCDEX ne peut pas être installé car il faut au moins un lecteur CD-ROM lorsque MSCDEX est en service.

·	Même si les noms de périphérique des lecteurs CD-ROM peuvent être communiqués en BX et CX après un appel de la fonction, il vaut mieux utiliser la fonction 0Dh dans la mesure où un gestionnaire MSCDEX de la version 2.0 et suivantes est disponible. Dans un réseau, il n'est pas toujours évident que les périphériques portent des noms consécutifs. Le premier lecteur CD-ROM D: peut être suivi d'un lecteur réseau E: auquel fait suite le second lecteur CD-ROM sous le nom F:. Il est conseillé d'appeler la fonction 0Dh car la fonction 00h ne fournit pas des informations précises.


Int 2Fh, Code MUX 15h, Fct 01h    MSCDEX > 1.0 : Fournit des informations sur le gestionnaire CD-ROM        MUX

Cette fonction remplit le buffer de l'appelant avec des informations sur les gestionnaires de périphérique qui, sur ordre de MSCDEX, ouvrent l'accès aux lecteurs CD-ROM installés. Ces informations aident à accéder directement aux gestionnaires en contournant MSCDEX.

Entrée :

AH	= 15h

AL	= 01h

ES:BX	= Pointeur FAR sur le buffer dans lequel la fonction inscrit les informations demandées

Sortie :

Aucune

Remarque :

·	Chaque entrée du buffer nécessite 5 octets. Si le buffer est alloué dynamiquement lors de l'exécution du programme, il faut d'abord déterminer le nombre de lecteurs CD-ROM installés avec la fonction 00h. Chaque lecteur CD-ROM occupe exactement une entrée du buffer. Si le buffer est alloué de façon statique, il faut prévoir une entrée pour chacun des 26 lecteurs CD-ROM (A: à Z:).

·	Les entrées du buffer acceptent un pointeur FAR sur l'en-tête du gestionnaire de périphérique concerné ainsi qu'un Unit Code. Ce code est requis car un gestionnaire de périphérique peut piloter plusieurs lecteurs CD-ROM émanant généralement du même fabricant. Pour différencier les divers lecteurs, il faut spécifier l'Unit Code avant l'appel du gestionnaire.

Offset	Contenu	Type

00h	Sub Unit Code pour le premier lecteur CD-ROM	1 BYTE

01h	Pointeur FAR sur l'en-tête du gestionnaire de périphérique concerné	1 DWORD

05h	Sub Unit Code pour le second lecteur CD-ROM	1 BYTE

06h	Pointeur FAR sur l'en-tête du gestionnaire de périphérique concerné	1 DWORD

0Ah	Sub Unit Code pour le troisième lecteur CD-ROM	1 BYTE

0Bh	Pointeur FAR sur l'en-tête du gestionnaire de périphérique concerné	1 DWORD


Int 2Fh, Code MUX 15h, Fct 02h    MSCDEX > 1.0 : Renvoie le nom du fichier de copyright    MUX

Un CD-ROM peut contenir ce qu'on appelle un fichier de copyright qui renseigne sur l'origine du CD. Cette fonction permet à un programme d'identifier le nom de ce fichier.

Entrée :

AH	= 15h

AL	= 02h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

ES:BX	= Pointeur FAR sur le buffer devant contenir le nom.

Sortie :

Flag Carry	= 0 : Tout va bien

= 1 : Erreur dans ce cas

AL= 15 : Lecteur spécifié non valide

Remarque :

Le buffer transmis doit renfermer suffisamment d'espace pour 38 octets bien que le nom du fichier de copyright ne se compose que de 8 caractères pour le nom et de 3 caractères pour l'extension (selon le format High Sierra). Il prend par conséquence le format habituel "nnnnnnnn.eee". Dans le buffer, le nom doit être stocké comme une chaîne ASCIIZ terminé par un octet nul. Le fichier doit se trouver dans le répertoire principal du CD car le nom ne peut pas contenir de chemin.

Le CD ne dispose pas d'un fichier de copyright si la chaîne renvoyée est vide.


Int 2Fh, Code MUX 15h, Fct 03h    MSCDEX > 1.0 : Renvoie le nom du fichier Abstract    MUX

Chaque CD-ROM peut être doté d'un fichier Abstract qui résume le contenu du CD. Cette fonction permet à un programme de déterminer le nom de ce fichier.

Entrée :

AH	= 15h

AL	= 03h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

ES:BX	= Pointeur FAR sur le buffer devant contenir le nom.

Sortie :

Carry-Flag 	= 0: Tout va bien

= 1 : Erreur dans ce cas

AL = 15 : Lecteur spécifié incorrect

Remarque :

Le buffer transmis doit renfermer suffisamment d'espace pour 38 octets bien que le nom du fichier Abstract ne se compose que de 8 caractères pour le nom et de 3 caractères pour l'extension (selon le format High Sierra). Il prend par conséquence le format habituel "nnnnnnnn.eee". Dans le buffer, le nom doit être stocké comme une chaîne ASCIIZ terminé par un octet nul. Le fichier doit se trouver dans le répertoire principal du CD car le nom ne peut pas contenir de chemin.

Le CD ne dispose pas d'un fichier Abstract si la chaîne renvoyée est vide.


Int 2Fh, Code MUX 15h, Fct 04h    MSCDEX > 1.0 : Renvoie le nom du fichier Bibliographic Documentation        MUX

Chaque CD-ROM est doté d'un fichier Bibliographic Documentation qui indique la source des informations stockées sur le CD. Cette fonction permet à un programme de déterminer le nom de ce fichier.

Entrée :

AH	= 15h

AL	= 04h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

ES:BX	= Pointeur FAR sur le buffer devant contenir le nom.

Sortie :

Carry-Flag 	= 0: Tout va bien

= 1 : Erreur dans ce cas

AL = 15 : Lecteur spécifié incorrect

Remarque :

·	Le buffer transmis doit renfermer suffisamment d'espace pour 38 octets bien que le nom du fichier BibDoc ne se compose que de 8 caractères pour le nom et de 3 caractères pour l'extension (selon le format High Sierra). Il prend par conséquence le format habituel "nnnnnnnn.eee". Dans le buffer, le nom doit être stocké comme une chaîne ASCIIZ terminé par un octet nul. Le fichier doit se trouver dans le répertoire principal du CD car le nom ne peut pas contenir de chemin.

·	Le CD ne dispose pas d'un fichier BibDoc si la chaîne renvoyée est vide.


Int 2Fh, Code MUX 15h, Fct 05h    MSCDEX > 1.0 : Lit VTOC du CD-ROM    MUX

Cette fonction permet à un programme de lire la table décrivant le contenu du CD-ROM.

Entrée :

AH	= 15h

AL	= 05h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

DX	= Numéro du volume dont il faut lire la VTOC.

ES:BX	= Pointeur FAR sur un buffer de 2 Ko devant stocker la VTOC

Sortie :

Carry-Flag 	= 0: Tout va bien, dans ce cas

= 1 : Erreur dans ce cas

AX = 1 : VTOC lue

AX = 00ffh : Il n'y a plus de volume donc il n'y a plus de VTOC à lire

AL= 15 : Lecteur spécifié incorrect ou

AL = 21 : Lecteur pas prêt

Remarque :

·	Une "Volume Table Of Contents" (VTOC) renfermant 2048 octets, il faut prévoir un buffer de 2 Ko pour stocker les données.

·	La plupart des CD-ROM ne sont équipés que d'un seul volume donc d'une seule VTOC. Des volumes multiples se rencontrent sur des CD multisession tels que des CD photo ou des CD MO.


Int 2Fh, Code MUX 15h, Fct 06h    MSCDEX > 1.0 : Réservé    MUX


Int 2Fh, Code MUX 15h, Fct 07h    MSCDEX > 1.0 : Réservé    MUX


Int 2Fh, Code MUX 15h, Fct 08h    MSCDEX > 1.0 : Lit des secteurs du CD-ROM    MUX

Cette fonction correspond à l'interruption 25h qui lit les secteurs d'un lecteur quelconque. Contrairement à l'interruption 25h, l'appel de cette fonction ne doit concerner que des lecteurs CD-ROM.

Entrée :

AH	= 15h

AL	= 08h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

SI:DI	= Numéro du premier secteur

DX	= Nombre de secteurs à lire

ES:BX	= Pointeur FAR sur le buffer devant contenir les secteurs à lire

Sortie :

Carry-Flag 	= 0: Tout va bien

= 1 : Erreur dans ce cas

AL = 15 : Lecteur spécifié incorrect ou

AL = 21 : Lecteur pas prêt

Remarque :

·	Chaque secteur d'un CD-ROM renfermant 2048 octets, le buffer doit prévoir 2 Ko d'espace par secteur lu.

·	Le numéro du premier secteur à lire est codé par SI et DI en tant que valeur 32 bits. SI stocke la valeur 16 bits de poids fort (Hi-Word) et DI la valeur de poids faible (Lo-Word).


Int 2Fh, Code MUX 15h, Fct 09h    MSCDEX > 1.0 : Ecrit des secteurs sur le CD-R    MUX

Cette fonction n'est disponible que pour des CD-R. Un lecteur CD-ROM ordinaire peut uniquement lire des secteurs. Cette fonction correspond à l'interruption 26h qui permet d'écrire des secteurs sur un lecteur quelconque. Contrairement à l'interruption 26h, l'appel de cette fonction ne doit être effectué que sur des lecteurs CD.

Entrée :

AH	= 15h

AL	= 09h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

SI:DI	= Numéro du premier secteur

DX	= Nombre de secteurs à écrire

ES:BX	= Pointeur FAR sur le buffer devant contenir les secteurs à écrire.

Sortie :

Flag Carry 	= 0 : Tout va bien

= 1 : Erreur dans ce cas

AL = 15: Lecteur spécifié incorrect ou

AL = 21: Lecteur pas prêt

Remarque :

·	Le buffer doit réserver 2048 octets pour stocker le contenu de chaque secteur à écrire.

·	Le numéro du premier secteur à lire est codé par SI et DI en tant que valeur 32 bits. SI stocke la valeur 16 bits de poids fort (Hi-Word) et DI la valeur de poids faible (Lo-Word).


Int 2Fh, Code MUX 15h, Fct 0Ah    MSCDEX > 1.0 : Réservé    MUX


Int 2Fh, Code MUX 15h, Fct 0Bh    MSCDEX > 2.0 : Interroge le lecteur CD-ROM    MUX

Cette fonction permet de savoir si le lecteur spécifié est un lecteur CD-ROM contrôlé par MSCDEX.

Entrée :

AH	=	15h

AL	=	0Bh

CX	=	Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

Sortie :

AX = 0 : Ce n'est pas un lecteur CD-ROM

AX  <> 0 : C'est un lecteur CD-ROM

BX = ADADh

Remarque :

Après appel de la fonction, il convient tout d'abord de tester le contenu du registre BX pour confirmer que c'est bien MSCDEX qui a répondu à l'appel et non pas un autre gestionnaire MUX. Si BX contient la signature MSCDEX ADADh, le contenu de AX montre si le lecteur spécifié est oui ou non un lecteur CD-ROM.


Int 2Fh, Code MUX 15h, Fct 0Ch    MSCDEX > 2.0 : Interroge le numéro de version MSCDEX    MUX

Un appel de cette fonction permet de connaître le numéro de version du gestionnaire MSCDEX installé.

Entrée :

AH	= 15h

AL	= 0Ch

Sortie :

BH	= Numéro de version majeure (1, 2 etc.)

BL	= Numéro de sous-version par exemple 10 pour 1.10 ou 2.10

 Remarques

·	Un appel de la fonction 00h doit précéder l'appel de cette fonction pour s'assurer que MSCDEX est réellement installé.

·	Avant l'appel de la fonction, le registre BX doit être chargé avec 0 car cette fonction n'est disponible que depuis la version 2.0 de MSCDEX. Si le registre contient toujours la même valeur après l'appel, cela signifie que la fonction n'est pas exécutable. On a donc affaire à la version 1.x de MSCDEX.


Int 2Fh, Code MUX 15h, Fct 0Dh    MSCDEX > 2.0 : Détermine les lecteurs CD-ROM    MUX

Cette fonction renvoie les noms de périphérique exacts des lecteurs CD-ROM gérés par MSCDEX. Cette fonction est à préférer par rapport à la fonction 00h car elle n'exige pas que tous les lecteurs CD-ROM soient énumérés de façon consécutive.

Entrée :

AH	= 15h

AL	= 0Dh

ES:BX	= Pointeur FAR sur le buffer contenant les noms de périphérique des lecteurs CD

Sortie :

ES:BX	= Pointeur FAR sur le buffer contenant les données concernées

Remarque :

·	Le buffer transmis doit fournir 1 octet d'espace à chaque lecteur CD-ROM. Cet octet renferme le nom de périphérique du lecteur sachant que 0 correspond à A:, 1 à B:, etc. Si le buffer est alloué dynamiquement pendant l'exécution du programme, il faut déterminer auparavant le nombre de lecteurs CD-ROM au moyen de la fonction 00h. Une entrée de buffer est requise pour chaque lecteur CD-ROM. Si le buffer est alloué de façon statique, il faut réserver une entrée pour chacun des 26 lecteurs CD-ROM (A: à Z:).


Int 2Fh, Code MUX 15h, Fct 0Eh, Sous-Fct 00h    MSCDEX > 2.0 : Renvoie les paramètres par défaut du volume du CD-ROM        MUX

MSCDEX active normalement le premier volume sur le CD lors de la définition d'un nouveau lecteur CD-ROM. Mais la sous-fonction 01h permet de changer ce paramétrage en spécifiant le second volume à activer par défaut. Cette fonction renvoie l'état en cours de cette définition.

Entrée :

AH	= 15h

AL	= 0Eh

BX	= 00h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

DX	= 00h

Sortie :

FC	= 0: Tout va bien, dans ce cas

DH	= 1 : premier volume actif

DH	= 2 : deuxième volume actif

DH	= 1 : Erreur dans ce cas

AL = 1: Sous-fonction inconnue ou

AL = 15: Lecteur spécifié incorrect

Remarque :

·	Cette fonction ne présente de l'intérêt que dans des environnements opérant avec des CD-ROM japonais équipés généralement de deux volumes : le premier est destiné au texte en code ASCII normal, le deuxième au texte en code 2 Byte Kanji.


Int 2Fh, Code MUX 15h, Fct 0Eh, Sous-Fct 01h    MSCDEX > 2.0 : Paramétrage par défaut du volume du CD-ROM    MUX

MSCDEX active normalement le premier volume sur le CD lors de la définition d'un nouveau lecteur CD-ROM. Mais cette sous-fonction permet de changer ce paramétrage en spécifiant le second volume à activer par défaut.

Entrée :

AH	= 15h

AL	= 0Eh

BX	= 01h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

DX	= 0100h : Activer automatiquement le premier volume

DX	= 0200h : Activer automatiquement le second volume

Sortie :

FC	= 0: Tout va bien

= 1 : Erreur dans ce cas

AL = 1 : Sous-fonction inconnue ou

AL = 15 : Lecteur spécifié incorrect

Remarque :

·	Cette fonction ne présente de l'intérêt que dans des environnements opérant avec des CD-ROM japonais équipés généralement de deux volumes : le premier est destiné au texte en code ASCII normal, le deuxième au texte en code 2 Byte Kanji.


Int 2Fh, Code MUX 15h, Fct 0Fh    MSCDEX > 2.0 : Lit une entrée de répertoire du CD-ROM    MUX

Cette fonction lit des entrées de répertoire d'un lecteur CD-ROM.

Entrée :

AH	= 15h

AL	= 0Fh

CL	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

CH	= Flag Copy	0 : Copier une entrée de répertoire sans aucune modification

1 : Convertir l'entrée de répertoire en une structure MSCDEX (toutes les différences entre ISO 9660 et High Sierra sont prises en compte)

ES:BX	= Pointeur FAR sur le buffer contenant les noms de fichier

SI:DI	= Pointeur FAR sur le buffer stockant l'entrée de répertoire

Sortie :

FC 	= 0: Tout va bien

= 1 : Erreur dans ce cas

AL = 2 : Fichier non trouvé

AL = 15: Lecteur spécifié incorrect

AL = 18: Mémoire insuffisante pour MSCDEX

AL = 21: Lecteur pas prêt

Remarque :

Le chemin et le nom de fichier renvoyés par la fonction à l'aide d'un pointeur sur ES:BX doivent être une chaîne ASCIIZ ne contenant que des caractères autorisés par le format High Sierra ou par la norme ISO 9660. Les caractères génériques tels que * et ? sont expressément interdits de même que les renvois aux répertoires (.) et (..).

Selon la valeur spécifiée en CH, MSCDEX renvoie l'entrée de répertoire sous deux formes. Dans sa forme brute (CH=0), l'entrée de répertoire est copiée en mémoire par le CD-ROM sans aucune modification. Mais les entrées de répertoire peuvent être données au format High Sierra ou ISO 9660, selon le CD-ROM utilisé. Le buffer doit disposer dans ce cas d'au moins 255 octets.

Si CH contient la valeur 1, MSCDEX construit l'entrée de répertoire au format High Sierra ou ISO 9660 sur une structure commune à configurer pour un buffer de 280 octets. L'entrée de répertoire renvoyée présente dans ce cas la structure suivante :

Offset	Contenu	Type

00h	Importance des attributs étendus (XAR) en tant que facteur de la taille de bloc logique	1 BYTE

01h	Numéro de bloc logique du premier bloc du fichier	1 DWORD

05h	Taille des blocs logiques en octet (2048 octets, mais 512 et 1024 octets sont admis)	1 WORD

07h	Taille du fichier en octets	1 DWORD

0Bh	Date et heure d'enregistrement du fichier	7 BYTE

12h	Flags de fichier	1 BYTE

13h	Interleave Size	1 BYTE

14h	Interleave Skip	1 BYTE

15h	Numéro Volume Set	1 WORD

17h	Longueur du nom de fichier en octets	1 BYTE

18h	Numéro de fichier sous forme de chaîne ASCIIZ	38 BYTE

3Ah	Numéro de version du fichier	1 WORD

3Ch	Nombre d'octets enregistrés en plus dans le champ suivant	1 WORD

3Eh	Octets additionnels enregistrés	220 BYTE


Int 2Fh, Code MUX 15h, Fct 10h    MSCDEX > 2.1 : Envoie une requête au driver du CD-ROM        MUX

Cette fonction permet à un programme d'envoyer une requête au gestionnaire de périphérique d'un lecteur CD-ROM sans connaître l'adresse du gestionnaire ni le code Sub Unit du lecteur CD-ROM concerné.

Entrée :

AH	= 15h

AL	= 10h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

ES:BX	= Pointeur FAR sur le buffer contenant la requête du gestionnaire de périphérique

Sortie :

Aucune

Remarque :

·	Microsoft conseille d'utiliser cette fonction pour communiquer avec le gestionnaire de périphérique d'un lecteur CD-ROM. Elle permet au programmeur d'adresser un gestionnaire de périphérique sans connaître l'adresse ni le code Sub Unit du lecteur concerné. Lors de l'appel de cette fonction, MSCDEX inscrit automatiquement cette information dans le bloc Device Request spécifié et détermine le gestionnaire de périphérique adéquat à partir du nom de lecteur.


Int 2Fh, code MUX 1Ah, Fct 00h    ANSI.SYS : Teste la présence    MUX

Cette fonction permet de tester la présence du driver de périphérique ANSI.SYS

Entrée :

AH	= 1Ah

AL	= 00h

Sortie :

Al	=FFh : ANSI.SYS installé


Int 2Fh, code MUX 43h, Fct 00h    HIMEM.SYS : Teste la présence    MUX

Cette fonction permet de tester la présence du driver de périphérique HIMEM.SYS qui permet d'accéder à la mémoire étendue selon le standard XMS.

Entrée :

AH	= 43h

AL	= 00h

Sortie :

AL	=80h: HIMEM.SYS installé

Remarque :

·	Notez bien que cette fonction contrairement à ses homologues qui effectuent également un test d'installation ne renvoie pas la valeur FFh en cas de succès mais la valeur 80h.

·	Pour assurer la compatibilité avec HIMEM.SYS, cet appel est aussi supporté par d'autres gestionnaires de mémoire XMS.


Int 2Fh, code MUX 43h, Fct 10h    HIMEM.SYS : Indique l'adresse d'appel des Fcts XMS    MUX

Contrairement à ce qui se passe pour les autres gestionnaires de mémoire, les fonctions XMS de HIMEM.SYS ne sont pas déclenchées par des interruptions mais par une routine FAR CALL dont l'adresse est obtenue par le moyen de la présente fonction.

Entrée :

AH	= 43h

AL	= 10h

Sortie :

ES:BX = Pointeur FAR pour appeler les fonctions XMS

Remarque :

·	Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé au préalable que HIMEM.SYS est déjà installé


Int 2Fh, code MUX 48h, Fct 00h    DOSKEY : Teste la présence    MUX

Cette fonction permet de savoir si le programme de DOS DOSKEY.COM est chargé

Entrée :

AH	= 48h

AL	= 00h

Sortie :

AL	=00h : non installé

Remarque :

·	DOSKEY n'existe que depuis la version 5.0 de DOS

·	Notez qu'à l'inverse de fonctions semblables seule est définie la valeur qui indique que le programme DOSKEY.COM n'est pas chargé!


Int 2Fh, code MUX 48h, Fct 10h    DOSKEY : Prend en compte la saisie d'un utilisateur    MUX

Entrée :

AH	= 48h

AL	= 10h

DS:DX	= Pointeur sur structure de données

Sortie :

néant

Remarque :

·	La structure de données référencée par le pointeur en DS:DX s'étend sur 130 octets et mémorise entre autres les saisies de l'utilisateur. Elle doit être conforme au modèle suivant :

Offset	Signification	Type

00h	Taille du buffer de saisie doit être 128	1 OCTET

01h	Nombre de caractères lus - 1	1 OCTET

02h	Buffer de saisie 	128 OCTETS

Le nombre de caractères lus est reporté par DOSKEY dans la structure de données. Avant appel à DOSKEY, ce champ, contrairement à celui de la taille, n'a pas besoin d'être initialisé.


Int 2Fh, code MUX ADh, Fct 80h    KEYB.COM : Détermine le numéro de la version    MUX

Cette fonction indique le numéro de la version du driver de clavier de DOS appelé KEYB.COM.

Entrée :

AH	= Adh

AL	= 80h

BX	=0

Sortie :

BH	= partie majeure du numéro de la version

BL	= partie mineure du même numéro

Remarque :

·	Si BH et BL sont égaux à 0, c'est que KEYB.COM n'est pas installé


Int 2Fh, code MUX ADh, Fct 81h    KEYB.COM : Définit la page de codes active    MUX

Cette fonction permet de fixer la page de codes active.

Entrée :

AH	= Adh

AL	= 81

BX	= Numéro de la page de codes

Sortie :

Indicateur de retenue

= 0 : ok

=1 : erreur. Dans ce cas

AX=0001 "Page de codes inconnue"

Sortie :

néant

Remarque :

·	Les pages de codes suivantes sont reconnues par KEYB :

Code	Jeu de caractères

437	USA

850	Multilingue (tous pays européens )

860	Portugal

863	Canada français

865	Scandinavie

·	Cette fonction ne devrait être invoquée que si un appel à la fonction 80h a prouvé au préalable que KEYB.COM est installé


Int 2Fh, code MUX B0h, Fct 00h    GRAFTABL : Teste la présence    MUX

Cette fonction permet de savoir si la partie résidente de la commande GRAFTABL de DOS est chargée.

Entrée :

AH	= B0h

AL	= 00h

Sortie :

AL	= FFh : GRAFTABL chargé


Int 2Fh, code MUX B7h, Fct 00h    APPEND : Teste la présence    MUX

Cette fonction permet de savoir si la partie résidente de la commande APPEND de DOS est chargée.

Entrée :

AH	= B7h

AL	= 00h

Sortie :

AL	= FFh : APPEND chargé


Int 2Fh, code MUX B7h, Fct 02h    APPEND : Détermine la compatibilité avec DOS 5    MUX

Entrée :

AH	= B7h

AL	= 02h

Sortie :

AX	= FFFFh : compatible avec DOS 5

Remarque :

·	Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé au préalable que APPEND est bien installé


Int 2Fh, code MUX B7h, Fct 04h    APPEND : Indique la liste des répertoires APPEND    MUX

Grâce à cette fonction on peut prendre connaissance des différents répertoires confiés à APPEND pour la recherche des fichiers.

Entrée :

AH	= B7h

AL	= 04h

Sortie :

ES:DI	= Pointeur FAR sur le buffer des répertoires APPEND

Remarque :

·	Le buffer référencé par le pointeur en ES:DI contient les répertoires sous forme de chaîne ASCIIZ. Comme c'est le cas pour la commande PATH, les différentes répertoires sont séparés par des points virgules.

·	Le contenu de ce buffer ne doit pas être modifié par celui qui l'inspecte

·	Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé au préalable que APPEND est bien chargé


Int 2Fh, code MUX B7h, Fct 06h    APPEND : Lit les paramètres de la commande    MUX

Cette fonction permet de prendre connaissance des différents modes opératoires fixés par les paramètres de la ligne de commande au moment du chargement de APPEND.

Entrée :

AH	=B7h

AL	=06h

Sortie :

BX	= Indicateur APPEND

Remarque :

·	Les différents bits de l'indicateur retourné représentent les modes opératoires. Les bits non mentionnés dans le tableau ci-dessous n'ont pas de signification et sont à 0 :

Bit	Signification

0	1 = APPEND est actif

12	1 =	Les répertoires APPEND ne sont pris en compte que si les noms des fichiers cherchés comportent des désignations explicites d'unité correspondant exactement à celles transmises à APPEND

13	1 = commutateur /PATH:ON actif

14	1 = commutateur /E actif

15	1 = commutateur /X:ON actif

·	Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé au préalable que APPEND est bien chargé.


Int 2Fh, code MUX B7h, Fct 07h    APPEND : Définit les paramètres de la commande    MUX

Cette fonction est symétrique de la fonction 06h et permet de fixer les paramètres de fonctionnement de APPEND

Entrée :

AH	= B7h

AL	= 07h

BX	= Indicateur APPEND

Sortie :

néant

Remarque :

·	Les différents bits de l'indicateur représentent les modes opératoires. Les bits non mentionnés dans le tableau ci-dessous n'ont pas de signification et sont à 0 :

Bit	Signification

0	1 = APPEND est actif

12	1 =	Les répertoires APPEND ne sont pris en compte que si les noms des fichiers cherchés comportent des désignations explicites d'unité correspondant exactement à celles transmises à APPEND

13	1 = commutateur /PATH:ON actif

14	1 = commutateur /E actif

15	1 = commutateur /X:ON actif

·	Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé au préalable que APPEND est bien chargé


Fonctions EMM/EMS

Le standard EMS inventé par les sociétés Lotus, Intel et Microsoft existe déjà depuis près de dix années. Il régule l'accès aux cartes de mémoire étendue travaillant selon le principe du Banking et autorisant toujours l'accès à une petite partie de la totalité de la mémoire étendue.

La plupart des cartes EMS reconnaissent la version 3.2 de ce standard et par conséquent les fonctions EMS définies sous les versions 3.0 et 3.2. Très peu de cartes de mémoire étendue reconnaissent la spécification EMS 4.0 et les fonctions qui s'y rapportent. Cela ne s'applique pas seulement à la majorité des émulateurs EMS actuellement commercialisés pour simuler la mémoire EMS via la mémoire étendue. Généralement, ils sont conçus à partir de la version 4.0.

Fonction 40h	Lire l'état de l'EMM

Fonction 41h	Lire l'adresse de segment du cadre de page

Fonction 42h	Lire le nombre de pages EMS

Fonction 43h	Allouer la mémoire EMS

Fonction 44h	Définir le mapping

Fonction 45h	Libérer les pages EMS

Fonction 46h	Lire la version EMM

Fonction 47h	Enregistrer le mapping

Fonction 48h	Rétablir le mapping

Fonction 49h	Non documentée

Fonction 4Ah	Non documentée

Fonction 4Bh	Lire le nombre de handles

Fonction 4Ch	Déterminer le nombre de pages allouées

Fonction 4Dh	Lire tous les handles

Fonction 4Eh, Sous-Fct 00h	Enregistrer la table des pages

Fonction 4Eh, Sous-Fct 01h	Rétablir la table des pages

Fonction 4Eh, Sous-Fct 02h	Enregistrer et rétablir simultanément la table des pages

Fonction 4Eh, Sous-Fct 03h	Lire la taille de la table des pages

Fonction 4Fh, Sous-Fct 00h	Enregistrer une partie de la table des pages

Fonction 4Fh, Sous-Fct 01h	Rétablir une table des pages enregistrée partiellement

Fonction 4Fh, Sous-Fct 02h	Lire la taille du buffer pour recevoir une table des pages partielle

Fonction 50h, Sous-Fct 00h	Construire des pages logiques sur des pages physiques par num

Fonction 50h, Sous-Fct 01h	Construire des pages logiques sur des pages phys. par adresses

Fonction 51h	Modifier le nombre de pages logiques allouées

Fonction 52h, Sous-Fct 00h	Lire l'attribut d'un handle

Fonction 52h, Sous-Fct 01h	Définir l'attribut d'un handle

Fonction 52h, Sous-Fct 02h	Vérifier les pages EMS non volatiles

Fonction 53h, Sous-Fct 00h	Lire le nom d'un handle

Fonction 53h, Sous-Fct 01h	Définir le nom d'un handle

Fonction 54h, Sous-Fct 00h	Lire les noms de tous les handles

Fonction 54h, Sous-Fct 01h	Lire un handle avec un nom précis

Fonction 55h, Sous-Fct 00h	Construire des pages et sauter vers la mémoire étendue

Fonction 55h, Sous-Fct 01h	Afficher pages et sauter vers la mémoire étendue

Fonction 56h, Sous-Fct 00h	Afficher pages et appeler routine en mémoire étendue

Fonction 56h, sous-Fct 01h	Afficher des pages et appeler une routine de la mémoire étendue

Fonction 56h, sous-Fct 02h	Lire la mémoire nécessaire

Fonction 57h, sous-Fct 00h	Copier un bloc de mémoire

Fonction 57h, sous-Fct 01h	Echanger des blocs de mémoire

Fonction 58h, sous-Fct 00h	Renvoie les adresses des pages EMS physiques et leurs numéros

Fonction 58h, sous-Fct 01h	Renvoie le nombre de pages EMS

Fonction 59h, sous-Fct 00h	Renvoie des informations sur le matériel EMS

Fonction 59h, sous-Fct 01h	Renvoie le nombre de pages EMS non standardisées

Fonction 5Ah, sous-Fct 00h	Alloue des pages EMS

Fonction 5Ah, sous-Fct 01h	Alloue des pages EMS non standardisées

Fonction 5Bh	Utile dans les transferts DMA

Fonction 5Ch	Prépare l'EMS à un redémarrage à chaud

Fonction 5Dh	Utile pour inactiver le système d'exploitation


Int 67h, Fct 40h    Lire l'état de l'EMM    LIM/EMS (> 3.0)

Cette fonction détermine l'état (d'erreur) de l'EMM (Expanded Memory Manager), tel qu'il est également renvoyé après appel de toutes les autres fonctions EMS.

Entrée :

AH	= 40h

Sortie :

AH	= état de l'EMM

00h : 	tout va bien

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	Il est conseillé d'appeler cette fonction avant de commencer à travailler avec la mémoire EMS car cela permet de constater facilement si le matériel et le logiciel correspondants fonctionnent sans problème.


Int 67h, Fct 41h    Lire l'adresse de segment du cadre de page        LIM/EMS (> 3.0)

Cette fonction détermine l'adresse de segment du Page Frame.

Entrée :

AH	= 41h

Sortie :

AH	= 0, o.k, auquel cas :

BX = adresse de segment du cadre de page

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	L'adresse renvoyée ainsi que la fonction 58h/01h (Déterminer le nombre de pages EMS physiques, à partir de 4.0) permettent de calculer les adresses des autres pages physiques, la première page commençant à l'adresse PAGE FRAME:0000. Les autres pages suivent ensuite à intervalles de 16 Ko. Si le numéro de version de l'EMM est inférieur à 4.0, le nombre des pages physiques EMS est alors toujours de 4.


Int 67h, Fct 42h    Lire le nombre de pages EMS    LIM/EMS (> 3.0)

Cette fonction indique au programme d'appel combien de pages EMS (de 16 Ko chacune) sont installées et combien sont encore libres, c'est-à-dire combien n'ont pas encore été allouées.

Entrée :

AH	= 42h

Sortie :

AH	= 0, o.k, auquel cas :

BX = Nombre de pages libres (non encore allouées)

DX = Nombre total de pages EMS

AH	> 0, erreur:

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	Pour calculer la taille en Ko de la mémoire EMS libre, on multiplie le nombre de pages libres par 16.


Int 67h, Fct 43h    Allouer la mémoire EMS    LIM/EMS (> 3.0)

Cette fonction permet à un programme de se faire allouer un certain nombre de pages (de 16 Ko) pour ses opérations.

Entrée :

AH	= 43h

BX	= Nombre de pages logiques à allouer (de 16 Ko)

Sortie :

AH	= 0, o.k, auquel cas :

DX = Handle pour l'accès à la mémoire allouée

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	Le handle renvoyé servira ensuite à accéder à, puis à libérer la mémoire allouée. Il doit donc être mémorisé par l'utilisateur. Si ce handle est "perdu" après appel de la fonction, le programme d'appel n'aura plus aucune possibilité de se le faire communiquer à nouveau, de sorte que la mémoire allouée ne pourra plus être libérée pour être à nouveau rendue accessible à d'autres programmes.

·	L'appel de cette fonction peut échouer si le nombre de pages réclamées est supérieur au nombre de pages libres ou bien si, bien qu'il reste encore suffisamment de pages, cette fonction a été appelée tellement souvent que l'EMM ne peut plus fournir d'autre handle.

·	Les handles portent normalement les numéros FF00h, FE01h, FD02h, FC03h etc.


Int 67h, Fct 44h    Définir le mapping    LIM/EMS (> 3.0)

Cette fonction permet de placer l'une des pages précédemment allouées à l'aide de la fonction 4h dans l'une des 4 pages physiques du cadre de page.

Entrée :

AH	= 44h

AL	= Numéro de page physique (0 à 3)

BX	= Numéro de page logique

DX	= Handle

Sortie :

AH	= Etat d'erreur

00h :	tout va bien

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	Le handle à spécifier lors de l'appel de cette fonction doit avoir été obtenu à la suite d'un appel antérieur de la fonction 43h de l'EMM.

·	Les pages logiques sont numérotées à partir de 0, de sorte que la valeur 0 doit être spécifiée pour accéder à la première page allouée. La plus grande valeur autorisée est donc égale au nombre de pages allouées moins 1.

·	Pour pouvoir accéder à la page physique, il faut connaître l'adresse de segment du cadre de page, qui peut être obtenue à l'aide de la fonction 41h.


Int 67h, Fct 45h    Libérer les pages EMS    LIM/EMS (> 3.0)

Cette fonction permet de restituer à l'EMM et de rendre ainsi accessibles à d'autres programmes les pages précédemment allouées à l'aide de la fonction 43h.

Entrée :

AH	= 45h

DX	= Handle

Sortie :

AH	= Etat d'erreur

00h : tout va bien

AH > 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	Le handle à spécifier lors de l'appel de cette fonction doit avoir été obtenu à la suite d'un appel antérieur de la fonction 4 de l'EMM.

·	L'appel de cette fonction libère toutes les pages allouées à travers ce handle. Il n'est pas possible de sélectionner les pages à libérer. Cependant, la fonction 51h (Modifier le nombre de pages logiques allouées, à partir de 4.0) permet d'ajouter ou de retirer une ou plusieurs pages parmi les pages déjà allouées.

·	Après un appel réussi de cette fonction, le handle spécifié n'est plus valable et ne peut donc plus être employé pour accéder à la mémoire EMS.

·	Si la fonction revient avec un message d'erreur, il convient de répéter au moins trois fois l'appel de cette fonction car sinon les pages qui n'ont pu être libérées resteraient allouées une fois le programme terminé et ne pourraient donc être remises à la disposition d'autres programmes.


Int 67h, Fct 46h    Lire la version EMM    LIM/EMS (> 3.0)

Cette fonction permet d'obtenir le numéro de version de l'EMM (Expanded Memory Manager).

Entrée :

AH	= 46h

Sortie :

AH	= 0, o.k, auquel cas :

AL	= numéro de version EMM

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	Le numéro de version EMM figure dans le registre AL sous forme d'un nombre BCD, le numéro de version principale (le chiffre avant le point) étant placé dans les 4 bits de plus fort poids et le numéro de sous-version (le chiffre après le point) étant placé dans les 4 bits de plus faible poids.


Int 67h, Fct 47h    Enregistrer le mapping    LIM/EMS (> 3.0)

En appelant cette fonction, vous faites sauvegarder la concordance actuelle entre les quatre pages physiques du Page Frame et les pages logiques qui leur ont été attribuées.

Entrée :

AH	= 47h

DX	= Handle

Sortie :

AH	= Etat d'erreur

00h : tout va bien

 AH > 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	Le handle à spécifier lors de l'appel de cette fonction doit avoir été obtenu à la suite d'un appel antérieur de la fonction 43h de l'EMM.

·	Cette fonction est conçue pour être appelée par des programmes résidents ou le système d'exploitation dans le cadre d'un environnement multitâche mais elle peut aussi être utilisée par n'importe quel autre programme.


Int 67h, Fct 48h    Rétablir le mapping    LIM/EMS (> 3.0)

Cette fonction rétablit la concordance entre pages logiques et physiques (Mapping) qui avait été précédemment sauvegardée à l'aide de la fonction 47h.

Entrée :

AH	= 48h

DX	= Handle

Sortie :

AH	= Etat d'erreur

00h : tout va bien

AH > 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	Le handle à spécifier lors de l'appel de cette fonction doit avoir été obtenu à la suite d'un appel antérieur de la fonction 42h de l'EMM.

·	Cet appel est toujours infructueux lorsque le Mapping correspondant au handle spécifié n'a pas encore été sauvegardé à l'aide de la fonction 47h ou bien s'il avait déjà été rétabli au cours d'un appel antérieur de la fonction 48h.

·	Cette fonction est conçue pour être appelée par des programmes résidents ou le système d'exploitation dans le cadre d'un environnement multitâche mais elle peut aussi être utilisée par n'importe quel autre programme.


Int 67h, Fct 49h    Non documentée    LIM/EMS (> 3.0)

Le rôle et les effets de cette fonction ne sont pas connus. Elle ne s'utilise que sur le plan interne dans l'EMM.


Int 67h, Fct 4Ah    Non documentée    LIM/EMS (> 3.0)

Le rôle et les effets de cette fonction ne sont pas connus. Elle ne s'utilise que sur le plan interne dans l'EMM.


Int 67h, Fct 4Bh    Lire le nombre de handles    LIM/EMS (> 3.0)

Cette fonction permet de connaître le nombre de zones de mémoire ayant été actuellement allouées à l'aide de la fonction 4h, autrement dit le nombre de handles attribués.

Entrée :

AH	= 4Bh

Sortie :

AH	= 0, o.k, auquel cas :

BX	= nombre de handles attribués

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	Le nombre de handles attribués n'est pas nécessairement identique au nombre de programmes accédant actuellement à la mémoire EMS car un programme peut réclamer à l'aide de la fonction 43h autant de blocs de mémoire EMS et donc autant de handles qu'il le souhaite.


Int 67h, Fct 4Ch    Déterminer le nombre de pages allouées    LIM/EMS (> 3.0)

Cette fonction indique au programme d'appel combien de pages ont été allouées au handle spécifié.

Entrée :

AH	= 4Ch

DX	= Handle

Sortie :

AH	= 0, o.k, auquel cas :

BX 	= Nombre de pages logiques allouées

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	Le nombre de pages allouées renvoyées doit être compris entre 1 et 512.


Int 67h, Fct 4Dh    Lire tous les handles    LIM/EMS (> 3.0)

Cette fonction permet de charger dans un tableau tous les handles activés ainsi que le nombre de pages respectivement allouées à chacun.

Entrée :

AH	= 4Dh

ES:DI = Pointeur sur le tableau

Sortie :

AH	= 0, o.k, auquel cas :

BX	= Nombre de pages logiques allouées

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	Si la fonction est exécutée avec succès, la zone de mémoire dont l'adresse avait été transmise dans la paire de registres ES:DI contient deux mots pour chaque handle activé. Le premier mot représente le handle, le mot suivant le nombre de pages allouées à ce handle. Le nombre d'entrées de ce tableau figure après appel de la fonction dans le registre BX.

·	Comme l'EMM attribue au maximum 256 handles, le tableau ne peut jamais occuper plus de 1024 octets (soit 1 Ko).


Int 67h, Fct 4Eh, Sous-Fct 00h    Enregistrer la table des pages    LIM/EMS (> 3.2)

Cette fonction permet à un programme de sauvegarder la table des pages décrivant la concordance entre les pages logiques et physiques.

Entrée :

AH 	= 4Eh

AL 	= 00h

ES:DI	= Pointeur sur la tableau devant recevoir la table des pages

Sortie :

AH 	= 0, Tout va bien

AH 	 >0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.2 ou supérieure est effectivement installée.

·	Contrairement à la fonction similaire 47h, ici un handle EMM s'avère inutile.

·	Vous pouvez prendre connaissance de la taille du buffer à l'aide de la sous-fonction 03h.

·	La codification des informations entrées dans le buffer varie en fonction des constructeurs de cartes et drivers EMS. Il faut donc éviter de le manipuler ou l'interpréter.

·	Après avoir modifié la concordance entre les pages EMS physiques et logiques, vous pouvez la rétablir avec la sous-fonction 01h mais en prenant soin de la sauvegarder au préalable avec la sous-fonction 00h.


Int 67h, Fct 4Eh, Sous-Fct 01h    Rétablir la table des pages    LIM/EMS (> 3.2)

L'appel de cette fonction rétablit la concordance entre les pages EMS physiques et logiques préalablement définie avec la sous-fonction 00h de cette fonction.

Entrée :

AH 	= 4Eh

AL 	= 01h

ES:DI 	= Pointeur sur la tableau contenant la table des pages

Sortie :

AH 	= 0, Tout va bien

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.2 ou supérieure est effectivement installée.

·	Contrairement à la fonction 48h de même nature, ici un handle EMM s'avère inutile.


Int 67h, Fct 4Eh, Sous-Fct 02h    Enregistrer et rétablir simultanément la table des pages        LIM/EMS (> 3.2)

Cette fonction permet de sauvegarder simultanément la table des pages en cours et de charger une autre qui a été préalablement sauvegardée.

Entrée :

AH 	= E4h

AL 	= 02h

DS:SI 	= Pointeur sur le tableau contenant déjà la table des pages à charger

ES:DI 	= Pointeur sur le tableau devant recevoir la table des pages en cours

Sortie :

AH 	= 0, Tout va bien

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.2 ou supérieure est effectivement installée.

·	Le buffer contenant la table des pages à installer doit d'abord être chargé à l'aide d'un appel de la sous-fonction 00h ou 02h de cette fonction.

·	Vous pouvez prendre connaissance de la taille du buffer devant recevoir la table des pages en cours à l'aide de la sous-fonction 03h de cette fonction.

·	Contrairement aux fonctions 47h et 48h de même nature, ici un handle EMM s'avère inutile.


Int 67h, Fct 4Eh, Sous-Fct 03h    Lire la taille de la table des pages    LIM/EMS (> 3.2)

Avant l'appel de la sous-fonction 00h ou 02h, vous pouvez utiliser cette fonction pour déterminer la place mémoire nécessaire pour stocker la table des pages.

Entrée :

AH 	= 4Eh

AL 	= 03h

Sortie :

AH 	= 0, Tout va bien, dans ce cas

AL = Taille de la table des pages en octets

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.2 ou supérieure est effectivement installée.


Int 67h, Fct 4Fh, Sous-Fct 00h    Enregistrer une partie de la table des pages    LIM/EMS (> 4.0)

Cette fonction permet de sauvegarder séparément la structure de pages physiques bien précises et leurs pages logiques correspondantes.

Entrée :

AH 	= 4Fh

AL 	= 00h

DS:SI 	= Pointeur sur la liste des informations à propos des pages physiques à construire

ES:DI	= Pointeur sur le buffer devant stocker les entrées choisies parmi la table des pages.

Sortie :

AH 	= 0, Tout va bien, dans ce cas

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.

·	La liste des pages physiques à construire doit contenir le nombre des pages concernées dans le premier mot. Suivent ensuite les adresses de segment de ces pages occupant chacune un mot. La taille de cette liste se calcule comme suit :

2 + (Nombre de pages à construire * 2) octets

·	La taille du buffer nécessaire pour recevoir les entrées sélectionnées parmi la table des pages peut être obtenue par la sous-fonction 02h de cette fonction.


Int 67h, Fct 4Fh, Sous-Fct 01h    Rétablir une table des pages enregistrée partiellement        LIM/EMS (> 4.0)

Cette fonction rétablit une table des pages sauvegardée préalablement à l'aide de la sous-fonction 00h.

Entrée :

AH 	= 4Fh

AL 	= 01h

DS:SI 	= Pointeur sur le buffer contenant la table sauvegardée

Sortie :

AH 	= 0, Tout va bien, dans ce cas

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.

·	Le buffer spécifié doit être chargé au préalable avec la sous-fonction 00h de la fonction 4Fh.


Int 67h, Fct 4Fh, Sous-Fct 02h    Lire la taille du buffer pour recevoir une table des pages partielle        LIM/EMS (> 4.0)

Si vous devez sauvegarder une partie de la table des pages avec la sous-fonction 00h, cette sous-fonction peut vous aider à déterminer d'abord la taille du buffer nécessaire à cet effet.

Entrée :

AH 	= 4Fh

AL 	= 02h

BX 	= Nombre de pages physiques à construire lors de la sauvegarde

Sortie :

AH 	= 0, Tout va bien, dans ce cas

AL	= Taille du buffer nécessaire en octets

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.


Int 67h, Fct 50h, Sous-Fct 00h    Construire des pages logiques sur des pages physiques par numéros        LIM/EMS (> 4.0)

En appelant une seule fois cette fonction, un programme peut construire des pages logiques multiples sur un nombre quelconque de pages physiques adressées au moyen de leur numéro respectif.

Entrée :

AH 	= 50h

AL 	= 00h

CX 	= Nombre de pages logiques à construire

DX 	= Handle sur lequel les pages sont à allouer

DS:SI 	= Pointeur sur le buffer contenant les informations sur la structure

Sortie :

AH 	= 0, Tout va bien, dans ce cas

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.

·	Le buffer spécifié doit contenir deux mots consécutifs pour toutes les structures à élaborer. Le premier mot doit renfermer le numéro de la page logique, le second le numéro de la page physique.

Si le numéro de la page logique vaut -1, la page physique correspondante sera alors désactivée. Dans ce cas, elle devient interdite à la lecture et à l'écriture.


Int 67h, Fct 50h, Sous-Fct 01h    Construire des pages logiques sur des pages physiques par adresses        LIM/EMS (> 4.0)

Tout comme la sous-fonction 00h, celle-ci permet de construire des pages logiques multiples sur un nombre quelconque de pages physiques à l'aide d'un seul appel de la fonction. Ici, les pages physiques ne sont pas adressées avec leur numéros, mais avec leur adresse de segment.

Entrée :

AH 	= 50h

AL 	= 01h

CX 	= Nombre de pages logiques à construire

DX 	= Handle sur lequel les pages sont à allouer

DS:SI 	= Pointeur sur le buffer contenant les informations sur la structure

Sortie :

AH 	= 0, Tout va bien, dans ce cas

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.

·	Le buffer spécifié doit contenir deux mots consécutifs pour toutes les structures à élaborer. Le premier mot doit renfermer le numéro de la page logique, le second l'adresse de segment de la page physique.

·	Si le numéro de la page logique vaut -1, la page physique correspondante sera alors désactivée. Dans ce cas, elle devient interdite à la lecture et à l'écriture.

·	Les adresses de segment des pages physiques disponibles peuvent être obtenues à l'aide de la sous-fonction 00h de la fonction 58h.


Int 67h, Fct 51h    Modifier le nombre de pages logiques allouées    LIM/EMS (> 4.0)

Le nombre de pages logiques appartenant à un handle alloué préalablement à l'aide de la fonction 43h peut être augmenté ou diminué librement avec cette fonction.

Entrée :

AH 	= 48h

DX 	= Handle sur lequel les pages ont été allouées

BX 	= Nouveau nombre des pages rendues disponibles par ce handle

Sortie :

AH 	= 0, Tout va bien, dans ce cas

BX = Nombre de pages logiques dont dispose maintenant le handle

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.

·	La réduction du nombre de pages affectées est toujours possible, mais l'augmentation dépend de la taille de la mémoire EMS non encore allouée. Par conséquent, après avoir appelé la fonction, n'oubliez jamais de vérifier l'état d'erreur dans le registre AH.

·	Si vous réduisez le nombre de pages affectées à l'aide de cette fonction, un nombre correspondant de pages est soustrait de l'extrémité supérieure des pages actuellement allouées. Leur contenu est perdu définitivement.

·	Après appel de cette fonction, le handle reste toujours valable même si le nombre de pages atteint 0.


Int 67h, Fct 52h, Sous-Fct 00h    Lire l'attribut d'un handle    LIM/EMS (> 4.0)

Cette fonction permet de constater si le contenu des pages EMS affectées à un handle reste conservé à travers un démarrage à chaud de l'ordinateur. Dans ce cas, elles sont désignées comme des pages "non volatiles".

Entrée :

AH 	= 52h

AL 	= 00h

DX 	= Handle à consulter

Sortie :

AH 	= 0, Tout va bien, dans ce cas

AL = Attribut des pages

0 : le contenu des pages est perdu (volatile)

1 : le contenu des pages reste conservé (non volatile)

AH > 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.


Int 67h, Fct 52h, Sous-Fct 01h    Définir l'attribut d'un handle    LIM/EMS (> 4.0)

Si une carte EMS est capable de protéger les pages EMS contre un démarrage à chaud de l'ordinateur, l'attribut correspondant peut alors être défini à l'aide de cette fonction.

Entrée :

AH 	= 52h

AL 	= 01h

BL 	= Attribut pour les pages du handle

0 : le contenu des pages est perdu (volatile)

1 : le contenu des pages reste conservé (non volatile)

DX 	= Handle à consulter

Sortie :

AH 	= 0, Tout va bien

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.

·	Attention ! Très peu de cartes EMS sont capables de protéger les pages EMS contre l'écriture lors d'un démarrage à chaud de l'ordinateur. En ce qui concerne les émulateurs EMS, cette possibilité est généralement à exclure. N'oubliez donc pas de vérifier au préalable si les pages EMS non volatiles disposent de cette technique au moyen de la sous-fonction 02h.


Int 67h, Fct 52h, Sous-Fct 02h    Vérifier les pages EMS non volatiles    LIM/EMS (> 4.0)

Cette fonction permet de vérifier si une carte EMS offre la possibilité de protéger les pages EMS lors d'un démarrage à chaud de l'ordinateur. Les fonctions 52h/00h et 52h/01h ne peuvent être utilisées que dans ce cas.

Entrée :

AH 	= 52h

AL 	= 02h

Sortie :

AH 	= 0, Tout va bien, dans ce cas

AL = 0 : Les pages non volatiles ne sont pas reconnues

AL = 1 : Les pages volatiles sont reconnues

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.


Int 67h, Fct 53h, Sous-Fct 00h    Lire le nom d'un handle    LIM/EMS (> 4.0)

Le nom d'un handle est transmis dans un buffer du programme d'appel suite à l'appel de cette fonction.

Entrée :

AH 	= 53h

AL 	= 00h

DX 	= Handle

ES:DI 	= Pointeur sur le buffer devant recevoir le nom

Sortie :

AH 	= 0, Tout va bien

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.

·	La longueur du nom d'un handle est toujours de 8 caractères si bien que le buffer spécifié doit contenir au moins 8 octets.

·	Lorsqu'un handle est alloué avec la fonction 43h, le nom est d'abord vide, c'est-à-dire qu'il ne contient que les caractères ayant le code 0. A l'aide de la sous-fonction 01h de la fonction 53h, un handle peut toutefois obtenir un nom qui est transmis par un appel de la sous-fonction 00h.


Int 67h, Fct 53h, Sous-Fct 01h    Définir le nom d'un handle    LIM/EMS (> 4.0)

Cette sous-fonction affecte un nom à un handle préalablement alloué servant ensuite à l'appeler.

Entrée :

AH 	= 53h

AL 	= 01h

DX 	= Handle

ES:DI 	= Pointeur sur le buffer contenant le nom du handle

Sortie :

AH 	= 0, Tout va bien

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.

·	La longueur du nom d'un handle est toujours de 8 caractères si bien que le buffer spécifié doit contenir au moins 8 octets.


Int 67h, Fct 54h, Sous-Fct 00h    Lire les noms de tous les handles    LIM/EMS (> 4.0)

Les noms de tous les handles sont transmis dans un buffer du programme d'appel une fois cette fonction appelée.

Entrée :

AH 	= 54h

AL 	= 00h

ES:DI 	= Pointeur sur le buffer recevant les noms des handles

Sortie :

AH 	= 0, Tout va bien, dans ce cas

AL 	= Nombre de handles actifs

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.

·	Le buffer doit disposer d'une place équivalente à 2550 octets parce qu'un maximum de 255 handles est géré et chaque entrée de handle nécessite 10 octets de ce buffer. Les deux premiers octets reçoivent le véritable handle, puis viennent les huit octets qui contiennent le nom du handle.


Int 67h, Fct 54h, Sous-Fct 01h    Lire un handle avec un nom précis    LIM/EMS (> 4.0)

Cette fonction renvoie le handle dont le nom lui a été transmis.

Entrée :

AH 	= 54h

AL 	= 01h

DS:SI 	= Pointeur sur le buffer contenant le nom du handle à rechercher

Sortie :

AH 	= 0, Tout va bien, dans ce cas

DX 	= Le handle recherché

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.


Int 67h, Fct 55h, Sous-Fct 00h    Construire des pages et sauter vers la mémoire étendue        LIM/EMS (> 4.0)

D'une part, cette fonction définit la structure entre les pages logiques et physiques. D'autre part, elle transfère l'exécution du programme vers l'une des pages construites à l'aide d'un FAR-Jump.

Entrée :

AH 	= 55h

AL 	= 00h

DX 	= Handle

DS:SI 	= Pointeur sur le buffer contenant des informations complémentaires

Sortie :

AH 	= 0, Tout va bien

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.

·	Le buffer spécifié doit présenter la structure suivante :

Structure du tampon

Adresse	Contenu	Type

+00h	Pointeur sur l'adresse à laquelle le programme doit continuer 	1 PTR

+05h	Nombre des pages mémoire à afficher avant le saut 	1 BYTE

+06h	Pointeur sur la liste d'affichage 	1 PTR

Longueur : 9 octets

La structure de la liste d'affichage est identique à celle de cette liste dans la structure de la fonction 50h, sous-fonction 00h. A chaque appel, nous obtenons donc le numéro d'une page logique et celui de la page physique correspondante.


Int 67h, Fct 55h, Sous-Fct 01h    Afficher pages et sauter vers la mémoire étendue    LIM/EMS (> 4.0)

Cette sous-fonction est similaire à la 00h, mais la liste d'affichage contient les adresses de segment au lieu des numéros des pages physiques.


Int 67h, Fct 56h, Sous-Fct 00h      Afficher pages et appeler routine en mémoire étendue    LIM/EMS (> 4.0)

Cette fonction définit la structure entre les pages logiques et physiques et elle provoque la poursuite de l'exécution du programme avec une routine en mémoire étendue par un appel FAR. A la fin de cette routine, une nouvelle structure est construite et on revient à l'appelant de la fonction d'interruption.

Entrée :

AH	= 55h

AL	= 00h

DX	= identificateur

DS:SI = pointeur sur tampon avec informations complémentaires

Sortie :

AH	= 0, ok

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

L'appel de cette fonction doit être précédé de la vérification présence d'un EMM ("Expanded Memory Manager") de la version 4.0.

Le tampon indiqué doit avoir la structure suivante :

Structure du tampon

Adresse	Contenu	Type

+00h	Pointeur sur le sous-programme par lequel le programme doit continuer	1 PTR

+05h	Nombre de pages à afficher avant l'appel du sous-programme	1 BYTE

+06h	Pointeur sur la liste d'affichage pour l'affichage avant

l'affichage avant l'appel du sous-programme	1 PTR

+0Ah	Nombre de pages à afficher avant l'appel du sous-programme	1 BYTE

+0Bh	Pointeur sur la liste d'affichage après l'appel du sous-programme	1 PTR

Longueur : 14 octets

La structure de la liste d'affichage est identique à celle de cette liste dans l'appel de la fonction 50h, sous-fonction 00h : elle renvoie le numéro d'une page logique et d'une page physique.

L'exécution de cette fonction exige un certain espace libre de la pile. La taille requise est renvoyée par la sous-fonction 02h de cette fonction.


Int 67h, Fct 56h, sous-Fct 01h      Afficher des pages et appeler une routine de la mémoire étendue        LIM/EMS (> 4.0)

Cette sous-fonction est similaire à la sous-fonction 00h mais elle renvoie les adresses de ses segments et non les numéros des pages physiques.


Int 67h, Fct 56h, sous-Fct 02h     Lire la mémoire nécessaire    LIM/EMS (> 4.0)

Cette fonction renvoie l'espace minimal requis sur la pile pour permettre l'exécution des sous-fonctions 00h et 01h.

Entrée :

AH	= 56h

AL	= 02h

Sortie :

AH	= 0, ok, dans ce cas :

BX = espace pile demandé

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

L'appel de cette fonction doit être précédé de la vérification de la présence d'un EMM ("Expanded Memory Manager") de la version 4.0.

La valeur renvoyée correspond exclusivement aux besoins de l'EMM. L'espace de la pile requis pour la routine à appeler dans la mémoire étendue vient  s'y ajouter.


Int 67h, Fct 57h, sous-Fct 00h        Copier un bloc de mémoire    LIM/EMS (> 4.0)

Cette fonction permet de copier tout bloc de mémoire entre la mémoire paginée et la mémoire étendue ou à l'intérieur de chacune de ces mémoires.

Entrée :

AH	= 57h

AL	= 00h

DS:SI	= Pointeur sur le tampon contenant les informations sur les blocs à copier

Sortie :

AH	= 0, ok

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

L'appel de cette fonction doit être précédé de la vérification de la présence d'un EMM ("Expanded Memory Manager") de la version 4.0.

Le tampon contenant les informations sur les blocs à copier doit avoir le format suivant :

Structure du tampon

Adresse	Contenu	Type

+00h	Taille (en octets) du bloc à copier	1 DWORD

+04h	Type du bloc source (0 = mémoire conventionnelle, 1 = EMS)	1 BYTE

+05h	Identificateur du bloc source (EMS seulement)	1 WORD

+07h	Décalage du début du bloc source	1 WORD

+09h	Adresse de segment du bloc source (mémoire conventionnelle)

ou numéro de la page physique (EMS)	1 WORD

+0Bh	Type du bloc cible (0 = mémoire conventionnelle, 1 = EMS)	1 BYTE

+0Ch	Identificateur du bloc cible (EMS seulement)	1 WORD

+0Eh	Décalage du début du bloc source	1 WORD

+10h	Adresse segment du bloc cible (mémoire conventionnelle)

ou numéro de la page physique (EMS)	1 WORD

Longueur : 18 octets


Int 67h, Fct 57h, sous-Fct 01h        Echanger des blocs de mémoire    LIM/EMS (> 4.0)

Cette fonction équivaut à la sous-fonction 00h, mais elle échange le contenu des blocs de mémoire au lieu de copier le contenu de l'un dans l'autre.

Entrée :

AH	= 57h

AL	= 01h

DS:SI	= Pointeur sur le tampon contenant les informations sur les blocs à copier

Sortie :

AH	= 0, ok

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

L'appel de cette fonction doit être précédé de la vérification de la présence d'un EMM ("Expanded Memory Manager") de la version 4.0.

Le tampon contenant les informations sur les blocs à copier doit avoir le format décrit pour la sous-fonction 00h.

Cette fonction peut échanger au maximum 1 Mo de mémoire par appel.

Si des pages d'EMS sont concernées par le déplacement et si le bloc défini sort de la page EMS définie, les pages EMS suivantes sont également déplacées.

Les blocs source et cible ne doivent pas se chevaucher !


Int 67h, Fct 58h, sous-Fct 00h    Renvoie les adresses des pages EMS physiques et leurs numéros        LIM/EMS (> 4.0)

Cette fonction retourne, dans un tampon établi par l'appelant, les adresses des segments de toutes les pages physiques EMS et de leurs numéros.

Entrée :

AH	= 58h

AL	= 00h

DS:SI	= Pointeur sur le tampon destiné à recevoir les informations

Sortie :

AH	= 0, ok, dans ce cas :

CX = nombre des entrées retournées dans le tampon

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

L'appel de cette fonction doit être précédé de la vérification de la présence d'un EMM ("Expanded Memory Manager") de la version 4.0.

Vous pouvez demander à la sous-fonction 00h la taille requise pour le tampon.

Dans le tampon indiqué, l'EMM contient les informations demandées sous forme d'entrées de 2 mots chacune. Le premier contient l'adresse du segment d'une page EMS, le deuxième contient son numéro.


Int 67h, Fct 58h, sous-Fct 01h    Renvoie le nombre de pages EMS    LIM/EMS (> 4.0)

Cette fonction retourne le nombre des pages EMS physiques, ce qui permet de calculer la taille du tampon qui sera nécessaire pour l'appel de la sous-fonction 00h de cette fonction.

Entrée :

AH	= 58h

AL	= 01h

Sortie :

AH	= 0, ok, dans ce cas :

CX = nombre des entrées retournées dans le tampon

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

L'appel de cette fonction doit être précédé de la vérification de la présence d'un EMM ("Expanded Memory Manager") de la version 4.0.

La taille requise pour le tampon est obtenue en multipliant le nombre des entrées (registre CX) par quatre.


Int 67h, Fct 59h, sous-Fct 00h        Renvoie des informations sur le matériel EMS    LIM/EMS (> 4.0)

Cette fonction permet de recueillir certaines informations sur le matériel EMS, présentant pour la plupart de l'intérêt pour un système d'exploitation intégrant la mémoire EMS à sa gestion de la mémoire.

Entrée :

AH	= 59h

AL	= 00h

Sortie :

AH	= 0, ok, dans ce cas :

CX = taille (en octets) du tableau des pages

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

L'appel de cette fonction doit être précédé de la vérification de la présence d'un EMM ("Expanded Memory Manager") de la version 4.0.

La taille du tampon doit être au moins égale à 10 octets. Après l'appel de la fonction, le tampon contient les informations suivantes :

Structure du tampon

Adresse	Contenu	Type

+00h	Taille des pages EMS non standardisées en paragraphes	1 WORD

+02h	Nombre des jeux alternatifs de registres EMS	1 WORD

+04h	Taille de la table d'affichage et de sauvegarde en octets	1 WORD

+06h	Nombre de jeux de registres pour le transfert en DMA	1 WORD

+08h	Mode d'opération DMA	1 WORD

Longueur : 10 octets

Les modes d'opérations DMA sont au nombre de deux :

0 : le DMA est également utilisable avec des jeux alternatifs de registres

1 : Un seul jeu de registres DMA disponible


Int 67h, Fct 59h, sous-Fct 01h        Renvoie le nombre de pages EMS non standardisées    LIM/EMS (> 4.0)

Cette fonction retourne le nombre total de pages EMS dont la taille diffère des 16 Ko standard et le nombre des pages encore libres parmi celles-ci.

Entrée :

AH	= 59h

AL	= 01h

Sortie :

AH	= 0, ok, dans ce cas :

DX = nombre total des pages non standardisées

BX = nombre des pages non encore allouées

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

L'appel de cette fonction doit être précédé de la vérification de la présence d'un EMM ("Expanded Memory Manager") de la version 4.0.

Cette forme particulière de pages EMS n'est pas gérée par toutes les cartes EMS. Ceci se traduit par la valeur 0 dans le registre DX.


Int 67h, Fct 5Ah, sous-Fct 00h    Alloue des pages EMS    LIM/EMS (> 4.0)

Cette fonction alloue des pages EMS et ressemble donc à la 43h. Cependant, contrairement à cette dernière, la fonction 5Ah permet l'allocation de 0 page EMS sans que cela ne se traduise par une erreur.

Entrée :

AH	= 5Ah

Al	= 0h

BX	= nombre des pages EMS allouées

Sortie :

AH	= 0, ok. Dans ce cas :

DX = identificateur permettant l'accès aux pages allouées

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

L'appel de cette fonction doit être précédé de la vérification de la présence d'un EMM ("Expanded Memory Manager") de la version 4.0.

Vous pouvez allouer 0 page à l'aide de cette fonction sans causer d'erreur, et ainsi obtenir un identificateur.


Int 67h, Fct 5Ah, sous-Fct 01h        Alloue des pages EMS non standardisées    LIM/EMS (> 4.0)

Cette fonction permet d'allouer des pages EMS dont la taille diffère des 16 Ko standard.

Entrée :

AH	= 5Ah

AL	= 01h

Sortie :

AH	= 0, ok, dans ce cas :

DX = identificateur permettant d'accéder aux pages allouées

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

L'appel de cette fonction doit être précédé de la vérification de la présence d'un EMM ("Expanded Memory Manager") de la version 4.0.

Cette forme particulière de pages EMS n'est pas gérée par toutes les cartes EMS. Vérifiez soigneusement l'état de la fonction dans le registre AH après l'appel.

Cette fonction permet d'allouer zéro page pour obtenir simplement un identificateur.


Int 67h, Fct 5Bh    Utile dans les transferts DMA    LIM/EMS (> 4.0)

Cette fonction possède neuf sous-fonctions que nous ne décrirons pas ici car leur intérêt est strictement limité au développement de systèmes d'exploitation, et elles ne sont en outre gérées que par quelques cartes et pilotes EMS. En d'autres termes, ces sous-fonctions ne sont pas utilisées dans le cadre du développement normal sur PC.


Int 67h, Fct 5Ch    Prépare l'EMS à un redémarrage à chaud    LIM/EMS (> 4.0)

Entrée :

AH	= 5Ch

Sortie :

AH	= 0, ok

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

L'appel de cette fonction doit être précédé de la vérification de la présence d'un EMM ("Expanded Memory Manager") de la version 4.0.


Int 67h, Fct 5Dh    Utile pour inactiver le système d'exploitation    LIM/EMS (> 4.0)

Cette fonction possède trois sous-fonctions que nous ne décrirons pas ici car leur intérêt est strictement limité au développement de systèmes d'exploitation, et elles ne sont en outre gérées que par quelques cartes et pilotes EMS. En d'autres termes, ces sous-fonctions ne sont pas utilisées dans le cadre du développement normal sur PC.


Fonctions XMS

Le standard XMS (Extended Memory Specification) a été introduit par Microsoft en collaboration avec d'autres sociétés afin de mieux coordonner l'accès à la mémoire étendue au-delà de la limite des 1 Mo.

Contrairement aux nombreuses interfaces de fonction, l'appel des fonctions du standard XMS ne s'effectue pas à travers une interruption particulière mais à l'aide d'une instruction FAR CALL. Dans ce cas, il faut d'abord transmettre l'adresse d'un gestionnaire XMS.

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

Fonction 00h	Lire le numéro de version XMS

Fonction 01h	Réserver une HMA (zone de mémoire haute)

Fonction 02h	Libérer la HMA

Fonction 03h	Activation globale de l'adresse de ligne A20	XMA

Fonction 04h	Fermeture globale de la ligne d'adresse A20

Fonction 05h	Libération locale de la ligne d'adresse A20

Fonction 06h	Verrouillage local de la ligne d'adresse A20

Fonction 07h	Obtenir l'état de la ligne d'adresse A20

Fonction 08h	Déterminer la taille de la mémoire étendue disponible

Fonction 09h	Allouer un bloc de mémoire étendue (EMB)

Fonction 0Ah	Libérer un bloc de mémoire étendue (EMB)

Fonction 0Bh	Copier la mémoire

Fonction 0Ch	Protège un bloc de mémoire étendue contre un déplacement

Fonction 0Dh	Déverrouiller le bloc de mémoire étendue (EMB)

Fonction 0Eh	Lire les informations sur un EMB

Fonction 0Fh	Agrandir ou diminuer le bloc de mémoire étendue alloué

Fonction 10h	Allouer un bloc de mémoire supérieure (UMB)

Fonction 11h	Libérer le bloc de mémoire supérieure (UMB) alloué


Int 2Fh, Fct 00h    Lire le numéro de version XMS    XMS

Cette fonction retourne le numéro de version du driver XMS et son numéro de révision interne.

Entrée :

AH = 	00h

Sortie :

AX = 	Numéro de version XMS

BX = 	Numéro de révision interne

DX = 	Etat de la HMA

0 : Accès à HMA impossible

1 : HMA disponible

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.


Int 2Fh, Fct 01h    Réserver une HMA (High Memory Area ou zone de mémoire haute)    XMS

Cette fonction permet à un programme d'allouer totalement ou partiellement la HMA pour ses besoins personnels.

Entrée :

AH = 	01h

DX = 	Place mémoire demandée en octets, FFFFh pour une application normale ayant un besoin réel en programmes résidents

Sortie :

AX =	0001h : Fonction exécutée

0000h : Erreur, dans ce cas

BL =	Numéro d'erreur

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Après un appel réussi de cette fonction, l'accès à la HMA ne peut s'effectuer que si l'adresse de ligne A20 a été correctement activée. Cela est possible grâce aux fonctions 03h et 05h.

·	Une erreur peut survenir dans le déroulement de la fonction si un programme résident ne dispose pas de la totalité de la HMA et si l'insuffisance de la mémoire se situe au-dessous de la valeur spécifiée dans le paramètre /HMAMIN lors de l'installation du driver. Cela empêche d'octroyer un droit d'accès exclusif à la HMA à un programme résident ne nécessitant que peu de Ko et de laisser ainsi la place à un autre qui peut avoir besoin d'une place mémoire plus importante.

·	A la fin d'un programme, si la HMA reste toujours en sa possession, elle doit être libérée avec la fonction 02h avant de terminer le programme.


Int 2Fh, Fct 02h    Libérer la HMA    XMS

Un programme occupant la HMA à l'aide de la fonction 01h peut libérer cette zone de mémoire avec la fonction 02h.

Entrée :

AH =	02h

Sortie :

AX =	0001h : 	Fonction exécutée

0000h : 	Erreur, dans ce cas

BL = Numéro d'erreur :

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Sans appeler cette fonction, une HMA préalablement allouée reste réservée lorsqu'un programme est terminé. Elle ne peut donc pas être attribuée au programme suivant.

·	Le contenu de la HMA est détruit définitivement à la suite d'un appel de cette fonction.


Int 2Fh, Fct 03h    Activation globale de l'adresse de ligne A20    XMA

Cette fonction permet d'activer l'adresse A20 pour qu'un accès direct à la HMA puisse également avoir lieu à partir du mode réel du processeur.

Entrée :

AH = 	03h

Sortie :

AX =	0001h : 	Fonction exécutée

0000h : 	Erreur, dans ce cas

BL = Numéro d'erreur

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Cette fonction doit être appelée avant ou après la demande portant sur la HMA pour s'assurer qu'il est également possible d'accéder à la HMA à partir du mode réel via l'adresse de segment FFFFh.

·	Avant de terminer un programme, la ligne d'adresse A20 doit être clôturée avec la fonction 04h pour éviter tout risque de débordement de segment dans le programme suivant.

·	L'activation de la ligne d'adresse A20 constitue un processus relativement long selon le système informatique dont vous disposez. Vous devez donc éviter d'appeler trop souvent cette fonction.


Int 2Fh, Fct 04h    Fermeture globale de la ligne d'adresse A20    XMS

Contrairement à la fonction 03h, cette fonction a pour rôle de refermer la ligne d'adresse A20. Il devient alors impossible d'accéder directement à la HMA à partir du mode réel.

Entrée :

AH = 	04h

Sortie :

AX =	0001h : 	Fonction exécutée

0000h : 	Erreur, dans ce cas

BL = Numéro d'erreur

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Selon le système informatique, le verrouillage de la ligne d'adresse A20 constitue un processus relativement long. Vous devez donc éviter d'appeler trop souvent cette fonction.


Int 2Fh, Fct 05h    Libération locale de la ligne d'adresse A20    XMS

Contrairement à la libération globale réalisée avec la fonction 03h, ici la libération ne s'effectue que localement. Un compteur comptabilise l'appel de cette fonction et de la fonction 06h. La mise en service de la ligne ne s'effectue que si elle n'a pas été déjà activée par un appel antérieur.

Entrée :

AH = 05h

Sortie :

AX =	0001h : 	Fonction exécutée

0000h : 	Erreur, dans ce cas

BL = Numéro d'erreur

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Cette fonction doit être appelée avant ou après la demande portant sur la HMA pour s'assurer qu'il est également possible d'accéder à la HMA à partir du mode réel via l'adresse de segment FFFFh.

·	Avant de terminer un programme, la ligne d'adresse A20 doit être clôturée avec la fonction 04h pour éviter tout risque de débordement de segment dans le programme suivant.

·	L'activation de la ligne d'adresse A20 constitue un processus relativement long selon le système informatique dont vous disposez. Vous devez donc éviter d'appeler trop souvent cette fonction.


Int 2Fh, Fct 06h    Verrouillage local de la ligne d'adresse A20    XMS

Tout comme la fonction 05h, celle-ci ne prend effet que si l'adresse n'a pas été encore verrouillée à l'aide d'un appel antérieur.

Entrée :

AH = 	06

Sortie :

AX =	0001h : 	Fonction exécutée

0000h : 	Erreur, dans ce cas

BL = Numéro d'erreur

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Les appels des fonctions 05h et 06h sont exprimés sur le plan interne à l'aide d'un compteur qui augmente à chaque appel de la fonction 05h et diminue à chaque appel de la fonction 06h. L'adresse n'est réellement verrouillée que lorsque le compteur atteint la valeur 0. Les appels des deux fonctions doivent donc être équivalents.

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Cette fonction doit être appelée avant ou après la demande portant sur la HMA pour s'assurer qu'il est également possible d'accéder à la HMA à partir du mode réel via l'adresse de segment FFFFh.

·	Avant de terminer un programme, la ligne d'adresse A20 doit être clôturée avec la fonction 04h pour éviter tout risque de débordement de segment dans le programme suivant.

·	L'activation de la ligne d'adresse A20 constitue un processus relativement long selon le système informatique dont vous disposez. Vous devez donc éviter d'appeler trop souvent cette fonction.


Int 2Fh, Fct 07h    Obtenir l'état de la ligne d'adresse A20    XMS

Cette fonction permet de constater si la ligne d'adresse A20 est déjà en service, si un appel des fonctions 03h ou 05h est en cours.

Entrée :

AH = 	07h

Sortie :

AX = 	0001h : Ligne d'adresse A20 libre

0000h : Adresse A20 verrouillée

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	La demande formulée pour la ligne d'adresse A20 s'effectue indépendamment de l'électronique pour que l'appel de cette fonction ne dure pas aussi longtemps que par exemple le verrouillage ou la libération de la ligne d'adresse A20.


Int 2Fh, Fct 08h    Déterminer la taille de la mémoire étendue disponible    XMS

Cette fonction retourne le volume total disponible dans la mémoire étendue et la taille du plus grand bloc encore libre.

Entrée :

AH = 	08h

Sortie :

AX = 	Taille du plus grand bloc de mémoire étendue (EMB) en octet

DX = 	Volume total disponible dans la mémoire étendue en Ko

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Attention ! La HMA n'est pas prise en compte lors de l'évaluation des deux indications même si elle n'a pas été encore allouée. Par conséquent, les indications s'élèvent à 64 Ko parce que l'allocation de la mémoire étendue commence toujours après la HMA.


Int 2Fh, Fct 09h    Allouer un bloc de mémoire étendue (EMB)    XMS

Un programme peut se servir de cette fonction pour réserver un bloc de mémoire étendue.

Entrée :

AH = 	09h

DX = 	Taille de la zone sollicitée en Ko

Sortie :

AX = 	0001h :	Fonction exécutée

0000h :	Erreur, dans ce cas

BL = Numéro d'erreur :

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

DX = 	Handle sur le prochain accès à l'EMB si un tel bloc peut être alloué

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Pour tous les appels ultérieurs, le handle retourné sert à accéder à l'EMB et doit être sauvegardé dans le programme. S'il est perdu, il faut réinitialiser l'ordinateur ou effectuer un démarrage à chaud pour libérer l'EMB concerné.

·	Le XMS ne peut répondre aux besoins d'un EMB que s'il existe un bloc de mémoire suffisamment grand et un handle. Mais comme le nombre de handles est limité (32 en règle générale), il faut toujours essayer d'allouer des EMB suffisamment grands pour éviter d'appeler trop souvent la fonction et d'utiliser trop de handles.

·	Avant de terminer un programme, il faut libérer l'EMB avec la fonction 0Ah pour qu'il ne soit pas perdu lors de sa transmission à d'autres applications.


Int 2Fh, Fct 0Ah    Libérer un bloc de mémoire étendue (EMB)    XMS

Un bloc de mémoire alloué préalablement par la fonction 09h peut être libéré à l'aide de cette fonction.

Entrée :

AH = 	0Ah

DX = 	Handle

Sortie :

AX = 	0001h :	Fonction exécutée

0000h :	Erreur, dans ce cas

BL = Numéro d'erreur :

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Le contenu de l'EMB est définitivement perdu à la suite d'un appel de cette fonction et le handle devient non valable.


Int 2Fh, Fct 0Bh    Copier la mémoire    XMS

Cette fonction sert à transférer la mémoire entre la RAM conventionnelle et la mémoire étendue ou à copier les blocs de mémoire à l'intérieur de la mémoire conventionnelle ou la mémoire étendue.

Entrée :

AH 	= 0Bh

DS:SI 	= Pointeur sur la structure suivante déterminant la zone de mémoire à copier et sa destination.

Structure de l'EMB à déplacer

Adresse	Contenu	Type

00h	Taille du bloc en octets	1DWORD

04h	Handle du bloc source	1WORD

06h	Offset du bloc source à partir duquel la copie doit avoir lieu	1DWORD

0Ah	Handle du bloc cible	1WORD

0Ch	Offset du bloc cible à partir duquel la copie doit avoir lieu	1DWORD

Taille : 16 octets

Sortie :

AX = 	0001h :	Fonction exécutée

0000h :	Erreur, dans ce cas

BL = Numéro d'erreur :

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Si un EMB doit être appelé, il faut spécifier également le handle retourné dans la fonction 09h lors de l'allocation du EMB. L'adresse d'offset représente alors l'offset relativement au début du bloc.

·	Au contraire, si une zone doit être appelée dans la RAM conventionnelle, il faut spécifier la valeur 0 en guise de handle et les adresses de segment et d'offset du bloc de départ selon le format habituel (d'abord l'adresse d'offset, puis l'adresse de segment) en guise d'offset.

·	En ce qui concerne les handles spécifiés, il ne faut pas qu'ils correspondent aux handles dont les blocs correspondants ont été verrouillés par la fonction 0Ch.

·	Si les zones spécifiées se superposent, la zone source doit figurer avant la zone cible pour garantir une exécution dépourvue d'erreurs de la fonction.

·	Pour assurer une duplication rapide de la zone source, il est souhaitable que les deux zones commencent par une adresse de mémoire paire dans un AT et par une adresse de mémoire divisible par quatre dans un 80386.


Int 2Fh, Fct 0Ch    Protège un bloc de mémoire étendue (EMB) contre un déplacement    XMS

Pour que des trous n'apparaissent pas dans la mémoire étendue après sa libération, la XMM se voit parfois contrainte de déplacer les divers EMB dans la mémoire. Cette fonction empêche de déplacer un EMB bien précis.

Entrée :

AH 	= 0Ch

DX 	= Handle de l'EMB

Sortie :

AX 	= 	0001h :	Fonction exécutée

0000h :	Erreur, dans ce cas

BL = Numéro d'erreur :

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

DX:BX	= 	Adresse 32 bits linéaire de l'EMB dans la mémoire

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	La fonction retourne l'adresse de l'EMB qui ne reste valable que tant que l'EMB n'est pas à nouveau verrouillé. Les blocs verrouillés doivent être libérés aussi vite que possible avec la fonction 0Dh pour que la gestion de la mémoire XMM ne subisse pas trop de conséquences.

·	L'état de verrouillage des différents EMB est fourni distinctement dans un compteur qui augmente à chaque appel de cette fonction et diminue à chaque appel de la fonction 0Dh. Le compteur commence avec la valeur 0. Lorsque le compteur indique à nouveau la valeur 0, cela signifie que le EMB concerné est déverrouillé.


Int 2Fh, Fct 0Dh    Déverrouiller le bloc de mémoire étendue (EMB)    XMS

Un EMB préalablement verrouillé peut être déverrouillé à l'aide de cette fonction. Il pourra donc être déplacé dans la mémoire étendue.

Entrée :

AH = 	0Dh

DX = 	Handle de l'EMB

Sortie :

AX = 	0001h :	Fonction exécutée

0000h :	Erreur, dans ce cas

BL = Numéro d'erreur :

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	L'adresse de l'EMB retournée par l'appel de la fonction 0Ch devient caduque à la suite de cet appel.


Int 2Fh, Fct 0Eh    Lire les informations sur un EMB    XMS

Cette fonction permet de prendre connaissance des diverses informations concernant un EMB. Outre la taille du bloc, vous pouvez connaître son compteur de verrouillage ainsi que le nombre de handles encore disponibles.

Entrée :

AH = 	0Eh

DX = 	Handle de l'EMB

Sortie :

AX = 	0001h :	Fonction exécutée, dans ce cas

BH 	= 	Compteur de verrouillage du bloc

BL 	= 	Nombre de handles EMB disponibles

DX 	= 	Taille de l'EMB en Ko

0000h :	Erreur, dans ce cas

BL 	= 	Numéro d'erreur :

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	En ce qui concerne le compteur de verrouillage, il s'agit d'un compteur réglé individuellement pour chaque EMB. Il augmente à chaque appel de la fonction de verrouillage (0Ch) et diminue en conséquence à chaque appel de la fonction 0Dh. L'EMB n'est effectivement verrouillé que lorsque le compteur atteint la valeur 0. Une valeur différente de zéro indique le nombre d'appels de la fonction 0Dh à effectuer pour verrouiller à nouveau l'EMB.


Int 2Fh, Fct 0Fh    Agrandir ou diminuer le bloc de mémoire étendue (EMB) alloué    XMS

Cette fonction permet de modifier la taille d'un EMB.

Entrée :

AH = 	0Fh

BX = 	Nouvelle taille de l'EMB en Ko

DX = 	Handle de l'EMB

Sortie :

AX = 	0001h :	Fonction exécutée

0000h :	Erreur, dans ce cas

BL = Numéro d'erreur:

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	L'EMB spécifié doit être verrouillé pour pouvoir être agrandi ou diminué.

·	Le contenu du bloc se perd définitivement si la taille de l'EMB est réduite.


Int 2Fh, Fct 10h    Allouer un bloc de mémoire supérieure (UMB)    XMS

Compte tenu du matériel installé, certains drivers XMS permettent d'utiliser la mémoire conventionnelle située entre la limite des 640 Ko et le début de la mémoire étendue. Un tel bloc de mémoire peut être alloué à l'aide de cette fonction.

Entrée :

AH = 	10h

DX = 	Taille du bloc de mémoire sollicité en paragraphes

Sortie :

AX = 	0001h :	Fonction exécutée, dans ce cas

BX 	= 	Adresse de segment de l'UMB

0000h :	Erreur, dans ce cas

BL 	= 	Numéro d'erreur :

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

DX 	= 	Taille maximale d'un UMB à allouer en paragraphes

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Attention ! Cette fonction dépend considérablement du matériel et n'est pas disponible sur tous les drivers XMS. Après son appel, il est donc indispensable de vérifier l'état d'erreur pour s'assurer qu'un UMB peut effectivement être alloué.

·	L'adresse de segment retournée par la fonction permet également d'accéder directement à l'UMB en mode réel. Dans ce cas, l'adresse d'offset en octets résultant du calcul de la taille du bloc n'est pas ignorée.

·	Cette fonction peut également être utilisée pour obtenir le plus grand bloc UMB disponible en spécifiant tout simplement une valeur non réelle pour la taille du bloc à allouer (exemple, FFFFh). La fonction n'alloue en aucun cas un UMB mais retourne la taille du plus grand bloc UMB disponible.


Int 2Fh, Fct 11h    Libérer le bloc de mémoire supérieure (UMB) alloué    XMS

Un UMB préalablement alloué par la fonction 10h est libéré par l'appel de cette fonction et devient ainsi disponible pour d'autres programmes.

Entrée :

AH = 	11h

DX = 	Adresse de segment de l'UMB

Sortie :

AX = 	0001h :	Fonction exécutée, dans ce cas

0000h :	Erreur, dans ce cas

BL = Numéro d'erreur :

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Le contenu de l'UMB se perd définitivement après l'appel de cette fonction. Il devient alors impossible d'accéder à la mémoire au moyen de l'adresse de segment du bloc.

·	Avant de terminer un programme, il convient de libérer tous les blocs UMB alloués à l'aide de cette fonction, sinon ils ne peuvent pas être accédés par les applications lancées ultérieurement.


Fonctions Gestionnaire de souris

Dès le départ, Microsoft a équipé sa souris d'une interface logicielle implémentée sous la forme du driver de périphérique MOUSE.SYS ou du programme MOUSE.COM. Cette interface est devenue par la suite un standard adopté par tous les constructeurs de souris afin de garantir une compatibilité totale avec la souris Microsoft. Les diverses fonctions de l'interface de souris sont appelées alors par l'intermédiaire de l'interruption 33h où une valeur 16 bits tient lieu de numéro de fonction. Celle-ci doit être transmise dans le registre AX.

La version 8.0 du driver de souris reconnaît en tout 53 fonctions variées avec des numéros allant de 0000h à 00034h. Toutefois, les fonctions 11h et 12h ainsi que 0002Eh sont considérées comme non documentées et ne s'utilisent qu'à l'intérieur du driver de souris.

Le gestionnaire de souris a entraîné des révisions et augmentations dans plus d'un programme de la société Microsoft. D'innombrables variantes ont apparu entre les versions 1.0 et 8.0. Les versions dont le numéro est inférieur à 6.26 n'entrent plus en ligne de compte parce qu'elles n'utilisent pas les cartes vidéo modernes.

Malheureusement, Microsoft ne fournit la date de mise en service des diverses fonctions du gestionnaire de souris à partir de la fonction 25h seulement, celle-ci étant introduite avec la version 6.26 citée précédemment. De nombreuses fonctions existent déjà depuis la version 1.0, mais peu d'entre elles ont été insérées au cours du développement intervenu entre les versions 1.0 et 6.26. Etant donné que nous ne disposons pas d'informations précises, nous supposons ici que ces fonctions sont disponibles depuis la version 1.0. Même si cette conception ne s'applique pas à tous les cas de figure, vous pouvez considérer lors de la programmation que ces fonctions sont reconnues par tous les drivers de souris utilisés actuellement.

La plupart des fonctions de souris travaillent avec les registres AX, BX, CX et DX pour traiter les informations provenant du programme d'appel et lui retourner les résultats nécessaires dans ces mêmes registres. Les registres ES, SI et DS ne s'avèrent utiles que dans des cas exceptionnels, notamment lorsqu'il s'agit de transmettre l'adresse des buffers.

En règle générale, l'appel d'une fonction a pour conséquence de changer le contenu du registre adressé pour retourner les résultats de la fonction. Le contenu des autres registres reste inchangé. Dans la plupart des fonctions, le registre AX sert cependant à retourner l'état de la fonction qui indique un échec de l'opération en cas d'erreur.

Fonction 00h	Réinitialisation du driver de souris

Fonction 01h	Afficher le curseur de la souris sur l'écran

Fonction 02h	Masquer le curseur de la souris

Fonction 03h	Lire la position de la souris et l'état des boutons de la souris

Fonction 04h	Déplacement du curseur de la souris

Fonction 05h	Lire combien de fois un bouton de la souris a été enfoncé

Fonction 06h	Combien de fois un bouton de la souris a-t-il été relâché ?

Fonction 07h	Définir la zone de déplacement horizontale pour le curseur de la souris

Fonction 08h	Définir la zone de déplacement verticale pour le curseur de la souris

Fonction 09h	Définit le curseur de la souris en mode graphique

Fonction 0Ah	Définit le curseur de la souris en mode de texte

Fonction 0Bh	Lire les distances de déplacement

Fonction 0Ch	Installer le gestionnaire d'événements

Fonction 0Dh	Activer l'émulation du crayon optique

Fonction 0Eh	Désactiver l'émulation du crayon optique

Fonction 0Fh	Définir le rapport entre les mickeys et les points

Fonction 10h	Définir la zone d'exclusion

Fonction 11h	Non documentée

Fonction 12h	Non documentée

Fonction 13h	Définir le seuil pour le doublement de la vitesse de la souris

Fonction 14h	Echange des gestionnaires d'événements

Fonction 15h	Lire la taille du buffer d'état de la souris

Fonction 16h	Sauvegarder état de la souris

Fonction 17h	Restaurer l'état de la souris

Fonction 18h	Installer un gestionnaire d'événements alternatif

Fonction 19h	Lire l'adresse d'un gestionnaire d'événements alternatif

Fonction 1Ah	Définir la sensibilité de la souris

Fonction 1Bh	Lire la sensibilité de la souris

Fonction 1Ch	Définir la fréquence d'Int de l'électronique de la souris

Fonction 1Dh	Définir une page écran pour le curseur de la souris

Fonction 1Eh	Lire page écran du curseur de la souris

Fonction 1Fh	Désactiver le driver de la souris

Fonction 20h	Activer le driver de la souri

Fonction 21h	Réinitialiser le driver de la souris

Fonction 22h	Définir la langue étrangère pour les messages

Fonction 23h	Vérifier l'existence d'une langue étrangère pour les messages

Fonction 24h	Lire le type de souris

Fonction 25h	Lire des informations générales

Fonction 26h	Lire l'extension de l'écran de souris virtuel

Fonction 27h	Lire les masques de bits du curseur d'écran

Fonction 28h	Définir le mode vidéo

Fonction 29h	Lire la liste des modes vidéo disponibles

Fonction 2Ah	Obtenir des informations sur le curseur de la souris

Fonction 2Bh	Lire les courbes d'accélération

Fonction 2Ch	Lire la courbe d'accélération en cours

Fonction 2Dh	Définir/Lire la courbe d'accélération en cours

Fonction 2Eh	Non documentée

Fonction 2Fh	Réinitialisation de l'électronique de la souris

Fonction 30h	Définir/Obtenir les paramètres de la souris Ballpoint

Fonction 31h	Lire l'étirement de l'écran virtuel

Fonction 32h	Lire les fonctions disponibles

Fonction 33h	Définir les paramètres

Fonction 34h	Lire l'état du fichier MOUSE.INI


Int 33h, Fct 00h    Réinitialisation du driver de souris    Mouse (> 1.0)

Initialise le driver de souris et enclenche ainsi le test de la souris.

Entrée :

AX	= 0000h

Sortie :

AX	= FFFFh : dans ce cas, un driver de souris est installé

BX	= Nombre de boutons de la Souris (à partir de 1.0)

AX	= 0000h : erreur, aucun driver de souris n'est installé

Remarques :

·	L'appel de cette fonction agit sur toute une série de paramètres de la souris qui peuvent être fixés à l'aide des différentes fonctions de la souris :

Þ	Le curseur de la souris est placé au centre de l'écran puis caché. Il apparaîtra désormais en mode graphique sous forme d'une flèche, alors qu'il sera représenté en mode de texte sous forme d'une case de texte en inversion vidéo. Le curseur de la souris est systématiquement affiché dans la page 0 de l'écran, indépendamment du mode. La zone de déplacement sélectionnée est la totalité de l'écran.

Þ	Les gestionnaires d'événements installés par un programme. Ils sont désactivés.

Þ	L'émulation du crayon optique est également désactivée.

Þ	La vitesse de la souris. Pour la vitesse horizontale de la souris, un rapport de 8 mickeys pour 8 points est défini. Pour la vitesse verticale, ce rapport est de 16 pour 8

Þ	Le seuil de doublement de la vitesse de la souris. Il est fixé à 64 mickeys par seconde.


Int 33h, Fct 01h    Afficher le curseur de la souris sur l'écran    Mouse (> 1.0)

Après appel de cette fonction, le curseur de la souris devient visible sur l'écran et suit désormais les déplacements de la souris sur l'écran.

Entrée :

AX	= 0001h

Sortie :

Aucune

Remarques :

·	L'appel de cette fonction entraîne l'incrémentation d'un compteur interne, en fonction duquel le curseur de la souris est ou non affiché sur l'écran. Si ce compteur contient la valeur 0, le curseur de la souris sera affiché sur l'écran, alors que la valeur -1 a pour effet de le faire disparaître de l'écran. Lorsque la fonction 00h (Reset) est appelée, ce compteur est tout d'abord fixé sur -1, pour prendre ensuite la valeur 0 lors du premier appel de cette fonction, ce qui se traduit par la réapparition du curseur sur l'écran.

·	Le driver de la souris suit les déplacements de la souris même si le curseur de la souris n'est pas affiché sur l'écran. A la suite de l'appel de cette fonction, le curseur de la souris ne réapparaîtra donc pas nécessairement au même endroit que là où il se trouvait lorsqu'il avait été caché.


Int 33h, Fct 02h    Masquer le curseur de la souris    Mouse (> 1.0)

Cette fonction élimine le curseur de la souris de l'écran.

Entrée :

AX	= 0002h

Sortie :

Aucune

Remarques :

·	L'appel de cette fonction entraîne la décrémentation d'un compteur interne, en fonction duquel le curseur de la souris est ou non affiché sur l'écran. Si ce compteur contient la valeur 0, le curseur de la souris sera affiché sur l'écran, alors que la valeur -1 a pour effet de le faire disparaître de l'écran.

·	Le driver de la souris suit les déplacements de la souris même après appel de cette fonction. A la suite de l'appel de la fonction 01h (Afficher le curseur de la souris), le curseur de la souris ne réapparaîtra donc pas nécessairement au même endroit que là où il se trouvait lorsqu'il avait été caché.


Int 33h, Fct 03h    Lire la position de la souris et l'état des boutons de la souris        Mouse (> 1.0)

L'appel de cette fonction fournit la position actuelle de la souris et l'état des différents boutons de la souris.

Entrée :

AX	= 0003h

Sortie :

BX	= Etat des boutons de la Souris (à partir de 1.0)

Bit	Signification

0	1 = bouton gauche de la souris appuyé

1	1 = bouton droit de la souris appuyé

2	1 = bouton central de la souris appuyé

3-15	Aucune (0)

CX	= Position horizontale de la Souris (à partir de 1.0)

DX	= Position verticale de la souris

Remarques :

·	Les ordonnées renvoyées dans les registres CX et DX ne se rapportent pas à l'écran physique mais aux positions en points écran dans l'écran virtuel de la souris.

·	Si la souris ne possède que deux boutons, les informations fournies sur le bouton central sont dépourvues de signification.


Int 33h, Fct 04h    Déplacement du curseur de la souris    Mouse (> 1.0)

Déplace le curseur de la souris vers une position déterminée de l'écran, à moins qu'il n'ait été caché avec la fonction 02h.

Entrée :

AX	= 0004h

CX	= Position horizontale de la Souris (à partir de 1.0)

DX	= Position verticale de la souris

Sortie :

Aucune

Remarques :

·	Les ordonnées renvoyées dans les registres CX et DX ne se rapportent pas à l'écran physique mais aux positions en points écran dans l'écran virtuel de la souris.

·	Si la position spécifiée se situe en dehors de la zone de déplacement fixée avec les fonctions 07h et 08h, les coordonnées sont adaptées pour que le curseur de la souris ne sorte pas de cette zone.

·	Le curseur de la souris est bien déplacé vers la nouvelle position même s'il est caché, mais ce déplacement n'apparaîtra naturellement que lorsque le curseur sera à nouveau incrusté.


Int 33h, Fct 05h    Lire combien de fois un bouton de la souris a été enfoncé        Mouse (> 1.0)

Indique au programme d'appel combien de fois un bouton de la souris a été appuyé depuis le dernier appel de cette fonction et où le curseur de la souris se trouvait la dernière fois que ce bouton avait été actionné.

Entrée :

AX	= 0005h

BX	= Bouton de la souris appelé :

0	= bouton gauche de la Souris (à partir de 1.0)

1	= bouton droit de la Souris (à partir de 1.0)

2	= bouton central de la souris

Sortie :

AX	= Etat de tous les boutons de la souris (à partir de 1.0)

Bit	Signification

0	1 = bouton gauche de la souris appuyé

1	1 = bouton droit de la souris appuyé

2	1 = bouton central de la souris appuyé

3-15	Aucune signification (0)

BX	= Nombre de fois que le bouton de la souris appelé a été actionné depuis le dernier appel de cette fonction

CX	= Position horizontale de la souris la dernière fois que le bouton a été actionné

DX	= Position verticale de la souris la dernière fois que le bouton a été actionné

Remarques :

·	Les ordonnées transmises dans les registres CX et DX ne se rapportent pas à l'écran physique mais aux positions en points écran dans l'écran virtuel de la souris.

·	Le compteur du nombre de fois que le bouton de la souris appelé a été appuyé est à nouveau fixé sur 0 lorsque cette fonction est appelée.


Int 33h, Fct 06h    Combien de fois un bouton de la souris a-t-il été relâché ?        Mouse (> 1.0)

Indique au programme d'appel combien de fois un bouton de la souris a été relâché depuis le dernier appel de cette fonction et où figurait le curseur de la souris lors du dernier de ces événements.

Entrée :

AX	= 0006h

BX	= Bouton de la souris appelé :

0	= bouton gauche de la Souris (à partir de 1.0)

1	= bouton droit de la Souris (à partir de 1.0)

2	= bouton central de la souris

Sortie :

AX	= Etat de tous les boutons de la Souris (à partir de 1.0)

Bit	Signification

0	1 = bouton gauche de la souris appuyé

1	1 = bouton droit de la souris appuyé

2	1 = bouton central de la souris appuyé

3-15	Aucune signification (0)

BX	= Nombre de fois que le bouton de la souris a été relâché

CX	= Position horizontale de la souris la dernière fois que le bouton a été relâché

DX	= Position verticale de la souris la dernière fois que le bouton a été relâché

Remarques :

·	Les ordonnées transmises dans les registres CX et DX ne se rapportent pas à l'écran physique mais aux positions en points écran dans l'écran virtuel de la souris.

·	Le compteur du nombre de fois que le bouton de la souris appelé a été relâché est à nouveau fixé sur 0 lorsque cette fonction est appelée.


Int 33h, Fct 07h    Définir la zone de déplacement horizontale pour le curseur de la souris        Mouse (> 1.0)

Définit la zone horizontale à l'intérieur de laquelle le curseur de la souris peut se déplacer. L'utilisateur n'aura aucune possibilité de faire sortir le curseur de la souris de la zone ainsi fixée.

Entrée :

AX	= 0007h

CX	= position horizontale minimale de la souris

DX	= position horizontale maximale de la souris

Sortie :

Aucune

Remarques :

·	Les ordonnées transmises dans les registres CX et DX ne se rapportent pas à l'écran physique mais aux positions en points écran dans l'écran virtuel de la souris.

·	Si le curseur de la souris se trouve en dehors de la zone spécifiée, il y est automatiquement ramené par le driver de la souris.

·	Si la valeur spécifiée dans le registre DX est inférieure à celle dans CX, les deux paramètres sont échangés.


Int 33h, Fct 08h    Définir la zone de déplacement verticale pour le curseur de la souris        Mouse (> 1.0)

Définit la zone verticale à l'intérieur de laquelle le curseur de la souris peut se déplacer. L'utilisateur n'aura aucune possibilité de faire sortir le curseur de la souris de la zone ainsi fixée.

Entrée :

AX	= 0008h

CX	= position verticale minimale de la souris

DX	= position verticale maximale de la souris

Sortie :

Aucune

Remarques :

·	Les ordonnées transmises dans les registres CX et DX ne se rapportent pas à l'écran physique mais aux positions en points écran dans l'écran virtuel de la souris.

·	Si le curseur de la souris se trouve en dehors de la zone spécifiée, il y est automatiquement ramené par le driver de la souris.

·	Si la valeur spécifiée dans le registre DX est inférieure à celle dans CX, les deux paramètres sont échangés.


Int 33h, Fct 09h    Définit le curseur de la souris en mode graphique        Mouse (> 1.0)

En mode graphique, un tableau de bits définit l'apparence du curseur de la souris, en fixant de quelle manière les points sous le curseur de la souris et les points du curseur de la souris doivent être combinés. Cette fonction sert à définir ce tableau de bits, et donc l'apparence du curseur de la souris.

Entrée :

AX	= 0009h

BX	= Distance du point de référence au bord gauche du tableau de bits

CX	= Distance du point de référence au bord supérieur du tableau de bits

ES:DX	= Adresses de segment et d'offset du tableau de bits dans la mémoire

Sortie :

Aucune

Remarques :

·	Le tableau de bits comporte 64 octets, dont les 32 premiers définissent une combinaison ET et les 32 autres une combinaison OU avec le motif de points actuel.


Int 33h, Fct 0Ah    Définit le curseur de la souris en mode de texte    Mouse (> 1.0)

Fixe le motif de bits définissant l'apparence du curseur de la souris en mode de texte.

Entrée :

AX	= 000Ah

BX	= Type de curseur de la Souris (à partir de 1.0)

0	= curseur logiciel

1	= curseur électronique

CX	= Masque AND pour le curseur logiciel ou la ligne de départ du curseur électronique

DX	= Masque XOR pour le curseur logiciel ou la ligne finale du curseur électronique

Sortie :

Aucune

Remarques :

·	Si le curseur logiciel est sélectionné, le code du caractère sous le curseur de la souris et l'octet d'attribut correspondant sont tout d'abord combiné par un AND binaire avec le masque dans le registre CX, avant qu'une combinaison OU EXCLUSIF (XOR) soit ensuite opérée avec la valeur dans le registre DX. L'octet d'attribut est combiné avec les octets de plus fort poids des deux valeurs (CH et DH), alors que le code de caractère est combiné avec les octets de plus faible poids (CL et DL).

·	Le curseur électronique est le curseur clignotant de l'écran. Les lignes de départ et de fin doivent être comprises, en mode monochrome, entre 0 et 13, et en mode couleur, entre 0 et 7.


Int 33h, Fct 0Bh    Lire les distances de déplacement    Mouse (> 1.0)

Détermine la distance entre la position actuelle de la souris et la position de la souris lors du dernier appel de cette fonction.

Entrée :

AX	= 000Bh

Sortie :

CX	= Distance horizontale

DX	= Distance verticale

Remarques :

·	Les valeurs doivent être interprétées comme des nombres signés, les valeurs positives indiquant un déplacement vers le bas ou la droite de l'écran, alors que les valeurs négatives indiquent un déplacement vers le haut ou la gauche de l'écran.

·	Les valeurs ne sont pas fournies en points mais en mickeys.(1 mickey équivaut à 1/200 de pouce).


Int 33h, Fct 0Ch    Installer le gestionnaire d'événements    Mouse (> 1.0)

Cette fonction permet à un programme d'installer un gestionnaire d'événements, qui sera appelé lorsque interviendra un événement déterminé concernant la souris.

Entrée :

AX	= 000Ch

CX	= Evénements devant déclencher l'appel du gestionnaire d'événements (masque d'événements)

Bit	Signification

0	La souris a été déplacée

1	Bouton gauche de la souris appuyé

2	Bouton gauche de la souris relâché

3	Bouton droit de la souris appuyé

4	Bouton droit de la souris relâché

5	Bouton central de la souris appuyé

6	Bouton central de la souris relâché

7-15	Aucune signification

ES:DX	= Adresses de segment et d'offset du gestionnaire

Sortie :

Aucune

Remarques :

·	Le gestionnaire d'événements est appelé par le driver de la souris à travers une instruction assembleur FAR CALL et il doit donc de ce fait se terminer également par une instruction FAR RETurn. Comme pour un gestionnaire d'interruption, aucun des registres du processeur ne doit être restitué à l'utilisateur avec un contenu modifié.

·	Le driver de la souris fournit les informations suivantes au gestionnaire d'événements lorsqu'il est appelé :

AX = Masque d'événements.

Les différents bits correspondent aux différents événements tels qu'ils ont été indiqués dans le registre CX lors de l'installation du gestionnaire d'événements. D'autres bits peuvent également être fixés car cette valeur reflète l'état actuel du driver de la souris, sans se limiter aux événements sélectionnés.

BX = Etat des boutons de la Souris (à partir de 1.0)

Bit	Signification

0	Bouton gauche de la souris a été appuyé

1	Bouton droit de la souris a été appuyé

2	Bouton central de la souris a été appuyé

CX	= Position horizontale de la souris.

DX	= Position verticale de la souris.

SI	= Longueur du dernier déplacement horizontal de la souris.

DI	= Longueur du dernier déplacement vertical de la souris.

DS	= Segment de données du driver de la souris

·	Les ordonnées transmises dans les registres CX et DX ne se rapportent pas à l'écran physique mais aux positions en points écran dans l'écran virtuel de la souris.

·	Les distances spécifiées dans les registres SI et DI ne sont pas exprimées en points écran, mais en mickeys (1/200ème de pouce). Les valeurs transmises doivent être interprétées comme des nombres signés, les valeurs négatives indiquant un déplacement vers le haut ou la gauche de l'écran, alors que les valeurs positives indiquent un déplacement vers le bas ou la droite de l'écran.


Int 33h, Fct 0Dh    Activer l'émulation du crayon optique    Mouse (> 1.0)

Active l'émulation du crayon optique et simule ainsi un crayon optique inexistant.

Entrée :

AX	= 000Dh

Sortie :

Aucune

Remarques :

·	L'émulation d'un crayon optique n'est intéressante qu'en liaison avec des programmes soutenant le crayon optique ou fournissant des mécanismes de test du crayon optique. C'est le cas par exemple du BASIC IBM avec son instruction PEN.

·	Sous le mode d'émulation, la position de la souris est associée à la position du crayon optique et le fait d'actionner simultanément les boutons gauche et droit de la souris est interprété comme le fait d'appuyer sur le bouton du crayon optique.


Int 33h, Fct 0Eh    Désactiver l'émulation du crayon optique    Mouse (> 1.0)

Désactive à nouveau l'émulation du crayon optique qui avait été auparavant activée avec la fonction 0Dh.

Entrée :

AX	= 000Eh

Sortie :

Aucune


Int 33h, Fct 0Fh    Définir le rapport entre les mickeys et les points    Mouse (> 1.0)

Cette fonction définit le rapport entre les mickeys et les points, dont dépend la sensibilité de la souris du point de vue de l'utilisateur, c'est-à-dire la vitesse avec laquelle le curseur de la souris peut être déplacé sur l'écran.

Entrée :

AX	= 000Fh

CX	= Nombre de mickeys horizontaux représentant huit points

DX	= Nombre de mickeys verticaux représentant huit points

Sortie :

Aucune

Remarques :

·	Peuvent être spécifiées des valeurs comprises entre 1 et 32767.

·	Le réglage par défaut est de 8 mickeys horizontalement et de 16 mickeys verticalement, de sorte que le curseur de la souris se déplace deux fois plus "vite" horizontalement que verticalement.

·	Les valeurs par défaut peuvent être à nouveau fixées en appelant la fonction 00h (Réinitialisation du driver de la souris).


Int 33h, Fct 10h    Définir la zone d'exclusion    Mouse (> 1.0)

Cette fonction permet à un programme de définir une zone quelconque de l'écran comme zone d'exclusion (une sorte de trou noir), qui aura pour effet de faire disparaître le curseur de la souris de l'écran dès qu'il pénétrera dans cette zone.

Entrée :

AX	= 0010h

CX	= Ordonnée X du coin supérieur gauche de la zone d'exclusion

DX	= Ordonnée Y du coin supérieur gauche de la zone d'exclusion

SI	= Ordonnée X du coin inférieur droit de la zone d'exclusion

DI	= Ordonnée Y du coin inférieur droit de la zone d'exclusion

Sortie :

Aucune

Remarques :

·	Les ordonnées transmises dans les registres CX, DX, SI et DI ne se rapportent pas à l'écran physique mais aux positions en points écran dans l'écran virtuel de la souris.

·	La zone d'exclusion peut être à nouveau annulée en appelant la fonction 00h (réinitialisation du driver de souris) ou 01h (affichage du curseur de la souris).


Int 33h, Fct 11h    Non documentée    Mouse (> 1.0)

Cette fonction n'intervient qu'à l'intérieur du gestionnaire de la souris. Elle n'est pas documentée et ne peut pas être appelée par un programme utilisateur.


Int 33h, Fct 12h    Non documentée    Mouse (> 1.0)

Cette fonction n'intervient qu'à l'intérieur du gestionnaire de la souris. Elle n'est pas documentée et ne peut pas être appelée par un programme utilisateur.


Int 33h, Fct 13h    Définir le seuil pour le doublement de la vitesse de la souris        Mouse (> 1.0)

Si la vitesse de déplacement de la souris dépasse un seuil déterminé, le driver de la souris double le rapport entre les points et les mickeys, de façon à doubler la vitesse de la souris. Cette fonction permet de fixer le seuil au-delà duquel ce doublement intervient.

Entrée :

AX	= 0013h

DX	= Seuil en mickeys par seconde

Sortie :

Aucune

Remarques :

·	1 mickey équivaut à une longueur d'1/200 ou d'1/400 de pouce selon la souris.

·	Pour empêcher tout doublement de la vitesse de la souris, il suffit de fixer le seuil suffisamment haut. Des vitesses de 5000 mickeys par seconde ne peuvent, par exemple, déjà plus être atteintes en pratique.


Int 33h, Fct 14h    Echange des gestionnaires d'événements    Mouse (> 1.0)

Cette fonction permet à un programme d'installer un nouveau gestionnaire d'événements pour certains événements souris déterminés, tout en obtenant en même temps l'adresse de l'ancien gestionnaire d'événements.

Entrée :

AX	= 0014h

CX	= Evénements devant entraîner l'appel du gestionnaire d'événements

Bit	Signification

0	La souris a été déplacée

1	Bouton gauche de la souris appuyé

2	Bouton gauche de la souris relâché

3	Bouton droit de la souris appuyé

4	Bouton droit de la souris relâché

5	Bouton central de la souris appuyé

6	Bouton central de la souris relâché

7-15	Aucune signification

ES:DX = Adresses de segment et d'offset du gestionnaire

Sortie :

CX	= Masque d'événements du gestionnaire d'événements installé jusqu'ici

ES:DX	= Adresses de segment et d'offset du gestionnaire d'événements installé jusqu'ici

Remarques :

·	Les informations nécessaires sur l'appel du gestionnaire d'événements sont fournies dans la description de la fonction 0Ch (Installer le gestionnaire d'événements).


Int 33h, Fct 15h    Lire la taille du buffer d'état de la souris    Mouse (> 1.0)

Cette fonction fournit la taille du buffer d'état de la souris dans lequel un programme peut sauvegarder l'état complet du driver de la souris.

Entrée :

AX	= 0015h

Sortie :

BX	= Taille du buffer d'état de la souris en octets

Remarque :

·	L'état de la souris peut être sauvegardé à l'aide de la fonction 16h.


Int 33h, Fct 16h    Sauvegarder état de la souris    Mouse (> 1.0)

Lorsque cette fonction est appelée, le driver de la souris copie toutes les informations d'état gérées dans un buffer du programme d'appel.

Entrée :

AX	= 0016h

ES:DX	= Adresses de segment et d'offset du buffer

Sortie :

Aucune

Remarques :

·	Le programme d'appel doit veiller à ce que le buffer soit suffisamment grand pour recevoir toutes les informations d'état. Avant d'appeler cette fonction, il ferait donc bien de déterminer à l'aide de la fonction 15h la taille du buffer d'état de la souris.

·	L'appel de cette fonction peut par exemple être utile avant de faire exécuter un programme à l'aide de la fonction EXEC, pour que tous les paramètres de la souris puissent être à nouveau fixés sur leurs valeurs antérieures après exécution de ce programme, quelles que soient les modifications intervenues à l'intérieur du programme appelé.


Int 33h, Fct 17h    Restaurer l'état de la souris    Mouse (> 1.0)

Lit tous les paramètres de la souris dans un buffer dans lequel ils avaient été sauvegardés auparavant avec la fonction 16h.

Entrée :

AX	= 0017h

ES:DX	= Adresses de segment et d'offset du buffer d'état de la souris

Sortie :

Aucune


Int 33h, Fct 18h    Installer un gestionnaire d'événements alternatif    Mouse (> 1.0)

Cette fonction permet à un programme d'installer au maximum trois gestionnaires d'événements différents, qui devront être appelés par le driver de la souris lorsque interviendront certains événements liés à la souris et au clavier.

Entrée :

AX	= 0018h

CX	= Evénements devant entraîner l'appel du gestionnaire d'événements

Bit	Signification

0	La souris a été déplacée

1	Bouton gauche de la souris appuyé

2	Bouton gauche de la souris relâché

3	Bouton droit de la souris appuyé

4	Bouton droit de la souris relâché

5	Touche Shift actionnée pendant qu'un bouton de la souris était appuyé ou relâché

6	Touche Ctrl actionnée pendant qu'un bouton de la souris était appuyé ou relâché

7	Touche Alt actionnée pendant qu'un bouton de la souris était appuyé ou relâché

8-15	Aucune signification

ES:DX = Adresses de segment et d'offset du gestionnaire

Sortie :

AX	= 	0018h:	Le gestionnaire d'événements a été installé

FFFFh:	Le gestionnaire d'événements n'a pu être installé

Remarques :

·	Dans le masque d'événements du registre CX doit être fixé au moins l'un des bits 5 à 7 pour que l'événement soit combiné au fait d'actionner au moins une touche de contrôle. Si les touches de contrôle ne doivent pas être prises en compte, il est préférable d'utiliser les fonctions 0Ch ou 14h.

·	Une erreur peut se produire si trois gestionnaires d'événements alternatifs ont déjà été installés ou bien si un gestionnaire d'événements a déjà été enregistré avec la même masque d'événements.

·	Le gestionnaire d'événements est appelé par le driver de la souris à travers une instruction assembleur FAR CALL et il doit donc de ce fait se terminer également par une instruction FAR RET. Comme pour un gestionnaire d'interruption, aucun des registres du processeur ne doit être restitué à l'utilisateur avec un contenu modifié.

·	Le driver de la souris fournit les informations suivantes au gestionnaire d'événements lorsqu'il est appelé :

AX = Masque d'événements.

Les différents bits correspondent aux différents événements tels qu'ils ont été indiqués dans le registre CX lors de l'installation du gestionnaire d'événements. D'autres bits peuvent également être fixés car cette valeur reflète l'état actuel du driver de la souris, sans se limiter aux événements sélectionnés.

BX = Etat des boutons de la Souris (à partir de 1.0)

Bit	Signification

0	Bouton gauche de la souris a été appuyé

1	Bouton droit de la souris a été appuyé

2	Bouton central de la souris a été appuyé

CX = Position horizontale de la souris.

DX = Position verticale de la souris.

SI = Longueur du dernier déplacement horizontal de la souris.

DI = Longueur du dernier déplacement vertical de la souris.

DS = Segment de données du driver de la souris

·	Les ordonnées transmises dans les registres CX et DX ne se rapportent pas à l'écran physique mais aux positions en points écran dans l'écran virtuel de la souris.

·	Les distances spécifiées dans les registres SI et DI ne sont pas exprimées en points écran, mais en mickeys (1/200ème de pouce). Les valeurs transmises doivent être interprétées comme des nombres signés, les valeurs négatives indiquant un déplacement vers le haut ou la gauche de l'écran, alors que les valeurs positives indiquent un déplacement vers le bas ou la droite de l'écran.


Int 33h, Fct 19h    Lire l'adresse d'un gestionnaire d'événements alternatif        Mouse (> 1.0)

Renvoie au programme d'appel l'adresse d'un gestionnaire d'événements alternatif.

Entrée :

AX	= 0019h

CX	= Masque d'événements du gestionnaire d'événements appelé

Sortie :

AX =	0000h :	OK, dans ce cas :

CX =	Masque d'événements

Bit	Signification

0	La souris a été déplacée

1	Bouton gauche de la souris appuyé

2	Bouton gauche de la souris relâché

3	Bouton droit de la souris appuyé

4	Bouton droit de la souris relâché

5	Touche Shift actionnée pendant qu'un bouton de la souris était appuyé ou relâché

6	Touche Ctrl actionnée pendant qu'un bouton de la souris était appuyé ou relâché

7	Touche Alt actionnée pendant qu'un bouton de la souris était appuyé ou relâché

8-15	Aucune signification

ES:DX =	Adresses de segment et d'offset du gestionnaire

Remarques :

·	L'appel de fonction échoue si aucune gestionnaire d'événements alternatif n'a encore été installé avec le masque d'événements spécifié.


Int 33h, Fct 1Ah    Définir la sensibilité de la souris    Mouse (> 1.0)

Cette fonction est une combinaison des fonctions 0Fh et 13h, qui permettent respectivement de fixer le rapport entre déplacement de la souris et déplacement du curseur de la souris, d'une part, et de fixer le seuil de doublement de la vitesse de la souris, d'autre part.

Entrée :

AX	= 001Ah

BX	= Nombre de mickeys représentant huit points horizontalement

CX	= Nombre de mickeys représentant huit points verticalement

DX	= Seuil pour le doublement de la vitesse de la souris

Sortie :

Aucune

Remarques :

·	Pour les paramètres dans les registres CX et DX sont autorisées des valeurs comprises entre 1 et 32767.

·	Le réglage par défaut est de 8 mickeys horizontalement et de 16 mickeys verticalement, de sorte que le curseur de la souris se déplace deux fois plus "vite" horizontalement que verticalement.

·	Pour empêcher tout doublement de la vitesse de la souris, il suffit de fixer le seuil suffisamment haut. Des vitesses de 5000 mickeys par seconde ne peuvent, par exemple, déjà plus être atteintes en pratique.

·	Les valeurs par défaut peuvent être à nouveau fixées en appelant la fonction 00h (Réinitialisation du driver de la souris).


Int 33h, Fct 1Bh    Lire la sensibilité de la souris    Mouse (> 1.0)

Renvoie les paramètres qui ont été fixés à travers la fonction 1Ah ou à travers les fonctions 0Fh et 13h.

Entrée :

AX	= 001Bh

Sortie :

BX	= Nombre de mickeys représentant huit points horizontalement

CX	= Nombre de mickeys représentant huit points verticalement

DX	= Seuil pour le doublement de la vitesse de la souris


Int 33h, Fct 1Ch    Définir la fréquence d'Int de l'électronique de la souris        Mouse (> 1.0)

Détermine à quelle fréquence l'électronique de la souris lit la position actuelle de la souris et l'état des boutons de la souris pour les retransmettre au driver de la souris.

Entrée :

AX	= 001C

BX	= Fréquence d'interruption

Bit	Signification

0	Pas d'interruptions

1	30 interruptions par seconde

2	50 interruptions par seconde

3	100 interruptions par seconde

4	200 interruptions par seconde

5-15	Aucune signification (0)

Sortie :

Aucune

Remarques :

·	Cette fonction n'est disponible que pour la souris InPort.

·	Si plus d'un bit est fixé dans le registre BX, c'est le bit fixé de plus faible poids qui compte.

·	La précision de la souris est proportionnelle à la fréquence des interruptions, mais la vitesse du programme de premier plan est au contraire inversement proportionnelle à cette fréquence, puisqu'il est interrompu plus souvent par le driver de souris


Int 33h, Fct 1Dh    Définir une page écran pour le curseur de la souris        Mouse (> 1.0)

Fixe la page écran dans laquelle le driver de la souris doit afficher le curseur de la souris.

Entrée :

AX	= 001Dh

BX	= Numéro de la page écran

Sortie :

Aucune

Remarques :

·	La valeur par défaut est la page écran 0.

·	L'appel de cette fonction ne présente naturellement d'intérêt que si votre programme travaille avec plusieurs pages écran, telles qu'elles sont offertes par les cartes CGA, EGA et VGA.


Int 33h, Fct 1Eh    Lire page écran du curseur de la souris    Mouse (> 1.0)

Détermine la page écran dans laquelle le curseur de la souris est représenté par le driver de la souris.

Entrée :

AX	= 001Eh

Sortie :

BX	= Numéro de la page écran


Int 33h, Fct 1Fh    Désactiver le driver de la souris    Mouse (> 1.0)

Désactive le driver actuel de la souris et fournit l'adresse du gestionnaire d'interruption précédent pour l'interruption 33h.

Entrée :

AX	= 001Fh

Sortie :

AX 	= 	FFFFh : Erreur

001Fh : Tout va bien, auquel cas

ES:BX = Adresses de segment et d'offset du driver de souris antérieur

Remarques :

·	Lorsque cette fonction est appelée, le driver de souris libère à nouveau toutes les routines d'interruption qu'ils avaient installées lors de son activation. Seul fait exception le gestionnaire de l'interruption 33h, mais le programme d'appel peut charger à nouveau sa valeur d'origine dans ce vecteur d'interruption également, car son adresse est renvoyée dans la paire de registres ES:BX.


Int 33h, Fct 20h    Activer le driver de la souris    Mouse (> 1.0)

Active un driver de souris désactivé auparavant avec la fonction 1Fh.

Entrée :

AX	= 0020h

Sortie :

Aucune


Int 33h, Fct 21h    Réinitialiser le driver de la souris    Mouse (> 1.0)

Cette fonction effectue une réinitialisation du driver de la souris, en cachant le curseur de la souris et en désactivant les gestionnaires d'événements déjà installés.

Entrée :

AX	= 0021h

Sortie :

AX	= 	FFFFh : Erreur

0021h :Tout va bien, dans ce cas :

BX = nombre de boutons

Remarque :

·	Cette fonction, contrairement à la fonction 00h ne réinitialise pas le hardware de la souris.


Int 33h, Fct 22h    Définir la langue étrangère pour les messages    Mouse (> 1.0)

La version internationale du driver de la souris reconnaît plusieurs langues étrangères et peut retourner les messages dans ces langues. Cette fonction détermine la langue étrangère souhaitée.

Entrée :

AX 	= 0022h

BX 	= Numéro de code de la langue étrangère (voir plus bas)

Sortie :

aucune

Remarques :

·	Les codes suivants sont utilisés pour désigner les langues étrangères :

0	Anglais

1	Français

2	Néerlandais

3	Allemand

4	Suédois

5	Finlandais

6	Espagnol

7	Portugais

8	Italien

·	Vu que cette fonction ne retourne pas un état d'erreur, il n'est pas toujours possible de déterminer si une version internationale du driver de la souris existe réellement et de définir l'option souhaitée. La fonction 23h permet cependant de contrôler facilement cet aspect.


Int 33h, Fct 23h    Vérifier l'existence d'une langue étrangère pour les messages        Mouse (> 1.0)

La version internationale du driver de la souris reconnaît plusieurs langues étrangères et peut retourner les messages dans ces langues. Cette fonction retourne le numéro de code de la langue étrangère actuellement définie.

Entrée :

AX 	= 0023h

Sortie :

BX 	= Numéro de code de la langue étrangère choisie

Remarques :

·	Les codes suivants sont utilisés pour désigner les langues étrangères :

0	Anglais

1	Français

2	Néerlandais

3	Allemand

4	Suédois

5	Finlandais

6	Espagnol

7	Portugais

8	Italien

·	Si vous n'êtes pas en présence d'une version internationale du driver de la souris, la fonction retourne la valeur 0.


Int 33h, Fct 24h    Lire le type de souris    Mouse (> 1.0)

Fournit le type de souris ainsi que son numéro de version.

Entrée :

AX	=	0024h

Sortie :

BH	=	Partie entière du numéro de version

BL	=	Partie décimale du numéro de version

CH	=	Type de souris

1 = Souris bus

2 = Souris série

3 = Souris InPort

4 = Souris PS/2

5 = Souris HP

CL	=	Numéro IRQ

0 = PS/2

2, 3, 4, 5 ou 7 = Numéro PC

Remarque :

·	Un driver de souris de version 6.24 aura 6 dans le registre BH et 24h dans le registre BL.


Int 33h, Fct 25h    Lire des informations générales    Mouse (> 6.26)

Cette fonction retourne des informations générales sur le driver de souris, par exemple le type du driver et l'état du curseur de la souris.

Entrée :

AX 	= 0025h

Sortie :

AX 	= Informations générales (voir plus bas)

BX,CX,	DX = Informations d'état concernant OS/2 uniquement

Remarques :

·	Les informations générales sont transmises dans les divers tableaux de bits du registre AX. Il reproduit les informations suivantes :

Bit 15 : Type du driver

0b 	= Le driver se trouve dans un fichier COM

1b 	= Le driver est sauvegardé en tant qu'un driver de périphérique. Il a été inséré par un fichier CONFIG.SYS.

Bits 12 & 13 : Informations sur le curseur de la souris

00b 	= Affichage d'un curseur texte logiciel

01b 	= Affichage d'un curseur texte électronique

10b, 11b 	= Affichage d'un curseur graphique

Bits 8 à 11 : Valeur binaire représentant la fréquence d'interruption de l'électronique de la souris

·	Les arguments obtenus dans les registres BX, CX et DX ne sont retournés que par un driver de souris sous OS/2. Ils ne jouent aucun rôle dans la programmation DOS.


Int 33h, Fct 26h    Lire l'extension de l'écran de souris virtuel    Mouse (> 6.26)

Cette fonction retourne l'extension absolue de l'écran de souris virtuel et indique si le driver de souris est actuellement activé ou désactivé.

Entrée :

AX 	= 0026h

Sortie :

BX 	= Etat du driver de souris

CX 	= Ordonnée X maximale

DX 	= Ordonnée Y maximale

Remarques :

·	En ce qui concerne l'état du driver de souris, 0 représente l'état désactivé et les autres valeurs l'état activé. Cet état peut être modifié à l'aide des fonctions 1Fh et 20h.

·	Les valeurs retournées dans les registres CX et DX concernent la taille absolue de l'écran de souris virtuel et non les valeurs spécifiées à l'aide des fonctions 07h et 08h. Elles peuvent être obtenues au moyen de la fonction 31h.


Int 33h, Fct 27h    Lire les masques de bits du curseur d'écran    Mouse (> 7.01)

Cette fonction permet de prendre connaissance des masques de bits en cours pour la création du curseur logiciel ou pour la ligne de départ et la ligne finale du curseur électronique. En outre, cette fonction donne des informations sur le déplacement de la souris depuis sa dernière utilisation.

Entrée :

AX 	= 0027h

Sortie :

AX 	= Masque AND du curseur logiciel ou ligne de départ du curseur électronique

BX 	=  Masque XOR du curseur logiciel ou ligne finale du curseur électronique

CX 	= Longueur du déplacement horizontal en mickeys

DX 	=  Longueur du déplacement vertical en mickeys

Remarques :

·	Si un curseur électronique se trouve activé au moment de l'appel de la fonction, celle-ci retourne la ligne de départ et la ligne finale (en lignes Scan). Au contraire, si le curseur logiciel est actif, la fonction retourne les masques de bits en cours.

·	Bien que cette fonction soit reconnue depuis la version 7.01 du driver de souris, les informations concernant les lignes de départ et finales du curseur électronique ne sont transmises qu'à partir de la version 7.02. Cela élimine un risque d'erreur dans la version 7.01 qui ne fonctionne librement qu'avec le curseur logiciel.

·	Les distances de déplacement retournées dans les registres CX et DX ne sont pas modifiées à cause des différents paramètres logiciels tels que le seuil du doublement de la vitesse de la souris ou la table d'accélération. Elles représentent donc les valeurs transmises directement au driver de souris par le hard.


Int 33h, Fct 28h    Définir le mode vidéo    Mouse (> 7.0)

Cette fonction permet de spécifier un mode vidéo à condition qu'il soit reconnu par l'équipement vidéo en cours.

Entrée :

AX 	= 0028h

CX 	= Numéro de code du mode vidéo

DX 	= Taille de la fonte écran

Sortie :

CX 	= Etat de la fonction

Remarques :

·	La liste des modes vidéo disponibles et leurs numéros de code peut être obtenue par la fonction 29h.

·	La valeur 0 est retournée dans le registre CX si le mode vidéo spécifié est reconnu par le matériel en cours. Dans ce cas, il peut être défini sinon le numéro de code est renvoyé par le registre AX.

·	Certains modes vidéo utilisant les polices à tailles variables attendent le paramètre d'appel en DX. La taille de la police le long de l'axe X doit alors être codifiée dans l'octet de poids fort de DX et l'étirement le long de l'axe Y dans l'octet de poids faible.


Int 33h, Fct 29h    Lire la liste des modes vidéo disponibles    Mouse (> 7.0)

Cette fonction permet à un programme utilisateur de demander la liste des modes vidéo reconnus par le matériel vidéo en cours.

Entrée :

AX 	= 0029h

CX 	= Demander le premier mode vidéo ou le suivant

Sortie :

BX 	= Adresse de segment d'une chaîne

CX 	= Numéro de code du mode vidéo

DX 	= Adresse d'offset d'une chaîne

Remarques :

·	Pour demander la liste complète des modes vidéo disponibles, il convient d'exécuter un appel multiple. Lors du premier appel, la fonction doit retourner la valeur 0 pour le paramètre de CX et une valeur différente de 0 lors des appels suivants.

Chaque appel décrit un mode vidéo différent jusqu'à ce que la valeur 0 obtenue dans le registre CX indique que tous les modes vidéo ont été sollicités.

·	Outre le numéro de code du mode vidéo, cette fonction ne fournit pas toujours le type du mode vidéo (texte ou graphique), sa résolution et le nombre de couleurs à afficher. Généralement, cette information figure dans une chaîne ASCII dont l'adresse est retournée dans la paire des registres BX:DX.

Dans la mesure où une telle chaîne est disponible et les deux registres cités ne contiennent pas la valeur 0, elle se termine par un caractère dollar et un octet nul.


Int 33h, Fct 2Ah    Obtenir des informations sur le curseur de la souris        Mouse (> 7.02)

Cette fonction retourne diverses informations concernant le curseur et l'électronique de la souris.

Entrée :

AX 	= 002Ah

Sortie :

AX 	= Compteur de curseur interne

BX 	= Ordonnée X du Hot-Spot

CX 	= Ordonnée Y du Hot-Spot

DX 	= Type de souris

Remarques :

·	Le compteur de souris interne indique si le curseur est actuellement visible ou non. Vous pouvez agir indirectement sur lui en appelant les fonctions 01h et 02h. La valeur 0 signale alors que le curseur de souris est pour l'instant invisible. Toute autre valeur indique que le curseur de souris se trouve sur l'écran.

·	En ce qui concerne le curseur graphique, le Hot-Spot reproduit le point à l'intérieur du masque de bits du curseur retourné à la suite d'une demande de sa position. Pour exprimer sa suppression du coin supérieur gauche du masque de bits, une valeur positive signée comprise entre -128 et 127 est retournée dans les registres BX ou CX.

·	Dans le registre DX, la fonction retourne un code de type selon la table suivante :

0 	= pas de souris

1 	= souris bus

2 	= souris série

3 	= souris InPort

4 	= souris PS/2

5 	= souris HP


Int 33h, Fct 2Bh    Lire les courbes d'accélération    Mouse (> 7.0)

Les quatre courbes d'accélération gérées par le driver de souris sur le plan interne peuvent être chargées à l'aide de cette fonction. L'une d'entre elles peut être sélectionnée comme la courbe en cours.

Entrée :

AX = 002Bh

BX = Numéro de la courbe d'accélération à activer

ES = Adresse de segment des données-clé

SI = Adresse d'offset des données-clé

Sortie :

AX 	= FFFFh : Erreur

= 0021h : Tout va bien, dans ce cas

BX = Nombre d'appuis sur la souris

Remarques :

·	Cette fonction permet de commuter entre les courbes d'accélération prédéfinies dans le driver, la valeur -1 représentant le numéro de la courbe en cours. Il n'est pas indispensable de transmettre un buffer avec les données-clé des courbes d'accélération.

·	Les quatre courbes d'accélération sont décrites à l'aide d'une structure de données définie dans la mémoire par le programme d'appel. Elle doit être transmise au moyen du registre ES:SI.


Int 33h, Fct 2Ch    Lire la courbe d'accélération en cours    Mouse (> 7.0)

Cette fonction sert à lire la courbe d'accélération en cours.

Entrée :

AX = 002Ch

Sortie :

AX 	= Etat de la fonction

BX 	= Numéro de la courbe d'accélération en cours (0 à 3)

ES 	= Adresse de segment du buffer

SI 	= Adresse d'offset du buffer

Remarques :

·	Après appel de cette fonction, il faut obligatoirement demander l'état de la fonction dans le registre AX. La courbe d'accélération ne peut être lue que lorsque la valeur 0 a été retournée dans le registre.

·	Après appel de la fonction, le contenu des registres ES:SI indique le buffer renfermant les données-clé de la courbe d'accélération en cours. La structure de ces données correspond au format identique à celui attendu lors de la définition d'une courbe d'accélération à l'aide de la fonction 2Bh.


Int 33h, Fct 2Dh    Définir/Lire la courbe d'accélération en cours    Mouse (> 7.0)

Cette fonction a pour rôle d'activer l'une des quatre courbes d'accélération ou de renvoyer la courbe en cours.

Entrée :

AX 	= 002Dh

BX 	= -1 : Retourner la courbe d'accélération en cours

= 1 - 4 : Activer cette courbe

Sortie :

AX 	= Etat de la fonction

BX 	= Numéro de la courbe d'accélération en cours (1-4)

ES 	= Adresse de segment du buffer avec le nom de la courbe d'accélération

SI 	= Adresse d'offset du buffer avec le nom de la courbe d'accélération

Remarques :

·	Si la valeur -1 est transmise dans le registre BX lors de l'appel de la fonction, celle-ci retourne alors des informations sur la courbe d'accélération en cours dans les registres BX, ES et SI. En revanche, si l'une des quatre courbes d'accélération est activée lors de l'appel, une valeur comprise entre 1 et 4 doit être chargée dans le registre BX avant l'appel de la fonction. Dans ce cas, seul l'état de la fonction est retourné en BX en guise de résultat.

·	Après appel de la fonction, l'état contient la valeur 0 si la fonction s'est exécutée correctement, sinon une valeur quelconque.

·	Lorsqu'une demande est formulée pour connaître la courbe d'accélération en cours, les registres ES:SI indiquent la chaîne ainsi que les autres données-clé concernant la courbe qui ont été définies lors de l'appel de la fonction 2Bh. La chaîne comprend 16 octets et ne se termine pas par un caractère spécial ($ ou octet nul). L'évaluation de cette chaîne permet de connaître le nom symbolique de la courbe d'accélération.


Int 33h, Fct 2Eh    Non documentée    Mouse (> 6.26)

Cette fonction n'intervient qu'à l'intérieur du driver de souris. Elle n'est pas documentée et ne peut donc pas être appelée par un programme utilisateur.


Int 33h, Fct 2Fh    Réinitialisation de l'électronique de la souris    Mouse (> 7.02)

Cette fonction réinitialise l'électronique de la souris sans agir sur les paramètres logiciels tels que le masque de bits du curseur de la souris, le seuil du doublement de la vitesse de la souris ou les courbes d'accélération.

Entrée :

AX 	= 002Fh

Sortie :

AX 	= 	FFFFh : Tout va bien

0 = Erreur

Remarques :

·	Cette fonction représente le contraire de la fonction 21h qui ne réinitialise que les paramètres logiciels.


Int 33h, Fct 30h    Définir/Obtenir les paramètres de la souris Ballpoint        Mouse (> 7.04)

Cette fonction est conçue spécialement pour les besoins de la souris Ballpoint. Elle permet de définir ou lire les paramètres spécifiques à cette souris. Il s'agit notamment de connaître l'orientation de la souris Ballpoint et les trois boutons considérés comme activés parmi les quatre qui sont disponibles.

Entrée :

AX 	= 0030h

BX 	= Angle de rotation

CX 	= Code de commande

Sortie :

AX 	= Etat de la fonction

BX 	= Angle de rotation

CX 	= Boutons activés

Remarques :

·	Après appel de la fonction, il faut obligatoirement vérifier l'état dans le registre AX. La valeur -1 indique en effet qu'aucune souris Ballpoint n'est installée. Toute autre valeur signale en revanche l'existence d'une souris Ballpoint et reproduit l'état des divers boutons de la souris. Les différents boutons sont représentés par les bits suivants à l'intérieur du registre AX :

Bit 2 = Bouton 4

Bit 3 = Bouton 2

Bit 4 = Bouton 3

Bit 5 = Bouton 1

Les autres bits contiennent la valeur 0.

·	Si cette fonction est utilisée pour demander l'angle de rotation en cours et les boutons activés, il faut préalablement charger le registre CX avec la valeur 0 avant l'appel. Un angle de rotation en BX ne s'avère alors pas indispensable.

Comme résultat de la fonction, on obtient l'angle de rotation en BX avec une valeur comprise entre 0 et 360 (degrés). En outre, les deux boutons activés peuvent être lus dans l'octet de poids fort de CX alors que les boutons désactivés sont codifiés dans l'octet de poids faible de ce registre. A l'intérieur des deux octets, les bits suivants sont disponibles pour les différents boutons :

Bit 2 = Bouton 4

Bit 3 = Bouton 2

Bit 4 = Bouton 3

Bit 5 = Bouton 1

Les autres bits contiennent la valeur 0.

·	Si l'angle de rotation actuel de la souris Ballpoint est communiqué au driver de souris à l'aide de cette fonction et les deux boutons activés sont sélectionnés, les boutons activés et désactivés sont alors à codifier en CX. La codification s'effectue selon le même principe que le renvoi des boutons activés ou désactivés à la suite d'un appel (voir plus haut). Comme angle de rotation, la fonction attend une valeur comprise entre 0 et 360 en BX.


Int 33h, Fct 31h    Lire l'étirement de l'écran virtuel    Mouse (> 7.05)

Cette fonction offre à un programme la possibilité de demander l'étirement de l'écran de souris virtuel dans le mode vidéo actuel.

Entrée :

AX 	= 0031h

Sortie :

AX 	= Ordonnée X minimale

BX 	= Ordonnée Y minimale

CX 	= Ordonnée X maximale

DX 	= Ordonnée Y maximale

Remarques :

·	La taille de l'écran de souris virtuel peut également être modifiée par les fonctions 07h et 08h qui réduisent le champ de déplacement du curseur.


Int 33h, Fct 32h    Lire les Fcts disponibles    Mouse (> 7.05)

Cette fonction permet tout simplement de connaître toutes les fonctions reconnues depuis la fonction 25h.

Entrée :

AX 	= 0032h

Sortie :

AX 	= Fonctions reconnues

Remarques :

·	Le résultat de la fonction retourné en AX doit être considéré comme un tableau de bits où chaque bit représente une fonction. S'il est réglé, cela signifie que la fonction est reconnue.

Le bit 15 représente la fonction 25h, le bit 14 la fonction 26h, le bit 13 la fonction 27h, etc.

Bit 15 = Fonction 25h

Bit 45 = Fonction 26h

Bit 13 = Fonction 27h

Bit 12 = Fonction 28h

Bit 11 = Fonction 29h

Bit 10 = Fonction 2Ah

Bit 9 = Fonction 2Bh

Bit 8 = Fonction 2Ch

Bit 7 = Fonction 2Dh

Bit 6 = Fonction 2Eh

Bit 5 = Fonction 2Fh

Bit 4 = Fonction 30h

Bit 3 = Fonction 31h

Bit 1 = Fonction 32h

Bit 0 = Fonction 33h


Int 33h, Fct 33h    Définir les paramètres    Mouse (> 7.05)

Tous les paramètres spécifiés par le logiciel ou le matériel à l'intérieur du driver de souris peuvent être lus dans un buffer à l'aide de cette fonction. La structure de ce buffer n'étant pas encore documentée avec précision, l'utilisation de cette fonction semble peu intéressante.

Entrée :

AX 	= 0033h

CX 	= Taille du buffer

ES 	= Adresse de segment du buffer

DX 	= Adresse d'offset du buffer

Sortie :

AX 	= 0

CX 	= Nombre d'octets dans le buffer

ES 	= Adresse de segment du buffer

DX 	= Adresse d'offset du buffer


Int 33h, Fct 34h    Lire l'état du fichier MOUSE.INI    Mouse (> 8.0)

Cette fonction est conçue pour la programmation de la souris sous Windows. Elle retourne la désignation exacte du chemin du fichier d'initialisation MOUSE.INI sous la forme d'une chaîne ASCII dans un buffer.

Entrée :

AX 	= 0034h

Sortie :

AX 	= 0

ES 	= Adresse de segment du buffer

DX 	= Adresse d'offset du buffer

Remarques :

·	La chaîne retournée se termine par un octet nul.

·	La désignation de chemin du fichier MOUSE.INI provient de la variable d'environnement MOUSE. Si cette variable n'est pas définie, MOUSE.INI est recherché dans le répertoire du driver de souris et la fonction retourne une chaîne correspondante.


Interruptions matérielles

Cette section décrit les interruptions matérielles générées par les différentes cartes d'extensions et circuits auxiliaires d'un PC. Elle comporte aussi les "exceptions", c'est-à-dire les interruptions matérielles déclenchées à l'initiative du processeur lui-même.

Interruption 0h	Interruption 1h	Interruption 2h

Interruption 3h	Interruption 4h	Interruption 5h

Interruptions 6h, 7h	Interruption 8h	Interruption 9h

Interruption 13h

Interruptions 10h à 12h	Interruption 14h	Interruption 15h

Interruption 70h	Interruption 75h	Interruption 76h


Interruption 0h

Le 8088 dispose des instructions machine DIV et IDIV qui effectuent une division entière. Les règles arithmétiques usuelles interdisent toute division par zéro. C'est pourquoi le processeur déclenche dans ce cas une interruption 0. Lors du lancement du système, le vecteur associé est dirigé par DOS sur une routine qui affiche un message du genre "Division par zéro", puis revient par IRET au programme interrompu.


Interruption 1h

Cette interruption est appelée par le processeur à la suite de chaque instruction lorsque le bit TRAP du registre des indicateurs est à 1. Les débogueurs exploitent ce mode pour pouvoir suivre l'exécution d'un programme. Ils fournissent alors un gestionnaire pour cette interruption.

Pour éviter qu'elle ne se déclenche à l'intérieur même de la routine d'interruption (ce qui conduirait à des appels récursifs en nombre infini et au débordement de la pile), le processeur annule le bit TRAP au début du gestionnaire. Auparavant comme c'est le cas pour toutes les interruptions, le registre des indicateurs et notamment le bit TRAP aura été sauvegardé sur la pile.

Dès que la routine d'interruption se termine par une instruction IRET, le processeur rétablit automatiquement l'ancien contenu du bit TRAP en récupérant sur la pile le registre des indicateurs. De ce fait, l'interruption 1 sera à nouveau appelée dès que la prochaine instruction du programme à surveiller aura été exécutée.

Si le programmeur a recueilli toutes les informations nécessaires sur le programme, le mode TRAP (autrement dit le bit TRAP) peut être désactivé. Mais comment faire, alors que le programme suivi ne sait pas qu'il est surveillé et ne peut donc pas contenir d'instruction propre à mettre à zéro le bit TRAP du registre des indicateurs?

La solution de ce problème se trouve encore dans la routine de l'interruption 1. C'est à elle d'annuler le bit TRAP mais ce n'est pas si simple car ce bit été systématiquement mis à 0 à l'entrée dans le programme et il sera rempli à la sortie, lors de la récupération du registre des indicateurs, par l'ancienne valeur 1. Il faut donc avant de sortir de la routine d'interruption reprendre le registre des indicateurs sur la pile, y annuler le bit TRAP et remettre ensuite sur la pile, à son emplacement d'origine, le registre des indicateurs. Au moment de l'instruction IRET, le processeur récupère le registre des indicateurs comme si de rien n'était, mais le bit TRAP étant cette fois ci à 0, le programme continue son exécution dans les conditions normales.

Ces possibilités ne sont guère exploitées dans les applications ordinaires. C'est pourquoi le BIOS fait pointer le vecteur de l'interruption 1 sur un simple IRET, de sorte qu'il ne se passera rien de spécial si un programme met par hasard le bit TRAP à 1. Le seul effet sera un ralentissement de l'exécution puisqu'après chaque instruction l'interruption 1 sera systématiquement invoquée. L'interruption 1 par contre est très utile dans les programmes de test du genre DEBUG car elle permet de suivre à la trace des programmes en inspectant une à une les instructions et leurs conséquences.


Interruption 2h

Cette interruption est désignée par le signe NMI qui veut dire "Non Maskable Interrupt". En conséquence, son exécution ne peut pas être inhibée par l'instruction CLI qui est en principe chargée de couper court à toute interruption. Dans un PC, l'interruption NMI est chargée d'attirer l'attention sur les erreurs en mémoire vive qui laissent présager un défaut de circuit. Il y urgence car une erreur de ce type peut altérer gravement le fonctionnement du système, et même l'endommager. C'est pourquoi le système déclenche l'interruption NMI même si toutes les autres sont inhibées

Au moment de l'initialisation du système, le vecteur d'interruption correspondant reçoit la référence d'une routine du BIOS charger d'afficher un message d'erreur et d'arrêter le système.


Interruption 3h

Cette interruption est aussi exploitée par les débogueurs. Par rapport à toutes les autres interruptions, elle présente la particularité de pouvoir être appelée à l'aide d'une instruction spéciale qui n'appartient qu'à elle seule. Les autres interruptions sont en effet appelées par une instruction machine sur 2 octets (premier octet = CDh, second octet = numéro de l'interruption) alors que l'interruption 3 se déclenche par une instruction particulière sur un seul octet seulement (le code CCh). Cette interruption convient ainsi parfaitement pour tester un programme, lorsqu'on désire l'exécuter jusqu'à un endroit déterminé où il devra s'interrompre et révéler le contenu courant des registres. Dans un débogueur on obtient ce résultat en insérant un appel à l'interruption 3 à l'endroit du programme où celui-ci devra être interrompu. Derrière cette interruption se cache en général un gestionnaire du débogueur qui affiche les contenus des registres et tout ce qu'il faut.

Vous pourriez objecter qu'à la place de l'interruption 3 toute autre interruption ferait l'affaire, pourvu que dans le gestionnaire associé on installe une routine d'affichage des registres. Cette remarque est certes judicieuse mais il ne faut pas oublier que l'interruption 3 présente l'avantage de tenir sur un seul octet. Pour comprendre la portée de cet avantage prenons un programme fictif.

Ce programme contient une instruction RET. Cette instruction prend un octet et constitue la fin d'un sous-programme. Un autre sous-programme se trouve à la suite qui commence par une instruction machine quelconque.  L'utilisateur souhaite examiner les registres à la fin du premier sous-programme, il disposera donc un point d'arrêt (c'est-à-dire un appel à l'interruption 3) à la place de l'instruction RET. Il est tout à fait avantageux que cet appel ne prenne qu'un seul octet. S'il occupait davantage de place, par exemple 2 ou 3 octets, il n'écraserait pas seulement l'instruction RET mais également tout ou partie de la première instruction du sous-programme qui suit. Si au cours de l'exécution le second sous-programme est invoqué, il se produirait une erreur capable de planter le système. Mais en limitant le point d'arrêt à un seul octet, cet incident ne se produit pas car le point d'arrêt ne peut pas écraser plus d'une seule instruction.

Jusqu'à son exploitation par un programme de mise au point, cette interruption n'a généralement pas d'application. Le système DOS l'aiguille sur une routine simplement constituée de l'instruction IRET Interrupt Return) qui rend la main au programme interrompu sans rien faire.


Interruption 4h

Cette interruption peut être appelée par une certaine instruction liée à une condition. Il s'agit de l'instruction machine INTO (INTerruption on Overflow)  qui ne déclenche l'interruption 4 que si le bit de débordement (Overflow) du registre des indicateurs est à 1 au moment de son exécution. Ce sera notamment le cas à la suite d'opérations arithmétiques (par exemple après une multiplication avec l'instruction MUL) si le résultat de l'opération ne peut plus être représenté avec un nombre déterminé de bits. Cette interruption peut naturellement également être appelée à l'aide de l'instruction INT normale mais dans ce cas l'appel ne dépendra pas de l'état d'armement du bit Overflow. En fait cette interruption est très peu utilisée et DOS la dirige directement sur une instruction de retour IRET.


Interruption 5h

Bien que classée dans le groupe des interruptions matérielles, l'interruption 5 est exploitée par le BIOS. Elle est déclenchée par le BIOS chaque fois que la touche "PrtScr" (sur un clavier américain) ou "Impr" (sur un clavier français) est actionnée. Sa tâche consiste à envoyer sur l'imprimante le contenu de l'écran, ce qu'on appelle une copie d'écran ou hard copy. C'est pourquoi le vecteur de cette interruption est initialisé par le BIOS dans la table des vecteurs d'interruption de façon à pointer sur la routine de copie d'écran du BIOS qui figure en ROM . Les programmes en assembleur ou en langage évolué peuvent également recourir à cette interruption, en l'appelant par INT, pour envoyer au cours de leur exécution une copie d'écran sur l'imprimante.


Interruptions 6h, 7h

Ces interruptions sont pour l'instant réservées à un usage ultérieur par IBM. Elles peuvent donc être utilisées pour des besoins de programmation individuels.


Interruption 8h

Le timer du PC (un circuit 8253) reçoit 1 193 180 signaux par seconde du coeur du système constitué par un oscillateur à quartz. Au bout de 65536 de ces signaux, soit environ 18,2 fois par seconde, il génère un appel  à l'interruption 8 qui est transmis au processeur par l'intermédiaire du 8259. Comme la fréquence d'appel de cette interruption ne dépend pas de la fréquence d'horloge (variable) du système, cette interruption convient parfaitement à la mesure du temps puisqu'on sait qu'une seconde s'écoule tous les 18,2 appels. C'est dans cet esprit que l'interruption est exploitée dans un PC. Le BIOS dirige le vecteur de l'interruption sur une routine qui est donc appelée 18,2 fois par seconde. Cette routine est chargée de faire avancer un compteur de temps et d'arrêter le moteur du lecteur de disquette si aucun accès à la disquette ne s'est produit depuis un certain délai. Une fois ces tâches exécutées, la routine appelle l'interruption 1Ch qui peut être détournée par un utilisateur qui aurait besoin d'une exploitation dépendant d'un signal périodique.


Interruption 9h

Le clavier comporte un processeur Intel portant l'appellation 8048 (ou 8042 sur l'AT). Ce processeur surveille le clavier et enregistre toute pression ou tout relâchement d'une touche, ou encore tout enfoncement prolongé . Il doit renseigner le processeur central pour que le système puisse réagir de façon appropriée en lisant le code de la touche frappée. Il envoie donc un signal au 8259 qui, lorsqu'aucune interruption de priorité supérieure n'est à prendre en compte, demande au processeur central de déclencher l'interruption 9. Cette interruption appelle alors une routine du BIOS qui lit le caractère frappé au clavier et le place le buffer du clavier.


Interruptions 10h à 12h

Ces interruptions dépendent des périphériques rattachés.


Interruption 13h

Lorsqu'un disque dur est connecté au système, il fait appel à l'interruption 13h. Ce sera par exemple le cas lorsqu'une opération de lecture ou d'écriture sera terminée et que le BIOS doit en être averti.


Interruption 14h

Cette interruption est appelée par le contrôleur des lecteurs de disquette en coordination avec le 8259 lorsque l'attention du processeur doit être attirée. Derrière cette interruption se dissimule une routine du BIOS qui communique avec le contrôleur de disquette au niveau le plus bas. Lorsqu'elle est appelée, le contrôleur lui transmet des informations d'état destinées à informer le BIOS qu'une opération de lecture ou d'enregistrement est terminée.


Interruption 15h

Cette interruption est déclenchée par une imprimante connectée en parallèle en coordination avec le 8259 lorsque cette imprimante désire attirer l'attention du processeur.

Grâce à son deuxième contrôleur d'interruption, l'AT dispose de plus d'interruptions que ses prédecesseurs. Les huit interruptions numérotées 70h à 77h deviennent ainsi des interruptions matérielles parfaitement accessibles, alors qu'elles étaient antérieurement mises à la disposition des programmes d'application, une liberté désormais révoquée.

Selon le même principe que pour les huit périphériques reliés au premier contrôleur d'interruption, le périphérique correspondant au bit 0 du registre de masque d'interruption du deuxième contrôleur déclenche l'interruption 70h. Le périphérique associé au bit 1 déclenche l'interruption 71h, et ainsi de suite.

En réalité, seules les interruptions 70h et 75h sont appelées par le contrôleur car seuls les bits 0 et 5 du registre de masque d'interruption sont reliés à des périphériques. Mais les vecteurs des interruptions 71h à 74h, ainsi que les numéros 75h et 77h ne doivent pas être oubliés pour autant.


Interruption 70h

Une horloge en temps réel a beaucoup de raisons d'interrompre un programme en cours d'exécution. Il peut s'agir d'une alarme au bout d'un temps déterminé, de la mise à jour de la date et de l'heure, ou simplement d'un appel cyclique à l'initiative d'un programme. Cette interruption est normalement desservie par une routine du BIOS qui détermine d'abord la cause de l'appel puis réagit en conséquence.


Interruption 75h

L'interruption 75h permet au coprocesseur arithmétique (80287) de requérir l'attention du processeur central, par exemple en raison d'une erreur.


Interruption 76h

Cette interruption est déclenchée par le contrôleur de disque dur de l'AT lorsqu'il a terminé un accès au disque.


Systèmes numériques

Lorsque vous écrivez par exemple le nombre décimal 1988, ce nombre pourrait aussi être formulé de la façon suivante : 1*1000+9*100+8*10+8*1. Cela vous montre déjà que si nous numérotons les chiffres de droite à gauche, le premier chiffre (celui des unités) est associé à un facteur 1, le second (les dizaines) à un facteur 10, le troisième (les centaines) à un facteur 100 et le dernier enfin (les milliers) à un facteur 1000. Vous voyez donc que le prochain chiffre sur la gauche est toujours associé à un facteur 10 fois plus élevé.

Tous les systèmes numériques ont ceci en commun que le premier chiffre (en partant de la droite) est toujours associé à un facteur de 1. La progression de ce facteur de chiffre en chiffre est par contre différente pour chaque système numérique, dont elle est la caractéristique. Cette progression est un facteur égal au nombre de chiffres utilisés par le système. Pour le système décimal, ce facteur de progression est de 10 puisqu'il y a dix chiffres (0 à 9).

Essayons maintenant de préciser ce principe en décrivant les systèmes numériques binaire et hexadécimal que nous avons déjà évoqués.

Le système binaire est le système de base de votre ordinateur car, comme vous le savez, l'électronique d'un ordinateur ne distingue au fond que deux états, et donc deux nombres, 0 et 1. Comme nous ne disposons plus dans ce système des chiffres 0 à 9 mais seulement des deux chiffres 0 et 1, le facteur associé à chaque chiffre ne sera plus décuplé mais seulement doublé en progressant vers la gauche.

Concrètement, le premier chiffre sera donc associé à un facteur 1, le second à un facteur 2, le troisième à un facteur 4 et le quatrième à un facteur 8. Après 8, viennent 16, 32, 64, 128 et ainsi de suite.

Le nombre binaire 11001 correspondra donc en système décimal à 1*16+1*8+0*4+0*2+1*1, soit 25.

Contrairement au système binaire, le système hexadécimal fonctionne avec plus de chiffres que le système décimal. Dans ce système, on ne compte pas de 0 à 9, encore moins de 0 à 1, mais de 0 à F. La base de ce système est en effet 16 et il nous faut donc 16 chiffres. Comme les chiffres arabes ne vont que jusqu'à 9, on a recours aux lettres A à F pour représenter les valeurs 10 à 15.

A représente donc 10, B 11, C 12, D 13, E 14 et enfin F 15.

Comme nous l'avons indiqué, le facteur de progression d'un chiffre à l'autre n'est ici ni 2 ni 10 mais 16.

Le premier chiffre est toujours associé à un facteur 1, mais le second est associé au facteur 16, le troisième au facteur 256 et le quatrième au facteur 4096.

Prenons un exemple pour illustrer ce principe : le nombre hexadécimal FB3 correspond en décimal à 15*256+11*16+3*1, soit 4019.

Le système hexadécimal est toutefois en relation étroite avec le système binaire puisque chaque chiffre d'un nombre hexadécimal peut être exprimé par un groupe de 4 chiffres binaires. C'est d'ailleurs la raison qui explique le rôle si important du système hexadécimal pour la programmation en assembleur. Il constitue en effet une sorte de pont avec le système binaire, système de base de l'ordinateur mais illisible pour les humains. C'est ainsi, par exemple, qu'un octet (une valeur codée sur 8 bits) pourra être représentée très simplement à l'aide de deux chiffres hexadécimaux.

Pour éviter tout risque de confusion entre les divers systèmes numériques, les nombres binaires sont désignés par b et les nombres hexadécimaux par h.

Si vous n'avez pas complètement assimilé certaines des explications de cette section, les tableaux suivants vous aideront.

Position	5	4	3	2	1
Décimal	10000	1000	100	10	1
Binaire	16	8	4	2	1
Hexadécimal	65536	4096	256	16	1
Table d'équivalence

DECIMAL	BINAIRE	HEXADECIMAL
0	0	0
1	1	1
2	10	2
3	11	3
4	100	4
5	101	5
6	110	6
7	111	7
8	1000	8
9	1001	9
10	1010	A
11	1011	B
12	1100	C
128	10000000	80
129	10000001	81
256	100000000	100
1024	10000000000	400
4096	1000000000000	1000
65535	1111111111111111	FFFF
Exemple de valeurs


Liste de toutes les interruptions

Interruption 0h	Interruption 1h	Interruption 2h

Interruption 3h	Interruption 4h	Interruption 5h

Interruptions 6h, 7h	Interruption 8h	Interruption 9h

Interruption 10h	Interruption 11h	Interruption 12h

Interruption 13h	Interruption 14h	Interruption 15h

Interruption 16h	Interruption 17h	Interruption 18h

Interruption 19h	Interruption 1Ah	Interruption 21h

Interruption 22h	Interruption 23h	Interruption 24h

Interruption 25h	Interruption 26h	Interruption 27h

Interruption 2Fh	Interruption 33h	Interruption 67h

Interruption 70h	Interruption 75h	Interruption 76h


Interruption 0h

Le 8088 dispose des instructions machine DIV et IDIV qui effectuent une division entière. Les règles arithmétiques usuelles interdisent toute division par zéro. C'est pourquoi le processeur déclenche dans ce cas une interruption 0. Lors du lancement du système, le vecteur associé est dirigé par DOS sur une routine qui affiche un message du genre "Division par zéro", puis revient par IRET au programme interrompu.


Interruption 1h

Cette interruption est appelée par le processeur à la suite de chaque instruction lorsque le bit TRAP du registre des indicateurs est à 1. Les débogueurs exploitent ce mode pour pouvoir suivre l'exécution d'un programme. Ils fournissent alors un gestionnaire pour cette interruption.

Pour éviter qu'elle ne se déclenche à l'intérieur même de la routine d'interruption (ce qui conduirait à des appels récursifs en nombre infini et au débordement de la pile), le processeur annule le bit TRAP au début du gestionnaire. Auparavant comme c'est le cas pour toutes les interruptions, le registre des indicateurs et notamment le bit TRAP aura été sauvegardé sur la pile.

Dès que la routine d'interruption se termine par une instruction IRET, le processeur rétablit automatiquement l'ancien contenu du bit TRAP en récupérant sur la pile le registre des indicateurs. De ce fait, l'interruption 1 sera à nouveau appelée dès que la prochaine instruction du programme à surveiller aura été exécutée.

Si le programmeur a recueilli toutes les informations nécessaires sur le programme, le mode TRAP (autrement dit le bit TRAP) peut être désactivé. Mais comment faire, alors que le programme suivi ne sait pas qu'il est surveillé et ne peut donc pas contenir d'instruction propre à mettre à zéro le bit TRAP du registre des indicateurs?

La solution de ce problème se trouve encore dans la routine de l'interruption 1. C'est à elle d'annuler le bit TRAP mais ce n'est pas si simple car ce bit été systématiquement mis à 0 à l'entrée dans le programme et il sera rempli à la sortie, lors de la récupération du registre des indicateurs, par l'ancienne valeur 1. Il faut donc avant de sortir de la routine d'interruption reprendre le registre des indicateurs sur la pile, y annuler le bit TRAP et remettre ensuite sur la pile, à son emplacement d'origine, le registre des indicateurs. Au moment de l'instruction IRET, le processeur récupère le registre des indicateurs comme si de rien n'était, mais le bit TRAP étant cette fois ci à 0, le programme continue son exécution dans les conditions normales.

Ces possibilités ne sont guère exploitées dans les applications ordinaires. C'est pourquoi le BIOS fait pointer le vecteur de l'interruption 1 sur un simple IRET, de sorte qu'il ne se passera rien de spécial si un programme met par hasard le bit TRAP à 1. Le seul effet sera un ralentissement de l'exécution puisqu'après chaque instruction l'interruption 1 sera systématiquement invoquée. L'interruption 1 par contre est très utile dans les programmes de test du genre DEBUG car elle permet de suivre à la trace des programmes en inspectant une à une les instructions et leurs conséquences.


Interruption 2h

Cette interruption est désignée par le signe NMI qui veut dire "Non Maskable Interrupt". En conséquence, son exécution ne peut pas être inhibée par l'instruction CLI qui est en principe chargée de couper court à toute interruption. Dans un PC, l'interruption NMI est chargée d'attirer l'attention sur les erreurs en mémoire vive qui laissent présager un défaut de circuit. Il y urgence car une erreur de ce type peut altérer gravement le fonctionnement du système, et même l'endommager. C'est pourquoi le système déclenche l'interruption NMI même si toutes les autres sont inhibées

Au moment de l'initialisation du système, le vecteur d'interruption correspondant reçoit la référence d'une routine du BIOS charger d'afficher un message d'erreur et d'arrêter le système.


Interruption 3h

Cette interruption est aussi exploitée par les débogueurs. Par rapport à toutes les autres interruptions, elle présente la particularité de pouvoir être appelée à l'aide d'une instruction spéciale qui n'appartient qu'à elle seule. Les autres interruptions sont en effet appelées par une instruction machine sur 2 octets (premier octet = CDh, second octet = numéro de l'interruption) alors que l'interruption 3 se déclenche par une instruction particulière sur un seul octet seulement (le code CCh). Cette interruption convient ainsi parfaitement pour tester un programme, lorsqu'on désire l'exécuter jusqu'à un endroit déterminé où il devra s'interrompre et révéler le contenu courant des registres. Dans un débogueur on obtient ce résultat en insérant un appel à l'interruption 3 à l'endroit du programme où celui-ci devra être interrompu. Derrière cette interruption se cache en général un gestionnaire du débogueur qui affiche les contenus des registres et tout ce qu'il faut.

Vous pourriez objecter qu'à la place de l'interruption 3 toute autre interruption ferait l'affaire, pourvu que dans le gestionnaire associé on installe une routine d'affichage des registres. Cette remarque est certes judicieuse mais il ne faut pas oublier que l'interruption 3 présente l'avantage de tenir sur un seul octet. Pour comprendre la portée de cet avantage prenons un programme fictif.

Ce programme contient une instruction RET. Cette instruction prend un octet et constitue la fin d'un sous-programme. Un autre sous-programme se trouve à la suite qui commence par une instruction machine quelconque.  L'utilisateur souhaite examiner les registres à la fin du premier sous-programme, il disposera donc un point d'arrêt (c'est-à-dire un appel à l'interruption 3) à la place de l'instruction RET. Il est tout à fait avantageux que cet appel ne prenne qu'un seul octet. S'il occupait davantage de place, par exemple 2 ou 3 octets, il n'écraserait pas seulement l'instruction RET mais également tout ou partie de la première instruction du sous-programme qui suit. Si au cours de l'exécution le second sous-programme est invoqué, il se produirait une erreur capable de planter le système. Mais en limitant le point d'arrêt à un seul octet, cet incident ne se produit pas car le point d'arrêt ne peut pas écraser plus d'une seule instruction.

Jusqu'à son exploitation par un programme de mise au point, cette interruption n'a généralement pas d'application. Le système DOS l'aiguille sur une routine simplement constituée de l'instruction IRET Interrupt Return) qui rend la main au programme interrompu sans rien faire.


Interruption 4h

Cette interruption peut être appelée par une certaine instruction liée à une condition. Il s'agit de l'instruction machine INTO (INTerruption on Overflow)  qui ne déclenche l'interruption 4 que si le bit de débordement (Overflow) du registre des indicateurs est à 1 au moment de son exécution. Ce sera notamment le cas à la suite d'opérations arithmétiques (par exemple après une multiplication avec l'instruction MUL) si le résultat de l'opération ne peut plus être représenté avec un nombre déterminé de bits. Cette interruption peut naturellement également être appelée à l'aide de l'instruction INT normale mais dans ce cas l'appel ne dépendra pas de l'état d'armement du bit Overflow. En fait cette interruption est très peu utilisée et DOS la dirige directement sur une instruction de retour IRET.


Interruption 5h

Bien que classée dans le groupe des interruptions matérielles, l'interruption 5 est exploitée par le BIOS. Elle est déclenchée par le BIOS chaque fois que la touche "PrtScr" (sur un clavier américain) ou "Impr" (sur un clavier français) est actionnée. Sa tâche consiste à envoyer sur l'imprimante le contenu de l'écran, ce qu'on appelle une copie d'écran ou hard copy. C'est pourquoi le vecteur de cette interruption est initialisé par le BIOS dans la table des vecteurs d'interruption de façon à pointer sur la routine de copie d'écran du BIOS qui figure en ROM . Les programmes en assembleur ou en langage évolué peuvent également recourir à cette interruption, en l'appelant par INT, pour envoyer au cours de leur exécution une copie d'écran sur l'imprimante.


Interruptions 6h, 7h

Ces interruptions sont pour l'instant réservées à un usage ultérieur par IBM. Elles peuvent donc être utilisées pour des besoins de programmation individuels.


Interruption 8h

Le timer du PC (un circuit 8253) reçoit 1 193 180 signaux par seconde du coeur du système constitué par un oscillateur à quartz. Au bout de 65536 de ces signaux, soit environ 18,2 fois par seconde, il génère un appel  à l'interruption 8 qui est transmis au processeur par l'intermédiaire du 8259. Comme la fréquence d'appel de cette interruption ne dépend pas de la fréquence d'horloge (variable) du système, cette interruption convient parfaitement à la mesure du temps puisqu'on sait qu'une seconde s'écoule tous les 18,2 appels. C'est dans cet esprit que l'interruption est exploitée dans un PC. Le BIOS dirige le vecteur de l'interruption sur une routine qui est donc appelée 18,2 fois par seconde. Cette routine est chargée de faire avancer un compteur de temps et d'arrêter le moteur du lecteur de disquette si aucun accès à la disquette ne s'est produit depuis un certain délai. Une fois ces tâches exécutées, la routine appelle l'interruption 1Ch qui peut être détournée par un utilisateur qui aurait besoin d'une exploitation dépendant d'un signal périodique.


Interruption 9h

Le clavier comporte un processeur Intel portant l'appellation 8048 (ou 8042 sur l'AT). Ce processeur surveille le clavier et enregistre toute pression ou tout relâchement d'une touche, ou encore tout enfoncement prolongé . Il doit renseigner le processeur central pour que le système puisse réagir de façon appropriée en lisant le code de la touche frappée. Il envoie donc un signal au 8259 qui, lorsqu'aucune interruption de priorité supérieure n'est à prendre en compte, demande au processeur central de déclencher l'interruption 9. Cette interruption appelle alors une routine du BIOS qui lit le caractère frappé au clavier et le place le buffer du clavier.


Interruption 10h

Fonction 00h	Définir le mode vidéo

Fonction 01h	Définir l'apparence du curseur

Fonction 02h	Placer le curseur

Fonction 03h	Lire la position du curseur

Fonction 04h	Lire la position du crayon optique

Fonction 05h	Sélectionner la page actuelle de l'écran

Fonction 06h	Faire défiler des lignes de texte vers le haut

Fonction 07h	Faire défiler des lignes de texte vers le bas

Fonction 08h 	Lire un caractère/une couleur

Fonction 09h	Ecrire un caractère/une couleur

Fonction 0Ah	Ecrire un caractère

Fonction 0Bh, Sous-Fct 0	Sélectionner des couleurs de cadre et de fond

Fonction 0Bh, Sous-Fct 1	Sélectionner la palette de couleurs

Fonction 0Ch	Ecrire un point graphique

Fonction 0Dh	Lire un point graphique

Fonction 0Eh	Ecrire un caractère

Fonction 0Fh	Lire le mode vidéo

Fonction 10h, Sous-Fct 00h	Définir le registre de palette EGA/VGA

Fonction 10h, Sous-Fct 01h	Définir la couleur du cadre de l'écran EGA/VGA

Fonction 10h, Sous-Fct 02h	Définir tous les registres de palette EGA/VGA

Fonction 10h, Sous-Fct 03h	Définir l'attribut de clignotement EGA/VGA

Fonction 10h, Sous-Fct 07h	Lire le registre de palette

Fonction 10h, Sous-Fct 08h	Lire le contenu du registre Overscan

Fonction 10h, Sous-Fct 09h	Lire le contenu de tous les registres de palette et Overscan

Fonction 10h, Sous-Fct 10h	Charger un registre de couleur DAC

Fonction 10h, Sous-Fct 12h	Charger plusieurs registres de couleur DAC

Fonction 10h, Sous-Fct 13h	Définir la méthode de sélection des couleurs ou de registres DAC

Fonction 10h, Sous-Fct 15h	Lire un des registres de couleur DAC

Fonction 10h, Sous-Fct 17h	Définir le contenu de plusieurs registres de couleur DAC

Fonction 10h, Sous-Fct 18h	Définir le registre de masque DAC

Fonction 10h, Sous-Fct 19h	Lire le contenu du registre de masque DAC

Fonction 10h, Sous-Fct 1Ah	Lire la méthode de sélection de couleur et le contenu du registre

Fonction 10h, Sous-Fct 1Bh	Convertir le contenu des registres de couleur DAC en gris

Fonction 11h, Sous-Fct 00h	Charger le jeu de caractères défini par l'utilisateur EGA/VGA

Fonction 11h, Sous-Fct 01h	Charger le jeu de caractères 8*14 EGA/VGA

Fonction 11h, Sous-Fct 02h	Charger le jeu de caractères 8*8 EGA/VGA

Fonction 11h, Sous-Fct 03h	Sélectionner un jeu de caractères EGA/VGA

Fonction 11h, Sous-Fct 04h	Charger le jeu de caractères 8*16

Fonction 11h, Sous-Fct 10h	Charger et activer un jeu de caractères défini par l'utilisateur

Fonction 11h, Sous-Fct 11h	Charger et activer le jeu de caractères 8*14 EGA/VGA

Fonction 11h, Sous-Fct 12h	Charger le jeu de caractères 8*8 EGA/VGA

Fonction 11h, Sous-Fct 14h	Charger jeu de caractères 8*16

Fonction 11h, Sous-Fct 30h	Lire des informations sur le générateur de caractères EGA/VGA

Fonction 12h, Sous-Fct 10h	Lire la configuration EGA/VGA EGA/VGA

Fonction 12h, Sous-Fct 20h	Définir une autre routine de copie d'écran EGA

Fonction 12h, Sous-Fct 30h	Définir le nombre de lignes de balayage

Fonction 12h, Sous-Fct 31h	Activer ou désactiver le chargement des registres de palette

Fonction 12h, Sous-Fct 32h	Autoriser/verrouiller l'accès de l'unité centrale à la RAM vidéo

Fonction 12h, Sous-Fct 33h	Activer/désactiver la conversion en gris des registres de couleur

Fonction 12h, Sous-Fct 34h	Activer/désactiver l'émulation du curseur

Fonction 12h, Sous-Fct 36h	Interdire la construction de l'écran

Fonction 13h	Afficher une chaîne de caractères

Fonction 14h	Non documentée

Fonction 15h	Non documentée

Fonction 16h	Non documentée

Fonction 17h	Non documentée

Fonction 18h	Non documentée

Fonction 19h	Non documentée

Fonction 1Ah, Sous-Fct 00h	Lire le type d'adaptateur vidéo primaire et secondaire

Fonction 1Ah, Sous-Fct 01h	Définir les cartes vidéo primaire et secondaire

Fonction 1Bh	Lire les informations d'état du mode vidéo et le BIOS VGA

Fonction 1Ch, Sous-Fct 00h	Demander la taille de la zone de sauvegarde

Fonction 1Ch, Sous-Fct 01h	Sauvegarder l'état vidéo

Fonction 1Ch, Sous-Fct 02h	Restaurer l'état vidéo

Fonction 4Fh, Sous-Fct 00h	Lire les spécificités de la carte Super VGA

Fonction 4Fh, Sous-Fct 01h	Lire les données-clés d'un mode VESA

Fonction 4Fh, Sous-Fct 02h	Activer le mode VESA

Fonction 4Fh, Sous-Fct 03h	Lire le mode en cours

Fonction 4Fh, Sous-Fct 04h/00h	Lire la taille du buffer de stockage

Fonction 4Fh, Sous-Fct 04h/01h	Sauver l'état vidéo de la carte Super VGA

Fonction 4Fh, Sous-Fct 04h/02h	Restaurer l'état vidéo de la carte Super VGA

Fonction 4Fh, Sous-Fct 05h/00h	Placer la fenêtre d'accès sur la RAM vidéo

Fonction 4Fh, Sous-Fct 05h/01h	Lire la fenêtre d'accès sur la RAM vidéo


Int 10h, Fct 00h    Ecran : Définir le mode vidéo    BIOS

Cette fonction permet de sélectionner et initialiser un mode vidéo. L'écran est alors entièrement effacé. De ce fait, cette fonction peut aussi être appelée pour vider l'écran d'une façon très simple même lorsqu'on ne souhaite pas changer le mode vidéo.

Entrée :

AH 	= 00h

AL	Mode	Résolution	Résolution	Couleurs	Système

T/G	texte	graphique

00h	T	40x25  8x8	Gris	CGA,PCjr

T	40x25  8x14	Gris	EGA

T	40x25  8x16	16	MCGA

T	40x25  9x16	16	VGA

01h	T	40x25  8x8	16	CGA,PCjr

T	40x25  8x14	16	EGA

T	40x25  8x16	16	MCGA

T	40x25  9x16	16	VGA

02h	T	80x25  8x8	16 gris	CGA,PCjr

T	80x25  8x14	16 gris	EGA

T	80x25  8x16	16	MCGA

T	80x25  9x16	16	VGA

03h	T	80x25  8x8	16	CGA,PCjr

T	80x25  8x14	16	EGA

T	80x25  8x16	16	MCGA

T	80x25  9x16	16	VGA

04h	G	40x25  8x8	320x200	4	CGA,PCjr,EGA,MCGA,VGA

05h	G	40x25  8x8	320x200	4 gris	CGA,PCjr,EGA

G	40x25  8x8	320x200	4	MCGA,VGA

06h	G	80x25  8x8	640x200	2	CGA,PCjr,EGA,MCGA,VGA

07h	T	80x25  9x14	mono	MDA,Hercules,EGA

T	80x25  9x16	mono	VGA

08h	G	20x25  8x8	160x200	16	PCjr

G	90x43  8x8	720x352	mono	Hercules + MSHERC.COM

09h	G	40x25  8x8	320x200	16	PCjr

0Ah	G	80x25  8x8	640x200	4	PCjr

0Bh	réservé pour le BIOS EGA

0Ch	réservé pour le BIOS EGA

0Dh	G	40x25  8x8	320x200	16	EGA,VGA

0Eh	G	80x25  8x8	640x200	16	EGA,VGA

0Fh	G	80x25  8x14	640x350	mono	EGA,VGA

10h	G	80x25  8x14	640x350	4	EGA 64 Ko

G	640x350	16	EGA 256 Ko,VGA

11h	G	80x30  8x16	640x480	mono	VGA,MCGA

12h	G	80x30  8x16	640x480 	16/256k	VGA

13h	G	40x25  8x8	320x200 	256/256k	VGA,MCGA

18h	T	132x44  8x8	mono	Tseng Labs EVA

T	132x44  8x8	16/256	Tseng ET4000

19h	T	132x25  8x14	mono	Tseng Labs EVA

T	132x25  8x14	16/256	Tseng ET4000

1Ah	T	132x28  8x13	mono	Tseng Labs EVA

T	132x28  8x13	16/256	Tseng ET4000

22h	T	132x44  8x8	Tseng Labs EVA

T	132x44  8x8	16/256	Tseng ET4000

T	132x44	16	Orchid Prodesigner VGA

23h	T	132x25  6x14	Tseng Labs EVA

T	132x25  8x14	16/256	Tseng ET4000

T	132x28	16	Orchid Prodesigner VGA

24h	T	132x28  6x13	Tseng Labs EVA

T	132x28  8x13	16/256	Tseng ET4000

T	132x25	16	Orchid Prodesigner VGA

25h	G	80x60  8x8	640x480	Tseng Labs EVA

G	80x60  8x8	640x480	16/256	Tseng ET4000

G	80x60  8x8	640x480	16	Orchid Prodesigner VGA

26h	T	80x60  8x8	Tseng Labs EVA

T	80x60  8x8	16/256	Tseng ET4000

T	80x60	16	Orchid ProDesigner VGA

G	100x37  8x16	800x600	16	Orchid

G	100x37  8x16	800x600	16/256	Tseng ET4000

T	100x40  8x16	16	Orchid Prodesigner VGA

T	100x40  8x15	16/256	Tseng ET4000

2Dh	G	80x25  8x14	640x350	256/256k	Tseng ET4000

2Eh	G	80x30  8x16	640x480 	256/256k	Orchid

G	80x30  8x16	640x480	256/256k 	Tseng ET4000

2Fh	G	80x25  8x16	640x400	256/256k	Tseng ET4000

30h	G	100x37  8x16	800x600 	256/256k	Orchid

G	100x37  8x16	800x600 	256/256k	Tseng ET4000

37h	G	128x48  8x16 	1024x768	16	Orchid

38h	G	128x48  8x16 	1024x768 	256/256k 	Tseng ET4000

6Ah	G	800x600	16	VESA standard

Sortie :

aucune sortie

Remarques :

·	Les couleurs pour les modes 4, 5 et 6 peuvent être fixées à l'aide de la fonction 11.

·	Le contenu des registres BX, CX, DX et des registres SS, CS et DS n'est pas modifié. Le contenu de tous les autres registres, et notamment celui des registres SI et DI, peut avoir été modifié


Int 10h, Fct 01h    Ecran : Définition de l'apparence du curseur    BIOS

Les lignes de départ et de fin du curseur de l'écran sont fixées en  appelant cette fonction. Cette fonction ne dépend pas de la page écran actuellement affichée sur l'écran.

Entrée :

AH 	= 01h

CH 	= Ligne de départ du curseur

CL 	= Ligne de fin du curseur

Sortie :

aucune sortie

Remarques :

·	Les valeurs autorisées pour les lignes de départ et de fin dépendent de la carte vidéo installée. Les valeurs suivantes sont autorisées :

Cartes écran monochromes :	0 - 13

Cartes écran couleur :	0 - 7

·	Le BIOS fixe au départ les valeurs suivantes :

Cartes écran monochromes :	lignes 11 et 12

Cartes écran couleur :	lignes 6 et 7

·	Il ne faut pas définir des valeurs non autorisées à l'aide de cette fonction car cela peut avoir des conséquences imprévisibles (en général, une disparition du curseur).

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Int 10h, Fct 02h    Ecran : Positionnement du curseur    BIOS

Cette fonction permet de déplacer le curseur qui fixe la position de la sortie de caractères sur l'écran, à l'aide d'une des fonctions de sortie de caractères du BIOS.

Entrée :

AH 	= 02h

BH 	= Numéro de la page écran

DH	= Ligne de l'écran

DL 	= Colonne de l'écran

Sortie :

aucune sortie

Remarques :

·	Le curseur clignotant de l'écran n'est déplacé par cette fonction qu'à condition que la page écran appelée soit la page actuelle de l'écran.

·	La ligne de l'écran est une valeur entre 0 et 24.

·	La colonne de l'écran est une valeur comprise entre 0 et 79 (en 80 colonnes) ou entre 0 et 39 (en 40 colonnes), suivant le mode vidéo fixé.

·	Une méthode pour faire disparaître le curseur clignotant consiste à le placer dans une position hors du champ de l'écran (par exemple colonne 0, ligne 25).

·	Le numéro de la page écran dépend aussi du nombre de pages écran disponibles sur la carte vidéo utilisée.

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Int 10h, Fct 03h    Ecran : Lecture de la position du curseur    BIOS

Lecture de la position du curseur de texte dans une page écran et lecture des lignes de départ et de fin du curseur clignotant de l'écran.

Entrée :

AH	 = 03h

BH 	= Numéro de la page écran

Sortie :

DH 	= Ligne de l'écran dans laquelle figure le curseur

DL 	= Colonne de l'écran dans laquelle figure le curseur

CH 	= Ligne de départ du curseur clignotant de l'écran

CL 	= Ligne de fin du curseur clignotant de l'écran

Remarques :

·	Le numéro de la page écran dépend aussi du nombre de pages écran disponibles sur la carte vidéo utilisée.

·	Les ligne et colonne de l'écran se réfèrent au système de coordonnées de texte.

·	Le contenu du registre BX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Int 10h, Fct 04h    Ecran : Lecture de la position du crayon optique    BIOS

Si possible, la position du crayon optique sur l'écran est lue.

Entrée :

AH 	= 04h

Sortie :

AH 	= 0 : position du crayon optique ne peut être testée pour le moment.

AH 	= 1 : position du crayon optique a pu être obtenue, auquel cas :

DH = Ligne écran du crayon optique (mode texte)

DL = Colonne écran du crayon optique (mode texte)

CH = Ligne écran du crayon optique (mode graphique)

BX = Colonne écran du crayon optique (mode graphique)

Remarques :

·	L'appel de cette fonction doit être répété jusqu'à ce qu'un 1 soit renvoyé dans le registre AH car ce n'est que dans ce cas que les coordonnées peuvent être lues dans les autres registres.

·	Les coordonnées indiquées se réfèrent naturellement au mode vidéo actuel et à sa résolution horizontale et verticale.

·	Les coordonnées du crayon optique ne peuvent pas être déterminées très précisément, surtout en mode graphique. La coordonnée Y (ligne) est toujours une valeur paire de sorte qu'il n'est pas possible de distinguer si le crayon optique se trouve sur la ligne 8 ou 9. En mode graphique 320*200 points, la coordonnée X (colonne) est toujours un multiple entier de 4 et en mode graphique 640*200 points toujours un multiple entier de 8.

·	Le contenu du registre CL et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Int 10h, Fct 05h    Ecran : Sélection de la page actuelle de l'écran    BIOS

Sélection de la page écran actuelle, c'est-à-dire de celle qui doit être affichée sur l'écran (mode texte uniquement).

Entrée :

AH 	=  05h

AL 	= Numéro de la page écran

Sortie :

aucune sortie

Remarques :

·	Le numéro de la page écran dépend aussi du nombre de pages écran disponibles sur la carte vidéo.

·	Lorsqu'une nouvelle page écran est activée le curseur clignotant de l'écran est toujours fixé sur la position du curseur de texte sur cette page.

·	Le fait de passer d'une page écran à l'autre n'affecte pas le contenu de ces pages.

·	Il n'est pas nécessaire qu'une page écran soit activée pour pouvoir y écrire.

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Int 10h, Fct 06h    Ecran : Faire défiler des lignes de texte vers le haut (scrolling)    BIOS

Faire défiler d'une ou plusieurs lignes vers le haut ou effacer une partie de la page écran actuelle

Entrée :

AH 	=  06h

AL 	= Nombre de lignes dont la fenêtre doit être décalée vers le haut (0 signifie effacer la fenêtre)

CH 	= Ligne écran du coin supérieur gauche de la fenêtre

CL 	= Colonne écran du coin supérieur gauche de la fenêtre

DH 	= Ligne écran du coin inférieur droit de la fenêtre

DL 	= Colonne écran du coin inférieur droit de la fenêtre

BH 	= Couleur (attribut) pour les lignes vides

Sortie :

aucune sortie

Remarques :

·	Seule la page écran actuelle peut être modifiée par cette fonction

·	Le fait d'effacer la zone de l'écran (nombre de lignes = 0) revient à la remplir d'espaces (code ASCII 32).

·	Le contenu des lignes expulsées de l'écran lors du défilement est définitivement perdu et ne peut être récupéré.

·	Pour vider l'écran tout entier, il est préférable d'employer la fonction 0 de cette interruption.

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Int 10h, Fct 07h    Ecran : Faire défiler des lignes de texte vers le bas (scrolling)    BIOS

Faire défiler d'une ou plusieurs lignes vers le haut ou effacer une partie de la page écran actuelle

Entrée :

AH	= 07h

AL 	= Nombre de lignes dont la fenêtre doit être décalée vers le bas (0 signifie effacer la fenêtre)

CH 	= Ligne écran du coin supérieur gauche de la fenêtre

CL 	= Colonne écran du coin supérieur gauche de la fenêtre

DH 	= Ligne écran du coin inférieur droit de la fenêtre

DL 	= Colonne écran du coin inférieur droit de la fenêtre

BH 	= Couleur (attribut) pour les lignes vides

Sortie :

aucune sortie

Remarques :

·	Seule la page écran actuelle peut être modifiée par cette fonction

·	Le fait d'effacer la zone de l'écran (nombre de lignes = 0) revient à la remplir d'espaces (code ASCII 32).

·	Le contenu des lignes expulsées de l'écran lors du défilement est définitivement perdu et ne peut être récupéré.

·	Pour vider l'écran tout entier, il est préférable d'employer la fonction 0 de cette interruption.

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Int 10h, Fct 08h     Ecran : Lecture d'un caractère/d'une couleur    BIOS

Lecture du code ASCII et de la couleur (attribut) du caractère figurant dans la position actuelle du curseur.

Entrée :

AH 	= 08h

BH 	= Numéro de la page écran

Sortie :

AL 	= Code ASCII du caractère

AH 	= Couleur (attribut)

Remarques :

·	Le numéro de la page écran dépend aussi du nombre de pages écran disponibles sur la carte vidéo

·	Cette fonction peut également être appelée en mode graphique. Dans ce cas, le modèle de bits du caractère sur l'écran sera comparé avec les modèles de bits des caractères définis dans la ROM de caractères de la carte vidéo et avec les caractères qui ont été stockés dans une table en RAM dont l'adresse figure à l'interruption 1Fh. Si le caractère ne peut être identifié, le registre AL contiendra la valeur 0 après appel de la fonction.

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Int 10h, Fct 09h    Ecran : Ecriture d'un caractère/d'une couleur    BIOS

Ecrire un caractère dans une couleur déterminée dans la position actuelle du curseur (dans la page écran spécifiée).

Entrée :

AH 	=  09h

BH 	= Numéro de la page écran

CX 	= Nombre d'écritures successives du caractère

AL 	= Code ASCII du caractère

BL 	= Attribut

Sortie :

aucune sortie

Remarques :

·	Si le caractère indiqué doit être sorti plusieurs fois (auquel cas la valeur du registre CX est supérieure à 1), il faut, en mode graphique, que tous les caractères rentrent dans la page écran actuelle.

·	Les codes de commande "bell", "carriage return", etc..., ne sont pas identifiés comme tels mais sortis comme des codes ASCII normaux.

·	Cette fonction permet également de sortir des caractères en mode graphique. Dans ce cas, les modèles des caractères portant les codes 0 à 127 sont tirés dans une table en ROM et les modèles des caractères portant les codes 128 à 255 sont tirés d'une table en RAM qui doit avoir été installée préalablement avec l'instruction GRAFTABL du DOS.

·	En mode de texte, le contenu du registre BL définit l'octet d'attribut du caractère. En mode graphique, il détermine la couleur du caractère. En mode graphique 640*200 points, les valeurs 0 et 1, en mode graphique 320*200 points, les valeurs 0 à 3 sont possibles pour définir les différentes couleurs de la palette de couleurs sélectionnée.

·	Si le mode graphique est activé lors de la sortie de caractères et si le bit 7 du registre BL est fixé, le modèle de caractère est combiné par un 'ou exclusif' avec les points graphiques figurant sous ce caractère.

·	Seule la page écran actuelle peut être modifiée par cette fonction

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Int 10h, Fct 0Ah    Ecran : Ecriture d'un caractère    BIOS

Un caractère est écrit dans la position actuelle du curseur dans la page écran spécifiée. La couleur de l'ancien caractère dans cette position de l'écran est maintenue.

Entrée :

AH 	= 0Ah

BH 	= Numéro de la page écran

CX 	= Nombre d'écritures successives du caractère

AL 	= Code ASCII du caractère

Sortie :

aucune sortie

Remarques :

·	Si le caractère indiqué doit être sorti plusieurs fois (auquel cas la valeur du registre CX est supérieure à 1), il faut, en mode graphique, que tous les caractères rentrent dans la page écran actuelle.

·	Les codes de commande "bell", "carriage return", etc..., ne sont pas identifiés comme tels mais sortis comme des codes ASCII normaux.

·	Cette fonction permet également de sortir des caractères en mode graphique. Dans ce cas, les modèles des caractères portant les codes 0 à 127 sont tirés dans une table en ROM et les modèles des caractères portant les codes 128 à 255 sont tirés d'une table en RAM qui doit avoir été installée préalablement avec l'instruction GRAFTABL du DOS.

·	En mode de texte, le contenu du registre BL définit l'octet d'attribut du caractère. En mode graphique, il détermine la couleur du caractère. En mode graphique 640*200 points, les valeurs 0 et 1, en mode graphique 320*200 points, les valeurs 0 à 3 sont possibles pour définir les différentes couleurs de la palette de couleurs sélectionnée.

·	Si le mode graphique est activé lors de la sortie de caractères et si le bit 7 du registre BL est fixé, le modèle de caractère est combiné par un 'ou exclusif' avec les points graphiques figurant sous ce caractère.

·	Cette fonction ne fait pas avancer le curseur vers la prochaine position de l'écran.

Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Int 10h, Fct 0Bh, Sous-Fct 0    Ecran : Sélection des couleurs de cadre et de fond    BIOS

Cette fonction sert à sélectionner les couleurs de cadre et de fond pour les modes graphique et de texte.

Entrée :

AH 	= 0Bh

BH 	= 0

BL 	= Couleurs de cadre/de fond

Sortie :

aucune sortie

Remarques :

·	En mode graphique, la valeur de couleur transmise définit aussi bien la couleur du cadre de l'écran que celle du fond de l'écran. En mode de texte, la couleur du fond est définie séparément pour chaque caractère, de sorte que la valeur de couleur transmise définit uniquement la couleur du cadre de l'écran.

·	La valeur de couleur transmise peut être comprise entre 0 et 15 et peut donc représenter les 16 couleurs possibles.

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Int 10h, Fct 0Bh, Sous-Fct 1    Ecran : Sélection de la palette de couleurs    BIOS

Sélection d'une des deux palettes de couleurs pour le mode graphique 320*200 points.

Entrée :

AH 	= 0Bh

BH 	= 1

BL 	= Numéro de la palette de couleurs

Sortie :

aucune sortie

Remarques :

·	Deux palettes de couleurs sont disponibles. Elles portent les numéros 0 et 1 et contiennent les couleurs suivantes :

Palette 0 : vert, rouge, jaune

Palette 1 : turquoise, magenta, blanc

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Int 10h, Fct 0Ch    Ecran : Ecrire un point graphique    BIOS

Définir la valeur de couleur pour un point écran en mode graphique.

Entrée :

AH 	= 0Ch

DX 	= Ligne de l'écran

CX 	= Colonne de l'écran

AL 	= Valeur de couleur

Sortie :

aucune sortie

Remarques :

·	La valeur de couleur se réfère au mode graphique actuel.

·	En mode 640*200 points, seules les valeurs 0 et 1 sont autorisées.

·	En mode 320*200 points, les valeurs 0 à 3 sont autorisées. Elles génèrent une couleur en fonction de la palette de couleurs sélectionnée. La valeur 0 correspond à la couleur sélectionnée pour le fond, 1 à la première couleur de la palette sélectionnée, 2 à la seconde, etc...

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Int 10h, Fct 0Dh    Ecran : Lire un point graphique     BIOS

Lire la couleur d'un point écran en mode graphique.

Entrée :

AH 	= 0Dh

DX 	= Ligne de l'écran

CX 	= Colonne de l'écran

Sortie :

AL 	= Valeur de couleur

Remarques :

·	La valeur de couleur se réfère au mode graphique actuel.

·	En mode 640*200 points, seules les valeurs 0 et 1 sont possibles.

·	En mode 320*200 points, les valeurs 0 à 3 sont autorisées. Elles génèrent une couleur en fonction de la palette de couleurs sélectionnée. La valeur 0 correspond à la couleur sélectionnée pour le fond, 1 à la première couleur de la palette sélectionnée, 2 à la seconde, etc...

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Int 10h, Fct 0Eh    Ecran : Ecrire un caractère     BIOS

Un caractère est écrit dans la position actuelle du curseur dans la page écran actuelle. La couleur de l'ancien caractère dans cette position de l'écran est maintenue.

Entrée :

AH 	= 0Eh

AL 	= Code ASCII du caractère

BL 	= Couleur de premier plan du caractère (en mode graphique uniquement)

Sortie :

aucune sortie

Remarques :

·	Cette fonction n'interprète pas les différents codes de commande tels que "bell" et "carriage return" comme des codes ASCII normaux mais comme des codes de commande particuliers. La sortie du caractère "bell" produira par exemple un bip.

·	Après sortie d'un caractère à l'aide de cette fonction, la position du curseur est incrémentée de sorte que le caractère suivant sera sorti dans la position suivante de l'écran. Lorsque la dernière position de l'écran est atteinte, l'écran défile d'une ligne vers le haut et la sortie se poursuit dans la première colonne de la dernière ligne de l'écran.

·	La couleur de premier plan se réfère au mode graphique actuel.

·	En mode 640*200 points, seules les valeurs 0 et 1 sont possibles.

·	En mode 320*200 points, les valeurs 0 à 3 sont autorisées. Elles génèrent une couleur en fonction de la palette de couleurs sélectionnée. La valeur 0 correspond à la couleur sélectionnée pour le fond, 1 à la première couleur de la palette sélectionnée, 2 à la seconde, etc...

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Int 10h, Fct 0Fh    Ecran : Lecture du mode vidéo     BIOS

Lire le numéro du mode vidéo actuel, le nombre de caractères par ligne et le numéro de la page écran actuelle.

Entrée :

AH 	= 0Fh

Sortie :

AL 	= Mode vidéo (voir plus bas)

AH	= Nombre de caractères par ligne

BH	= Numéro de la page écran actuelle

Remarques :

AL	Mode	Résolution	Résolution	Couleurs	Système

T/G	texte	graphique

00h	T	40x25  8x8	Gris	CGA,PCjr

T	40x25  8x14	Gris	EGA

T	40x25  8x16	16	MCGA

T	40x25  9x16	16	VGA

01h	T	40x25  8x8	16	CGA,PCjr

T	40x25  8x14	16	EGA

T	40x25  8x16	16	MCGA

T	40x25  9x16	16	VGA

02h	T	80x25  8x8	16 gris	CGA,PCjr

T	80x25  8x14	16 gris	EGA

T	80x25  8x16	16	MCGA

T	80x25  9x16	16	VGA

03h	T	80x25  8x8	16	CGA,PCjr

T	80x25  8x14	16	EGA

T	80x25  8x16	16	MCGA

T	80x25  9x16	16	VGA

04h	G	40x25  8x8	320x200	4	CGA,PCjr,EGA,MCGA,VGA

05h	G	40x25  8x8	320x200	4 gris	CGA,PCjr,EGA

G	40x25  8x8	320x200	4	MCGA,VGA

06h	G	80x25  8x8	640x200	2	CGA,PCjr,EGA,MCGA,VGA

07h	T	80x25  9x14	mono	MDA,Hercules,EGA

T	80x25  9x16	mono	VGA

08h	G	20x25  8x8	160x200	16	PCjr

G	90x43  8x8	720x352	mono	Hercules + MSHERC.COM

09h	G	40x25  8x8	320x200	16	PCjr

0Ah	G	80x25  8x8	640x200	4	PCjr

0Bh	réservé pour le BIOS EGA

0Ch	réservé pour le BIOS EGA

0Dh	G	40x25  8x8	320x200	16	EGA,VGA

0Eh	G	80x25  8x8	640x200	16	EGA,VGA

0Fh	G	80x25  8x14	640x350	mono	EGA,VGA

10h	G	80x25  8x14	640x350	4	EGA 64 Ko

G	640x350	16	EGA 256 Ko,VGA

11h	G	80x30  8x16	640x480	mono	VGA,MCGA

12h	G	80x30  8x16	640x480 	16/256k	VGA

13h	G	40x25  8x8	320x200 	256/256k	VGA,MCGA

18h	T	132x44  8x8	mono	Tseng Labs EVA

T	132x44  8x8	16/256	Tseng ET4000

19h	T	132x25  8x14	mono	Tseng Labs EVA

T	132x25  8x14	16/256	Tseng ET4000

1Ah	T	132x28  8x13	mono	Tseng Labs EVA

T	132x28  8x13	16/256	Tseng ET4000

22h	T	132x44  8x8	Tseng Labs EVA

T	132x44  8x8	16/256	Tseng ET4000

T	132x44	16	Orchid Prodesigner VGA

23h	T	132x25  6x14	Tseng Labs EVA

T	132x25  8x14	16/256	Tseng ET4000

T	132x28	16	Orchid Prodesigner VGA

24h	T	132x28  6x13	Tseng Labs EVA

T	132x28  8x13	16/256	Tseng ET4000

T	132x25	16	Orchid Prodesigner VGA

25h	G	80x60  8x8	640x480	Tseng Labs EVA

G	80x60  8x8	640x480	16/256	Tseng ET4000

G	80x60  8x8	640x480	16	Orchid Prodesigner VGA

26h	T	80x60  8x8	Tseng Labs EVA

T	80x60  8x8	16/256	Tseng ET4000

T	80x60	16	Orchid ProDesigner VGA

G	100x37  8x16	800x600	16	Orchid

G	100x37  8x16	800x600	16/256	Tseng ET4000

T	100x40  8x16	16	Orchid Prodesigner VGA

T	100x40  8x15	16/256	Tseng ET4000

2Dh	G	80x25  8x14	640x350	256/256k	Tseng ET4000

2Eh	G	80x30  8x16	640x480 	256/256k	Orchid

G	80x30  8x16	640x480	256/256k 	Tseng ET4000

2Fh	G	80x25  8x16	640x400	256/256k	Tseng ET4000

30h	G	100x37  8x16	800x600 	256/256k	Orchid

G	100x37  8x16	800x600 	256/256k	Tseng ET4000

37h	G	128x48  8x16 	1024x768	16	Orchid

38h	G	128x48  8x16 	1024x768 	256/256k 	Tseng ET4000

6Ah	G	800x600	16	VESA standard

·	Le contenu des registres BL, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Int 10h, Fct 10h, Sous-Fct 00h    Ecran : Définir le registre de palette    BIOS EGA/VGA

Cette fonction permet de régler le contenu de l'un des registres de palette du contrôleur d'attribut de la carte EGA/VGA.

Entrée :

AH	= 10h

AL	= 00h

BL	= code couleur

BH	= registre à adresser

Sortie :

aucune

Remarques :

·	Le numéro de registre n'étant pas contrôlé par le BIOS, cette fonction permet de programmer aussi les autres registres du contrôleur d'attribut. Il s'agit notamment des registres Mode Control, Overscan etc.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 10h, Sous-Fct 01h    Ecran : Définir la couleur du cadre de l'écran    BIOS EGA/VGA

La valeur spécifiée est copiée par cette fonction dans le registre Overscan du contrôleur d'attribut EGA/VGA.

Entrée :

AH	= 10h

AL	= 01h

BH	= couleur du cadre

Sortie :

aucune

Remarques :

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 10h, Sous-Fct 02h    Ecran : Définir tous les registres de palette    BIOS EGA/VGA

Ces fonctions permettent de régler simultanément les 16 registres de palette et le registre Overscan.

Entrée :

AH	= 10h

AL	= 02h

ES	= adresse de segment de la table de couleurs

DX	= adresse d'offset de la table de couleurs

Sortie :

aucune

Remarques :

·	La paire de registres ES:BX désigne une table qui doit avoir une longueur de 17 octets. Les 16 premiers octets seront transférés dans les 16 registres de palette du contrôleur d'attribut alors que le 17ème registre sera copié dans le registre Overscan.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 10h, Sous-Fct 03h    Ecran : Définirr attribut de clignotement    BIOS EGA/VGA

L'appel de cette fonction permet de savoir si le bit 7 de l'octet d'attribut d'un caractère entraîne, en mode de texte, un clignotement de ce caractère, ou un affichage plus intense du fond du caractère.

Entrée :

AH	= 10h

AL	= 03h

BL	= attribut de clignotement

0 = couleur de fond intense

1 = clignotement

Sortie :

aucune

Remarques :

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 10h, Sous-Fct 07h    Lire le registre de palette    VGA

Cette fonction offre à un programme la possibilité de connaître le contenu de l'un des registres de palette du contrôleur d'attribut.

Entrée :

AH	= 10h

AL	= 07h

BL	= Numéro du registre de palette

Sortie :

BH	= Contenu du registre de palette adressé

Remarques :

·	Le numéro du registre de palette appelé n'étant pas contrôlé par le BIOS, cette fonction permet en fait de lire tous les registres du contrôleur d'attribut.

·	Le contenu des registres BL, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Int 10h, Fct 10h, Sous-Fct 08h    Lire le contenu du registre Overscan    VGA

Cette fonction renvoie au programme d'appel le contenu du registre Overscan, qui définit la couleur du cadre de l'écran.

Entrée :

AH	= 10h

AL	= 08h

Sortie :

BH	= Contenu du registre Overscan

Remarques :

·	Le contenu des registres BL, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Int 10h, Fct 10h, Sous-Fct 09h    Lire le contenu de tous les registres de palette et le registre Overscan        VGA

Lorsque cette fonction est appelée, le contenu des 16 registres de palette ainsi que le contenu du registre Overscan sont copiés dans un buffer du programme d'appel.

Entrée :

AH	= 10h

AL	= 09h

ES	= Adresse de segment du buffer

DX	= Adresse d'offset du buffer

Sortie :

Aucune

Remarques :

·	Le buffer doit disposer d'une place d'au moins 17 octets pour pouvoir recevoir le contenu de tous les registres de palette (octets 0 à 15) et le contenu du registre Overscan (octet 16).

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Int 10h, Fct 10h, Sous-Fct 10h    Charger un registre de couleur DAC    VGA

Cette fonction permet de définir le contenu de l'un des 256 registres de couleurs DAC.

Entrée :

AH	= 10h

AL	= 10h

BX	= Numéro du registre de couleur DAC (0 à 255)

CH	= Vert

CL	= Bleu

DH	= Rouge

Sortie :

Aucune

Remarques :

·	Seuls les bits 0 à 5 des registres CH, CL et DH servent à composer le mélange de la couleur, les autres bits sont ignorés.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Int 10h, Fct 10h, Sous-Fct 12h    Charger plusieurs registres de couleur DAC    VGA

Cette fonction représente une extension de la fonction 10h et permet de charger des valeurs dans plusieurs registres de couleur DAC simultanément.

Entrée :

AH	= 10h

AL	= 12h

BX	= Numéro du premier registre de couleur DAC appelé (0 à 255)

CX	= Nombre de registres à définir

ES	= Adresse de segment du buffer

DX	= Adresse d'offset du buffer

Sortie :

Aucune

Remarques :

·	Le buffer spécifié doit comporter pour chacun des registres de couleur à définir un groupe de 3 octets consécutifs, dont le premier définit la part de rouge, le deuxième la part de vert et le troisième la part de bleu. Les trois premiers octets correspondent au premier registre de couleur DAC appelé, les trois octets suivants au registre de couleur DAC suivant, etc.

·	Pour le mélange de la couleur, seuls les bits 0 à 5 sont significatifs, les autres bits sont ignorés.

·	Si la somme de BX et CX est supérieure à 255, c'est le premier registre de couleur DAC qui sera traité après que le dernier registre de couleur DAC ait été traité. Il y a donc une exécution en boucle (Wrap Around).

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Int 10h, Fct 10h, Sous-Fct 13h    Définir la méthode de sélection des couleurs ou sélectionner un groupe     de registres DAC
Int 10h, Fct 10h, Sous-Fct 13h    Définir la méthode de sélection des couleurs ou sélectionner un groupe     de registres DAC    VGA

Cette fonction manipule le bit 7 du registre de contrôle de mode.

Entrée :

AH	= 10h

AL	= 13h

BL	= 00h ou 01h (voir plus bas)

BH	= voir plus bas

Sortie :

Aucune

Remarques :

·	Cette sous-fonction dispose elle-même à son tour de deux sous-fonctions sélectionnées à travers la valeur dans le registre BL. La sous-fonction 00h permet de définir la sélection des couleurs, alors que la sous-fonction 01h sert à sélectionner le groupe de registres DAC activé.

·	La sous-fonction 00h copie le bit 0 du registre BH dans le bit 7 du registre de contrôle de mode, fixant ainsi la méthode de sélection des couleurs. Si le bit 0 de BH contient la valeur 0, les 256 registres de couleur DAC seront divisés en quatre groupes de 64 registres. En ce qui concerne la sélection de couleur, les bits 0 à 5 de chaque registre de palette forment avec les bits 2 à 3 du registre de sélection de couleur les 8 bits utilisés comme index dans la table de couleurs DAC. Si le bit 0 du registre BH contient par contre la valeur 1, les registres de couleur DAC seront groupés en 16 groupes de 16 registres. Les 4 bits inférieurs du registre de palette composeront alors avec les 4 bits inférieurs du registre de sélection de couleur l'index 8 bits sur la table de couleurs DAC.

·	La sous-fonction 01h sert à définir le registre de sélection de couleur, dont le contenu sélectionne le groupe de registres de couleur DAC activé. Le contenu du registre BH est copié à cet effet dans le registre de sélection de couleur.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Int 10h, Fct 10h, Sous-Fct 15h    Lit un des registres de couleur DAC    VGA

Fournit au programme d'appel le contenu de l'un des 256 registres de couleur DAC.

Entrée :

AH	= 10h

AL	= 15h

BX	= Numéro du registre de couleur DAC

Sortie :

CH	= Vert

CL	= Bleu

DH	= Rouge

Remarques :

·	Seuls les bits 0 à 5 des registres CH, CL et DH participent au mélange de la couleur.

·	Le contenu des registres BX, DL, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Interrupt 10h, Fct 10h, Sous-Fct 17h    Définir le contenu de plusieurs registres de couleur DAC    VGA

Cette fonction, qui représente une extension de la fonction 10h, permet de définir en une fois le contenu de plusieurs registres de couleur DAC.

Entrée :

AH	= 10h

AL	= 17h

BX	= Numéro du premier registre de couleur DAC appelé (0 à 255)

CX	= Nombre de registres à définir

ES	= Adresse de segment du buffer

DX	= Adresse d'offset du buffer

Sortie :

Aucune

Remarques :

·	Le buffer spécifié doit comporter pour chacun des registres de couleur à définir un groupe de 3 octets consécutifs, dont le premier définit la part de rouge, le deuxième la part de vert et le troisième la part de bleu. Les trois premiers octets correspondent au premier registre de couleur DAC appelé, les trois octets suivants au registre de couleur DAC suivant, etc.

·	Pour le mélange de la couleur, seuls les bits 0 à 5 sont significatifs, les autres bits sont ignorés.

·	Si la somme de BX et CX est supérieure à 255, c'est le premier registre de couleur DAC qui sera traité après que le dernier registre de couleur DAC ait été traité. Il y a donc une exécution en boucle (Wrap Around).

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Interrupt 10h, Fct 10h, Sous-Fct 18h    Définit le registre de masque DAC    VGA

Charge la valeur transmise dans le registre de masque DAC.

Entrée :

AH	= 10h

AL	= 18h

BL	= Valeur pour le registre de masque DAC

Sortie :

Aucune

Remarques :

·	Le contenu du registre de masque DAC intervient dans la sélection de couleur car il est combiné par un ET logique avec l'index servant à l'accès à la table de couleurs DAC.

·	Le contenu des registres BH, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Int 10h, Fct 10h, Sous-Fct 19h    Lire le contenu du registre de masque DAC    VGA

Lit le contenu actuel du registre de masque DAC.

Entrée :

AH	= 10h

AL	= 19h

Sortie :

BL	= Contenu du registre de masque DAC

Remarques :

·	Le contenu du registre de masque DAC intervient dans la sélection de couleur car il est combiné par un ET logique avec l'index servant à l'accès à la table de couleurs DAC.

·	Le contenu des registres BH, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Interrupt 10h, Fct 10h, Sous-Fct 1Ah    Lire la méthode de sélection de couleur     et le contenu du registre de sélection de co
Interrupt 10h, Fct 10h, Sous-Fct 1Ah    Lire la méthode de sélection de couleur     et le contenu du registre de sélection de couleur    VGA

Cette fonction fournit d'une part le contenu du bit 7 du registre de contrôle de mode, et donc la méthode de sélection de couleur, ainsi que le contenu du registre de sélection de couleur, qui détermine le groupe de registres de couleur DAC activé.

Entrée :

AH	= 10h

AL	= 1Ah

Sortie :

BL	= Bit 7 du registre de contrôle de mode

BH	= Contenu du registre de sélection de couleur

Remarques :

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Int 10h, Fct 10h, Sous-Fct 1Bh    Convertir le contenu des registres de couleur DAC en nuances de gris    VGA

Cette fonction convertit une section déterminée de la table de couleurs DAC en nuances de gris correspondantes.

Entrée :

AH	= 10h

AL	= 1Bh

BX	= Numéro du premier registre de couleur DAC à convertir

CX	= Nombre de registres de couleur DAC à traiter

Sortie :

Aucune

Remarques :

·	La conversion en une nuance de gris s'effectue par une pondération différenciée des parts de rouge, de vert et de bleu, qui reflète les différences d'intensité entre ces couleurs fondamentales sur l'écran. Le coefficient appliqué au rouge est 0,3, celui appliqué au vert 0,59, et celui appliqué au bleu 0,11.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Int 10h, Fct 11h, Sous-Fct 00h    Ecran : Charger le jeu de caractères défini par l'utilisateur    BIOS EGA/VGA

Cette fonction charge un jeu de caractères défini par l'utilisateur de la mémoire RAM dans l'une des deux tables de caractères EGA/VGA.

Entrée :

AH	= 11h

AL	= 00h

BH	= lignes par caractère (et donc octets par caractère)

BL	= table de caractères appelée (0 ou 1)

CX	= nombre de caractères dans la table

DX	= code ASCII du premier caractère dans la table

ES	= adresse de segment de la table de caractères dans la RAM

BP	= adresse d'offset de la table de caractères dans la RAM

Sortie :

aucune

Remarques :

·	512 caractères peuvent être chargés au maximum par table de caractères.

·	Le jeu de caractères chargé n'est pas activé et les registres du CRTC ne sont pas non plus programmés de façon à adapter l'affichage des caractères sur l'écran à la taille des caractères. Les modifications ne sont donc perceptibles sur l'écran que si la table de caractères dans laquelle sont chargées les définitions de caractères est la table actuellement activée.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 11h, Sous-Fct 01h    Ecran : Charger le jeu de caractères 8*14    BIOS EGA/VGA

Cette fonction charge le jeu de caractères 8*14 points tout entier du BIOS en ROM dans l'une des deux tables de caractères.

Entrée :

AH	= 11h

AL	= 01h

BL	= table de caractères appelée (0 ou 1)

Sortie :

aucune

Remarques :

·	Le jeu de caractères chargé n'est pas activé et les registres du CRTC ne sont pas non plus programmés de façon à adapter l'affichage des caractères sur l'écran à la taille des caractères. Les modifications ne sont donc perceptibles sur l'écran que si la table de caractères dans laquelle sont chargées les définitions de caractères est la table actuellement activée. La carte EGA affiche dans ce cas 25 lignes sur l'écran, la carte VGA 28.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 11h, Sous-Fct 02h    Ecran : Charger le jeu de caractères 8*8    BIOS EGA/VGA

Cette fonction charge le jeu de caractères 8*8 points tout entier du BIOS en ROM dans l'une des deux tables de caractères.

Entrée :

AH	= 11h

AL	= 02h

BL	= table de caractères appelée (0 ou 1)

Sortie :

aucune

Remarques :

·	Le jeu de caractères chargé n'est pas activé et les registres du CRTC ne sont pas non plus programmés de façon à adapter l'affichage des caractères sur l'écran à la taille des caractères. Les modifications ne sont donc perceptibles sur l'écran que si la table de caractères dans laquelle sont chargées les définitions de caractères est la table actuellement activée. La carte EGA affiche dans ce cas 43 lignes sur l'écran, la carte VGA 50.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 11h, Sous-Fct 03h    Ecran : Sélectionner un jeu de caractères    BIOS EGA/VGA

Active un (ou deux) des quatre jeux de 256 caractères.

Entrée :

AH	= 11h

AL	= 03h

BL	= numéro du jeu de caractères à activer

Sortie :

aucune

Remarques :

·	Les bits 0 et 1 du registre BL spécifient le numéro du jeu de caractères auquel il faut accéder lorsque le bit 3 de l'octet d'attribut vaut 0.

·	Les bits 2 et 3 du registre BL spécifient le numéro du jeu de caractères auquel il faut accéder lorsque le bit 3 de l'octet d'attribut vaut 1.

·	Si le contenu des bits 0 et 1 ainsi que celui des bits 2 et 3 du registre BL est identique, le bit 3 de l'octet d'attribut d'un caractère est sans effet sur le code ASCII du caractère affiché. Seuls 256 caractères différents peuvent donc être affichés sur l'écran.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 11h, Sous-Fct 04h    Charger le jeu de caractères 8*16    VGA

Cette fonction charge le jeu de caractères 8*16 points complet du BIOS en ROM de la carte VGA dans l'une des deux tables de caractères.

Entrée :

AH	= 11h

AL	= 04h

BL	= table de caractères appelée (0-7)

Sortie :

Aucune

Remarques :

·	Le jeu de caractères chargé n'est pas activé et les registres du CRTC ne sont pas non plus programmés de façon à adapter l'affichage des caractères sur l'écran à la taille des caractères. Les modifications ne sont donc perceptibles sur l'écran que si la table de caractères dans laquelle sont chargées les définitions de caractères est la table actuellement activée. La carte VGA affiche dans ce cas 25 lignes sur l'écran.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 11h, Sous-Fct 10h    Ecran : Charger et activer un jeu de caractères défini par l'utilisateur        BIOS EGA/VGA

Cette fonction charge un jeu de caractères défini par l'utilisateur dans l'une des deux tables de caractères EGA/VGA et l'active en programmant les registres du CRTC.

Entrée :

AH	= 11h

AL	= 10h

BH	= lignes par caractère (et donc octets par caractère)

BL	= table de caractères appelée (0 ou 1)

CX	= nombre de caractères dans la table

DX	= code ASCII du premier caractère dans la table

ES	= adresse de segment de la table de caractères dans la RAM

BP	= adresse d'offset de la table de caractères dans la RAM

Sortie :

aucune

Remarques :

·	256 caractères peuvent être chargés au maximum par table de caractères.

·	Le nombre de lignes de texte affichées sur l'écran dépend de la hauteur des caractères. Il est égal au nombre de lignes de l'écran (350 ou 480) divisé par la hauteur de caractère.

·	Les lignes de début et de fin du curseur clignotant de l'écran sont automatiquement adaptées à la hauteur de la nouvelle matrice de caractère.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 11h, Sous-Fct 11h    Ecran : Charger et activer le jeu de caractères 8*14    BIOS EGA/VGA

Cette fonction charge le jeu de caractères 8*14 points tout entier du BIOS en ROM de la carte EGA/VGA dans l'une des deux tables de caractères et l'active en programmant les registres du CRTC.

Entrée :

AH	= 11h

AL	= 11h

BL	= table de caractères appelée (0 ou 1)

Sortie :

aucune

Remarques :

·	Le fait d'appeler cette fonction fait automatiquement passer l'écran en affichage de 25 lignes pour la carte EGA et de 28 lignes pour la carte VGA.

·	Les lignes de début et de fin du curseur clignotant de l'écran sont automatiquement adaptées à la hauteur de la nouvelle matrice de caractère.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 11h, Sous-Fct 12h    Ecran : Charger le jeu de caractères 8*8    BIOS EGA/VGA

Cette fonction charge le jeu de caractères 8*8 points tout entier du BIOS en ROM de la carte EGA/VGA dans l'une des deux tables de caractères et l'active en programmant les registres du CRTC.

Entrée :

AH	= 11h

AL	= 12h

BL	= table de caractères appelée (0 ou 1)

Sortie :

Aucune

Remarques :

·	Après appel de cette fonction, la carte EGA affiche 43 lignes sur l'écran, et la carte VGA 50 lignes.

·	Les lignes de départ et de fin du curseur clignotant de l'écran sont automatiquement adaptées à la hauteur de la nouvelle matrice de caractère.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 11h, Sous-Fct 14h    Charger jeu de caractères 8*16    VGA

Cette fonction charge le jeu de caractères 8*16 points complet du BIOS en ROM de la carte VGA dans l'une des deux tables de caractères et l'active en programmant les registres CRTC.

Entrée :

AH	= 11h

AL	= 14h

BL	= table de caractères appelée (0 ou 1)

Sortie :

Aucune

Remarques :

·	Après appel de cette fonction, la carte VGA affiche 25 lignes de texte sur l'écran.

·	Les lignes de départ et de fin du curseur clignotant de l'écran sont automatiquement adaptées à la hauteur de la nouvelle matrice de caractère.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 11h, Sous-Fct 30h    Ecran : Lire des informations sur le générateur de caractères    BIOS EGA/VGA

Cette fonction permet d'obtenir différentes informations sur l'état actuel du générateur de caractères.

Entrée :

AH	= 11h

AL	= 30h

BH	= Type d'informations recherchées

0 = Contenu du vecteur d'interruption 1Fh

1 = Contenu du vecteur d'interruption 43h

2 = Adresse de la table de caractères 8*14 en ROM

3 = Adresse de la table de caractères 8*8 en ROM

4 = Adresse de la seconde moitié de la table de caractères 8*8

5 = Adresse de la table de caractères 9*14 alternative en ROM

6 = Adresse de la table de caractères 8*16 alternative en ROM

7 = Adresse de la table de caractères 9*16 alternative en ROM

Sortie :

CX	= Hauteur de la matrice de caractère actuelle

DL	= Nombre de colonnes par ligne - 1

ES	= Adresse de segment du pointeur testé

BP	= Adresse de segment du pointeur testé

Remarques :

·	Le contenu des registres BX, DH, SI, DI ainsi que celui des registres de segment CS, DS et SS n'est pas modifié par cette fonction.


Int 10h, Fct 12h, Sous-Fct 10h    Ecran : Lire la configuration EGA/VGA    BIOS EGA/VGA

Cette fonction sert à déterminer la configuration de la carte EGA/VGA.

Entrée :

AH	= 12h

BL	= 10h

Sortie :

BH	= moniteur connecté

0 = moniteur couleur ou haute résolution

1 = moniteur monochrome

BL	= taille de la RAM EGA

0 = 64 Ko

1 = 128 Ko

2 = 192 Ko

3 = 256 Ko

CL	= moniteur connecté

Remarques :

·	Le contenu des registres DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 12h, Sous-Fct 20h    Ecran : Définir une autre routine de copie d'écran    BIOS EGA

Comme la routine de copie d'écran normale du BIOS en ROM sort systématiquement une copie d'écran sur 25 lignes, elle ne convient pas pour une copie d'écran sous les modes EGA/VGA affichant plus de 25 lignes sur l'écran. C'est pourquoi en appelant cette fonction on peut faire installer une routine de copie d'écran de remplacement qui sortira sur l'imprimante autant de lignes qu'il y en a effectivement d'affichées sur l'écran.

Entrée :

AH	= 12h

BL	= 20h

Sortie :

aucune

Remarques :

·	Le contenu des registres BH, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 12h, Sous-Fct 30h    Définir le nombre de lignes de balayage    EGA/VGA

Sélectionne le nombre de lignes apparaissant sur l'écran (à ne pas confondre avec les lignes de texte).

Entrée :

AH	=	12h

BL	=	30h

AL	=	0 : 200 lignes de balayage (EGA et VGA)

1 : 350 lignes de balayage (EGA et VGA)

2 : 400 lignes de balayage (possible uniquement avec VGA)

Sortie :

Aucune

Remarques :

·	Le nombre de lignes sélectionné ne peut être affiché sur l'écran que si un moniteur suffisamment puissant est relié à la carte vidéo. C'est ainsi qu'un moniteur CGA ne permettra jamais d'afficher plus de 200 lignes sur l'écran, même si l'électronique vidéo autorise une résolution plus élevée.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Int 10h, Fct 12h, Sous-Fct 31h    Activer ou désactiver le chargement des registres de palette    VGA

Cette fonction permet à un programme d'indiquer au BIOS VGA si les valeurs défaut doivent automatiquement être chargées dans les registres de palette lorsqu'un changement de mode vidéo est opéré à l'aide de la fonction 00h.

Entrée :

AH	=	12h

BL	=	31h

AL	=	Chargement automatique des registres de palette

0 : Oui

1 : Non

Sortie :

Aucune

Remarques :

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Int 10h, Fct 12h, Sous-Fct 32h    Autoriser/verrouiller l'accès de l'unité centrale à la RAM vidéo    VGA

Cette fonction permet d'autoriser ou de verrouiller l'accès de l'unité centrale à la RAM vidéo et aux différents ports d'entrée/sortie d'une carte VGA.

Entrée :

AH	= 	12h

BL	= 	32h

AL	= 	0 : Accès autorisé

1 : Accès interdit

Sortie :

Aucune

Remarques :

·	Le BIOS EGA ne disposant pas de cette fonction, l'accès direct de l'unité centrale à la carte vidéo peut néanmoins être interdit en manipulant directement le bit 1 du registre de sortie (adresse de port 3C2h).

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Int 10h, Fct 12h, Sous-Fct 33h    Activer/désactiver la conversion en gris des registres de couleur DAC    VGA

Alors que la sous-fonction 1Bh de la fonction 10h entraîne une conversion sélective du contenu des registres de couleur DAC en nuances de gris, cette fonction provoque une conversion systématique, lors de tous les accès à ces registres à travers le BIOS VGA.

Entrée :

AH	=	12h

BL	=	33h

AL	=	Conversion en gris des registres de couleur DAC

0 : oui

1 : non

Sortie :

Aucune

Remarques :

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Int 10h, Fct 12h, Sous-Fct 34h    Activer/désactiver l'émulation du curseur    VGA

Pour que le programme appelant la fonction 01h (définition des lignes de départ et de fin du curseur de l'écran) n'ait pas à tenir compte des différentes résolutions de la matrice de caractère dans les différents modes, il peut se référer systématiquement à une matrice de caractère 8*8 et laisser au BIOS VGA le soin d'effectuer la conversion vers la taille de la matrice de caractère actuelle. Ce n'est cependant possible qu'en mode dit d'émulation du curseur, que cette fonction permet d'activer ou de désactiver.

Entrée :

AH	= 	12h

BL	= 	34h

AL	= 	Mode d'émulation du curseur ...

0 : oui

1 : non

Sortie :

Aucune

Remarques :

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Int 10h, Fct 12h, Sous-Fct 36h    Interdire la construction de l'écran    VGA

Cette fonction permet à un programme d'interdire temporairement la construction de l'écran, pour effectuer des manipulations d'envergure à l'intérieur de la RAM vidéo.

Entrée :

AH	= 	12h

BL	= 	36h

AL	= 	Construction de l'écran ...

0 : oui

1 : non

Sortie :

Aucune

Remarques :

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Int 10h, Fct 13h    Ecran : Sortie d'une chaîne de caractères     BIOS (> AT)

Une chaîne de caractères est sortie sur l'écran, dans une page écran déterminée, à partir d'une position spécifiée de l'écran. Les caractères sont retirés d'un buffer dont l'adresse doit être transmise à la fonction.

Entrée :

AH 	= 13h

AL 	= Mode de sortie (0 - 3)

0 = Attribut dans BL, conserver position du curseur

1 = Attribut dans BL, actualiser position du curseur

2 = Attribut dans le buffer, conserver position du curseur

3 = Attribut dans le buffer, actualiser position du curseur

BL 	= Octet d'attribut des caractères (modes 0 et 1 seulement)

CX 	= Nombre de caractères à sortir

DH	= Ligne de l'écran

DL 	= Colonne de l'écran

BH 	= Page écran

ES 	= Adresse de segment du buffer

BP 	= Adresse d'offset du buffer

Sortie :

aucune sortie

Remarques :

·	En modes 1 et 3, la position du curseur est fixée à la suite du dernier caractère de la chaîne de caractères sortie, de sorte que, lors des appels ultérieurs d'une fonction BIOS de sortie de caractères, les caractères seront sortis à la suite de la chaîne de caractères. Ce n'est pas le cas en modes 0 et 2.

·	En modes 0 et 1, le buffer contient uniquement les codes ASCII des caractères à sortir. La couleur de tous les caractères de la chaîne de caractères est dans ce cas fixée par le registre BL. En modes 2 et 3, par contre, chaque caractère est suivi, dans le buffer, de l'octet d'attribut correspondant de sorte que chaque caractère est doté d'un attribut individuel. Bien que la taille en octets de la chaîne de caractères soit deux fois supérieure au nombre de caractères à sortir, c'est bien ce nombre de caractères ASCII qui doit être spécifié dans le registre CX et non la longueur effective de la chaîne.

·	Les codes de commande spéciaux tels que "bell" et "carriage return" sont interprétés comme des codes de commande et non comme des codes ASCII normaux.

·	Lorsqu'est atteinte la dernière position de l'écran, l'écran défile d'une ligne vers le haut et la sortie se poursuit sur la première colonne de la dernière ligne de l'écran.

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Int 10h, Fct 14h    Non documentée    BIOS EGA/VGA

La signification de cette fonction n'est pas connue. Elle ne doit donc pas être appelée par un programme utilisateur.


Int 10h, Fct 15h    Non documentée    BIOS EGA/VGA

La signification de cette fonction n'est pas connue. Elle ne doit donc pas être appelée par un programme utilisateur.


Int 10h, Fct 16h    Non documentée    BIOS EGA/VGA

La signification de cette fonction n'est pas connue. Elle ne doit donc pas être appelée par un programme utilisateur.


Int 10h, Fct 17h    Non documentée    BIOS EGA/VGA

La signification de cette fonction n'est pas connue. Elle ne doit donc pas être appelée par un programme utilisateur.


Int 10h, Fct 18h    Non documentée    BIOS EGA/VGA

La signification de cette fonction n'est pas connue. Elle ne doit donc pas être appelée par un programme utilisateur.


Int 10h, Fct 19h    Non documentée    BIOS EGA/VGA

La signification de cette fonction n'est pas connue. Elle ne doit donc pas être appelée par un programme utilisateur.


Int 10h, Fct 1Ah, Sous-Fct 00h    Lire le type d’adaptateur vidéo primaire et secondaire    VGA
Int 10h, Fct 1Ah, Sous-Fct 00h    Lire le type d'adaptateur vidéo primaire et secondaire    VGA

Entrée :

AH	= 1Ah

AL	= 00h

Sortie :

AL	= 1Ah

BL	= Code de périphérique de la carte vidéo active

BH	= Code de périphérique de la carte vidéo non passive

Remarques :

·	Si la valeur 1Ah n'est pas renvoyée dans le registre AL, c'est qu'aucun BIOS VGA et donc aucune carte VGA n'est installée.

Les codes de périphérique suivants sont renvoyés :

FFh	=	Carte vidéo inconnue

00h	=	Pas de carte vidéo

01h	=	MDA avec écran monochrome

02h	=	CGA avec moniteur CGA

03h	=	Réservé

04h	=	EGA avec moniteur EGA ou Multisync

05h	=	EGA avec moniteur monochrome

06h	=	Réservé

07h	=	VGA avec écran monochrome analogique

08h	=	VGA avec écran couleur analogique (VGA, Multisync)

09h	=	Réservé

0Ah	=	Carte MCGA avec moniteur CGA (PS/2 uniquement)

0Bh	=	MCGA avec écran monochrome analogique (PS/2 uniquement)

0Ch	=	MCGA avec écran couleur analogique (PS/2 uniquement)

·	Il suffit qu'une seule carte vidéo soit présente dans le registre BH pour que la valeur 00h soit retournée.

·	Le contenu des registres CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Int 10h, Fct 1Ah, Sous-Fct 01h    Définir les cartes vidéo primaire et secondaire    VGA

A l'intérieur d'un système équipé de deux cartes vidéo, cette fonction permet d'activer l'une des deux cartes et de désactiver l'autre.

Entrée :

AH 	= 1Ah

AL 	= 1

BL 	= Code de périphérique de la carte vidéo active

BH 	= Code de périphérique de la carte vidéo passive

Sortie :

AL 	= 1Ah

Remarques :

·	Si la valeur 1Ah n'est pas retournée dans le registre AL, cela signifie que ni un BIOS VGA ni une carte VGA n'est installé.

·	La liste des codes de périphérique est fournie dans le cadre de la description de la sous-fonction 00h.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 1Bh    Lire les informations d'état concernant le mode vidéo et le BIOS VGA        VGA

Cette fonction permet de lire toutes les caractéristiques du mode vidéo en cours ainsi que les informations concernant les techniques fondamentales du BIOS VGA.

Entrée :

 	AH 	= 1Bh

BX 	= 0

ES:DI 	= Pointeur sur un buffer

Sortie :

 	AL 	= 1Bh

Remarques :

·	Si la valeur 1Bh n'est pas retournée dans le registre AL, cela signifie que ni un BIOS VGA ni une carte VGA n'est installé.

·	Le buffer transmis par l'appel de cette fonction doit contenir au moins 64 Ko parce que le BIOS VGA y place une table comme celle présentée plus bas. Cette table contient toutes les informations décrivant le mode vidéo en cours.

Un pointeur se trouve au début de cette table. Il conduit vers une autre table située dans la ROM BIOS et pour laquelle le programme d'appel ne doit allouer aucune place mémoire. Elle reproduit les techniques du BIOS VGA qui sont indépendantes de la définition actuelle des différents paramètres (mode vidéo, registre de palettes, etc.).

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.

Structure du bloc de données avec les informations d'état du BIOS VGA compte tenu du mode

Offset	Contenu	Type

00h	Adresse de la table contenant les informations statiques	1 PTR

04h	Numéro de code du mode vidéo en cours	1 BYTE

05h	Nombre de colonnes de l'écran ou de points affichées	1 WORD

07h	Longueur d'une page écran à l'intérieur de la RAM vidéo	1 WORD

09h	Adresse de début de la page écran en cours dans la RAM vidéo	1 WORD

0Bh	Positions du curseur dans les huit pages écran maximales où la spécification de la colonne prévaut toujours par rapport à celle de la ligne	16 BYTE

1Bh	Ligne de fin du curseur (ligne de points)	1 BYTE

1Ch	Ligne de début du curseur (ligne de points)	1 BYTE

1Dh	Numéro de la page écran en cours	1 BYTE

1Eh	Adresse du port du registre d'adresse du contrôleur CRT	1 WORD

20h	Contenu actuel du registre CRTC dans l'adresse du port 3B8h (émulation DMA) ou 3D8h (VGA)	1 BYTE

21h	Contenu actuel du registre de sélection de couleurs dans l'adresse du port 3D9h 	1 BYTE

22h	Nombre de lignes écran affichées	1 BYTE

23h	Hauteur des caractères en lignes de points	1 WORD

25h	Numéro de code de l'adaptateur vidéo en cours	1 BYTE

26h	Numéro de code de l'adaptateur vidéo inactif	1 BYTE

27h	Nombre de couleurs à afficher (0 = monochrome)	1 WORD

29h	Nombre de pages écran	1 BYTE

2Ah	Nombre de lignes de points affichées	1 BYTE

2Bh	Numéro de la table de caractères utilisée et dont le bit 3 vaut 0 dans l'octet d'attribut	1 BYTE

2Ch	Numéro de la table de caractères utilisée et dont le bit 3 vaut 1 dans l'octet d'attribut	1 BYTE

2Dh	Informations diverses #1 (voir plus bas)	1 BYTE

2Eh	Réservé	3 BYTE

31h	Taille de la RAM vidéo disponible	1 BYTE

32h	Réservé	14 BYTE

64 octets

Structure du bloc de données avec les informations d'état du BIOS VGA compte tenu du mode (informations statiques)

Offset	Contenu	Type

00h	Modes vidéo reconnus (voir plus bas)	3 BYTE

03h	Réservé	4 BYTE

07h	Nombre des lignes de points dans les modes texte (voir plus bas)	1 BYTE

08h	Nombre maximal des jeux de caractères affichables	1 BYTE

09h	Nombre des tables de jeux de caractères à charger dans la RAM vidéo	1 BYTE

0Ah	Informations d'état sur les capacités du BIOS VGA (voir plus bas)	1 BYTE

0Bh	Autres informations d'état sur les capacités du BIOS VGA (voir plus bas)	1 BYTE

0Ch	Réservé	2 BYTE

0Eh	Réservé	2 BYTE

16 octets


Int 10h, Fct 1Ch, Sous-Fct 00h    Demander la taille de la zone de sauvegarde    VGA

Les trois sous-fonctions de la fonction 1Ch permettent de sauvegarder l'état en cours de l'équipement vidéo et du BIOS VGA dans un buffer du programme. A cet effet, le programme d'appel doit d'abord demander la taille du buffer nécessaire à l'aide de cette sous-fonction.

Entrée :

AH 	= 1Ch

AL 	= 0

CX 	= Composantes à sauvegarder (voir plus bas)

Sortie :

AL 	= 1Ch

BX 	= Taille de buffer en unités de 64 octets

Remarques :

·	Si la valeur 1Ch n'est pas retournée dans le registre AL, cela signifie que ni un BIOS VGA ni une carte VGA n'est installé.

·	Lors de l'appel de la fonction, les trois bits inférieurs indiquent les composantes de l'équipement vidéo et le BIOS VGA à sauvegarder dans le registre CX. Le bit approprié est à régler sur 1 si les éléments correspondants doivent être sauvegardés.

Bit 0 	= Equipement vidéo

Bit 1 	= Zone de données du BIOS VGA

Bit 3 	= Contenu du registre DAC

·	Notez que "l'équipement vidéo" n'inclut pas également le contenu de la RAM vidéo. La sauvegarde de ce dernier est à la charge du programme utilisateur.

·	Le contenu des registres CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 1Ch, Sous-Fct 01h    Sauvegarder l'état vidéo    VGA

Après avoir demandé le buffer nécessaire à l'aide de la sous-fonction 00h, vous pouvez sauvegarder l'état du matériel vidéo et/ou du BIOS VGA que vous souhaitez avec cette fonction.

Entrée :

AH 	= 1Ch

AL 	= 1

CX 	= Composantes à sauvegarder

ES:BX = Pointeur sur le buffer devant stocker les informations

Sortie :

AL 	= 1Ch

Remarques :

·	Si la valeur 1Ch n'est pas retournée dans le registre AL, cela signifie que ni un BIOS VGA ni une carte VGA n'est installé.

·	Avant d'appeler cette fonction, il faut d'abord obtenir la taille du buffer nécessaire à l'aide de la sous-fonction 00h. Notez que le contenu du registre CX ne varie pas entre les deux appels sinon le buffer transmis risque d'être trop petit.

·	Lors de l'appel de la fonction, les trois bits inférieurs indiquent les composantes de l'équipement vidéo et le BIOS VGA à sauvegarder dans le registre CX. Le bit approprié est à régler sur 1 si les éléments correspondants doivent être sauvegardés.

Bit 0 	= Equipement vidéo

Bit 1 	= Zone de données du BIOS VGA

Bit 3 	= Contenu du registre DAC

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 1Ch, Sous-Fct 02h    Restaurer l'état vidéo    VGA

Suite à un appel préalable de la sous-fonction 01h, cette fonction peut restaurer l'état sauvegardé du matériel vidéo et/ou du BIOS VGA.

Entrée :

AH 	= 1Ch

AL 	= 2

CX 	= Composantes à restaurer

ES:BX	= Pointeur sur le buffer dans lequel les informations ont été sauvegardées

Sortie :

AL 	= 1Ch

Remarques :

·	Si la valeur 1Ch n'est pas retournée dans le registre AL, cela signifie que ni un BIOS VGA ni une carte VGA n'est installé.

·	L'appel de cette fonction n'a un sens que s'il s'effectue après un appel de la sous-fonction 01h. Le nombre de composantes restaurées dépend naturellement du nombre qui a été préalablement sauvegardé. Avant d'appeler cette fonction, pensez donc à vérifier le contenu du registre CX.

·	Lors de l'appel de la fonction, les trois bits inférieurs indiquent les composantes de l'équipement vidéo et le BIOS VGA à sauvegarder dans le registre CX. Le bit approprié est à régler sur 1 si les éléments correspondants doivent être sauvegardés.

Bit 0 	= Equipement vidéo

Bit 1 	= Zone de données du BIOS VGA

Bit 3 	= Contenu du registre DAC

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Int 10h, Fct 4Fh, Sous-Fct 00h    Lire les spécificités de la carte Super VGA    VESA

Cette fonction permet de prendre connaissance des techniques offertes par la carte Super VGA installée et déterminer si les fonctions VESA sont soutenues.

Entrée :

AH 	= 4Fh

AL 	= 00h

ES:DI : Pointeur FAR sur le buffer Info

Sortie :

AL 	= 4Fh et

AH 	= 00h : Fonctions VESA soutenues

Remarques :

·	Le buffer Info dont l'adresse est à transmettre à la fonction doit disposer de 256 octets. Si la fonction s'exécute correctement, vous obtenez les informations suivantes :

Structure du buffer Info

Offset	Contenu	Type

00h	Signature VESA ("VESA")	4 BYTE

04h	Version VESA, Numéro de version principal	1 BYTE

05h	Version VESA, Numéro de version secondaire	1 BYTE

06h	Pointeur FAR sur chaîne ASCIIZ contenant le nom du fabricant de cartes	1 DWORD

0Ah	Flag indiquant les performances de la carte. Actuellement inutilisé, donc 0000h.

0Eh	Pointeur FAR sur liste contenant les numéros de code des modes vidéo reconnus	1 DWORD

La liste des numéros de codes des modes vidéo reconnus, transmise dans le dernier champ du buffer, se compose de divers Words indiquant chacun le code d'un mode vidéo d'après le tableau ci-dessus. Cette liste se termine par un Word de valeur 0FFFFh. Sa longueur varie d'une carte à l'autre.


Int 10h, Fct 4Fh, Sous-Fct 01h    Lire les données-clés d'un mode VESA    VESA

Cette fonction donne des informations sur un mode VESA sans pour autant l'activer.

Entrée :

AH 	= 4Fh

AL 	= 01h

CX 	= Numéro de code du mode VESA souhaité

ES:DI	= Pointeur FAR sur buffer Info

Sortie :

AL 	= 4Fh et

AH 	= 00h : Fonction non exécutée correctement

Remarques :

·	Cette fonction ne doit être appelée que si la sous-fonction 00h s'est exécutée correctement et ainsi l'existence d'un driver VESA a pu être signalée. En outre, seuls les modes inclus dans la liste de la fonction 00h peuvent être réclamés.

·	Le buffer Info dont l'adresse est à transmettre à la fonction doit disposer de 29 octets. Si la fonction s'exécute correctement, vous obtenez les informations suivantes :

Structure du buffer Info

Offset	Contenu	Type

00h	Flag de mode, voir plus loin	1 WORD

02h	Flags pour la première fenêtre d'accès, voir plus loin	1 BYTE

03h	Flags pour la seconde fenêtre d'accès, voir plus loin	1 BYTE

04h	Granularité en Ko à utiliser pour déplacer les deux fenêtres	1 WORD

06h	Taille des deux fenêtres d'accès en Ko	1 WORD

08h	Adresse de segment de la première fenêtre d'accès	1 WORD

0Ah	Adresse de segment de la seconde fenêtre d'accès	1 WORD

0Ch	Pointeur FAR sur routine de définition de la zone visible dans les deux fenêtres d'accès	1 DWORD

10h	Nombre d'octets occupant chacun une ligne de points dans la RAM vidéo	1 WORD

Informations en option

12h	Résolution X en points/caractères	1 WORD

14h	Résolution Y en points/caractères	1 WORD

16h	Largeur de la matrice de caractères en points	1 BYTE

17h	Hauteur de la matrice de caractères en points	1 BTYE

18h	Nombre des plans de bits	1 BYTE

19h	Nombre de bits par point écran	1 BYTE

1Ah	Nombre de blocs mémoire	1 BYTE

1Bh	Modèle de mémoire	1 BYTE

1Ch	Taille des blocs de mémoire en Ko	1 BYTE

Le flag de mode (offset 00h) indique si les champs optionnels du buffer Info ont été complétés par la fonction VESA et retourne également des informations importantes concernant le mode souhaité.

Les deux fenêtres d'accès (Offset 02h et 03h) sont décrites à travers les champs de bits suivants :

Bit 0 = 0	fenêtre non disponible

Bit 0 = 1	fenêtre disponible

Bit 1 = 0	lecture de la RAM vidéo par cette fenêtre inactive

Bit 1 = 0	lecture de la RAM vidéo par cette fenêtre active

Bit 2 = 0	Ecriture en RAM-vidéo par cette fenêtre inactive

Bit 2 = 1	Ecriture en RAM-vidéo par cette fenêtre active

Bit 3 à 7	Réservés

Le modèle de mémoire (Offset 1Bh) reproduit la structure de la RAM vidéo dans le mode vidéo souhaité. Les codes suivants sont reconnus à cet effet :

Codes de description du modèle de mémoire

Nº	Fonction

00h	Mode texte

01h	Format CGA, soit 2 ou 4 blocs de mémoire

02h	Format Hercules avec 4 blocs de mémoire

03h	Format normal EGA/VGA pour mode graphique 16 couleurs

04h	Format compacté avec deux points à 4 bits par octet

05h	Format normal EGA/VGA pour mode graphique 256 couleurs

06h-0Fh	Réservé

10h-FFh	Code spécifique au constructeur,	actuellement inutilisé


Int 10h, Fct 4Fh, Sous-Fct 02h    Activer le mode VESA    VESA

Cette fonction sert à activer un mode VESA.

Entrée :

AH 	= 4Fh

AL 	= 02h

BX 	= Numéro de code du mode souhaité

Sortie :

AL 	= 4Fh et

AH 	= 00h : Fonction exécutée correctement

Remarques :

·	Cette fonction ne doit être appelée que si la sous-fonction 00h s'est exécutée correctement et ainsi l'existence d'un driver VESA a pu être signalée. En outre, seuls les modes inclus dans la liste de la fonction 00h peuvent être initialisés.

·	Le bit 15 peut être mis dans le registre BX contenant le numéro de code du mode vidéo si la RAM vidéo ne doit pas être effacée pendant l'initialisation du mode vidéo.


Int 10h, Fct 4Fh, Sous-Fct 03h    Lire le mode en cours    VESA

Cette fonction retourne le numéro de code du mode vidéo en cours et tient compte des modes non VESA.

Entrée :

AH 	= 4Fh

AL 	= 03h

Sortie :

AL 	= 4Fh et

AH 	= 00h : Fonction exécutée correctement, dans ce cas

BX	= Numéro de code du mode en cours

Remarques :

·	Cette fonction ne doit être appelée que si la sous-fonction 00h s'est exécutée correctement et ainsi l'existence d'un driver VESA a pu être signalée.


Int 10h, Fct 4Fh, Sous-Fct 04h/00h    Lire la taille du buffer de stockage    VESA

La taille du buffer de stockage nécessaire peut être obtenue à l'aide de cette fonction en vue d'un appel ultérieur de la sous-fonction 04h/01h.

Entrée :

AH 	= 4Fh

AL 	= 04h

DL 	= 00h

CX 	= Eléments de l'état vidéo à sauvegarder

Sortie :

AL 	= 4Fh et

AH 	= 00h : Fonction exécutée correctement, dans ce cas

BX 	= Nombre des 64 blocs d'octets associés nécessaires en guise de buffer de stockage

Remarques :

·	Cette fonction doit être appelée avant la sous-fonction 04h/01h. La taille du buffer nécessaire à la sous-fonction 04h/01h peut ainsi être obtenue.

·	Lors de l'appel de la fonction, les différents bits du registre CX indiquent les éléments de l'état vidéo à sauvegarder. Dans ce cas, seul l'octet faible du registre CX est occupé par les bits suivants :

Bit 0 = 1	Statut de l'électronique vidéo

Bit 1 = 1	Variables de la zone de données BIOS

Bit 2 = 1	Registre de la table de couleurs DAC

Bit 3 = 1	Statut SuperVGA

Bit 4 à 7	Non occupé (0)


Int 10h, Fct 4Fh, Sous-Fct 04h/01h    Sauver l'état vidéo de la carte Super VGA    VESA

Après un appel préalable de la sous-fonction 04h/00h, les informations souhaitées à propos des divers éléments de l'état vidéo sont stockées dans un buffer à l'aide de cette fonction.

Entrée :

AH 	= 4Fh

AL 	= 04h

DL 	= 01h

CX 	= Eléments de l'état vidéo à sauvegarder

ES:BX	= Pointeur FAR sur le buffer de stockage

Sortie :

AL	= 4Fh et

AH	= 00h : Fonction exécutée correctement

Remarques :

·	Le buffer transmis doit indiquer la taille obtenue lors de l'appel préalable de la sous-fonction 04h/00h à travers le registre BX.

·	Lors de l'appel de la fonction, les différents bits du registre CX indiquent les éléments de l'état vidéo à stocker. Dans ce cas, seul l'octet faible du registre CX est occupé par les bits suivants :

Bit 0 = 1	Statut de l'électronique vidéo

Bit 1 = 1	Variables de la zone de données BIOS

Bit 2 = 1	Registre de la table de couleurs DAC

Bit 3 = 1	Statut SuperVGA

Bit 4 à 7	Non occupé (0)


Int 10h, Fct 4Fh, Sous-Fct 04h/02h    Restaurer l'état vidéo de la carte Super VGA    VESA

Après avoir sauvegardé l'état vidéo avec la sous-fonction 04h/01h, vous pouvez le restaurer en appelant cette fonction.

Entrée :

AH 	= 4Fh

AL 	= 04h

DL 	= 01h

CX 	= Eléments de l'état vidéo à restaurer

ES:BX	= Pointeur FAR sur l'adresse de segment du buffer de stockage

Sortie :

AL 	= 4Fh et

AH 	= 00h : Fonction exécutée correctement

Remarques :

·	Le buffer transmis doit auparavant être chargé avec les informations sur l'état vidéo à travers un appel de la sous-fonction 04h/01h.

·	Lors de l'appel de la fonction, les différents bits du registre CX montrent les éléments de l'état vidéo à restaurer. Dans ce cas, seul l'octet faible du registre CX est occupé par les bits suivants :

Bit 0 = 1	Statut de l'électronique vidéo

Bit 1 = 1	Variables de la zone de données BIOS

Bit 2 = 1	Registre de la table de couleurs DAC

Bit 3 = 1	Statut SuperVGA

Bit 4 à 7	Non occupé (0)


Int 10h, Fct 4Fh, Sous-Fct 05h/00h    Placer la fenêtre d'accès sur la RAM vidéo    VESA

Cette fonction sert à insérer une portion précise de la RAM vidéo dans l'une des deux fenêtres d'accès VESA pour qu'un programme puisse l'adresser.

Entrée :

AH 	= 4Fh

AL 	= 05h

BH 	= 00h

BL 	= Fenêtre d'accès (0 ou 1)

DX 	= Adresse de départ

Sortie :

AL 	= 4Fh et

AH 	= 00h : Fonction exécutée correctement

Remarques :

·	Dans le registre DX, l'adresse de départ doit être considérée par rapport à la granularité de la fenêtre obtenue par l'appel de la sous-fonction 01h.

·	La seconde fenêtre d'accès ne doit être réclamée que si un appel préalable de la sous-fonction 00h confirme l'existence de deux fenêtres d'accès.


Int 10h, Fct 4Fh, Sous-Fct 05h/01h    Lire la fenêtre d'accès sur la RAM vidéo    VESA

Cette fonction permet de déterminer l'état de la fenêtre d'accès sur la RAM vidéo de la carte Super VGA.

Entrée :

AH 	= 4Fh

AL 	= 05h

BH 	= 01h

BL 	= Fenêtre d'accès (0 ou 1)

Sortie :

AL 	= 4Fh et

AH 	= 00h : Fonction exécutée correctement, dans ce cas

DX 	= Adresse de départ

Remarques :

L'adresse de départ située dans le registre DX doit être considérée par rapport à la granularité de la fenêtre obtenue par l'appel de la sous-fonction 01h.


Interruption 11h

Lit la configuration du système telle qu'elle a été constatée lors de l'opération de lancement du système.

Entrée :

aucune entrée

Sortie :

AX	= la configuration

Pour le PC et le XT :

Bit 0	vaut 1 si le système dispose d'un ou plusieurs lecteurs de disquette

Bit 1	inutilisé

Bits 2 et 3	Mémoire RAM sur la carte mère

00 = 16 Ko

01 = 32 Ko

10 = 48 Ko

11 = 64 Ko

Bits 4 et 5	Mode vidéo lors du lancement du système

00 : inutilisé

01 : 40*25 car. sur carte couleur

02 : 80*25 car. sur carte couleur

03 : 80*25 car. sur carte mono

Bits 6 et 7	indiquent le nombre de lecteurs de disquette si le bit 0 vaut 1

00 = 1 lecteur de disquette

01 = 2 lecteurs de disquette

10 = 3 lecteurs de disquette

11 = 4 lecteurs de disquette

Bit 8	vaut 0 s'il y a un circuit DMA

Bits 9 à 11	Nombre de cartes RS232 connectées

Bit 12	vaut 1 si l'adaptateur de jeux est connecté

Bit 13	inutilisé

Bits 14 et 15	indiquent le nombre d'imprimantes

Pour l'AT :

Bit 0	vaut 1 si le système dispose d'un ou plusieurs lecteurs de disquette

Bit 1	vaut 1 si un coprocesseur mathématique est implanté sur le système

Bits 2 et 3	inutilisés

Bits 4 et 5	Mode vidéo lors du lancement du système

00 : inutilisé

01 : 40*25 car. sur carte couleur

02 : 80*25 car. sur carte couleur

03 : 80*25 car. sur carte mono

Bits 6 et 7	indiquent le nombre de lecteurs de disquette si le bit 0 vaut 1

00 = 1 lecteur de disquette

01 = 2 lecteurs de disquette

10 = 3 lecteurs de disquette

11 = 4 lecteurs de disquette

Bit 8	sans signification

Bits 9 à 11	Nombre de cartes RS232 connectées

Bits 12 et 13	inutilisés

Bits 14 et 15	indiquent le nombre d'imprimantes

Remarques :

·	Pour pouvoir interpréter la signification des différents bits du mot de configuration, il faut connaître le type du PC (PC/XT ou AT).

·	La taille de la mémoire indiquée dans les bits 2 et 3 du mot de configuration du PC/XT se réfère uniquement à la carte mère. L'interruption 12h permet de connaître la taille totale de la mémoire.

·	Le mode vidéo indiqué dans les bits 4 et 5 correspond au mode vidéo qui était activé lors de la mise en marche du système. Pour connaître le mode vidéo actuel, c'est d'une autre fonction, la fonction 15 de l'interruption 10h qu'il convient donc de se servir.

·	Seul le contenu du registre AX est modifié à la suite de l'appel de cette fonction.


Interruption 12h

Entrée :

aucune entrée

Sortie :

AX 	= Taille de la mémoire en Ko

Remarques :

·	Le PC et le XT ne peuvent recevoir plus de 640 Ko de RAM alors que l'AT peut encore recevoir jusqu'à 14 Mo de mémoire RAM au-delà de la limite de 1 Mo. La taille de cette mémoire supplémentaire n'est pas prise en compte dans la taille de mémoire indiquée par cette fonction. Pour connaître le volume de la mémoire au-delà de la limite de 1 Mo, vous pouvez utiliser la fonction 88h de l'interruption 15h. Cette fonction n'existe d'ailleurs que sur l'AT.

·	Seul le contenu du registre AX est modifié par l'appel de cette fonction.


Interruption 13h

Fonction 00h	Disquette : Réinitialisation du lecteur de disquette

Fonction 00h	Disque dur : Reset

Fonction 01h	Disquette : Lire l'état disquette

Fonction 01h	Disque dur : Consulter état du disque dur

Fonction 02h	Disquette : Lecture

Fonction 02h	Disque dur : Lecture

Fonction 03h	Disquette : Ecriture

Fonction 03h	Disque dur : Ecriture

Fonction 04h	Disquette : Vérification

Fonction 04h	Disque dur : Vérification

Fonction 05h	Disquette : Formatage

Fonction 05h	Disque dur : Formatage

Fonction 06h	Disque dur : Formatage XT

Fonction 07h	Disque dur : Formatage XT

Fonction 08h	Disquette : Lire le format

Fonction 08h	Disque dur : Lire le format

Fonction 09h	Disque dur : Adaptation de disques durs étrangers

Fonction 0Ah	Disque dur : Lecture de secteurs étendus

Fonction 0Bh	Disque dur : Ecriture de secteurs étendus

Fonction 0Ch	Disque dur : Déplacer tête de lecture/écriture  (> XT)

Fonction 0Dh	Disque dur : Réinitialisation

Fonction 0Eh	Disque dur : Test de lecture du contrôleur  (PS/2)

Fonction 0Fh	Disque dur : Test d'écriture du contrôleur  (PS/2)

Fonction 10h	Disque dur : Le lecteur est-il prêt ?

Fonction 11h	Disque dur : Recalibrage du lecteur

Fonction 12h	Disque dur : Test du contrôleur RAM (PS/2)

Fonction 13h	Disque dur : Test de lecteur (PS/2)

Fonction 14h	Disque dur : Test du contrôleur interne

Fonction 15h	Disquette : Lire le type de lecteur

Fonction 15h	Disque dur : Lire le type de lecteur

Fonction 16h	Disquette : Détecter un changement de disquette

Fonction 17h	Disquette : Définir le format de disquette

Fonction 18h	Disquette : Définir le format de disquette

Fonction 19h	Disque dur : Ranger les têtes de lecture


Int 13h, Fct 00h    Disquette : Réinitialisation du lecteur de disquette     BIOS

L'appel de cette fonction déclenche une réinitialisation du contrôleur de disquette ainsi que des lecteurs de disquette connectés. Il convient d'effectuer une réinitialisation (Reset) après toute opération disquette à la suite de laquelle une erreur a été signalée.

Entrée :

AH	= 00h

DL 	= 0 ou 1

Sortie :

Flag Carry = 0 : Opération exécutée, dans ce cas AH=0

Flag Carry = 1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	La valeur dans le registre DL ne sert à rien en fait car la réinitialisation est effectuée sur tous les lecteurs de disquette. Elle est cependant utilisée sur le XT et l'AT pour signaler si la réinitialisation doit concerner les lecteurs de disquette ou le disque dur.

·	Les codes d'erreur suivants peuvent se présenter :

01h :	Numéro de fonction non autorisé

02h :	Marque d'adresse non trouvée

03h :	Tentative d'écriture sur disquette protégée contre l'écriture

04h :	Secteur appelé non trouvé

08h :	Débordement DMA

09h :	Transfert de données par-delà la limite de segment

10h :	Erreur de lecture

20h :	Erreur sur le contrôleur de disque

40h :	Piste non trouvée

80h :	Erreur de Time Out, le lecteur ne réagit pas

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 00h    Disque dur : Reset     BIOS

Si vous appelez cette fonction, un Reset est effectué aussi bien sur le contrôleur de disque dur que sur les lecteurs de disque dur connectés. Il convient d'effectuer une réinitialisation après toute opération disque dur à la suite de laquelle une erreur a été signalée.

Entrée :

AH 	= 00h

DL 	= 80h ou 81h

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	La valeur dans le registre DL ne sert à rien en fait car une réinitialisation est effectuée sur tous les lecteurs de disque dur. Elle est utilisée sur le XT et sur l'AT pour distinguer si la réinitialisation doit concerner les lecteurs de disquette ou de disque dur.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 01h    Disquette : Lire l'état disquette     BIOS

Cette fonction permet de consulter l'état de la dernière opération disquette.

Entrée :

AH 	= 01h

DL 	= 0 ou 1

Sortie :

Flag Carry =0 : Opération exécutée, dans ce cas AH=0

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	La valeur dans le registre DL ne sert à rien en fait car l'état est toujours renvoyé pour le lecteur de disquette auquel il avait été accédé en dernier. Il est cependant utilisé sur le XT et l'AT pour distinguer si c'est l'état du lecteur de disquette ou du disque dur qui doit être consulté.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 01h    Disque dur : Consulter état du disque dur     BIOS

Cette fonction permet de connaître l'état de la dernière opération sur disque dur.

Entrée :

AH 	= 01h

DL 	= 80h ou 81h

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	La valeur dans le registre DL ne sert à rien en fait car l'état est toujours renvoyé pour le disque dur auquel il a été accédé en dernier lieu. Elle est utilisée sur le XT et sur l'AT pour distinguer si c'est l'état d'un lecteur de disquette ou de disque dur qui doit être obtenu.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 02h    Disquette : Lecture     BIOS

Cette fonction permet de lire un ou plusieurs secteurs sur la disquette pour les transférer dans un buffer.

Entrée :

AH 	= 02h

DL 	= Numéro du lecteur de disquette

DH 	= Numéro de la face de disquette (0 ou 1)

CH 	= Numéro de piste

CL 	= Numéro de secteur

AL 	= Nombre de secteurs à lire

ES 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Opération exécutée, dans ce cas AH=0

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le nombre de secteurs à lire, qui est spécifié dans le registre AL, est limité par le fait qu'un seul appel de fonction ne permet de lire que des secteurs consécutifs sur une même piste d'une même face de disquette.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 02h    Disque dur : Lecture     BIOS

Cette fonction permet de lire un ou plusieurs secteurs sur le disque dur, pour les transférer dans un buffer.

Entrée :

AH 	= 02h

DL 	= Numéro de disque dur (80h ou 81h)

DH 	= Numéro de tête de lecture/écriture

CH 	= Numéro de cylindre

CL 	= Numéro de secteur

AL 	= Nombre de secteurs à lire (1 - 128)

ES 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Les 8 bits du registre CH ne permettant d'adresser que 256 cylindres, les bits 6 et 7 du numéro de secteur (registre CL) représentent les bits 8 et 9 du numéro de cylindre et permettent ainsi d'adresser jusqu'à 1023 cylindres.

·	Si plusieurs secteurs sont lus et que le dernier secteur d'un cylindre est atteint, la lecture se poursuit sur le premier secteur du même cylindre sur la prochaine tête de lecture/écriture. Une fois la dernière tête de lecture/écriture atteinte, la lecture se poursuit sur le premier secteur du cylindre suivant sur la première tête de lecture/écriture.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 03h    Disquette : Ecriture     BIOS

Cette fonction permet d'écrire un ou plusieurs secteurs sur la disquette. Les données à transférer sont tirées d'un buffer.

Entrée :

AH 	= 03h

DL 	= Numéro du lecteur de disquette

DH 	= Numéro de la face de disquette (0 ou 1)

CH 	= Numéro de piste

CL 	= Numéro de secteur

AL 	= Nombre de secteurs à écrire

ES 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Opération exécutée, dans ce cas AH=0

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le nombre de secteurs à écrire, qui est spécifié dans le registre AL, est limité par le fait qu'un seul appel de fonction ne permet d'écrire que sur des secteurs consécutifs sur une même piste d'une même face de disquette.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 03h    Disque dur : Ecriture     BIOS

Cette fonction permet d'écrire sur un ou plusieurs secteurs du disque dur. Les données à transférer sont tirées d'un buffer mis en place dans le programme d'appel.

Entrée :

AH 	= 03h

DL 	= Numéro de disque dur (80h ou 81h)

DH 	= Numéro de tête de lecture/écriture

CH 	= Numéro de cylindre

CL 	= Numéro de secteur

AL 	= Nombre de secteurs à écrire (1 - 128)

ES 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Les 8 bits du registre CH ne permettant d'adresser que 256 cylindres, les bits 6 et 7 du numéro de secteur (registre CL) représentent les bits 8 et 9 du numéro de cylindre et permettent ainsi d'adresser jusqu'à 1023 cylindres.

·	Si on écrit sur plusieurs secteurs et que le dernier secteur d'un cylindre est atteint, l'écriture se poursuit sur le premier secteur du même cylindre sur la prochaine tête de lecture/écriture. Une fois la dernière tête de lecture/écriture atteinte, l'écriture se poursuit sur le premier secteur du cylindre suivant sur la première tête de lecture/écriture.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 04h    Disquette : Vérification     BIOS

Cette fonction permet de comparer un ou plusieurs secteurs de la disquette avec les données d'un buffer en mémoire. Cela permet par exemple, à la suite d'une instruction d'écriture, de vérifier si les données ont été correctement transférées sur la disquette.

Entrée :

AH 	= 04h

DL 	= Numéro du lecteur de disquette

DH 	= Numéro de la face de disquette (0 ou 1)

CH 	= Numéro de piste

CL 	= Numéro de secteur

AL 	= Nombre de secteurs à vérifier

ES 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Opération exécutée, dans ce cas AH=0

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le nombre de secteurs à vérifier, qui est spécifié dans le registre AL, est limité par le fait qu'un seul appel de fonction ne permet de vérifier que des secteurs consécutifs sur une même piste d'une même face de disquette.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 04h    Disque dur : Vérification     BIOS

Cette fonction permet de vérifier un ou plusieurs secteurs du disque dur. Contrairement à la fonction disquette équivalente, cette fonction ne compare cependant pas les données du disque dur avec des données en mémoire. 4 octets de contrôle sont en effet systématiquement sauvegardés avec chaque secteur. Ils permettent ainsi de vérifier le contenu d'un secteur, même bien après qu'il ait été sauvegardé.

Entrée :

AH 	= 04h

DL 	= Numéro de disque dur (80h ou 81h)

DH 	= Numéro de tête de lecture/écriture

CH 	= Numéro de cylindre

CL 	= Numéro de secteur

AL 	= Nombre de secteurs à vérifier (1 - 128)

ES 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Les 8 bits du registre CH ne permettant d'adresser que 256 cylindres, les bits 6 et 7 du numéro de secteur (registre CL) représentent les bits 8 et 9 du numéro de cylindre et permettent ainsi d'adresser jusqu'à 1023 cylindres.

·	Si on vérifie plusieurs secteurs et que le dernier secteur d'un cylindre est atteint, la vérification se poursuit sur le premier secteur du même cylindre sur la prochaine tête de lecture/écriture. Une fois la dernière tête de lecture/écriture atteinte, la vérification se poursuit sur le premier secteur du cylindre suivant sur la première tête de lecture/écriture.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 05h    Disquette : Formatage     BIOS

En appelant cette fonction, vous pouvez formater une piste complète d'une face de la disquette. Il faut communiquer à la fonction, à cet effet, l'adresse d'un buffer contenant certaines informations sur les secteurs à formater.

Entrée :

AH 	= 05h

DL 	= Numéro du lecteur de disquette

DH 	= Numéro de la face de disquette (0 ou 1)

CH 	= Numéro de piste

AL 	= Nombre de secteurs à vérifier

ES 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Opération exécutée, dans ce cas AH=0

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le nombre de secteurs à formater, qui est spécifié dans le registre AL, est limité par le fait qu'un seul appel de fonction ne permet de formater que des secteurs consécutifs sur une même piste d'une même face de disquette.

·	En ce qui concerne les AT et les systèmes équipés d'un processeur 80386 ou 80486, il faut appeler la fonction 17h avant d'appeler cette fonction pour déterminer le type de la disquette à formater.

·	Le buffer dont l'adresse est fournie dans ES:BX contient pour chaque secteur à formater une entrée composée de 4 octets consécutifs :

1. Numéro de piste

2. Numéro de face

3. Numéro logique du secteur

4. Nombre d'octets dans ce secteur

0 : 128 octets

1 : 256 octets

2 : 512 octets (Standard PC)

3 : 1024 octets

Les numéros de piste et de face doivent être identiques pour tous les secteurs alors que le numéro de secteur doit être au contraire différent pour chacun. Ce numéro de secteur peut être décalé par rapport au numéro de secteur physique.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 05h    Disque dur : Formatage     BIOS

Cette fonction permet de formater un cylindre complet, par exemple 17 secteurs du disque dur. La fonction a cependant besoin pour cela que le programme d'appel lui communique dans un buffer un certain nombre d'informations supplémentaires.

Entrée :

AH 	= 05h

DL 	= Numéro de disque dur (80h ou 81h)

DH 	= Numéro de tête de lecture/écriture

CH 	= Numéro de cylindre

CL 	= Numéro de secteur (1 en général)

AL 	= Nombre de secteurs / cylindre

ES 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Les 8 bits du registre CH ne permettant d'adresser que 256 cylindres, les bits 6 et 7 du numéro de secteur (registre CL) représentent les bits 8 et 9 du numéro de cylindre et permettent ainsi d'adresser jusqu'à 1023 cylindres.

·	Comme c'est toujours un cylindre complet qui est formaté à la fois, le premier secteur à formater, dans le registre CL, est toujours le secteur 1. Pour la même raison, le nombre de secteurs à formater, dans le registre AL, est souvent 17 car les disques durs standard travaillent avec 17 secteurs par cylindre.

·	Le buffer dont l'adresse est fournie en ES:BX doit avoir une taille de 512 octets au moins. Les 17 secteurs à formater d'un cylindre n'occupent toutefois que les 34 premiers octets de ce buffer. Les informations correspondant à chaque secteur physique sont chaque fois stockées dans deux octets consécutifs. Le premier octet n'a aucune signification avant appel de la fonction mais indique après l'appel de fonction si le secteur a pu être formaté (00h) ou non (80h). Le second octet spécifie le numéro de secteur logique. Il doit être inscrit dans le buffer par le programme d'appel avant appel de la fonction.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 06h    Disque dur : Formatage XT     BIOS

Auparavant, cette fonction servait à formater les disques durs XT. A l'heure actuelle, elle ne joue aucun rôle dans la programmation.


Int 13h, Fct 07h    Disque dur : Formatage XT     BIOS

Auparavant, cette fonction servait à formater les disques durs XT. A l'heure actuelle, elle ne joue aucun rôle dans la programmation.


Int 13h, Fct 08h    Disquette : Lire le format    BIOS (> AT)

Cette fonction permet de déterminer la capacité d'une unité de disquettes et le format des disquettes. On se réfère ici aux capacités physiques de l'unité et non au format de la disquette qui y est insérée.

Entrée :

AH	= 08h

DL	= Numéro de l'unité de disquettes

Sortie :

Flag Carry	= 0 : Opération exécutée, dans ce cas

AH	= 0

BL	= Type de l'unité

01h = 5,25", 360 Ko

02h = 5,25", 1,2 Mo

03h = 3,5", 720 Ko

04h = 3,5", 1,44 Mo

DH	= Numéro de tête (toujours 1)

CH	= Nombre de pistes

CL	= Nombre de secteurs

Flag Carry	= 1 : Erreur, dans ce cas AH = Code d'erreur

Remarques :

·	Le contenu des registres SI, BP et des registres de segment CS, DS et SS n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 08h    Disque dur : Lire le format     BIOS (XT AT)

En appelant cette fonction, un programme peut connaître le format ou les caractéristiques du disque dur.

Entrée :

AH 	= 08h

DL 	= Numéro de disque dur (80h ou 81h)

Sortie :

Flag Carry =0 : Opération exécutée, dans ce cas

DL = Nombre de disques durs connectés

DH = Nombre de têtes de lecture/écriture (0=première tête)

CH = Nombre de cylindres

CL = Nombre de secteurs

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Les 8 bits du registre CH ne permettant d'adresser que 256 cylindres, les bits 6 et 7 du numéro de secteur (registre CL) représentent les bits 8 et 9 du numéro de cylindre et permettent ainsi d'adresser jusqu'à 1023 cylindres.

·	La formule suivante permet de calculer la capacité totale du disque dur en octets :

Capacité = Têtes * Cylindres * Secteurs * 512

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 09h    Disque dur : Adaptation de disques durs étrangers    BIOS

Cette fonction permet d'adapter des lecteurs étrangers de façon à ce que les fonctions du BIOS puissent y accéder.

Entrée :

AH 	= 09h

DL 	= Numéro de disque dur (80h ou 81h)

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Le BIOS tire les informations nécessaires sur le disque dur à adapter (nombre de têtes de lecture/écriture, etc...) d'une table. L'adresse de cette table figure dans le vecteur d'interruption 41h pour le disque dur numéro 80h et dans le vecteur 46h pour le disque dur numéro 81h. C'est sous ces vecteurs que vous trouverez de plus amples renseignements sur cette table.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 0Ah    Disque dur : Lecture de secteurs étendus    BIOS

Cette fonction permet de lire un ou plusieurs secteurs sur le disque dur pour les transférer dans un buffer. Outre les 512 octets que comporte le secteur, seront également lus les 4 octets de contrôle (ECC) qui sont stockés à la fin de chaque secteur.

Entrée :

AH 	= 0Ah

DL 	= Numéro de disque dur (80h ou 81h)

DH 	= Numéro de tête de lecture/écriture

CH 	= Numéro de cylindre

CL 	= Numéro de secteur

AL 	= Nombre de secteurs à lire (1 - 127)

ES 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Les 4 octets de contrôle sont normalement calculés par le contrôleur mais ici il les tire directement du buffer.

·	Les 8 bits du registre CH ne permettant d'adresser que 256 cylindres, les bits 6 et 7 du numéro de secteur (registre CL) représentent les bits 8 et 9 du numéro de cylindre et permettent ainsi d'adresser jusqu'à 1023 cylindres.

·	Si on lit plusieurs secteurs et que le dernier secteur d'un cylindre est atteint, la lecture se poursuit sur le premier secteur du même cylindre sur la prochaine tête de lecture/écriture. Une fois la dernière tête de lecture/écriture atteinte, la lecture se poursuit sur le premier secteur du cylindre suivant sur la première tête de lecture/écriture.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 0Bh    Disque dur : Ecriture de secteurs étendus    BIOS

Cette fonction permet d'écrire un ou plusieurs secteurs sur le disque dur provenant d'un buffer. Outre les 512 octets que comporte le secteur, seront également écrits les 4 octets de contrôle (ECC), tirés du buffer, qui sont stockés à la fin de chaque secteur.

Entrée :

AH 	= 0Bh

DL 	= Numéro de disque dur (80h ou 81h)

DH 	= Numéro de tête de lecture/écriture

CH 	= Numéro de cylindre

CL 	= Numéro de secteur

AL 	= Nombre de secteurs à écrire (1 - 127)

ES 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Les 4 octets de contrôle sont normalement calculés par le contrôleur mais ici il les tire directement du buffer.

·	Les 8 bits du registre CH ne permettant d'adresser que 256 cylindres, les bits 6 et 7 du numéro de secteur (registre CL) représentent les bits 8 et 9 du numéro de cylindre et permettent ainsi d'adresser jusqu'à 1023 cylindres.

·	Si on écrit sur plusieurs secteurs et que le dernier secteur d'un cylindre est atteint, l'écriture se poursuit sur le premier secteur du même cylindre sur la prochaine tête de lecture/écriture. Une fois la dernière tête de lecture/écriture atteinte, l'écriture se poursuit sur le premier secteur du cylindre suivant sur la première tête de lecture/écriture.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 0Ch    Disque dur : Déplacer tête de lecture/écriture     BIOS (> XT)

Cette fonction permet de positionner l'une des têtes de lecture/écriture du disque dur sur un cylindre donné. Cette option s'avère particulièrement utile lors d'un transport pour éviter que la tête ne vienne s'écraser sur un cylindre utilisé.

Entrée :

AH 	= 0Ch

DL 	= Numéro du lecteur de disque (80h ou 81h)

DH 	= Numéro de tête de lecture/écriture

CH 	= Numéro du cylindre

CL 	= Numéro du secteur

Sortie :

Flag Carry = 0 : Opération exécutée

Flag Carry = 1 : Erreur, dans ce cas AH = Code d'erreur.

Remarques :

·	Le premier lecteur de disque porte le numéro 80h, le second le numéro 81h.

·	Comme les 8 bits du registre CH ne permettent d'adresser que 256 cylindres, les bits 6 et 7 constituent le numéro de secteur (registre CL), les bits 8 et 9 le numéro de cylindre et permettent ainsi d'adresser jusqu'à 1023 cylindres.

·	Lors des opérations de lecture/écriture, la tête de lecture/écriture se positionne automatiquement, si bien qu'il n'est pas nécessaire d'appeler préalablement cette fonction.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 0Dh    Disque dur : Réinitialisation    BIOS

Lorsque cette fonction est appelée, une réinitialisation est opérée sur le contrôleur de disque dur ainsi que sur les disques durs connectés. Il convient d'effectuer une réinitialisation après toute opération sur disque dur à la suite de laquelle une erreur a été signalée.

Entrée :

AH 	= 0Dh

DL 	= (80h ou 81h)

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	La valeur dans le registre DL ne sert à rien en fait car la réinitialisation est systématiquement opérée sur tous les disques durs connectés. Elle est cependant utilisée, sur le XT et l'AT, pour distinguer si la réinitialisation doit concerner les lecteurs de disquette ou le disque dur.

·	Cette fonction est identique à la fonction 0.

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 0Eh    Disque dur : Test de lecture du contrôleur     BIOS (PS/2)

Cette fonction effectue un test interne de la transmission des données entre le contrôleur et le CPU dans le cas des ordinateurs PS/2 uniquement. Elle n'est pas conçue pour être appelée par un programme d'application.


Int 13h, Fct 0Fh    Disque dur : Test d'écriture du contrôleur     BIOS (PS/2)

Cette fonction effectue un test interne de la transmission des données entre le contrôleur et le CPU dans le cas des ordinateurs PS/2 uniquement. Elle n'est pas conçue pour être appelée par un programme d'application.


Int 13h, Fct 10h    Disque dur : Le lecteur est-il prêt ?     BIOS

Cette fonction permet de déterminer si le lecteur de disque dur est prêt, c'est-à-dire si la dernière opération est déjà achevée.

Entrée :

AH 	= 10h

DL 	= (80h ou 81h)

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 11h    Disque dur : Recalibrage du lecteur     BIOS

Après apparition d'une erreur (surtout s'il s'agit d'une erreur de lecture ou écriture), il est conseillé d'opérer non seulement une réinitialisation mais aussi un recalibrage du disque dur.

Entrée :

AH 	= 11h

DL 	= (80h ou 81h)

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 12h    Disque dur : Test du contrôleur RAM    BIOS (PS/2)

Cette fonction n'effectue un test interne du contrôleur RAM que pour les ordinateurs PS/2. Elle n'est donc pas conçue pour être appelée par un programme d'application.


Int 13h, Fct 13h    Disque dur : Test de lecteur    BIOS (PS/2)

Cette fonction n'effectue un test interne du contrôleur du lecteur que pour les ordinateurs PS/2. Elle n'est donc pas conçue pour être appelée par un programme d'application.


Int 13h, Fct 14h        Disque dur : Test du contrôleur interne    BIOS

Après appel de cette fonction, le contrôleur disque est soumis à un test interne.

Entrée :

AH = 14h

DL = 80h ou 81h

Sortie :

Flag Carry = 0 : Opération exécutée

Flag Carry = 1 : Erreur, dans ce cas AH=Code d'erreur

Le premier lecteur de disque porte le numéro 80h, le deuxième 81h.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

Cette fonction ne modifie pas le contenu des registres BX, CX, DX, SI, DI, BP et le registre de segment. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 15h    Disquette : Lire le type de lecteur    BIOS (> AT)

L'AT soutient non seulement les anciens lecteurs 320/360 Ko mais aussi les nouveaux lecteurs 1,2 Mo. Ces nouveaux lecteurs disposent, contrairement aux précédents, de la possibilité de détecter un changement de disquette. Cette fonction vous permet de tester si le lecteur utilisé dispose de cette possibilité.

Entrée :

AH	= 15h

DL 	= Numéro du lecteur de disquette (0 ou 1)

Sortie :

Flag Carry =0 : Opérations exécutée, dans ce cas

AH	=type du lecteur

0 : Périphérique absent

1 : Lecteur ne détecte pas les changements de disquette

2 : Lecteur détecte les changements de disquette

3 : Disque dur (voir Remarques)

1 : Erreur

Remarques :

·	Il se peut que l'unité testée soit un disque dur car l'AT comporte un contrôleur qui peut gérer, au choix, 2 lecteurs de disquette et un disque dur ou bien un lecteur de disquette et 2 disques durs. Dans ce dernier cas, le premier disque dur porte le numéro 1 et peut donc être testé à l'aide de cette fonction.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 15h    Disque dur : Lire le type de lecteur     BIOS (> AT)

L'AT contient un contrôleur qui peut gérer aussi bien des disques durs que des lecteurs de disquette. Il peut gérer soit 2 lecteurs de disquette et un disque dur, soit 2 disques durs et un lecteur de disquette. Cette fonction vous permet donc de déterminer si les périphériques portant les numéros 80h et 81h sont des lecteurs de disquette ou de disque dur.

Entrée :

AH 	= 15h

DL 	= Numéro de lecteur (80h ou 81h)

Sortie :

Flag Carry =0 : Opération exécutée, dans ce cas AH = 03h

CX	= Mot de poids fort du nombre de secteurs

DX 	= Mot de poids faible du nombre de secteurs

Flag Carry =1 : Erreur, pas de lecteur de disque dur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	La capacité du disque dur en octets se calcule d'après la formule ((CX*65536) + DX) * 512

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 16h    Disquette : Détecter un changement de disquette     BIOS (> AT)

L'AT soutient non seulement les anciens lecteurs 320/360 Ko mais aussi les nouveaux lecteurs 1,2 Mo. Ces nouveaux lecteurs disposent, contrairement aux précédents, de la possibilité de détecter un changement de disquette. Si vous disposez d'un lecteur de disquette de ce type, cette fonction vous permet de tester si un changement de disquette est intervenu depuis le dernier accès à la disquette.

Entrée :

AH 	= 16h

DL 	= Numéro du lecteur de disquette (0 ou 1)

Sortie :

AH 	= 0 : Pas de changement de disquette

AH 	= 6 : Disquette changée depuis le dernier accès disquette

Remarques :

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 17h    Disquette : Définir le format de disquette     BIOS (> AT)

Cette fonction permet de configurer un lecteur par rapport à un format de disquette précis. Cette fonction est déjà utilisée dans les versions 3.0 et 3.1 de DOS, mais à partir de la version 3.2, cette tâche est remplie par la fonction 18h. Les programmes doivent également éviter cette fonction d'autant qu'elle ne convient pas aux lecteurs 3,5" qui se sont largement répandus dans le monde PC.

Entrée :

AH 	= 17h

AL 	= Format

1:	formater en 320/360 Ko sur un lecteur 320/360 Ko

2:	formater en 320/360 Ko sur un lecteur 1,2 Mo

3:	formater en 1,2 Mo sur un lecteur 1,2 Mo

4:	formater en 720 Ko sur un lecteur 720 Ko

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur

Remarques :

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 18h    Disquette : Définir le format de disquette     BIOS (> AT)

Cette fonction remplace la fonction 17h. Elle doit être appelée pour définir le format des disquettes. Mais elle ne doit être appelée qu'après avoir inséré une disquette dans le lecteur spécifié, sinon elle signale une erreur.

Entrée :

AH 	= 18h

CH 	= Nombre de pistes

CL 	= Nombre de secteurs

DL 	= Numéro du lecteur (0 ou 1)

Sortie :

Flag Carry = 0 : Opération exécutée

Flag Carry = 1 : Erreur

Remarques :

·	Dans ce cas, cette fonction doit être appelée avant le premier appel de la fonction de formatage 05h pour que le BIOS puisse être configuré au format de disquette souhaité.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 13h, Fct 19h    Disque dur : Ranger les têtes de lecture    BIOS

Cette fonction permet de parquer les têtes du disque dur avant un transport.

Entrée :

AH 	= 19h

DL 	= (80h ou 81h)

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Interruption 14h

Fonction 00h	Interface série : Initialisation

Fonction 01h	Interface série : Emission de caractères

Fonction 02h	Interface série : Réception d'un caractère

Fonction 03h	Interface série : Tester état


Int 14h, Fct 00h    Interface série : Initialisation    BIOS

Cette fonction permet d'initialiser et de configurer une interface série connectée sur le PC en définissant la parité de la transmission ainsi que le nombre de bits d'arrêt et la vitesse de transmission en bauds.

Entrée :

AH 	= 00h

DX 	= Numéro d'interface série (la première interface série porte le numéro 0)

AL 	= Paramètres de configuration

Bits 0-1 : 	largeur de données

10(b) = 7 bits

11(b) = 8 bits

Bit 2 : 	Nombre de bits d'arrêt

0(b) = 1 bit d'arrêt

1(b) = 2 bits d'arrêt

Bit 3-4 : 	Contrôle de parité

00(b) = aucun

01(b) = impaire

11(b) = paire

Bits 5-7 : 	Vitesse de transmission

000(b) = 110 bauds

001(b) = 150 bauds

010(b) = 300 bauds

011(b) = 600 bauds

100(b) = 1200 bauds

101(b) = 2400 bauds

110(b) = 4800 bauds

111(b) = 9600 bauds

Sortie :

AH 	= Etat de l'interface série

Bit 0 :	Données prêtes

Bit 1 :	Débordement

Bit 2 :	Erreur de parité

Bit 3 :	Erreur de protocole

Bit 4 :	 Break détecté

Bit 5 :	Registre d'attente de transmission vide

Bit 6 :	Registre de décalage de transmission vide

Bit 7 :	Time Out (Périphérique ne répond pas)

AL 	= Etat du modem

Bit 0 :	(Delta) Modem prêt à émettre

Bit 1 :	(Delta) Modem activé

Bit 2 :	(Delta) Téléphone sonne

Bit 3 :	(Delta) Liaison avec modem récepteur établie

Bit 4 :	Modem prêt à émettre

Bit 5 :	Modem activé

Bit 6 :	Téléphone sonne

Bit 7 :	Liaison avec modem récepteur établie

Remarques :

·	L'interface série appelée COM1 par le DOS porte le numéro 0, COM2 le numéro 1.

·	Les bits Delta montrent la modification de l'état en cours par rapport au dernier appel de la fonction. Si un bit Delta est posé, cela signifie que l'état correspondant a changé entre-temps.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 14h, Fct 01h    Interface série : Emission de caractères    BIOS

Cette fonction est appelée pour envoyer des caractères à travers une interface série.

Entrée :

AH = 	01h

DX = 	Numéro d'interface série (la première interface série porte le numéro 0)

AL = 	Code du caractère à transmettre

Sortie :

AH :

Bit 7 = 0 : Caractère a été transmis

Bit 7 = 1 : Erreur, dans ce cas :

Bits 0 à 6 = 	Etat de l'interface série

Bit 0 : Données prêtes

Bit 1 : Débordement

Bit 2 : Erreur de parité

Bit 3 : Erreur de protocole

Bit 4 : Break détecté

Bit 5 : Registre d'attente de transmission vide

Bit 6 : Registre de décalage de transmission vide

Remarques :

·	L'interface série appelée COM1 par le DOS porte le numéro 0, COM2 le numéro 1.

·	Si le bit 7 du registre AH est réglé après l'appel de la fonction, on est en présence d'une erreur Time Out (dépasseement de délai). Les bits restants spécifient alors avec précision la cause de l'erreur.

·	Le contenu des registres AL, BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 14h, Fct 02h    Interface série : Réception d'un caractère    BIOS

Reçoit un caractère de l'interface série.

Entrée :

AH 	= 02h

DX 	= Numéro d'interface série (la première interface série porte le numéro 0)

Sortie :

AH : 	Bit 7 = 0 : Caractère a été reçu, dans ce cas : AL = Caractère reçu

Bit 7 = 1 : Erreur, dans ce cas :

Bits 0-6 :	Etat de l'interface série

Bit 0 :	Données prêtes

Bit 1 :	Débordement

Bit 2 :	Erreur de parité

Bit 3 :	Erreur de protocole

Bit 4 :	Break détecté

Bit 5 :	Registre d'attente de transmission vide

Bit 6 :	Registre de décalage de transmission vide

Remarques :

·	L'interface série appelée COM1 par le DOS porte le numéro 0, COM2 le numéro 1.

·	Il convient de n'appeler cette fonction qu'après que la fonction 3 ait permis de constater qu'un caractère était prêt à être reçu.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 14h, Fct 03h    Interface série : Tester état    BIOS

Teste l'état de l'interface série et du modem éventuellement connecté.

Entrée :

AH 	= 03h

DX 	= Numéro d'interface série (la première interface série porte le numéro 0)

Sortie :

AH 	= Etat de l'interface série

Bit 0 :	Données prêtes

Bit 1 :	Débordement

Bit 2 :	Erreur de parité

Bit 3 :	Erreur de protocole

Bit 4 :	Break détecté

Bit 5 :	Registre d'attente de transmission vide

Bit 6 :	Registre de décalage de transmission vide

Bit 7 :	Time Out (Périphérique ne répond pas)

AL 	= Etat du modem

Bit 0 :	(Delta) Modem prêt à émettre

Bit 1 :	(Delta) Modem activé

Bit 2 :	(Delta) Téléphone sonne

Bit 3 :	(Delta) Liaison avec modem récepteur établie

Bit 4 :	Modem prêt à émettre

Bit 5 :	Modem activé

Bit 6 :	Téléphone sonne

Bit 7 :	Liaison avec modem récepteur établie

Remarques :

·	L'interface série appelée COM1 par le DOS porte le numéro 0, COM2 le numéro 1.

·	Cette fonction doit être appelée avant d'appeler la fonction 2 (Réception de caractères) pour déterminer si un caractère est prêt à être reçu. Dans ce cas, le bit 0 du registre AH vaut 1.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Interruption 15h

Fonction 83h	Définir un flag après délai

Fonction 84h, Sous-Fct 0	Test des boutons de tir de joystick

Fonction 84h, Sous-Fct 1	Test de la position du joystick

Fonction 85h	Etat de la touche SyReq actionnée

Fonction 86h	Attente

Fonction 87h	Déplacement de bloc mémoire

Fonction 88h	Lire la taille de mémoire étendue

Fonction 89h	Passage en mode protégé


Int 15h, Fct 83h    Définir un flag après délai     BIOS (> AT)

L'appel de cette fonction a pour effet de fixer sur 1 le bit 7 d'un flag spécifié par le programme d'appel, au bout d'un délai indiqué en microsecondes.

Entrée :

AH 	= 83h

ES 	= Adresse de segment du flag

BX 	= Adresse d'offset du flag

CX 	= Mot fort du délai exprimé en microsecondes

DX 	= Mot faible du délai exprimé en microsecondes

Sortie :

Aucune

Remarques :

·	Une microseconde correspond à un millionième de seconde.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 15h, Fct 84h, Sous-Fct 0    Test des boutons de tir de joystick    BIOS (> AT)
Int 15h, Fct 84h, Sous-Fct 0    Test des boutons de tir du joystick    BIOS (> AT)

Si un adaptateur de jeux avec les joysticks correspondants est connecté sur le PC, l'état des boutons Feu peut être testé à l'aide de cette fonction.

Entrée :

AH 	= 84h

DX 	= 0

Sortie :

Flag Carry =1 : Pas d'adaptateur de jeux connecté

Flag Carry =0 : Adaptateur de jeux présent, dans ce cas

AL =	Etat des boutons Feu

Bit 7 = 1 : Premier bouton Feu du premier joystick enfoncé

Bit 6 = 1 : Second bouton Feu du premier joystick enfoncé

Bit 5 = 1 : Premier bouton Feu du second joystick enfoncé

Bit 4 = 1 : Second bouton Feu du second joystick enfoncé

Remarques :

·	La position des joysticks peut être testée à l'aide de la sous-fonction 1.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 15h, Fct 84h, Sous-Fct 1    Test de la position du joystick    BIOS (> AT)

Si un adaptateur de jeux avec les joysticks correspondants est connecté sur le PC, la position des joysticks peut être testée à l'aide de cette fonction.

Entrée :

AH 	= 84h

DX 	= 1

Sortie :

Flag Carry =1 : Pas d'adaptateur de jeux connecté

Flag Carry =0 : Adaptateur de jeux présent, dans ce cas

AX = Position X du premier joystick

BX = Position Y du premier joystick

CX = Position X du second joystick

DX = Position Y du second joystick

Remarques :

·	L'état des boutons Feu peut être testé à l'aide de la sous-fonction 0.

·	Le contenu des registres SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 15h, Fct 85h    Etat de la touche SyReq actionnée    BIOS (> AT)

Si la touche SysReq est enfoncée ou relâchée, cette fonction sera appelée par la routine du clavier.

Entrée :

AH 	= 85h

AL 	= 0 : Touche a été enfoncée

AL 	= 1 : Touche a été relâchée

Sortie :

aucune

Remarques :

·	Cette fonction n'est pas conçue pour être appelée directement par un programme d'application mais elle peut être redirigée par un programme d'application sur une routine de ce programme, de façon à ce que le fait d'actionner la touche SysReq soit enregistré et entraîne les actions appropriées.


Int 15h, Fct 86h    Attente    BIOS (> AT)

Après appel de cette fonction, le contrôle n'est rendu au programme d'appel qu'une fois écoulé un délai déterminé.

Entrée :

AH 	= 86h

CX 	= Mot de poids fort de la pause en microsecondes

DX 	= Mot de poids faible de la pause en microsecondes

Sortie :

aucune

Remarques :

·	Une microseconde correspond à un millionième de seconde.

·	Le contenu des registres BX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 15h, Fct 87h    Déplacement de bloc mémoire    BIOS (> AT)

Cette fonction permet de déplacer un nombre déterminé de cellules de mémoire entre la RAM sous la limite de 1 Mo et la RAM située au-dessus de cette limite.

Entrée :

AH 	= 87h

CX 	= Nombre de mots à transférer

ES 	= Adresse de segment de la GDT (table générale des descripteurs)

SI 	= Adresse d'offset de la GDT

Sortie :

Flag Carry =0 :	aucune erreur

Flag Carry =1 :	Erreur, dans ce cas

AH = 1 :	Erreur de parité de la RAM

AH = 2 :	GDT incorrecte lors d'appel de fonction

AH = 3 :	Mode protégé n'a pu être initialisé

Remarques :

·	Seuls des mots, et non des octets isolés, peuvent être transférés.

·	64 Ko au maximum peuvent être transférés. La valeur dans le registre CX ne doit donc pas être supérieure à 8000h.

·	Toutes les interruptions sont désactivées pendant le transfert du bloc de mémoire.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 15h, Fct 88h    Lire la taille de mémoire étendue    BIOS (> AT)

Cette fonction permet de déterminer la taille de la mémoire installée au-delà de la limite de 1 Mo.

Entrée :

AH 	= 88h

Sortie :

AX 	= Taille de la mémoire

Remarques :

·	Le paramètre dans le registre AX est exprimé en Ko.

·	La taille de la mémoire sous la limite de 1 Mo peut être lu à l'aide de l'interruption 12h.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 15h, Fct 89h    Passage en mode protégé     BIOS (> AT)

Après appel de cette fonction, le processeur 80286 est en mode protégé.

Entrée :

AH 	= 89h

Sortie :

aucune

Remarques :

·	Cette fonction ne doit être appelée que si vous connaissez bien le fonctionnement du processeur en mode protégé car tout emploi inconsidéré de cette fonction peut aisément entraîner un plantage du système.


Interruption 16h

Fonction 00h	Clavier : Lire un caractère

Fonction 01h	Clavier : Contenu du buffer clavier

Fonction 02h	Clavier : Tester l'état du clavier

Fonction 03h	Clavier : Définir la fréquence de répétition

Fonction 05h	Clavier : Simuler l'appui sur une touche

Fonction 10h	Clavier : Test de claviers étendus

Fonction 11h	Clavier : Test de claviers étendus


Int 16h, Fct 00h    Clavier : Lire un caractère    BIOS

Cette fonction lit un caractère dans le buffer clavier. Si aucun caractère n'y est stocké, la fonction attend qu'un caractère ait été entré. Le caractère lu est retiré du buffer clavier.

Entrée :

AH 	= 00h

Sortie :

AL 	= 0 : Code clavier étendu, dans ce cas :

AH = Code clavier étendu différent de 0

Touche normale actionnée, dans ce cas

AL = Code ASCII de la touche

AH = Code clavier de la touche

Remarques :

·	Le code ASCII d'un caractère est défini indépendamment de tel ou tel modèle de clavier, alors que le code clavier ne s'applique que sur le type de clavier connecté sur le PC.

·	Le contenu des registres CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 16h, Fct 01h    Clavier : Contenu du buffer clavier    BIOS

Cette fonction détermine si un caractère figure dans le buffer du clavier. Si c'est le cas, elle renvoie cette fonction à la fonction d'appel. Le caractère n'est toutefois pas retiré du buffer clavier, de sorte qu'il peut être à nouveau lu lors d'un appel consécutif de la fonction 1 ou 0. Dans tous les cas, la fonction revient au programme d'appel immédiatement après avoir été appelée.

Entrée :

AH 	= 01h

Sortie :

Flag Zéro = 1 : Aucun caractère dans le buffer clavier

Flag Zéro = 0 : Caractère présent, dans ce cas :

AL = 0 : Code clavier étendu, dans ce cas

AH = Code clavier étendu différent de 0

Touche normale actionnée, dans ce cas

AL = Code ASCII de la touche

AH = Code clavier de la touche

Remarques :

·	Le code ASCII d'un caractère est défini indépendamment de tel ou tel modèle de clavier, alors que le code clavier ne s'applique que sur le type de clavier connecté sur le PC.

·	Le contenu des registres CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 16h, Fct 02h    Clavier : Tester l'état du clavier     BIOS

Cette fonction permet de consulter la position de certaines touches de commande ainsi que l'état de différents modes du clavier.

Entrée :

AH 	= 02h

Sortie :

AL 	= Etat du clavier

Bit 0 = 1	touche Maj droite appuyée

Bit 1 = 1	touche Maj gauche appuyée

Bit 2 = 1	touche Ctrl appuyée

Bit 3 = 1	touche Alt appuyée

Bit 4 = 1	touche Arrêt Défil appuyée

Bit 5 = 1	touche Verr Num appuyée

Bit 6 = 1	touche Verr Maj appuyée

Bit 7 = 1	touche Ins appuyée

Remarques :

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 16h, Fct 03h    Clavier : Définir la fréquence de répétition     BIOS (> AT)

Cette fonction permet d'agir sur la répétition des touches du clavier pour qu'elles soient répétées automatiquement au bout d'un certain délai.

Entrée :

AH 	= 03h

AL 	= 05h

BH 	= Ralentissement jusqu'à la mise en place de la répétition

BL 	= Fréquence de répétition

Sortie :

aucune

Remarques :

·	Attention ! Cette fonction n'est pas reconnue par tous les BIOS.

·	Les valeurs suivantes peuvent être indiquées pour spécifier la durée de ralentissement dans le registre BL :

00h : 1/4 seconde

01h : 1/2 seconde

10h : 1/4 seconde

11h : 1 seconde

·	Les valeurs suivantes peuvent être utilisées pour le taux de répétition dans le registre BL :

Code	RPS*Code	RPS*	Code	RPS*	Code	RPS*

00h	30	1Fh	2,0	17h	4,0	0Fh	8,0

02h	24	1Eh	2,1	16h	4,3	0Eh	8,6

04h	20	1Dh	2,3	15h	4,6	0Dh	9,2

06h	17,1	1Ch	2,5	14h	5,0	0Ch	10,0

08h	15,0	1Bh	2,7	13h	5,5	0Bh	10,9

09h	13,3	1Ah	3,0	12h	6,0	0Ah	12,0

19h	3,3	11h	6,7

18h	3,7	10h	7,5

* Répétition/Seconde

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 16h, Fct 05h    Clavier : Simuler l'appui sur une touche     BIOS (> AT)

Cette fonction permet à un programme de simuler l'appui sur une touche en ajoutant un code de touche particulier à la fin actuelle du buffer de clavier.

Entrée :

AH 	= 05h

CH 	= Scan code de la touche

CL 	= Code ASCII de la touche

Sortie :

AL 	= 00h:ok

AL 	= 01h : buffer de clavier saturé

Remarques :

·	Attention ! Tous les BIOS ne reconnaissent pas cette fonction.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 16h, Fct 10h    Clavier : Test de claviers étendus     BIOS (> AT)

Cette fonction est conçue spécialement pour tester la présence de claviers étendus (F11 + F12) avec 101 ou 102 touches. Elle fonctionne comme la fonction 00h, mais ne construit pas les scan codes des touches selon la disposition d'un clavier normal à 84 touches.

Entrée :

AH 	= 10h

AH 	= scan code de la touche

AL 	= code ASCII de la touche

Remarques :

·	Attention ! Tous les BIOS ne reconnaissent pas cette fonction.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 16h, Fct 11h    Clavier : Test de claviers étendus     BIOS (> AT)

Cette fonction est conçue spécialement pour tester la présence de claviers étendus (F11 + F12) avec 101 ou 102 touches. Elle fonctionne comme la fonction 00h, mais ne construit pas les scan codes des touches selon la disposition d'un clavier normal à 84 touches.

Entrée :

AH 	= 11h

Sortie :

Flag zéro	= 1 : pas de caractères dans le buffer de clavier

Flag zéro	= 0 : présence de caractères, dans ce cas

AL 	= 0 : code clavier étendu, dans ce cas

AH 	= code clavier étendu

AL	= différent de 0 : touche normale, dans ce cas

AL 	= code ASCII de la touche

AH 	= scan code de la touche

Remarques :

·	Attention ! Tous les BIOS ne reconnaissent pas cette fonction.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Interruption 17h

Fonction 00h	Imprimante (parallèle) : Sortie de caractères

Fonction 01h	Imprimante (parallèle) : Initialisation imprimante

Fonction 02h	Imprimante (parallèle) : Tester l'état de l'imprimante


Int 17h, Fct 00h    Imprimante (parallèle) : Sortie de caractères     BIOS

Cette fonction envoie un caractère sur l'une des imprimantes connectées au PC.

Entrée :

AH 	= 00h

AL 	= Code du caractère à sortir

DX 	= Numéro d'imprimante

Sortie :

AH 	= Etat de l'imprimante

Bit 0 = 1	time out

Bit 3 = 1	erreur de transmission

Bit 4 = 1	imprimante On Line

Bit 5 = 1	plus de papier

Bit 6 = 1	accusé de réception

Bit 7 = 0	imprimante occupée

Remarques :

·	La première imprimante connectée sur le PC porte le numéro 0.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 17h, Fct 01h    Imprimante (parallèle) : Initialisation imprimante     BIOS

Cette fonction initialise une imprimante connectée sur le PC. Il convient d'y recourir avant toute première transmission d'un caractère sur une imprimante donnée.

Entrée :

AH 	= 01h

DX 	= Numéro d'imprimante

Sortie :

AH 	= Etat de l'imprimante

Bit 0 = 1	time out

Bit 3 = 1	erreur de transmission

Bit 4 = 1	imprimante On Line

Bit 5 = 1	plus de papier

Bit 6 = 1	accusé de réception

Bit 7 = 0	imprimante occupée

Remarques :

·	La première imprimante connectée sur le PC porte le numéro 0.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.

Interruption 17h, Fonction 02h


Int 17h, Fct 02h    Imprimante (parallèle) : Tester l'état de l'imprimante     BIOS

La seule tâche de cette fonction consiste à renvoyer l'état d'une imprimante connectée sur le PC.

Entrée :

AH 	= 02h

DX 	= Numéro d'imprimante

Sortie :

AH 	= Etat de l'imprimante

Bit 0 = 1	time out

Bit 3 = 1	erreur de transmission

Bit 4 = 1	imprimante On Line

Bit 5 = 1	plus de papier

Bit 6 = 1	accusé de réception

Bit 7 = 0	imprimante occupée

Remarques :

·	La première imprimante connectée sur le PC porte le numéro 0.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Interruption 18h

Si le PC utilisé dispose d'un BASIC placé en ROM, celui-ci peut être lancé en appelant cette interruption.

Entrée :

aucune

Sortie :

aucune

Remarques :

·	De nombreux modèles récents de PC ne disposent plus d'un BASIC intégré en ROM. Dans ce cas, l'interruption 18h revient immédiatement au programme d'appel ou provoque un plantage du système. Si par contre le PC comporte bien un BASIC intégré en ROM, l'interruption 18h ne rendra pas la main au programme d'appel. Il ne sera alors plus possible de revenir au DOS à moins de déclencher un démarrage à chaud du système (en actionnant ALT-Control-Delete) ou d'éteindre puis de rallumer l'ordinateur.


Interruption 19h

L'appel de cette interruption déclenche un lancement du système.

Entrée :

aucune

Sortie :

aucune

Remarques :

·	Il arrive que cette interruption ne relance pas l'ordinateur, mais au contraire provoque un plantage. Cela dépend du fait que le contenu de la mémoire RAM est effacé alors que la table des vecteurs d'interruption reste intacte dans la zone des interruptions 00h à 1Ch. Si un programme résident atteint l'une de ces interruptions, le prochain appel de cette interruption provoque irrémédiablement un plantage. Cela s'applique surtout à l'interruption 08h qui est utilisée par la plupart des programmes résidents.

·	Par conséquent, évitez d'utiliser cette interruption et adoptez plutôt la technique suivante pour relancer le système : pour effectuer un démarrage à chaud, sauvegardez d'abord la valeur 1234h dans la cellule 0040:0072 de la mémoire et exécutez ensuite un FAR-jump vers la cellule FFFF:0000.

·	Cette méthode permet en outre de réaliser un démarrage à froid à condition de charger à cet effet la valeur 0000h dans la cellule 0040:0072.


Interruption 1Ah

Fonction 00h	Date et heure : Lire le compteur de l'horloge système

Fonction 01h	Date et heure : Régler le compteur de l'horloge système

Fonction 02h	Date et heure : Lecture de l'horloge temps réel

Fonction 03h	Date et heure : Régler l'horloge temps réel

Fonction 04h	Date et heure : Lecture de la date sur l'horloge temps réel

Fonction 05h	Date et heure: Régler la date de l'horloge temps réel

Fonction 06h	Date et heure : Régler l'heure d'alarme

Fonction 07h	Date et heure : Annuler l'heure d'alarme


Int 1Ah, Fct 00h    Date et heure : Lire le compteur de l'horloge système    BIOS

Cette fonction permet de lire le contenu du compteur horaire. Il est incrémenté 18,2 fois par seconde et permet de calculer le temps écoulé depuis la mise en marche de l'ordinateur ou depuis minuit.

Entrée :

AH 	= 00h

Sortie :

CX 	= Mot fort du compteur

DX 	= Mot faible du compteur

AL 	= 0 : Moins de 24 heures se sont écoulées depuis la dernière fois que l'heure a été lue.

Différent de 0 : Plus de 24 heures se sont écoulées depuis la dernière  fois que l'heure a été lue.

Remarques :

·	L'AT, qui dispose d'une horloge alimentée par batterie, règle le compteur horaire sur l'heure réelle lors du lancement de l'ordinateur. Les PC qui ne disposent pas d'horloge en temps réel règlent ce compteur sur 0 lors du lancement.

·	Le contenu des registres BX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 1Ah, Fct 01h    Date et heure : Régler le compteur de l'horloge système    BIOS

Cette fonction permet de régler le contenu du compteur horaire. Ce compteur étant augmenté 18,2 fois par seconde, il permet de connaître le temps écoulé depuis la mise en marche de l'ordinateur ou depuis minuit, à moins que cette fonction ne soit utilisée pour le régler.

Entrée :

AH 	= 01h

CX 	= Mot fort du compteur horaire

DX 	= Mot faible du compteur horaire

Sortie :

aucune

Remarques :

·	L'AT, qui dispose d'une horloge alimentée par batterie, règle le compteur horaire sur l'heure réelle lors du lancement de l'ordinateur. Les PC qui ne disposent pas d'horloge en temps réel fixent ce compteur sur 0 lors du lancement. C'est pourquoi, sur ces modèles, il convient d'utiliser cette fonction si l'on veut que le compteur horaire soit réglé sur l'heure actuelle.

·	Le contenu des registres AX, BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 1Ah, Fct 02h    Date et heure : Lecture de l'horloge temps réel BIOS (> AT)

Cette fonction permet de lire l'heure de l'horloge temps réel alimentée par batterie. Comme ce type d'horloge n'existe que sur les AT, seul ce modèle de PC soutient cette fonction.

Entrée :

AH 	= 02h

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas

CH = Heures

CL = Minutes

DH = Secondes

Flag Carry =1 : La batterie de l'horloge est déchargée

Remarques :

·	Toutes les indications sont fournies en format BCD.

·	Le contenu des registres BX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 1Ah, Fct 03h    Date et heure : Régler l'horloge temps réel     BIOS (> AT)

Cette fonction permet de régler l'heure sur l'horloge temps réel alimentée par batterie. Comme ce type d'horloge n'existe que sur les AT, seul ce modèle de PC soutient cette fonction.

Entrée :

AH 	= 03h

CH 	= Heures

CL 	= Minutes

DH 	= Secondes

DL 	= 1 : c'est l'heure d'été

DL 	= 0 : ce n'est pas l'heure d'été

Sortie :

aucune

Remarques :

·	Les indications d'heures, minutes et secondes doivent être fournies en format BCD.

·	Le contenu des registres BX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 1Ah, Fct 04h    Date et heure : Lecture de la date sur l'horloge temps réel     BIOS (> AT)

Cette fonction permet de lire la date qui est stockée dans la mémoire RAM de l'horloge en temps réel alimentée par batterie. Cette fonction n'est soutenue que par l'AT.

Entrée :

AH 	= 04h

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas

CH = Siècle (19 ou 20)

CL = Année

DH = Mois

DL = Jour

Flag Carry =1 : La batterie de l'horloge est déchargée

Remarques :

·	Toutes les indications renvoyées par la fonction sont fournies en format BCD.

·	Le contenu des registres BX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 1Ah, Fct 05h    Date et heure: Régler la date de l'horloge temps réel    BIOS (> AT)

Cette fonction permet de régler la date qui est stockée dans la mémoire RAM de l'horloge temps réel alimentée par batterie. Cette fonction n'est soutenue que par l'AT qui dispose seul d'une horloge en temps réel.

Entrée :

AH 	= 05h

CH 	= Siècle (19 ou 20)

CL 	= Année

DH 	= Mois

DL 	= Jour

Sortie :

aucune

Remarques :

·	Toutes les indications fournies à la fonction doivent être codées en format BCD.

·	Le contenu des registres BX, CX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 1Ah, Fct 06h    Date et heure : Régler l'heure d'alarme     BIOS (> AT)

Cette fonction permet de régler une heure d'alarme se référant au jour actuel. Lorsque cette heure d'alarme est atteinte, l'interruption 4Ah est déclenchée. L'horloge en temps réel alimentée par batterie n'existe que sur les AT.

Entrée :

AH 	= 06h

CH 	= Heures

CL 	= Minutes

DH 	= Secondes

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : soit la batterie de l'horloge est déchargée, soit une autre heure d'alarme a déjà été programmée.

Remarques :

·	Les indications fournies à la fonction doivent être codées en format BCD.

·	L'interruption 4Ah est dirigée, lors du lancement du système, sur une instruction langage machine IRET. Si cette interruption n'est donc pas redirigée sur une routine spéciale, il ne se passera rien lorsque l'heure d'alarme sera atteinte.

·	Il n'est pas possible d'activer plus d'une heure d'alarme à la fois. Si une heure d'alarme est déjà programmée, il faut d'abord l'annuler à l'aide de la fonction 7.

·	Le contenu des registres BX, CX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 1Ah, Fct 07h    Date et heure : Annuler l'heure d'alarme     BIOS (> AT)

Cette fonction permet d'annuler une heure d'alarme déjà programmée. Aucune alarme ne sera donc plus déclenchée lorsque cette heure sera atteinte (seulement AT).

Entrée :

AH 	= 07h

Sortie :

aucune

Remarques :

·	Cette fonction doit notamment être appelée chaque fois que l'on veut modifier l'heure d'alarme. Dans ce cas en effet, il ne sera possible de programmer une nouvelle heure d'alarme, en appelant la fonction 6, qu'après avoir appelé cette fonction.

·	Le contenu des registres BX, CX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Interruption 21h

Fonction 00h	Fin de programme

Fonction 01h	Entrée de caractères avec sortie

Fonction 02h	Sortie d'un caractère

Fonction 03h	Réception d'un caractère de l'interface série

Fonction 04h	Sortie d'un caractère sur l'interface série

Fonction 05h	Sortie d'un caractère sur l'imprimante

Fonction 06h	Entrée/sortie directe de caractère

Fonction 07h	Entrée de caractères directe sans sortie

Fonction 08h	Entrée de caractères sans sortie

Fonction 09h	Sortie d'une chaîne de caractères

Fonction 0Ah	Entrée d'une chaîne de caractères

Fonction 0Bh	Lire état du périphérique d'entrée

Fonction 0Ch	Vider buffer d'entrée et appeler Fct d'entrée

Fonction 0Dh	Réinitialisation des drivers de bloc

Fonction 0Eh	Sélection du lecteur actuel

Fonction 0Fh	Ouvrir fichier (FCB)

Fonction 10h	Fermer fichier (FCB)

Fonction 11h	Rechercher première entrée du répertoire (FCB)

Fonction 12h	Rechercher prochaine entrée du répertoire (FCB)

Fonction 13h	Supprimer fichier(s) (FCB)

Fonction 14h	Lecture séquentielle (FCB)

Fonction 15h	Ecriture séquentielle (FCB)

Fonction 16h	Créer ou vider un fichier (FCB)

Fonction 17h	Renommer fichier(s) (FCB)

Fonction 18h	Interne

Fonction 19h	Lire la désignation de périphérique du lecteur actuel

Fonction 1Ah	Définir l'adresse de la DTA

Fonction 1Bh	Lire les informations sur le lecteur actuel

Fonction 1Ch	Lire les informations sur un lecteur quelconque

Fonction 1Dh	Interne

Fonction 1Eh	Interne

Fonction 1Fh	Lire le pointeur BPD pour le lecteur en cours

Fonction 20h	Interne

Fonction 21h	Lecture sélective (FCB)

Fonction 22h	Ecriture sélective (FCB)

Fonction 23h	Lire la taille du fichier (FCB)

Fonction 24h	Définir le numéro d'enregistrement

Fonction 25h	Modifier le vecteur d'Interruption

Fonction 26h	Créer un nouveau PSP

Fonction 27h	Lecture sélective de plusieurs enregistrements (FCB)

Fonction 28h	Ecriture sélective de plusieurs enregistrements (FCB)

Fonction 29h	Inscrire un nom de fichier dans FCB

Fonction 2Ah	Lire la date

Fonction 2Bh	Modifier la date

Fonction 2Ch	Lire l'heure

Fonction 2Dh	Modifier l'heure

Fonction 2Eh	Définir le flag Verify

Fonction 2Fh	Lire adresse de la DTA

Fonction 30h	Lire le numéro de version du DOS

Fonction 31h	Terminer programme mais laisser en mémoire

Fonction 32h	Placer un pointeur sur le BPD d'un lecteur quelconque

Fonction 33h, Sous-Fct 0	Lire le flag Break

Fonction 33h, Sous-Fct 1	Définir le flag Break

Fonction 34h	Placer un pointeur sur le flag INDOS

Fonction 35h	Lire le contenu d'un vecteur d'Interruption

Fonction 36h	Lire l'espace disque disponible

Fonction 37h, Sous-Fct 00h	Lire le code pour paramètres de ligne de commande

Fonction 37h, Sous-Fct 01h	Définir le caractère de commutateur de ligne de commande

Fonction 38h	Lire les symboles et formats caractéristiques du pays

Fonction 38h, Sous-Fct 0	Lire les symboles et formats caractéristiques d'un pays

Fonction 38h, Sous-Fct 1	Définir le pays

Fonction 39h	Créer un sous-répertoire

Fonction 3Ah	Supprimer un sous-répertoire

Fonction 3Bh	Défnir le sous-répertoire en cours

Fonction 3Ch	Créer ou vider un fichier (Handle)

Fonction 3Dh	Ouvrir un fichier (Handle)

Fonction 3Eh	Fermer un fichier (Handle)

Fonction 3Fh	Lire un fichier (Handle)

Fonction 40h	Ecrire dans un fichier (Handle)

Fonction 41h	Supprimer un fichier (Handle)

Fonction 42h	Déplacer le pointeur de fichier (handle)

Fonction 43h, Sous-Fct 0	Lire l'attribut d'un fichier

Fonction 43h, Sous-Fct 1	Définir l'attribut d'un fichier

Fonction 44h, Sous-Fct 0	Lire l'attribut de périphérique

Fonction 44h, Sous-Fct 1	Définir l'attribut de périphérique

Fonction 44h, Sous-Fct 2	Recevoir des données d'un driver de caractères

Fonction 44h, Sous-Fct 3	Envoyer des données à un driver de caractères

Fonction 44h, Sous-Fct 4	Recevoir des données d'un driver de bloc

Fonction 44h, Sous-Fct 5	Transmettre des données à un driver de bloc

Fonction 44h, Sous-Fct 6	Tester l'état d'entrée

Fonction 44h, Sous-Fct 7	Tester l'état de sortie

Fonction 44h, Sous-Fct 8	Support amovible

Fonction 44h, Sous-Fct 9	Test périphérique

Fonction 44h, Sous-Fct 0Ah	Test Handle Remote

Fonction 44h, Sous-Fct 0Bh	Définir répétition

Fonction 44h, Sous-Fct 0Ch	Communication avec un driver de caractères

Fonction 44h, Sous-Fct 0Dh	Communication avec un driver de bloc

Fonction 44h, Sous-Fct 0Eh	Lire la dernière désignation de lecteur

Fonction 44h, Sous-Fct 0Fh	Définir la désignation de lecteur suivante

Fonction 44h, Sous-Fct 10h	Solliciter le soutien IOCTL au niveau Handle

Fonction 44h, Sous-Fct 11h	Solliciter le soutien IOCTL au niveau du périphérique

Fonction 45h	Définir un second Handle

Fonction 46h	Affecter un handle à un autre

Fonction 47h	Lire répertoire actuel

Fonction 48h	Réserver mémoire RAM

Fonction 49h	Libérer mémoire RAM

Fonction 4Ah	Modifier la taille d'une zone de mémoire

Fonction 4Bh, Sous-Fct 00h	Exécuter un autre programme

Fonction 4Bh, Sous-Fct 03h	Charger un autre programme sans l'exécuter

Fonction 4Bh, Sous-Fct 05h	Adapter les EXEC personnels

Fonction 4Ch	Terminer programme avec un code de fin

Fonction 4Dh	Lire le code de fin

Fonction 4Eh	Lire la première entrée du répertoire

Fonction 4Fh	Lire la prochaine entrée du répertoire

Fonction 50h	Définir PSP actif

Fonction 51h	Lire le PSP actif

Fonction 52h	Placer un pointeur sur le bloc info DOS

Fonction 53h	Convertir le BPB en DPB

Fonction 54h	Lire flag Verify

Fonction 55h	Créer un nouveau PSP

Fonction 56h	Renommer ou déplacer un fichier (Handle)

Fonction 57h, Sous-Fct 00h	Lire les date et heure de la dernière modification d'un fichier

Fonction 57h, Sous-Fct 01h	Définir les date et heure de la dernière modification d'un fichier

Fonction 58h, Sous-Fct 00h	Lire principe de répartition de la mémoire

Fonction 58h, Sous-Fct 01h	Définir principe de répartition de la mémoire

Fonction 58h, Sous-Fct 02h	Demander l'utilisation des UMB

Fonction 58h, Sous-Fct 03h	Lire l'utilisation des UMB

Fonction 59h	Lire les informations d'erreur étendues

Fonction 5Ah	Créer fichier temporaire (Handle)

Fonction 5Bh	Créer un nouveau fichier (handle)

Fonction 5Ch, Sous-Fct 00h	Protéger une zone de fichier contre l'accès

Fonction 5Ch, Sous-Fct 01h	Libérer une zone verrouillée dans un fichier

Fonction 5Dh	Réservée à un usage interne

Fonction 5Eh, Sous-Fct 00h	Indiquer le nom de l'ordinateur dans le réseau

Fonction 5Eh, Sous-Fct 02h	Définir la chaîne d'initialisation de l'imprimante réseau

Fonction 5Eh, Sous-Fct 03h	Lire la chaîne d'initialisation d'une imprimante réseau

Fonction 5Fh, Sous-Fct 02h	Lire une entrée de la liste du réseau

Fonction 5Fh, Sous-Fct 03h	Définir une entrée dans la liste du réseau

Fonction 5Fh, Sous-Fct 04h	Supprimer une entrée de la liste du réseau

Fonction 60h	Augmenter le nom de fichier

Fonction 61h	Interne

Fonction 62h	Déterminer adresse de PSP

Fonction 63h	Interne

Fonction 64h	Interne

Fonction 65h	Interne

Fonction 66h, Sous-Fct 01h	Lire la page de code en cours

Fonction 66h, Sous-Fct 02h	Définir la page de code en cours

Fonction 67h	Spécifier le nombre de handles disponibles

Fonction 68h	Libérer le buffer de fichier

Fonction 69h	Interne

Fonction 6Ah	Interne

Fonction 6Bh	Interne

Fonction 6Ch	Fct OPEN étendue


Int 21h, Fct 00h    Fin de programme    DOS (> 1.0)

En appelant cette fonction, on indique au système d'exploitation que l'exécution du programme actuellement traité doit s'achever et que le contrôle doit être rendu au programme d'appel. Avant que cela ne se produise, toutefois, les trois vecteurs d'interruption dont le contenu avait été sauvegardé dans le PSP avant appel du programme, sont restaurés. Si le programme a redirigé ces vecteurs sur des routines à lui, ces routines ne pourront être effacées par un autre programme puisque la mémoire RAM occupée par le programme qu'il s'agit de terminer est à nouveau libérée pour d'autres programmes. Cette mémoire est donc libérée et tous les buffers de fichiers sont vidés avant que le contrôle ne soit rendu au programme d'appel.

Entrée :

AH 	= 00h

CS 	= Adresse de segment du PSP

Sortie :

aucun

Remarques :

·	Pour un programme COM, l'adresse de segment du PSP est de toute façon stockée dans le registre CS. Dans un programme EXE, le code et le PSP ne sont pas logés dans le même segment. Cette fonction ne peut donc être appelée par un programme EXE.

·	Il est préférable d'utiliser, plutôt que cette fonction, les fonctions 31h ou 4Ch de l'interruption 21h du DOS pour terminer un programme.


Int 21h, Fct 01h    Entrée de caractères avec sortie    DOS (> 1.0)

Un caractère est lu sur le périphérique d'entrée standard et sorti sur le périphérique de sortie standard. Si aucun caractère n'est encore prêt au moment de l'appel de fonction, la fonction attend jusqu'à ce qu'un caractère soit disponible. Comme les entrée et sortie standard peuvent être redirigées, cette fonction ne lit pas nécessairement un caractère au clavier et ne le sort pas nécessairement sur l'écran. Les caractères entrés peuvent donc parfaitement provenir d'un autre périphérique ou d'un fichier. Dans ce dernier cas cependant, l'entrée n'est pas redirigée sur le clavier lorsqu'est atteinte la fin du fichier. La fonction continuera donc à essayer de lire des caractères dans le fichier, bien que ce ne soit plus possible.

Entrée :

AH 	= 01h

Sortie :

AL 	= Le caractère lu

Remarques :

·	Lorsque des codes étendus sont lus, le code 0 est tout d'abord renvoyé dans le registre AL. La fonction doit être appelée à nouveau pour lire le code étendu lui-même.

·	Lorsque le caractère entré est le caractère Control C (Code ASCII 3), l'interruption 23h est appelée.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 02h    Sortie d'un caractère    DOS (> 1.0)

Cette fonction permet de sortir un caractère sur le périphérique de sortie standard. Comme ce périphérique peut être redirigé, le caractère ne doit pas nécessairement être sorti sur l'écran mais peut aussi être envoyé sur un autre périphérique ou dans un fichier. Si toutefois le support (disquette, disque dur) sur lequel figure le fichier est déjà plein, la fonction ne détecte pas cette situation et elle continue à essayer d'écrire des caractères dans ce fichier.

Entrée :

AH 	= 02h

DL 	= Code du caractère à sortir

Sortie :

aucune

Remarques :

·	Si les caractères sont envoyés sur l'écran, les codes de commande tels que Backspace, Carriage Return et Line Feed sont traités comme tels. Si par contre la sortie est redirigée vers un fichier, les caractères y sont sauvegardés comme des codes ASCII normaux.

·	Après sortie du caractère, le DOS teste si un caractère Ctrl-C (code ASCII 3) a été reçu ou entré entre-temps. Si c'est le cas, l'interruption 23h est appelée.

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Int 21h, Fct 03h    Réception d'un caractère de l'interface série    DOS (> 1.0)

Cette fonction permet de lire un caractère sur l'interface série. L'accès concerne le périphérique portant la désignation AUX ou COM1.

Entrée :

AH 	= 03h

Sortie :

AL 	= Le caractère reçu

Remarques :

·	Comme l'interface série ne dispose pas de buffer interne, il peut arriver que l'interface série reçoive des caractères plus vite que l'appel de cette fonction ne permet de les lire. Ces caractères sont alors perdus.

·	Les paramètres de communication (vitesse de transmission, nombre de bits Stop, etc.) doivent avoir été fixés préalablement à l'aide de l'instruction MODE. Le DOS définit sinon les valeurs défaut suivantes : vitesse de transmission de 2400 bauds avec un bit Stop, sans contrôle de parité et une largeur de données de 8 bits.

·	Plutôt qu'à cette fonction, il est préférable de recourir aux fonctions du BIOS pour l'accès à l'interface série. Elles peuvent être appelées à travers l'interruption 14h et elles offrent une plus grande souplesse que les fonctions du DOS car elles permettent notamment de tester l'état de l'interface série.

·	Si un caractère Ctrl-C (code ASCII 3) est reçu, l'interruption 23h est appelée.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 04h    Sortie d'un caractère sur l'interface série    DOS (> 1.0)

Cette fonction permet de sortir un caractère sur l'interface série. L'accès concerne le périphérique portant la désignation AUX ou COM1.

Entrée :

AH 	= 04h

DL 	= Le caractère à sortir

Sortie :

aucune

Remarques :

·	Le caractère n'est sorti qu'après que le périphérique qui doit recevoir le caractère ait signalé qu'il est prêt à recevoir. Ce n'est qu'après cela que le contrôle est rendu au programme d'appel.

·	Les paramètres de communication (vitesse de transmission, nombre de bits Stop, etc.) doivent avoir été fixés préalablement à l'aide de l'instruction MODE. Le DOS définit sinon les valeurs défaut suivantes : vitesse de transmission de 2400 bauds avec un bit Stop, sans contrôle de parité et une largeur de données de 8 bits.

·	Plutôt qu'à cette fonction, il est préférable de recourir aux fonctions du BIOS pour l'accès à l'interface série. Elles peuvent être appelées à travers l'interruption 14h et elles offrent une plus grande souplesse que les fonctions du DOS car elles permettent notamment de tester l'état de l'interface série.

·	Si un caractère Ctrl-C (code ASCII 3) est sorti, l'interruption 23h est appelée.

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Int 21h, Fct 05h    Sortie d'un caractère sur l'imprimante    DOS (> 1.0)

Cette fonction sort un caractère sur l'imprimante. A moins que cette sortie n'ait été redirigée avec l'instruction MODE, l'accès se fait sur le périphérique portant la désignation LPT1 (identique à PRN).

Entrée :

AH 	= 05h

DL 	= Code du caractère à sortir.

Sortie :

aucune

Remarques :

·	Le caractère n'est sorti que si l'imprimante signale qu'elle est prête à recevoir. Ce n'est qu'après cela que le contrôle est rendu au programme d'appel.

·	Si un caractère Ctrl-C (code ASCII 3) est détecté, l'interruption 23h est appelée.

·	Pour la sortie de caractères sur l'imprimante, les fonctions du BIOS pour la communication avec l'imprimante, qui peuvent être appelées à travers l'interruption 17h, offrent une plus grande souplesse.

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Int 21h, Fct 06h    Entrée/sortie directe de caractère    DOS (> 1.0)

Cette fonction permet de sortir des caractères sur le périphérique de sortie standard ou de les lire sur le périphérique d'entrée standard. Le caractère reçu ou écrit chaque fois n'est pas examiné par le système d'exploitation. Rien de particulier ne se produit donc lorsqu'un caractère Ctrl-C apparaît. Comme l'entrée et la sortie standard peuvent être redirigées sur d'autres périphériques ou vers un fichier, les caractères sortis ne doivent pas nécessairement apparaître sur l'écran ni les caractères lus provenir obligatoirement du clavier. Toutefois, lorsque l'accès se fait sur un fichier, il est impossible pour le programme d'appel de détecter si tous les caractères de ce fichier ont déjà été lus ou bien si le support (disquette, disque dur) sur lequel figure ce fichier est déjà plein.

Pour l'entrée d'un caractère, la fonction n'attend pas qu'un caractère soit prêt mais revient immédiatement au programme d'appel dans tous les cas.

Entrée :

AH 	= 06h

DL 	= 0 - 254 : Sortir ce caractère

DL 	= 255 : Lire un caractère

Sortie :

Pour la sortie de caractères : aucune

Pour l'entrée de caractères :

Flag Zéro =1 : aucun caractère n'est prêt

Flag Zéro =0 : Le caractère entré figure dans le registre AL

Remarques :

·	Lorsque des codes étendus sont lus, le code 0 est tout d'abord renvoyé dans le registre AL. La fonction doit être appelée à nouveau pour lire le code étendu lui-même.

·	Le caractère de code ASCII 255 ne peut être sorti à l'aide de cette fonction puisqu'il est interprété comme d'entrée d'un caractère.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 07h    Entrée de caractères directe sans sortie    DOS (> 1.0)

Un caractère est lu sur le périphérique d'entrée standard mais sans être sorti sur le périphérique de sortie standard. Si aucun caractère n'est disponible au moment de l'appel de fonction, la fonction attend jusqu'à ce qu'un caractère soit disponible.

Le caractère reçu n'est pas examiné par le système d'exploitation, de sorte que rien ne se passe lorsqu'apparaît un caractère Ctrl-C.

Comme l'entrée standard peut être redirigée sur un autre périphérique ou vers un fichier, le caractère lu ne doit pas nécessairement provenir du clavier. Si les caractères transmis proviennent d'un fichier, le programme d'appel n'a aucune possibilité de détecter si tous les caractères de ce fichier ont déjà été lus, autrement dit si la fin du fichier a ou non déjà été atteinte.

Entrée :

AH 	= 07h

Sortie :

AL 	= Le caractère lu

Remarques :

·	Lorsque des codes étendus sont lus, le code 0 est tout d'abord renvoyé dans le registre AL. La fonction doit être appelée à nouveau pour lire le code étendu lui-même.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 08h    Entrée de caractères sans sortie    DOS (> 1.0)

Un caractère est lu sur le périphérique d'entrée standard mais sans être sorti sur le périphérique de sortie standard. Si aucun caractère n'est disponible au moment de l'appel de fonction, la fonction attend jusqu'à ce qu'un caractère soit disponible.

Comme l'entrée standard peut être redirigée sur un autre périphérique ou vers un fichier, le caractère lu ne doit pas nécessairement provenir du clavier. Si les caractères transmis proviennent d'un fichier, le programme d'appel n'a aucune possibilité de détecter si tous les caractères de ce fichier ont déjà été lus, autrement dit si la fin du fichier a ou non déjà été atteinte.

Entrée :

AH 	= 08h

Sortie :

AL 	= Le caractère lu

Remarques :

·	Lorsque des codes étendus sont lus, le code 0 est tout d'abord renvoyé dans le registre AL. La fonction doit être appelée à nouveau pour lire le code étendu lui-même.

·	Lorsque le caractère Ctrl-C est détecté au cours de l'exécution de cette fonction, l'interruption 23h est appelée.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 09h    Sortie d'une chaîne de caractères     DOS (> 1.0)

Cette fonction permet de sortir une chaîne de caractères sur le périphérique de sortie standard. Comme ce périphérique standard peut être redirigé sur un autre périphérique ou vers un fichier, il n'y a aucune garantie que la chaîne de caractères apparaisse sur l'écran. Si la sortie est redirigée sur un fichier, le programme d'appel n'a aucune possibilité de détecter si le support (disquette, disque dur) sur lequel figure le fichier est déjà plein, autrement dit s'il est encore possible d'écrire la chaîne de caractères dans le fichier.

Entrée :

AH 	= 09h

DS 	= Adresse de segment de la chaîne de caractères

DX 	= Adresse d'offset de la chaîne de caractères

Sortie :

aucune

Remarques :

·	La chaîne de caractères doit être stockée dans la mémoire sous forme d'une séquence d'octets correspondant aux codes ASCII des caractères composant la chaîne. La fin de la chaîne de caractères doit être signalée au DOS à l'aide d'un caractère "$" (code ASCII 36).

·	Si la chaîne de caractères contient des codes de commande comme Backspace, Carriage Return ou Line Feed, ceux-ci seront traités comme tels.

·	Seul le contenu du registre AL est modifié par l'appel de cette fonction.


Int 21h, Fct 0Ah    Entrée d'une chaîne de caractères     DOS (> 1.0)

Cette fonction permet de lire un nombre déterminé de caractères sur le périphérique d'entrée standard et de les transférer dans un buffer. L'entrée se termine lorsque la touche Entrée est actionnée. Le code de cette touche (13) est alors également placé dans le buffer, comme dernier caractère de la chaîne.

Comme l'entrée standard peut être redirigée sur un autre périphérique ou vers un fichier, les caractères entrés ne proviennent pas nécessairement du clavier. Si les caractères transmis proviennent d'un fichier, le programme d'appel n'a aucune possibilité de détecter si tous les caractères de ce fichier ont déjà été lus, autrement dit si la fin de fichier a déjà été atteinte.

Entrée :

AH 	= 0Ah

DS 	= Adresse de segment du buffer

DX 	= Adresse d'offset du buffer

Sortie :

aucune

Remarques :

·	Le premier octet du buffer définit le nombre maximal de caractères (y compris le Carriage Return final) qui pourront être lus et placés dans le buffer à partir de la cellule de mémoire numéro deux. Ce paramètre doit être inscrit dans le buffer avant d'appeler la fonction, pour que celle-ci sache combien de caractères elle doit lire au maximum.

·	Le DOS inscrit dans la cellule de mémoire 1, une fois le travail terminé, le nombre de caractères lus à l'exception du Carriage Return.

·	Le buffer doit donc être d'une longueur égale au nombre de caractères à entrer plus 2 octets.

·	Dès que l'avant-dernière cellule de mémoire du buffer est atteinte, l'entrée d'autres caractères entraîne l'émission d'un bip et seule la touche Entrée est encore acceptée pour conclure l'entrée.

·	Les codes clavier étendus occupent deux octets dans le buffer. Le premier octet contient le code 0 et le second contient le code de la touche étendue.

·	Lorsque le caractère Ctrl-C est détecté au cours de l'entrée, l'interruption 23h est appelée.

·	L'entrée peut être éditée à l'aide de la touche Backspace et des touches curseur, sans que ces touches soient sauvegardées dans le buffer.

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Int 21h, Fct 0Bh    Lire état du périphérique d'entrée    DOS (> 1.0)

Cette fonction permet de déterminer si des caractères sont prêts à être lus sur le périphérique d'entrée standard.

Entrée :

AH 	= 0Bh

Sortie :

AL 	= 0 : Aucun caractère disponible

AL 	= 255 : Un ou plusieurs caractères prêts à être lus

Remarques :

·	Lorsque le caractère Ctrl-C est détecté au cours de l'exécution de cette fonction, l'interruption 23h est appelée.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 0Ch    Vider buffer d'entrée et appeler Fct d'entrée     DOS (> 1.0)

Cette fonction vide tout d'abord le buffer d'entrée et appelle ensuite une des fonctions d'entrée de caractères. Comme les fonctions d'entrée de caractères tirent tous leurs caractères du périphérique d'entrée standard et que ce dernier n'est pas nécessairement le clavier, le fait de vider le buffer d'entrée ne présente d'intérêt que si le périphérique d'entrée standard est le clavier. Dans ce cas en effet, il se peut que des caractères aient été entrés avant appel de la fonction mais n'aient pas encore été lus par celle-ci. En vidant le buffer, on efface donc ces caractères pour avoir l'assurance que la fonction appelée ensuite ne recevra que des caractères entrés au cours de l'exécution de cette fonction.

Entrée :

AH 	= 0Ch

AL 	= Numéro de la fonction d'appel

Pour l'appel de la fonction 10 :

DS = Adresse de segment du buffer d'entrée

DX = Adresse d'offset du buffer d'entrée

Sortie :

Pour les fonctions 01h, 06h, 07h et 08h :

AL = le caractère entré

Pour la fonction 0Ah : aucune

Remarques :

·	Les numéros de fonction 01h, 06h, 07h, 08 et 0Ah peuvent seuls être transmis à cette fonction comme fonctions à appeler.

·	Seul le contenu du registre AL est modifié par l'appel de cette fonction.


Int 21h, Fct 0Dh    Réinitialisation des drivers de bloc     DOS (> 1.0)

Cette fonction permet de transmettre au périphérique approprié (disquette, disque dur) toutes les données censées être transmises à un driver de bloc mais qui étaient encore stockées dans un buffer interne du DOS. Les fichiers ouverts (Handles ou FCB) ne sont pas refermés.

Entrée :

AH 	= 0Dh

Sortie :

aucune

Remarques :

·	Même si cette fonction a été appelée, il faut encore refermer comme il convient tous les fichiers ouverts. Il peut arriver sinon que l'entrée de répertoire correspondant à un fichier donné n'ait pas été actualisée, auquel cas il ne sera pas possible d'accéder aux données nouvellement écrites dans le fichier.

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Int 21h, Fct 0Eh    Sélection du lecteur actuel    DOS (> 1.0)

Cette fonction permet de définir le lecteur actuel dont la désignation apparaîtra désormais sur l'écran comme message de dialogue chaque fois que l'interpréteur de commandes attendra des entrées de l'utilisateur. Tous les accès de fichier pour lesquels aucune désignation de lecteur ne sera spécifiée se feront à l'avenir sur le lecteur indiqué ici.

Entrée :

AH 	= 0Eh

DL 	= Code du lecteur actuel

Sortie :

AL 	= Nombre de lecteurs (ou Volumes) installés

Remarques :

·	Le lecteur A porte le code 0, B le code 1, etc.

·	Même si un PC dispose seulement d'un lecteur de disquette et d'un disque dur, le nombre de volumes dans le registre AL peut être supérieur à 2 car le disque dur peut être subdivisé en plusieurs volumes et un ou plusieurs disques RAM peuvent également avoir été installés.

·	Sur un PC disposant d'un seul lecteur de disquette, le nombre de volumes est de 2 car ce lecteur fait office aussi bien de lecteur A que de lecteur B.

·	La version 2 du DOS autorisait 63 codes de périphériques différents alors que la version 3 du DOS a limité le nombre de périphériques à 26 (les lettres A à Z). Il n'est donc pas possible d'accéder à plus de 26 périphériques à la fois.

·	Le nombre de lecteurs de disquette physiques n'est pas nécessairement identique au nombre de volumes. Il peut donc être déterminé de façon plus précise en appelant l'interruption 11h du BIOS.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 0Fh    Ouvrir fichier (FCB)     DOS (> 1.0)

Cette fonction permet d'ouvrir un fichier (s'il existe). Après exécution réussie de cette fonction, le fichier peut alors être lu ou écrit.

Entrée :

AH 	= 0Fh

DS 	= Adresse de segment du FCB du fichier

DX 	= Adresse d'offset du FCB du fichier

Sortie :

AL 	= 0 : Fichier trouvé et ouvert

AL 	= 255 : Fichier non trouvé

Remarques :

·	Des FCB normaux ainsi que des FCB étendus sont utilisables.

·	Si le fichier a été trouvé, le DOS inscrit dans le FCB la taille du fichier, la date et l'heure de sa création ou de sa dernière modification.

·	Le DOS fixe la longueur d'enregistrement sur 128 octets. Cette longueur d'enregistrement peut être modifiée dans le FCB mais cela ne doit être fait qu'une fois le fichier ouvert. Pour travailler avec une longueur d'enregistrement supérieure, il est en outre nécessaire de déplacer la DTA car la DTA prédéfinie a une taille de 128 octets seulement.

·	Pour effectuer un accès sélectif au fichier, il convient de définir le champ approprié du FCB après ouverture réussie du fichier.

·	Le pointeur de fichier est dirigé sur le premier octet du fichier après ouverture de celui-ci.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 10h    Fermer fichier (FCB)     DOS (> 1.0)

Après appel de cette fonction, toutes les données qui figurent encore dans un des buffers internes du DOS sont écrites dans le fichier qui est ensuite refermé. L'entrée du répertoire correspondant à ce fichier est alors actualisée pour tenir compte de la nouvelle taille du fichier ainsi que des date et heure de modification.

Entrée :

AH 	= 10h

DS 	= Adresse de segment du FCB du fichier

DX 	= Adresse d'offset du FCB du fichier

Sortie :

AL 	= 0 : Fichier refermé et entrée du répertoire actualisée

AL 	= 255 : Fichier non trouvé dans le répertoire

Remarques :

·	Seuls peuvent naturellement être refermés des fichiers qui ont été précédemment ouverts.

·	Pour les fichiers sur disquette, il faut absolument s'assurer que la disquette placée dans le lecteur au moment de l'appel de cette fonction est bien la disquette qui contient le fichier. S'il n'en est pas ainsi, une FAT et un répertoire erronés seront écrits sur la disquette, ce qui rendra inutilisables les données qu'elle contenait.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 11h    Rechercher première entrée du répertoire (FCB)     DOS (> 1.0)

Cette fonction permet de rechercher la première apparition d'un nom de fichier déterminé dans le répertoire actuel du périphérique désigné dans le FCB.

Entrée :

AH 	= 11h

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Fichier trouvé

AL 	= 255 : Fichier non trouvé

Remarques :

·	Le FCB transmis à la fonction contient la désignation du périphérique sur lequel le fichier doit être recherché ainsi que le nom de ce fichier.

·	Le nom de fichier peut contenir le joker "?" si vous voulez faire rechercher un groupe de fichiers.

·	La recherche s'effectue exclusivement sur le répertoire actuel du périphérique spécifié.

·	Si c'est un fichier normal qu'il s'agit de rechercher, un FCB normal doit être transmis à la fonction. S'il s'agit au contraire de rechercher des fichiers dotés d'attributs particuliers (noms de volumes, sous-répertoires, fichiers cachés, etc.), il faut travailler avec des FCB étendus.

·	Si un fichier a été trouvé, la DTA contient un FCB de même type que le FCB transmis, qui contient le nom du fichier trouvé. C'est pourquoi la DTA doit toujours être d'une taille lui permettant de recevoir au moins un FCB normal ou étendu.

·	La DTA peut être déplacée vers un buffer utilisateur à l'aide de la fonction 1Ah pour s'assurer qu'elle sera d'une taille suffisante pour recevoir le FCB correspondant.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 12h    Rechercher prochaine entrée du répertoire (FCB)     DOS (> 1.0)

Après que le premier nom de fichier ait été identifié en appelant la fonction 11h, cette fonction vous permet de faire rechercher tous les autres noms de fichiers (s'il y en a).

Entrée :

AH 	= 12h

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Fichier trouvé

AL 	= 255 : Fichier non trouvé (pas d'autres fichiers présents)

Remarques :

·	Cette fonction ne doit être appelée qu'après que la fonction 11h ait été tout d'abord appelée.

·	Si un autre nom de fichier a été trouvé, son nom figure à nouveau dans le FCB placé au début de la DTA.

·	La recherche s'effectue exclusivement dans le répertoire actuel du périphérique spécifié.

·	La DTA peut être déplacée à l'aide de la fonction 1Ah vers un buffer utilisateur pour garantir que ce buffer soit suffisamment grand pour recevoir le FCB approprié.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 13h    Supprimer fichier(s) (FCB)     DOS (> 1.0)

Cette fonction sert à supprimer un ou plusieurs fichiers dans le répertoire actuel du périphérique spécifié.

Entrée :

AH 	= 13h

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Fichier(s) supprimé(s)

AL 	= 255 : Aucun fichier trouvé ou bien les fichiers trouvés ne pouvaient être supprimés (parce qu'ils étaient dotés de l'attribut "Lecture seule")

Remarques :

·	Le FCB transmis à la fonction contient la désignation du périphérique sur lequel figurent les fichiers à supprimer ainsi que le nom de ces fichiers.

·	Le nom de fichier peut contenir le joker "?" si vous voulez supprimer un groupe de fichiers.

·	Seuls des fichiers du répertoire actuel du périphérique spécifié peuvent être supprimés.

·	Si c'est un fichier normal qu'il s'agit de supprimer, un FCB normal doit être transmis à la fonction. S'il s'agit au contraire de supprimer des fichiers dotés d'attributs particuliers (noms de volumes, fichiers cachés, etc.), il faut travailler avec des FCB étendus.

·	Des noms de volumes peuvent être supprimés à l'aide de cette fonction mais pas des sous-répertoires.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 14h    Lecture séquentielle (FCB)     DOS (> 1.0)

Lire le prochain enregistrement d'un fichier.

Entrée :

AH 	= 14h

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Enregistrement a été lu

AL 	= 1 : Fin du fichier atteinte

AL 	= 2 : Débordement de segment

AL 	= 3 : Lu enregistrement partiel

Remarques :

·	Cette fonction ne doit être appelée qu'après que le fichier ait été ouvert à travers le FCB indiqué.

·	L'enregistrement est transféré dans la DTA. Si celle-ci n'est pas assez grande, il convient de la déplacer auparavant vers un buffer utilisateur à l'aide de la fonction 1Ah.

·	La taille de l'enregistrement, c'est-à-dire le nombre d'octets lus, est inscrit dans le FCB.

·	L'erreur 2 se produit si la DTA est située à la fin d'un segment et que l'enregistrement lu est conduit, de ce fait, à dépasser la limite du segment.

·	L'erreur 3 se produit lorsque la fin d'un fichier ne comporte pas un enregistrement complet mais seulement un enregistrement partiel. Dans ce cas, l'enregistrement partiel est lu mais comblé de zéros jusqu'à la longueur prescrite.

·	Après que l'enregistrement ait été lu, le pointeur de fichier est dirigé sur le début du prochain enregistrement, de sorte que c'est automatiquement le prochain enregistrement qui sera lu lors du prochain appel de cette fonction.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 15h    Ecriture séquentielle (FCB)     DOS (> 1.0)

Ecrire le prochain enregistrement dans un fichier.

Entrée :

AH 	= 15h

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Enregistrement a été écrit

AL 	= 1 : Support (disquette/disque dur) plein

AL 	= 2 : Débordement de segment

Remarques :

·	Cette fonction ne doit être appelée qu'après que le fichier ait été ouvert à travers le FCB indiqué.

·	L'enregistrement est transféré de la DTA dans le fichier. Si la DTA n'est pas assez grande, il convient de la déplacer auparavant vers un buffer utilisateur à l'aide de la fonction 1Ah.

·	La taille de l'enregistrement, c'est-à-dire le nombre d'octets écrits, est inscrit dans le FCB.

·	L'erreur 2 se produit si la DTA est située à la fin d'un segment et que l'enregistrement à écrire est conduit, de ce fait, à dépasser la limite du segment.

·	Après que l'enregistrement ait été écrit, le pointeur de fichier est dirigé sur le début du prochain enregistrement, de sorte que c'est automatiquement le prochain enregistrement qui sera écrit lors du prochain appel de cette fonction.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 16h    Créer ou vider un fichier (FCB)     DOS (> 1.0)

Après appel de cette fonction, un fichier n'existant pas encore sera créé. Un fichier déjà existant sera vidé par l'appel de cette fonction, la longueur de ce fichier passant donc à 0. Le fichier est en même temps ouvert par cette fonction, de sorte que ce fichier pourra être écrit et ensuite lu en appelant d'autres fonctions.

Entrée :

AH 	= 16h

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Fichier a été créé ou vidé

AL 	= 255 : Fichier n'a pu être créé (par exemple parce que le répertoire était déjà plein)

Remarques :

·	Le contenu d'un fichier déjà existant qui aura été vidé à l'aide de cette fonction sera irrémédiablement perdu.

·	Après appel de cette fonction, il n'est plus nécessaire d'ouvrir le fichier à l'aide de la fonction 0Fh.

·	Si le fichier est ouvert à l'aide d'un FCB étendu, il peut aussi posséder certains attributs (nom de volume, fichier caché). Il n'est toutefois pas possible de créer un sous-répertoire à l'aide de cette fonction.

·	Après ouverture du fichier, le pointeur de fichier est dirigé sur le premier octet du fichier.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 17h    Renommer fichier(s) (FCB)     DOS (> 1.0)

Renommer un fichier ou un groupe de fichiers dans le répertoire actuel sur le périphérique spécifié.

Entrée :

AH 	= 17h

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Fichier(s) renommé(s)

AL 	= 255 :

Remarques :

·	Le FCB transmis doit être un FCB spécial. Il est basé sur un FCB normal dont les 12 premiers octets contiennent comme d'habitude la désignation de périphérique et le nom du fichier à renommer. Ce FCB a cependant ceci de particulier qu'il comporte à partir de la cellule de mémoire 16 la désignation de périphérique et le nouveau nom du fichier. La désignation de périphérique doit naturellement être identique à celle spécifiée pour l'ancien nom du fichier.

·	Le nom du fichier à renommer peut contenir le joker "?" si vous voulez renommer plusieurs fichiers à la fois.

·	Si le nouveau nom du fichier contient également le joker "?", les emplacements du nom de fichier ou de l'extension de fichier pour lesquels figure un "?" dans le nouveau nom de fichier ne seront pas modifiés.

·	A partir de la version 2.0, un FCB augmenté peut être spécifié pour renommer un répertoire simultanément avec cette fonction.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 18h     DOS (> 1.0)

Réservée à un usage interne


Int 21h, Fct 19h    Lire la désignation de périphérique du lecteur actuel             DOS (> 1.0)

L'appel de cette fonction renvoie la désignation de périphérique du lecteur actuel.

Entrée :

AH 	= 19h

Sortie :

AL 	= Désignation de périphérique

Remarques :

·	Alors que pour d'autres fonctions DOS la désignation de périphérique 0 correspond au périphérique actuel et que c'est le code 1 qui désigne le lecteur A, c'est ici le code 0 qui désigne le lecteur A, le code 1 désignant le lecteur B, etc..

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 1Ah    Définir l'adresse de la DTA     DOS (> 1.0)

En appelant cette fonction, vous pouvez déplacer vers une autre zone de mémoire la zone de transfert disque (Disk Transfer Area = DTA), qui est utilisée pour le stockage intermédiaire des données lors de tous les accès de fichier soutenus par FCB.

Entrée :

AH 	= 1Ah

DS 	= Adresse de segment de la nouvelle DTA

DX 	= Adresse d'offset de la nouvelle DTA

Sortie :

aucune

Remarques :

·	Cette fonction doit être appelée chaque fois que la DTA prédéfinie n'est pas assez grande pour recevoir les données à transférer.

·	Lors du lancement d'un programme, le DOS place la DTA à l'adresse 128 du PSP du programme. Elle a donc une taille de 128 octets puisque le programme lui-même commence immédiatement après l'adresse 255 du PSP.

·	Le DOS ne connaît pas la longueur de la DTA et il considère toujours a priori qu'elle est suffisamment grande pour absorber les données à transférer. Or s'il n'en est pas ainsi en réalité, les données excédentaires effaceront les données suivantes de la fonction DOS utilisée.

·	Avec différentes fonctions, le DOS détecte toutefois une erreur lorsque la DTA se situe à la fin d'un segment et que les données à transférer sont de ce fait conduites à dépasser la limite du segment.

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Int 21h, Fct 1Bh    Lire les informations sur le lecteur actuel     DOS (> 1.0)

Cette fonction permet d'obtenir un certain nombre d'informations sur le format du lecteur actuel.

Entrée :

AH 	= 1Bh

Sortie :

AL 	= Nombre de secteurs par cluster

DS 	= Adresse de segment du descripteur de support

BX 	= Adresse d'offset du descripteur de support

DX 	= Nombre de clusters

Remarques :

·	Pour le descripteur de support peuvent être renvoyés les codes suivants :

F0h :	Lecteur de disquette : deux faces, 80 pistes, 18 secteurs par piste (3 pouces 1/2)

F8h :	Disque dur

F9h :	Lecteur de disquette : deux faces, 15 secteurs par piste (5 pouces 1/4, AT seulement) ou deux faces, 80 pistes, 9 secteurs par piste (3 pouces 1/2)

FAh :	Lecteur de disquette : une face, 80 pistes, 8 secteurs par piste (5 ou 3 pouces 1/2)

FBh :	Lecteur de disquette : deux faces, 80 pistes, 8 secteurs par piste (5 ou 3 pouces 1/2)

FCh :	Lecteur de disquette : une face, 40 pistes, 9 secteurs par piste (5 pouces 1/4)

FDh :	Lecteur de disquette : deux faces, 40 pistes, 9 secteurs par piste (5 pouces 1/4)

FEh :	Lecteur de disquette : une face, 40 pistes, 8 secteurs par piste (5 pouces 1/4)

FFh :	Lecteur de disquette : deux faces, 40 pistes, 8 secteurs par piste (5 pouces 1/4)

·	La fonction 1Ch vous permet d'obtenir des informations sur n'importe quel lecteur.

·	Le contenu des registres AH, SI, DI, BP, CS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 1Ch    Lire les informations sur un lecteur quelconque     DOS (> 1.0)

Cette fonction permet d'obtenir un certain nombre d'informations sur le format du lecteur spécifié.

Entrée :

AH 	= 1Ch

DL 	= Désignation de périphérique

Sortie :

AL 	= Nombre de secteurs par cluster

DS 	= Adresse de segment du descripteur de support

BX 	= Adresse d'offset du descripteur de support

DX 	= Nombre de clusters

Remarques :

·	Pour la désignation de périphérique, 0 représente le lecteur actuel, 1 le lecteur A, 2 le lecteur B, etc.

·	                                                                                                                                                                                                         Pour le descripteur de support, les codes suivants peuvent être renvoyés :

F0h :	Lecteur de disquette : deux faces, 80 pistes, 18 secteurs par piste (3 pouces 1/2)

F8h :	Disque dur

F9h :	Lecteur de disquette : deux faces, 15 secteurs par piste (5 pouces, AT seulement) ou deux 	faces, 80 pistes, 9 secteurs par piste (3 pouces 1/2)

FAh :	Lecteur de disquette : une face, 80 pistes, 8 secteurs par piste (5 ou 3 pouces 1/2)

FBh :	Lecteur de disquette : deux faces, 80 pistes, 8 secteurs par piste (5 ou 3 pouces 1/2)

FCh :	Lecteur de disquette : une face, 40 pistes, 9 secteurs par piste (5 pouces 1/4)

FDh :	Lecteur de disquette : deux faces, 40 pistes, 9 secteurs par piste (5 pouces 1/4)

FEh :	Lecteur de disquette : une face, 40 pistes, 8 secteurs par piste (5 pouces 1/4)

FFh :	Lecteur de disquette : deux faces, 40 pistes, 8 secteurs par piste (5 pouces 1/4)

·	Le contenu des registres AH, SI, DI, BP, CS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 1Dh    DOS (> 1.0)

Réservée à un usage interne


Int 21h, Fct 1Eh     DOS (> 1.0)

Réservée à un usage interne


Int 21h, Fct 1Fh    Lire le pointeur BPD pour le lecteur en cours     DOS (> 1.0)

A travers l'appel de cette fonction, DOS place un pointeur sur le bloc de paramètres DOS (BPD) du lecteur en cours. Le BPD décrit la structure logique et physique du lecteur.

Entrée :

AH 	= 1Fh

Sortie :

AL 	= 0 : Pas d'erreur, dans ce cas

DS:BX = Pointeur FAR sur BPD

Remarques :

·	S'il s'agit d'un changement de disquette effectué sur le périphérique en cours, DOS s'adresse d'abord au lecteur pour compléter le BPD avec les données concernant le lecteur et le format de la disquette. En revanche, pour le disque dur, ces informations se trouvent déjà dans la mémoire si bien qu'il n'est pas nécessaire d'effectuer un accès au périphérique.

·	La structure du bloc de paramètres DOS varie en fonction des versions DOS.

·	Le contenu des registres AH, CX, DX, SI, DI, BP, CS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 20h    DOS (> 1.0)

Réservée à un usage interne


Int 21h, Fct 21h    Lecture sélective (FCB)     DOS (> 1.0)

Lire un enregistrement déterminé d'un fichier en le transférant dans la DTA.

Entrée :

AH 	= 21h

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Enregistrement lu complètement

AL 	= 1 : Fin du fichier atteinte, rien n'a été lu

AL 	= 2 : Débordement de segment

AL 	= 3 : Enregistrement lu partiellement

Remarques :

·	Cette fonction ne doit être appelée qu'après que le fichier ait été ouvert à travers le FCB indiqué.

·	L'enregistrement lu est celui dont l'adresse est spécifiée dans le FCB à partir de la cellule 21h.

·	L'enregistrement est transféré dans la DTA. Si celle-ci n'est pas assez grande, il convient de la déplacer auparavant vers un buffer utilisateur à l'aide de la fonction 1Ah.

·	La taille de l'enregistrement, c'est-à-dire le nombre d'octets lus, est inscrit dans le FCB.

·	Après appel de cette fonction, le pointeur de fichier est dirigé automatiquement sur le début de l'enregistrement à lire, de sorte qu'un appel consécutif de la fonction de lecture séquentielle d'un enregistrement lirait à nouveau le même enregistrement.

·	Le numéro d'enregistrement n'est pas incrémenté après appel de la fonction, de sorte qu'un nouvel appel de cette fonction lirait le même enregistrement.

·	L'erreur 2 se produit si la DTA est située à la fin d'un segment et que l'enregistrement lu est conduit, de ce fait, à dépasser la limite du segment.

·	L'erreur 3 se produit lorsque la fin d'un fichier ne comporte pas un enregistrement complet mais seulement un enregistrement partiel. Dans ce cas, l'enregistrement partiel est lu mais comblé de zéros jusqu'à la longueur prescrite.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 22h    Ecriture sélective (FCB)     DOS (> 1.0)

Ecrire un enregistrement déterminé dans le fichier.

Entrée :

AH 	= 22h

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Enregistrement écrit entièrement

AL 	= 1 : Support (disquette/disque dur) plein

AL 	= 2 : Débordement de segment

Remarques :

·	Cette fonction ne doit être appelée qu'après que le fichier ait été ouvert à travers le FCB indiqué.

·	L'adresse de l'enregistrement à écrire doit être spécifiée à partir de la cellule de mémoire 21h du FCB.

·	La taille de l'enregistrement, c'est-à-dire le nombre d'octets écrits, est inscrit dans le FCB.

·	L'enregistrement est transféré de la DTA dans le fichier. Si celle-ci n'est pas assez grande, il convient de la déplacer auparavant vers un buffer utilisateur à l'aide de la fonction 1Ah.

·	Après appel de cette fonction, le pointeur de fichier est dirigé automatiquement sur le début de l'enregistrement à écrire, de sorte qu'un appel consécutif de la fonction d'écriture séquentielle d'un enregistrement écrirait à nouveau le même enregistrement.

·	Le numéro d'enregistrement n'est pas incrémenté après appel de la fonction, de sorte qu'un nouvel appel de cette fonction écrirait le même enregistrement.

·	L'erreur 2 se produit si la DTA est située à la fin d'un segment et que l'enregistrement à écrire est conduit, de ce fait, à dépasser la limite du segment.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 23h    Lire la taille du fichier (FCB)     DOS (> 1.0)

Cette fonction permet de connaître le nombre d'enregistrements et donc, de ce fait, la taille d'un fichier.

Entrée :

AH 	= 23h

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Fichier trouvé, dans ce cas le champ d'enregistrement à partir de l'adresse 21h du FCB contient le nombre d'enregistrements dans le fichier.

AL 	= 255 : Fichier non trouvé

Remarques :

·	Le FCB transmis contient la désignation de périphérique ainsi que le nom et l'extension du fichier dont il s'agit de déterminer la taille.

·	Contrairement à tous les autres accès de fichier soutenus par FCB, la taille d'enregistrement doit être inscrite dans le FCB avant appel de cette fonction.

·	Si la taille d'enregistrement spécifiée est 1, cette fonction permet d'obtenir directement et précisément la taille du fichier en octets.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 24h    Définir le numéro d'enregistrement     DOS (> 1.0)

Cette fonction permet de fixer sur la position actuelle du pointeur de fichier le numéro d'enregistrement dans le FCB qui définit l'accès séquentiel à un fichier. Après une série d'accès de fichier séquentiels, on peut ainsi poursuivre avec l'accès sélectif à l'endroit précis où les accès séquentiels avaient été interrompus.

Entrée :

AH 	= 24h

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

aucune

Remarques :

·	Cette fonction ne doit être appelée qu'après que le fichier ait été ouvert à travers le FCB spécifié.

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Int 21h, Fct 25h    Modifier le vecteur d'Int     DOS (> 1.0)
Int 21h, Fct 25h    Modifier le vecteur d'Interruption  DOS (> 1.0)

Cette fonction permet de rediriger n'importe quel vecteur d'interruption sur une autre routine.

Entrée :

AH 	= 25h

AL 	= Numéro d'interruption

DS 	= Nouvelle adresse de segment de la routine d'interruption

DX 	= Nouvelle adresse d'offset de la routine d'interruption

Sortie :

aucune

Remarques :

·	Avant d'appeler cette fonction, il convient tout d'abord de lire à l'aide de la fonction 35h l'ancien contenu du vecteur d'interruption à modifier et de le sauvegarder. Une fois le programme terminé, il sera préférable de rétablir cet ancien contenu à l'aide de cette même fonction.

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Int 21h, Fct 26h    Créer un nouveau PSP    DOS (> 1.0)

Le PSP du programme exécuté est copié à l'adresse spécifiée.

Entrée :

AH 	= 26h

DX 	= Adresse de segment du nouveau PSP

Sortie :

aucune

Remarques :

·	L'adresse d'offset du nouveau PSP est 0.

·	Cette fonction était utilisée sous la version 1 du DOS pour exécuter d'autres programmes. A cet effet, un PSP était mis en place, après quoi le programme voulu pouvait être chargé à la suite de ce PSP puis être exécuté.

·	Sous les versions 2 et 3 du DOS, il est préférable de ne plus recourir à cette fonction car les autres programmes peuvent être chargés et exécutés à l'aide de la fonction EXEC 4Bh.

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Int 21h, Fct 27h    Lecture sélective de plusieurs enregistrements (FCB)        DOS (> 1.0)

Lecture de plusieurs enregistrements consécutifs du fichier, à partir de l'enregistrement spécifié.

Entrée :

AH 	= 27h

CX 	= Nombre d'enregistrements à lire

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Enregistrements tous lus

= 1 : Fin du fichier atteinte, pas de lecture

= 2 : Débordement de segment

= 3 : Enregistrements lus partiellement

CX 	= Nombre d'enregistrements lus

Remarques :

·	Cette fonction ne doit être appelée qu'après que le fichier ait été ouvert à travers le FCB indiqué.

·	Le premier enregistrement lu est celui dont l'adresse est spécifiée à partir de la cellule de mémoire 21h du FCB.

·	Les enregistrements sont transférés dans la DTA. Si celle-ci n'est pas assez grande, il convient de la déplacer auparavant vers un buffer utilisateur à l'aide de la fonction 1Ah.

·	La taille de chaque enregistrement est inscrite dans le FCB.

·	Après appel de cette fonction, le pointeur de fichier est dirigé automatiquement à la suite du dernier enregistrement lu. Le numéro d'enregistrement est en outre incrémenté à raison du nombre d'enregistrements lus, de sorte qu'il désigne l'enregistrement suivant le dernier enregistrement lu.

·	L'erreur 2 se produit si la DTA est située à la fin d'un segment et que l'enregistrement lu est conduit, de ce fait, à dépasser la limite du segment.

·	L'erreur 3 se produit lorsque la fin d'un fichier ne comporte pas un enregistrement complet mais seulement un enregistrement partiel. Dans ce cas, l'enregistrement partiel est lu mais comblé de zéros jusqu'à la longueur prescrite.

·	Le contenu des registres AH, BX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 28h    Ecriture sélective de plusieurs enregistrements (FCB)        DOS (> 1.0)

Ecriture de plusieurs enregistrements consécutifs dans un fichier, à partir de l'enregistrement spécifié.

Entrée :

AH 	= 28h

CX 	= Nombre d'enregistrements à écrire

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Enregistrements tous écrits

= 1 : Support (disquette/disque dur) plein

= 2 : Débordement de segment

CX 	= Nombre d'enregistrements écrits

Remarques :

·	Cette fonction ne doit être appelée qu'après que le fichier ait été ouvert à travers le FCB indiqué.

·	L'adresse du premier enregistrement à écrire doit être spécifiée à partir de la cellule de mémoire 21h du FCB.

·	La taille de chaque enregistrement est inscrite dans le FCB.

·	Les enregistrements sont transférés de la DTA dans le fichier. Si celle-ci n'est pas assez grande, il convient de la déplacer auparavant vers un buffer utilisateur à l'aide de la fonction 1Ah.

·	Après appel de cette fonction, le pointeur de fichier est dirigé automatiquement à la suite du dernier enregistrement écrit. Le numéro d'enregistrement est en outre incrémenté à raison du nombre d'enregistrements écrits, de sorte qu'il désigne l'enregistrement suivant le dernier enregistrement écrit.

·	L'erreur 2 se produit si la DTA est située à la fin d'un segment et que l'enregistrement à écrire est conduit, de ce fait, à dépasser la limite du segment.

·	Le contenu des registres AH, BX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 29h    Inscrire un nom de fichier dans FCB     DOS (> 1.0)

Cette fonction inscrit dans les champs appropriés du FCB un nom de fichier fourni sous forme de chaîne ASCII et qui peut contenir une désignation de périphérique, un nom de fichier et une extension de fichier.

Entrée :

AH 	= 29h

DS 	= Adresse de segment du nom de fichier dans la mémoire

SI 	= Adresse d'offset du nom de fichier dans la mémoire

ES 	= Adresse de segment du FCB

DI	= Adresse d'offset du FCB

AL 	= Paramètres de transmission

Bit 1 = 	1 : La désignation de périphérique dans le FCB ne sera modifiée que si le nom de fichier transmis contient une désignation de périphérique.

0: La désignation de périphérique sera modifiée en tout état de cause. Si le nom de fichier transmis ne comporte pas de désignation de périphérique, la valeur 0 (lecteur actuel) sera inscrite dans le FCB.

Bit 2 =	1 : Le nom de fichier dans le FCB ne sera modifié que si le nom de fichier transmis contient un nom de fichier.

0: Le nom de fichier sera modifié en tout état de cause. Si le nom de fichier transmis ne comporte pas de nom de fichier, le nom de fichier sera rempli d'espaces (code ASCII 32) dans le FCB.

Bit 3 =	1 : L'extension de fichier dans le FCB ne sera modifiée que si le nom de fichier transmis contient une extension de fichier.

0: L'extension de fichier sera modifiée en tout état de cause. Si le nom de fichier transmis ne comporte pas d'extension de fichier, ce champ sera rempli d'espaces (code ASCII 32) dans le FCB.

Tous les autres bits doivent contenir la valeur 0.

Sortie :

AL	= 0 : Le nom de fichier transmis ne comportait pas de jokers

= 1 : Le nom de fichier transmis comportait des jokers

= 255 : La désignation de périphérique spécifiée est incorrecte.

DS	= Adresse de segment du premier caractère après le nom de fichier dans le buffer de nom de fichier spécifié

SI	= Adresse d'offset du premier caractère après le nom de fichier dans le buffer de nom de fichier spécifié

ES	= Adresse de segment du FCB

DI	= Adresse d'offset du FCB

Remarques :

·	Le nom de fichier transmis doit être terminé par un caractère de fin (code ASCII 0).

·	Si le nom de fichier transmis comporte le joker "*", tous les emplacements à partir de la position de "*" seront remplis de jokers "?" dans le champ correspondant du FCB.

·	Le contenu des registres AH, BX, CX, DX, BP, CS, SS et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 2Ah    Lire la date    DOS (> 1.0)

Cette fonction permet de déterminer la date actuelle.

Entrée :

AH 	= 2Ah

Sortie :

AL 	= Jour de la semaine (0=Dimanche, 1=Lundi, etc.)

CX 	= Année

DH 	= Mois

DL 	= Jour

Remarques :

·	Pour obtenir la date, le DOS appelle le driver d'horloge.

·	Le contenu des registres AH, BX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 2Bh    Modifier la date    DOS (> 1.0)

Cette fonction permet de modifier la date actuelle.

Entrée :

AH 	= 2Bh

CX 	= Année

DH 	= Mois

DL 	= Jour

Sortie :

AL 	= 0 : Tout va bien

AL 	= 255 : Date impossible

Remarques :

·	La date transmise est communiquée au driver d'horloge.

·	Si le PC n'est pas doté d'une horloge en temps réel sur piles ainsi que d'un driver d'horloge soutenant ce type d'horloge, la date ne sera conservée que jusqu'à l'arrêt de l'ordinateur ou jusqu'à un nouveau lancement du système.

·	L'ancienne heure est conservée si l'heure n'est pas plausible.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 2Ch    Lire l'heure    DOS

Cette fonction permet de déterminer l'heure actuelle.

Entrée :

AH 	= 2Ch

Sortie :

CH 	= Heures

CL 	= Minutes

DH 	= Secondes

DL 	= Centièmes de seconde

Remarques :

·	Pour obtenir l'heure, le DOS appelle le driver d'horloge.

·	Le contenu des registres AX, BX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 2Dh    Modifier l'heure    DOS (> 1.0)

Cette fonction permet de modifier l'heure actuelle.

Entrée :

AH 	= 2Dh

CH 	= Heures

CL 	= Minutes

DH 	= Secondes

DL 	= Centièmes de seconde

Sortie :

AL 	= 0 : Tout va bien

AL 	= 255 : Heure impossible

Remarques :

·	L'heure transmise est communiquée au driver d'horloge.

·	Si le PC n'est pas doté d'une horloge en temps réel sur piles ainsi que d'un driver d'horloge soutenant ce type d'horloge, l'heure ne sera conservée (et actualisée) que jusqu'à l'arrêt de l'ordinateur ou jusqu'à un nouveau lancement du système.

·	L'ancienne heure est conservée si l'heure n'est pas plausible.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 2Eh    Définir le flag Verify     DOS (> 1.0)

L'indicateur de vérification définit si après une opération d'écriture sur un driver de bloc (disquette, disque dur) il convient de vérifier si les données écrites ont été correctement transmises. Cette vérification ralentit naturellement l'accès aux périphériques concernés mais accroît la sécurité de transmission des données.

Entrée :

AH 	= 2Eh

DL 	= 0

AL 	= 0 : Ne pas vérifier les données

AL 	= 1 : Vérifier les données

Sortie :

aucune

Remarques :

·	Au niveau utilisateur, ce flag peut également être manipulé à l'aide des instructions VERIFY ON et VERIFY OFF.

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Int 21h, Fct 2Fh    Lire adresse de la DTA     DOS (> 1.0)

Cette fonction fournit en résultat l'adresse de la zone de transfert disque (DTA) qui sert de buffer de données pour tous les accès de fichier soutenus par FCB.

Entrée :

AH 	= 2Fh

Sortie :

ES 	= Adresse de segment de la DTA

BX 	= Adresse d'offset de la DTA

Remarques :

·	Cette fonction permet bien de déterminer l'adresse de la DTA mais cela ne permet nullement d'en déduire la taille de la DTA.

·	Immédiatement après le lancement d'un programme, la DTA commence à la cellule de mémoire 128 du PSP et présente une longueur de 128 octets.

·	Le contenu des registres AX, CX, DX, SI, DI, BP, CS, DS, SS et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 30h    Lire le numéro de version du DOS     DOS (> 1.0)

Cette fonction permet de déterminer le numéro de version du DOS sous lequel un programme est en train de tourner.

Entrée :

AH 	= 30h

Sortie :

AL 	= Numéro de version principal

AH 	= Numéro de version complémentaire

BH	= Code OEM

Remarques :

·	Le numéro de version principal est le numéro qui apparaît avant le point. Pour le numéro de version 2.1, le numéro de version principal sera donc 2.

·	Le numéro de version complémentaire est le numéro qui apparaît après le point. Ce numéro est toujours indiqué avec deux chiffres. Pour le numéro de version 2.1, le numéro de version complémentaire sera donc 10.

·	Dans le registre BH, le numéro de code OEM n'est pas généralement explicite puisque ce code n'est pas normalisé. Cependant, la règle adoptée est que le PC-DOS (d'IBM) porte le code 0.

·	Si la valeur 0 est renvoyée dans le registre AL, c'est que le programme tourne sous la version 1 du DOS, qui ne connaissait pas encore cette fonction.

·	Le contenu des registres DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 31h    Terminer programme mais laisser en mémoire     DOS (> 1.0)

Cette fonction permet de terminer le programme exécuté et de rendre le contrôle au programme qui l'avait appelé.

Contrairement aux autres fonctions pour terminer un programme, la mémoire occupée par le programme n'est cependant pas libérée pour une utilisation ultérieure. Le programme actuel reste donc résident en mémoire.

Entrée :

AH 	= 31h

AL 	= Code de fin

DX 	= Nombre de paragraphes à réserver

Sortie :

aucune

Remarques :

·	Le code de fin dans le registre AL sert à signaler au programme d'appel si le programme qu'il avait appelé a pu ou non être correctement exécuté. Le programme d'appel peut se faire communiquer cette valeur en appelant la fonction 4Dh. Dans un programme batch, cette valeur peut être testée à l'aide des instructions ERRORLEVEL et IF.

·	Le nombre de paragraphes (groupes de 16 octets) à réserver indique combien d'octets, à partir du PSP, ne devront pas être libérés pour une utilisation ultérieure.

·	Les blocs de mémoire réservés à l'aide de la fonction 48h ne sont pas concernés par la valeur dans le registre DX car ils ne peuvent être à nouveau libérés qu'en appelant la fonction 49h.


Int 21h, Fct 32h    Placer un pointeur sur le BPD d'un lecteur quelconque        DOS (> 1.0)

Cette fonction permet de placer un pointeur sur le bloc de paramètres DOS (BPD) d'un lecteur quelconque.

Entrée :

AH 	= 32h

DL 	= code de lecteur (0 = actuel, 1 = A, 2 = B, etc.)

Sortie :

Flag Carry = 1 : Erreur

0 : Tout va bien, dans ce cas

DS:BX = Pointeur FAR sur le BPD

Remarques :

·	S'il s'agit d'un changement de disquette effectué sur le périphérique spécifié, DOS s'adresse d'abord au lecteur pour compléter le BPD avec les données concernant le lecteur et le format. En revanche, s'il s'agit de disques durs, ces informations se trouvent déjà dans la mémoire si bien qu'il n'est pas nécessaire d'accéder à un périphérique.

·	Lors de l'appel de cette fonction, une erreur ne peut survenir que si un code de lecteur erroné a été spécifié. Dans ce cas, le code d'erreur 15 sera retourné dans le registre AL.

·	La structure du bloc de paramètres DOS varie en fonction des diverses versions DOS.

·	Le contenu des registres AH, CX, DX, SI, DI, BP, CS, SS et ES n'a pas été modifié par cette fonction.


Int 21h, Fct 33h, Sous-Fct 0    Lire le flag Break     DOS (> 1.0)

L'indicateur Break définit si le fait que la touche Ctrl-C ait été actionnée doit être testé lors de tout appel d'une fonction DOS ou seulement lorsqu'est appelée une des fonctions d'entrée et sortie de caractères. Lorsque la touche Ctrl-C est actionnée et que cet événement est effectivement testé, cela déclenche une interruption 23h. Cette fonction permet donc de lire la teneur actuelle de ce flag.

Entrée :

AH 	= 33h

AL 	= 0

Sortie :

DL 	= 0 : Test seulement pour l'entrée et sortie de caractères

DL 	= 1 : Test lors de tout appel de fonction

Remarques :

·	L'indicateur Break ne fait pas partie du bloc d'environnement d'un programme et il ne vaut donc pas uniquement pour un programme bien précis. Il affecte au contraire tous les programmes qui appellent les fonctions DOS d'entrée et sortie de caractères qui, elles-mêmes, testent l'apparition d'un caractère Ctrl-C ou le fait que la touche Break ait été actionnée.

·	Le contenu des registres AX, BX, CX, DH, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 21h, Fct 33h, Sous-Fct 1    Définir le flag Break     DOS (> 1.0)

Le flag Break définit si le fait que la touche Ctrl-C ait été actionnée doit être testé lors de tout appel d'une fonction DOS ou seulement lorsqu'est appelée une des fonctions d'entrée et sortie de caractères. Lorsque la touche Ctrl-C est actionnée et que cet événement est effectivement testé, cela déclenche une interruption 23h. Cette fonction permet donc de mettre ou annuler ce flag.

Entrée :

AH 	= 33h

AL 	= 1

DL 	= 0 : Test seulement pour l'entrée et sortie de caractères

DL 	= 1 : Test lors de tout appel de fonction

Sortie :

aucune

Remarques :

·	Le flag Break ne fait pas partie du bloc d'environnement d'un programme et il ne vaut donc pas uniquement pour un programme bien précis. Il affecte au contraire tous les programmes qui appellent les fonctions DOS d'entrée et sortie de caractères, qui elles-mêmes testent l'apparition d'un caractère Ctrl-C ou le fait que la touche Break ait été actionnée.

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Int 21h, Fct 34h    Placer un pointeur sur le flag INDOS    DOS (> 2.0)

Après appel de cette fonction, DOS communique l'adresse de l'octet d'activité du DOS qui est particulièrement utile pour les programmes résidents.

Entrée :

AH 	= 34h

Sortie :

ES:BX = Pointeur FAR sur le flag INDOS

Remarques :

·	En ce qui concerne le flag INDOS, il s'agit d'un octet qui compte les appels récursifs de l'interruption 21h. Il contient la valeur 0 tant que DOS n'est pas actif et c'est pourquoi les fonctions DOS peuvent être appelées à partir d'un programme résident. Si le flag contient cependant une valeur supérieure à 0, DOS est alors justement actif puisqu'une valeur supérieure à 1 symbolise un nombre correspondant d'appels récursifs. Dans ce cas, DOS ne peut pas être interrompu par un appel de fonction émanant d'un programme TSR au risque de provoquer un plantage dans le pire des cas.

·	Le contenu des registres CX, DX, SI, DI, BP, CS, DS, SS n'est pas modifié par cette fonction.


Int 21h, Fct 35h    Lire le contenu d'un vecteur d'Int     DOS (> 1.0)

Cette fonction fournit en résultat le contenu actuel d'un vecteur d'interruption et donc l'adresse de la routine d'interruption correspondante.

Entrée :

AH 	= 35h

AL 	= Numéro d'interruption

Sortie :

ES 	= Adresse de segment de la routine d'interruption

BX 	= Adresse d'offset de la routine d'interruption

Remarques :

·	Pour garantir la compatibilité de vos programmes avec les versions futures du DOS, il est préférable d'appeler cette fonction pour lire un vecteur d'interruption plutôt que de lire le contenu de ce vecteur directement dans la table de vecteurs d'interruption.

·	Le contenu des registres AX, CX, DX, SI, DI, BP, CS, DS, SS et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 36h    Lire l'espace disque disponible    DOS (> 1.0)

Cette fonction renvoie des informations sur le périphérique spécifié (c'est-à-dire le driver de bloc spécifié) qui permettent de calculer l'espace disque encore libre.

Entrée :

AH 	= 36h

DL 	= Code de périphérique

Sortie :

AX 	= 65535 : Périphérique absent, sinon nombre de secteurs par cluster

BX 	= Nombre de clusters libres

CX 	= Nombre d'octets par secteur

DX 	= Nombre total de clusters du périphérique

Remarques :

·	Pour le code de périphérique transmis, 0 représente le lecteur actuel, 1 le lecteur A, 2 le lecteur B, etc.

·	La mémoire encore libre sur le support se calcule en multipliant le nombre d'octets par secteur par le nombre de secteurs par cluster puis par le nombre de clusters libres.

·	Le contenu des registres SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 37h, Sous-Fct 00h    Lire le code pour paramètres de ligne de commande        DOS (> 2.0)

Le caractère valable pour tous les commutateurs de paramètres lors de l'appel d'un programme peut être obtenu à l'aide de cette fonction.

Entrée :

AH 	= 37h

AL 	= 00h

Sortie :

DL 	= code ASCII du caractère

Remarques :

·	En règle générale, on admet que le caractère servant à introduire les paramètres dans une ligne de commande soit le signe de la division (/). Par conséquent, rares sont les programmes qui demandent le caractère de commutation des lignes de commande et peuvent ne pas réagir à la modification de ce caractère.

·	Le contenu des registres BX, CX, DH, SI, DI, BP, CS, DS, SS, ES n'est pas modifié par cette fonction.


Int 21h, Fct 37h, Sous-Fct 01h    Définir le caractère de commutateur de ligne de commande         DOS (> 2.0)

L'appel de cette fonction permet de définir le caractère que tous les commutateurs de lignes de commande doivent reconnaître lors de l'appel d'un programme.

Entrée :

AH 	= 37h

AL 	= 01h

DL 	= code ASCII du caractère

Sortie :

Flag Carry :	0, caractère accepté

1, Erreur

Remarques :

·	Actuellement, les caractères autorisés pour introduire les paramètres dans une ligne de commande sont (=), (/) et (-). Les autres caractères ne sont pas acceptés et sont rejetés.

·	Vu que les programmes utilisant la sous-fonction 00h sont peu nombreux et que le caractère adopté comme commutateur de lignes de commande est toujours le caractère (/), l'appel de la sous-fonction 01h n'agit que sur de rares programmes. Mais on peut citer les divers programmes DOS internes et externes qui accordent une importance à ce caractère.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS, ES n'est pas modifié par cette fonction.


Int 21h, Fct 38h    Lire les symboles et formats caractéristiques du pays         DOS (Version 2)

Cette fonction permet de déterminer les différents paramètres caractéristiques du pays qui a été spécifié avec l'instruction COUNTRY dans le fichier CONFIG.SYS.

Entrée :

AH 	= 38h

AL 	= 0

DS 	= Adresse de segment d'un buffer

DX 	= Adresse d'offset d'un buffer

Sortie :

aucune

Remarques :

·	Avant d'appeler cette fonction, nous vous conseillons de déterminer à l'aide de la fonction 48 quelle version du DOS est utilisée, pour que vous puissiez tenir compte des différences entre les versions 2 et 3 dans la définition des registres pour l'appel et le retour de cette fonction.

·	Le buffer doit avoir une taille de 32 octets au moins. La fonction y inscrira les différents paramètres caractéristiques du pays.

·	Les différents octets du buffer contiennent, après appel de la fonction, les informations suivantes :

Octets 0 - 1 : 	Format de date

0 = USA : Mois-Jour-Année

1 = Europe : Jour-Mois-Année

2 = Japon : Année-Mois-Jour

Octet 2 :	Code ASCII du symbole de la monnaie

Octet 3 :	0

Octet 4 :	Code ASCII du caractère de millier

Octet 5 :	0

Octet 6 :	Code ASCII du symbole décimal

Octet 7 :	0

Octets 8 - 31 : 	réservés

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Int 21h, Fct 38h, Sous-Fct 0    Lire les symboles et formats caractéristiques d'un pays        DOS (> la version 3)

Cette fonction permet de déterminer les différents paramètres caractéristiques d'un pays. Elle permet d'obtenir aussi bien les paramètres pour le pays qui a été spécifié avec l'instruction COUNTRY dans le fichier CONFIG.SYS que ceux correspondant à n'importe quel autre pays. Les différents paramètres sont placés par la fonction dans le buffer qui lui a été transmis.

Entrée :

AH 	= 38h

AL	= 0

DS 	= Adresse de segment d'un buffer

DX 	= Adresse d'offset d'un buffer

AL 	= 0 : Lire paramètre pour le pays actuel

AL 	= 1 - 254 : Code du pays dont il s'agit de lire les paramètres caractéristiques

AL 	= 255 : Le code du pays dont il s'agit de lire les paramètres caractéristiques figure dans le registre BX

Sortie :

Flag Carry = 0 tout va bien.

Flag Carry = 1 : Code du pays incorrect

Remarques :

·	Avant d'appeler cette fonction, nous vous conseillons de déterminer à l'aide de la fonction 48 quelle version du DOS est utilisée, pour que vous puissiez tenir compte des différences entre les versions 2 et 3 dans la définition des registres pour l'appel et le retour de cette fonction.

·	Le buffer doit avoir une taille de 34 octets au moins. La fonction y inscrira les différents paramètres caractéristiques du pays.

·	Les différents octets du buffer contiennent, après appel de la fonction, les informations suivantes :

Octets 0 - 1 : 	Format de date

0 = USA : Mois-Jour-Année

1 = Europe : Jour-Mois-Année

2 = Japon : Année-Mois-Jour

Octets 2 - 6 : 	Symbole de la monnaie (chaîne ASCII terminée par un caractère de fin)

Octet 7 :	Code ASCII du caractère de millier

Octet 8 :	0

Octet 9 :	Code ASCII du symbole décimal

Octet 10 : 	0

Octet 11 : 	Code ASCII du séparateur dans la date

Octet 12 : 	0

Octet 13 : 	Code ASCII du séparateur de l'heure

Octet 14 : 	0

Octet 15 : 	Format de la monnaie

Bit 0 = 0 : Symbole de la monnaie avant la valeur

Bit 0 = 1 : Symbole de la monnaie après la valeur

Bit 1 = 0 : Pas d'espace entre la valeur et le symbole de la monnaie

Bit 1 = 1 : Un espace entre la valeur et le symbole de la monnaie

Octet 16 : 	Précision (nombre de chiffres après le point décimal)

Octet 17 : 	Format horaire

Bit 0 = 0 : Horloge 12 heures

Bit 0 = 1 : Horloge 24 heures

Octets 18 - 21 : 	Adresse d'une routine de conversion de caractères (voir plus bas)

Octets 22 - 33 : 	réservés

·	Le contenu des adresses 18 à 21 représente les adresses d'offset et de segment d'une procédure FAR qui sert à convertir en majuscules les caractères spéciaux d'un pays, dans le jeu de caractères du PC. Cette routine considère le contenu du registre AL comme le code d'une minuscule à convertir en majuscule. Si une majuscule de ce type existe, elle figurera dans le registre AL après appel de la fonction. Si cette majuscule n'existe pas, par contre, le contenu du registre AL restera inchangé. Nous pourrions par exemple utiliser cette routine pour convertir un é en E, par exemple.

·	Le contenu des registres AX, BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 38h, Sous-Fct 1    Définir le pays    DOS (> la version 3)

Cette fonction permet de choisir le pays actuel. Ainsi, sont du même coup fixés différents paramètres caractéristiques du pays. Ces paramètres peuvent être lus à l'aide de la sous-fonction 0 de cette même fonction. Par rapport aux fonctions précédentes du DOS qui prévoyaient que le pays ne pouvait être choisi qu'à l'aide de l'instruction COUNTRY dans le fichier CONFIG.SYS, cette fonction présente l'avantage de permettre de déterminer ou changer le pays, même après le lancement du système.

Entrée :

AH 	= 38h

DX 	= 65535

AL 	= 1 - 254 : Numéro de pays

AL 	= 255 : Numéro supérieur à 254, auquel cas

BX 	= Numéro du pays

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Code du pays incorrect

Remarques :

·	Avant d'appeler cette fonction, il est préférable de déterminer la version actuelle du DOS à l'aide de la fonction 48, pour s'assurer que cette fonction est réellement disponible.

·	Il n'est pas possible de définir séparément les différents paramètres d'un pays. Vous pouvez seulement fixer le code du pays et le DOS définira automatiquement les paramètres prédéfinis pour ce pays.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 39h    Créer sous-répertoire     DOS (> 1.0)

Cette fonction permet de créer un nouveau sous-répertoire sur le périphérique spécifié.

Entrée :

AH 	= 39h

DS 	= Adresse de segment du chemin du sous-répertoire

DX 	= Adresse d'offset du chemin du sous-répertoire

Sortie :

Flag Carry =0 : Nouveau sous-répertoire créé

Flag Carry =1 : Erreur, dans ce cas

AX = 3 : Chemin non trouvé

AX = 5 : Accès refusé

Remarques :

·	Le chemin de sous-répertoire transmis est une chaîne ASCII terminée par un caractère de fin (code ASCII 0).

·	Si le chemin de sous-répertoire comporte une désignation de périphérique, l'accès se fera sur le périphérique spécifié, sinon le sous-répertoire sera créé sur le périphérique actuel.

·	Une erreur peut se produire si un élément du chemin n'existe pas, si un sous-répertoire existe déjà sous le nom spécifié ou bien si le sous-répertoire devait être créé dans le répertoire racine alors que ce dernier est déjà plein.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 3Ah    Supprimer un sous-répertoire     DOS (> 1.0)

Cette fonction permet de supprimer un sous-répertoire sur le périphérique spécifié.

Entrée :

AH 	= 3Ah

DS 	= Adresse de segment du chemin du sous-répertoire

DX 	= Adresse d'offset du chemin du sous-répertoire

Sortie :

Flag Carry =0 : Sous-répertoire supprimé

Flag Carry =1 : Erreur, dans ce cas

AX = 3 : Chemin non trouvé

AX = 5 : Accès refusé

Remarques :

·	Le chemin de sous-répertoire transmis est une chaîne ASCII terminée par un caractère de fin (code ASCII 0).

·	Si le chemin de sous-répertoire comporte une désignation de périphérique, l'accès se fera sur le périphérique spécifié, sinon le sous-répertoire sera supprimé sur le périphérique actuel.

·	Une erreur peut se produire si un élément du chemin n'existe pas, si le sous-répertoire est le sous-répertoire actuel ou bien si des fichiers figurent encore dans le sous-répertoire à supprimer.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 3Bh    Défnir le sous-répertoire en cours    DOS (> 1.0)

Cette fonction permet d'activer un sous-répertoire sur le périphérique spécifié.

Entrée :

AH 	= 3Bh

DS 	= Adresse de segment du chemin du sous-répertoire

DX 	= Adresse d'offset du chemin du sous-répertoire

Sortie :

Flag Carry =0 : Sous-répertoire indiqué devient le sous-répertoire en cours

Flag Carry =1 : Erreur, dans ce cas

AX = 3 : Chemin non trouvé

Remarques :

·	Le chemin de sous-répertoire transmis est une chaîne ASCII terminée par un caractère de fin (code ASCII 0).

·	Si le chemin de sous-répertoire comporte une désignation de périphérique, l'accès se fera sur le périphérique spécifié, sinon le sous-répertoire actuel sera modifié sur le périphérique actuel.

·	Une erreur peut se produire si un élément du chemin n'existe pas.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 3Ch    Créer ou vider fichier (Handle)     DOS (> 1.0)

Après l'appel de cette fonction, le DOS examine si le fichier spécifié existe déjà. Si c'est le cas, ce fichier est vidé et son contenu antérieur est irrémédiablement perdu. Si cependant le fichier spécifié n'existe pas encore, il est créé.

Entrée :

AH 	= 3Ch

CX 	= Attribut de fichier

Bit 0 = 1 : Fichier peut seulement être lu

Bit 1 = 1 : Fichier caché

Bit 2 = 1 : Fichier système

DS 	= Adresse de segment du nom de fichier

DX 	= Adresse d'offset du nom de fichier

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas AX = Handle du fichier

Flag Carry =1 : Erreur, dans ce cas AX = code d'erreur :

3 : Chemin non trouvé

4 : Plus de handle libre

5 : Accès refusé

Remarques :

·	Les différents bits de l'attribut de fichier peuvent parfaitement être combinés.

·	Le nom de fichier doit être fourni sous forme d'une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Ce nom de fichier peut comporter une désignation de périphérique, une désignation de chemin complète et un nom de fichier proprement dit mais il ne doit pas contenir de jokers. Si la désignation de périphérique ou la désignation de chemin sont omises, l'accès se fera sur le périphérique actuel ou sur le répertoire actuel.

·	Une erreur peut apparaître lors de l'appel de cette fonction si un élément de la désignation de chemin n'existe pas, si le fichier est censé être créé dans le répertoire racine alors que ce dernier est déjà plein ou encore si un fichier existe déjà sous ce nom et qu'il ne peut être vidé parce qu'il est protégé contre l'écriture (bit 0 de l'attribut de fichier = 1).

·	Si l'appel de la fonction s'est conclu sans problème, toutes les autres fonctions handle pourront être appelées à l'aide du handle renvoyé car le fichier a aussi été ouvert.

·	Le pointeur de fichier est dirigé sur le premier octet du fichier.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 3Dh    Ouvrir fichier (Handle)    DOS (> 1.0)

Cette fonction permet d'ouvrir un fichier déjà existant pour pouvoir y accéder à l'aide des autres fonctions.

Entrée :

AH 	= 3Dh

AL 	= Mode d'accès

Bits 0 - 3 : Autorisation de lecture/écriture

0000(b) = 	Fichier peut seulement être lu

0001(b) = 	Fichier peut seulement être écrit

0010(b) = 	Fichier peut être lu ou écrit

Bits 4 - 6 : Mode de partage

000(b) = 	seul le programme actuel peut accéder au fichier (mode FCB)

001(b) = 	seul le programme actuel peut accéder au fichier

010(b) = 	un autre programme peut lire le fichier mais non y écrire

011(b) = 	un autre programme peut écrire dans le fichier mais non le lire

100(b) = 	un autre programme peut lire et écrire le fichier

Bit 7 : Flag Handle

0 = 	le programme-enfant du programme actuel peut accéder au handle de ce fichier

1 = 	seul le programme actuel peut accéder au handle de ce fichier

DS 	= Adresse de segment du nom de fichier

DX 	= Adresse d'offset du nom de fichier

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas AX = Handle du fichier

Flag Carry =1 : Erreur, dans ce cas AX = code d'erreur

1 : Pas de logiciel de gestion de partage (par ex SHARE)

2 : Fichier non trouvé

3 : Chemin non trouvé ou fichier n'existe pas

4 : Plus de handle libre

5 : Accès refusé

12 : Mode d'accès non autorisé

Remarques :

·	Le nom de fichier doit être fourni sous forme d'une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Ce nom de fichier peut comporter une désignation de périphérique, une désignation de chemin complète et un nom de fichier proprement dit mais il ne doit pas contenir de jokers. Si la désignation de périphérique ou la désignation de chemin sont omises, l'accès se fera sur le périphérique actuel ou sur le répertoire actuel.

·	Si l'appel de la fonction s'est conclu sans problème, toutes les autres fonctions handle pourront être appelées à l'aide du handle renvoyé.

·	Le pointeur de fichier est dirigé sur le premier octet du fichier.

·	Sous la version 2 du DOS, seuls les bits 0 à 2 du mode d'accès sont significatifs. Il convient de régler tous les autres bits sur 0 pour garantir une bonne exécution de l'appel de fonction même sous la version 3.

·	Le mode de partage des bits 4 à 6 n'a d'intérêt, même sous la version 3 du DOS, qu'à condition que le fichier figure sur une mémoire de masse faisant partie d'un réseau. Dans ce cas, ces 3 bits définissent si, et si oui dans quelles conditions, d'autres programmes, tournant sur d'autres PC du réseau, pourront accéder au fichier pendant qu'il sera ouvert à la suite de cet appel de fonction.

·	L'erreur 12 ne peut apparaître que sous la version 3 du DOS, et uniquement à l'intérieur d'un réseau, si le fichier a déjà été ouvert par un autre programme et s'il a été décidé qu'aucun autre programme ne peut y accéder pour le moment.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 3Eh    Fermer fichier (Handle)    DOS (> 1.0)

Cette fonction permet de fermer un fichier préalablement ouvert. Auparavant, toutefois, toutes les données qui doivent être écrites dans le fichier mais qui figurent encore dans les buffers internes du DOS sont écrites dans le fichier. Si le fichier a été modifié, l'entrée du répertoire correspondant à ce fichier est encore actualisée, c'est-à-dire que la nouvelle taille du fichier y est inscrite ainsi que les date et heure actuelle, en tant que date et heure de la dernière modification.

Entrée :

AH 	= 3Eh

BX 	= Handle à fermer

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas

AX = 6 : Handle non autorisé ou fichier correspondant non ouvert

Remarques :

·	Il faut veiller à ne pas appeler par mégarde cette fonction avec le numéro d'un des handles prédéfinis (0 à 4) car vous risqueriez ainsi de fermer par exemple le périphérique d'entrée ou le périphérique de sortie standard, la conséquence étant alors que vous ne pourriez plus recevoir de caractères du clavier ou que vous ne pourriez plus en afficher sur l'écran.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 3Fh    Lire fichier (Handle)    DOS (> 1.0)

Cette fonction permet de lire, à l'aide d'un handle, un nombre déterminé de caractères dans un fichier (ou sur un périphérique) préalablement ouvert. Ces caractères sont transférés dans un buffer. L'opération de lecture commence sur la position actuelle du pointeur de fichier.

Entrée :

AH 	= 3Fh

BX 	= Handle du fichier ou du périphérique

CX 	= Nombre d'octets à lire

DS 	= Adresse de segment du buffer

DX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas AX = nombre d'octets lus

Flag Carry =1 : Erreur, dans ce cas AX = code d'erreur

5 : Accès refusé

6 : Handle non autorisé ou fichier non ouvert

Remarques :

·	Cette fonction permet non seulement de lire des caractères sur un fichier mais aussi sur un périphérique comme le périphérique d'entrée standard (le clavier), qui porte le handle 0.

·	Si le flag Carry est annulé après appel de cette fonction mais que le registre AX contient la valeur 0, cela signifie que le pointeur de fichier se trouvait déjà sur la fin du fichier avant même que cette fonction n'ait été appelée. Dans ce cas, aucune donnée n'a pu être lue.

·	Si le flag Carry est annulé après appel de cette fonction mais que le registre AX contient une valeur inférieure à celle du registre CX avant appel de la fonction, cela signifie que le nombre d'octets voulu n'a pu être lu parce que la fin du fichier a été atteinte auparavant.

·	Après appel de cette fonction, le pointeur de fichier est dirigé sur le premier octet immédiatement à la suite du dernier octet lu.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 40h    Ecrire dans fichier (Handle)     DOS (> 1.0)

Cette fonction permet d'écrire, à l'aide d'un handle, un nombre déterminé de caractères dans un fichier (ou sur un périphérique) préalablement ouvert. Ces caractères sont tirés d'un buffer. L'opération d'écriture commence à la position actuelle du pointeur de fichier.

Entrée :

AH 	= 40h

BX 	= Handle du fichier ou du périphérique

CX 	= Nombre d'octets à écrire

DS 	= Adresse de segment du buffer

DX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas AX = nombre d'octets écrits

Flag Carry =1 : Erreur, dans ce cas AX = code d'erreur

5 : Accès refusé

6 : Handle non autorisé ou fichier non ouvert

Remarques :

·	Cette fonction permet non seulement d'écrire des caractères sur un fichier mais aussi sur un périphérique comme le périphérique de sortie standard (l'écran), qui porte le handle 1.

·	Si le flag Carry est annulé après appel de cette fonction mais que le registre AX contient la valeur 0, cela signifie que le périphérique sur lequel figure le fichier était déjà plein avant même que cette fonction n'ait été appelée.

·	Si le flag Carry est annulé après appel de cette fonction mais que le registre AX contient une valeur inférieure à celle du registre CX avant appel de la fonction, cela signifie que le nombre d'octets voulu n'a pu être écrit parce que le périphérique sur lequel figure le fichier a été rempli auparavant.

·	Après appel de cette fonction, le pointeur de fichier est dirigé sur le premier octet immédiatement à la suite du dernier octet écrit.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 41h    Supprimer fichier (Handle)    DOS (> 1.0)

Cette fonction permet de supprimer le fichier dont le nom est transmis à la fonction.

Entrée :

AH 	= 41h

DS 	= Adresse de segment du nom de fichier

DX 	= Adresse d'offset du nom de fichier

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas AX = code d'erreur

2 : Fichier non trouvé

5 : Accès refusé

Remarques :

·	Le nom de fichier doit être fourni sous forme d'une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Ce nom de fichier peut comporter une désignation de périphérique, une désignation de chemin complète et un nom de fichier proprement dit mais il ne doit pas contenir de jokers. Si la désignation de périphérique ou la désignation de chemin sont omises, l'accès se fera sur le périphérique actuel ou sur le répertoire actuel.

·	Une erreur apparaît si un élément de la spécification de chemin n'existe pas ou si le fichier porte l'attribut "lecture seulement", auquel cas il n'est possible ni d'y écrire ni de le supprimer. Cet attribut peut toutefois être modifié à l'aide de la fonction 43h.

·	Cette fonction ne permet de supprimer ni des sous-répertoires ni des noms de volumes.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 42h    Déplacer le pointeur de fichier (handle)    DOS (> 1.0)

Cette fonction permet de déplacer le pointeur de fichier d'un fichier déjà ouvert, à l'aide de son handle. On obtient ainsi une possibilité d'accès sélectif puisque les différents enregistrements ne sont plus nécessairement lus de façon séquentielle, c'est-à-dire dans l'ordre dans lequel ils sont disposés. La nouvelle position du pointeur de fichier n'est pas spécifiée de façon absolue mais sous forme d'une distance (offset) par rapport à la position actuelle, par rapport au début du fichier ou encore par rapport à la fin du fichier. Ce déplacement est défini par un nombre 32 bits.

Entrée :

AH 	= 42h

AL 	= Code du déplacement

0 : Le déplacement se rapporte au début du fichier

1 : La distance se rapporte à la position actuelle du pointeur de fichier

2 : Le déplacement se rapporte à la fin du fichier

BX 	= Handle

CX 	= Mot fort du déplacement

DX 	= Mot faible du déplacement

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas

DX = Mot fort du pointeur de fichier

AX = Mot faible du pointeur de fichier

Flag Carry =1 : dans ce cas AX = code d'erreur

1 : Code de déplacement non autorisé

6 : Handle non autorisé ou fichier non ouvert

Remarques :

·	Si vous travaillez avec les codes d'offset 1 et 2, le déplacement spécifié peut aussi être négatif, soit pour ramener le pointeur de fichier en arrière, soit pour le placer avant le début du fichier. Il est ainsi possible de régler le pointeur de fichier avant la fin du fichier. Dans ce cas, une erreur ne sera cependant signalée qu'au cours du prochain accès en lecture ou écriture à ce fichier.

·	Quel que soit le code de déplacement transmis pour appeler la fonction, la position du pointeur de fichier renvoyée après appel de la fonction se rapporte toujours au début du fichier.

·	Cette fonction permet aussi de déterminer la taille d'un fichier si on lui transmet 2 comme code de distance et 0 comme distance. Le pointeur de fichier étant ainsi amené sur le dernier octet du fichier, sa position, qui est renvoyée au programme ayant appelé la fonction, correspondra au nombre d'octets et donc à la taille du fichier.

·	Le contenu des registres BX, CX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 43h, Sous-Fct 0    Lire l'attribut d'un fichier    DOS (> 1.0)

Cette fonction permet de lire l'attribut d'un fichier quelconque.

Entrée :

AH 	= 43h

AL 	= 0

DS 	= Adresse de segment du nom de fichier

DX 	= Adresse d'offset du nom de fichier

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas CX = Attribut du fichier

Bit 0 = 1 : 	Fichier doit seulement être lu mais on ne peut rien y écrire

Bit 1 = 1 : 	Fichier est caché (ne sera pas affiché par DIR)

Bit 2 = 1 : 	Fichier est un fichier système

Bit 5 = 1 : 	Fichier a été modifié depuis le dernier archivage

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

2 : Fichier non trouvé

3 : Chemin non trouvé

Remarques :

·	Le nom de fichier doit être fourni sous forme d'une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Il peut comporter une désignation de périphérique, une spécification de chemin complète ainsi qu'un nom de fichier proprement dit, mais pas de jokers. Si la désignation de périphérique ou la spécification de chemin sont omises, l'accès se fera sur le périphérique actuel ou sur le répertoire actuel.

·	Une erreur apparaîtra si un élément de la spécification de chemin ou le fichier lui-même n'existe pas.

·	Le contenu des registres BX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 43h, Sous-Fct 1    Définir l'attribut d'un fichier    DOS (> 1.0)

Cette fonction permet de régler l'attribut d'un fichier quelconque.

Entrée :

AH 	= 43h

AL 	= 1

CX 	= Attribut du fichier

Bit 0 = 1 : 	Fichier doit seulement être lu, on ne peut y écrire

Bit 1 = 1 : 	Fichier est caché (ne sera pas affiché par DIR)

Bit 2 = 1 : 	Fichier est un fichier système

Bit 3 = 0 :	Volume

Bit 4 = 0 :	Répertoire	Bit 3 : 0(b)

Bit 5 = 1 : 	Fichier a été modifié depuis le dernier archivage

DS 	= Adresse de segment du nom de fichier

DX 	= Adresse d'offset du nom de fichier

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

2 : Fichier non trouvé

3 : Chemin non trouvé

5 : Attribut ne peut pas être modifié

Remarques :

·	Le nom de fichier doit être fourni sous forme d'une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Il peut comporter une désignation de périphérique, une spécification de chemin complète ainsi qu'un nom de fichier proprement dit, mais pas de jokers. Si la désignation de périphérique ou la spécification de chemin sont omises, l'accès se fera sur le périphérique actuel ou sur le répertoire actuel.

·	Une erreur apparaîtra si un élément de la spécification de chemin ou le fichier lui-même n'existe pas.

·	Cette fonction ne permet pas de manipuler les sous-répertoires ni les noms de volumes. C'est pourquoi les bits 3 et 4 de l'attribut de fichier doivent valoir 0 lors de l'appel de la fonction. Si on tente malgré tout d'accéder à un sous-répertoire ou à un nom de volume, le code d'erreur 5 sera renvoyé.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Int 21h, Fct 44h, Sous-Fct 0    Accès à un driver de périphérique (IOCTL) :     Lire l'attribut de périphérique    DOS (> 1.0)

Cette fonction permet de lire l'attribut de périphérique d'un driver de caractère, qui est stocké dans l'en-tête de ce driver.

Entrée :

AH 	= 44h

AL 	= 0

BX 	= Handle

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas DX = Attribut de périphérique

Bit 14 =	 1 : 	Le driver peut traiter des chaînes de caractères de commande particulières à travers les sous-fonctions 2 et 3 de la fonction IOCTL.

Bit 7 = 	1 :	Le driver est un driver de caractères.

Bit 5 = 	0 :	Le driver travaille en mode Cooked.

1 :	Le driver travaille en mode Raw.

Bit 3 = 	1 :	Le driver est un driver d'horloge.

Bit 2 = 	1 :	Le driver est le driver NUL.

Bit 1 = 	1 :	Le driver est le driver de sortie console (l'écran).

Bit 0 = 	1 :	Le driver est le driver d'entrée console (le clavier).

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

6 : Handle non ouvert ou qui n'existe pas

Remarques :

·	C'est un handle associé au périphérique voulu qui doit être spécifié et non le nom du driver de caractères appelé. Il peut s'agir par exemple de l'un des 5 handles prédéfinis (numéros 0 à 4). Il est toutefois également possible d'ouvrir au préalable un périphérique déterminé à l'aide de la fonction Ouvrir (fonction numéro 3Dh) puis de transmettre ce handle à la fonction. Comme l'entrée et la sortie standard (Les handles 0 et 1) peuvent avoir été redirigées, cette méthode permet de s'assurer que l'accès se fera bien sur le périphérique voulu.

·	Si le bit 7 de l'attribut de périphérique ne vaut pas 1, c'est que le driver appelé n'est pas un driver de caractères et la signification des différents bits ne correspond donc pas à celle d'un driver de caractères.

·	Le contenu des registres BX, CX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 1    Accès à un driver de périphérique (IOCTL) :     Définir l'attribut de périphérique    DOS (> 1.0
Int 21h, Fct 44h, Sous-Fct 1    Accès à un driver de périphérique (IOCTL) :     Définir l'attribut de périphérique    DOS (> 1.0)

Cette fonction permet de définir l'attribut de périphérique d'un driver de caractère, qui est stocké dans l'en-tête de ce driver.

Entrée :

AH 	= 44h

AL 	= 1

BX 	= Handle

DX 	= Attribut de périphérique

Bit 14 = 	1 : 	Le driver peut traiter des chaînes de caractères de commande particulières à travers les sous-fonctions 2 et 3  de la fonction IOCTL.

Bit 7 = 	1 :	Le driver est un driver de caractères.

Bit 5 = 	0 :	Le driver travaille en mode Cooked.

1 :	Le driver travaille en mode Raw.

Bit 3 = 	1 :	Le driver est un driver d'horloge.

Bit 2 = 	1 :	Le driver est le driver NUL.

Bit 1 = 	1 :	Le driver est le driver de sortie de la console (l'écran).

Bit 0 = 	1 :	Le driver est le driver d'entrée de la console (le clavier).

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

6 : Handle non ouvert ou qui n'existe pas

Remarques :

·	C'est un handle associé au périphérique voulu qui doit être spécifié et non le nom du driver de caractères appelé. Il peut s'agir par exemple de l'un des 5 handles prédéfinis (numéros 0 à 4). Il est toutefois également possible d'ouvrir au préalable un périphérique déterminé à l'aide de la fonction Ouvrir (fonction numéro 3Dh) puis de transmettre ce handle à la fonction. Comme l'entrée et la sortie standard (Les handles 0 et 1) peuvent avoir été redirigées, cette méthode permet de s'assurer que l'accès se fera bien sur le périphérique voulu.

·	Pour modifier différents bits de l'attribut de périphérique à l'aide de cette fonction, il est préférable de lire tout d'abord cet attribut de périphérique à l'aide de la fonction 0. Vous pouvez alors manipuler les bits voulus puis renvoyer l'attribut de périphérique au driver de périphérique, à l'aide de cette fonction.

·	Cette fonction est surtout utile pour faire passer un driver de caractères du mode Raw au mode Cooked, et inversement, à l'aide du bit 5 de l'attribut de périphérique.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 2    Accès à un driver de périphérique (IOCTL) :     Recevoir des données d'un driver de caractères
Int 21h, Fct 44h, Sous-Fct 2   (IOCTL) :     Recevoir des données d'un driver de caractères    DOS (> 1.0)

En appelant cette fonction, un programme d'application peut recevoir des données d'un driver de caractères, de façon très directe. Le nombre d'octets à lire, qui seront copiés par le driver dans un buffer, est fixé par le programme d'appel. Le type et la structure des données ne sont pas prédéfinis par le DOS mais peuvent être définis individuellement par chaque driver.

Entrée :

AH 	= 44h

AL 	= 2

BX 	= Handle

CX 	= Nombre d'octets à lire

DS 	= Adresse de segment du buffer

DX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas

AX = Nombre d'octets transférés

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

6 : Handle non ouvert ou qui n'existe pas

Remarques :

·	C'est un handle associé au périphérique voulu qui doit être spécifié et non le nom du driver de caractères appelé. Il peut s'agir par exemple de l'un des 5 handles prédéfinis (numéros 0 à 4). Il est toutefois également possible d'ouvrir au préalable un périphérique déterminé à l'aide de la fonction Ouvrir (fonction numéro 3Dh) puis de transmettre ce handle à la fonction. Comme l'entrée et la sortie standard (Les handles 0 et 1) peuvent avoir été redirigées, cette méthode permet de s'assurer que l'accès se fera bien sur le périphérique voulu.

·	Une erreur apparaîtra si le handle spécifié est associé à un driver de bloc et non à un driver de caractères.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 3    Accès à un driver de périphérique (IOCTL) :     Envoyer des données à un driver de caractères
Int 21h, Fct 44h, Sous-Fct 3    (IOCTL) :     Envoyer des données à un driver de caractères    DOS (> 1.0)

En appelant cette fonction, un programme d'application peut envoyer des données sur un driver de caractères, de façon très directe. Le nombre d'octets à écrire, qui seront tirés d'un buffer pour être transmis au driver, est fixé par le programme d'appel. Le type et la structure des données ne sont pas prédéfinis par le DOS mais peuvent être définis individuellement par chaque driver.

Entrée :

AH 	= 44h

AL 	= 3

BX 	= Handle

CX 	= Nombre d'octets à transmettre

DS 	= Adresse de segment du buffer

DX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas

AX = Nombre d'octets transférés

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

6 : Handle non ouvert ou qui n'existe pas

Remarques :

·	C'est un handle associé au périphérique voulu qui doit être spécifié et non le nom du driver de caractères appelé. Il peut s'agir par exemple de l'un des 5 handles prédéfinis (numéros 0 à 4). Il est toutefois également possible d'ouvrir au préalable un périphérique déterminé à l'aide de la fonction Ouvrir (fonction numéro 3Dh) puis de transmettre ce handle à la fonction. Comme l'entrée et la sortie standard (Les handles 0 et 1) peuvent avoir été redirigées, cette méthode permet de s'assurer que l'accès se fera bien sur le périphérique voulu.

·	Une erreur apparaîtra si le handle spécifié est associé à un driver de bloc et non à un driver de caractères.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 4    Accès à un driver de périphérique (IOCTL) :     Recevoir des données d'un driver de bloc    DOS
Int 21h, Fct 44h, Sous-Fct 4    (IOCTL) :     Recevoir des données d'un driver de bloc    DOS (> 1.0)

En appelant cette fonction, un programme d'application peut recevoir des données d'un driver de bloc, de façon très directe. Le nombre d'octets à lire, qui seront copiés par le driver dans un buffer, est fixé par le programme d'appel. Le type et la structure des données ne sont pas prédéfinis par le DOS mais peuvent être définis individuellement par chaque driver.

Entrée :

AH 	= 44h

AL 	= 4

BX 	= Désignation de périphérique

CX 	= Nombre d'octets à lire

DS 	= Adresse de segment du buffer

DX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas

AX = Nombre d'octets transférés

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

15 : Périphérique inconnu

Remarques :

·	La désignation de périphérique n'indique pas directement le driver de périphérique mais le périphérique duquel les données devront être reçues. Le code 0 désigne ici le périphérique A, 1 le périphérique B, etc.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 5    Accès à un driver de périphérique (IOCTL) :     Transmettre des données à un driver de bloc    D
Int 21h, Fct 44h, Sous-Fct 5    Accès à un driver de périphérique (IOCTL) :     Transmettre des données à un driver de bloc    DOS (> 1.0)

En appelant cette fonction, un programme d'application peut envoyer des données sur un driver de bloc, de façon très directe. Le nombre d'octets à lire, qui seront tirés d'un buffer pour être transmis au driver, est fixé par le programme d'appel. Le type et la structure des données ne sont pas prédéfinis par le DOS mais peuvent être définis individuellement par chaque driver.

Entrée :

AH 	= 44h

AL 	= 5

BX 	= Désignation de périphérique

CX 	= Nombre d'octets à transmettre

DS 	= Adresse de segment du buffer

DX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas

AX = Nombre d'octets transférés

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

15 : Périphérique inconnu

Remarques :

·	La désignation de périphérique n'indique pas directement le driver de périphérique mais le périphérique auquel les données devront être transmises. Le code 0 désigne ici le périphérique A, 1 le périphérique B, etc.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 6    Accès à un driver de périphérique (IOCTL) :     Tester l'état d'entrée    DOS (> 1.0)

Cette fonction permet de déterminer si un driver de périphérique est prêt à transmettre des données à un autre programme.

Entrée :

AH 	= 44h

AL 	= 6

BX 	= Handle

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas AX = Etat d'entrée

0 : Le driver n'est pas prêt

255 : Le driver est prêt

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

5 : Accès refusé

6 : Handle incorrect

Remarques :

·	Le handle spécifié peut être associé à un driver de caractères ou à un fichier.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 7    Accès à un driver de périphérique (IOCTL) :     Tester l'état de sortie    DOS (> 1.0)

Cette fonction permet de déterminer si un driver de périphérique est prêt à recevoir des données d'un autre programme.

Entrée :

AH 	= 44h

AL 	= 7

BX 	= Handle

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas AX = Etat de sortie

0 : Le driver n'est pas prêt

255 : Le driver est prêt

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

5 : Accès refusé

6 : Handle incorrect

Remarques :

·	Le handle spécifié peut être associé à un driver de caractères ou à un fichier.

·	Si le handle est associé à un fichier, le driver de bloc correspondant annoncera toujours que le périphérique est prêt à recevoir des données, même si le support sur lequel figure le fichier est plein et donc même si, de ce fait, il n'est plus possible d'ajouter des données à la suite du fichier.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 8    Accès à un driver de périphérique (IOCTL) :     Support amovible    DOS (> la version 3)

Cette fonction permet de déterminer si le support (disquette, disque dur) d'un périphérique est amovible.

Entrée :

AH 	= 44h

AL 	= 8

BL 	= Désignation de périphérique

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas

AX = 0 : Support amovible

AX = 1 : Support fixe

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

15 : Périphérique inconnu

Remarques :

·	La désignation de périphérique n'indique pas directement le driver de périphérique mais le périphérique duquel les données devront être reçues.Le code 0 désigne ici le périphérique actuel, 1 le lecteur A, 2 le lecteur B, etc.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 9    Accès à un driver de périphérique (IOCTL) :     Test périphérique    DOS (> la version 3.1)

Cette fonction permet de déterminer si le lecteur spécifié (Device) est un élément du PC sur lequel le test est effectué (local) ou bien s'il figure sur un autre PC, dans le cadre d'un réseau (remote).

Entrée :

AH 	= 44h

AL 	= 9

BL 	= Désignation de périphérique

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas DX = Attribut de périphérique

Bit 12 = 0 : local

Bit 12 = 1 : remote

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

15 : Périphérique inconnu

Remarques :

·	Cette fonction ne peut être appelée que si un logiciel de réseau est installé.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 0Ah    Accès à un driver de périphérique (IOCTL) :     Test Handle Remote    DOS (> la version 3.1)

Cette fonction permet de déterminer si le fichier associé au handle spécifié (Device) est un élément du PC sur lequel le test est effectué (local) ou bien s'il figure sur un autre PC, dans le cadre d'un réseau (remote).

Entrée :

AH 	= 44h

AL 	= 0Ah

BX 	= Handle

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas DX = Code IOCTL

Bit 15 = 0 : local

Bit 15 = 1 : remote

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

6 : Handle non ouvert ou qui n'existe pas

Remarques :

·	Cette fonction ne peut être appelée que si un logiciel de réseau est installé.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 0Bh    Accès à un driver de périphérique (IOCTL) :     Définir répétition    DOS (> la version 3)

En réseau, il arrivera souvent qu'un programme souhaite accéder à un fichier alors qu'un autre programme est déjà en train d'y accéder et que ce fichier ne puisse être ouvert de ce fait. Dans une telle situation, il ne serait pas raisonnable de renoncer immédiatement à accéder au fichier car le fichier redeviendra généralement disponible après un très bref délai. C'est pourquoi le DOS gère, sur un plan interne, deux variables qui indiquent combien de fois une tentative d'accès à un fichier doit être répétée et quel délai doit s'écouler entre deux tentatives. Ce sont ces deux paramètres que cette fonction permet de fixer.

Entrée :

AH 	= 44h

AL 	= 0Bh

BX 	= Nombre de répétitions des tentatives

CX 	= Délai entre deux tentatives

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

Remarques :

·	Cette fonction ne doit être appelée que si un logiciel de réseau est installé.

·	Le délai imparti au driver de périphérique dans le registre CX dépend de la vitesse du système informatique en cours. Au lieu de faire référence à une unité de temps constante, il indique notamment le nombre des répétitions d'une boucle vide dont la vitesse d'exécution dépend naturellement de celle du processeur.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 0Ch    Accès à un driver de périphérique (IOCTL) :     Communication avec un driver de caractères
Int 21h, Fct 44h, Sous-Fct 0Ch    (IOCTL) :     Communication avec un driver de caractères     DOS (> 3.3)

Cette fonction IOCTL représente l'interface entre des sous-fonctions assurant le travail avec les pages de code. Etant donné que les pages de code ne sont reconnues que par quelques drivers de caractères précis, ces fonctions ne sont généralement disponibles qu'avec ces drivers.

Entrée :

AH 	= 44h

AL 	= 0Ch

BX 	= Handle lié au driver de caractères à adresser

CH 	= Code de périphérique

CL 	= Numéro de la sous-fonction à appeler

DS:DX	= Pointeur FAR sur le buffer contenant des informations complémentaires

Sortie :

Flag Carry = 0 : tout va bien

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

Remarques :

·	Le périphérique concerné est défini à l'aide du code de périphérique contenu dans le registre CH. Les affectations suivantes sont prévues dans ce cas :

0 	= Le périphérique n'appartient à aucun des groupes suivants

1 	= COM1, COM2, COM3 ou COM4

2 	= Périphérique CON (écran et clavier)

5 	= LPT1, LPT2 ou LPT3

·	Les sous-fonctions suivantes peuvent être appelées par le registre CL :

45h 	= 	Spécifier le compteur d'accès pour le driver d'imprimante (à partir de DOS 3.2)

4Ah 	= 	Sélectionner la page de code (à partir de DOS 3.3)

4Ch 	= 	Préparer l'initialisation des pages de code (à partir de DOS 3.3)

4Dh 	= 	Terminer l'initialisation des pages de code (à partir de DOS 3.3)

5Fh 	= 	Informations concernant l'écran (à partir de DOS 4.0)

65h 	=	Déterminer le compteur d'accès pour le driver d'imprimante (à partir de DOS 3.2)

6Ah 	= 	Spécifier la page de code en cours (à partir de DOS 3.3)

6Bh 	= 	Définir la liste des pages de code installées (à partir de DOS 3.3)

7Fh 	= 	Lire les informations concernant l'écran (à partir de DOS 4.0)

·	En règle générale, le schéma suivant s'applique à l'utilisation de ces fonctions :

Lire, vérifier et sauvegarder les paramètres en cours à l'aide de la fonction 60h, Spécifier les nouveaux paramètres à l'aide de la fonction 40h, Exécuter la fonction nécessaire,

·	Remettre en place les anciens paramètres avec la fonction 40h.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 0Dh    Accès à un driver de périphérique (IOCTL) :     Communication avec un driver de bloc    DOS (>
Int 21h, Fct 44h, Sous-Fct 0Dh    Accès à un driver de périphérique (IOCTL) :     Communication avec un driver de bloc    DOS (> 3.2)

Tout comme la fonction IOCTL 0Ch, cette fonction permet également d'accéder à de nombreuses sous-fonctions d'un driver de périphérique. Cependant, cette fonction IOCTL ne permet pas d'adresser un driver de caractères, mais un driver de bloc.

Entrée :

AH 	= 44h

AL 	= 0Dh

BL 	= Numéro de lecteur

CH 	= 08h

CL 	= Numéro de la sous-fonction à appeler

DS:DX	= Pointeur FAR sur le buffer contenant des informations complémentaires

Sortie :

Flag Carry 	= 0 : Tout va bien

Flag Carry 	= 1 : Erreur, dans ce cas

AX 	= Code d'erreur

Remarques :

·	En ce qui concerne le code de périphérique, 0 indique le lecteur en cours, 1 est utilisé pour A, 2 pour B, etc.

·	Les sous-fonctions suivantes peuvent être appelées par le registre CL :

40h = Spécifier les paramètres du périphérique (à partir de DOS 3.2)

41h = Ecrire la piste sur le périphérique logique (à partir de DOS 3.2)

42h = Formater et contrôler la piste sur le périphérique logique (à partir de DOS 3.2)

47h = Spécifier le flag d'accès (à partir de DOS 4.0)

60h = Déterminer les paramètres de périphérique (à partir de DOS 3.2)

61h = Lire la piste depuis le périphérique logique (à partir de DOS 3.2)

62h = Contrôler la piste sur le périphérique logique (à partir de DOS 3.2)

67h = Lire le flag d'accès (à partir de DOS 4.0)

·	En règle générale, le schéma suivant s'applique à l'utilisation de ces fonctions :

Þ	Lire, vérifier et sauvegarder les paramètres en cours à l'aide de la fonction 60h,

Þ	Spécifier les nouveaux paramètres à l'aide de la fonction 40h,

Þ	Exécuter la fonction nécessaire,

Þ	Remettre en place les anciens paramètres avec la fonction 40h.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 0Eh    Accès à un driver de périphérique (IOCTL) :     Lire la dernière désignation de lecteur    DOS
Int 21h, Fct 44h, Sous-Fct 0Eh    Accès à un driver de périphérique (IOCTL) :     Lire la dernière désignation de lecteur    DOS (> 3.2)

Cette fonction permet de déterminer la désignation logique du lecteur dernièrement utilisée pour adresser un périphérique.

Entrée :

AH 	= 44h

AL	= 0Eh

BL 	= Code de périphérique (0 = actuel, 1 = A, 2 = B, etc.)

Sortie :

Flag Carry = 0 : Tout va bien, dans ce cas

AL = 0	: Un seul périphérique logique appartient au périphérique spécifié

AL 1	: Numéro du périphérique logique attribué au périphérique spécifié (1 = A, 2 = B, etc.)

Flag Carry = 1	: Erreur, dans ce cas AX = Code d'erreur

Remarques :

·	Cette fonction est surtout intéressante pour les systèmes équipés d'un seul lecteur de disquette. Dans ce cas, ce lecteur peut être appelé sous A et B. Cette fonction permet notamment de spécifier si le lecteur de disquette a été adressé dernièrement en tant que lecteur A ou B. Si le lecteur est adressé au moyen d'une telle désignation, un message DOS apparaît immédiatement pour demander d'insérer une disquette lors de l'accès au lecteur.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 0Fh    Accès à un driver de périphérique (IOCTL) :     Définir la désignation de lecteur suivante
Int 21h, Fct 44h, Sous-Fct 0Fh    Accès à un driver de périphérique (IOCTL) :     Définir la désignation de lecteur suivante    DOS (> 3.2)

Cette fonction permet de spécifier la désignation de lecteur logique utilisée pour appeler un périphérique lors d'un prochain accès.

Entrée :

AH 	= 44h

AL 	= 0Fh

BL 	= Code de périphérique (0 = actuel, 1 = A, 2 = B, etc.)

Sortie :

Flag Carry = 0 : Tout va bien, dans ce cas

AL = Code de périphérique servant à appeler le lecteur lors d'un prochain accès

Flag Carry = 1 : Erreur, dans ce cas AX = Code d'erreur

Remarques :

·	Cette fonction est surtout intéressante pour les systèmes équipés d'un seul lecteur de disquette parce que ce dernier peut être appelé sous A et B. Dans ce cas, cette fonction permet de faire commuter le lecteur de disquette de A vers B. Comme cette fonction travaille en alternance, le lecteur revient sur A à la suite d'un appel ultérieur.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 10h    Solliciter le soutien IOCTL au niveau Handle     DOS (> 5.0)

A partir de la version 5.0, la mise en disponibilité de cette fonction peut être sollicitée avant l'appel d'une fonction IOCTL qui ne fait pas partie de l'environnement des fonctions de la version 3.2.

Entrée :

AH 	= 44h

AL 	= 10h

BX 	= Handle sur le périphérique à adresser lors de l'appel de la fonction IOCTL

CL 	= Numéro de la fonction IOCTL souhaitée

Sortie :

Flag Carry = 0 : La fonction est disponible par rapport au handle spécifié

Flag Carry = 1 : Erreur, la fonction n'est pas disponible par rapport au handle spécifié, dans ce cas AX = 1 (fonction non disponible)

Remarques :

·	Alors que cette fonction ne permet de tester la disponibilité d'une fonction IOCTL précise que par rapport au périphérique qui se cache derrière un handle, la fonction IOCTL 11h permet en revanche d'effectuer un test par rapport à un périphérique précis.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 44h, Sous-Fct 11h    Solliciter le soutien IOCTL au niveau du périphérique        DOS (> 5.0)

A partir de la version 5.0, la mise en disponibilité de cette fonction peut être sollicitée avant l'appel d'une fonction IOCTL qui ne fait pas partie de l'environnement des fonctions de la version 3.2.

Entrée :

AH 	= 44h

AL 	= 11h

BX 	= Numéro de périphérique (0 = actuel, 1 = A, B = 2, etc.)

CL 	= Numéro de la fonction IOCTL souhaitée

Sortie :

Flag Carry	= 0 : La fonction est disponible par rapport au périphérique spécifié

Flag Carry	= 1 : Erreur, la fonction n'est pas disponible par rapport au périphérique, dans ce cas AX = 1 (fonction non disponible)

Remarques :

·	Alors que cette fonction ne permet de tester la disponibilité d'une fonction IOCTL précise que par rapport à un périphérique précis, la fonction IOCTL 10h permet en revanche d'effectuer un test par rapport à un handle donné et le périphérique qui s'y cache derrière.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 45h    Définir un second Handle    DOS (> 1.0)

Cette fonction permet de mettre en place un second handle pour un handle spécifié. Ce second handle sera associé au même fichier ou au même périphérique que le premier. Si le premier handle se rapportait à un fichier, le pointeur de fichier de ce handle sera couplé avec le pointeur de fichier du nouveau handle.

Entrée :

AH 	= 45h

BX 	= Handle

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas AX = le nouveau Handle

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

Flag Carry =4 : Pas d'autre handle disponible

Flag Carry =6 : Handle spécifié non ouvert ou qui n'existe pas

Remarques :

·	Cette fonction permet, après qu'un fichier ait été modifié, de faire actualiser l'entrée de ce fichier dans le répertoire sans être obligé de refermer le fichier. Il suffit en effet de réclamer à l'aide de cette fonction un nouveau handle pour le fichier puis de refermer le fichier avec ce handle à l'aide de la fonction 3Eh.

·	Lorsque le pointeur de fichier d'un des deux handles est déplacé du fait de l'appel d'une fonction de lecture ou écriture, le pointeur de fichier de l'autre handle est automatiquement déplacé de la même façon.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 46h    Affecter un handle à un autre    DOS (> 1.0)

Cette fonction attend deux handles associés à deux fichiers ou périphériques différents. Le second handle est alors assimilé par la fonction au premier, c'est-à-dire qu'il se retrouve associé au même fichier ou au même périphérique que le premier handle. La valeur de son pointeur de fichier coïncide également avec celle du pointeur de fichier du premier handle.

Entrée :

AH 	= 46h

BX 	= Premier handle

CX 	= Second handle (à assimiler)

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

4 : Pas d'autre handle disponible

6 : Handle spécifié non ouvert ou qui n'existe pas

Remarques :

·	Si le second handle est associé à un fichier ouvert lors de l'appel de cette fonction, ce fichier est tout d'abord fermé.

·	Lorsque le pointeur de fichier d'un des deux handles est déplacé du fait de l'appel d'une fonction de lecture ou écriture, le pointeur de fichier de l'autre handle est automatiquement déplacé de la même façon.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 47h    Lire répertoire actuel     DOS (> 1.0)

Cette fonction inscrit dans un buffer la spécification de chemin complète du répertoire actuel sur le lecteur spécifié.

Entrée :

AH 	= 47h

DL 	= Désignation de périphérique

DS 	= Adresse de segment du buffer

SI 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas

AX = 15 : Périphérique inconnu

Remarques :

·	Pour la désignation de périphérique, 0 représente le lecteur actuel, 1 le lecteur A, 2 le lecteur B, etc.

·	La spécification de chemin placée dans le buffer est terminée par un caractère de fin (code ASCII 0). Elle n'est précédée d'aucune désignation de périphérique ni d'un '\' pour le répertoire racine. Si le répertoire racine est le répertoire actuel, le caractère de fin se trouvera donc être le premier caractère du buffer.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 48h    Réserver mémoire RAM    DOS (> 1.0)

Cette fonction permet de réserver une zone de mémoire à l'usage d'un programme.

Entrée :

AH 	= 48h

BX 	= Nombre de paragraphes réservés

Sortie :

Flag Carry	=0 : Tout va bien, dans ce cas

AX	= Adresse de segment de la zone de mémoire

Flag Carry	=1 : Erreur, dans ce cas

AX	= Code d'erreur

7 : Bloc de contrôle de la mémoire détruit

8 : Mémoire résiduelle insuffisante

BX = Nombre de paragraphes encore disponibles

Remarques :

·	Un paragraphe comporte 16 octets.

·	Si la mémoire demandée a pu être réservée, elle commence à l'adresse AX:0000.

·	Dans un programme COM, l'appel de cette fonction échouera systématiquement puisque la totalité de la place mémoire disponible est toujours affectée à un programme COM lors de son lancement.

·	Le contenu des registres CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 49h    Libérer mémoire RAM    DOS (> 1.0)

Cette fonction permet de libérer une zone de mémoire qui avait été auparavant réservée à l'aide de la fonction 48h, pour qu'elle soit à nouveau disponible pour d'autres programmes.

Entrée :

AH = 49h

BX = Nombre de paragraphes réservés

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas

AX = Code d'erreur

7 : Bloc de contrôle de la mémoire détruit

9 : La zone de mémoire commençant à l'adresse de segment spécifiée n'avait pas été réservée

Remarques :

·	Il n'est pas nécessaire d'indiquer à la fonction la taille de la zone de mémoire à libérer car cette taille est connue du DOS.

·	Si la fonction est appelée avec une adresse de segment erronée dans le registre ES, il se peut que soit libérée une zone de mémoire attribuée à un tout autre programme. Or cela peut avoir des conséquences imprévisibles allant jusqu'à un plantage du système.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 4Ah    Modifier la taille d'une zone de mémoire    DOS (> 1.0)

Cette fonction permet de modifier la taille d'une zone de mémoire qui avait été auparavant réservée avec la fonction 48h. Cette zone peut aussi bien être agrandie que diminuée.

Entrée :

AH 	= 4Ah

BX 	= Nouvelle taille de la zone de mémoire en paragraphes

ES 	= Adresse de segment de la zone de mémoire

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas

AX = Code d'erreur

7 : Bloc de contrôle de la mémoire détruit

8 : Mémoire résiduelle insuffisante

9 : Bloc illégal

BX = Nombre de paragraphes encore disponibles

Remarques :

·	Un paragraphe comporte 16 octets.

·	Si la fonction est appelée avec une adresse de segment erronée dans le registre ES, il se peut que soit libérée une zone de mémoire attribuée à un tout autre programme. Or cela peut avoir des conséquences imprévisibles allant jusqu'à un plantage du système.

·	Dans un programme COM, il est conseillé d'utiliser cette fonction pour libérer toute la mémoire dont le programme n'a pas vraiment besoin car la totalité de la mémoire RAM disponible est toujours affectée à un programme COM lors de son lancement. Cela est notamment indispensable avant d'appeler la fonction EXEC (fonction numéro 4Bh).

·	Le contenu des registres CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 4Bh, Sous-Fct 00h    EXEC : Exécuter un autre programme     DOS (> 1.0)

Cette fonction permet à un programme d'en faire exécuter un autre de façon à ce que l'exécution du premier programme reprenne dès que l'exécution du second programme sera achevée. A cet effet, il faut transmettre à la fonction le nom du programme à exécuter ainsi que l'adresse d'un bloc de paramètres qui contienne les informations dont la fonction a besoin.

Entrée :

AH 	= 4Bh

AL 	= 0

ES 	= Adresse de segment du bloc de paramètres

BX 	= Adresse d'offset du bloc de paramètres

DS 	= Adresse de segment du nom de programme

DX 	= Adresse d'offset du nom de programme

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas

AX = Code d'erreur :

1 : Code de fonction inconnu

2 : Chemin ou programme non trouvé

3 : Programme non trouvé

4 : Trop de fichiers ouverts

5 : Accès refusé

8 : Zone mémoire insuffisante

10 : Bloc d'environnement erroné

11 : Format erroné

Remarques :

·	Le nom du programme doit être fourni sous forme d'une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Il peut comporter une désignation de périphérique, une spécification de chemin complète ainsi qu'un nom de fichier, mais pas de jokers. Si la désignation de périphérique ou la spécification de chemin sont omises, l'accès se fera sur le périphérique actuel ou sur le répertoire actuel.

·	Seuls des programmes EXE ou COM peuvent ainsi être exécutés. Pour faire exécuter un fichier batch, il faut appeler l'interpréteur de commandes (COMMAND.COM) avec le paramètre '/c' suivi du nom du fichier batch voulu.

·	Le bloc de paramètres doit présenter le format suivant :

Octets 0 - 1 :	Adresse de segment du bloc d'environnement

Octets 2 - 3 :	Adresse d'offset des paramètres de commande

Octets 4 - 5 :	Adresse de segment des paramètres de commande

Octets 6 - 7 :	Adresse d'offset du premier FCB

Octets 8 - 9 :	Adresse de segment du premier FCB

Octets 10 - 11 : 	Adresse d'offset du second FCB

Octets 12 - 13 : 	Adresse de segment du second FCB

·	Si l'adresse de segment du bloc d'environnement communiquée est la valeur 0, c'est que le programme à appeler dispose du même bloc d'environnement que le programme d'appel.

·	Les paramètres de commande doivent être stockés dans la mémoire de la façon suivante: un premier octet spécifie le nombre de caractères dans la ligne d'instruction ; viennent ensuite les différents caractères ASCII dont la fin est marquée par un Carriage Return (code ASCII 13). Ce Carriage Return ne doit toutefois pas être pris en compte pour le nombre de caractères.

·	Le premier FCB transmis est copié à l'adresse 5Ch, le second à l'adresse 6Ch dans le PSP du programme appelé. Si le programme appelé n'attend aucune information de ces deux FCB, n'importe quelles valeurs peuvent être inscrites dans les champs FCB du bloc de paramètres.

·	Après appel de cette fonction, tous les registres sont modifiés, hormis les registres CS et IP. Il ne faut donc pas oublier de sauvegarder le contenu des registres utiles avant d'appeler cette fonction, de façon à pouvoir les restaurer une fois le programme exécuté.

·	Le programme appelé peut disposer de tous les handles dont pouvait disposer le programme d'appel.


Int 21h, Fct 4Bh, Sous-Fct 03h    EXEC : Charger un autre programme sans l'exécuter        DOS (> 1.0)

Cette fonction permet à un programme de charger un autre programme en mémoire sans que ce programme soit pour autant automatiquement exécuté.

Entrée :

AH 	= 4Bh

AL 	= 3

ES 	= Adresse de segment du bloc de paramètres

BX 	= Adresse d'offset du bloc de paramètres

DS 	= Adresse de segment du nom de programme

DX 	= Adresse d'offset du nom de programme

Sortie :

Flag Carry =0: Tout va bien

Flag Carry =1: Erreur, dans ce cas

AX = Code d'erreur

1 : Code de fonction inconnu

2 : Chemin ou programme non trouvé

3 : Programme non trouvé

4 : Trop de fichiers ouverts

5 : Accès refusé

8 : Zone mémoire insuffisante

10 : Bloc d'environnement erroné

11 : Format erroné

Remarques :

·	Le nom du programme doit être fourni sous forme d'une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Il peut comporter une désignation de périphérique, une spécification de chemin complète ainsi qu'un nom de fichier, mais pas de jokers. Si la désignation de périphérique ou la spécification de chemin sont omises, l'accès se fera sur le périphérique actuel ou sur le répertoire actuel.

·	Le bloc de paramètres doit présenter le format suivant :

Octets 0 - 1 :	Adresse de segment à laquelle devra être chargé l'overlay (l'adresse d'offset correspondante est 0)

Octets 2 - 3 :	Facteur de relogement

·	Le facteur de relogement spécifié devra être 0 pour les programmes COM et l'adresse de segment à laquelle le programme doit être chargé pour les programmes EXE.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 4Bh, Sous-Fct 05h    EXEC : Adapter les EXEC personnels     DOS (> 5.0)

A partir de la version DOS 5.0, les applications qui chargent d'autres programmes ou overlays à l'aide de la fonction DOS Exec doivent utiliser cette fonction pour éviter des problèmes lors du chargement de ces programmes ou overlays.

Entrée :

AH 	= 4Bh

AL 	= 05h

DS:DX	= Pointeur FAR sur la structure Exec-State

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

1	: code de fonction inconnu

2	: chemin ou programme non trouvé

3	: programme non trouvé

4	: trop de fichiers ouverts

5	: accès refusé

8	: zone de mémoire insuffisante

10	: bloc d'environnement erroné

11	: format erroné

Remarques :

·	L'appel de cette fonction doit s'effectuer entre le chargement du programme ou overlay et son exécution. Aucune fonction DOS ou BIOS ou une interruption logicielle de quelque nature que ce soit ne doit être appelée entre l'appel de cette fonction et le lancement du programme ou overlay.

·	La structure Exec-State contient des informations sur le programme ou overlay. Elle regroupe 18 octets et présente la structure suivante.

Structure Exec-State

Adr.	Contenu	Type

00h	Réservé, doit contenir 0	1 WORD

02h	1 = Programme EXEC 2 = Overlay	1 WORD

04h	Pointeur sur une chaîne ASCII contenant le nom du programme
ou overlay (l'indication du chemin est autorisée dans cette chaîne)	1 PTR

08h	Adresse de segment du PSP du programme ou overlay	1 WORD

0Ah	Point d'entrée dans le programme ou overlay	1 PTR

0Eh	Taille du programme ou overlay y compris PSP	1 DWORD

Longueur : 12h (18 octets)


Int 21h, Fct 4Ch    Terminer programme avec un code de fin    DOS (> 1.0)

Cette fonction permet de terminer un programme en définissant un code de fin que le programme d'appel pourra tester à l'aide de la fonction 4Dh. La mémoire RAM occupée par le programme à terminer est libérée après appel de cette fonction, de sorte qu'elle peut à nouveau être attribuée à d'autres programmes.

Entrée :

AH 	= 4Ch

AL 	= Code de fin

Sortie :

aucune

Remarques :

·	Cette fonction est à utiliser de préférence aux autres fonctions pour terminer un programme.

·	Lorsque cette fonction est appelée, les 3 vecteurs d'interruption dont le contenu avait été stocké dans le PSP avant le lancement du programme sont restaurés.

·	Avant que le contrôle ne soit rendu au programme d'appel, tous les handles qui ont été ouverts par le programme appelé, ainsi que tous les fichiers correspondants, sont refermés. Cela ne concerne toutefois que les fichiers auquel on accédait par FCB.

·	Le code de fin peut être examiné dans un fichier batch à l'aide des instructions ERRORLEVEL et IF.


Int 21h, Fct 4Dh    EXEC : Lire le code de fin     DOS (> 1.0)

Un programme qui en a appelé un autre à l'aide de la fonction EXEC peut déterminer à l'aide de cette fonction quel code de fin le programme appelé a renvoyé en fin d'exécution.

Entrée :

AH 	= 4Dh

Sortie :

AH 	= Type de fin du programme

0 : Fin normale

1 : Fin à la suite d'un caractère Ctrl-C ou parce que touche Break actionnée

2 : A cause d'une erreur d'accès à un périphérique

3 : Après appel de la fonction 31h ou INT 27h

AL = Code de fin

Remarques :

·	Le code de fin du programme appelé ne peut être lu qu'une seule fois à l'aide de cette fonction.

·	Le contenu des registres AX, BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 4Eh    Lire la première entrée du répertoire     DOS (> 1.0)

Cette fonction attend le nom d'un fichier qu'il s'agit de rechercher. Le fichier peut être doté d'un attribut déterminé, de sorte que des sous-répertoires ou des noms de volumes peuvent également être recherchés.

Entrée :

AH 	= 4Eh

CX 	= Attribut du fichier

DS 	= Adresse de segment du nom de fichier

DX 	= Adresse d'offset du nom de fichier

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur,

dans ce cas AX = Code d'erreur

2 : Chemin non trouvé

18 : Aucun fichier trouvé avec l'attribut spécifié

Remarques :

·	Le nom du fichier doit être fourni sous forme d'une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Ce nom de fichier peut comporter une désignation de périphérique, une spécification de chemin complète, le nom de fichier proprement dit et des jokers. Si la désignation de périphérique ou la spécification de chemin sont omises, l'accès se fera sur le périphérique actuel ou sur le répertoire actuel.

·	L'attribut 0 permet de rechercher les fichiers normaux. Si différents bits sont fixés dans le champ d'attribut, seront recherchés non seulement les fichiers correspondants mais aussi tous les fichiers normaux.

·	Si un fichier spécifié a pu être trouvé, les 43 premiers octets de la DTA fournissent des informations sur ce fichier :

Octets 0 - 20 :	Réservés

Octet 21 :	Attribut du fichier

Octets 22 - 23 : 	Heure de la dernière modification du fichier

Octets 24 - 25 : 	Date de la dernière modification du fichier

Octets 26 - 27 : 	Mot faible de la taille du fichier

Octets 28 - 29 : 	Mot fort de la taille du fichier

Octets 30 - 42 : 	Nom de fichier et extension, sous forme d'une chaîne ASCII terminée par un caractère de fin (code ASCII 0).

·	Cette fonction ne doit être employée que pour rechercher la première apparition d'un fichier. Lorsqu'il s'agit de rechercher un groupe de fichiers (donc lorsque le nom de fichier contient des jokers), c'est la fonction 4Fh qu'il faut appeler pour poursuivre la recherche.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 4Fh    Lire la prochaine entrée du répertoire     DOS (> 1.0)

Après appel réussi de la fonction 4Eh ou après d'autres appels de cette fonction, cette dernière permet de rechercher d'autres fichiers correspondant au nom de fichier spécifié.

Entrée :

AH 	= 4Fh

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

AX = 18 : Plus trouvé de fichier avec l'attribut spécifié

Remarques :

·	Si un fichier spécifié a pu être trouvé, les 43 premiers octets de la DTA fournissent des informations sur ce fichier :

Octets 0 - 20 :	Réservés

Octet 21 :	Attribut du fichier

Octets 22 - 23 : 	Heure de la dernière modification du fichier

Octets 24 - 25 : 	Date de la dernière modification du fichier

Octets 26 - 27 : 	Mot faible de la taille du fichier

Octets 28 - 29 : 	Mot fort de la taille du fichier

Octets 30 - 42 : 	Nom de fichier et extension, sous forme d'une chaîne ASCII terminée par un caractère de fin (code ASCII 0).

·	Cette fonction ne doit être appelée qu'après que la fonction 4Eh ait été appelée en premier lieu.

·	Cette fonction ne doit être appelée que si le contenu de la DTA n'a pas été modifié depuis le dernier appel de la fonction 4Eh ou 4Fh car la DTA contient des informations essentielles pour poursuivre la recherche de fichiers.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 50h    Définir PSP actif     DOS (> 2.0)

Cette fonction spécifie le PSP en cours. Elle est par exemple utile dans les programmes TSR pour que DOS lise les données à partir de son PSP et non celui du programme tournant au premier plan lors de l'accès au fichier.

Entrée :

AH 	= 50h

BX 	= Adresse de segment du PSP

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

Remarques :

·	Implicitement, DOS considère qu'un PSP commence fondamentalement à l'adresse d'offset 0000h à l'intérieur d'un segment. Il faut en tenir compte lors de l'appel de cette fonction.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 51h    Lire le PSP actif     DOS (> 2.0)

Cette fonction permet de connaître l'adresse de segment du PSP du programme en cours. Elle sert particulièrement aux programmes TSR pour lire l'adresse du PSP du programme de premier plan avant de définir leur propre PSP à l'aide de la fonction 50h.

Entrée :

AH 	= 51h

Sortie :

Flag Carry	= 0 : Tout va bien, dans ce cas

BX	= Adresse de segment du PSP en cours

Flag Carry	= 1 : Erreur, dans ce cas

AX	= Code d'erreur

Remarques :

·	Le PSP spécifié commence toujours à l'adresse offset 0000h par rapport à l'adresse de segment indiquée.

·	Vous devez donner la priorité à cette fonction par rapport à la fonction 62h qui est destinée spécialement à cet effet. En outre, elle est plus documentée que la fonction 51h. Mais elle n'est disponible qu'à partir de la version DOS 3.0 alors que la fonction 51h a été déjà introduite avec la version 2.0.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 52h    Placer un pointeur sur le bloc info DOS     DOS (> 2.0)

Cette fonction retourne un pointeur sur le bloc info DOS. Elle permet d'obtenir de nombreuses informations intéressantes qui ne sont pas toujours accessibles par un programme.

Entrée :

AH 	= 52h

Sortie :

Flag Carry = 0 : Tout va bien, dans ce cas

ES:BX = Pointeur FAR sur le DIB

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

Remarques :

·	Le contenu des registres CX, DX, SI, DI, BP, CS, DS et SS n'est pas modifié par cette fonction.


Int 21h, Fct 53h    Convertir le BPB en DPB    DOS (> 2.0)

Ces fonctions non documentées permettent de convertir un bloc de paramètres BIOS en un bloc de paramètres Drive.

Entrée :

AH 	= 53h

DS:SI 	= Pointeur FAR sur le buffer contenant le BPB converti

ES:BP =	Pointeur sur le buffer dans lequel le bloc de paramètres Drive doit être créé

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas

·	AX = Code d'erreur


Int 21h, Fct 54h    Lire flag Verify    DOS (> 1.0)

Le flag Verify définit si les données écrites sur un support tel que le disque dur ou la disquette doivent être contrôlées après une opération d'écriture pour vérifier que la transmission a été correctement effectuée. Cette fonction permet de lire l'état de ce flag qui s'applique à tous les programmes et non pas seulement au programme actuel.

Entrée :

AH 	= 54h

Sortie :

AL 	= Flag Verify

0 : Verify désactivé

1 : Verify activé

Remarques :

·	Le contenu du flag Verify peut être fixé à l'aide de la fonction 2Eh.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 55h    Créer un nouveau PSP    DOS (> 2.0)

Cette fonction crée un nouveau PSP en copiant l'ancien PSP dans le nouveau et en adaptant ensuite les diverses informations dans le nouveau PSP. Il s'agit en particulier d'informations liées à l'état du PSP en mémoire. Par conséquent, elles peuvent être transférées de l'ancien PSP vers le nouveau avec des modifications.

Entrée :

AH 	= 55h

DX 	= Adresse de segment du nouveau PSP

CX 	= Adresse de segment de l'ancien PSP

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur

Remarques :

·	Cette fonction non documentée est conçue pour pouvoir créer un PSP pour un programme avant de le charger. Eu égard à la fonction 4Bh, elle s'avère toutefois inutile car la fonction 4Bh charge automatiquement un programme, crée un nouveau PSP et adapte les adresses de segment dans le PSP et le programme chargé.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 56h    Renommer ou déplacer un fichier (Handle)    DOS (> 1.0)

Cette fonction permet de renommer un fichier ou de le déplacer dans un autre répertoire d'une unité de mémoire de masse. Le transfert ne peut toutefois se faire que dans les limites des différents répertoires d'un même périphérique. Il est donc impossible de déplacer de cette façon un fichier d'un répertoire du disque dur dans un répertoire d'une disquette.

Entrée :

AH 	= 56h

DS 	= Adresse de segment de l'ancien nom de fichier

DX 	= Adresse d'offset de l'ancien nom de fichier

ES 	= Adresse de segment du nouveau nom de fichier

DI 	= Adresse d'offset du nouveau nom de fichier

Sortie :

Flag Carry =	0	: Tout va bien

Flag Carry =	1	: Erreur, dans ce cas AX = Code d'erreur

2	: Fichier non trouvé

3	: Chemin non trouvé

5	: Accès refusé

11	: Périphérique différent

Remarques :

·	Les noms de fichiers doivent être fournis sous forme de chaînes ASCII terminées par un caractère de fin (code ASCII 0). Ces noms de fichiers peuvent comporter une désignation de périphérique, une spécification de chemin complète, le nom de fichier proprement dit, mais pas de jokers. Si la désignation de périphérique ou la spécification de chemin sont omises, l'accès se fera sur le périphérique actuel ou sur le répertoire actuel.

·	Une erreur peut se produire si le fichier est censé être transféré dans le répertoire racine alors que ce dernier est déjà plein.

·	Cette fonction ne permet pas d'accéder aux sous-répertoires ou aux noms de volumes.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 57h, Sous-Fct 00h    Lire les date et heure de la dernière modification d'un fichier        DOS(> 1.0)

Cette fonction permet de déterminer la date et l'heure de création ou du moins de la dernière modification d'un fichier.

Entrée :

AH 	= 57h

AL 	= 0

BX 	= Handle

Sortie :

Flag Carry	=0 : Tout va bien, dans ce cas

CX	= Heure

DX	= Date

Flag Carry	=1: Erreur, dans ce cas AX = Code d'erreur

1 : Fonction inconnue

6 : Handle inconnu

Remarques :

·	Le fichier doit avoir été préalablement ouvert ou créé à l'aide d'une fonction Handle, de façon à ce qu'il soit possible d'y accéder à travers son handle.

·	L'heure dans le registre CX présente le format suivant :

Bits 0 - 4 :	Secondes par unités de 2

Bits 5 - 10 :	Minutes

Bits 11 - 15 : 	Heures

·	La date dans le registre DX présente le format suivant :

Bits 0 - 4 :	Jour du mois

Bits 5 - 8 :	Mois

Bits 9 - 15 :	Année (par rapport à 1980)

·	Le contenu des registres BX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 57h, Sous-Fct 01h    Définir les date et heure de la dernière modification d'un fichier        DOS (> 1.0)

Cette fonction permet de régler les date et heure de création ou du moins de la dernière modification d'un fichier. Cette information est sauvegardée dans l'entrée du fichier dans le répertoire du périphérique voulu.

Entrée :

AH 	= 57h

AL 	= 1

BX 	= Handle

CX 	= Heure

DX 	= Date

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Fonction inconnue

6 : Handle inconnu

Remarques :

·	Le fichier doit avoir été préalablement ouvert ou créé à l'aide d'une fonction Handle, de façon à ce qu'il soit possible d'y accéder à travers son handle.

·	L'heure dans le registre CX présente le format suivant :

Bits 0 - 4 :	Secondes par unités de 2

Bits 5 - 10 :	Minutes

Bits 11 - 15 : 	Heures

·	La date dans le registre DX présente le format suivant :

Bits 0 - 4 :	Jour du mois

Bits 5 - 8 :	Mois

Bits 9 - 15 :	Année (par rapport à 1980)

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 58h, Sous-Fct 00h    Lire principe de répartition de la mémoire     DOS (> la version 3)

Lorsqu'un programme réclame au DOS une zone de mémoire, à l'aide de la fonction 48h, la mémoire se trouve généralement déjà divisée en différentes zones affectées aux divers programmes. Comme ces zones de mémoire sont rarement exactement de la taille requise, le DOS dispose de différentes possibilités pour affecter une zone de mémoire au programme. Il peut rechercher une zone de mémoire appropriée en partant du bas de la mémoire et affecter alors au programme la première zone présentant au moins la taille requise. Il peut au contraire commencer sa recherche par le haut de la mémoire et affecter également la première zone convenable. La méthode la plus efficace consiste cependant à rechercher une zone de mémoire qui soit à peine plus grande que la zone réclamée, de façon à consommer le moins de mémoire possible. Dans ce cas, aucun compte n'est tenu de la situation de cette zone de mémoire à l'intérieur de l'ensemble de la mémoire.

Cette fonction permet donc de déterminer laquelle de ces trois méthodes est utilisée pour répartir la mémoire RAM.

Entrée :

AH 	= 58h

AL 	= 0

Sortie :

Flag Carry	=0 : Tout va bien, dans ce cas

AX	= 0 : Recherche en partant du bas

AX	= 1 : Recherche suivant la meilleure méthode

AX	= 2 : Recherche en partant du haut

Flag Carry	=1 : Erreur, dans ce cas

AX	= 1 : Code de fonction inconnu

Remarques :

·	Le principe de répartition de la mémoire s'applique à tous les programmes et non pas seulement au programme actuel.

·	Le code de la répartition de la mémoire se définit comme suit :

Bit 0-1	= 00b 	: premier bloc convenable

= 01b	: meilleur bloc convenable

= 10b	: dernier bloc convenable

Bit 2-6	= 0b

Bit 7	= 0 	: Rechercher d'abord dans la mémoire conventionnelle (à partir de la version 5)

= 1	: Rechercher d'abord dans le UMB (à partir de la version 5)

Bit 8-15	= 0b

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 58h, Sous-Fct 01h    Définir principe de répartition de la mémoire        DOS (> la version 3)

Lorsqu'un programme réclame au DOS une zone de mémoire, à l'aide de la fonction 48h, la mémoire se trouve généralement déjà divisée en différentes zones affectées aux divers programmes. Comme ces zones de mémoire sont rarement exactement de la taille requise, le DOS dispose de différentes possibilités pour affecter une zone de mémoire au programme. Il peut rechercher une zone de mémoire appropriée en partant du bas de la mémoire et affecter alors au programme la première zone présentant au moins la taille requise. Il peut au contraire commencer sa recherche par le haut de la mémoire et affecter également la première zone convenable. La méthode la plus efficace consiste cependant à rechercher une zone de mémoire qui soit à peine plus grande que la zone réclamée, de façon à consommer le moins de mémoire possible. Dans ce cas, aucun compte n'est tenu de la situation de cette zone de mémoire à l'intérieur de l'ensemble de la mémoire.

Cette fonction permet donc de fixer laquelle de ces trois méthodes sera utilisée pour répartir la mémoire RAM.

Entrée :

AH 	= 58h

AL 	= 1

BX 	= Stratégie

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas

AX = 1 : Code de fonction inconnu

Remarques :

·	Le principe de répartition de la mémoire s'applique à tous les programmes et non pas seulement au programme actuel.

·	Le code de la répartition de la mémoire se définit comme suit :

Bit 0-1	= 00b 	: premier bloc convenable

= 01b	: meilleur bloc convenable

= 10b	: dernier bloc convenable

Bit 2-6	= 0b

Bit 7	= 0 	: Rechercher d'abord dans la mémoire conventionnelle (à partir de la version 5)

= 1	: Rechercher d'abord dans le UMB (à partir de la version 5)

Bit 8-15	= 0b

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 58h, Sous-Fct 02h    Demander l'utilisation des UMB    DOS (> 5.0)

A partir de la version 5.0, les blocs de mémoire supérieure (UMB) situés entre la limite des 640 Ko et 1 Mo peuvent être inclus dans la gestion de mémoire DOS. Cette fonction informe le programme d'appel si les UMB participent actuellement à la gestion de la mémoire.

Entrée :

AH 	= 58h

AL 	= 02h

Sortie :

Flag Carry	= 0 : Tout va bien, dans ce cas

AL	= 0 : UMB non utilisés

AL	= 1 : UMB inclus dans la gestion de la mémoire

Flag Carry	= 1 : Erreur, dans ce cas

AX	= 1 : UMB non reconnu car commande DOS = UMB non spécifiée

AX	= 7 : Gestion de la mémoire impossible

Remarques :

·	Le code d'erreur 7 est retourné lorsque DOS remarque une inconsistance dans sa gestion de mémoire. Elle est généralement due à un accès erroné à cette zone de mémoire à l'intérieur d'un programme DOS.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 58h, Sous-Fct 03h    Lire l'utilisation des UMB    DOS (> 5.0)

A partir de la version 5.0, les blocs de mémoire supérieure (UMB) situés entre la limite des 640 Ko et 1 Mo peuvent être inclus dans la gestion de la mémoire DOS. Cette fonction détermine si les UMB peuvent faire partie de la gestion de la mémoire.

Entrée :

AH 	= 58h

AL 	= 03h

BX 	= 0 : UMB non inclus

1 : UMB inclus dans la gestion de mémoire

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas

AX = 1 : UMB non reconnus car commande DOS=UMB non spécifiée

AX = 7 : Gestion de mémoire impossible

Remarques :

·	Le code d'erreur 7 est retourné lorsque DOS remarque une inconsistance dans sa gestion de mémoire. Elle est généralement due à un accès erroné à cette zone de mémoire à l'intérieur d'un programme DOS.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 59h    Lire les informations d'erreur étendues     DOS (> version 3)

Lorsqu'une erreur est apparue à la suite de l'appel d'une des fonctions de l'interruption 21h ou de l'interruption 24h, cette fonction vous permet d'obtenir de plus amples informations sur cette erreur, à savoir d'une part une description détaillée de l'erreur, de sa cause et de son origine mais aussi, d'autre part, une indication sur la conduite à tenir pour résoudre le problème.

Entrée :

AH 	= 59h

BX 	= 0

Sortie :

AX 	= Description de l'erreur

BH 	= Cause de l'erreur

BL 	= Réaction conseillée

CH 	= Origine de l'erreur

Remarques :

·	Les codes suivants sont employés pour décrire l'erreur (dans AX) :

0 : 	Aucune erreur n'est apparue

1 : 	Numéro de fonction inconnu

2 : 	Fichier non trouvé

3 : 	Chemin non trouvé

4 : 	Trop de fichiers sont ouverts simultanément

5 : 	Accès refusé

6 : 	Handle inconnu

7 : 	Bloc de contrôle de la mémoire détruit

8 : 	Mémoire disponible insuffisante

9 : 	Adresse de mémoire incorrecte

10 : 	Environnement incorrect

11 : 	Format incorrect

12 : 	Code d'accès incorrect

13 : 	Données incorrectes

14 : 	(réservé)

15 : 	Lecteur inconnu

16 : 	Le répertoire actuel ne peut pas être ouvert

17 : 	Périphériques différents

18 : 	Plus d'autre fichier

19 : 	Support protégé contre l'écriture

20 : 	Périphérique inconnu

21 : 	Périphérique n'est pas prêt

22 : 	Instruction inconnue

23 : 	Erreur CRC

24 : 	Largeur de données incorrecte

25 : 	Recherche infructueuse

26 : 	Type de périphérique inconnu

27 : 	Secteur non trouvé

28 : 	Plus de papier sur l'imprimante

29 : 	Erreur d'écriture

30 : 	Erreur de lecture

31 : 	Erreur générale

32 : 	Erreur de partage de fichier

33 : 	Erreur de verrouillage de fichier

34 : 	Changement de disquette non autorisé

35 : 	FCB indisponible

36 : 	Plus de place dans la liste réseau

37-49 : 	(réservé)

50 : 	Fonction réseau appelée non supportée

51 : 	Pas d'accès à l'ordinateur à distance

52 : 	Nom répété plusieurs fois à l'intérieur du réseau, risque d'équivoque

53 : 	Périphérique portant le nom spécifié inconnu dans le réseau

54 : 	Réseau occupé

55 : 	Le périphérique n'existe plus dans le réseau

56 : 	Erreur NetBios

57 : 	Erreur dans une carte réseau

58 : 	Réponse erronée de la part du réseau

59 : 	Erreur réseau non attendue

60 : 	Carte réseau incompatible sur l'ordinateur à distance

61 : 	File d'attente de l'imprimante saturée

62 : 	Mémoire insuffisante pour imprimer le fichier

63 : 	Sortie du fichier sur l'imprimante interrompue

64 : 	Nom du réseau effacé

65 : 	Accès au réseau refusé

66 : 	Type de périphérique réseau incorrect

67 : 	Nom du réseau inconnu

68 : 	Nom du réseau trop long

69 : 	Erreur NetBios

70 : 	Partage de fichier instauré momentanément

71 : 	Demande de participer au réseau non acceptée

72 : 	Redirection vers le périphérique et le fichier momentanément désactivée

73-79 : 	(réservé)

80 : 	Fichier existe déjà

82 : 	Répertoire ne peut être créé

83 : 	Arrêt après appel de l'interruption 24h

84 : 	Trop de redirections

85 : 	Redirection doublée

86 : 	Mot de passe incorrect

87 : 	Paramètre incorrect

88 : 	Erreur dans le périphérique du réseau

89 : 	Fonction non reconnue dans le réseau

90 : 	Elément système nécessaire non installé

·	Les codes suivants sont employés pour décrire la cause de l'erreur (dans BH) :

1 : 	Plus d'espace disque libre sur le support

2 : 	Interdiction temporaire d'accès (Sera vraisemblablement bientôt levée)

3 : 	Accès non autorisé

4 : 	Erreur interne du logiciel système

5 : 	Erreur électronique

6 : 	Erreur dans le logiciel système mais qui n'a pas été occasionnée par un programme d'application

7 : 	Erreur dans un programme d'application

8 : 	Fichier non trouvé

9 : 	Fichier de format ou type incorrect

10 : 	Fichier verrouillé

11 : 	Support incorrect sur le lecteur

12 : 	Objet réseau existe déjà

13 : 	Autre erreur

·	Les codes suivants sont employés pour la réaction conseillée en vue de résoudre le problème (dans BL) :

1 : 	Répéter opération plusieurs fois puis laisser à l'utilisateur le soin de décider s'il veut interrompre l'opération ou ignorer l'erreur.

2 : 	Répéter opération plusieurs fois, après un certain délai, puis laisser à l'utilisateur le soin de décider s'il veut interrompre l'opération ou ignorer l'erreur.

3 : 	Demander à l'utilisateur d'entrer des données ou des informations.

4 : 	Terminer le programme par la voie normale

5 : 	Fin immédiate du programme

6 : 	Ignorer l'erreur

7 : 	Demander à l'utilisateur d'éliminer la cause de l'erreur puis de répéter l'opération

·	Les codes suivants sont employés pour décrire l'origine de l'erreur (dans CH) :

1 : 	Inconnue

2 : 	Driver de bloc (disquette, disque dur, etc.)

3 : 	Réseau

4 : 	Périphérique sériel

5 : 	Mémoire RAM

·	Seul le contenu des registres CS, SS et SP n'est pas modifié par cette fonction. Le contenu de tous les autres registres est détruit.


Int 21h, Fct 5Ah    Créer fichier temporaire (Handle)    DOS (> version 3)

Cette fonction permet de créer un fichier qui servira uniquement au stockage intermédiaire de données pendant l'exécution d'un programme mais qui sera supprimé après exécution du programme. Le programme d'appel n'a donc pas à se préoccuper du choix d'un nom de programme. Ce nom sera en effet choisi automatiquement par le DOS. Le programme d'appel doit simplement indiquer dans quel répertoire le fichier temporaire devra être mis en place. L'accès au fichier se fera ensuite à travers le handle qui lui a été attribué, de sorte que le nom de fichier ne jouera vraiment aucun rôle. Comme un programme peut ouvrir plusieurs fichiers simultanément à l'aide de cette fonction, le DOS construit le nom du fichier à partir de la date et de l'heure actuelles. Comme la fonction ne peut jamais être appelée deux fois au même moment, cette méthode garantit que chaque fichier temporaire porte un nom différent.

Entrée :

AH	 = 5Ah

CX 	= Attribut du fichier

DS 	= Adresse de segment du répertoire

DX 	= Adresse d'offset du répertoire

Sortie :

Flag Carry	=0 : Tout va bien, dans ce cas

AX	= Handle

DS	= Adresse de segment du nom de fichier complet

DX	= Adresse d'offset du nom de fichier complet

Flag Carry	=1 : Erreur, dans ce cas

AX = Code d'erreur

3 : Chemin non trouvé

4 : Pas de handle disponible

5 : Accès refusé

Remarques :

·	Le nom du répertoire doit être fourni sous forme d'une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Il peut contenir une désignation de périphérique ainsi qu'une spécification de chemin complète. Si la désignation de périphérique ou la spécification de chemin sont omises, l'accès se fera sur le lecteur actuel ou sur le chemin actuel.

·	Les différents bits de l'attribut de fichier ont la signification suivante :

Bit 0 = 1 : 	Fichier en lecture seule

Bit 1 = 1 : 	Fichier caché

Bit 2 = 1 : 	Fichier système

·	Les fichiers qui ont été créés à l'aide de cette fonction ne sont pas automatiquement supprimés à la fin du programme. Pour les supprimer, il faut tout d'abord refermer chaque fichier (fonction 3Eh) puis les supprimer à l'aide du nom de fichier complet (fonction 41h).

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 5Bh    Créer un nouveau fichier (handle)    DOS (> 3.0)

Tout comme la fonction 3Ch, cette fonction crée également un nouveau fichier et retourne un handle relatif à l'accès. Contrairement à la fonction 3Ch, un fichier existant sous le même nom n'est pas détruit et se trouve protégé contre la réécriture.

Entrée :

AH 	= 3Ch

CX 	= Attribut de fichier

Bit 0 = 1 : Fichier en lecture seule

Bit 1 = 1 : Fichier caché

Bit 2 = 1 : Fichier système

DS:DX = Pointeur FAR sur le buffer contenant le nom de fichier

Sortie :

Flag Carry = 0 : Tout va bien, dans ce cas AX = Handle du fichier

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

3 : Chemin non trouvé

4 : Plus de handle libre

5 : Accès refusé

80 : Le fichier existe déjà

Remarques :

·	Les divers bits de l'attribut de fichier peuvent être combinés.

·	Le nom de fichier doit être une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Outre une désignation de périphérique, il doit contenir une désignation de chemin complète et un nom de fichier mais pas de caractères génériques. Si la désignation de périphérique ou de chemin fait défaut, l'accès portera sur le périphérique ou le répertoire en cours.

·	Une erreur lors de l'appel de cette fonction se produit toujours lorsqu'un élément de la désignation de chemin n'existe pas, le fichier doit être créé dans le répertoire principal qui est saturé ou lorsqu'un fichier portant le même nom existe déjà.

·	Si l'appel de la fonction se termine correctement, toutes les autres fonctions handle peuvent être appelés à l'aide du handle transmis puisque le fichier a été ouvert.

·	Lorsque l'appel de cette fonction a abouti, le pointeur de fichier vient se placer sur le premier octet du fichier.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 5Ch, Sous-Fct 00h    Protéger une zone de fichier contre l'accès     DOS (> 3.0)

L'accès des différentes zones d'un fichier par d'autres programmes doit être interdit en particulier dans les réseaux. Cette fonction aide à assurer la protection contre d'éventuelles modifications de ces zones.

Entrée :

AH 	= 5Ch

AL 	= 00h

BX 	= Handle du fichier

CX 	= Mot de poids fort de l'adresse du premier octet à l'intérieur du fichier à verrouiller

DX 	= Mot de poids faible de l'adresse du premier octet à verrouiller

SI 	= Mot de poids fort du nombre d'octets à verrouiller

DI 	= Mot de poids faible du nombre d'octets à verrouiller

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas AX = Code d'erreur

1 : Logiciel réseau non activé

6 : Handle incorrect

33 : La zone spécifiée est déjà entièrement ou partiellement verrouillée

Remarques :

·	Cette fonction ne peut être appelée qu'après avoir appelé la commande SHARE ou le logiciel réseau.

·	L'offset de début de la zone à verrouiller ainsi que sa longueur doivent être indiqués sous forme de LONGINT positifs composés respectivement de 4 octets.

·	Une région verrouillée à l'aide de cette fonction doit être libérée avec la sous-fonction 01h. Il faut surtout empêcher de terminer le programme sans avoir libéré la zone verrouillée au risque d'obtenir des résultats imprévus lors de l'accès au fichier.

·	Les programmes appelés par la fonction EXEC héritent certes des handles d'accès au fichier via le principe hiérarchique, mais ne disposent pas des zones verrouillées qui leur restent inaccessibles au même titre que tout autre programme.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 5Ch, Sous-Fct 01h    Libérer une zone verrouillée dans un fichier    DOS (> 3.0)

Cette fonction libère une zone préalablement verrouillée par a sous-fonction 00h à l'intérieur d'un fichier.

Entrée :

AH 	= 5Ch

AL 	= 01h

BX 	= Handle du fichier

CX 	= Mot de poids fort de l'adresse du premier octet à libérer à l'intérieur du fichier

DX 	= Mot de poids faible de l'adresse du premier octet à libérer

SI 	= Mot de poids fort du nombre d'octets à libérer

DI 	= Mot de poids faible du nombre d'octets à libérer

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas AX = Code d'erreur

1 : Logiciel réseau non activé

6 : Handle incorrect

33 : La zone spécifiée n'est pas verrouillée

Remarques :

·	Cette fonction ne peut être appelée qu'après avoir appelé la commande SHARE ou le logiciel réseau.

·	L'offset de début de la zone à verrouiller ainsi que sa longueur doivent être indiqués sous forme de LONGINTS positifs composés respectivement de 2 mots et 4 octets. Ils doivent correspondre exactement aux indications données lors d'un précédent appel de la sous-fonction 00h.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 5Dh    Réservée à un usage interne    DOS (> 1.0)


Int 21h, Fct 5Eh, Sous-Fct 00h    Indiquer le nom de l'ordinateur dans le réseau    DOS (> 3.1)

Tout ordinateur connecté au réseau peut porter un nom représenté par une chaîne ASCII. L'ordinateur exécutant peut se servir de cette fonction pour demander ce nom. Le numéro NetBios de l'ordinateur est fourni simultanément.

Entrée :

Ah 	= 5Eh

AL 	= 00h

DS:DX	= Pointeur FAR sur le buffer dans lequel il faut copier le nom

Sortie :

Flag Carry = 0 : Tout va bien, dans ce cas

CH<> = 0 : Pas de nom

CH = 0 : Nom dans le buffer spécifié, dans ce cas

CL = Numéro NetBios de l'ordinateur

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

1 : Pas de logiciel réseau chargé

Remarques :

·	Cette fonction ne peut être appelée qu'une fois le logiciel réseau lancé.

·	Après l'appel de cette fonction, le buffer spécifié contient une chaîne ASCII représentant le nom de l'ordinateur sur lequel s'est effectué l'appel de la fonction. La longueur de la chaîne est toujours de 15 caractères. Elle se termine par le code ASCII nul et comprend ainsi 16 octets.

·	Le contenu des registres BX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 5Eh, Sous-Fct 02h    Définir la chaîne d'initialisation de l'imprimante réseau        DOS (> 3.1)

A l'intérieur d'un réseau, chaque ordinateur peut se servir de cette fonction pour définir une chaîne d'initialisation tout à fait spécifique chargée de transmettre la sortie depuis l'ordinateur concerné vers l'imprimante réseau. Il est par exemple possible de définir un mode d'exploitation particulier et d'utiliser l'imprimante réseau reliée à divers ordinateurs dans des modes d'exploitation variés.

Entrée :

AH 	= 5Eh

AL 	= 02h

BX 	= Identification numérique de l'imprimante adressée par rapport à la liste du réseau

CX 	= Longueur de la chaîne d'initialisation en caractères

DS:SI = Pointeur FAR sur le buffer contenant la chaîne d'initialisation

Sortie :

Flag Carry = 	0 : Tout va bien

Flag Carry = 	1 : Erreur, dans ce cas

AX = Code d'erreur

1 : Logiciel réseau non chargé

Remarques :

·	Cette fonction ne peut être appelée qu'une fois le logiciel réseau lancé.

·	La liste du réseau est une liste permettant d'affecter des noms de périphérique locaux aux périphériques, répertoires et fichiers d'un réseau.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 5Eh, Sous-Fct 03h    Lire la chaîne d'initialisation d'une imprimante réseau        DOS (> 3.1)

La chaîne d'initialisation d'une imprimante réseau spécifiée par la sous-fonction 02h peut être obtenue à l'aide de cette fonction.

Entrée :

AH 	= 5Eh

AL 	= 03h

BX 	= Identification numérique de l'entrée souhaitée dans la liste du réseau

DS:SI	= Pointeur FAR sur le buffer devant recevoir la chaîne d'initialisation

Sortie :

Flag Carry =	0 : Tout va bien, dans ce cas

CX = Longueur de la chaîne d'initialisation transmise

Flag Carry =	1 : Erreur, dans ce cas

AX = Code d'erreur

1 : Logiciel réseau non chargé

Remarques :

·	Cette fonction ne peut être appelée qu'une fois le logiciel réseau lancé.

·	Le buffer spécifié doit contenir suffisamment de place pour recevoir 64 caractères.

·	L'identification numérique de l'imprimante peut être obtenue à l'aide de la sous-fonction 02h de la fonction 5Fh. Elle est définie par la sous-fonction 03h de la fonction 5Fh lors de la création de l'entrée dans la liste du réseau.

·	Le contenu des registres BX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 5Fh, Sous-Fct 02h    Lire une entrée de la liste du réseau     DOS (> 3.1)

Retourne une entrée de la liste du réseau définie préalablement par la sous-fonction 03h de cette fonction.

Entrée :

AH 	= 5Fh

AL 	= 02h

BX 	= Numéro de l'entrée souhaitée comme index dans la liste du réseau

DS:SI	= Pointeur FAR sur le buffer devant recevoir le nom local

ES:DI	= Pointeur FAR sur le buffer devant recevoir le nom réseau du périphérique

Sortie :

Flag Carry = 0 : Tout va bien

BH = Bit 0 : 0 = Périphérique existant

: 1 = Périphérique inexistant

BL = Type de périphérique

: 03 = Imprimante

: 04 = Lecteur (périphérique, répertoire ou fichier)

CX = Identification numérique pour l'accès au périphérique via la liste du réseau

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

1 : Logiciel réseau non chargé

18 : Index spécifié trop grand

Remarques :

·	Cette fonction ne peut être appelée qu'une fois le logiciel réseau lancé.

·	Le buffer réservé pour le nom local doit prévoir une place de 16 caractères et 128 pour celui du nom réseau. Dans les deux cas, l'information souhaitée est retournée sous la forme d'une chaîne ASCII terminée par le code ASCII nul.

·	Vous pouvez utiliser cette fonction pour obtenir toutes les entrées de la liste du réseau. Commencez l'appel à partir de l'indice 0 puis continuez avec des indices croissants jusqu'à ce que la fonction retourne le code d'erreur 18.

·	Le contenu des registres SI, DI, CS, DS, SS et ES n'est pas modifié par cette fonction. En revanche, le contenu de tous les autres registres est modifié même si le registre ne sert pas à retourner des informations.


Int 21h, Fct 5Fh, Sous-Fct 03h    Définir une entrée dans la liste du réseau     DOS (> 3.1)

Ces fonctions permettent de définir une nouvelle entrée dans la liste du réseau utilisée pour représenter un nom local à partir du nom d'une imprimante ou d'un lecteur.

Entrée :

AH 	= 5Fh

AL 	= 03h

BL 	= Type de périphérique

: 03 = Imprimante

: 04 = Lecteur (périphérique, répertoire ou fichier)

CX 	= Identification numérique pour accéder au périphérique via la liste du réseau

DS:SI 	= Pointeur FAR sur le buffer contenant le nom local du périphérique

ES:DI 	= Pointeur FAR sur le buffer contenant le nom réseau du périphérique

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

1 : Logiciel réseau non chargé

3 : Chemin d'accès inexistant

5 : Accès refusé

8 : Mémoire insuffisante pour incorporer une autre entrée dans la liste du réseau

Remarques :

·	Cette fonction ne peut être appelée qu'une fois le logiciel réseau lancé.

·	La longueur du nom du périphérique doit être de 15 caractères et doit se terminer par le code ASCII nul. On obtient ainsi une longueur maximale de 16 octets.

·	La longueur du nom réseau du périphérique peut atteindre 127 caractères et doit se terminer également par le code ASCII nul. La longueur maximal du buffer concerné s'élève ici à 128 octets.

·	Le contenu des registres BX, CX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 5Fh, Sous-Fct 04h    Supprimer une entrée de la liste du réseau DOS (> 3.1)

Cette fonction permet de supprimer de la liste du réseau une entrée définie préalablement par la sous-fonction 03h. La redirection vers le périphérique concerné s'effectue alors automatiquement.

Entrée :

AH 	= 5Fh

AL 	= 04h

DS:SI 	= Pointeur FAR sur le buffer contenant le nom local du périphérique

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

1 : Logiciel réseau non chargé

3 : Entrée inconnue

Remarques :

·	Cette fonction ne peut être appelée qu'une fois le logiciel réseau lancé.

·	La longueur du nom du périphérique doit être de 15 caractères et doit se terminer par le code ASCII nul. On obtient ainsi une longueur maximale de 16 octets.

·	Le contenu des registres BX, CX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 60h    Augmenter le nom de fichier    DOS (> 3.0)

Cette fonction sert à augmenter un nom de fichier si bien qu'il peut contenir une désignation complète de chemin et de périphérique outre le nom de fichier. On parle alors d'un nom de fichier "canonique".

Entrée :

AH 	= 60h

DS:SI 	= Pointeur FAR sur le buffer contenant le nom de fichier à compléter sous forme d'une chaîne ASCII

ES:DI 	= Pointeur FAR sur le buffer devant recevoir le nom complet sous forme d'une chaîne ASCII

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas AX = Code d'erreur

Remarques :

·	Outre l'augmentation du nom, cette fonction permet également de déterminer si un périphérique donné existe physiquement ou s'il est représenté par un autre périphérique. A cet effet, transmettez une chaîne à la fonction qui ne se compose uniquement que de la désignation du périphérique à consulter suivie d'un double point et d'un backslash pour le répertoire principal. Si cette chaîne est identique à la chaîne retournée, cela signifie que le périphérique existe physiquement. Le cas contraire indique qu'il s'agit d'une représentation et la valeur de retour désigne le périphérique et le répertoire sur lequel se trouve le lecteur.

·	Le contenu des registres BX, CX, SI, DI, CS, DS, SS et ES n'est pas modifié par cette fonction.


Int 21h, Fct 61h    DOS (> 1.0)

Réservée à un usage interne


Int 21h, Fct 62h    Déterminer adresse de PSP    DOS (> version 3)

Cette fonction permet de lire l'adresse du PSP du programme actuellement exécuté.

Entrée :

AH 	= 62h

Sortie :

BX 	= Adresse de segment du PSP

Remarques :

·	Le PSP commence à l'adresse BX:0000.

·	Le contenu des registres AX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 63h    DOS (> 1.0)

Réservée à un usage interne


Int 21h, Fct 64h    DOS (> 1.0)

Réservée à un usage interne


Int 21h, Fct 65h     DOS (> 1.0)

Réservée à un usage interne


Int 21h, Fct 66h, Sous-Fct 01h    Lire la page de code en cours     DOS (> 3.3)

Cette fonction retourne le numéro de la page de code en cours et le numéro de la page standard spécifiées lors du lancement du système.

Entrée :

AH 	= 66h

AL 	= 01h

Sortie :

Flag Carry = 0 : Tout va bien, dans ce cas

BX = Numéro de la page de code en cours

DX = Numéro de la page de code standard

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

2 = La page de code n'existe pas

Remarques :

·	Le contenu des registres CX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 66h, Sous-Fct 02h    Définir la page de code en cours     DOS (> 3.3)

Cette fonction règle la page de code en cours dans la mesure où les commandes NLSFUNC et MODE CP PREPARE ont été préalablement appelées sur l'interface DOS et le driver COUNTRY.SYS a été implanté à travers le fichier de configuration.

Entrée :

AH 	= 66h

AL 	= 02h

BX 	= Numéro de la page de code à sélectionner

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

2 : La page de code ne peut pas être chargée

65 : Le périphérique ne peut pas être commuté vers une nouvelle page de code

Remarques :

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 67h    Spécifier le nombre de handles disponibles     DOS (> 3.3)

Le nombre de handles disponibles ainsi que le nombre de fichiers qu'un programme peut adresser simultanément peut être défini en appelant cette fonction. Alors que jusqu'à la version DOS 3.3, un programme ne pouvait disposer que de 20 handles au maximum, cette fonction permet à un programme de travailler simultanément sur plusieurs milliers de fichiers.

Entrée :

AH 	= 67h

BX 	= Nombre de handles disponibles

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas AX = Code d'erreur

Remarques :

·	Tant que DOS travaille avec l'option par défaut définie à 20, les handles sont remis dans le PSP du programme. Avec une valeur plus grande, les handles ne peuvent plus tenir dans le PSP, ce qui oblige DOS à allouer une cellule mémoire chargée de recevoir les handles à l'avenir. L'appel de la fonction échoue si la mémoire RAM est insuffisante.

·	Un programme ne peut pas accéder à plus de handles que le nombre prévu dans la commande FILES du fichier de configuration CONFIG.SYS. Bien que DOS ne signale pas une erreur en présence d'une valeur plus grande, le nombre des handles disponibles reste toutefois limité à la valeur spécifiée dans FILES.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 68h    Libérer le buffer de fichier     DOS (> 3.3)

En raison de l'appel de cette fonction, DOS est obligé d'inscrire toutes les données non encore écrites dans un fichier mais se trouvant encore dans les buffers de fichier internes dans le fichier spécifié. Cela empêche par exemple de perdre les données à cause d'une panne d'électricité.

Entrée :

AH 	= 68h

BX 	= Handle du fichier adressé

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas AX = Code d'erreur

Remarques :

·	Avant que cette fonction ne soit introduite dans la version DOS 3.3, il existait deux méthodes pour obliger DOS à libérer les buffers de fichier internes dans le fichier concerné. A certains égards, elles ont perdu leur intérêt face à la fonction décrite ici et ne sont d'ailleurs plus utilisées surtout si on exécute un programme sous la version DOS 3.3 ou supérieure.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Int 21h, Fct 69h    DOS (> 1.0)

Réservée à un usage interne


Int 21h, Fct 6Ah    DOS (> 1.0)

Réservée à un usage interne


Int 21h, Fct 6Bh    DOS (> 1.0)

Réservée à un usage interne


Int 21h, Fct 6Ch    Fct OPEN étendue     DOS (> 4.0)

A partir de la version 4.0, cette fonction permet de créer un fichier lors de l'appel OPEN ou d'écraser un fichier existant. La fonction augmente ainsi les possibilités normales de la fonction OPEN 3Dh.

Entrée :

AH 	= 6Ch

AL	= 0

BX 	= Mode d'accès

CX 	= Attribut de fichier

DX 	= Réaction DOS

DS:SI 	= Pointeur FAR sur le buffer contenant le nom de fichier.

Sortie :

Flag Carry = 0 : Tout va bien, dans ce cas

AX = Handle du fichier

CX = Statut

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

1 : Logiciel de partage de fichier absent

2 : Fichier non trouvé

3 : Chemin non trouvé ou fichier inexistant

4 : Plus de handle disponible

5 : Accès refusé

12 : Mode d'accès interdit

Remarques :

·	Le nom de fichier doit être une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Outre la désignation du périphérique, il doit contenir la désignation complète du chemin et un nom de fichier, mais pas de jokers. Si la désignation de périphérique ou de chemin fait défaut, l'accès portera sur le périphérique ou le répertoire en cours.

·	Le mode d'accès se construit comme suit :

Bit 0-2 : Autorisation de lecture/écriture

000b 	= 	Le fichier est destiné uniquement à la lecture

001b 	= 	Le fichier est destiné uniquement à l'écriture

010b 	= 	Le fichier est destiné à la lecture et l'écriture

Bit 3 : 0b

Bit 4-6 : Mode de partage de fichier

000b 	= 	Seul le programme en cours peut accéder au fichier (mode de compatibilité)

001b 	= 	Seul le programme en cours peut accéder au fichier

010b 	= 	Un autre programme peut lire le fichier mais ne peut pas y écrire

011b 	= 	Un autre programme peut écrire dans le fichier mais ne peut pas le lire

100b 	= 	Un autre programme peut écrire dans le fichier et le lire

Bit 7 : Flag Handle

0 	= 	Le programme enfant du programme en cours peut également accéder au handle de ce fichier

1 	= 	Seul le programme en cours peut accéder au handle de ce fichier

Bit 8-12 : 0b

Bit 13:0 	= 	En cas d'erreur grave, appeler l'interruption 24h

1 	= 	En cas d'erreur grave, retourner le code d'erreur correspondant dans AX mais ne pas appeler l'interruption 24h

Bit 14:1 	= 	Lors de tout accès en écriture sur le fichier, adapter immédiatement l'entrée du répertoire

Bit 15 : 0b

·	Avant l'appel de la fonction, l'attribut de fichier du registre CX peut être chargé avec les attributs suivants.

Bit 0 = 1 : 	Le fichier peut uniquement être lu (Read-Only)

Bit 1 = 1 : 	Le fichier est protégé (non affiché par DIR)

Bit 2 = 1 : 	C'est un fichier système

Bit 5 = 1 : 	Fichier modifié depuis la dernière sauvegarde

Bit 6-15 : 	0b

·	Lorsque le fichier à ouvrir n'existe pas encore ou existe déjà, la réaction de la fonction apparaît dans les deux Nibles du registre DX. Les bits 0 à 3 sont réservés à la réaction lorsque le fichier n'existe pas encore. Dans ce cas, les valeurs prennent la signification suivante :

0000b = Terminer la fonction avec un code d'erreur

0001b = Créer le fichier

·	Les bits 4 à 7 signalent la réaction lorsque l'accès porte sur un fichier existant. Les valeurs signifient alors :

0000b = Terminer la fonction avec un code d'erreur

0001b = Ouvrir le fichier existant

·	Sous DOS 4.0 également, la fonction 3Dh peut être naturellement utilisée pour ouvrir un fichier.

·	Si l'appel de la fonction se déroule correctement, on peut utiliser le handle transmis pour appeler toutes les autres fonctions handle. Le registre CX contient alors un statut de la fonction informant sur les actions de la fonction. Dans ce cas :

0 = Fichier ouvert

1 = Nouveau fichier créé ou ouvert

2 = Fichier existant écrasé ou ouvert

·	Le pointeur de fichier est placé sur le premier octet du fichier.

·	Dans la version 4.0 également, le mode de partage de fichier dans les bits 4 à 6 du mode d'accès n'est intéressant que si le fichier se trouve sur une mémoire de masse faisant partie d'un réseau. Dans un tel cas, ces trois bits déterminent si d'autres programmes du réseau peuvent accéder à ce fichier lors de son ouverture et précisent les droits d'accès de ces programmes. Si ce bit possède la valeur 0, DOS traite ce fichier dans le Compatibility-Mode où l'existence d'un réseau est ignorée par rapport à ce fichier. Ainsi, seul le programme en cours peut accéder effectivement à ce fichier.

·	L'erreur 12 ne survient que sous la version DOS 3 et uniquement à l'intérieur d'un réseau lorsque le fichier est déjà ouvert par un autre programme et qu'il a été confirmé qu'aucun autre programme ne peut momentanément y accéder.

·	Le contenu des registres BX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Interruption 22h
Interruption 22h : terminer un programme

Le vecteur d'interruption de cette routine, qui figure à l'adresse 0000:0088, contient l'adresse d'une routine servant à terminer un programme. Cette routine sera appelée par toutes les fonctions pour terminer un programme, c'est-à-dire par l'interruption 20h et les fonctions 0h, 21h et 4Ch de l'interruption 21h. Elle rend ensuite le contrôle au programme-père, c'est-à-dire au programme qui avait appelé le programme qu'il s'agit de terminer. Cependant, bien que le vecteur d'interruption contienne l'adresse d'une routine qui pourrait donc être appelée à l'aide de l'instruction (langage machine) INT, cela ne doit jamais être tenté car cette routine est conçue comme une procédure FAR et non comme une routine d'interruption.

Si un programme modifie le contenu de ce vecteur d'interruption au cours de son exécution, la routine du DOS ne pourra plus être appelée pour terminer un programme. Pour éviter cela, le DOS sauvegarde le contenu de ce vecteur d'interruption dans le PSP du programme à exécuter avant de lui passer la main. Lorsqu'un programme est terminé à l'aide des fonctions indiquées plus haut, le contenu du vecteur d'interruption est tout d'abord recopié du PSP dans le vecteur, après quoi la routine voulue peut être appelée.


Interruption 23h
Interruption 23h : touche Break

Cette interruption, ou plutôt le vecteur d'interruption correspondant, est également utilisée pour stocker l'adresse d'une routine. Il s'agit ici de la routine qui est appelée chaque fois qu'un caractère Ctrl-C est identifié ou bien que la touche Break est actionnée. Il serait donc possible d'appeler cette routine à l'aide de l'instruction (langage machine) INT mais cela ne doit jamais être tenté car cette routine est conçue comme une procédure FAR et non comme une routine d'interruption.

Un programme peut, au cours de son exécution, modifier le contenu de ce vecteur d'interruption, qui est stocké à partir de la cellule de mémoire 0000:008C, pour que ce ne soit plus la routine du DOS mais une routine du programme qui soit appelée lorsqu'un caractère Ctrl-C est rencontré. C'est un moyen, par exemple, d'empêcher que son exécution puisse être interrompue par la routine du DOS lorsqu'un caractère Ctrl-C est reçu. Lorsque cette routine sera appelée, tous les registres présenteront exactement la valeur qu'ils avaient lorsque avait été appelée la fonction DOS interrompue. Le programme peut alors entreprendre une réaction appropriée à la situation (par exemple en sortant un message sur l'écran) puis rendre le contrôle au DOS à l'aide de l'instruction (langage machine) IRET. Il est également possible de rendre le contrôle au DOS à l'aide d'une instruction (langage machine) FAR ENTREE mais dans ce cas la réaction du DOS dépendra de l'état du flag Carry. Si ce flag est mis, le DOS interrompra l'exécution du programme. S'il est au contraire annulé, rien ne se passera et l'exécution du programme reprendra normalement.

Lorsqu'un programme modifie le contenu de ce vecteur d'interruption, il peut parfaitement arriver qu'il soit terminé sans avoir restauré l'ancien contenu de ce vecteur. Or il se peut que la mémoire RAM qu'il occupait ait été à nouveau libérée et qu'elle soit réemployée par d'autres programmes, auquel cas la routine Ctrl-C risque d'avoir été effacée par d'autres données. Il peut en résulter un plantage du système si un caractère Ctrl-C apparaît, puisqu'un code tout à fait inadapté figure maintenant à la place de l'ancienne routine Ctrl-C.

Pour éviter cela, le DOS sauvegarde le contenu de ce vecteur d'interruption dans le PSP du programme à exécuter avant de lui passer la main. Lorsqu'un programme est terminé, le contenu du vecteur d'interruption est tout d'abord recopié du PSP dans le vecteur, après quoi le contrôle est rendu au programme-père.


Interruption 24h

Cette interruption, ou plutôt le vecteur d'interruption correspondant, est également utilisée pour stocker l'adresse d'une routine. Il s'agit ici de la routine qui est appelée chaque fois qu'une erreur critique est détectée lors d'un accès à l'électronique, lors d'un accès disquette par exemple.

Il serait donc possible d'appeler cette routine à l'aide de l'instruction (langage machine) INT mais cela ne doit jamais être tenté car cette routine est conçue comme une procédure FAR et non comme une routine d'interruption.

Un programme peut, au cours de son exécution, modifier le contenu de ce vecteur d'interruption, qui est stocké à partir de la cellule de mémoire 0000:0090, pour que ce ne soit plus la routine du DOS mais une routine du programme qui soit appelée lorsqu'une erreur de ce type se produit. C'est un moyen, par exemple, d'empêcher que son exécution puisse être interrompue par la routine du DOS lorsque le programme doit accéder au lecteur de disquette alors qu'aucune disquette n'y est placée. Lorsque cette routine est appelée à la suite d'une erreur critique, le bit 7 du registre AH indique le type d'erreur. S'il vaut 0, il s'agit d'une erreur disquette ou disque dur. Pour toute autre erreur, il vaudra 1. Une erreur disquette/disque dur ne sera cependant signalée qu'après plusieurs tentatives infructueuses pour accéder au périphérique. Les 8 bits inférieurs du registre DI (le contenu des 8 bits supérieurs étant indéfini) contiennent lors de l'appel de la routine un code qui décrit plus précisément l'erreur survenue. Les codes suivants peuvent se présenter :

0 : 	Disquette protégée contre l'écriture

1 : 	Accès à un périphérique inconnu

2 : 	Lecteur n'est pas prêt

3 : 	Instruction inconnue

4 : 	Erreur CRC

5 : 	Largeur de données incorrecte

6 : 	Recherche infructueuse

7 : 	Type de périphérique inconnu

8 : 	Secteur non trouvé

9 : 	Plus de papier sur l'imprimante

10 : 	Erreur d'écriture

11 : 	Erreur de lecture

12 : 	Erreur générale

La routine d'erreur doit veiller à ce qu'une fois qu'elle se sera achevée les registres SS, SP, DS, ES, BX, CX et DX contiennent les mêmes valeurs que lorsqu'elle avait été appelée. Au cours de son exécution, elle ne doit, d'autre part, accéder qu'aux fonctions 1 et 12 de l'interruption 21h. Il convient de la terminer par une instruction (langage machine) IRET en renvoyant au DOS, dans le registre AL, un code qui guidera la conduite ultérieure du DOS. Le DOS accepte les codes suivants :

0 : 	Ignorer l'erreur

1 : 	Répéter l'opération (l'accès)

2 : 	Terminer programme en appelant l'interruption 23h

3 : 	Interrompre simplement l'appel de fonction actuel (cette dernière possibilité n'existe qu'à partir de la version 3)

Lorsqu'un programme modifie le contenu de ce vecteur d'interruption, il peut parfaitement arriver qu'il soit terminé sans avoir restauré l'ancien contenu de ce vecteur. Or il se peut que la mémoire RAM qu'il occupait ait été à nouveau libérée et qu'elle soit remployée par d'autres programmes, auquel cas la routine d'erreur risque d'avoir été effacée par d'autres données. Il peut en résulter un plantage du système si une erreur survient, puisqu'un code tout à fait inadapté figure maintenant à la place de l'ancienne routine d'erreur.

Pour éviter cela, le DOS sauvegarde le contenu de ce vecteur d'interruption dans le PSP du programme à exécuter avant de lui passer la main. Lorsqu'un programme est terminé, le contenu du vecteur d'interruption est tout d'abord recopié du PSP dans le vecteur, après quoi le contrôle est rendu au programme-père.


Interruption 25h

Cette interruption permet de lire un ou plusieurs secteurs logiques consécutifs sur une disquette ou sur un disque dur. Cette lecture peut accéder à tous les secteurs du support et non pas seulement à la zone de fichiers du DOS au sens strict. Le DOS utilise lui-même cette interruption pour lire le répertoire racine et la FAT d'un support. Les données sont transférées du support dans un buffer du programme d'appel.

Entrée :

AL 	= Désignation de périphérique

CX 	= Nombre de secteurs à lire

DX 	= Premier secteur à lire

DS 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas

AX = Code d'erreur

1	Instruction incorrecte

2	Marque d'adresse incorrecte

4	Secteur non trouvé

8	Erreur DMA

16	Erreur CRC

32	Erreur du contrôleur de disque

64	Recherche infructueuse

128	Périphérique ne répond pas

Remarques :

·	Pour la désignation de périphérique, 0 représente le lecteur A, 1 le lecteur B, etc.

·	Après appel de cette fonction, le contenu de tous les registres peut avoir été modifié hormis celui des registres de segment.

·	Après appel de cette interruption, le pointeur de pile n'a pas la même position que lors de l'appel car deux octets qui avaient été placés sur la pile n'en sont pas retirés. Ces octets représentent le registre de flags, qui peut être retiré de la pile à l'aide de l'instruction (langage machine) POPF. Il suffit donc d'ajouter 2 à la valeur du pointeur de pile pour qu'il retrouve sa valeur d'origine. Si cette correction est négligée, la pile risque de croître sans cesse, jusqu'à déborder. C'est la raison pour laquelle cette interruption ne peut malheureusement être appelée à l'aide de fonctions de langages évolués pour appeler des interruptions.


Interruption 26h

Cette interruption permet d'écrire un ou plusieurs secteurs logiques consécutifs sur une disquette ou sur un disque dur. Cette écriture peut accéder à tous les secteurs du support et non pas seulement à la zone de fichiers du DOS au sens strict. Le DOS utilise lui-même cette interruption pour écrire le répertoire racine et la FAT d'un support. Les données sont transférées d'un buffer du programme d'appel vers le support.

Entrée :

AL 	= Désignation de périphérique

CX 	= Nombre de secteurs à écrire

DX 	= Premier secteur à écrire

DS 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0	: Tout va bien

Flag Carry =1	: Erreur, dans ce cas

AX = Code d'erreur

1	Instruction incorrecte

2	Marque d'adresse incorrecte

4	Secteur non trouvé

8	Erreur DMA

16	Erreur CRC

32	Erreur du contrôleur de disque

64	Recherche infructueuse

128	Périphérique ne répond pas

Remarques :

·	Pour la désignation de périphérique, 0 représente le lecteur A, 1 le lecteur B, etc.

·	Après appel de cette fonction, le contenu de tous les registres peut avoir été modifié hormis celui des registres de segment.

·	Après appel de cette interruption, le pointeur de pile n'a pas la même position que lors de l'appel car deux octets qui avaient été placés sur la pile n'en sont pas retirés. Ces octets représentent le registre de flags, qui peut être retiré de la pile à l'aide de l'instruction (langage machine) POPF. Il suffit donc d'ajouter 2 à la valeur du pointeur de pile pour qu'il retrouve sa valeur d'origine. Si cette correction est négligée, la pile risque de croître sans cesse, jusqu'à déborder. C'est la raison pour laquelle cette interruption ne peut malheureusement être appelée à l'aide de fonctions de langages évolués pour appeler des interruptions.


Interruption 27h

Cette fonction permet de terminer le programme exécuté et de rendre le contrôle au programme qui avait appelé le programme actuel.

Comme quand est appelée la fonction 31h de l'interruption du DOS 21h, cette fonction ne libère cependant pas la mémoire occupée par le programme, qui reste donc résident dans la mémoire.

Entrée :

CS 	= Adresse de segment du PSP

DX 	= Nombre d'octets à réserver + 1

Sortie :

aucune

Remarques :

·	Cette fonction convient uniquement à l'appel de programmes COM.

·	Le nombre d'octets à réserver se rapporte au commencement du PSP.

·	Les blocs de mémoire qui ont été réservés à l'aide de la fonction 48h ne sont pas affectés par la valeur dans le registre DX car ils ne peuvent être à nouveau libérés qu'en appelant la fonction 49h.

·	Il est préférable d'appeler la fonction 31h de l'interruption 21h plutôt que cette interruption.

·	Une erreur apparaîtra si cette interruption est appelée avec une valeur entre FFF1h et FFFFh dans le registre DX.

·	Les fichiers ouverts ne sont pas refermés par l'appel de cette interruption.


Interruption 2Fh pour MUX

MUX 01h, Fct 00h	PRINT : Tester l'état d'installation

MUX 01h, Fct 01h	PRINT : Ajouter un fichier à la file d'attente

MUX 01h, Fct 02h	PRINT : Retirer un fichier de la file d'attente

MUX 01h, Fct 03h	PRINT : Supprimer la file d'attente

MUX 01h, Fct 04h	PRINT : Interrompre l'impression pour tester son état

MUX 01h, Fct 05h	PRINT : Reprendre l'impression

MUX 01h, Fct 06h	PRINT : Déterminer l'imprimante en service

MUX 06h, Fct 00h	ASSIGN : Tester la présence

MUX 10h, Fct 00h	SHARE : Tester la présence

MUX 15h, Fct 00h	MSCDEX > 1.0 : Renvoyer le nombre de lecteurs CD-ROM

MUX 15h, Fct 01h	MSCDEX > 1.0 : Fournir des informations sur le gestionnaire CD

MUX 15h, Fct 02h	MSCDEX > 1.0 : Renvoyer le nom du fichier de copyright

MUX 15h, Fct 03h	MSCDEX > 1.0 : Renvoyer le nom du fichier Abstract

MUX 15h, Fct 04h	MSCDEX > 1.0 : Renvoyer le nom du fichier Bibliographic Doc

MUX 15h, Fct 05h	MSCDEX > 1.0 : Lire VTOC du CD-ROM

MUX 15h, Fct 06h	MSCDEX > 1.0 : Réservé

MUX 15h, Fct 07h	MSCDEX > 1.0 : Réservé

MUX 15h, Fct 08h	MSCDEX > 1.0 : Lire des secteurs du CD-ROM

MUX 15h, Fct 09h	MSCDEX > 1.0 : Ecrire des secteurs sur le CD-R

MUX 15h, Fct 0Ah	MSCDEX > 1.0 : Réservé

MUX 15h, Fct 0Bh	MSCDEX > 2.0 : Interroger le lecteur CD-ROM

MUX 15h, Fct 0Ch	MSCDEX > 2.0 : Interroger le numéro de version MSCDEX

MUX 15h, Fct 0Dh	MSCDEX > 2.0 : Déterminer les lecteurs CD-ROM

MUX 15h, Fct 0Eh, Sous-Fct 00h	MSCDEX > 2.0 : Renvoyer les paramètres du CD-ROM

MUX 15h, Fct 0Eh, Sous-Fct 01h	MSCDEX > 2.0 : Paramétrage par défaut du CD

MUX 15h, Fct 0Fh	MSCDEX > 2.0 : Lire une entrée de répertoire du CD-ROM

MUX 15h, Fct 10h	MSCDEX > 2.1 : Envoyer une requête au driver du CD

MUX 1Ah, Fct 00h	ANSI.SYS : Tester la présence

MUX 43h, Fct 00h	HIMEM.SYS : Tester la présence

MUX 43h, Fct 10h	HIMEM.SYS : Indiquer l'adresse d'appel des Fcts XMS

MUX 48h, Fct 00h	DOSKEY : Tester la présence

MUX 48h, Fct 10h	DOSKEY : Prendre en compte la saisie d'un utilisateur

MUX ADh, Fct 80h	KEYB.COM : Déterminer le numéro de la version

MUX ADh, Fct 81h	KEYB.COM : Définir la page de codes active

MUX B0h, Fct 00h	GRAFTABL : Tester la présence

MUX B7h, Fct 00h	APPEND : Tester la présence

MUX B7h, Fct 02h	APPEND : Déterminer la compatibilité avec DOS 5

MUX B7h, Fct 04h	APPEND : Indiquer la liste des répertoires APPEND

MUX B7h, Fct 06h	APPEND : Lire les paramètres de la commande

MUX B7h, Fct 07h	APPEND : Définir les paramètres de la commande

Interruption 2Fh pour XMS


Int 2Fh, code MUX 01h, Fct 00h    PRINT : Teste l'état d'installation    MUX

Grâce à cette fonction un programme peut détecter si la partie résidente de la commande PRINT de DOS est chargée.

Entrée :

AH	= 01h

Al	= 00h

Sortie :

AL 	= FFh : PRINT installé

Remarque :

·	Lorsque PRINT est installé, la fonction retourne la valeur FFh en AL. Ce n'est qu'à cette condition que les autres fonctions de PRINT pourront être invoquées. L'exploitation des fonctions de PRINT suppose donc que cette fonction ait été déclenchée au préalable.


Int 2Fh, code MUX 01h, Fct 01h    PRINT : Ajoute un fichier à la file d'attente    MUX

Cette fonction permet à un programme d'ajouter un fichier à la fin de la file en attente d'impression pour qu'il soit imprimé par PRINT en tâche de fond.

Entrée :

AH	= 01h

Al	= 01h

DS:DX	= PPointeur FAR sur une structure de données contenant des informations sur le fichier

Sortie :

Indicateur de retenue (flag Carry)

= 0 : ok

=1 : erreur, dans ce cas AX=code d'erreur

Remarque :

·	La structure de données référencée par DS:DX comporte 5 octets et doit être conforme au modèle suivant :

Offset	Signification	Type

00h	0	1 Byte

01h	Pointeur FAR sur chaîne ASCIIZ contenant le nom du fichier	1 Pointeur FAR

Les caractères génériques ne sont pas autorisés dans le nom, mais les désignations de lecteur et de chemin d'accès sont permises.

En cas d'erreur, le code retourné est le suivant :

0001h	Fonction inconnue

0002h	Fichier non trouvé

0003h	Chemin d'accès non trouvé

0004h	Trop de fichiers ouverts

0005h	Accès au fichier refusé

0008h	File d'attente saturée

000Fh	Périphérique inconnu

Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé que la partie résidente de PRINT était installée


Int 2Fh, code MUX 01h, Fct 02h    PRINT : Retirer un fichier de la file d'attente    MUX

Grâce à cette fonction un ou plusieurs fichiers peuvent être supprimés dans la file d'attente. Même le fichier en cours d'impression peut être retiré, ce qui arrête évidemment son impression.

Entrée :

AH	= 01h

AL	= 02h

DS:DX	= Pointeur sur nom de fichier sous forme de chaîne ASCIIZ

Sortie :

Indicateur de retenue

=0 : ok

=1 : Erreur, dans ce cas

AX= code d'erreur

0001h	Fonction inconnue

0002h	Fichier non trouvé

0003h	Chemin d'accès non trouvé

0004h	Trop de fichiers ouverts

0005h	Accès au fichier refusé

0008h	File d'attente saturée

000Fh	Périphérique inconnu

Remarque :

·	La structure de données référencée par DS:DX comporte 5 octets et doit être conforme au modèle suivant :

Offset	Signification	Type

00h	0	1 Byte

01h	Pointeur FAR sur chaîne ASCIIZ contenant le nom du fichier	1 Pointeur FAR

·	Les caractères génériques sont permis dans le nom de fichier indiqué, ce qui permet en un seul appel de retirer plusieurs fichiers de la file d'attente

·	Le seul code d'erreur possible est 0002h, "Fichier non trouvé", qui indique que le fichier en question n'est pas dans la file d'attente.

·	Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé que la partie résidente de PRINT était installée


Int 2Fh, code MUX 01h, Fct 03h    PRINT : Supprime la file d'attente    MUX

Tous les fichiers sont retirés de la file d'attente et l'impression du fichier en cours est stoppée.

Entrée :

AH	= 01h

AL	= 03h

Sortie :

néant

Remarque :

·	Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé au préalable que la partie résidente de PRINT est déjà installée


Int 2Fh, code MUX 01h, Fct 04h    PRINT : Interrompt l'impression pour tester son état    MUX

Cette fonction permet de connaître le contenu courant de la file d'attente et le nombre d'erreurs survenues

Entrée :

AH	= 01h

AL	= 04h

Sortie :

DX	= Compteur d 'erreurs

DS:SI	= pointeur FAR sur la file d'attente

Remarque :

·	L'impression est interrompue et ne reprendra que si on fait appel à la fonction 05h.

·	Le pointeur retourné en DS:SI référence le buffer dans lequel DOS maintient la file d'attente comme une suite d'éléments de 64 octets. Chacun de ces éléments contient la chaîne ASCIIZ du nom du fichier à imprimer. Le dernier élément de la liste commence par un caractère nul.

·	La liste peut être inspectée mais elle ne doit pas être modifiée.

·	Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé au préalable que la partie résidente de PRINT est déjà installée.


Int 2Fh, code MUX 01h, Fct 05h    PRINT : Reprendre l'impression    MUX

Cette fonction permet de reprendre l'impression après interruption par la fonction 04h.

Entrée :

AH	= 01h

AL	= 05h

Sortie :

néant

Remarque :

·	L'usage de cette fonction n'a évidemment de sens que si on a invoqué précédemment la fonction 04h.


Int 2Fh, code MUX 01h, Fct 06h    PRINT : Détermine l'imprimante en service    MUX

Tant qu'il reste au moins un fichier dans la file d'attente, cette fonction indique l'imprimante qui effectue l'impression.

Entrée :

AH	= 01h

AL	= 06h

Sortie :

Indicateur de retenue (flag carry)

=0 : file d'attente vide

=1 : File non vide, dans ce cas AX=0008h

DS:SI = Pointeur FAR sur l'en-tête du driver de périphérique

Remarque :

·	La manière dont cette fonction retourne son résultat est un peu bizarre. L'information cherchée, à savoir le pointeur sur l'en-tête du périphérique, n'est obtenue qu'en liaison avec un indicateur de retenue armé et le code d'erreur 0008 (file non vide). Si la file d'attente est vide et si de ce fait le pointeur n'est pas disponible, l'indicateur de retenue est désarmé.


Int 2Fh, code MUX 06h, Fct 00h    ASSIGN : Teste la présence    MUX

Grâce à cette fonction un programme peut détecter si la partie résidente de la commande ASSIGN est chargée.

Entrée :

AH	= 06h

AL	= 00h

Sortie :

AL	= FFh : ASSIGN installé


Int 2Fh, code MUX 10h, Fct 00h    SHARE : Teste la présence    MUX

Cette fonction permet de tester la présence de la partie résidente de la commande SHARE de DOS.

Entrée :

AH	= 10h

AL	= 00h

Sortie :

Al	=FFh : SHARE installé


Int 2Fh, Code MUX 15h, Fct 00h    MSCDEX > 1.0 : Renvoie le nombre de lecteurs CD-ROM    MUX

Cette fonction indique le nombre de lecteurs CD-ROM installés. Cette fonction exécute également un test d'installation de MSCDEX.

Entrée :

AH	= 15h

AL	= 00h

Sortie :

BX	= Nombre de lecteurs CD-ROM reconnus

CX	= Nom de périphérique du premier lecteur CD-ROM (0=A:, 1=B: etc.)

Remarque :

·	Un programme doit appeler cette fonction avant toutes les autres fonctions pour vérifier que MSCDEX est réellement installé. Avant l'appel de fonction, chargez la valeur 0 dans le registre BX et vérifiez si BX contient toujours 0 en fin d'appel. Si oui, MSCDEX ne peut pas être installé car il faut au moins un lecteur CD-ROM lorsque MSCDEX est en service.

·	Même si les noms de périphérique des lecteurs CD-ROM peuvent être communiqués en BX et CX après un appel de la fonction, il vaut mieux utiliser la fonction 0Dh dans la mesure où un gestionnaire MSCDEX de la version 2.0 et suivantes est disponible. Dans un réseau, il n'est pas toujours évident que les périphériques portent des noms consécutifs. Le premier lecteur CD-ROM D: peut être suivi d'un lecteur réseau E: auquel fait suite le second lecteur CD-ROM sous le nom F:. Il est conseillé d'appeler la fonction 0Dh car la fonction 00h ne fournit pas des informations précises.


Int 2Fh, Code MUX 15h, Fct 01h    MSCDEX > 1.0 : Fournit des informations sur le gestionnaire CD-ROM        MUX

Cette fonction remplit le buffer de l'appelant avec des informations sur les gestionnaires de périphérique qui, sur ordre de MSCDEX, ouvrent l'accès aux lecteurs CD-ROM installés. Ces informations aident à accéder directement aux gestionnaires en contournant MSCDEX.

Entrée :

AH	= 15h

AL	= 01h

ES:BX	= Pointeur FAR sur le buffer dans lequel la fonction inscrit les informations demandées

Sortie :

Aucune

Remarque :

·	Chaque entrée du buffer nécessite 5 octets. Si le buffer est alloué dynamiquement lors de l'exécution du programme, il faut d'abord déterminer le nombre de lecteurs CD-ROM installés avec la fonction 00h. Chaque lecteur CD-ROM occupe exactement une entrée du buffer. Si le buffer est alloué de façon statique, il faut prévoir une entrée pour chacun des 26 lecteurs CD-ROM (A: à Z:).

·	Les entrées du buffer acceptent un pointeur FAR sur l'en-tête du gestionnaire de périphérique concerné ainsi qu'un Unit Code. Ce code est requis car un gestionnaire de périphérique peut piloter plusieurs lecteurs CD-ROM émanant généralement du même fabricant. Pour différencier les divers lecteurs, il faut spécifier l'Unit Code avant l'appel du gestionnaire.

Offset	Contenu	Type

00h	Sub Unit Code pour le premier lecteur CD-ROM	1 BYTE

01h	Pointeur FAR sur l'en-tête du gestionnaire de périphérique concerné	1 DWORD

05h	Sub Unit Code pour le second lecteur CD-ROM	1 BYTE

06h	Pointeur FAR sur l'en-tête du gestionnaire de périphérique concerné	1 DWORD

0Ah	Sub Unit Code pour le troisième lecteur CD-ROM	1 BYTE

0Bh	Pointeur FAR sur l'en-tête du gestionnaire de périphérique concerné	1 DWORD


Int 2Fh, Code MUX 15h, Fct 02h    MSCDEX > 1.0 : Renvoie le nom du fichier de copyright    MUX

Un CD-ROM peut contenir ce qu'on appelle un fichier de copyright qui renseigne sur l'origine du CD. Cette fonction permet à un programme d'identifier le nom de ce fichier.

Entrée :

AH	= 15h

AL	= 02h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

ES:BX	= Pointeur FAR sur le buffer devant contenir le nom.

Sortie :

Flag Carry	= 0 : Tout va bien

= 1 : Erreur dans ce cas

AL= 15 : Lecteur spécifié non valide

Remarque :

Le buffer transmis doit renfermer suffisamment d'espace pour 38 octets bien que le nom du fichier de copyright ne se compose que de 8 caractères pour le nom et de 3 caractères pour l'extension (selon le format High Sierra). Il prend par conséquence le format habituel "nnnnnnnn.eee". Dans le buffer, le nom doit être stocké comme une chaîne ASCIIZ terminé par un octet nul. Le fichier doit se trouver dans le répertoire principal du CD car le nom ne peut pas contenir de chemin.

Le CD ne dispose pas d'un fichier de copyright si la chaîne renvoyée est vide.


Int 2Fh, Code MUX 15h, Fct 03h    MSCDEX > 1.0 : Renvoie le nom du fichier Abstract    MUX

Chaque CD-ROM peut être doté d'un fichier Abstract qui résume le contenu du CD. Cette fonction permet à un programme de déterminer le nom de ce fichier.

Entrée :

AH	= 15h

AL	= 03h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

ES:BX	= Pointeur FAR sur le buffer devant contenir le nom.

Sortie :

Carry-Flag 	= 0: Tout va bien

= 1 : Erreur dans ce cas

AL = 15 : Lecteur spécifié incorrect

Remarque :

Le buffer transmis doit renfermer suffisamment d'espace pour 38 octets bien que le nom du fichier Abstract ne se compose que de 8 caractères pour le nom et de 3 caractères pour l'extension (selon le format High Sierra). Il prend par conséquence le format habituel "nnnnnnnn.eee". Dans le buffer, le nom doit être stocké comme une chaîne ASCIIZ terminé par un octet nul. Le fichier doit se trouver dans le répertoire principal du CD car le nom ne peut pas contenir de chemin.

Le CD ne dispose pas d'un fichier Abstract si la chaîne renvoyée est vide.


Int 2Fh, Code MUX 15h, Fct 04h    MSCDEX > 1.0 : Renvoie le nom du fichier Bibliographic Documentation        MUX

Chaque CD-ROM est doté d'un fichier Bibliographic Documentation qui indique la source des informations stockées sur le CD. Cette fonction permet à un programme de déterminer le nom de ce fichier.

Entrée :

AH	= 15h

AL	= 04h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

ES:BX	= Pointeur FAR sur le buffer devant contenir le nom.

Sortie :

Carry-Flag 	= 0: Tout va bien

= 1 : Erreur dans ce cas

AL = 15 : Lecteur spécifié incorrect

Remarque :

·	Le buffer transmis doit renfermer suffisamment d'espace pour 38 octets bien que le nom du fichier BibDoc ne se compose que de 8 caractères pour le nom et de 3 caractères pour l'extension (selon le format High Sierra). Il prend par conséquence le format habituel "nnnnnnnn.eee". Dans le buffer, le nom doit être stocké comme une chaîne ASCIIZ terminé par un octet nul. Le fichier doit se trouver dans le répertoire principal du CD car le nom ne peut pas contenir de chemin.

·	Le CD ne dispose pas d'un fichier BibDoc si la chaîne renvoyée est vide.


Int 2Fh, Code MUX 15h, Fct 05h    MSCDEX > 1.0 : Lit VTOC du CD-ROM    MUX

Cette fonction permet à un programme de lire la table décrivant le contenu du CD-ROM.

Entrée :

AH	= 15h

AL	= 05h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

DX	= Numéro du volume dont il faut lire la VTOC.

ES:BX	= Pointeur FAR sur un buffer de 2 Ko devant stocker la VTOC

Sortie :

Carry-Flag 	= 0: Tout va bien, dans ce cas

= 1 : Erreur dans ce cas

AX = 1 : VTOC lue

AX = 00ffh : Il n'y a plus de volume donc il n'y a plus de VTOC à lire

AL= 15 : Lecteur spécifié incorrect ou

AL = 21 : Lecteur pas prêt

Remarque :

·	Une "Volume Table Of Contents" (VTOC) renfermant 2048 octets, il faut prévoir un buffer de 2 Ko pour stocker les données.

·	La plupart des CD-ROM ne sont équipés que d'un seul volume donc d'une seule VTOC. Des volumes multiples se rencontrent sur des CD multisession tels que des CD photo ou des CD MO.


Int 2Fh, Code MUX 15h, Fct 06h    MSCDEX > 1.0 : Réservé    MUX


Int 2Fh, Code MUX 15h, Fct 07h    MSCDEX > 1.0 : Réservé    MUX


Int 2Fh, Code MUX 15h, Fct 08h    MSCDEX > 1.0 : Lit des secteurs du CD-ROM    MUX

Cette fonction correspond à l'interruption 25h qui lit les secteurs d'un lecteur quelconque. Contrairement à l'interruption 25h, l'appel de cette fonction ne doit concerner que des lecteurs CD-ROM.

Entrée :

AH	= 15h

AL	= 08h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

SI:DI	= Numéro du premier secteur

DX	= Nombre de secteurs à lire

ES:BX	= Pointeur FAR sur le buffer devant contenir les secteurs à lire

Sortie :

Carry-Flag 	= 0: Tout va bien

= 1 : Erreur dans ce cas

AL = 15 : Lecteur spécifié incorrect ou

AL = 21 : Lecteur pas prêt

Remarque :

·	Chaque secteur d'un CD-ROM renfermant 2048 octets, le buffer doit prévoir 2 Ko d'espace par secteur lu.

·	Le numéro du premier secteur à lire est codé par SI et DI en tant que valeur 32 bits. SI stocke la valeur 16 bits de poids fort (Hi-Word) et DI la valeur de poids faible (Lo-Word).


Int 2Fh, Code MUX 15h, Fct 09h    MSCDEX > 1.0 : Ecrit des secteurs sur le CD-R    MUX

Cette fonction n'est disponible que pour des CD-R. Un lecteur CD-ROM ordinaire peut uniquement lire des secteurs. Cette fonction correspond à l'interruption 26h qui permet d'écrire des secteurs sur un lecteur quelconque. Contrairement à l'interruption 26h, l'appel de cette fonction ne doit être effectué que sur des lecteurs CD.

Entrée :

AH	= 15h

AL	= 09h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

SI:DI	= Numéro du premier secteur

DX	= Nombre de secteurs à écrire

ES:BX	= Pointeur FAR sur le buffer devant contenir les secteurs à écrire.

Sortie :

Flag Carry 	= 0 : Tout va bien

= 1 : Erreur dans ce cas

AL = 15: Lecteur spécifié incorrect ou

AL = 21: Lecteur pas prêt

Remarque :

·	Le buffer doit réserver 2048 octets pour stocker le contenu de chaque secteur à écrire.

·	Le numéro du premier secteur à lire est codé par SI et DI en tant que valeur 32 bits. SI stocke la valeur 16 bits de poids fort (Hi-Word) et DI la valeur de poids faible (Lo-Word).


Int 2Fh, Code MUX 15h, Fct 0Ah    MSCDEX > 1.0 : Réservé    MUX


Int 2Fh, Code MUX 15h, Fct 0Bh    MSCDEX > 2.0 : Interroge le lecteur CD-ROM    MUX

Cette fonction permet de savoir si le lecteur spécifié est un lecteur CD-ROM contrôlé par MSCDEX.

Entrée :

AH	=	15h

AL	=	0Bh

CX	=	Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

Sortie :

AX = 0 : Ce n'est pas un lecteur CD-ROM

AX  <> 0 : C'est un lecteur CD-ROM

BX = ADADh

Remarque :

Après appel de la fonction, il convient tout d'abord de tester le contenu du registre BX pour confirmer que c'est bien MSCDEX qui a répondu à l'appel et non pas un autre gestionnaire MUX. Si BX contient la signature MSCDEX ADADh, le contenu de AX montre si le lecteur spécifié est oui ou non un lecteur CD-ROM.


Int 2Fh, Code MUX 15h, Fct 0Ch    MSCDEX > 2.0 : Interroge le numéro de version MSCDEX    MUX

Un appel de cette fonction permet de connaître le numéro de version du gestionnaire MSCDEX installé.

Entrée :

AH	= 15h

AL	= 0Ch

Sortie :

BH	= Numéro de version majeure (1, 2 etc.)

BL	= Numéro de sous-version par exemple 10 pour 1.10 ou 2.10

Remarque :

·	Un appel de la fonction 00h doit précéder l'appel de cette fonction pour s'assurer que MSCDEX est réellement installé.

·	Avant l'appel de la fonction, le registre BX doit être chargé avec 0 car cette fonction n'est disponible que depuis la version 2.0 de MSCDEX. Si le registre contient toujours la même valeur après l'appel, cela signifie que la fonction n'est pas exécutable. On a donc affaire à la version 1.x de MSCDEX.


Int 2Fh, Code MUX 15h, Fct 0Dh    MSCDEX > 2.0 : Détermine les lecteurs CD-ROM    MUX

Cette fonction renvoie les noms de périphérique exacts des lecteurs CD-ROM gérés par MSCDEX. Cette fonction est à préférer par rapport à la fonction 00h car elle n'exige pas que tous les lecteurs CD-ROM soient énumérés de façon consécutive.

Entrée :

AH	= 15h

AL	= 0Dh

ES:BX	= Pointeur FAR sur le buffer contenant les noms de périphérique des lecteurs CD

Sortie :

ES:BX	= Pointeur FAR sur le buffer contenant les données concernées

Remarque :

·	Le buffer transmis doit fournir 1 octet d'espace à chaque lecteur CD-ROM. Cet octet renferme le nom de périphérique du lecteur sachant que 0 correspond à A:, 1 à B:, etc. Si le buffer est alloué dynamiquement pendant l'exécution du programme, il faut déterminer auparavant le nombre de lecteurs CD-ROM au moyen de la fonction 00h. Une entrée de buffer est requise pour chaque lecteur CD-ROM. Si le buffer est alloué de façon statique, il faut réserver une entrée pour chacun des 26 lecteurs CD-ROM (A: à Z:).


Int 2Fh, Code MUX 15h, Fct 0Eh, Sous-Fct 00h    MSCDEX > 2.0 : Renvoie les paramètres par défaut du volume du CD-ROM        MUX
Int 2Fh, Code MUX 15h, Fct 0Eh, Sous-Fct 00h    MSCDEX > 2.0 : Renvoie les paramètres par défaut du CD        MUX

MSCDEX active normalement le premier volume sur le CD lors de la définition d'un nouveau lecteur CD-ROM. Mais la sous-fonction 01h permet de changer ce paramétrage en spécifiant le second volume à activer par défaut. Cette fonction renvoie l'état en cours de cette définition.

Entrée :

AH	= 15h

AL	= 0Eh

BX	= 00h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

DX	= 00h

Sortie :

FC	= 0: Tout va bien, dans ce cas

DH	= 1 : premier volume actif

DH	= 2 : deuxième volume actif

DH	= 1 : Erreur dans ce cas

AL = 1: Sous-fonction inconnue ou

AL = 15: Lecteur spécifié incorrect

Remarque :

·	Cette fonction ne présente de l'intérêt que dans des environnements opérant avec des CD-ROM japonais équipés généralement de deux volumes : le premier est destiné au texte en code ASCII normal, le deuxième au texte en code 2 Byte Kanji.


Int 2Fh, Code MUX 15h, Fct 0Eh, Sous-Fct 01h    MSCDEX > 2.0 : Paramétrage par défaut du volume du CD-ROM    MUX

MSCDEX active normalement le premier volume sur le CD lors de la définition d'un nouveau lecteur CD-ROM. Mais cette sous-fonction permet de changer ce paramétrage en spécifiant le second volume à activer par défaut.

Entrée :

AH	= 15h

AL	= 0Eh

BX	= 01h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

DX	= 0100h : Activer automatiquement le premier volume

DX	= 0200h : Activer automatiquement le second volume

Sortie :

FC	= 0: Tout va bien

= 1 : Erreur dans ce cas

AL = 1 : Sous-fonction inconnue ou

AL = 15 : Lecteur spécifié incorrect

Remarque :

·	Cette fonction ne présente de l'intérêt que dans des environnements opérant avec des CD-ROM japonais équipés généralement de deux volumes : le premier est destiné au texte en code ASCII normal, le deuxième au texte en code 2 Byte Kanji.


Int 2Fh, Code MUX 15h, Fct 0Fh    MSCDEX > 2.0 : Lit une entrée de répertoire du CD-ROM    MUX

Cette fonction lit des entrées de répertoire d'un lecteur CD-ROM.

Entrée :

AH	= 15h

AL	= 0Fh

CL	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

CH	= Flag Copy	0 : Copier une entrée de répertoire sans aucune modification

1 : Convertir l'entrée de répertoire en une structure MSCDEX (toutes les différences entre ISO 9660 et High Sierra sont prises en compte)

ES:BX	= Pointeur FAR sur le buffer contenant les noms de fichier

SI:DI	= Pointeur FAR sur le buffer stockant l'entrée de répertoire

Sortie :

FC 	= 0: Tout va bien

= 1 : Erreur dans ce cas

AL = 2 : Fichier non trouvé

AL = 15: Lecteur spécifié incorrect

AL = 18: Mémoire insuffisante pour MSCDEX

AL = 21: Lecteur pas prêt

Remarque :

Le chemin et le nom de fichier renvoyés par la fonction à l'aide d'un pointeur sur ES:BX doivent être une chaîne ASCIIZ ne contenant que des caractères autorisés par le format High Sierra ou par la norme ISO 9660. Les caractères génériques tels que * et ? sont expressément interdits de même que les renvois aux répertoires (.) et (..).

Selon la valeur spécifiée en CH, MSCDEX renvoie l'entrée de répertoire sous deux formes. Dans sa forme brute (CH=0), l'entrée de répertoire est copiée en mémoire par le CD-ROM sans aucune modification. Mais les entrées de répertoire peuvent être données au format High Sierra ou ISO 9660, selon le CD-ROM utilisé. Le buffer doit disposer dans ce cas d'au moins 255 octets.

Si CH contient la valeur 1, MSCDEX construit l'entrée de répertoire au format High Sierra ou ISO 9660 sur une structure commune à configurer pour un buffer de 280 octets. L'entrée de répertoire renvoyée présente dans ce cas la structure suivante :

Offset	Contenu	Type

00h	Importance des attributs étendus (XAR) en tant que facteur de la taille de bloc logique	1 BYTE

01h	Numéro de bloc logique du premier bloc du fichier	1 DWORD

05h	Taille des blocs logiques en octet (2048 octets, mais 512 et 1024 octets sont admis)	1 WORD

07h	Taille du fichier en octets	1 DWORD

0Bh	Date et heure d'enregistrement du fichier	7 BYTE

12h	Flags de fichier	1 BYTE

13h	Interleave Size	1 BYTE

14h	Interleave Skip	1 BYTE

15h	Numéro Volume Set	1 WORD

17h	Longueur du nom de fichier en octets	1 BYTE

18h	Numéro de fichier sous forme de chaîne ASCIIZ	38 BYTE

3Ah	Numéro de version du fichier	1 WORD

3Ch	Nombre d'octets enregistrés en plus dans le champ suivant	1 WORD

3Eh	Octets additionnels enregistrés	220 BYTE


Int 2Fh, Code MUX 15h, Fct 10h    MSCDEX > 2.1 : Envoie une requête au driver du CD-ROM        MUX

Cette fonction permet à un programme d'envoyer une requête au gestionnaire de périphérique d'un lecteur CD-ROM sans connaître l'adresse du gestionnaire ni le code Sub Unit du lecteur CD-ROM concerné.

Entrée :

AH	= 15h

AL	= 10h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

ES:BX	= Pointeur FAR sur le buffer contenant la requête du gestionnaire de périphérique

Sortie :

Aucune

Remarque :

·	Microsoft conseille d'utiliser cette fonction pour communiquer avec le gestionnaire de périphérique d'un lecteur CD-ROM. Elle permet au programmeur d'adresser un gestionnaire de périphérique sans connaître l'adresse ni le code Sub Unit du lecteur concerné. Lors de l'appel de cette fonction, MSCDEX inscrit automatiquement cette information dans le bloc Device Request spécifié et détermine le gestionnaire de périphérique adéquat à partir du nom de lecteur.


Int 2Fh, code MUX 1Ah, Fct 00h    ANSI.SYS : Teste la présence    MUX

Cette fonction permet de tester la présence du driver de périphérique ANSI.SYS

Entrée :

AH	= 1Ah

AL	= 00h

Sortie :

Al	=FFh : ANSI.SYS installé


Int 2Fh, code MUX 43h, Fct 00h    HIMEM.SYS : Teste la présence    MUX

Cette fonction permet de tester la présence du driver de périphérique HIMEM.SYS qui permet d'accéder à la mémoire étendue selon le standard XMS.

Entrée :

AH	= 43h

AL	= 00h

Sortie :

AL	=80h: HIMEM.SYS installé

Remarque :

·	Notez bien que cette fonction contrairement à ses homologues qui effectuent également un test d'installation ne renvoie pas la valeur FFh en cas de succès mais la valeur 80h.

·	Pour assurer la compatibilité avec HIMEM.SYS, cet appel est aussi supporté par d'autres gestionnaires de mémoire XMS.


Int 2Fh, code MUX 43h, Fct 10h    HIMEM.SYS : Indique l'adresse d'appel des Fcts XMS    MUX

Contrairement à ce qui se passe pour les autres gestionnaires de mémoire, les fonctions XMS de HIMEM.SYS ne sont pas déclenchées par des interruptions mais par une routine FAR CALL dont l'adresse est obtenue par le moyen de la présente fonction.

Entrée :

AH	= 43h

AL	= 10h

Sortie :

ES:BX = Pointeur FAR pour appeler les fonctions XMS

Remarque :

·	Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé au préalable que HIMEM.SYS est déjà installé


Int 2Fh, code MUX 48h, Fct 00h    DOSKEY : Teste la présence    MUX

Cette fonction permet de savoir si le programme de DOS DOSKEY.COM est chargé

Entrée :

AH	= 48h

AL	= 00h

Sortie :

AL	=00h : non installé

Remarque :

·	DOSKEY n'existe que depuis la version 5.0 de DOS

·	Notez qu'à l'inverse de fonctions semblables seule est définie la valeur qui indique que le programme DOSKEY.COM n'est pas chargé!


Int 2Fh, code MUX 48h, Fct 10h    DOSKEY : Prend en compte la saisie d'un utilisateur    MUX

Entrée :

AH	= 48h

AL	= 10h

DS:DX	= Pointeur sur structure de données

Sortie :

néant

Remarque :

·	La structure de données référencée par le pointeur en DS:DX s'étend sur 130 octets et mémorise entre autres les saisies de l'utilisateur. Elle doit être conforme au modèle suivant :

Offset	Signification	Type

00h	Taille du buffer de saisie doit être 128	1 OCTET

01h	Nombre de caractères lus - 1	1 OCTET

02h	Buffer de saisie 	128 OCTETS

Le nombre de caractères lus est reporté par DOSKEY dans la structure de données. Avant appel à DOSKEY, ce champ, contrairement à celui de la taille, n'a pas besoin d'être initialisé.


Int 2Fh, code MUX ADh, Fct 80h    KEYB.COM : Détermine le numéro de la version    MUX

Cette fonction indique le numéro de la version du driver de clavier de DOS appelé KEYB.COM.

Entrée :

AH	= Adh

AL	= 80h

BX	=0

Sortie :

BH	= partie majeure du numéro de la version

BL	= partie mineure du même numéro

Remarque :

·	Si BH et BL sont égaux à 0, c'est que KEYB.COM n'est pas installé


Int 2Fh, code MUX ADh, Fct 81h    KEYB.COM : Définit la page de codes active    MUX

Cette fonction permet de fixer la page de codes active.

Entrée :

AH	= Adh

AL	= 81

BX	= Numéro de la page de codes

Sortie :

Indicateur de retenue

= 0 : ok

=1 : erreur. Dans ce cas

AX=0001 "Page de codes inconnue"

Sortie :

néant

Remarque :

·	Les pages de codes suivantes sont reconnues par KEYB :

Code	Jeu de caractères

437	USA

850	Multilingue (tous pays européens )

860	Portugal

863	Canada français

865	Scandinavie

·	Cette fonction ne devrait être invoquée que si un appel à la fonction 80h a prouvé au préalable que KEYB.COM est installé


Int 2Fh, code MUX B0h, Fct 00h    GRAFTABL : Teste la présence    MUX

Cette fonction permet de savoir si la partie résidente de la commande GRAFTABL de DOS est chargée.

Entrée :

AH	= B0h

AL	= 00h

Sortie :

AL	= FFh : GRAFTABL chargé


Int 2Fh, code MUX B7h, Fct 00h    APPEND : Teste la présence    MUX

Cette fonction permet de savoir si la partie résidente de la commande APPEND de DOS est chargée.

Entrée :

AH	= B7h

AL	= 00h

Sortie :

AL	= FFh : APPEND chargé


Int 2Fh, code MUX B7h, Fct 02h    APPEND : Détermine la compatibilité avec DOS 5    MUX

Entrée :

AH	= B7h

AL	= 02h

Sortie :

AX	= FFFFh : compatible avec DOS 5

Remarque :

·	Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé au préalable que APPEND est bien installé


Int 2Fh, code MUX B7h, Fct 04h    APPEND : Indique la liste des répertoires APPEND    MUX

Grâce à cette fonction on peut prendre connaissance des différents répertoires confiés à APPEND pour la recherche des fichiers.

Entrée :

AH	= B7h

AL	= 04h

Sortie :

ES:DI	= Pointeur FAR sur le buffer des répertoires APPEND

Remarque :

·	Le buffer référencé par le pointeur en ES:DI contient les répertoires sous forme de chaîne ASCIIZ. Comme c'est le cas pour la commande PATH, les différentes répertoires sont séparés par des points virgules.

·	Le contenu de ce buffer ne doit pas être modifié par celui qui l'inspecte

·	Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé au préalable que APPEND est bien chargé


Int 2Fh, code MUX B7h, Fct 06h    APPEND : Lit les paramètres de la commande    MUX

Cette fonction permet de prendre connaissance des différents modes opératoires fixés par les paramètres de la ligne de commande au moment du chargement de APPEND.

Entrée :

AH	=B7h

AL	=06h

Sortie :

BX	= Indicateur APPEND

Remarque :

·	Les différents bits de l'indicateur retourné représentent les modes opératoires. Les bits non mentionnés dans le tableau ci-dessous n'ont pas de signification et sont à 0 :

Bit	Signification

0	1 = APPEND est actif

12	1 =	Les répertoires APPEND ne sont pris en compte que si les noms des fichiers cherchés comportent des désignations explicites d'unité correspondant exactement à celles transmises à APPEND

13	1 = commutateur /PATH:ON actif

14	1 = commutateur /E actif

15	1 = commutateur /X:ON actif

·	Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé au préalable que APPEND est bien chargé.


Int 2Fh, code MUX B7h, Fct 07h    APPEND : Définit les paramètres de la commande    MUX

Cette fonction est symétrique de la fonction 06h et permet de fixer les paramètres de fonctionnement de APPEND

Entrée :

AH	= B7h

AL	= 07h

BX	= Indicateur APPEND

Sortie :

néant

Remarque :

·	Les différents bits de l'indicateur représentent les modes opératoires. Les bits non mentionnés dans le tableau ci-dessous n'ont pas de signification et sont à 0 :

Bit	Signification

0	1 = APPEND est actif

12	1 =	Les répertoires APPEND ne sont pris en compte que si les noms des fichiers cherchés comportent des désignations explicites d'unité correspondant exactement à celles transmises à APPEND

13	1 = commutateur /PATH:ON actif

14	1 = commutateur /E actif

15	1 = commutateur /X:ON actif

·	Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé au préalable que APPEND est bien chargé


Interruption 2Fh pour XMS

Fonction 00h	Lire le numéro de version XMS

Fonction 01h	Réserver une HMA (High Memory Area)

Fonction 02h	Libérer la HMA

Fonction 03h	Activation globale de l'adresse de ligne A20

Fonction 04h	Fermeture globale de la ligne d'adresse A20

Fonction 05h	Libération locale de la ligne d'adresse A20

Fonction 06h	Verrouillage local de la ligne d'adresse A20

Fonction 07h	Obtenir l'état de la ligne d'adresse A20

Fonction 08h	Déterminer la taille de la mémoire étendue disponible

Fonction 09h	Allouer un bloc de mémoire étendue (EMB)

Fonction 0Ah	Libérer un bloc de mémoire étendue (EMB)

Fonction 0Bh	Copier la mémoire

Fonction 0Ch	Protège un bloc de mémoire étendue contre un déplacement

Fonction 0Dh	Déverrouiller le bloc de mémoire étendue (EMB)

Fonction 0Eh	Lire les informations sur un EMB

Fonction 0Fh	Agrandir ou diminuer le bloc de mémoire étendue (EMB) alloué

Fonction 10h	Allouer un bloc de mémoire supérieure (UMB)

Fonction 11h	Libérer le bloc de mémoire supérieure (UMB) alloué


Int 2Fh, Fct 00h    Lire le numéro de version XMS    XMS

Cette fonction retourne le numéro de version du driver XMS et son numéro de révision interne.

Entrée :

AH = 	00h

Sortie :

AX = 	Numéro de version XMS

BX = 	Numéro de révision interne

DX = 	Etat de la HMA

0 : Accès à HMA impossible

1 : HMA disponible

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.


Int 2Fh, Fct 01h    Réserver une HMA (High Memory Area ou zone de mémoire haute)    XMS

Cette fonction permet à un programme d'allouer totalement ou partiellement la HMA pour ses besoins personnels.

Entrée :

AH = 	01h

DX = 	Place mémoire demandée en octets, FFFFh pour une application normale ayant un besoin réel en programmes résidents

Sortie :

AX =	0001h : Fonction exécutée

0000h : Erreur, dans ce cas

BL =	Numéro d'erreur

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Après un appel réussi de cette fonction, l'accès à la HMA ne peut s'effectuer que si l'adresse de ligne A20 a été correctement activée. Cela est possible grâce aux fonctions 03h et 05h.

·	Une erreur peut survenir dans le déroulement de la fonction si un programme résident ne dispose pas de la totalité de la HMA et si l'insuffisance de la mémoire se situe au-dessous de la valeur spécifiée dans le paramètre /HMAMIN lors de l'installation du driver. Cela empêche d'octroyer un droit d'accès exclusif à la HMA à un programme résident ne nécessitant que peu de Ko et de laisser ainsi la place à un autre qui peut avoir besoin d'une place mémoire plus importante.

·	A la fin d'un programme, si la HMA reste toujours en sa possession, elle doit être libérée avec la fonction 02h avant de terminer le programme.


Int 2Fh, Fct 02h    Libérer la HMA    XMS

Un programme occupant la HMA à l'aide de la fonction 01h peut libérer cette zone de mémoire avec la fonction 02h.

Entrée :

AH =	02h

Sortie :

AX =	0001h : 	Fonction exécutée

0000h : 	Erreur, dans ce cas

BL = Numéro d'erreur :

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Sans appeler cette fonction, une HMA préalablement allouée reste réservée lorsqu'un programme est terminé. Elle ne peut donc pas être attribuée au programme suivant.

·	Le contenu de la HMA est détruit définitivement à la suite d'un appel de cette fonction.


Int 2Fh, Fct 03h    Activation globale de l'adresse de ligne A20    XMA

Cette fonction permet d'activer l'adresse A20 pour qu'un accès direct à la HMA puisse également avoir lieu à partir du mode réel du processeur.

Entrée :

AH = 	03h

Sortie :

AX =	0001h : 	Fonction exécutée

0000h : 	Erreur, dans ce cas

BL = Numéro d'erreur

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Cette fonction doit être appelée avant ou après la demande portant sur la HMA pour s'assurer qu'il est également possible d'accéder à la HMA à partir du mode réel via l'adresse de segment FFFFh.

·	Avant de terminer un programme, la ligne d'adresse A20 doit être clôturée avec la fonction 04h pour éviter tout risque de débordement de segment dans le programme suivant.

·	L'activation de la ligne d'adresse A20 constitue un processus relativement long selon le système informatique dont vous disposez. Vous devez donc éviter d'appeler trop souvent cette fonction.


Int 2Fh, Fct 04h    Fermeture globale de la ligne d'adresse A20    XMS

Contrairement à la fonction 03h, cette fonction a pour rôle de refermer la ligne d'adresse A20. Il devient alors impossible d'accéder directement à la HMA à partir du mode réel.

Entrée :

AH = 	04h

Sortie :

AX =	0001h : 	Fonction exécutée

0000h : 	Erreur, dans ce cas

BL = Numéro d'erreur

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Selon le système informatique, le verrouillage de la ligne d'adresse A20 constitue un processus relativement long. Vous devez donc éviter d'appeler trop souvent cette fonction.


Int 2Fh, Fct 05h    Libération locale de la ligne d'adresse A20    XMS

Contrairement à la libération globale réalisée avec la fonction 03h, ici la libération ne s'effectue que localement. Un compteur comptabilise l'appel de cette fonction et de la fonction 06h. La mise en service de la ligne ne s'effectue que si elle n'a pas été déjà activée par un appel antérieur.

Entrée :

AH = 05h

Sortie :

AX =	0001h : 	Fonction exécutée

0000h : 	Erreur, dans ce cas

BL = Numéro d'erreur

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Cette fonction doit être appelée avant ou après la demande portant sur la HMA pour s'assurer qu'il est également possible d'accéder à la HMA à partir du mode réel via l'adresse de segment FFFFh.

·	Avant de terminer un programme, la ligne d'adresse A20 doit être clôturée avec la fonction 04h pour éviter tout risque de débordement de segment dans le programme suivant.

·	L'activation de la ligne d'adresse A20 constitue un processus relativement long selon le système informatique dont vous disposez. Vous devez donc éviter d'appeler trop souvent cette fonction.


Int 2Fh, Fct 06h    Verrouillage local de la ligne d'adresse A20    XMS

Tout comme la fonction 05h, celle-ci ne prend effet que si l'adresse n'a pas été encore verrouillée à l'aide d'un appel antérieur.

Entrée :

AH = 	06

Sortie :

AX =	0001h : 	Fonction exécutée

0000h : 	Erreur, dans ce cas

BL = Numéro d'erreur

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Les appels des fonctions 05h et 06h sont exprimés sur le plan interne à l'aide d'un compteur qui augmente à chaque appel de la fonction 05h et diminue à chaque appel de la fonction 06h. L'adresse n'est réellement verrouillée que lorsque le compteur atteint la valeur 0. Les appels des deux fonctions doivent donc être équivalents.

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Cette fonction doit être appelée avant ou après la demande portant sur la HMA pour s'assurer qu'il est également possible d'accéder à la HMA à partir du mode réel via l'adresse de segment FFFFh.

·	Avant de terminer un programme, la ligne d'adresse A20 doit être clôturée avec la fonction 04h pour éviter tout risque de débordement de segment dans le programme suivant.

·	L'activation de la ligne d'adresse A20 constitue un processus relativement long selon le système informatique dont vous disposez. Vous devez donc éviter d'appeler trop souvent cette fonction.


Int 2Fh, Fct 07h    Obtenir l'état de la ligne d'adresse A20    XMS

Cette fonction permet de constater si la ligne d'adresse A20 est déjà en service, si un appel des fonctions 03h ou 05h est en cours.

Entrée :

AH = 	07h

Sortie :

AX = 	0001h : Ligne d'adresse A20 libre

0000h : Adresse A20 verrouillée

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	La demande formulée pour la ligne d'adresse A20 s'effectue indépendamment de l'électronique pour que l'appel de cette fonction ne dure pas aussi longtemps que par exemple le verrouillage ou la libération de la ligne d'adresse A20.


Int 2Fh, Fct 08h    Déterminer la taille de la mémoire étendue disponible    XMS

Cette fonction retourne le volume total disponible dans la mémoire étendue et la taille du plus grand bloc encore libre.

Entrée :

AH = 	08h

Sortie :

AX = 	Taille du plus grand bloc de mémoire étendue (EMB) en octet

DX = 	Volume total disponible dans la mémoire étendue en Ko

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Attention ! La HMA n'est pas prise en compte lors de l'évaluation des deux indications même si elle n'a pas été encore allouée. Par conséquent, les indications s'élèvent à 64 Ko parce que l'allocation de la mémoire étendue commence toujours après la HMA.


Int 2Fh, Fct 09h    Allouer un bloc de mémoire étendue (EMB)    XMS

Un programme peut se servir de cette fonction pour réserver un bloc de mémoire étendue.

Entrée :

AH = 	09h

DX = 	Taille de la zone sollicitée en Ko

Sortie :

AX = 	0001h :	Fonction exécutée

0000h :	Erreur, dans ce cas

BL = Numéro d'erreur :

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

DX = 	Handle sur le prochain accès à l'EMB si un tel bloc peut être alloué

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Pour tous les appels ultérieurs, le handle retourné sert à accéder à l'EMB et doit être sauvegardé dans le programme. S'il est perdu, il faut réinitialiser l'ordinateur ou effectuer un démarrage à chaud pour libérer l'EMB concerné.

·	Le XMS ne peut répondre aux besoins d'un EMB que s'il existe un bloc de mémoire suffisamment grand et un handle. Mais comme le nombre de handles est limité (32 en règle générale), il faut toujours essayer d'allouer des EMB suffisamment grands pour éviter d'appeler trop souvent la fonction et d'utiliser trop de handles.

·	Avant de terminer un programme, il faut libérer l'EMB avec la fonction 0Ah pour qu'il ne soit pas perdu lors de sa transmission à d'autres applications.


Int 2Fh, Fct 0Ah    Libérer un bloc de mémoire étendue (EMB)    XMS

Un bloc de mémoire alloué préalablement par la fonction 09h peut être libéré à l'aide de cette fonction.

Entrée :

AH = 	0Ah

DX = 	Handle

Sortie :

AX = 	0001h :	Fonction exécutée

0000h :	Erreur, dans ce cas

BL = Numéro d'erreur :

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Le contenu de l'EMB est définitivement perdu à la suite d'un appel de cette fonction et le handle devient non valable.


Int 2Fh, Fct 0Bh    Copier la mémoire    XMS

Cette fonction sert à transférer la mémoire entre la RAM conventionnelle et la mémoire étendue ou à copier les blocs de mémoire à l'intérieur de la mémoire conventionnelle ou la mémoire étendue.

Entrée :

AH 	= 0Bh

DS:SI 	= Pointeur sur la structure suivante déterminant la zone de mémoire à copier et sa destination.

Structure de l'EMB à déplacer

Adresse	Contenu	Type

00h	Taille du bloc en octets	1DWORD

04h	Handle du bloc source	1WORD

06h	Offset du bloc source à partir duquel la copie doit avoir lieu	1DWORD

0Ah	Handle du bloc cible	1WORD

0Ch	Offset du bloc cible à partir duquel la copie doit avoir lieu	1DWORD

Taille : 16 octets

Sortie :

AX = 	0001h :	Fonction exécutée

0000h :	Erreur, dans ce cas

BL = Numéro d'erreur :

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Si un EMB doit être appelé, il faut spécifier également le handle retourné dans la fonction 09h lors de l'allocation du EMB. L'adresse d'offset représente alors l'offset relativement au début du bloc.

·	Au contraire, si une zone doit être appelée dans la RAM conventionnelle, il faut spécifier la valeur 0 en guise de handle et les adresses de segment et d'offset du bloc de départ selon le format habituel (d'abord l'adresse d'offset, puis l'adresse de segment) en guise d'offset.

·	En ce qui concerne les handles spécifiés, il ne faut pas qu'ils correspondent aux handles dont les blocs correspondants ont été verrouillés par la fonction 0Ch.

·	Si les zones spécifiées se superposent, la zone source doit figurer avant la zone cible pour garantir une exécution dépourvue d'erreurs de la fonction.

·	Pour assurer une duplication rapide de la zone source, il est souhaitable que les deux zones commencent par une adresse de mémoire paire dans un AT et par une adresse de mémoire divisible par quatre dans un 80386.


Int 2Fh, Fct 0Ch    Protège un bloc de mémoire étendue (EMB) contre un déplacement    XMS

Pour que des trous n'apparaissent pas dans la mémoire étendue après sa libération, la XMM se voit parfois contrainte de déplacer les divers EMB dans la mémoire. Cette fonction empêche de déplacer un EMB bien précis.

Entrée :

AH 	= 0Ch

DX 	= Handle de l'EMB

Sortie :

AX 	= 	0001h :	Fonction exécutée

0000h :	Erreur, dans ce cas

BL = Numéro d'erreur :

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

DX:BX	= 	Adresse 32 bits linéaire de l'EMB dans la mémoire

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	La fonction retourne l'adresse de l'EMB qui ne reste valable que tant que l'EMB n'est pas à nouveau verrouillé. Les blocs verrouillés doivent être libérés aussi vite que possible avec la fonction 0Dh pour que la gestion de la mémoire XMM ne subisse pas trop de conséquences.

·	L'état de verrouillage des différents EMB est fourni distinctement dans un compteur qui augmente à chaque appel de cette fonction et diminue à chaque appel de la fonction 0Dh. Le compteur commence avec la valeur 0. Lorsque le compteur indique à nouveau la valeur 0, cela signifie que le EMB concerné est déverrouillé.


Int 2Fh, Fct 0Dh    Déverrouiller le bloc de mémoire étendue (EMB)    XMS

Un EMB préalablement verrouillé peut être déverrouillé à l'aide de cette fonction. Il pourra donc être déplacé dans la mémoire étendue.

Entrée :

AH = 	0Dh

DX = 	Handle de l'EMB

Sortie :

AX = 	0001h :	Fonction exécutée

0000h :	Erreur, dans ce cas

BL = Numéro d'erreur :

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	L'adresse de l'EMB retournée par l'appel de la fonction 0Ch devient caduque à la suite de cet appel.


Int 2Fh, Fct 0Eh    Lire les informations sur un EMB    XMS

Cette fonction permet de prendre connaissance des diverses informations concernant un EMB. Outre la taille du bloc, vous pouvez connaître son compteur de verrouillage ainsi que le nombre de handles encore disponibles.

Entrée :

AH = 	0Eh

DX = 	Handle de l'EMB

Sortie :

AX = 	0001h :	Fonction exécutée, dans ce cas

BH 	= 	Compteur de verrouillage du bloc

BL 	= 	Nombre de handles EMB disponibles

DX 	= 	Taille de l'EMB en Ko

0000h :	Erreur, dans ce cas

BL 	= 	Numéro d'erreur :

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	En ce qui concerne le compteur de verrouillage, il s'agit d'un compteur réglé individuellement pour chaque EMB. Il augmente à chaque appel de la fonction de verrouillage (0Ch) et diminue en conséquence à chaque appel de la fonction 0Dh. L'EMB n'est effectivement verrouillé que lorsque le compteur atteint la valeur 0. Une valeur différente de zéro indique le nombre d'appels de la fonction 0Dh à effectuer pour verrouiller à nouveau l'EMB.


Int 2Fh, Fct 0Fh    Agrandir ou diminuer le bloc de mémoire étendue (EMB) alloué    XMS

Cette fonction permet de modifier la taille d'un EMB.

Entrée :

AH = 	0Fh

BX = 	Nouvelle taille de l'EMB en Ko

DX = 	Handle de l'EMB

Sortie :

AX = 	0001h :	Fonction exécutée

0000h :	Erreur, dans ce cas

BL = Numéro d'erreur:

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	L'EMB spécifié doit être verrouillé pour pouvoir être agrandi ou diminué.

·	Le contenu du bloc se perd définitivement si la taille de l'EMB est réduite.


Int 2Fh, Fct 10h    Allouer un bloc de mémoire supérieure (UMB)    XMS

Compte tenu du matériel installé, certains drivers XMS permettent d'utiliser la mémoire conventionnelle située entre la limite des 640 Ko et le début de la mémoire étendue. Un tel bloc de mémoire peut être alloué à l'aide de cette fonction.

Entrée :

AH = 	10h

DX = 	Taille du bloc de mémoire sollicité en paragraphes

Sortie :

AX = 	0001h :	Fonction exécutée, dans ce cas

BX 	= 	Adresse de segment de l'UMB

0000h :	Erreur, dans ce cas

BL 	= 	Numéro d'erreur :

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

DX 	= 	Taille maximale d'un UMB à allouer en paragraphes

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Attention ! Cette fonction dépend considérablement du matériel et n'est pas disponible sur tous les drivers XMS. Après son appel, il est donc indispensable de vérifier l'état d'erreur pour s'assurer qu'un UMB peut effectivement être alloué.

·	L'adresse de segment retournée par la fonction permet également d'accéder directement à l'UMB en mode réel. Dans ce cas, l'adresse d'offset en octets résultant du calcul de la taille du bloc n'est pas ignorée.

·	Cette fonction peut également être utilisée pour obtenir le plus grand bloc UMB disponible en spécifiant tout simplement une valeur non réelle pour la taille du bloc à allouer (exemple, FFFFh). La fonction n'alloue en aucun cas un UMB mais retourne la taille du plus grand bloc UMB disponible.


Int 2Fh, Fct 11h    Libérer le bloc de mémoire supérieure (UMB) alloué    XMS

Un UMB préalablement alloué par la fonction 10h est libéré par l'appel de cette fonction et devient ainsi disponible pour d'autres programmes.

Entrée :

AH = 	11h

DX = 	Adresse de segment de l'UMB

Sortie :

AX = 	0001h :	Fonction exécutée, dans ce cas

0000h :	Erreur, dans ce cas

BL = Numéro d'erreur :

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Le contenu de l'UMB se perd définitivement après l'appel de cette fonction. Il devient alors impossible d'accéder à la mémoire au moyen de l'adresse de segment du bloc.

·	Avant de terminer un programme, il convient de libérer tous les blocs UMB alloués à l'aide de cette fonction, sinon ils ne peuvent pas être accédés par les applications lancées ultérieurement.


Interruption 33h

Fonction 00h	Réinitialisation du driver de souris

Fonction 01h	Afficher le curseur de la souris sur l'écran

Fonction 02h	Masquer le curseur de la souris

Fonction 03h	Lire la position de la souris et l'état des boutons de la souris

Fonction 04h	Déplacement du curseur de la souris

Fonction 05h	Lire combien de fois un bouton de la souris a été enfoncé

Fonction 06h	Combien de fois un bouton de la souris a-t-il été relâché ?

Fonction 07h	Définir la zone de déplacement horizontale pour le curseur

Fonction 08h	Définir la zone de déplacement verticale pour le curseur de la souris

Fonction 09h	Définit le curseur de la souris en mode graphique

Fonction 0Ah	Définit le curseur de la souris en mode de texte

Fonction 0Bh	Lire les distances de déplacement

Fonction 0Ch	Installer le gestionnaire d'événements

Fonction 0Dh	Activer l'émulation du crayon optique

Fonction 0Eh	Désactiver l'émulation du crayon optique

Fonction 0Fh	Définir le rapport entre les mickeys et les points

Fonction 10h	Définir la zone d'exclusion

Fonction 11h	Non documentée

Fonction 12h	Non documentée

Fonction 13h	Définir le seuil pour le doublement de la vitesse de la souris

Fonction 14h	Echange des gestionnaires d'événements

Fonction 15h	Lire la taille du buffer d'état de la souris

Fonction 16h	Sauvegarder état de la souris

Fonction 17h	Restaurer l'état de la souris

Fonction 18h	Installer un gestionnaire d'événements alternatif

Fonction 19h	Lire l'adresse d'un gestionnaire d'événements alternatif

Fonction 1Ah	Définir la sensibilité de la souris

Fonction 1Bh	Lire la sensibilité de la souris

Fonction 1Ch	Définir la fréquence d'Int de l'électronique de la souris

Fonction 1Dh	Définir une page écran pour le curseur de la souris

Fonction 1Eh	Lire page écran du curseur de la souris

Fonction 1Fh	Désactiver le driver de la souris

Fonction 20h	Activer le driver de la souris

Fonction 21h	Réinitialiser le driver de la souris

Fonction 22h	Définir la langue étrangère pour les messages

Fonction 23h	Vérifier l'existence d'une langue étrangère pour les messages

Fonction 24h	Lire le type de souris

Fonction 25h	Lire des informations générales

Fonction 26h	Lire l'extension de l'écran de souris virtuel

Fonction 27h	Lire les masques de bits du curseur d'écran

Fonction 28h	Définir le mode vidéo

Fonction 29h	Lire la liste des modes vidéo disponibles

Fonction 2Ah	Obtenir des informations sur le curseur de la souris

Fonction 2Bh	Lire les courbes d'accélération

Fonction 2Ch	Lire la courbe d'accélération en cours

Fonction 2Dh	Définir/Lire la courbe d'accélération en cours

Fonction 2Eh	Non documentée

Fonction 2Fh	Réinitialisation de l'électronique de la souris

Fonction 30h	Définir/Obtenir les paramètres de la souris Ballpoint

Fonction 31h	Lire l'étirement de l'écran virtuel

Fonction 32h	Lire les Fcts disponibles

Fonction 33h	Définir les paramètres

Fonction 34h	Lire l'état du fichier MOUSE.INI


Int 33h, Fct 00h    Réinitialisation du driver de souris    Mouse (> 1.0)

Initialise le driver de souris et enclenche ainsi le test de la souris.

Entrée :

AX	= 0000h

Sortie :

AX	= FFFFh : dans ce cas, un driver de souris est installé

BX	= Nombre de boutons de la Souris (à partir de 1.0)

AX	= 0000h : erreur, aucun driver de souris n'est installé

Remarques :

·	L'appel de cette fonction agit sur toute une série de paramètres de la souris qui peuvent être fixés à l'aide des différentes fonctions de la souris :

Þ	Le curseur de la souris est placé au centre de l'écran puis caché. Il apparaîtra désormais en mode graphique sous forme d'une flèche, alors qu'il sera représenté en mode de texte sous forme d'une case de texte en inversion vidéo. Le curseur de la souris est systématiquement affiché dans la page 0 de l'écran, indépendamment du mode. La zone de déplacement sélectionnée est la totalité de l'écran.

Þ	Les gestionnaires d'événements installés par un programme. Ils sont désactivés.

Þ	L'émulation du crayon optique est également désactivée.

Þ	La vitesse de la souris. Pour la vitesse horizontale de la souris, un rapport de 8 mickeys pour 8 points est défini. Pour la vitesse verticale, ce rapport est de 16 pour 8

Þ	Le seuil de doublement de la vitesse de la souris. Il est fixé à 64 mickeys par seconde.


Int 33h, Fct 01h    Afficher le curseur de la souris sur l'écran    Mouse (> 1.0)

Après appel de cette fonction, le curseur de la souris devient visible sur l'écran et suit désormais les déplacements de la souris sur l'écran.

Entrée :

AX	= 0001h

Sortie :

Aucune

Remarques :

·	L'appel de cette fonction entraîne l'incrémentation d'un compteur interne, en fonction duquel le curseur de la souris est ou non affiché sur l'écran. Si ce compteur contient la valeur 0, le curseur de la souris sera affiché sur l'écran, alors que la valeur -1 a pour effet de le faire disparaître de l'écran. Lorsque la fonction 00h (Reset) est appelée, ce compteur est tout d'abord fixé sur -1, pour prendre ensuite la valeur 0 lors du premier appel de cette fonction, ce qui se traduit par la réapparition du curseur sur l'écran.

·	Le driver de la souris suit les déplacements de la souris même si le curseur de la souris n'est pas affiché sur l'écran. A la suite de l'appel de cette fonction, le curseur de la souris ne réapparaîtra donc pas nécessairement au même endroit que là où il se trouvait lorsqu'il avait été caché.


Int 33h, Fct 02h    Masquer le curseur de la souris    Mouse (> 1.0)

Cette fonction élimine le curseur de la souris de l'écran.

Entrée :

AX	= 0002h

Sortie :

Aucune

Remarques :

·	L'appel de cette fonction entraîne la décrémentation d'un compteur interne, en fonction duquel le curseur de la souris est ou non affiché sur l'écran. Si ce compteur contient la valeur 0, le curseur de la souris sera affiché sur l'écran, alors que la valeur -1 a pour effet de le faire disparaître de l'écran.

·	Le driver de la souris suit les déplacements de la souris même après appel de cette fonction. A la suite de l'appel de la fonction 01h (Afficher le curseur de la souris), le curseur de la souris ne réapparaîtra donc pas nécessairement au même endroit que là où il se trouvait lorsqu'il avait été caché.


Int 33h, Fct 03h    Lire la position de la souris et l'état des boutons de la souris        Mouse (> 1.0)

L'appel de cette fonction fournit la position actuelle de la souris et l'état des différents boutons de la souris.

Entrée :

AX	= 0003h

Sortie :

BX	= Etat des boutons de la Souris (à partir de 1.0)

Bit	Signification

0	1 = bouton gauche de la souris appuyé

1	1 = bouton droit de la souris appuyé

2	1 = bouton central de la souris appuyé

3-15	Aucune (0)

CX	= Position horizontale de la Souris (à partir de 1.0)

DX	= Position verticale de la souris

Remarques :

·	Les ordonnées renvoyées dans les registres CX et DX ne se rapportent pas à l'écran physique mais aux positions en points écran dans l'écran virtuel de la souris.

·	Si la souris ne possède que deux boutons, les informations fournies sur le bouton central sont dépourvues de signification.


Int 33h, Fct 04h    Déplacement du curseur de la souris    Mouse (> 1.0)

Déplace le curseur de la souris vers une position déterminée de l'écran, à moins qu'il n'ait été caché avec la fonction 02h.

Entrée :

AX	= 0004h

CX	= Position horizontale de la Souris (à partir de 1.0)

DX	= Position verticale de la souris

Sortie :

Aucune

Remarques :

·	Les ordonnées renvoyées dans les registres CX et DX ne se rapportent pas à l'écran physique mais aux positions en points écran dans l'écran virtuel de la souris.

·	Si la position spécifiée se situe en dehors de la zone de déplacement fixée avec les fonctions 07h et 08h, les coordonnées sont adaptées pour que le curseur de la souris ne sorte pas de cette zone.

·	Le curseur de la souris est bien déplacé vers la nouvelle position même s'il est caché, mais ce déplacement n'apparaîtra naturellement que lorsque le curseur sera à nouveau incrusté.


Int 33h, Fct 05h    Lire combien de fois un bouton de la souris a été enfoncé        Mouse (> 1.0)

Indique au programme d'appel combien de fois un bouton de la souris a été appuyé depuis le dernier appel de cette fonction et où le curseur de la souris se trouvait la dernière fois que ce bouton avait été actionné.

Entrée :

AX	= 0005h

BX	= Bouton de la souris appelé :

0	= bouton gauche de la Souris (à partir de 1.0)

1	= bouton droit de la Souris (à partir de 1.0)

2	= bouton central de la souris

Sortie :

AX	= Etat de tous les boutons de la souris (à partir de 1.0)

Bit	Signification

0	1 = bouton gauche de la souris appuyé

1	1 = bouton droit de la souris appuyé

2	1 = bouton central de la souris appuyé

3-15	Aucune signification (0)

BX	= Nombre de fois que le bouton de la souris appelé a été actionné depuis le dernier appel de cette fonction

CX	= Position horizontale de la souris la dernière fois que le bouton a été actionné

DX	= Position verticale de la souris la dernière fois que le bouton a été actionné

Remarques :

·	Les ordonnées transmises dans les registres CX et DX ne se rapportent pas à l'écran physique mais aux positions en points écran dans l'écran virtuel de la souris.

·	Le compteur du nombre de fois que le bouton de la souris appelé a été appuyé est à nouveau fixé sur 0 lorsque cette fonction est appelée.


Int 33h, Fct 06h    Combien de fois un bouton de la souris a-t-il été relâché ?        Mouse (> 1.0)

Indique au programme d'appel combien de fois un bouton de la souris a été relâché depuis le dernier appel de cette fonction et où figurait le curseur de la souris lors du dernier de ces événements.

Entrée :

AX	= 0006h

BX	= Bouton de la souris appelé :

0	= bouton gauche de la Souris (à partir de 1.0)

1	= bouton droit de la Souris (à partir de 1.0)

2	= bouton central de la souris

Sortie :

AX	= Etat de tous les boutons de la Souris (à partir de 1.0)

Bit	Signification

0	1 = bouton gauche de la souris appuyé

1	1 = bouton droit de la souris appuyé

2	1 = bouton central de la souris appuyé

3-15	Aucune signification (0)

BX	= Nombre de fois que le bouton de la souris a été relâché

CX	= Position horizontale de la souris la dernière fois que le bouton a été relâché

DX	= Position verticale de la souris la dernière fois que le bouton a été relâché

Remarques :

·	Les ordonnées transmises dans les registres CX et DX ne se rapportent pas à l'écran physique mais aux positions en points écran dans l'écran virtuel de la souris.

·	Le compteur du nombre de fois que le bouton de la souris appelé a été relâché est à nouveau fixé sur 0 lorsque cette fonction est appelée.


Int 33h, Fct 07h    Définir la zone de déplacement horizontale pour le curseur de la souris        Mouse (> 1.0)

Définit la zone horizontale à l'intérieur de laquelle le curseur de la souris peut se déplacer. L'utilisateur n'aura aucune possibilité de faire sortir le curseur de la souris de la zone ainsi fixée.

Entrée :

AX	= 0007h

CX	= position horizontale minimale de la souris

DX	= position horizontale maximale de la souris

Sortie :

Aucune

Remarques :

·	Les ordonnées transmises dans les registres CX et DX ne se rapportent pas à l'écran physique mais aux positions en points écran dans l'écran virtuel de la souris.

·	Si le curseur de la souris se trouve en dehors de la zone spécifiée, il y est automatiquement ramené par le driver de la souris.

·	Si la valeur spécifiée dans le registre DX est inférieure à celle dans CX, les deux paramètres sont échangés.


Int 33h, Fct 08h    Définir la zone de déplacement verticale pour le curseur de la souris        Mouse (> 1.0)

Définit la zone verticale à l'intérieur de laquelle le curseur de la souris peut se déplacer. L'utilisateur n'aura aucune possibilité de faire sortir le curseur de la souris de la zone ainsi fixée.

Entrée :

AX	= 0008h

CX	= position verticale minimale de la souris

DX	= position verticale maximale de la souris

Sortie :

Aucune

Remarques :

·	Les ordonnées transmises dans les registres CX et DX ne se rapportent pas à l'écran physique mais aux positions en points écran dans l'écran virtuel de la souris.

·	Si le curseur de la souris se trouve en dehors de la zone spécifiée, il y est automatiquement ramené par le driver de la souris.

·	Si la valeur spécifiée dans le registre DX est inférieure à celle dans CX, les deux paramètres sont échangés.


Int 33h, Fct 09h    Définit le curseur de la souris en mode graphique        Mouse (> 1.0)

En mode graphique, un tableau de bits définit l'apparence du curseur de la souris, en fixant de quelle manière les points sous le curseur de la souris et les points du curseur de la souris doivent être combinés. Cette fonction sert à définir ce tableau de bits, et donc l'apparence du curseur de la souris.

Entrée :

AX	= 0009h

BX	= Distance du point de référence au bord gauche du tableau de bits

CX	= Distance du point de référence au bord supérieur du tableau de bits

ES:DX	= Adresses de segment et d'offset du tableau de bits dans la mémoire

Sortie :

Aucune

Remarques :

·	Le tableau de bits comporte 64 octets, dont les 32 premiers définissent une combinaison ET et les 32 autres une combinaison OU avec le motif de points actuel.


Int 33h, Fct 0Ah    Définit le curseur de la souris en mode de texte    Mouse (> 1.0)

Fixe le motif de bits définissant l'apparence du curseur de la souris en mode de texte.

Entrée :

AX	= 000Ah

BX	= Type de curseur de la Souris (à partir de 1.0)

0	= curseur logiciel

1	= curseur électronique

CX	= Masque AND pour le curseur logiciel ou la ligne de départ du curseur électronique

DX	= Masque XOR pour le curseur logiciel ou la ligne finale du curseur électronique

Sortie :

Aucune

Remarques :

·	Si le curseur logiciel est sélectionné, le code du caractère sous le curseur de la souris et l'octet d'attribut correspondant sont tout d'abord combiné par un AND binaire avec le masque dans le registre CX, avant qu'une combinaison OU EXCLUSIF (XOR) soit ensuite opérée avec la valeur dans le registre DX. L'octet d'attribut est combiné avec les octets de plus fort poids des deux valeurs (CH et DH), alors que le code de caractère est combiné avec les octets de plus faible poids (CL et DL).

·	Le curseur électronique est le curseur clignotant de l'écran. Les lignes de départ et de fin doivent être comprises, en mode monochrome, entre 0 et 13, et en mode couleur, entre 0 et 7.


Int 33h, Fct 0Bh    Lire les distances de déplacement    Mouse (> 1.0)

Détermine la distance entre la position actuelle de la souris et la position de la souris lors du dernier appel de cette fonction.

Entrée :

AX	= 000Bh

Sortie :

CX	= Distance horizontale

DX	= Distance verticale

Remarques :

·	Les valeurs doivent être interprétées comme des nombres signés, les valeurs positives indiquant un déplacement vers le bas ou la droite de l'écran, alors que les valeurs négatives indiquent un déplacement vers le haut ou la gauche de l'écran.

·	Les valeurs ne sont pas fournies en points mais en mickeys.(1 mickey équivaut à 1/200 de pouce).


Int 33h, Fct 0Ch    Installer le gestionnaire d'événements    Mouse (> 1.0)

Cette fonction permet à un programme d'installer un gestionnaire d'événements, qui sera appelé lorsque interviendra un événement déterminé concernant la souris.

Entrée :

AX	= 000Ch

CX	= Evénements devant déclencher l'appel du gestionnaire d'événements (masque d'événements)

Bit	Signification

0	La souris a été déplacée

1	Bouton gauche de la souris appuyé

2	Bouton gauche de la souris relâché

3	Bouton droit de la souris appuyé

4	Bouton droit de la souris relâché

5	Bouton central de la souris appuyé

6	Bouton central de la souris relâché

7-15	Aucune signification

ES:DX	= Adresses de segment et d'offset du gestionnaire

Sortie :

Aucune

Remarques :

·	Le gestionnaire d'événements est appelé par le driver de la souris à travers une instruction assembleur FAR CALL et il doit donc de ce fait se terminer également par une instruction FAR RETurn. Comme pour un gestionnaire d'interruption, aucun des registres du processeur ne doit être restitué à l'utilisateur avec un contenu modifié.

·	Le driver de la souris fournit les informations suivantes au gestionnaire d'événements lorsqu'il est appelé :

AX = Masque d'événements.

Les différents bits correspondent aux différents événements tels qu'ils ont été indiqués dans le registre CX lors de l'installation du gestionnaire d'événements. D'autres bits peuvent également être fixés car cette valeur reflète l'état actuel du driver de la souris, sans se limiter aux événements sélectionnés.

BX = Etat des boutons de la Souris (à partir de 1.0)

Bit	Signification

0	Bouton gauche de la souris a été appuyé

1	Bouton droit de la souris a été appuyé

2	Bouton central de la souris a été appuyé

CX	= Position horizontale de la souris.

DX	= Position verticale de la souris.

SI	= Longueur du dernier déplacement horizontal de la souris.

DI	= Longueur du dernier déplacement vertical de la souris.

DS	= Segment de données du driver de la souris

·	Les ordonnées transmises dans les registres CX et DX ne se rapportent pas à l'écran physique mais aux positions en points écran dans l'écran virtuel de la souris.

·	Les distances spécifiées dans les registres SI et DI ne sont pas exprimées en points écran, mais en mickeys (1/200ème de pouce). Les valeurs transmises doivent être interprétées comme des nombres signés, les valeurs négatives indiquant un déplacement vers le haut ou la gauche de l'écran, alors que les valeurs positives indiquent un déplacement vers le bas ou la droite de l'écran.


Int 33h, Fct 0Dh    Activer l'émulation du crayon optique    Mouse (> 1.0)

Active l'émulation du crayon optique et simule ainsi un crayon optique inexistant.

Entrée :

AX	= 000Dh

Sortie :

Aucune

Remarques :

·	L'émulation d'un crayon optique n'est intéressante qu'en liaison avec des programmes soutenant le crayon optique ou fournissant des mécanismes de test du crayon optique. C'est le cas par exemple du BASIC IBM avec son instruction PEN.

·	Sous le mode d'émulation, la position de la souris est associée à la position du crayon optique et le fait d'actionner simultanément les boutons gauche et droit de la souris est interprété comme le fait d'appuyer sur le bouton du crayon optique.


Int 33h, Fct 0Eh    Désactiver l'émulation du crayon optique    Mouse (> 1.0)

Désactive à nouveau l'émulation du crayon optique qui avait été auparavant activée avec la fonction 0Dh.

Entrée :

AX	= 000Eh

Sortie :

Aucune


Int 33h, Fct 0Fh    Définir le rapport entre les mickeys et les points    Mouse (> 1.0)

Cette fonction définit le rapport entre les mickeys et les points, dont dépend la sensibilité de la souris du point de vue de l'utilisateur, c'est-à-dire la vitesse avec laquelle le curseur de la souris peut être déplacé sur l'écran.

Entrée :

AX	= 000Fh

CX	= Nombre de mickeys horizontaux représentant huit points

DX	= Nombre de mickeys verticaux représentant huit points

Sortie :

Aucune

Remarques :

·	Peuvent être spécifiées des valeurs comprises entre 1 et 32767.

·	Le réglage par défaut est de 8 mickeys horizontalement et de 16 mickeys verticalement, de sorte que le curseur de la souris se déplace deux fois plus "vite" horizontalement que verticalement.

·	Les valeurs par défaut peuvent être à nouveau fixées en appelant la fonction 00h (Réinitialisation du driver de la souris).


Int 33h, Fct 10h    Définir la zone d'exclusion    Mouse (> 1.0)

Cette fonction permet à un programme de définir une zone quelconque de l'écran comme zone d'exclusion (une sorte de trou noir), qui aura pour effet de faire disparaître le curseur de la souris de l'écran dès qu'il pénétrera dans cette zone.

Entrée :

AX	= 0010h

CX	= Ordonnée X du coin supérieur gauche de la zone d'exclusion

DX	= Ordonnée Y du coin supérieur gauche de la zone d'exclusion

SI	= Ordonnée X du coin inférieur droit de la zone d'exclusion

DI	= Ordonnée Y du coin inférieur droit de la zone d'exclusion

Sortie :

Aucune

Remarques :

·	Les ordonnées transmises dans les registres CX, DX, SI et DI ne se rapportent pas à l'écran physique mais aux positions en points écran dans l'écran virtuel de la souris.

·	La zone d'exclusion peut être à nouveau annulée en appelant la fonction 00h (réinitialisation du driver de souris) ou 01h (affichage du curseur de la souris).


Int 33h, Fct 11h    Non documentée    Mouse (> 1.0)

Cette fonction n'intervient qu'à l'intérieur du gestionnaire de la souris. Elle n'est pas documentée et ne peut pas être appelée par un programme utilisateur.


Int 33h, Fct 12h    Non documentée    Mouse (> 1.0)

Cette fonction n'intervient qu'à l'intérieur du gestionnaire de la souris. Elle n'est pas documentée et ne peut pas être appelée par un programme utilisateur.


Int 33h, Fct 13h    Définir le seuil pour le doublement de la vitesse de la souris        Mouse (> 1.0)

Si la vitesse de déplacement de la souris dépasse un seuil déterminé, le driver de la souris double le rapport entre les points et les mickeys, de façon à doubler la vitesse de la souris. Cette fonction permet de fixer le seuil au-delà duquel ce doublement intervient.

Entrée :

AX	= 0013h

DX	= Seuil en mickeys par seconde

Sortie :

Aucune

Remarques :

·	1 mickey équivaut à une longueur d'1/200 ou d'1/400 de pouce selon la souris.

·	Pour empêcher tout doublement de la vitesse de la souris, il suffit de fixer le seuil suffisamment haut. Des vitesses de 5000 mickeys par seconde ne peuvent, par exemple, déjà plus être atteintes en pratique.


Int 33h, Fct 14h    Echange des gestionnaires d'événements    Mouse (> 1.0)

Cette fonction permet à un programme d'installer un nouveau gestionnaire d'événements pour certains événements souris déterminés, tout en obtenant en même temps l'adresse de l'ancien gestionnaire d'événements.

Entrée :

AX	= 0014h

CX	= Evénements devant entraîner l'appel du gestionnaire d'événements

Bit	Signification

0	La souris a été déplacée

1	Bouton gauche de la souris appuyé

2	Bouton gauche de la souris relâché

3	Bouton droit de la souris appuyé

4	Bouton droit de la souris relâché

5	Bouton central de la souris appuyé

6	Bouton central de la souris relâché

7-15	Aucune signification

ES:DX = Adresses de segment et d'offset du gestionnaire

Sortie :

CX	= Masque d'événements du gestionnaire d'événements installé jusqu'ici

ES:DX	= Adresses de segment et d'offset du gestionnaire d'événements installé jusqu'ici

Remarques :

·	Les informations nécessaires sur l'appel du gestionnaire d'événements sont fournies dans la description de la fonction 0Ch (Installer le gestionnaire d'événements).


Int 33h, Fct 15h    Lire la taille du buffer d'état de la souris    Mouse (> 1.0)

Cette fonction fournit la taille du buffer d'état de la souris dans lequel un programme peut sauvegarder l'état complet du driver de la souris.

Entrée :

AX	= 0015h

Sortie :

BX	= Taille du buffer d'état de la souris en octets

Remarque :

·	L'état de la souris peut être sauvegardé à l'aide de la fonction 16h.


Int 33h, Fct 16h    Sauvegarder état de la souris    Mouse (> 1.0)

Lorsque cette fonction est appelée, le driver de la souris copie toutes les informations d'état gérées dans un buffer du programme d'appel.

Entrée :

AX	= 0016h

ES:DX	= Adresses de segment et d'offset du buffer

Sortie :

Aucune

Remarques :

·	Le programme d'appel doit veiller à ce que le buffer soit suffisamment grand pour recevoir toutes les informations d'état. Avant d'appeler cette fonction, il ferait donc bien de déterminer à l'aide de la fonction 15h la taille du buffer d'état de la souris.

·	L'appel de cette fonction peut par exemple être utile avant de faire exécuter un programme à l'aide de la fonction EXEC, pour que tous les paramètres de la souris puissent être à nouveau fixés sur leurs valeurs antérieures après exécution de ce programme, quelles que soient les modifications intervenues à l'intérieur du programme appelé.


Int 33h, Fct 17h    Restaurer l'état de la souris    Mouse (> 1.0)

Lit tous les paramètres de la souris dans un buffer dans lequel ils avaient été sauvegardés auparavant avec la fonction 16h.

Entrée :

AX	= 0017h

ES:DX	= Adresses de segment et d'offset du buffer d'état de la souris

Sortie :

Aucune


Int 33h, Fct 18h    Installer un gestionnaire d'événements alternatif    Mouse (> 1.0)

Cette fonction permet à un programme d'installer au maximum trois gestionnaires d'événements différents, qui devront être appelés par le driver de la souris lorsque interviendront certains événements liés à la souris et au clavier.

Entrée :

AX	= 0018h

CX	= Evénements devant entraîner l'appel du gestionnaire d'événements

Bit	Signification

0	La souris a été déplacée

1	Bouton gauche de la souris appuyé

2	Bouton gauche de la souris relâché

3	Bouton droit de la souris appuyé

4	Bouton droit de la souris relâché

5	Touche Shift actionnée pendant qu'un bouton de la souris était appuyé ou relâché

6	Touche Ctrl actionnée pendant qu'un bouton de la souris était appuyé ou relâché

7	Touche Alt actionnée pendant qu'un bouton de la souris était appuyé ou relâché

8-15	Aucune signification

ES:DX = Adresses de segment et d'offset du gestionnaire

Sortie :

AX	= 	0018h:	Le gestionnaire d'événements a été installé

FFFFh:	Le gestionnaire d'événements n'a pu être installé

Remarques :

·	Dans le masque d'événements du registre CX doit être fixé au moins l'un des bits 5 à 7 pour que l'événement soit combiné au fait d'actionner au moins une touche de contrôle. Si les touches de contrôle ne doivent pas être prises en compte, il est préférable d'utiliser les fonctions 0Ch ou 14h.

·	Une erreur peut se produire si trois gestionnaires d'événements alternatifs ont déjà été installés ou bien si un gestionnaire d'événements a déjà été enregistré avec la même masque d'événements.

·	Le gestionnaire d'événements est appelé par le driver de la souris à travers une instruction assembleur FAR CALL et il doit donc de ce fait se terminer également par une instruction FAR RET. Comme pour un gestionnaire d'interruption, aucun des registres du processeur ne doit être restitué à l'utilisateur avec un contenu modifié.

·	Le driver de la souris fournit les informations suivantes au gestionnaire d'événements lorsqu'il est appelé :

AX = Masque d'événements.

Les différents bits correspondent aux différents événements tels qu'ils ont été indiqués dans le registre CX lors de l'installation du gestionnaire d'événements. D'autres bits peuvent également être fixés car cette valeur reflète l'état actuel du driver de la souris, sans se limiter aux événements sélectionnés.

BX = Etat des boutons de la Souris (à partir de 1.0)

Bit	Signification

0	Bouton gauche de la souris a été appuyé

1	Bouton droit de la souris a été appuyé

2	Bouton central de la souris a été appuyé

CX = Position horizontale de la souris.

DX = Position verticale de la souris.

SI = Longueur du dernier déplacement horizontal de la souris.

DI = Longueur du dernier déplacement vertical de la souris.

DS = Segment de données du driver de la souris

·	Les ordonnées transmises dans les registres CX et DX ne se rapportent pas à l'écran physique mais aux positions en points écran dans l'écran virtuel de la souris.

·	Les distances spécifiées dans les registres SI et DI ne sont pas exprimées en points écran, mais en mickeys (1/200ème de pouce). Les valeurs transmises doivent être interprétées comme des nombres signés, les valeurs négatives indiquant un déplacement vers le haut ou la gauche de l'écran, alors que les valeurs positives indiquent un déplacement vers le bas ou la droite de l'écran.


Int 33h, Fct 19h    Lire l'adresse d'un gestionnaire d'événements alternatif        Mouse (> 1.0)

Renvoie au programme d'appel l'adresse d'un gestionnaire d'événements alternatif.

Entrée :

AX	= 0019h

CX	= Masque d'événements du gestionnaire d'événements appelé

Sortie :

AX =	0000h :	OK, dans ce cas :

CX =	Masque d'événements

Bit	Signification

0	La souris a été déplacée

1	Bouton gauche de la souris appuyé

2	Bouton gauche de la souris relâché

3	Bouton droit de la souris appuyé

4	Bouton droit de la souris relâché

5	Touche Shift actionnée pendant qu'un bouton de la souris était appuyé ou relâché

6	Touche Ctrl actionnée pendant qu'un bouton de la souris était appuyé ou relâché

7	Touche Alt actionnée pendant qu'un bouton de la souris était appuyé ou relâché

8-15	Aucune signification

ES:DX =	Adresses de segment et d'offset du gestionnaire

Remarques :

·	L'appel de fonction échoue si aucune gestionnaire d'événements alternatif n'a encore été installé avec le masque d'événements spécifié.


Int 33h, Fct 1Ah    Définir la sensibilité de la souris    Mouse (> 1.0)

Cette fonction est une combinaison des fonctions 0Fh et 13h, qui permettent respectivement de fixer le rapport entre déplacement de la souris et déplacement du curseur de la souris, d'une part, et de fixer le seuil de doublement de la vitesse de la souris, d'autre part.

Entrée :

AX	= 001Ah

BX	= Nombre de mickeys représentant huit points horizontalement

CX	= Nombre de mickeys représentant huit points verticalement

DX	= Seuil pour le doublement de la vitesse de la souris

Sortie :

Aucune

Remarques :

·	Pour les paramètres dans les registres CX et DX sont autorisées des valeurs comprises entre 1 et 32767.

·	Le réglage par défaut est de 8 mickeys horizontalement et de 16 mickeys verticalement, de sorte que le curseur de la souris se déplace deux fois plus "vite" horizontalement que verticalement.

·	Pour empêcher tout doublement de la vitesse de la souris, il suffit de fixer le seuil suffisamment haut. Des vitesses de 5000 mickeys par seconde ne peuvent, par exemple, déjà plus être atteintes en pratique.

·	Les valeurs par défaut peuvent être à nouveau fixées en appelant la fonction 00h (Réinitialisation du driver de la souris).


Int 33h, Fct 1Bh    Lire la sensibilité de la souris    Mouse (> 1.0)

Renvoie les paramètres qui ont été fixés à travers la fonction 1Ah ou à travers les fonctions 0Fh et 13h.

Entrée :

AX	= 001Bh

Sortie :

BX	= Nombre de mickeys représentant huit points horizontalement

CX	= Nombre de mickeys représentant huit points verticalement

DX	= Seuil pour le doublement de la vitesse de la souris


Int 33h, Fct 1Ch    Définir la fréquence d'Int de l'électronique de la souris        Mouse (> 1.0)

Détermine à quelle fréquence l'électronique de la souris lit la position actuelle de la souris et l'état des boutons de la souris pour les retransmettre au driver de la souris.

Entrée :

AX	= 001C

BX	= Fréquence d'interruption

Bit	Signification

0	Pas d'interruptions

1	30 interruptions par seconde

2	50 interruptions par seconde

3	100 interruptions par seconde

4	200 interruptions par seconde

5-15	Aucune signification (0)

Sortie :

Aucune

Remarques :

·	Cette fonction n'est disponible que pour la souris InPort.

·	Si plus d'un bit est fixé dans le registre BX, c'est le bit fixé de plus faible poids qui compte.

·	La précision de la souris est proportionnelle à la fréquence des interruptions, mais la vitesse du programme de premier plan est au contraire inversement proportionnelle à cette fréquence, puisqu'il est interrompu plus souvent par le driver de souris


Int 33h, Fct 1Dh    Définir une page écran pour le curseur de la souris        Mouse (> 1.0)

Fixe la page écran dans laquelle le driver de la souris doit afficher le curseur de la souris.

Entrée :

AX	= 001Dh

BX	= Numéro de la page écran

Sortie :

Aucune

Remarques :

·	La valeur par défaut est la page écran 0.

·	L'appel de cette fonction ne présente naturellement d'intérêt que si votre programme travaille avec plusieurs pages écran, telles qu'elles sont offertes par les cartes CGA, EGA et VGA.


Int 33h, Fct 1Eh    Lire page écran du curseur de la souris    Mouse (> 1.0)

Détermine la page écran dans laquelle le curseur de la souris est représenté par le driver de la souris.

Entrée :

AX	= 001Eh

Sortie :

BX	= Numéro de la page écran


Int 33h, Fct 1Fh    Désactiver le driver de la souris    Mouse (> 1.0)

Désactive le driver actuel de la souris et fournit l'adresse du gestionnaire d'interruption précédent pour l'interruption 33h.

Entrée :

AX	= 001Fh

Sortie :

AX 	= 	FFFFh : Erreur

001Fh : Tout va bien, auquel cas

ES:BX = Adresses de segment et d'offset du driver de souris antérieur

Remarques :

·	Lorsque cette fonction est appelée, le driver de souris libère à nouveau toutes les routines d'interruption qu'ils avaient installées lors de son activation. Seul fait exception le gestionnaire de l'interruption 33h, mais le programme d'appel peut charger à nouveau sa valeur d'origine dans ce vecteur d'interruption également, car son adresse est renvoyée dans la paire de registres ES:BX.


Int 33h, Fct 20h    Activer le driver de la souris    Mouse (> 1.0)

Active un driver de souris désactivé auparavant avec la fonction 1Fh.

Entrée :

AX	= 0020h

Sortie :

Aucune


Int 33h, Fct 21h    Réinitialiser le driver de la souris    Mouse (> 1.0)

Cette fonction effectue une réinitialisation du driver de la souris, en cachant le curseur de la souris et en désactivant les gestionnaires d'événements déjà installés.

Entrée :

AX	= 0021h

Sortie :

AX	= 	FFFFh : Erreur

0021h :Tout va bien, dans ce cas :

BX = nombre de boutons

Remarque :

·	Cette fonction, contrairement à la fonction 00h ne réinitialise pas le hardware de la souris.


Int 33h, Fct 22h    Définir la langue étrangère pour les messages    Mouse (> 1.0)

La version internationale du driver de la souris reconnaît plusieurs langues étrangères et peut retourner les messages dans ces langues. Cette fonction détermine la langue étrangère souhaitée.

Entrée :

AX 	= 0022h

BX 	= Numéro de code de la langue étrangère (voir plus bas)

Sortie :

aucune

Remarques :

·	Les codes suivants sont utilisés pour désigner les langues étrangères :

0	Anglais

1	Français

2	Néerlandais

3	Allemand

4	Suédois

5	Finlandais

6	Espagnol

7	Portugais

8	Italien

·	Vu que cette fonction ne retourne pas un état d'erreur, il n'est pas toujours possible de déterminer si une version internationale du driver de la souris existe réellement et de définir l'option souhaitée. La fonction 23h permet cependant de contrôler facilement cet aspect.


Int 33h, Fct 23h    Vérifier l'existence d'une langue étrangère pour les messages        Mouse (> 1.0)

La version internationale du driver de la souris reconnaît plusieurs langues étrangères et peut retourner les messages dans ces langues. Cette fonction retourne le numéro de code de la langue étrangère actuellement définie.

Entrée :

AX 	= 0023h

Sortie :

BX 	= Numéro de code de la langue étrangère choisie

Remarques :

·	Les codes suivants sont utilisés pour désigner les langues étrangères :

0	Anglais

1	Français

2	Néerlandais

3	Allemand

4	Suédois

5	Finlandais

6	Espagnol

7	Portugais

8	Italien

·	Si vous n'êtes pas en présence d'une version internationale du driver de la souris, la fonction retourne la valeur 0.


Int 33h, Fct 24h    Lire le type de souris    Mouse (> 1.0)

Fournit le type de souris ainsi que son numéro de version.

Entrée :

AX	=	0024h

Sortie :

BH	=	Partie entière du numéro de version

BL	=	Partie décimale du numéro de version

CH	=	Type de souris

1 = Souris bus

2 = Souris série

3 = Souris InPort

4 = Souris PS/2

5 = Souris HP

CL	=	Numéro IRQ

0 = PS/2

2, 3, 4, 5 ou 7 = Numéro PC

Remarque :

·	Un driver de souris de version 6.24 aura 6 dans le registre BH et 24h dans le registre BL.


Int 33h, Fct 25h    Lire des informations générales    Mouse (> 6.26)

Cette fonction retourne des informations générales sur le driver de souris, par exemple le type du driver et l'état du curseur de la souris.

Entrée :

AX 	= 0025h

Sortie :

AX 	= Informations générales (voir plus bas)

BX,CX,	DX = Informations d'état concernant OS/2 uniquement

Remarques :

·	Les informations générales sont transmises dans les divers tableaux de bits du registre AX. Il reproduit les informations suivantes :

Bit 15 : Type du driver

0b 	= Le driver se trouve dans un fichier COM

1b 	= Le driver est sauvegardé en tant qu'un driver de périphérique. Il a été inséré par un fichier CONFIG.SYS.

Bits 12 & 13 : Informations sur le curseur de la souris

00b 	= Affichage d'un curseur texte logiciel

01b 	= Affichage d'un curseur texte électronique

10b, 11b 	= Affichage d'un curseur graphique

Bits 8 à 11 : Valeur binaire représentant la fréquence d'interruption de l'électronique de la souris

·	Les arguments obtenus dans les registres BX, CX et DX ne sont retournés que par un driver de souris sous OS/2. Ils ne jouent aucun rôle dans la programmation DOS.


Int 33h, Fct 26h    Lire l'extension de l'écran de souris virtuel    Mouse (> 6.26)

Cette fonction retourne l'extension absolue de l'écran de souris virtuel et indique si le driver de souris est actuellement activé ou désactivé.

Entrée :

AX 	= 0026h

Sortie :

BX 	= Etat du driver de souris

CX 	= Ordonnée X maximale

DX 	= Ordonnée Y maximale

Remarques :

·	En ce qui concerne l'état du driver de souris, 0 représente l'état désactivé et les autres valeurs l'état activé. Cet état peut être modifié à l'aide des fonctions 1Fh et 20h.

·	Les valeurs retournées dans les registres CX et DX concernent la taille absolue de l'écran de souris virtuel et non les valeurs spécifiées à l'aide des fonctions 07h et 08h. Elles peuvent être obtenues au moyen de la fonction 31h.


Int 33h, Fct 27h    Lire les masques de bits du curseur d'écran    Mouse (> 7.01)

Cette fonction permet de prendre connaissance des masques de bits en cours pour la création du curseur logiciel ou pour la ligne de départ et la ligne finale du curseur électronique. En outre, cette fonction donne des informations sur le déplacement de la souris depuis sa dernière utilisation.

Entrée :

AX 	= 0027h

Sortie :

AX 	= Masque AND du curseur logiciel ou ligne de départ du curseur électronique

BX 	=  Masque XOR du curseur logiciel ou ligne finale du curseur électronique

CX 	= Longueur du déplacement horizontal en mickeys

DX 	=  Longueur du déplacement vertical en mickeys

Remarques :

·	Si un curseur électronique se trouve activé au moment de l'appel de la fonction, celle-ci retourne la ligne de départ et la ligne finale (en lignes Scan). Au contraire, si le curseur logiciel est actif, la fonction retourne les masques de bits en cours.

·	Bien que cette fonction soit reconnue depuis la version 7.01 du driver de souris, les informations concernant les lignes de départ et finales du curseur électronique ne sont transmises qu'à partir de la version 7.02. Cela élimine un risque d'erreur dans la version 7.01 qui ne fonctionne librement qu'avec le curseur logiciel.

·	Les distances de déplacement retournées dans les registres CX et DX ne sont pas modifiées à cause des différents paramètres logiciels tels que le seuil du doublement de la vitesse de la souris ou la table d'accélération. Elles représentent donc les valeurs transmises directement au driver de souris par le hard.


Int 33h, Fct 28h    Définir le mode vidéo    Mouse (> 7.0)

Cette fonction permet de spécifier un mode vidéo à condition qu'il soit reconnu par l'équipement vidéo en cours.

Entrée :

AX 	= 0028h

CX 	= Numéro de code du mode vidéo

DX 	= Taille de la fonte écran

Sortie :

CX 	= Etat de la fonction

Remarques :

·	La liste des modes vidéo disponibles et leurs numéros de code peut être obtenue par la fonction 29h.

·	La valeur 0 est retournée dans le registre CX si le mode vidéo spécifié est reconnu par le matériel en cours. Dans ce cas, il peut être défini sinon le numéro de code est renvoyé par le registre AX.

·	Certains modes vidéo utilisant les polices à tailles variables attendent le paramètre d'appel en DX. La taille de la police le long de l'axe X doit alors être codifiée dans l'octet de poids fort de DX et l'étirement le long de l'axe Y dans l'octet de poids faible.


Int 33h, Fct 29h    Lire la liste des modes vidéo disponibles    Mouse (> 7.0)

Cette fonction permet à un programme utilisateur de demander la liste des modes vidéo reconnus par le matériel vidéo en cours.

Entrée :

AX 	= 0029h

CX 	= Demander le premier mode vidéo ou le suivant

Sortie :

BX 	= Adresse de segment d'une chaîne

CX 	= Numéro de code du mode vidéo

DX 	= Adresse d'offset d'une chaîne

Remarques :

·	Pour demander la liste complète des modes vidéo disponibles, il convient d'exécuter un appel multiple. Lors du premier appel, la fonction doit retourner la valeur 0 pour le paramètre de CX et une valeur différente de 0 lors des appels suivants.

Chaque appel décrit un mode vidéo différent jusqu'à ce que la valeur 0 obtenue dans le registre CX indique que tous les modes vidéo ont été sollicités.

·	Outre le numéro de code du mode vidéo, cette fonction ne fournit pas toujours le type du mode vidéo (texte ou graphique), sa résolution et le nombre de couleurs à afficher. Généralement, cette information figure dans une chaîne ASCII dont l'adresse est retournée dans la paire des registres BX:DX.

Dans la mesure où une telle chaîne est disponible et les deux registres cités ne contiennent pas la valeur 0, elle se termine par un caractère dollar et un octet nul.


Int 33h, Fct 2Ah    Obtenir des informations sur le curseur de la souris        Mouse (> 7.02)

Cette fonction retourne diverses informations concernant le curseur et l'électronique de la souris.

Entrée :

AX 	= 002Ah

Sortie :

AX 	= Compteur de curseur interne

BX 	= Ordonnée X du Hot-Spot

CX 	= Ordonnée Y du Hot-Spot

DX 	= Type de souris

Remarques :

·	Le compteur de souris interne indique si le curseur est actuellement visible ou non. Vous pouvez agir indirectement sur lui en appelant les fonctions 01h et 02h. La valeur 0 signale alors que le curseur de souris est pour l'instant invisible. Toute autre valeur indique que le curseur de souris se trouve sur l'écran.

·	En ce qui concerne le curseur graphique, le Hot-Spot reproduit le point à l'intérieur du masque de bits du curseur retourné à la suite d'une demande de sa position. Pour exprimer sa suppression du coin supérieur gauche du masque de bits, une valeur positive signée comprise entre -128 et 127 est retournée dans les registres BX ou CX.

·	Dans le registre DX, la fonction retourne un code de type selon la table suivante :

0 	= pas de souris

1 	= souris bus

2 	= souris série

3 	= souris InPort

4 	= souris PS/2

5 	= souris HP


Int 33h, Fct 2Bh    Lire les courbes d'accélération    Mouse (> 7.0)

Les quatre courbes d'accélération gérées par le driver de souris sur le plan interne peuvent être chargées à l'aide de cette fonction. L'une d'entre elles peut être sélectionnée comme la courbe en cours.

Entrée :

AX = 002Bh

BX = Numéro de la courbe d'accélération à activer

ES = Adresse de segment des données-clé

SI = Adresse d'offset des données-clé

Sortie :

AX 	= FFFFh : Erreur

= 0021h : Tout va bien, dans ce cas

BX = Nombre d'appuis sur la souris

Remarques :

·	Cette fonction permet de commuter entre les courbes d'accélération prédéfinies dans le driver, la valeur -1 représentant le numéro de la courbe en cours. Il n'est pas indispensable de transmettre un buffer avec les données-clé des courbes d'accélération.

·	Les quatre courbes d'accélération sont décrites à l'aide d'une structure de données définie dans la mémoire par le programme d'appel. Elle doit être transmise au moyen du registre ES:SI.


Int 33h, Fct 2Ch    Lire la courbe d'accélération en cours    Mouse (> 7.0)

Cette fonction sert à lire la courbe d'accélération en cours.

Entrée :

AX = 002Ch

Sortie :

AX 	= Etat de la fonction

BX 	= Numéro de la courbe d'accélération en cours (0 à 3)

ES 	= Adresse de segment du buffer

SI 	= Adresse d'offset du buffer

Remarques :

·	Après appel de cette fonction, il faut obligatoirement demander l'état de la fonction dans le registre AX. La courbe d'accélération ne peut être lue que lorsque la valeur 0 a été retournée dans le registre.

·	Après appel de la fonction, le contenu des registres ES:SI indique le buffer renfermant les données-clé de la courbe d'accélération en cours. La structure de ces données correspond au format identique à celui attendu lors de la définition d'une courbe d'accélération à l'aide de la fonction 2Bh.


Int 33h, Fct 2Dh    Définir/Lire la courbe d'accélération en cours    Mouse (> 7.0)

Cette fonction a pour rôle d'activer l'une des quatre courbes d'accélération ou de renvoyer la courbe en cours.

Entrée :

AX 	= 002Dh

BX 	= -1 : Retourner la courbe d'accélération en cours

= 1 - 4 : Activer cette courbe

Sortie :

AX 	= Etat de la fonction

BX 	= Numéro de la courbe d'accélération en cours (1-4)

ES 	= Adresse de segment du buffer avec le nom de la courbe d'accélération

SI 	= Adresse d'offset du buffer avec le nom de la courbe d'accélération

Remarques :

·	Si la valeur -1 est transmise dans le registre BX lors de l'appel de la fonction, celle-ci retourne alors des informations sur la courbe d'accélération en cours dans les registres BX, ES et SI. En revanche, si l'une des quatre courbes d'accélération est activée lors de l'appel, une valeur comprise entre 1 et 4 doit être chargée dans le registre BX avant l'appel de la fonction. Dans ce cas, seul l'état de la fonction est retourné en BX en guise de résultat.

·	Après appel de la fonction, l'état contient la valeur 0 si la fonction s'est exécutée correctement, sinon une valeur quelconque.

·	Lorsqu'une demande est formulée pour connaître la courbe d'accélération en cours, les registres ES:SI indiquent la chaîne ainsi que les autres données-clé concernant la courbe qui ont été définies lors de l'appel de la fonction 2Bh. La chaîne comprend 16 octets et ne se termine pas par un caractère spécial ($ ou octet nul). L'évaluation de cette chaîne permet de connaître le nom symbolique de la courbe d'accélération.


Int 33h, Fct 2Eh    Non documentée    Mouse (> 6.26)

Cette fonction n'intervient qu'à l'intérieur du driver de souris. Elle n'est pas documentée et ne peut donc pas être appelée par un programme utilisateur.


Int 33h, Fct 2Fh    Réinitialisation de l'électronique de la souris    Mouse (> 7.02)

Cette fonction réinitialise l'électronique de la souris sans agir sur les paramètres logiciels tels que le masque de bits du curseur de la souris, le seuil du doublement de la vitesse de la souris ou les courbes d'accélération.

Entrée :

AX 	= 002Fh

Sortie :

AX 	= 	FFFFh : Tout va bien

0 = Erreur

Remarques :

·	Cette fonction représente le contraire de la fonction 21h qui ne réinitialise que les paramètres logiciels.


Int 33h, Fct 30h    Définir/Obtenir les paramètres de la souris Ballpoint        Mouse (> 7.04)

Cette fonction est conçue spécialement pour les besoins de la souris Ballpoint. Elle permet de définir ou lire les paramètres spécifiques à cette souris. Il s'agit notamment de connaître l'orientation de la souris Ballpoint et les trois boutons considérés comme activés parmi les quatre qui sont disponibles.

Entrée :

AX 	= 0030h

BX 	= Angle de rotation

CX 	= Code de commande

Sortie :

AX 	= Etat de la fonction

BX 	= Angle de rotation

CX 	= Boutons activés

Remarques :

·	Après appel de la fonction, il faut obligatoirement vérifier l'état dans le registre AX. La valeur -1 indique en effet qu'aucune souris Ballpoint n'est installée. Toute autre valeur signale en revanche l'existence d'une souris Ballpoint et reproduit l'état des divers boutons de la souris. Les différents boutons sont représentés par les bits suivants à l'intérieur du registre AX :

Bit 2 = Bouton 4

Bit 3 = Bouton 2

Bit 4 = Bouton 3

Bit 5 = Bouton 1

Les autres bits contiennent la valeur 0.

·	Si cette fonction est utilisée pour demander l'angle de rotation en cours et les boutons activés, il faut préalablement charger le registre CX avec la valeur 0 avant l'appel. Un angle de rotation en BX ne s'avère alors pas indispensable.

Comme résultat de la fonction, on obtient l'angle de rotation en BX avec une valeur comprise entre 0 et 360 (degrés). En outre, les deux boutons activés peuvent être lus dans l'octet de poids fort de CX alors que les boutons désactivés sont codifiés dans l'octet de poids faible de ce registre. A l'intérieur des deux octets, les bits suivants sont disponibles pour les différents boutons :

Bit 2 = Bouton 4

Bit 3 = Bouton 2

Bit 4 = Bouton 3

Bit 5 = Bouton 1

Les autres bits contiennent la valeur 0.

·	Si l'angle de rotation actuel de la souris Ballpoint est communiqué au driver de souris à l'aide de cette fonction et les deux boutons activés sont sélectionnés, les boutons activés et désactivés sont alors à codifier en CX. La codification s'effectue selon le même principe que le renvoi des boutons activés ou désactivés à la suite d'un appel (voir plus haut). Comme angle de rotation, la fonction attend une valeur comprise entre 0 et 360 en BX.


Int 33h, Fct 31h    Lire l'étirement de l'écran virtuel    Mouse (> 7.05)

Cette fonction offre à un programme la possibilité de demander l'étirement de l'écran de souris virtuel dans le mode vidéo actuel.

Entrée :

AX 	= 0031h

Sortie :

AX 	= Ordonnée X minimale

BX 	= Ordonnée Y minimale

CX 	= Ordonnée X maximale

DX 	= Ordonnée Y maximale

Remarques :

·	La taille de l'écran de souris virtuel peut également être modifiée par les fonctions 07h et 08h qui réduisent le champ de déplacement du curseur.


Int 33h, Fct 32h    Lire les Fcts disponibles    Mouse (> 7.05)

Cette fonction permet tout simplement de connaître toutes les fonctions reconnues depuis la fonction 25h.

Entrée :

AX 	= 0032h

Sortie :

AX 	= Fonctions reconnues

Remarques :

·	Le résultat de la fonction retourné en AX doit être considéré comme un tableau de bits où chaque bit représente une fonction. S'il est réglé, cela signifie que la fonction est reconnue.

Le bit 15 représente la fonction 25h, le bit 14 la fonction 26h, le bit 13 la fonction 27h, etc.

Bit 15 = Fonction 25h

Bit 45 = Fonction 26h

Bit 13 = Fonction 27h

Bit 12 = Fonction 28h

Bit 11 = Fonction 29h

Bit 10 = Fonction 2Ah

Bit 9 = Fonction 2Bh

Bit 8 = Fonction 2Ch

Bit 7 = Fonction 2Dh

Bit 6 = Fonction 2Eh

Bit 5 = Fonction 2Fh

Bit 4 = Fonction 30h

Bit 3 = Fonction 31h

Bit 1 = Fonction 32h

Bit 0 = Fonction 33h


Int 33h, Fct 33h    Définir les paramètres    Mouse (> 7.05)

Tous les paramètres spécifiés par le logiciel ou le matériel à l'intérieur du driver de souris peuvent être lus dans un buffer à l'aide de cette fonction. La structure de ce buffer n'étant pas encore documentée avec précision, l'utilisation de cette fonction semble peu intéressante.

Entrée :

AX 	= 0033h

CX 	= Taille du buffer

ES 	= Adresse de segment du buffer

DX 	= Adresse d'offset du buffer

Sortie :

AX 	= 0

CX 	= Nombre d'octets dans le buffer

ES 	= Adresse de segment du buffer

DX 	= Adresse d'offset du buffer


Int 33h, Fct 34h    Lire l'état du fichier MOUSE.INI    Mouse (> 8.0)

Cette fonction est conçue pour la programmation de la souris sous Windows. Elle retourne la désignation exacte du chemin du fichier d'initialisation MOUSE.INI sous la forme d'une chaîne ASCII dans un buffer.

Entrée :

AX 	= 0034h

Sortie :

AX 	= 0

ES 	= Adresse de segment du buffer

DX 	= Adresse d'offset du buffer

Remarques :

·	La chaîne retournée se termine par un octet nul.

·	La désignation de chemin du fichier MOUSE.INI provient de la variable d'environnement MOUSE. Si cette variable n'est pas définie, MOUSE.INI est recherché dans le répertoire du driver de souris et la fonction retourne une chaîne correspondante.


Interruption 67h

Fonction 40h	Lire l'état de l'EMM

Fonction 41h	Lire l'adresse de segment du cadre de page

Fonction 42h	Lire le nombre de pages EMS

Fonction 43h	Allouer la mémoire EMS

Fonction 44h	Définir le mapping

Fonction 45h	Libérer les pages EMS

Fonction 46h	Lire la version EMM

Fonction 47h	Enregistrer le mapping

Fonction 48h	Rétablir le mapping

Fonction 49h	Non documentée

Fonction 4Ah	Non documentée

Fonction 4Bh	Lire le nombre de handles

Fonction 4Ch	Déterminer le nombre de pages allouées

Fonction 4Dh	Lire tous les handles

Fonction 4Eh, Sous-Fct 00h	Enregistrer la table des pages

Fonction 4Eh, Sous-Fct 01h	Rétablir la table des pages

Fonction 4Eh, Sous-Fct 02h	Enregistrer et rétablir simultanément la table des pages

Fonction 4Eh, Sous-Fct 03h	Lire la taille de la table des pages

Fonction 4Fh, Sous-Fct 00h	Enregistrer une partie de la table des pages

Fonction 4Fh, Sous-Fct 01h	Rétablir une table des pages enregistrée partiellement

Fonction 4Fh, Sous-Fct 02h	Lire la taille du buffer pour une table des pages partielle

Fonction 50h, Sous-Fct 00h	Construire des pages logiques sur des pages physiques par num

Fonction 50h, Sous-Fct 01h	Construire des pages logiques sur des pages physiques par adresse

Fonction 51h	Modifier le nombre de pages logiques allouées

Fonction 52h, Sous-Fct 00h	Lire l'attribut d'un handle

Fonction 52h, Sous-Fct 01h	Définir l'attribut d'un handle

Fonction 52h, Sous-Fct 02h	Vérifier les pages EMS non volatiles

Fonction 53h, Sous-Fct 00h	Lire le nom d'un handle

Fonction 53h, Sous-Fct 01h	Définir le nom d'un handle

Fonction 54h, Sous-Fct 00h	Lire les noms de tous les handles

Fonction 54h, Sous-Fct 01h	Lire un handle avec un nom précis

Fonction 55h, Sous-Fct 00h	Construire des pages et sauter vers la mémoire étendue

Fonction 55h, Sous-Fct 01h	Afficher pages et sauter vers la mémoire étendue

Fonction 56h, Sous-Fct 00h	Afficher pages et appeler routine en mémoire étendue

Fonction 56h, sous-Fct 01h	Afficher des pages et appeler une routine de la mémoire étendue

Fonction 56h, sous-Fct 02h	Lire la mémoire nécessaire

Fonction 57h, sous-Fct 00h	Copier un bloc de mémoire

Fonction 57h, sous-Fct 01h	Echanger des blocs de mémoire

Fonction 58h, sous-Fct 00h	Renvoie les adresses des pages EMS physiques et leurs num

Fonction 58h, sous-Fct 01h	Renvoie le nombre de pages EMS

Fonction 59h, sous-Fct 00h	Renvoie des informations sur le matériel EMS

Fonction 59h, sous-Fct 01h	Renvoie le nombre de pages EMS non standardisées

Fonction 5Ah, sous-Fct 00h	Alloue des pages EMS

Fonction 5Ah, sous-Fct 01h	Alloue des pages EMS non standardisées

Fonction 5Bh	Utile dans les transferts DMA

Fonction 5Ch	Prépare l'EMS à un redémarrage à chaud

Fonction 5Dh	Utile pour inactiver le système d'exploitation


Int 67h, Fct 40h    Lire l'état de l'EMM    LIM/EMS (> 3.0)

Cette fonction détermine l'état (d'erreur) de l'EMM (Expanded Memory Manager), tel qu'il est également renvoyé après appel de toutes les autres fonctions EMS.

Entrée :

AH	= 40h

Sortie :

AH	= état de l'EMM

00h : 	tout va bien

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	Il est conseillé d'appeler cette fonction avant de commencer à travailler avec la mémoire EMS car cela permet de constater facilement si le matériel et le logiciel correspondants fonctionnent sans problème.


Int 67h, Fct 41h    Lire l'adresse de segment du cadre de page        LIM/EMS (> 3.0)

Cette fonction détermine l'adresse de segment du Page Frame.

Entrée :

AH	= 41h

Sortie :

AH	= 0, o.k, auquel cas :

BX = adresse de segment du cadre de page

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	L'adresse renvoyée ainsi que la fonction 58h/01h (Déterminer le nombre de pages EMS physiques, à partir de 4.0) permettent de calculer les adresses des autres pages physiques, la première page commençant à l'adresse PAGE FRAME:0000. Les autres pages suivent ensuite à intervalles de 16 Ko. Si le numéro de version de l'EMM est inférieur à 4.0, le nombre des pages physiques EMS est alors toujours de 4.


Int 67h, Fct 42h    Lire le nombre de pages EMS    LIM/EMS (> 3.0)

Cette fonction indique au programme d'appel combien de pages EMS (de 16 Ko chacune) sont installées et combien sont encore libres, c'est-à-dire combien n'ont pas encore été allouées.

Entrée :

AH	= 42h

Sortie :

AH	= 0, o.k, auquel cas :

BX = Nombre de pages libres (non encore allouées)

DX = Nombre total de pages EMS

AH	> 0, erreur:

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	Pour calculer la taille en Ko de la mémoire EMS libre, on multiplie le nombre de pages libres par 16.


Int 67h, Fct 43h    Allouer la mémoire EMS    LIM/EMS (> 3.0)

Cette fonction permet à un programme de se faire allouer un certain nombre de pages (de 16 Ko) pour ses opérations.

Entrée :

AH	= 43h

BX	= Nombre de pages logiques à allouer (de 16 Ko)

Sortie :

AH	= 0, o.k, auquel cas :

DX = Handle pour l'accès à la mémoire allouée

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	Le handle renvoyé servira ensuite à accéder à, puis à libérer la mémoire allouée. Il doit donc être mémorisé par l'utilisateur. Si ce handle est "perdu" après appel de la fonction, le programme d'appel n'aura plus aucune possibilité de se le faire communiquer à nouveau, de sorte que la mémoire allouée ne pourra plus être libérée pour être à nouveau rendue accessible à d'autres programmes.

·	L'appel de cette fonction peut échouer si le nombre de pages réclamées est supérieur au nombre de pages libres ou bien si, bien qu'il reste encore suffisamment de pages, cette fonction a été appelée tellement souvent que l'EMM ne peut plus fournir d'autre handle.

·	Les handles portent normalement les numéros FF00h, FE01h, FD02h, FC03h etc.


Int 67h, Fct 44h    Définir le mapping    LIM/EMS (> 3.0)

Cette fonction permet de placer l'une des pages précédemment allouées à l'aide de la fonction 4h dans l'une des 4 pages physiques du cadre de page.

Entrée :

AH	= 44h

AL	= Numéro de page physique (0 à 3)

BX	= Numéro de page logique

DX	= Handle

Sortie :

AH	= Etat d'erreur

00h :	tout va bien

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	Le handle à spécifier lors de l'appel de cette fonction doit avoir été obtenu à la suite d'un appel antérieur de la fonction 43h de l'EMM.

·	Les pages logiques sont numérotées à partir de 0, de sorte que la valeur 0 doit être spécifiée pour accéder à la première page allouée. La plus grande valeur autorisée est donc égale au nombre de pages allouées moins 1.

·	Pour pouvoir accéder à la page physique, il faut connaître l'adresse de segment du cadre de page, qui peut être obtenue à l'aide de la fonction 41h.


Int 67h, Fct 45h    Libérer les pages EMS    LIM/EMS (> 3.0)

Cette fonction permet de restituer à l'EMM et de rendre ainsi accessibles à d'autres programmes les pages précédemment allouées à l'aide de la fonction 43h.

Entrée :

AH	= 45h

DX	= Handle

Sortie :

AH	= Etat d'erreur

00h : tout va bien

AH > 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	Le handle à spécifier lors de l'appel de cette fonction doit avoir été obtenu à la suite d'un appel antérieur de la fonction 4 de l'EMM.

·	L'appel de cette fonction libère toutes les pages allouées à travers ce handle. Il n'est pas possible de sélectionner les pages à libérer. Cependant, la fonction 51h (Modifier le nombre de pages logiques allouées, à partir de 4.0) permet d'ajouter ou de retirer une ou plusieurs pages parmi les pages déjà allouées.

·	Après un appel réussi de cette fonction, le handle spécifié n'est plus valable et ne peut donc plus être employé pour accéder à la mémoire EMS.

·	Si la fonction revient avec un message d'erreur, il convient de répéter au moins trois fois l'appel de cette fonction car sinon les pages qui n'ont pu être libérées resteraient allouées une fois le programme terminé et ne pourraient donc être remises à la disposition d'autres programmes.


Int 67h, Fct 46h    Lire la version EMM    LIM/EMS (> 3.0)

Cette fonction permet d'obtenir le numéro de version de l'EMM (Expanded Memory Manager).

Entrée :

AH	= 46h

Sortie :

AH	= 0, o.k, auquel cas :

AL	= numéro de version EMM

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	Le numéro de version EMM figure dans le registre AL sous forme d'un nombre BCD, le numéro de version principale (le chiffre avant le point) étant placé dans les 4 bits de plus fort poids et le numéro de sous-version (le chiffre après le point) étant placé dans les 4 bits de plus faible poids.


Int 67h, Fct 47h    Enregistrer le mapping    LIM/EMS (> 3.0)

En appelant cette fonction, vous faites sauvegarder la concordance actuelle entre les quatre pages physiques du Page Frame et les pages logiques qui leur ont été attribuées.

Entrée :

AH	= 47h

DX	= Handle

Sortie :

AH	= Etat d'erreur

00h : tout va bien

 AH > 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	Le handle à spécifier lors de l'appel de cette fonction doit avoir été obtenu à la suite d'un appel antérieur de la fonction 43h de l'EMM.

·	Cette fonction est conçue pour être appelée par des programmes résidents ou le système d'exploitation dans le cadre d'un environnement multitâche mais elle peut aussi être utilisée par n'importe quel autre programme.


Int 67h, Fct 48h    Rétablir le mapping    LIM/EMS (> 3.0)

Cette fonction rétablit la concordance entre pages logiques et physiques (Mapping) qui avait été précédemment sauvegardée à l'aide de la fonction 47h.

Entrée :

AH	= 48h

DX	= Handle

Sortie :

AH	= Etat d'erreur

00h : tout va bien

AH > 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	Le handle à spécifier lors de l'appel de cette fonction doit avoir été obtenu à la suite d'un appel antérieur de la fonction 42h de l'EMM.

·	Cet appel est toujours infructueux lorsque le Mapping correspondant au handle spécifié n'a pas encore été sauvegardé à l'aide de la fonction 47h ou bien s'il avait déjà été rétabli au cours d'un appel antérieur de la fonction 48h.

·	Cette fonction est conçue pour être appelée par des programmes résidents ou le système d'exploitation dans le cadre d'un environnement multitâche mais elle peut aussi être utilisée par n'importe quel autre programme.


Int 67h, Fct 49h    Non documentée    LIM/EMS (> 3.0)

Le rôle et les effets de cette fonction ne sont pas connus. Elle ne s'utilise que sur le plan interne dans l'EMM.


Int 67h, Fct 4Ah    Non documentée    LIM/EMS (> 3.0)

Le rôle et les effets de cette fonction ne sont pas connus. Elle ne s'utilise que sur le plan interne dans l'EMM.


Int 67h, Fct 4Bh    Lire le nombre de handles    LIM/EMS (> 3.0)

Cette fonction permet de connaître le nombre de zones de mémoire ayant été actuellement allouées à l'aide de la fonction 4h, autrement dit le nombre de handles attribués.

Entrée :

AH	= 4Bh

Sortie :

AH	= 0, o.k, auquel cas :

BX	= nombre de handles attribués

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	Le nombre de handles attribués n'est pas nécessairement identique au nombre de programmes accédant actuellement à la mémoire EMS car un programme peut réclamer à l'aide de la fonction 43h autant de blocs de mémoire EMS et donc autant de handles qu'il le souhaite.


Int 67h, Fct 4Ch    Déterminer le nombre de pages allouées    LIM/EMS (> 3.0)

Cette fonction indique au programme d'appel combien de pages ont été allouées au handle spécifié.

Entrée :

AH	= 4Ch

DX	= Handle

Sortie :

AH	= 0, o.k, auquel cas :

BX 	= Nombre de pages logiques allouées

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	Le nombre de pages allouées renvoyées doit être compris entre 1 et 512.


Int 67h, Fct 4Dh    Lire tous les handles    LIM/EMS (> 3.0)

Cette fonction permet de charger dans un tableau tous les handles activés ainsi que le nombre de pages respectivement allouées à chacun.

Entrée :

AH	= 4Dh

ES:DI = Pointeur sur le tableau

Sortie :

AH	= 0, o.k, auquel cas :

BX	= Nombre de pages logiques allouées

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	Si la fonction est exécutée avec succès, la zone de mémoire dont l'adresse avait été transmise dans la paire de registres ES:DI contient deux mots pour chaque handle activé. Le premier mot représente le handle, le mot suivant le nombre de pages allouées à ce handle. Le nombre d'entrées de ce tableau figure après appel de la fonction dans le registre BX.

·	Comme l'EMM attribue au maximum 256 handles, le tableau ne peut jamais occuper plus de 1024 octets (soit 1 Ko).


Int 67h, Fct 4Eh, Sous-Fct 00h    Enregistrer la table des pages    LIM/EMS (> 3.2)

Cette fonction permet à un programme de sauvegarder la table des pages décrivant la concordance entre les pages logiques et physiques.

Entrée :

AH 	= 4Eh

AL 	= 00h

ES:DI	= Pointeur sur la tableau devant recevoir la table des pages

Sortie :

AH 	= 0, Tout va bien

AH 	 >0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.2 ou supérieure est effectivement installée.

·	Contrairement à la fonction similaire 47h, ici un handle EMM s'avère inutile.

·	Vous pouvez prendre connaissance de la taille du buffer à l'aide de la sous-fonction 03h.

·	La codification des informations entrées dans le buffer varie en fonction des constructeurs de cartes et drivers EMS. Il faut donc éviter de le manipuler ou l'interpréter.

·	Après avoir modifié la concordance entre les pages EMS physiques et logiques, vous pouvez la rétablir avec la sous-fonction 01h mais en prenant soin de la sauvegarder au préalable avec la sous-fonction 00h.


Int 67h, Fct 4Eh, Sous-Fct 01h    Rétablir la table des pages    LIM/EMS (> 3.2)

L'appel de cette fonction rétablit la concordance entre les pages EMS physiques et logiques préalablement définie avec la sous-fonction 00h de cette fonction.

Entrée :

AH 	= 4Eh

AL 	= 01h

ES:DI 	= Pointeur sur la tableau contenant la table des pages

Sortie :

AH 	= 0, Tout va bien

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.2 ou supérieure est effectivement installée.

·	Contrairement à la fonction 48h de même nature, ici un handle EMM s'avère inutile.


Int 67h, Fct 4Eh, Sous-Fct 02h    Enregistrer et rétablir simultanément la table des pages        LIM/EMS (> 3.2)

Cette fonction permet de sauvegarder simultanément la table des pages en cours et de charger une autre qui a été préalablement sauvegardée.

Entrée :

AH 	= E4h

AL 	= 02h

DS:SI 	= Pointeur sur le tableau contenant déjà la table des pages à charger

ES:DI 	= Pointeur sur le tableau devant recevoir la table des pages en cours

Sortie :

AH 	= 0, Tout va bien

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.2 ou supérieure est effectivement installée.

·	Le buffer contenant la table des pages à installer doit d'abord être chargé à l'aide d'un appel de la sous-fonction 00h ou 02h de cette fonction.

·	Vous pouvez prendre connaissance de la taille du buffer devant recevoir la table des pages en cours à l'aide de la sous-fonction 03h de cette fonction.

·	Contrairement aux fonctions 47h et 48h de même nature, ici un handle EMM s'avère inutile.


Int 67h, Fct 4Eh, Sous-Fct 03h    Lire la taille de la table des pages    LIM/EMS (> 3.2)

Avant l'appel de la sous-fonction 00h ou 02h, vous pouvez utiliser cette fonction pour déterminer la place mémoire nécessaire pour stocker la table des pages.

Entrée :

AH 	= 4Eh

AL 	= 03h

Sortie :

AH 	= 0, Tout va bien, dans ce cas

AL = Taille de la table des pages en octets

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.2 ou supérieure est effectivement installée.


Int 67h, Fct 4Fh, Sous-Fct 00h    Enregistrer une partie de la table des pages    LIM/EMS (> 4.0)

Cette fonction permet de sauvegarder séparément la structure de pages physiques bien précises et leurs pages logiques correspondantes.

Entrée :

AH 	= 4Fh

AL 	= 00h

DS:SI 	= Pointeur sur la liste des informations à propos des pages physiques à construire

ES:DI	= Pointeur sur le buffer devant stocker les entrées choisies parmi la table des pages.

Sortie :

AH 	= 0, Tout va bien, dans ce cas

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.

·	La liste des pages physiques à construire doit contenir le nombre des pages concernées dans le premier mot. Suivent ensuite les adresses de segment de ces pages occupant chacune un mot. La taille de cette liste se calcule comme suit :

2 + (Nombre de pages à construire * 2) octets

·	La taille du buffer nécessaire pour recevoir les entrées sélectionnées parmi la table des pages peut être obtenue par la sous-fonction 02h de cette fonction.


Int 67h, Fct 4Fh, Sous-Fct 01h    Rétablir une table des pages enregistrée partiellement        LIM/EMS (> 4.0)

Cette fonction rétablit une table des pages sauvegardée préalablement à l'aide de la sous-fonction 00h.

Entrée :

AH 	= 4Fh

AL 	= 01h

DS:SI 	= Pointeur sur le buffer contenant la table sauvegardée

Sortie :

AH 	= 0, Tout va bien, dans ce cas

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.

·	Le buffer spécifié doit être chargé au préalable avec la sous-fonction 00h de la fonction 4Fh.


Int 67h, Fct 4Fh, Sous-Fct 02h    Lire la taille du buffer pour recevoir une table des pages partielle        LIM/EMS (> 4.0)

Si vous devez sauvegarder une partie de la table des pages avec la sous-fonction 00h, cette sous-fonction peut vous aider à déterminer d'abord la taille du buffer nécessaire à cet effet.

Entrée :

AH 	= 4Fh

AL 	= 02h

BX 	= Nombre de pages physiques à construire lors de la sauvegarde

Sortie :

AH 	= 0, Tout va bien, dans ce cas

AL	= Taille du buffer nécessaire en octets

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.


Int 67h, Fct 50h, Sous-Fct 00h    Construire des pages logiques sur des pages physiques par numéros        LIM/EMS (> 4.0)

En appelant une seule fois cette fonction, un programme peut construire des pages logiques multiples sur un nombre quelconque de pages physiques adressées au moyen de leur numéro respectif.

Entrée :

AH 	= 50h

AL 	= 00h

CX 	= Nombre de pages logiques à construire

DX 	= Handle sur lequel les pages sont à allouer

DS:SI 	= Pointeur sur le buffer contenant les informations sur la structure

Sortie :

AH 	= 0, Tout va bien, dans ce cas

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.

·	Le buffer spécifié doit contenir deux mots consécutifs pour toutes les structures à élaborer. Le premier mot doit renfermer le numéro de la page logique, le second le numéro de la page physique.

Si le numéro de la page logique vaut -1, la page physique correspondante sera alors désactivée. Dans ce cas, elle devient interdite à la lecture et à l'écriture.


Int 67h, Fct 50h, Sous-Fct 01h    Construire des pages logiques sur des pages physiques par adresses        LIM/EMS (> 4.0)

Tout comme la sous-fonction 00h, celle-ci permet de construire des pages logiques multiples sur un nombre quelconque de pages physiques à l'aide d'un seul appel de la fonction. Ici, les pages physiques ne sont pas adressées avec leur numéros, mais avec leur adresse de segment.

Entrée :

AH 	= 50h

AL 	= 01h

CX 	= Nombre de pages logiques à construire

DX 	= Handle sur lequel les pages sont à allouer

DS:SI 	= Pointeur sur le buffer contenant les informations sur la structure

Sortie :

AH 	= 0, Tout va bien, dans ce cas

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.

·	Le buffer spécifié doit contenir deux mots consécutifs pour toutes les structures à élaborer. Le premier mot doit renfermer le numéro de la page logique, le second l'adresse de segment de la page physique.

·	Si le numéro de la page logique vaut -1, la page physique correspondante sera alors désactivée. Dans ce cas, elle devient interdite à la lecture et à l'écriture.

·	Les adresses de segment des pages physiques disponibles peuvent être obtenues à l'aide de la sous-fonction 00h de la fonction 58h.


Int 67h, Fct 51h    Modifier le nombre de pages logiques allouées    LIM/EMS (> 4.0)

Le nombre de pages logiques appartenant à un handle alloué préalablement à l'aide de la fonction 43h peut être augmenté ou diminué librement avec cette fonction.

Entrée :

AH 	= 48h

DX 	= Handle sur lequel les pages ont été allouées

BX 	= Nouveau nombre des pages rendues disponibles par ce handle

Sortie :

AH 	= 0, Tout va bien, dans ce cas

BX = Nombre de pages logiques dont dispose maintenant le handle

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.

·	La réduction du nombre de pages affectées est toujours possible, mais l'augmentation dépend de la taille de la mémoire EMS non encore allouée. Par conséquent, après avoir appelé la fonction, n'oubliez jamais de vérifier l'état d'erreur dans le registre AH.

·	Si vous réduisez le nombre de pages affectées à l'aide de cette fonction, un nombre correspondant de pages est soustrait de l'extrémité supérieure des pages actuellement allouées. Leur contenu est perdu définitivement.

·	Après appel de cette fonction, le handle reste toujours valable même si le nombre de pages atteint 0.


Int 67h, Fct 52h, Sous-Fct 00h    Lire l'attribut d'un handle    LIM/EMS (> 4.0)

Cette fonction permet de constater si le contenu des pages EMS affectées à un handle reste conservé à travers un démarrage à chaud de l'ordinateur. Dans ce cas, elles sont désignées comme des pages "non volatiles".

Entrée :

AH 	= 52h

AL 	= 00h

DX 	= Handle à consulter

Sortie :

AH 	= 0, Tout va bien, dans ce cas

AL = Attribut des pages

0 : le contenu des pages est perdu (volatile)

1 : le contenu des pages reste conservé (non volatile)

AH > 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.


Int 67h, Fct 52h, Sous-Fct 01h    Définir l'attribut d'un handle    LIM/EMS (> 4.0)

Si une carte EMS est capable de protéger les pages EMS contre un démarrage à chaud de l'ordinateur, l'attribut correspondant peut alors être défini à l'aide de cette fonction.

Entrée :

AH 	= 52h

AL 	= 01h

BL 	= Attribut pour les pages du handle

0 : le contenu des pages est perdu (volatile)

1 : le contenu des pages reste conservé (non volatile)

DX 	= Handle à consulter

Sortie :

AH 	= 0, Tout va bien

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.

·	Attention ! Très peu de cartes EMS sont capables de protéger les pages EMS contre l'écriture lors d'un démarrage à chaud de l'ordinateur. En ce qui concerne les émulateurs EMS, cette possibilité est généralement à exclure. N'oubliez donc pas de vérifier au préalable si les pages EMS non volatiles disposent de cette technique au moyen de la sous-fonction 02h.


Int 67h, Fct 52h, Sous-Fct 02h    Vérifier les pages EMS non volatiles    LIM/EMS (> 4.0)

Cette fonction permet de vérifier si une carte EMS offre la possibilité de protéger les pages EMS lors d'un démarrage à chaud de l'ordinateur. Les fonctions 52h/00h et 52h/01h ne peuvent être utilisées que dans ce cas.

Entrée :

AH 	= 52h

AL 	= 02h

Sortie :

AH 	= 0, Tout va bien, dans ce cas

AL = 0 : Les pages non volatiles ne sont pas reconnues

AL = 1 : Les pages volatiles sont reconnues

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.


Int 67h, Fct 53h, Sous-Fct 00h    Lire le nom d'un handle    LIM/EMS (> 4.0)

Le nom d'un handle est transmis dans un buffer du programme d'appel suite à l'appel de cette fonction.

Entrée :

AH 	= 53h

AL 	= 00h

DX 	= Handle

ES:DI 	= Pointeur sur le buffer devant recevoir le nom

Sortie :

AH 	= 0, Tout va bien

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.

·	La longueur du nom d'un handle est toujours de 8 caractères si bien que le buffer spécifié doit contenir au moins 8 octets.

·	Lorsqu'un handle est alloué avec la fonction 43h, le nom est d'abord vide, c'est-à-dire qu'il ne contient que les caractères ayant le code 0. A l'aide de la sous-fonction 01h de la fonction 53h, un handle peut toutefois obtenir un nom qui est transmis par un appel de la sous-fonction 00h.


Int 67h, Fct 53h, Sous-Fct 01h    Définir le nom d'un handle    LIM/EMS (> 4.0)

Cette sous-fonction affecte un nom à un handle préalablement alloué servant ensuite à l'appeler.

Entrée :

AH 	= 53h

AL 	= 01h

DX 	= Handle

ES:DI 	= Pointeur sur le buffer contenant le nom du handle

Sortie :

AH 	= 0, Tout va bien

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.

·	La longueur du nom d'un handle est toujours de 8 caractères si bien que le buffer spécifié doit contenir au moins 8 octets.


Int 67h, Fct 54h, Sous-Fct 00h    Lire les noms de tous les handles    LIM/EMS (> 4.0)

Les noms de tous les handles sont transmis dans un buffer du programme d'appel une fois cette fonction appelée.

Entrée :

AH 	= 54h

AL 	= 00h

ES:DI 	= Pointeur sur le buffer recevant les noms des handles

Sortie :

AH 	= 0, Tout va bien, dans ce cas

AL 	= Nombre de handles actifs

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.

·	Le buffer doit disposer d'une place équivalente à 2550 octets parce qu'un maximum de 255 handles est géré et chaque entrée de handle nécessite 10 octets de ce buffer. Les deux premiers octets reçoivent le véritable handle, puis viennent les huit octets qui contiennent le nom du handle.


Int 67h, Fct 54h, Sous-Fct 01h    Lire un handle avec un nom précis    LIM/EMS (> 4.0)

Cette fonction renvoie le handle dont le nom lui a été transmis.

Entrée :

AH 	= 54h

AL 	= 01h

DS:SI 	= Pointeur sur le buffer contenant le nom du handle à rechercher

Sortie :

AH 	= 0, Tout va bien, dans ce cas

DX 	= Le handle recherché

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.


Int 67h, Fct 55h, Sous-Fct 00h    Construire des pages et sauter vers la mémoire étendue        LIM/EMS (> 4.0)

D'une part, cette fonction définit la structure entre les pages logiques et physiques. D'autre part, elle transfère l'exécution du programme vers l'une des pages construites à l'aide d'un FAR-Jump.

Entrée :

AH 	= 55h

AL 	= 00h

DX 	= Handle

DS:SI 	= Pointeur sur le buffer contenant des informations complémentaires

Sortie :

AH 	= 0, Tout va bien

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.

·	Le buffer spécifié doit présenter la structure suivante :

Structure du tampon

Adresse	Contenu	Type

+00h	Pointeur sur l'adresse à laquelle le programme doit continuer 	1 PTR

+05h	Nombre des pages mémoire à afficher avant le saut 	1 BYTE

+06h	Pointeur sur la liste d'affichage 	1 PTR

Longueur : 9 octets

La structure de la liste d'affichage est identique à celle de cette liste dans la structure de la fonction 50h, sous-fonction 00h. A chaque appel, nous obtenons donc le numéro d'une page logique et celui de la page physique correspondante.


Int 67h, Fct 55h, Sous-Fct 01h    Afficher pages et sauter vers la mémoire étendue    LIM/EMS (> 4.0)

Cette sous-fonction est similaire à la 00h, mais la liste d'affichage contient les adresses de segment au lieu des numéros des pages physiques.


Int 67h, Fct 56h, Sous-Fct 00h    Afficher pages et appeler routine en mémoire étendue    LIM/EMS (> 4.0)

Cette fonction définit la structure entre les pages logiques et physiques et elle provoque la poursuite de l'exécution du programme avec une routine en mémoire étendue par un appel FAR. A la fin de cette routine, une nouvelle structure est construite et on revient à l'appelant de la fonction d'interruption.

Entrée :

AH	= 55h

AL	= 00h

DX	= identificateur

DS:SI = pointeur sur tampon avec informations complémentaires

Sortie :

AH	= 0, ok

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

L'appel de cette fonction doit être précédé de la vérification présence d'un EMM ("Expanded Memory Manager") de la version 4.0.

Le tampon indiqué doit avoir la structure suivante :

Structure du tampon

Adresse	Contenu	Type

+00h	Pointeur sur le sous-programme par lequel le programme doit continuer	1 PTR

+05h	Nombre de pages à afficher avant l'appel du sous-programme	1 BYTE

+06h	Pointeur sur la liste d'affichage pour l'affichage avant

l'affichage avant l'appel du sous-programme	1 PTR

+0Ah	Nombre de pages à afficher avant l'appel du sous-programme	1 BYTE

+0Bh	Pointeur sur la liste d'affichage après l'appel du sous-programme	1 PTR

Longueur : 14 octets

La structure de la liste d'affichage est identique à celle de cette liste dans l'appel de la fonction 50h, sous-fonction 00h : elle renvoie le numéro d'une page logique et d'une page physique.

L'exécution de cette fonction exige un certain espace libre de la pile. La taille requise est renvoyée par la sous-fonction 02h de cette fonction.


Int 67h, Fct 56h, sous-Fct 01h    Afficher des pages et appeler une routine de la mémoire étendue        LIM/EMS (> 4.0)

Cette sous-fonction est similaire à la sous-fonction 00h mais elle renvoie les adresses de ses segments et non les numéros des pages physiques.


Int 67h, Fct 56h, sous-Fct 02h    Lire la mémoire nécessaire    LIM/EMS (> 4.0)

Cette fonction renvoie l'espace minimal requis sur la pile pour permettre l'exécution des sous-fonctions 00h et 01h.

Entrée :

AH	= 56h

AL	= 02h

Sortie :

AH	= 0, ok, dans ce cas :

BX = espace pile demandé

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

L'appel de cette fonction doit être précédé de la vérification de la présence d'un EMM ("Expanded Memory Manager") de la version 4.0.

La valeur renvoyée correspond exclusivement aux besoins de l'EMM. L'espace de la pile requis pour la routine à appeler dans la mémoire étendue vient  s'y ajouter.


Int 67h, Fct 57h, sous-Fct 00h        Copier un bloc de mémoire    LIM/EMS (> 4.0)

Cette fonction permet de copier tout bloc de mémoire entre la mémoire paginée et la mémoire étendue ou à l'intérieur de chacune de ces mémoires.

Entrée :

AH	= 57h

AL	= 00h

DS:SI	= Pointeur sur le tampon contenant les informations sur les blocs à copier

Sortie :

AH	= 0, ok

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

L'appel de cette fonction doit être précédé de la vérification de la présence d'un EMM ("Expanded Memory Manager") de la version 4.0.

Le tampon contenant les informations sur les blocs à copier doit avoir le format suivant :

Structure du tampon

Adresse	Contenu	Type

+00h	Taille (en octets) du bloc à copier	1 DWORD

+04h	Type du bloc source (0 = mémoire conventionnelle, 1 = EMS)	1 BYTE

+05h	Identificateur du bloc source (EMS seulement)	1 WORD

+07h	Décalage du début du bloc source	1 WORD

+09h	Adresse de segment du bloc source (mémoire conventionnelle)

ou numéro de la page physique (EMS)	1 WORD

+0Bh	Type du bloc cible (0 = mémoire conventionnelle, 1 = EMS)	1 BYTE

+0Ch	Identificateur du bloc cible (EMS seulement)	1 WORD

+0Eh	Décalage du début du bloc source	1 WORD

+10h	Adresse segment du bloc cible (mémoire conventionnelle)

ou numéro de la page physique (EMS)	1 WORD

Longueur : 18 octets


Int 67h, Fct 57h, sous-Fct 01h        Echanger des blocs de mémoire    LIM/EMS (> 4.0)

Cette fonction équivaut à la sous-fonction 00h, mais elle échange le contenu des blocs de mémoire au lieu de copier le contenu de l'un dans l'autre.

Entrée :

AH	= 57h

AL	= 01h

DS:SI	= Pointeur sur le tampon contenant les informations sur les blocs à copier

Sortie :

AH	= 0, ok

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

L'appel de cette fonction doit être précédé de la vérification de la présence d'un EMM ("Expanded Memory Manager") de la version 4.0.

Le tampon contenant les informations sur les blocs à copier doit avoir le format décrit pour la sous-fonction 00h.

Cette fonction peut échanger au maximum 1 Mo de mémoire par appel.

Si des pages d'EMS sont concernées par le déplacement et si le bloc défini sort de la page EMS définie, les pages EMS suivantes sont également déplacées.

Les blocs source et cible ne doivent pas se chevaucher !


Int 67h, Fct 58h, sous-Fct 00h    Renvoie les adresses des pages EMS physiques et leurs numéros        LIM/EMS (> 4.0)

Cette fonction retourne, dans un tampon établi par l'appelant, les adresses des segments de toutes les pages physiques EMS et de leurs numéros.

Entrée :

AH	= 58h

AL	= 00h

DS:SI	= Pointeur sur le tampon destiné à recevoir les informations

Sortie :

AH	= 0, ok, dans ce cas :

CX = nombre des entrées retournées dans le tampon

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

L'appel de cette fonction doit être précédé de la vérification de la présence d'un EMM ("Expanded Memory Manager") de la version 4.0.

Vous pouvez demander à la sous-fonction 00h la taille requise pour le tampon.

Dans le tampon indiqué, l'EMM contient les informations demandées sous forme d'entrées de 2 mots chacune. Le premier contient l'adresse du segment d'une page EMS, le deuxième contient son numéro.


Int 67h, Fct 58h, sous-Fct 01h    Renvoie le nombre de pages EMS    LIM/EMS (> 4.0)

Cette fonction retourne le nombre des pages EMS physiques, ce qui permet de calculer la taille du tampon qui sera nécessaire pour l'appel de la sous-fonction 00h de cette fonction.

Entrée :

AH	= 58h

AL	= 01h

Sortie :

AH	= 0, ok, dans ce cas :

CX = nombre des entrées retournées dans le tampon

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

L'appel de cette fonction doit être précédé de la vérification de la présence d'un EMM ("Expanded Memory Manager") de la version 4.0.

La taille requise pour le tampon est obtenue en multipliant le nombre des entrées (registre CX) par quatre.


Int 67h, Fct 59h, sous-Fct 00h        Renvoie des informations sur le matériel EMS    LIM/EMS (> 4.0)

Cette fonction permet de recueillir certaines informations sur le matériel EMS, présentant pour la plupart de l'intérêt pour un système d'exploitation intégrant la mémoire EMS à sa gestion de la mémoire.

Entrée :

AH	= 59h

AL	= 00h

Sortie :

AH	= 0, ok, dans ce cas :

CX = taille (en octets) du tableau des pages

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

L'appel de cette fonction doit être précédé de la vérification de la présence d'un EMM ("Expanded Memory Manager") de la version 4.0.

La taille du tampon doit être au moins égale à 10 octets. Après l'appel de la fonction, le tampon contient les informations suivantes :

Structure du tampon

Adresse	Contenu	Type

+00h	Taille des pages EMS non standardisées en paragraphes	1 WORD

+02h	Nombre des jeux alternatifs de registres EMS	1 WORD

+04h	Taille de la table d'affichage et de sauvegarde en octets	1 WORD

+06h	Nombre de jeux de registres pour le transfert en DMA	1 WORD

+08h	Mode d'opération DMA	1 WORD

Longueur : 10 octets

Les modes d'opérations DMA sont au nombre de deux :

0 : le DMA est également utilisable avec des jeux alternatifs de registres

1 : Un seul jeu de registres DMA disponible


Int 67h, Fct 59h, sous-Fct 01h        Renvoie le nombre de pages EMS non standardisées    LIM/EMS (> 4.0)

Cette fonction retourne le nombre total de pages EMS dont la taille diffère des 16 Ko standard et le nombre des pages encore libres parmi celles-ci.

Entrée :

AH	= 59h

AL	= 01h

Sortie :

AH	= 0, ok, dans ce cas :

DX = nombre total des pages non standardisées

BX = nombre des pages non encore allouées

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

L'appel de cette fonction doit être précédé de la vérification de la présence d'un EMM ("Expanded Memory Manager") de la version 4.0.

Cette forme particulière de pages EMS n'est pas gérée par toutes les cartes EMS. Ceci se traduit par la valeur 0 dans le registre DX.


Int 67h, Fct 5Ah, sous-Fct 00h    Alloue des pages EMS    LIM/EMS (> 4.0)

Cette fonction alloue des pages EMS et ressemble donc à la 43h. Cependant, contrairement à cette dernière, la fonction 5Ah permet l'allocation de 0 page EMS sans que cela ne se traduise par une erreur.

Entrée :

AH	= 5Ah

Al	= 0h

BX	= nombre des pages EMS allouées

Sortie :

AH	= 0, ok. Dans ce cas :

DX = identificateur permettant l'accès aux pages allouées

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

L'appel de cette fonction doit être précédé de la vérification de la présence d'un EMM ("Expanded Memory Manager") de la version 4.0.

Vous pouvez allouer 0 page à l'aide de cette fonction sans causer d'erreur, et ainsi obtenir un identificateur.


Int 67h, Fct 5Ah, sous-Fct 01h        Alloue des pages EMS non standardisées    LIM/EMS (> 4.0)

Cette fonction permet d'allouer des pages EMS dont la taille diffère des 16 Ko standard.

Entrée :

AH	= 5Ah

AL	= 01h

Sortie :

AH	= 0, ok, dans ce cas :

DX = identificateur permettant d'accéder aux pages allouées

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

L'appel de cette fonction doit être précédé de la vérification de la présence d'un EMM ("Expanded Memory Manager") de la version 4.0.

Cette forme particulière de pages EMS n'est pas gérée par toutes les cartes EMS. Vérifiez soigneusement l'état de la fonction dans le registre AH après l'appel.

Cette fonction permet d'allouer zéro page pour obtenir simplement un identificateur.


Int 67h, Fct 5Bh    Utile dans les transferts DMA    LIM/EMS (> 4.0)

Cette fonction possède neuf sous-fonctions que nous ne décrirons pas ici car leur intérêt est strictement limité au développement de systèmes d'exploitation, et elles ne sont en outre gérées que par quelques cartes et pilotes EMS. En d'autres termes, ces sous-fonctions ne sont pas utilisées dans le cadre du développement normal sur PC.


Int 67h, Fct 5Ch    Prépare l'EMS à un redémarrage à chaud    LIM/EMS (> 4.0)

Entrée :

AH	= 5Ch

Sortie :

AH	= 0, ok

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

L'appel de cette fonction doit être précédé de la vérification de la présence d'un EMM ("Expanded Memory Manager") de la version 4.0.


Int 67h, Fct 5Dh    Utile pour inactiver le système d'exploitation    LIM/EMS (> 4.0)

Cette fonction possède trois sous-fonctions que nous ne décrirons pas ici car leur intérêt est strictement limité au développement de systèmes d'exploitation, et elles ne sont en outre gérées que par quelques cartes et pilotes EMS. En d'autres termes, ces sous-fonctions ne sont pas utilisées dans le cadre du développement normal sur PC.


Interruption 70h

Une horloge en temps réel a beaucoup de raisons d'interrompre un programme en cours d'exécution. Il peut s'agir d'une alarme au bout d'un temps déterminé, de la mise à jour de la date et de l'heure, ou simplement d'un appel cyclique à l'initiative d'un programme. Cette interruption est normalement desservie par une routine du BIOS qui détermine d'abord la cause de l'appel puis réagit en conséquence.


Interruption 75h

L'interruption 75h permet au coprocesseur arithmétique (80287) de requérir l'attention du processeur central, par exemple en raison d'une erreur.


Interruption 76h

Cette interruption est déclenchée par le contrôleur de disque dur de l'AT lorsqu'il a terminé un accès au disque.


Liste des périphériques

Matériel	Clavier	Vidéo

Mémoire	Disquette	Disque dur

Interface série	Interface parallèle	Souris

Joystick	Date/heure, horloge système	Réseau

Lecteur, répertoire et fichier	Gestionnaire de périphérique

Exécution de programmes	Programmes résidents	CD-ROM

Mémoire étendue XMS	Mémoire paginée EMS


Matériel

ANSI.SYS : tester la présence

Attente

Attente : définir un flag après délai

Définir le caractère de commutateur de ligne de commande

Commande : lire le code pour paramètres de ligne de commande

Commande : terminer programme mais laisser en mémoire

Configuration : lire la configuration

Contrôleur Disque dur AT

Copie d'écran

Coprocesseur arithmétique

Débordement

Démarrage système

Division par 0

Définir l'attribut de périphérique

Envoyer des données à un driver de caractères

Lire l'attribut de périphérique

Recevoir des données d'un driver de bloc

Recevoir des données d'un driver de caractères

Transmettre des données à un driver de bloc

Erreur : lire les informations d'erreur étendues)

Erreur critique

Fin de programme

Horloge en temps réel

INDOS : placer un pointeur sur le flag INDOS

Lire le contenu d'un vecteur d'Interruption

Modifier le vecteur d'Interruption

Mode protégé

NMI

Page de code : définir la page de code en cours

Page de code : lire la page de code en cours

Pas à pas

Pays : définir le pays

Pays : lire les symboles et formats caractéristiques d'un pays

Pays : lire les symboles et formats caractéristiques du pays

Périphérique : lire l'état du périphérique d'entrée

Périphérique : réinitialisation des drivers de bloc

Point d'arrêt

ROM Basic : appel de la ROM BASIC

SysReq : état de la touche SyReq actionnée

Timer

Version de DOS : lire le numéro de version du DOS


ANSI.SYS : tester la présence    Int 2Fh, code MUX 1Ah, Fct 00h    MUX

Cette fonction permet de tester la présence du driver de périphérique ANSI.SYS

Entrée :

AH	= 1Ah

AL	= 00h

Sortie :

Al	=FFh : ANSI.SYS installé


Attente    Int 15h, Fct 86h    BIOS (>= AT)

Après appel de cette fonction, le contrôle n'est rendu au programme d'appel qu'une fois écoulé un délai déterminé.

Entrée :

AH 	= 86h

CX 	= Mot de poids fort de la pause en microsecondes

DX 	= Mot de poids faible de la pause en microsecondes

Sortie :

aucune

Remarques :

·	Une microseconde correspond à un millionième de seconde.

·	Le contenu des registres BX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Attente : définir un flag après délai     Int 15h, Fct 83h    BIOS (>= AT)

L'appel de cette fonction a pour effet de fixer sur 1 le bit 7 d'un flag spécifié par le programme d'appel, au bout d'un délai indiqué en microsecondes.

Entrée :

AH 	= 83h

ES 	= Adresse de segment du flag

BX 	= Adresse d'offset du flag

CX 	= Mot fort du délai exprimé en microsecondes

DX 	= Mot faible du délai exprimé en microsecondes

Sortie :

Aucune

Remarques :

·	Une microseconde correspond à un millionième de seconde.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Commande : définir le caractère de commutateur de ligne de commande    Int 21h, Fct 37h, Sous-Fct 01h    DOS (>= 2.0)

L'appel de cette fonction permet de définir le caractère que tous les commutateurs de lignes de commande doivent reconnaître lors de l'appel d'un programme.

Entrée :

AH 	= 37h

AL 	= 01h

DL 	= code ASCII du caractère

Sortie :

Flag Carry :	0, caractère accepté

1, Erreur

Remarques :

·	Actuellement, les caractères autorisés pour introduire les paramètres dans une ligne de commande sont (=), (/) et (-). Les autres caractères ne sont pas acceptés et sont rejetés.

·	Vu que les programmes utilisant la sous-fonction 00h sont peu nombreux et que le caractère adopté comme commutateur de lignes de commande est toujours le caractère (/), l'appel de la sous-fonction 01h n'agit que sur de rares programmes. Mais on peut citer les divers programmes DOS internes et externes qui accordent une importance à ce caractère.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS, ES n'est pas modifié par cette fonction.


Commande : lire le code pour paramètres de ligne de commande    Int 21h, Fct 37h, Sous-Fct 00h    DOS (>= 2.0)

Le caractère valable pour tous les commutateurs de paramètres lors de l'appel d'un programme peut être obtenu à l'aide de cette fonction.

Entrée :

AH 	= 37h

AL 	= 00h

Sortie :

DL 	= code ASCII du caractère

Remarques :

·	En règle générale, on admet que le caractère servant à introduire les paramètres dans une ligne de commande soit le signe de la division (/). Par conséquent, rares sont les programmes qui demandent le caractère de commutation des lignes de commande et peuvent ne pas réagir à la modification de ce caractère.

·	Le contenu des registres BX, CX, DH, SI, DI, BP, CS, DS, SS, ES n'est pas modifié par cette fonction.


Commande : terminer programme mais laisser en mémoire     Int 21h, Fct 31h    DOS (>= 1.0)

Cette fonction permet de terminer le programme exécuté et de rendre le contrôle au programme qui l'avait appelé.

Contrairement aux autres fonctions pour terminer un programme, la mémoire occupée par le programme n'est cependant pas libérée pour une utilisation ultérieure. Le programme actuel reste donc résident en mémoire.

Entrée :

AH 	= 31h

AL 	= Code de fin

DX 	= Nombre de paragraphes à réserver

Sortie :

aucune

Remarques :

·	Le code de fin dans le registre AL sert à signaler au programme d'appel si le programme qu'il avait appelé a pu ou non être correctement exécuté. Le programme d'appel peut se faire communiquer cette valeur en appelant la fonction 4Dh. Dans un programme batch, cette valeur peut être testée à l'aide des instructions ERRORLEVEL et IF.

·	Le nombre de paragraphes (groupes de 16 octets) à réserver indique combien d'octets, à partir du PSP, ne devront pas être libérés pour une utilisation ultérieure.

·	Les blocs de mémoire réservés à l'aide de la fonction 48h ne sont pas concernés par la valeur dans le registre DX car ils ne peuvent être à nouveau libérés qu'en appelant la fonction 49h.


Configuration : lire la configuration     Int 11h    BIOS

Lit la configuration du système telle qu'elle a été constatée lors de l'opération de lancement du système.

Entrée :

aucune entrée

Sortie :

AX	= la configuration

Pour le PC et le XT :

Bit 0	vaut 1 si le système dispose d'un ou plusieurs lecteurs de disquette

Bit 1	inutilisé

Bits 2 et 3	Mémoire RAM sur la carte mère

00 = 16 Ko

01 = 32 Ko

10 = 48 Ko

11 = 64 Ko

Bits 4 et 5	Mode vidéo lors du lancement du système

00 : inutilisé

01 : 40*25 car. sur carte couleur

02 : 80*25 car. sur carte couleur

03 : 80*25 car. sur carte mono

Bits 6 et 7	indiquent le nombre de lecteurs de disquette si le bit 0 vaut 1

00 = 1 lecteur de disquette

01 = 2 lecteurs de disquette

10 = 3 lecteurs de disquette

11 = 4 lecteurs de disquette

Bit 8	vaut 0 s'il y a un circuit DMA

Bits 9 à 11	Nombre de cartes RS232 connectées

Bit 12	vaut 1 si l'adaptateur de jeux est connecté

Bit 13	inutilisé

Bits 14 et 15	indiquent le nombre d'imprimantes

Pour l'AT :

Bit 0	vaut 1 si le système dispose d'un ou plusieurs lecteurs de disquette

Bit 1	vaut 1 si un coprocesseur mathématique est implanté sur le système

Bits 2 et 3	inutilisés

Bits 4 et 5	Mode vidéo lors du lancement du système

00 : inutilisé

01 : 40*25 car. sur carte couleur

02 : 80*25 car. sur carte couleur

03 : 80*25 car. sur carte mono

Bits 6 et 7	indiquent le nombre de lecteurs de disquette si le bit 0 vaut 1

00 = 1 lecteur de disquette

01 = 2 lecteurs de disquette

10 = 3 lecteurs de disquette

11 = 4 lecteurs de disquette

Bit 8	sans signification

Bits 9 à 11	Nombre de cartes RS232 connectées

Bits 12 et 13	inutilisés

Bits 14 et 15	indiquent le nombre d'imprimantes

Remarques :

·	Pour pouvoir interpréter la signification des différents bits du mot de configuration, il faut connaître le type du PC (PC/XT ou AT).

·	La taille de la mémoire indiquée dans les bits 2 et 3 du mot de configuration du PC/XT se réfère uniquement à la carte mère. L'interruption 12h permet de connaître la taille totale de la mémoire.

·	Le mode vidéo indiqué dans les bits 4 et 5 correspond au mode vidéo qui était activé lors de la mise en marche du système. Pour connaître le mode vidéo actuel, c'est d'une autre fonction, la fonction 15 de l'interruption 10h qu'il convient donc de se servir.

·	Seul le contenu du registre AX est modifié à la suite de l'appel de cette fonction.


Contrôleur Disque dur AT    Int 76h    Matériel

Cette interruption est déclenchée par le contrôleur de disque dur de l'AT lorsqu'il a terminé un accès au disque.


Copie d'écran    Int 5h    Matériel

Bien que classée dans le groupe des interruptions matérielles, l'interruption 5 est exploitée par le BIOS. Elle est déclenchée par le BIOS chaque fois que la touche "PrtScr" (sur un clavier américain) ou "Impr" (sur un clavier français) est actionnée. Sa tâche consiste à envoyer sur l'imprimante le contenu de l'écran, ce qu'on appelle une copie d'écran ou hard copy. C'est pourquoi le vecteur de cette interruption est initialisé par le BIOS dans la table des vecteurs d'interruption de façon à pointer sur la routine de copie d'écran du BIOS qui figure en ROM . Les programmes en assembleur ou en langage évolué peuvent également recourir à cette interruption, en l'appelant par INT, pour envoyer au cours de leur exécution une copie d'écran sur l'imprimante.


Coprocesseur arithmétique    Int 75h    Matériel

L'interruption 75h permet au coprocesseur arithmétique (80287) de requérir l'attention du processeur central, par exemple en raison d'une erreur.


Débordement    Int 4h    Matériel

Cette interruption peut être appelée par une certaine instruction liée à une condition. Il s'agit de l'instruction machine INTO (INTerruption on Overflow)  qui ne déclenche l'interruption 4 que si le bit de débordement (Overflow) du registre des indicateurs est à 1 au moment de son exécution. Ce sera notamment le cas à la suite d'opérations arithmétiques (par exemple après une multiplication avec l'instruction MUL) si le résultat de l'opération ne peut plus être représenté avec un nombre déterminé de bits. Cette interruption peut naturellement également être appelée à l'aide de l'instruction INT normale mais dans ce cas l'appel ne dépendra pas de l'état d'armement du bit Overflow. En fait cette interruption est très peu utilisée et DOS la dirige directement sur une instruction de retour IRET.


Démarrage système     Int 19h    BIOS

L'appel de cette interruption déclenche un lancement du système.

Entrée :

aucune

Sortie :

aucune

Remarques :

·	Il arrive que cette interruption ne relance pas l'ordinateur, mais au contraire provoque un plantage. Cela dépend du fait que le contenu de la mémoire RAM est effacé alors que la table des vecteurs d'interruption reste intacte dans la zone des interruptions 00h à 1Ch. Si un programme résident atteint l'une de ces interruptions, le prochain appel de cette interruption provoque irrémédiablement un plantage. Cela s'applique surtout à l'interruption 08h qui est utilisée par la plupart des programmes résidents.

·	Par conséquent, évitez d'utiliser cette interruption et adoptez plutôt la technique suivante pour relancer le système : pour effectuer un démarrage à chaud, sauvegardez d'abord la valeur 1234h dans la cellule 0040:0072 de la mémoire et exécutez ensuite un FAR-jump vers la cellule FFFF:0000.

·	Cette méthode permet en outre de réaliser un démarrage à froid à condition de charger à cet effet la valeur 0000h dans la cellule 0040:0072.


Division par 0    Int 0h    Matériel

Le 8088 dispose des instructions machine DIV et IDIV qui effectuent une division entière. Les règles arithmétiques usuelles interdisent toute division par zéro. C'est pourquoi le processeur déclenche dans ce cas une interruption 0. Lors du lancement du système, le vecteur associé est dirigé par DOS sur une routine qui affiche un message du genre "Division par zéro", puis revient par IRET au programme interrompu.


Driver de périphérique (IOCTL) : définir l'attribut de périphérique    Int 21h, Fct 44h, Sous-Fct 1    DOS (>= 1.0)

Cette fonction permet de définir l'attribut de périphérique d'un driver de caractère, qui est stocké dans l'en-tête de ce driver.

Entrée :

AH 	= 44h

AL 	= 1

BX 	= Handle

DX 	= Attribut de périphérique

Bit 14 = 	1 : 	Le driver peut traiter des chaînes de caractères de commande particulières à travers les sous-fonctions 2 et 3  de la fonction IOCTL.

Bit 7 = 	1 :	Le driver est un driver de caractères.

Bit 5 = 	0 :	Le driver travaille en mode Cooked.

1 :	Le driver travaille en mode Raw.

Bit 3 = 	1 :	Le driver est un driver d'horloge.

Bit 2 = 	1 :	Le driver est le driver NUL.

Bit 1 = 	1 :	Le driver est le driver de sortie de la console (l'écran).

Bit 0 = 	1 :	Le driver est le driver d'entrée de la console (le clavier).

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

6 : Handle non ouvert ou qui n'existe pas

Remarques :

·	C'est un handle associé au périphérique voulu qui doit être spécifié et non le nom du driver de caractères appelé. Il peut s'agir par exemple de l'un des 5 handles prédéfinis (numéros 0 à 4). Il est toutefois également possible d'ouvrir au préalable un périphérique déterminé à l'aide de la fonction Ouvrir (fonction numéro 3Dh) puis de transmettre ce handle à la fonction. Comme l'entrée et la sortie standard (Les handles 0 et 1) peuvent avoir été redirigées, cette méthode permet de s'assurer que l'accès se fera bien sur le périphérique voulu.

·	Pour modifier différents bits de l'attribut de périphérique à l'aide de cette fonction, il est préférable de lire tout d'abord cet attribut de périphérique à l'aide de la fonction 0. Vous pouvez alors manipuler les bits voulus puis renvoyer l'attribut de périphérique au driver de périphérique, à l'aide de cette fonction.

·	Cette fonction est surtout utile pour faire passer un driver de caractères du mode Raw au mode Cooked, et inversement, à l'aide du bit 5 de l'attribut de périphérique.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Driver de périphérique (IOCTL) : envoyer des données à un driver de caractères    Int 21h, Fct 44h, Sous-Fct 3    DOS (>= 1.0)

En appelant cette fonction, un programme d'application peut envoyer des données sur un driver de caractères, de façon très directe. Le nombre d'octets à écrire, qui seront tirés d'un buffer pour être transmis au driver, est fixé par le programme d'appel. Le type et la structure des données ne sont pas prédéfinis par le DOS mais peuvent être définis individuellement par chaque driver.

Entrée :

AH 	= 44h

AL 	= 3

BX 	= Handle

CX 	= Nombre d'octets à transmettre

DS 	= Adresse de segment du buffer

DX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas

AX = Nombre d'octets transférés

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

6 : Handle non ouvert ou qui n'existe pas

Remarques :

·	C'est un handle associé au périphérique voulu qui doit être spécifié et non le nom du driver de caractères appelé. Il peut s'agir par exemple de l'un des 5 handles prédéfinis (numéros 0 à 4). Il est toutefois également possible d'ouvrir au préalable un périphérique déterminé à l'aide de la fonction Ouvrir (fonction numéro 3Dh) puis de transmettre ce handle à la fonction. Comme l'entrée et la sortie standard (Les handles 0 et 1) peuvent avoir été redirigées, cette méthode permet de s'assurer que l'accès se fera bien sur le périphérique voulu.

·	Une erreur apparaîtra si le handle spécifié est associé à un driver de bloc et non à un driver de caractères.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Driver de périphérique (IOCTL) : lire l'attribut de périphérique    Int 21h, Fct 44h, Sous-Fct 0    DOS (>= 1.0)

Cette fonction permet de lire l'attribut de périphérique d'un driver de caractère, qui est stocké dans l'en-tête de ce driver.

Entrée :

AH 	= 44h

AL 	= 0

BX 	= Handle

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas DX = Attribut de périphérique

Bit 14 =	 1 : 	Le driver peut traiter des chaînes de caractères de commande particulières à travers les sous-fonctions 2 et 3 de la fonction IOCTL.

Bit 7 = 	1 :	Le driver est un driver de caractères.

Bit 5 = 	0 :	Le driver travaille en mode Cooked.

1 :	Le driver travaille en mode Raw.

Bit 3 = 	1 :	Le driver est un driver d'horloge.

Bit 2 = 	1 :	Le driver est le driver NUL.

Bit 1 = 	1 :	Le driver est le driver de sortie console (l'écran).

Bit 0 = 	1 :	Le driver est le driver d'entrée console (le clavier).

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

6 : Handle non ouvert ou qui n'existe pas

Remarques :

·	C'est un handle associé au périphérique voulu qui doit être spécifié et non le nom du driver de caractères appelé. Il peut s'agir par exemple de l'un des 5 handles prédéfinis (numéros 0 à 4). Il est toutefois également possible d'ouvrir au préalable un périphérique déterminé à l'aide de la fonction Ouvrir (fonction numéro 3Dh) puis de transmettre ce handle à la fonction. Comme l'entrée et la sortie standard (Les handles 0 et 1) peuvent avoir été redirigées, cette méthode permet de s'assurer que l'accès se fera bien sur le périphérique voulu.

·	Si le bit 7 de l'attribut de périphérique ne vaut pas 1, c'est que le driver appelé n'est pas un driver de caractères et la signification des différents bits ne correspond donc pas à celle d'un driver de caractères.

·	Le contenu des registres BX, CX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Driver de périphérique (IOCTL) : recevoir des données d'un driver de bloc    Int 21h, Fct 44h, Sous-Fct 4    DOS (>= 1.0)

En appelant cette fonction, un programme d'application peut recevoir des données d'un driver de bloc, de façon très directe. Le nombre d'octets à lire, qui seront copiés par le driver dans un buffer, est fixé par le programme d'appel. Le type et la structure des données ne sont pas prédéfinis par le DOS mais peuvent être définis individuellement par chaque driver.

Entrée :

AH 	= 44h

AL 	= 4

BX 	= Désignation de périphérique

CX 	= Nombre d'octets à lire

DS 	= Adresse de segment du buffer

DX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas

AX = Nombre d'octets transférés

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

15 : Périphérique inconnu

Remarques :

·	La désignation de périphérique n'indique pas directement le driver de périphérique mais le périphérique duquel les données devront être reçues. Le code 0 désigne ici le périphérique A, 1 le périphérique B, etc.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Driver de périphérique (IOCTL) : recevoir des données d'un driver de caractères    Int 21h, Fct 44h, Sous-Fct 2    DOS (>= 1.0)

En appelant cette fonction, un programme d'application peut recevoir des données d'un driver de caractères, de façon très directe. Le nombre d'octets à lire, qui seront copiés par le driver dans un buffer, est fixé par le programme d'appel. Le type et la structure des données ne sont pas prédéfinis par le DOS mais peuvent être définis individuellement par chaque driver.

Entrée :

AH 	= 44h

AL 	= 2

BX 	= Handle

CX 	= Nombre d'octets à lire

DS 	= Adresse de segment du buffer

DX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas

AX = Nombre d'octets transférés

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

6 : Handle non ouvert ou qui n'existe pas

Remarques :

·	C'est un handle associé au périphérique voulu qui doit être spécifié et non le nom du driver de caractères appelé. Il peut s'agir par exemple de l'un des 5 handles prédéfinis (numéros 0 à 4). Il est toutefois également possible d'ouvrir au préalable un périphérique déterminé à l'aide de la fonction Ouvrir (fonction numéro 3Dh) puis de transmettre ce handle à la fonction. Comme l'entrée et la sortie standard (Les handles 0 et 1) peuvent avoir été redirigées, cette méthode permet de s'assurer que l'accès se fera bien sur le périphérique voulu.

·	Une erreur apparaîtra si le handle spécifié est associé à un driver de bloc et non à un driver de caractères.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Driver de périphérique (IOCTL) : transmettre des données à un driver de bloc    Int 21h, Fct 44h, Sous-Fct 5    DOS (>= 1.0)

En appelant cette fonction, un programme d'application peut envoyer des données sur un driver de bloc, de façon très directe. Le nombre d'octets à lire, qui seront tirés d'un buffer pour être transmis au driver, est fixé par le programme d'appel. Le type et la structure des données ne sont pas prédéfinis par le DOS mais peuvent être définis individuellement par chaque driver.

Entrée :

AH 	= 44h

AL 	= 5

BX 	= Désignation de périphérique

CX 	= Nombre d'octets à transmettre

DS 	= Adresse de segment du buffer

DX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas

AX = Nombre d'octets transférés

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

15 : Périphérique inconnu

Remarques :

·	La désignation de périphérique n'indique pas directement le driver de périphérique mais le périphérique auquel les données devront être transmises. Le code 0 désigne ici le périphérique A, 1 le périphérique B, etc.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Erreur : lire les informations d'erreur étendues     Int 21h, Fct 59h    DOS (>= 3)

Lorsqu'une erreur est apparue à la suite de l'appel d'une des fonctions de l'interruption 21h ou de l'interruption 24h, cette fonction vous permet d'obtenir de plus amples informations sur cette erreur, à savoir d'une part une description détaillée de l'erreur, de sa cause et de son origine mais aussi, d'autre part, une indication sur la conduite à tenir pour résoudre le problème.

Entrée :

AH 	= 59h

BX 	= 0

Sortie :

AX 	= Description de l'erreur

BH 	= Cause de l'erreur

BL 	= Réaction conseillée

CH 	= Origine de l'erreur

Remarques :

·	Les codes suivants sont employés pour décrire l'erreur (dans AX) :

0 : 	Aucune erreur n'est apparue

1 : 	Numéro de fonction inconnu

2 : 	Fichier non trouvé

3 : 	Chemin non trouvé

4 : 	Trop de fichiers sont ouverts simultanément

5 : 	Accès refusé

6 : 	Handle inconnu

7 : 	Bloc de contrôle de la mémoire détruit

8 : 	Mémoire disponible insuffisante

9 : 	Adresse de mémoire incorrecte

10 : 	Environnement incorrect

11 : 	Format incorrect

12 : 	Code d'accès incorrect

13 : 	Données incorrectes

14 : 	(réservé)

15 : 	Lecteur inconnu

16 : 	Le répertoire actuel ne peut pas être ouvert

17 : 	Périphériques différents

18 : 	Plus d'autre fichier

19 : 	Support protégé contre l'écriture

20 : 	Périphérique inconnu

21 : 	Périphérique n'est pas prêt

22 : 	Instruction inconnue

23 : 	Erreur CRC

24 : 	Largeur de données incorrecte

25 : 	Recherche infructueuse

26 : 	Type de périphérique inconnu

27 : 	Secteur non trouvé

28 : 	Plus de papier sur l'imprimante

29 : 	Erreur d'écriture

30 : 	Erreur de lecture

31 : 	Erreur générale

32 : 	Erreur de partage de fichier

33 : 	Erreur de verrouillage de fichier

34 : 	Changement de disquette non autorisé

35 : 	FCB indisponible

36 : 	Plus de place dans la liste réseau

37-49 : 	(réservé)

50 : 	Fonction réseau appelée non supportée

51 : 	Pas d'accès à l'ordinateur à distance

52 : 	Nom répété plusieurs fois à l'intérieur du réseau, risque d'équivoque

53 : 	Périphérique portant le nom spécifié inconnu dans le réseau

54 : 	Réseau occupé

55 : 	Le périphérique n'existe plus dans le réseau

56 : 	Erreur NetBios

57 : 	Erreur dans une carte réseau

58 : 	Réponse erronée de la part du réseau

59 : 	Erreur réseau non attendue

60 : 	Carte réseau incompatible sur l'ordinateur à distance

61 : 	File d'attente de l'imprimante saturée

62 : 	Mémoire insuffisante pour imprimer le fichier

63 : 	Sortie du fichier sur l'imprimante interrompue

64 : 	Nom du réseau effacé

65 : 	Accès au réseau refusé

66 : 	Type de périphérique réseau incorrect

67 : 	Nom du réseau inconnu

68 : 	Nom du réseau trop long

69 : 	Erreur NetBios

70 : 	Partage de fichier instauré momentanément

71 : 	Demande de participer au réseau non acceptée

72 : 	Redirection vers le périphérique et le fichier momentanément désactivée

73-79 : 	(réservé)

80 : 	Fichier existe déjà

82 : 	Répertoire ne peut être créé

83 : 	Arrêt après appel de l'interruption 24h

84 : 	Trop de redirections

85 : 	Redirection doublée

86 : 	Mot de passe incorrect

87 : 	Paramètre incorrect

88 : 	Erreur dans le périphérique du réseau

89 : 	Fonction non reconnue dans le réseau

90 : 	Elément système nécessaire non installé

·	Les codes suivants sont employés pour décrire la cause de l'erreur (dans BH) :

1 : 	Plus d'espace disque libre sur le support

2 : 	Interdiction temporaire d'accès (Sera vraisemblablement bientôt levée)

3 : 	Accès non autorisé

4 : 	Erreur interne du logiciel système

5 : 	Erreur électronique

6 : 	Erreur dans le logiciel système mais qui n'a pas été occasionnée par un programme d'application

7 : 	Erreur dans un programme d'application

8 : 	Fichier non trouvé

9 : 	Fichier de format ou type incorrect

10 : 	Fichier verrouillé

11 : 	Support incorrect sur le lecteur

12 : 	Objet réseau existe déjà

13 : 	Autre erreur

·	Les codes suivants sont employés pour la réaction conseillée en vue de résoudre le problème (dans BL) :

1 : 	Répéter opération plusieurs fois puis laisser à l'utilisateur le soin de décider s'il veut interrompre l'opération ou ignorer l'erreur.

2 : 	Répéter opération plusieurs fois, après un certain délai, puis laisser à l'utilisateur le soin de décider s'il veut interrompre l'opération ou ignorer l'erreur.

3 : 	Demander à l'utilisateur d'entrer des données ou des informations.

4 : 	Terminer le programme par la voie normale

5 : 	Fin immédiate du programme

6 : 	Ignorer l'erreur

7 : 	Demander à l'utilisateur d'éliminer la cause de l'erreur puis de répéter l'opération

·	Les codes suivants sont employés pour décrire l'origine de l'erreur (dans CH) :

1 : 	Inconnue

2 : 	Driver de bloc (disquette, disque dur, etc.)

3 : 	Réseau

4 : 	Périphérique sériel

5 : 	Mémoire RAM

·	Seul le contenu des registres CS, SS et SP n'est pas modifié par cette fonction. Le contenu de tous les autres registres est détruit.


Erreur critique    Int 24h    DOS

Cette interruption, ou plutôt le vecteur d'interruption correspondant, est également utilisée pour stocker l'adresse d'une routine. Il s'agit ici de la routine qui est appelée chaque fois qu'une erreur critique est détectée lors d'un accès à l'électronique, lors d'un accès disquette par exemple.

Il serait donc possible d'appeler cette routine à l'aide de l'instruction (langage machine) INT mais cela ne doit jamais être tenté car cette routine est conçue comme une procédure FAR et non comme une routine d'interruption.

Un programme peut, au cours de son exécution, modifier le contenu de ce vecteur d'interruption, qui est stocké à partir de la cellule de mémoire 0000:0090, pour que ce ne soit plus la routine du DOS mais une routine du programme qui soit appelée lorsqu'une erreur de ce type se produit. C'est un moyen, par exemple, d'empêcher que son exécution puisse être interrompue par la routine du DOS lorsque le programme doit accéder au lecteur de disquette alors qu'aucune disquette n'y est placée. Lorsque cette routine est appelée à la suite d'une erreur critique, le bit 7 du registre AH indique le type d'erreur. S'il vaut 0, il s'agit d'une erreur disquette ou disque dur. Pour toute autre erreur, il vaudra 1. Une erreur disquette/disque dur ne sera cependant signalée qu'après plusieurs tentatives infructueuses pour accéder au périphérique. Les 8 bits inférieurs du registre DI (le contenu des 8 bits supérieurs étant indéfini) contiennent lors de l'appel de la routine un code qui décrit plus précisément l'erreur survenue. Les codes suivants peuvent se présenter :

0 : 	Disquette protégée contre l'écriture

1 : 	Accès à un périphérique inconnu

2 : 	Lecteur n'est pas prêt

3 : 	Instruction inconnue

4 : 	Erreur CRC

5 : 	Largeur de données incorrecte

6 : 	Recherche infructueuse

7 : 	Type de périphérique inconnu

8 : 	Secteur non trouvé

9 : 	Plus de papier sur l'imprimante

10 : 	Erreur d'écriture

11 : 	Erreur de lecture

12 : 	Erreur générale

La routine d'erreur doit veiller à ce qu'une fois qu'elle se sera achevée les registres SS, SP, DS, ES, BX, CX et DX contiennent les mêmes valeurs que lorsqu'elle avait été appelée. Au cours de son exécution, elle ne doit, d'autre part, accéder qu'aux fonctions 1 et 12 de l'interruption 21h. Il convient de la terminer par une instruction (langage machine) IRET en renvoyant au DOS, dans le registre AL, un code qui guidera la conduite ultérieure du DOS. Le DOS accepte les codes suivants :

0 : 	Ignorer l'erreur

1 : 	Répéter l'opération (l'accès)

2 : 	Terminer programme en appelant l'interruption 23h

3 : 	Interrompre simplement l'appel de fonction actuel (cette dernière possibilité n'existe qu'à partir de la version 3)

Lorsqu'un programme modifie le contenu de ce vecteur d'interruption, il peut parfaitement arriver qu'il soit terminé sans avoir restauré l'ancien contenu de ce vecteur. Or il se peut que la mémoire RAM qu'il occupait ait été à nouveau libérée et qu'elle soit remployée par d'autres programmes, auquel cas la routine d'erreur risque d'avoir été effacée par d'autres données. Il peut en résulter un plantage du système si une erreur survient, puisqu'un code tout à fait inadapté figure maintenant à la place de l'ancienne routine d'erreur.

Pour éviter cela, le DOS sauvegarde le contenu de ce vecteur d'interruption dans le PSP du programme à exécuter avant de lui passer la main. Lorsqu'un programme est terminé, le contenu du vecteur d'interruption est tout d'abord recopié du PSP dans le vecteur, après quoi le contrôle est rendu au programme-père.


Fin de programme    Int 21h, Fct 00h    DOS (>= 1.0)

En appelant cette fonction, on indique au système d'exploitation que l'exécution du programme actuellement traité doit s'achever et que le contrôle doit être rendu au programme d'appel. Avant que cela ne se produise, toutefois, les trois vecteurs d'interruption dont le contenu avait été sauvegardé dans le PSP avant appel du programme, sont restaurés. Si le programme a redirigé ces vecteurs sur des routines à lui, ces routines ne pourront être effacées par un autre programme puisque la mémoire RAM occupée par le programme qu'il s'agit de terminer est à nouveau libérée pour d'autres programmes. Cette mémoire est donc libérée et tous les buffers de fichiers sont vidés avant que le contrôle ne soit rendu au programme d'appel.

Entrée :

AH 	= 00h

CS 	= Adresse de segment du PSP

Sortie :

aucun

Remarques :

·	Pour un programme COM, l'adresse de segment du PSP est de toute façon stockée dans le registre CS. Dans un programme EXE, le code et le PSP ne sont pas logés dans le même segment. Cette fonction ne peut donc être appelée par un programme EXE.

·	Il est préférable d'utiliser, plutôt que cette fonction, les fonctions 31h ou 4Ch de l'interruption 21h du DOS pour terminer un programme.


Horloge en temps réel    Int 70h    Matériel

Une horloge en temps réel a beaucoup de raisons d'interrompre un programme en cours d'exécution. Il peut s'agir d'une alarme au bout d'un temps déterminé, de la mise à jour de la date et de l'heure, ou simplement d'un appel cyclique à l'initiative d'un programme. Cette interruption est normalement desservie par une routine du BIOS qui détermine d'abord la cause de l'appel puis réagit en conséquence.


INDOS : placer un pointeur sur le flag INDOS    Int 21h, Fct 34h    DOS (>= 2.0)

Après appel de cette fonction, DOS communique l'adresse de l'octet d'activité du DOS qui est particulièrement utile pour les programmes résidents.

Entrée :

AH 	= 34h

Sortie :

ES:BX = Pointeur FAR sur le flag INDOS

Remarques :

·	En ce qui concerne le flag INDOS, il s'agit d'un octet qui compte les appels récursifs de l'interruption 21h. Il contient la valeur 0 tant que DOS n'est pas actif et c'est pourquoi les fonctions DOS peuvent être appelées à partir d'un programme résident. Si le flag contient cependant une valeur supérieure à 0, DOS est alors justement actif puisqu'une valeur supérieure à 1 symbolise un nombre correspondant d'appels récursifs. Dans ce cas, DOS ne peut pas être interrompu par un appel de fonction émanant d'un programme TSR au risque de provoquer un plantage dans le pire des cas.

·	Le contenu des registres CX, DX, SI, DI, BP, CS, DS, SS n'est pas modifié par cette fonction.


Int : lire le contenu d'un vecteur d'Int     Int 21h, Fct 35h    DOS (>= 1.0)
Int : lire le contenu d'un vecteur d'Interruption   Int 21h, Fct 35h    DOS (>= 1.0)

Cette fonction fournit en résultat le contenu actuel d'un vecteur d'interruption et donc l'adresse de la routine d'interruption correspondante.

Entrée :

AH 	= 35h

AL 	= Numéro d'interruption

Sortie :

ES 	= Adresse de segment de la routine d'interruption

BX 	= Adresse d'offset de la routine d'interruption

Remarques :

·	Pour garantir la compatibilité de vos programmes avec les versions futures du DOS, il est préférable d'appeler cette fonction pour lire un vecteur d'interruption plutôt que de lire le contenu de ce vecteur directement dans la table de vecteurs d'interruption.

·	Le contenu des registres AX, CX, DX, SI, DI, BP, CS, DS, SS et du registre de flags n'est pas modifié par cette fonction.


Int : modifier le vecteur d'Int     Int 21h, Fct 25h    DOS (>= 1.0)
Int : modifier le vecteur d'Interruption   Int 21h, Fct 25h    DOS (>= 1.0)

Cette fonction permet de rediriger n'importe quel vecteur d'interruption sur une autre routine.

Entrée :

AH 	= 25h

AL 	= Numéro d'interruption

DS 	= Nouvelle adresse de segment de la routine d'interruption

DX 	= Nouvelle adresse d'offset de la routine d'interruption

Sortie :

aucune

Remarques :

·	Avant d'appeler cette fonction, il convient tout d'abord de lire à l'aide de la fonction 35h l'ancien contenu du vecteur d'interruption à modifier et de le sauvegarder. Une fois le programme terminé, il sera préférable de rétablir cet ancien contenu à l'aide de cette même fonction.

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Mode protégé     Int 15h, Fct 89h    BIOS (>= AT)

Après appel de cette fonction, le processeur 80286 est en mode protégé.

Entrée :

AH 	= 89h

Sortie :

aucune

Remarques :

·	Cette fonction ne doit être appelée que si vous connaissez bien le fonctionnement du processeur en mode protégé car tout emploi inconsidéré de cette fonction peut aisément entraîner un plantage du système.


NMI    Int 2h    Matériel

Cette interruption est désignée par le signe NMI qui veut dire "Non Maskable Interrupt". En conséquence, son exécution ne peut pas être inhibée par l'instruction CLI qui est en principe chargée de couper court à toute interruption. Dans un PC, l'interruption NMI est chargée d'attirer l'attention sur les erreurs en mémoire vive qui laissent présager un défaut de circuit. Il y urgence car une erreur de ce type peut altérer gravement le fonctionnement du système, et même l'endommager. C'est pourquoi le système déclenche l'interruption NMI même si toutes les autres sont inhibées

Au moment de l'initialisation du système, le vecteur d'interruption correspondant reçoit la référence d'une routine du BIOS charger d'afficher un message d'erreur et d'arrêter le système.


Page de code : définir la page de code en cours     Int 21h, Fct 66h, Sous-Fct 02h    DOS (>= 3.3)

Cette fonction règle la page de code en cours dans la mesure où les commandes NLSFUNC et MODE CP PREPARE ont été préalablement appelées sur l'interface DOS et le driver COUNTRY.SYS a été implanté à travers le fichier de configuration.

Entrée :

AH 	= 66h

AL 	= 02h

BX 	= Numéro de la page de code à sélectionner

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

2 : La page de code ne peut pas être chargée

65 : Le périphérique ne peut pas être commuté vers une nouvelle page de code

Remarques :

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Page de code : lire la page de code en cours     Int 21h, Fct 66h, Sous-Fct 01h    DOS (>= 3.3)

Cette fonction retourne le numéro de la page de code en cours et le numéro de la page standard spécifiées lors du lancement du système.

Entrée :

AH 	= 66h

AL 	= 01h

Sortie :

Flag Carry = 0 : Tout va bien, dans ce cas

BX = Numéro de la page de code en cours

DX = Numéro de la page de code standard

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

2 = La page de code n'existe pas

Remarques :

·	Le contenu des registres CX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Pas à pas    Int 1h    Matériel

Cette interruption est appelée par le processeur à la suite de chaque instruction lorsque le bit TRAP du registre des indicateurs est à 1. Les débogueurs exploitent ce mode pour pouvoir suivre l'exécution d'un programme. Ils fournissent alors un gestionnaire pour cette interruption.

Pour éviter qu'elle ne se déclenche à l'intérieur même de la routine d'interruption (ce qui conduirait à des appels récursifs en nombre infini et au débordement de la pile), le processeur annule le bit TRAP au début du gestionnaire. Auparavant comme c'est le cas pour toutes les interruptions, le registre des indicateurs et notamment le bit TRAP aura été sauvegardé sur la pile.

Dès que la routine d'interruption se termine par une instruction IRET, le processeur rétablit automatiquement l'ancien contenu du bit TRAP en récupérant sur la pile le registre des indicateurs. De ce fait, l'interruption 1 sera à nouveau appelée dès que la prochaine instruction du programme à surveiller aura été exécutée.

Si le programmeur a recueilli toutes les informations nécessaires sur le programme, le mode TRAP (autrement dit le bit TRAP) peut être désactivé. Mais comment faire, alors que le programme suivi ne sait pas qu'il est surveillé et ne peut donc pas contenir d'instruction propre à mettre à zéro le bit TRAP du registre des indicateurs?

La solution de ce problème se trouve encore dans la routine de l'interruption 1. C'est à elle d'annuler le bit TRAP mais ce n'est pas si simple car ce bit été systématiquement mis à 0 à l'entrée dans le programme et il sera rempli à la sortie, lors de la récupération du registre des indicateurs, par l'ancienne valeur 1. Il faut donc avant de sortir de la routine d'interruption reprendre le registre des indicateurs sur la pile, y annuler le bit TRAP et remettre ensuite sur la pile, à son emplacement d'origine, le registre des indicateurs. Au moment de l'instruction IRET, le processeur récupère le registre des indicateurs comme si de rien n'était, mais le bit TRAP étant cette fois ci à 0, le programme continue son exécution dans les conditions normales.

Ces possibilités ne sont guère exploitées dans les applications ordinaires. C'est pourquoi le BIOS fait pointer le vecteur de l'interruption 1 sur un simple IRET, de sorte qu'il ne se passera rien de spécial si un programme met par hasard le bit TRAP à 1. Le seul effet sera un ralentissement de l'exécution puisqu'après chaque instruction l'interruption 1 sera systématiquement invoquée. L'interruption 1 par contre est très utile dans les programmes de test du genre DEBUG car elle permet de suivre à la trace des programmes en inspectant une à une les instructions et leurs conséquences.


Pays : définir le pays    Int 21h, Fct 38h, Sous-Fct 1    DOS (>= 3)

Cette fonction permet de choisir le pays actuel. Ainsi, sont du même coup fixés différents paramètres caractéristiques du pays. Ces paramètres peuvent être lus à l'aide de la sous-fonction 0 de cette même fonction. Par rapport aux fonctions précédentes du DOS qui prévoyaient que le pays ne pouvait être choisi qu'à l'aide de l'instruction COUNTRY dans le fichier CONFIG.SYS, cette fonction présente l'avantage de permettre de déterminer ou changer le pays, même après le lancement du système.

Entrée :

AH 	= 38h

DX 	= 65535

AL 	= 1 - 254 : Numéro de pays

AL 	= 255 : Numéro supérieur à 254, auquel cas

BX 	= Numéro du pays

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Code du pays incorrect

Remarques :

·	Avant d'appeler cette fonction, il est préférable de déterminer la version actuelle du DOS à l'aide de la fonction 48, pour s'assurer que cette fonction est réellement disponible.

·	Il n'est pas possible de définir séparément les différents paramètres d'un pays. Vous pouvez seulement fixer le code du pays et le DOS définira automatiquement les paramètres prédéfinis pour ce pays.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Pays : lire les symboles et formats caractéristiques d'un pays    Int 21h, Fct 38h, Sous-Fct 0    DOS (>= 3)

Cette fonction permet de déterminer les différents paramètres caractéristiques d'un pays. Elle permet d'obtenir aussi bien les paramètres pour le pays qui a été spécifié avec l'instruction COUNTRY dans le fichier CONFIG.SYS que ceux correspondant à n'importe quel autre pays. Les différents paramètres sont placés par la fonction dans le buffer qui lui a été transmis.

Entrée :

AH 	= 38h

AL	= 0

DS 	= Adresse de segment d'un buffer

DX 	= Adresse d'offset d'un buffer

AL 	= 0 : Lire paramètre pour le pays actuel

AL 	= 1 - 254 : Code du pays dont il s'agit de lire les paramètres caractéristiques

AL 	= 255 : Le code du pays dont il s'agit de lire les paramètres caractéristiques figure dans le registre BX

Sortie :

Flag Carry = 0 tout va bien.

Flag Carry = 1 : Code du pays incorrect

Remarques :

·	Avant d'appeler cette fonction, nous vous conseillons de déterminer à l'aide de la fonction 48 quelle version du DOS est utilisée, pour que vous puissiez tenir compte des différences entre les versions 2 et 3 dans la définition des registres pour l'appel et le retour de cette fonction.

·	Le buffer doit avoir une taille de 34 octets au moins. La fonction y inscrira les différents paramètres caractéristiques du pays.

·	Les différents octets du buffer contiennent, après appel de la fonction, les informations suivantes :

Octets 0 - 1 : 	Format de date

0 = USA : Mois-Jour-Année

1 = Europe : Jour-Mois-Année

2 = Japon : Année-Mois-Jour

Octets 2 - 6 : 	Symbole de la monnaie (chaîne ASCII terminée par un caractère de fin)

Octet 7 :	Code ASCII du caractère de millier

Octet 8 :	0

Octet 9 :	Code ASCII du symbole décimal

Octet 10 : 	0

Octet 11 : 	Code ASCII du séparateur dans la date

Octet 12 : 	0

Octet 13 : 	Code ASCII du séparateur de l'heure

Octet 14 : 	0

Octet 15 : 	Format de la monnaie

Bit 0 = 0 : Symbole de la monnaie avant la valeur

Bit 0 = 1 : Symbole de la monnaie après la valeur

Bit 1 = 0 : Pas d'espace entre la valeur et le symbole de la monnaie

Bit 1 = 1 : Un espace entre la valeur et le symbole de la monnaie

Octet 16 : 	Précision (nombre de chiffres après le point décimal)

Octet 17 : 	Format horaire

Bit 0 = 0 : Horloge 12 heures

Bit 0 = 1 : Horloge 24 heures

Octets 18 - 21 : 	Adresse d'une routine de conversion de caractères (voir plus bas)

Octets 22 - 33 : 	réservés

·	Le contenu des adresses 18 à 21 représente les adresses d'offset et de segment d'une procédure FAR qui sert à convertir en majuscules les caractères spéciaux d'un pays, dans le jeu de caractères du PC. Cette routine considère le contenu du registre AL comme le code d'une minuscule à convertir en majuscule. Si une majuscule de ce type existe, elle figurera dans le registre AL après appel de la fonction. Si cette majuscule n'existe pas, par contre, le contenu du registre AL restera inchangé. Nous pourrions par exemple utiliser cette routine pour convertir un é en E, par exemple.

·	Le contenu des registres AX, BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Pays : lire les symboles et formats caractéristiques du pays    Int 21h, Fct 38h    DOS (Version 2)

Cette fonction permet de déterminer les différents paramètres caractéristiques du pays qui a été spécifié avec l'instruction COUNTRY dans le fichier CONFIG.SYS.

Entrée :

AH 	= 38h

AL 	= 0

DS 	= Adresse de segment d'un buffer

DX 	= Adresse d'offset d'un buffer

Sortie :

aucune

Remarques :

·	Avant d'appeler cette fonction, nous vous conseillons de déterminer à l'aide de la fonction 48 quelle version du DOS est utilisée, pour que vous puissiez tenir compte des différences entre les versions 2 et 3 dans la définition des registres pour l'appel et le retour de cette fonction.

·	Le buffer doit avoir une taille de 32 octets au moins. La fonction y inscrira les différents paramètres caractéristiques du pays.

·	Les différents octets du buffer contiennent, après appel de la fonction, les informations suivantes :

Octets 0 - 1 : 	Format de date

0 = USA : Mois-Jour-Année

1 = Europe : Jour-Mois-Année

2 = Japon : Année-Mois-Jour

Octet 2 :	Code ASCII du symbole de la monnaie

Octet 3 :	0

Octet 4 :	Code ASCII du caractère de millier

Octet 5 :	0

Octet 6 :	Code ASCII du symbole décimal

Octet 7 :	0

Octets 8 - 31 : 	réservés

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Périphérique : lire l'état du périphérique d'entrée    Int 21h, Fct 0Bh    DOS (>= 1.0)

Cette fonction permet de déterminer si des caractères sont prêts à être lus sur le périphérique d'entrée standard.

Entrée :

AH 	= 0Bh

Sortie :

AL 	= 0 : Aucun caractère disponible

AL 	= 255 : Un ou plusieurs caractères prêts à être lus

Remarques :

·	Lorsque le caractère Ctrl-C est détecté au cours de l'exécution de cette fonction, l'interruption 23h est appelée.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Périphérique : réinitialisation des drivers de bloc     Int 21h, Fct 0Dh    DOS (>= 1.0)

Cette fonction permet de transmettre au périphérique approprié (disquette, disque dur) toutes les données censées être transmises à un driver de bloc mais qui étaient encore stockées dans un buffer interne du DOS. Les fichiers ouverts (Handles ou FCB) ne sont pas refermés.

Entrée :

AH 	= 0Dh

Sortie :

aucune

Remarques :

·	Même si cette fonction a été appelée, il faut encore refermer comme il convient tous les fichiers ouverts. Il peut arriver sinon que l'entrée de répertoire correspondant à un fichier donné n'ait pas été actualisée, auquel cas il ne sera pas possible d'accéder aux données nouvellement écrites dans le fichier.

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Point d'arrêt    Int 3h    Matériel

Cette interruption est aussi exploitée par les débogueurs. Par rapport à toutes les autres interruptions, elle présente la particularité de pouvoir être appelée à l'aide d'une instruction spéciale qui n'appartient qu'à elle seule. Les autres interruptions sont en effet appelées par une instruction machine sur 2 octets (premier octet = CDh, second octet = numéro de l'interruption) alors que l'interruption 3 se déclenche par une instruction particulière sur un seul octet seulement (le code CCh). Cette interruption convient ainsi parfaitement pour tester un programme, lorsqu'on désire l'exécuter jusqu'à un endroit déterminé où il devra s'interrompre et révéler le contenu courant des registres. Dans un débogueur on obtient ce résultat en insérant un appel à l'interruption 3 à l'endroit du programme où celui-ci devra être interrompu. Derrière cette interruption se cache en général un gestionnaire du débogueur qui affiche les contenus des registres et tout ce qu'il faut.

Vous pourriez objecter qu'à la place de l'interruption 3 toute autre interruption ferait l'affaire, pourvu que dans le gestionnaire associé on installe une routine d'affichage des registres. Cette remarque est certes judicieuse mais il ne faut pas oublier que l'interruption 3 présente l'avantage de tenir sur un seul octet. Pour comprendre la portée de cet avantage prenons un programme fictif.

Ce programme contient une instruction RET. Cette instruction prend un octet et constitue la fin d'un sous-programme. Un autre sous-programme se trouve à la suite qui commence par une instruction machine quelconque.  L'utilisateur souhaite examiner les registres à la fin du premier sous-programme, il disposera donc un point d'arrêt (c'est-à-dire un appel à l'interruption 3) à la place de l'instruction RET. Il est tout à fait avantageux que cet appel ne prenne qu'un seul octet. S'il occupait davantage de place, par exemple 2 ou 3 octets, il n'écraserait pas seulement l'instruction RET mais également tout ou partie de la première instruction du sous-programme qui suit. Si au cours de l'exécution le second sous-programme est invoqué, il se produirait une erreur capable de planter le système. Mais en limitant le point d'arrêt à un seul octet, cet incident ne se produit pas car le point d'arrêt ne peut pas écraser plus d'une seule instruction.

Jusqu'à son exploitation par un programme de mise au point, cette interruption n'a généralement pas d'application. Le système DOS l'aiguille sur une routine simplement constituée de l'instruction IRET Interrupt Return) qui rend la main au programme interrompu sans rien faire.


ROM Basic : appel de la ROM BASIC     Int 18h    ROM BASIC

Si le PC utilisé dispose d'un BASIC placé en ROM, celui-ci peut être lancé en appelant cette interruption.

Entrée :

aucune

Sortie :

aucune

Remarques :

·	De nombreux modèles récents de PC ne disposent plus d'un BASIC intégré en ROM. Dans ce cas, l'interruption 18h revient immédiatement au programme d'appel ou provoque un plantage du système. Si par contre le PC comporte bien un BASIC intégré en ROM, l'interruption 18h ne rendra pas la main au programme d'appel. Il ne sera alors plus possible de revenir au DOS à moins de déclencher un démarrage à chaud du système (en actionnant ALT-Control-Delete) ou d'éteindre puis de rallumer l'ordinateur.


SysReq : état de la touche SyReq actionnée    Int 15h, Fct 85h    BIOS (>= AT)

Si la touche SysReq est enfoncée ou relâchée, cette fonction sera appelée par la routine du clavier.

Entrée :

AH 	= 85h

AL 	= 0 : Touche a été enfoncée

AL 	= 1 : Touche a été relâchée

Sortie :

aucune

Remarques :

·	Cette fonction n'est pas conçue pour être appelée directement par un programme d'application mais elle peut être redirigée par un programme d'application sur une routine de ce programme, de façon à ce que le fait d'actionner la touche SysReq soit enregistré et entraîne les actions appropriées.


Timer    Int 8h    Matériel

Le timer du PC (un circuit 8253) reçoit 1 193 180 signaux par seconde du coeur du système constitué par un oscillateur à quartz. Au bout de 65536 de ces signaux, soit environ 18,2 fois par seconde, il génère un appel  à l'interruption 8 qui est transmis au processeur par l'intermédiaire du 8259. Comme la fréquence d'appel de cette interruption ne dépend pas de la fréquence d'horloge (variable) du système, cette interruption convient parfaitement à la mesure du temps puisqu'on sait qu'une seconde s'écoule tous les 18,2 appels. C'est dans cet esprit que l'interruption est exploitée dans un PC. Le BIOS dirige le vecteur de l'interruption sur une routine qui est donc appelée 18,2 fois par seconde. Cette routine est chargée de faire avancer un compteur de temps et d'arrêter le moteur du lecteur de disquette si aucun accès à la disquette ne s'est produit depuis un certain délai. Une fois ces tâches exécutées, la routine appelle l'interruption 1Ch qui peut être détournée par un utilisateur qui aurait besoin d'une exploitation dépendant d'un signal périodique.


Version de DOS : lire le numéro de version du DOS     Int 21h, Fct 30h    DOS (>= 1.0)

Cette fonction permet de déterminer le numéro de version du DOS sous lequel un programme est en train de tourner.

Entrée :

AH 	= 30h

Sortie :

AL 	= Numéro de version principal

AH 	= Numéro de version complémentaire

BH	= Code OEM

Remarques :

·	Le numéro de version principal est le numéro qui apparaît avant le point. Pour le numéro de version 2.1, le numéro de version principal sera donc 2.

·	Le numéro de version complémentaire est le numéro qui apparaît après le point. Ce numéro est toujours indiqué avec deux chiffres. Pour le numéro de version 2.1, le numéro de version complémentaire sera donc 10.

·	Dans le registre BH, le numéro de code OEM n'est pas généralement explicite puisque ce code n'est pas normalisé. Cependant, la règle adoptée est que le PC-DOS (d'IBM) porte le code 0.

·	Si la valeur 0 est renvoyée dans le registre AL, c'est que le programme tourne sous la version 1 du DOS, qui ne connaissait pas encore cette fonction.

·	Le contenu des registres DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Clavier

Int 9h    Matériel

Contenu du buffer clavier

Définir la fréquence de répétition

Définir le flag Break

DOSKEY : Prendre en compte la saisie d'un utilisateur

DOSKEY : Tester la présence

Entrée d'une chaîne de caractères

Entrée de caractères avec sortie

Entrée de caractères directe sans sortie

Entrée de caractères sans sortie

Entrée/sortie directe de caractère

KEYB.COM : Définir la page de codes active

KEYB.COM : Déterminer le numéro de la version

Lire le flag Break

Lire un caractère

Simuler l'appui sur une touche

Sortie d'un caractère

Sortie d'une chaîne de caractères

Test les claviers étendus

Tester l'état de la touche Break

Tester l'état du clavier

Tester les claviers étendus

Vider buffer d'entrée et appeler Fct d'entrée


Clavier    Int 9h    Matériel

Le clavier comporte un processeur Intel portant l'appellation 8048 (ou 8042 sur l'AT). Ce processeur surveille le clavier et enregistre toute pression ou tout relâchement d'une touche, ou encore tout enfoncement prolongé . Il doit renseigner le processeur central pour que le système puisse réagir de façon appropriée en lisant le code de la touche frappée. Il envoie donc un signal au 8259 qui, lorsqu'aucune interruption de priorité supérieure n'est à prendre en compte, demande au processeur central de déclencher l'interruption 9. Cette interruption appelle alors une routine du BIOS qui lit le caractère frappé au clavier et le place le buffer du clavier.


Contenu du buffer clavier    Int 16h, Fct 01h    BIOS

Cette fonction détermine si un caractère figure dans le buffer du clavier. Si c'est le cas, elle renvoie cette fonction à la fonction d'appel. Le caractère n'est toutefois pas retiré du buffer clavier, de sorte qu'il peut être à nouveau lu lors d'un appel consécutif de la fonction 1 ou 0. Dans tous les cas, la fonction revient au programme d'appel immédiatement après avoir été appelée.

Entrée :

AH 	= 01h

Sortie :

Flag Zéro = 1 : Aucun caractère dans le buffer clavier

Flag Zéro = 0 : Caractère présent, dans ce cas :

AL = 0 : Code clavier étendu, dans ce cas

AH = Code clavier étendu différent de 0

Touche normale actionnée, dans ce cas

AL = Code ASCII de la touche

AH = Code clavier de la touche

Remarques :

·	Le code ASCII d'un caractère est défini indépendamment de tel ou tel modèle de clavier, alors que le code clavier ne s'applique que sur le type de clavier connecté sur le PC.

·	Le contenu des registres CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Définir la fréquence de répétition     Int 16h, Fct 03h    BIOS (>= AT)

Cette fonction permet d'agir sur la répétition des touches du clavier pour qu'elles soient répétées automatiquement au bout d'un certain délai.

Entrée :

AH 	= 03h

AL 	= 05h

BH 	= Ralentissement jusqu'à la mise en place de la répétition

BL 	= Fréquence de répétition

Sortie :

aucune

Remarques :

·	Attention ! Cette fonction n'est pas reconnue par tous les BIOS.

·	Les valeurs suivantes peuvent être indiquées pour spécifier la durée de ralentissement dans le registre BL :

00h : 1/4 seconde

01h : 1/2 seconde

10h : 1/4 seconde

11h : 1 seconde

·	Les valeurs suivantes peuvent être utilisées pour le taux de répétition dans le registre BL :

Code	RPS*Code	RPS*	Code	RPS*	Code	RPS*

00h	30	1Fh	2,0	17h	4,0	0Fh	8,0

02h	24	1Eh	2,1	16h	4,3	0Eh	8,6

04h	20	1Dh	2,3	15h	4,6	0Dh	9,2

06h	17,1	1Ch	2,5	14h	5,0	0Ch	10,0

08h	15,0	1Bh	2,7	13h	5,5	0Bh	10,9

09h	13,3	1Ah	3,0	12h	6,0	0Ah	12,0

19h	3,3	11h	6,7

18h	3,7	10h	7,5

* Répétition/Seconde

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Définir le flag Break     Int 21h, Fct 33h, Sous-Fct 1    DOS (>= 1.0)

Le flag Break définit si le fait que la touche Ctrl-C ait été actionnée doit être testé lors de tout appel d'une fonction DOS ou seulement lorsqu'est appelée une des fonctions d'entrée et sortie de caractères. Lorsque la touche Ctrl-C est actionnée et que cet événement est effectivement testé, cela déclenche une interruption 23h. Cette fonction permet donc de mettre ou annuler ce flag.

Entrée :

AH 	= 33h

AL 	= 1

DL 	= 0 : Test seulement pour l'entrée et sortie de caractères

DL 	= 1 : Test lors de tout appel de fonction

Sortie :

aucune

Remarques :

·	Le flag Break ne fait pas partie du bloc d'environnement d'un programme et il ne vaut donc pas uniquement pour un programme bien précis. Il affecte au contraire tous les programmes qui appellent les fonctions DOS d'entrée et sortie de caractères, qui elles-mêmes testent l'apparition d'un caractère Ctrl-C ou le fait que la touche Break ait été actionnée.

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


DOSKEY : Prendre en compte la saisie d'un utilisateur    Int 2Fh, code MUX 48h, Fct 10h    MUX

Entrée :

AH	= 48h

AL	= 10h

DS:DX	= Pointeur sur structure de données

Sortie :

néant

Remarque :

·	La structure de données référencée par le pointeur en DS:DX s'étend sur 130 octets et mémorise entre autres les saisies de l'utilisateur. Elle doit être conforme au modèle suivant :

Offset	Signification	Type

00h	Taille du buffer de saisie doit être 128	1 OCTET

01h	Nombre de caractères lus - 1	1 OCTET

02h	Buffer de saisie 	128 OCTETS

Le nombre de caractères lus est reporté par DOSKEY dans la structure de données. Avant appel à DOSKEY, ce champ, contrairement à celui de la taille, n'a pas besoin d'être initialisé.


DOSKEY : Tester la présence    Int 2Fh, code MUX 48h, Fct 00h    MUX

Cette fonction permet de savoir si le programme de DOS DOSKEY.COM est chargé

Entrée :

AH	= 48h

AL	= 00h

Sortie :

AL	=00h : non installé

Remarque :

·	DOSKEY n'existe que depuis la version 5.0 de DOS

·	Notez qu'à l'inverse de fonctions semblables seule est définie la valeur qui indique que le programme DOSKEY.COM n'est pas chargé!


Entrée d'une chaîne de caractères     Int 21h, Fct 0Ah    DOS (>= 1.0)

Cette fonction permet de lire un nombre déterminé de caractères sur le périphérique d'entrée standard et de les transférer dans un buffer. L'entrée se termine lorsque la touche Entrée est actionnée. Le code de cette touche (13) est alors également placé dans le buffer, comme dernier caractère de la chaîne.

Comme l'entrée standard peut être redirigée sur un autre périphérique ou vers un fichier, les caractères entrés ne proviennent pas nécessairement du clavier. Si les caractères transmis proviennent d'un fichier, le programme d'appel n'a aucune possibilité de détecter si tous les caractères de ce fichier ont déjà été lus, autrement dit si la fin de fichier a déjà été atteinte.

Entrée :

AH 	= 0Ah

DS 	= Adresse de segment du buffer

DX 	= Adresse d'offset du buffer

Sortie :

aucune

Remarques :

·	Le premier octet du buffer définit le nombre maximal de caractères (y compris le Carriage Return final) qui pourront être lus et placés dans le buffer à partir de la cellule de mémoire numéro deux. Ce paramètre doit être inscrit dans le buffer avant d'appeler la fonction, pour que celle-ci sache combien de caractères elle doit lire au maximum.

·	Le DOS inscrit dans la cellule de mémoire 1, une fois le travail terminé, le nombre de caractères lus à l'exception du Carriage Return.

·	Le buffer doit donc être d'une longueur égale au nombre de caractères à entrer plus 2 octets.

·	Dès que l'avant-dernière cellule de mémoire du buffer est atteinte, l'entrée d'autres caractères entraîne l'émission d'un bip et seule la touche Entrée est encore acceptée pour conclure l'entrée.

·	Les codes clavier étendus occupent deux octets dans le buffer. Le premier octet contient le code 0 et le second contient le code de la touche étendue.

·	Lorsque le caractère Ctrl-C est détecté au cours de l'entrée, l'interruption 23h est appelée.

·	L'entrée peut être éditée à l'aide de la touche Backspace et des touches curseur, sans que ces touches soient sauvegardées dans le buffer.

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Entrée de caractères avec sortie    Int 21h, Fct 01h    DOS (>= 1.0)

Un caractère est lu sur le périphérique d'entrée standard et sorti sur le périphérique de sortie standard. Si aucun caractère n'est encore prêt au moment de l'appel de fonction, la fonction attend jusqu'à ce qu'un caractère soit disponible. Comme les entrée et sortie standard peuvent être redirigées, cette fonction ne lit pas nécessairement un caractère au clavier et ne le sort pas nécessairement sur l'écran. Les caractères entrés peuvent donc parfaitement provenir d'un autre périphérique ou d'un fichier. Dans ce dernier cas cependant, l'entrée n'est pas redirigée sur le clavier lorsqu'est atteinte la fin du fichier. La fonction continuera donc à essayer de lire des caractères dans le fichier, bien que ce ne soit plus possible.

Entrée :

AH 	= 01h

Sortie :

AL 	= Le caractère lu

Remarques :

·	Lorsque des codes étendus sont lus, le code 0 est tout d'abord renvoyé dans le registre AL. La fonction doit être appelée à nouveau pour lire le code étendu lui-même.

·	Lorsque le caractère entré est le caractère Control C (Code ASCII 3), l'interruption 23h est appelée.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Entrée de caractères directe sans sortie    Int 21h, Fct 07h    DOS (>= 1.0)

Un caractère est lu sur le périphérique d'entrée standard mais sans être sorti sur le périphérique de sortie standard. Si aucun caractère n'est disponible au moment de l'appel de fonction, la fonction attend jusqu'à ce qu'un caractère soit disponible.

Le caractère reçu n'est pas examiné par le système d'exploitation, de sorte que rien ne se passe lorsqu'apparaît un caractère Ctrl-C.

Comme l'entrée standard peut être redirigée sur un autre périphérique ou vers un fichier, le caractère lu ne doit pas nécessairement provenir du clavier. Si les caractères transmis proviennent d'un fichier, le programme d'appel n'a aucune possibilité de détecter si tous les caractères de ce fichier ont déjà été lus, autrement dit si la fin du fichier a ou non déjà été atteinte.

Entrée :

AH 	= 07h

Sortie :

AL 	= Le caractère lu

Remarques :

·	Lorsque des codes étendus sont lus, le code 0 est tout d'abord renvoyé dans le registre AL. La fonction doit être appelée à nouveau pour lire le code étendu lui-même.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Entrée de caractères sans sortie    Int 21h, Fct 08h    DOS (>= 1.0)

Un caractère est lu sur le périphérique d'entrée standard mais sans être sorti sur le périphérique de sortie standard. Si aucun caractère n'est disponible au moment de l'appel de fonction, la fonction attend jusqu'à ce qu'un caractère soit disponible.

Comme l'entrée standard peut être redirigée sur un autre périphérique ou vers un fichier, le caractère lu ne doit pas nécessairement provenir du clavier. Si les caractères transmis proviennent d'un fichier, le programme d'appel n'a aucune possibilité de détecter si tous les caractères de ce fichier ont déjà été lus, autrement dit si la fin du fichier a ou non déjà été atteinte.

Entrée :

AH 	= 08h

Sortie :

AL 	= Le caractère lu

Remarques :

·	Lorsque des codes étendus sont lus, le code 0 est tout d'abord renvoyé dans le registre AL. La fonction doit être appelée à nouveau pour lire le code étendu lui-même.

·	Lorsque le caractère Ctrl-C est détecté au cours de l'exécution de cette fonction, l'interruption 23h est appelée.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Entrée/sortie directe de caractère    Int 21h, Fct 06h    DOS (>= 1.0)

Cette fonction permet de sortir des caractères sur le périphérique de sortie standard ou de les lire sur le périphérique d'entrée standard. Le caractère reçu ou écrit chaque fois n'est pas examiné par le système d'exploitation. Rien de particulier ne se produit donc lorsqu'un caractère Ctrl-C apparaît. Comme l'entrée et la sortie standard peuvent être redirigées sur d'autres périphériques ou vers un fichier, les caractères sortis ne doivent pas nécessairement apparaître sur l'écran ni les caractères lus provenir obligatoirement du clavier. Toutefois, lorsque l'accès se fait sur un fichier, il est impossible pour le programme d'appel de détecter si tous les caractères de ce fichier ont déjà été lus ou bien si le support (disquette, disque dur) sur lequel figure ce fichier est déjà plein.

Pour l'entrée d'un caractère, la fonction n'attend pas qu'un caractère soit prêt mais revient immédiatement au programme d'appel dans tous les cas.

Entrée :

AH 	= 06h

DL 	= 0 - 254 : Sortir ce caractère

DL 	= 255 : Lire un caractère

Sortie :

Pour la sortie de caractères : aucune

Pour l'entrée de caractères :

Flag Zéro =1 : aucun caractère n'est prêt

Flag Zéro =0 : Le caractère entré figure dans le registre AL

Remarques :

·	Lorsque des codes étendus sont lus, le code 0 est tout d'abord renvoyé dans le registre AL. La fonction doit être appelée à nouveau pour lire le code étendu lui-même.

·	Le caractère de code ASCII 255 ne peut être sorti à l'aide de cette fonction puisqu'il est interprété comme d'entrée d'un caractère.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


KEYB.COM : Définir la page de codes active    Int 2Fh, code MUX ADh, Fct 81h    MUX

Cette fonction permet de fixer la page de codes active.

Entrée :

AH	= Adh

AL	= 81

BX	= Numéro de la page de codes

Sortie :

Indicateur de retenue

= 0 : ok

=1 : erreur. Dans ce cas

AX=0001 "Page de codes inconnue"

Sortie :

néant

Remarque :

·	Les pages de codes suivantes sont reconnues par KEYB :

Code	Jeu de caractères

437	USA

850	Multilingue (tous pays européens )

860	Portugal

863	Canada français

865	Scandinavie

·	Cette fonction ne devrait être invoquée que si un appel à la fonction 80h a prouvé au préalable que KEYB.COM est installé


KEYB.COM : Déterminer le numéro de la version    Int 2Fh, code MUX ADh, Fct 80h    MUX

Cette fonction indique le numéro de la version du driver de clavier de DOS appelé KEYB.COM.

Entrée :

AH	= Adh

AL	= 80h

BX	=0

Sortie :

BH	= partie majeure du numéro de la version

BL	= partie mineure du même numéro

Remarque :

·	Si BH et BL sont égaux à 0, c'est que KEYB.COM n'est pas installé


Lire le flag Break     Int 21h, Fct 33h, Sous-Fct 0    DOS (>= 1.0)

L'indicateur Break définit si le fait que la touche Ctrl-C ait été actionnée doit être testé lors de tout appel d'une fonction DOS ou seulement lorsqu'est appelée une des fonctions d'entrée et sortie de caractères. Lorsque la touche Ctrl-C est actionnée et que cet événement est effectivement testé, cela déclenche une interruption 23h. Cette fonction permet donc de lire la teneur actuelle de ce flag.

Entrée :

AH 	= 33h

AL 	= 0

Sortie :

DL 	= 0 : Test seulement pour l'entrée et sortie de caractères

DL 	= 1 : Test lors de tout appel de fonction

Remarques :

·	L'indicateur Break ne fait pas partie du bloc d'environnement d'un programme et il ne vaut donc pas uniquement pour un programme bien précis. Il affecte au contraire tous les programmes qui appellent les fonctions DOS d'entrée et sortie de caractères qui, elles-mêmes, testent l'apparition d'un caractère Ctrl-C ou le fait que la touche Break ait été actionnée.

·	Le contenu des registres AX, BX, CX, DH, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Lire un caractère    Int 16h, Fct 00h    BIOS

Cette fonction lit un caractère dans le buffer clavier. Si aucun caractère n'y est stocké, la fonction attend qu'un caractère ait été entré. Le caractère lu est retiré du buffer clavier.

Entrée :

AH 	= 00h

Sortie :

AL 	= 0 : Code clavier étendu, dans ce cas :

AH = Code clavier étendu différent de 0

Touche normale actionnée, dans ce cas

AL = Code ASCII de la touche

AH = Code clavier de la touche

Remarques :

·	Le code ASCII d'un caractère est défini indépendamment de tel ou tel modèle de clavier, alors que le code clavier ne s'applique que sur le type de clavier connecté sur le PC.

·	Le contenu des registres CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Simuler l'appui sur une touche     Int 16h, Fct 05h    BIOS (>= AT)

Cette fonction permet à un programme de simuler l'appui sur une touche en ajoutant un code de touche particulier à la fin actuelle du buffer de clavier.

Entrée :

AH 	= 05h

CH 	= Scan code de la touche

CL 	= Code ASCII de la touche

Sortie :

AL 	= 00h:ok

AL 	= 01h : buffer de clavier saturé

Remarques :

·	Attention ! Tous les BIOS ne reconnaissent pas cette fonction.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Sortie d'un caractère    Int 21h, Fct 02h    DOS (>= 1.0)

Cette fonction permet de sortir un caractère sur le périphérique de sortie standard. Comme ce périphérique peut être redirigé, le caractère ne doit pas nécessairement être sorti sur l'écran mais peut aussi être envoyé sur un autre périphérique ou dans un fichier. Si toutefois le support (disquette, disque dur) sur lequel figure le fichier est déjà plein, la fonction ne détecte pas cette situation et elle continue à essayer d'écrire des caractères dans ce fichier.

Entrée :

AH 	= 02h

DL 	= Code du caractère à sortir

Sortie :

aucune

Remarques :

·	Si les caractères sont envoyés sur l'écran, les codes de commande tels que Backspace, Carriage Return et Line Feed sont traités comme tels. Si par contre la sortie est redirigée vers un fichier, les caractères y sont sauvegardés comme des codes ASCII normaux.

·	Après sortie du caractère, le DOS teste si un caractère Ctrl-C (code ASCII 3) a été reçu ou entré entre-temps. Si c'est le cas, l'interruption 23h est appelée.

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Sortie d'une chaîne de caractères     Int 21h, Fct 09h    DOS (>= 1.0)

Cette fonction permet de sortir une chaîne de caractères sur le périphérique de sortie standard. Comme ce périphérique standard peut être redirigé sur un autre périphérique ou vers un fichier, il n'y a aucune garantie que la chaîne de caractères apparaisse sur l'écran. Si la sortie est redirigée sur un fichier, le programme d'appel n'a aucune possibilité de détecter si le support (disquette, disque dur) sur lequel figure le fichier est déjà plein, autrement dit s'il est encore possible d'écrire la chaîne de caractères dans le fichier.

Entrée :

AH 	= 09h

DS 	= Adresse de segment de la chaîne de caractères

DX 	= Adresse d'offset de la chaîne de caractères

Sortie :

aucune

Remarques :

·	La chaîne de caractères doit être stockée dans la mémoire sous forme d'une séquence d'octets correspondant aux codes ASCII des caractères composant la chaîne. La fin de la chaîne de caractères doit être signalée au DOS à l'aide d'un caractère "$" (code ASCII 36).

·	Si la chaîne de caractères contient des codes de commande comme Backspace, Carriage Return ou Line Feed, ceux-ci seront traités comme tels.

·	Seul le contenu du registre AL est modifié par l'appel de cette fonction.


Test les claviers étendus     Int 16h, Fct 11h    BIOS (>= AT)
Tester les claviers étendus     Int 16h, Fct 11h    BIOS (>= AT)

Cette fonction est conçue spécialement pour tester la présence de claviers étendus (F11 + F12) avec 101 ou 102 touches. Elle fonctionne comme la fonction 00h, mais ne construit pas les scan codes des touches selon la disposition d'un clavier normal à 84 touches.

Entrée :

AH 	= 11h

Sortie :

Flag zéro	= 1 : pas de caractères dans le buffer de clavier

Flag zéro	= 0 : présence de caractères, dans ce cas

AL 	= 0 : code clavier étendu, dans ce cas

AH 	= code clavier étendu

AL	= différent de 0 : touche normale, dans ce cas

AL 	= code ASCII de la touche

AH 	= scan code de la touche

Remarques :

·	Attention ! Tous les BIOS ne reconnaissent pas cette fonction.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Tester l'état de la touche Break    Int 23h    DOS

Cette interruption, ou plutôt le vecteur d'interruption correspondant, est également utilisée pour stocker l'adresse d'une routine. Il s'agit ici de la routine qui est appelée chaque fois qu'un caractère Ctrl-C est identifié ou bien que la touche Break est actionnée. Il serait donc possible d'appeler cette routine à l'aide de l'instruction (langage machine) INT mais cela ne doit jamais être tenté car cette routine est conçue comme une procédure FAR et non comme une routine d'interruption.

Un programme peut, au cours de son exécution, modifier le contenu de ce vecteur d'interruption, qui est stocké à partir de la cellule de mémoire 0000:008C, pour que ce ne soit plus la routine du DOS mais une routine du programme qui soit appelée lorsqu'un caractère Ctrl-C est rencontré. C'est un moyen, par exemple, d'empêcher que son exécution puisse être interrompue par la routine du DOS lorsqu'un caractère Ctrl-C est reçu. Lorsque cette routine sera appelée, tous les registres présenteront exactement la valeur qu'ils avaient lorsque avait été appelée la fonction DOS interrompue. Le programme peut alors entreprendre une réaction appropriée à la situation (par exemple en sortant un message sur l'écran) puis rendre le contrôle au DOS à l'aide de l'instruction (langage machine) IRET. Il est également possible de rendre le contrôle au DOS à l'aide d'une instruction (langage machine) FAR ENTREE mais dans ce cas la réaction du DOS dépendra de l'état du flag Carry. Si ce flag est mis, le DOS interrompra l'exécution du programme. S'il est au contraire annulé, rien ne se passera et l'exécution du programme reprendra normalement.

Lorsqu'un programme modifie le contenu de ce vecteur d'interruption, il peut parfaitement arriver qu'il soit terminé sans avoir restauré l'ancien contenu de ce vecteur. Or il se peut que la mémoire RAM qu'il occupait ait été à nouveau libérée et qu'elle soit réemployée par d'autres programmes, auquel cas la routine Ctrl-C risque d'avoir été effacée par d'autres données. Il peut en résulter un plantage du système si un caractère Ctrl-C apparaît, puisqu'un code tout à fait inadapté figure maintenant à la place de l'ancienne routine Ctrl-C.

Pour éviter cela, le DOS sauvegarde le contenu de ce vecteur d'interruption dans le PSP du programme à exécuter avant de lui passer la main. Lorsqu'un programme est terminé, le contenu du vecteur d'interruption est tout d'abord recopié du PSP dans le vecteur, après quoi le contrôle est rendu au programme-père.


Tester l'état du clavier     Int 16h, Fct 02h    BIOS

Cette fonction permet de consulter la position de certaines touches de commande ainsi que l'état de différents modes du clavier.

Entrée :

AH 	= 02h

Sortie :

AL 	= Etat du clavier

Bit 0 = 1	touche Maj droite appuyée

Bit 1 = 1	touche Maj gauche appuyée

Bit 2 = 1	touche Ctrl appuyée

Bit 3 = 1	touche Alt appuyée

Bit 4 = 1	touche Arrêt Défil appuyée

Bit 5 = 1	touche Verr Num appuyée

Bit 6 = 1	touche Verr Maj appuyée

Bit 7 = 1	touche Ins appuyée

Remarques :

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Tester les claviers étendus     Int 16h, Fct 10h    BIOS (>= AT)

Cette fonction est conçue spécialement pour tester la présence de claviers étendus (F11 + F12) avec 101 ou 102 touches. Elle fonctionne comme la fonction 00h, mais ne construit pas les scan codes des touches selon la disposition d'un clavier normal à 84 touches.

Entrée :

AH 	= 10h

AH 	= scan code de la touche

AL 	= code ASCII de la touche

Remarques :

·	Attention ! Tous les BIOS ne reconnaissent pas cette fonction.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Vider buffer d'entrée et appeler Fct d'entrée     Int 21h, Fct 0Ch    DOS (>= 1.0)

Cette fonction vide tout d'abord le buffer d'entrée et appelle ensuite une des fonctions d'entrée de caractères. Comme les fonctions d'entrée de caractères tirent tous leurs caractères du périphérique d'entrée standard et que ce dernier n'est pas nécessairement le clavier, le fait de vider le buffer d'entrée ne présente d'intérêt que si le périphérique d'entrée standard est le clavier. Dans ce cas en effet, il se peut que des caractères aient été entrés avant appel de la fonction mais n'aient pas encore été lus par celle-ci. En vidant le buffer, on efface donc ces caractères pour avoir l'assurance que la fonction appelée ensuite ne recevra que des caractères entrés au cours de l'exécution de cette fonction.

Entrée :

AH 	= 0Ch

AL 	= Numéro de la fonction d'appel

Pour l'appel de la fonction 10 :

DS = Adresse de segment du buffer d'entrée

DX = Adresse d'offset du buffer d'entrée

Sortie :

Pour les fonctions 01h, 06h, 07h et 08h :

AL = le caractère entré

Pour la fonction 0Ah : aucune

Remarques :

·	Les numéros de fonction 01h, 06h, 07h, 08 et 0Ah peuvent seuls être transmis à cette fonction comme fonctions à appeler.

·	Seul le contenu du registre AL est modifié par l'appel de cette fonction.


Ecran, Vidéo, VGA/SVGA/VESA

Attribut	définir attribut de clignotement

Caractère	charger et activer le jeu de caractères 8*14

Caractère	charger et activer un jeu de caractères défini par l'utilisateur

Caractère	charger jeu de caractères 8*16

Caractère	charger le jeu de caractères 8*14

Caractère	charger le jeu de caractères 8*16

Caractère	charger le jeu de caractères 8*8

Caractère	charger le jeu de caractères 8*8

Caractère	charger le jeu de caractères défini par l'utilisateur

Caractère	écrire un caractère

Caractère	écrire un caractère

Caractère	écrire un caractère/une couleur

Caractère	lire des informations sur le générateur de caractères

Caractère	sélectionner un jeu de caractères

Caractère	sortie d'une chaîne de caractères

Configuration	lire la configuration EGA/VGA

Copie d'écran	définir une autre routine de copie d'écran

Couleur	activer ou désactiver le chargement des registres de palette

Couleur	activer/désactiver la conversion en gris des registres de couleur DAC

Couleur	Charger plusieurs registres de couleur DAC

Couleur	Charger un registre de couleur DAC

Couleur	convertir le contenu des registres de couleur DAC en nuances de gris

Couleur	définir la couleur du cadre de l'écran

Couleur	définir le contenu de plusieurs registres de couleur DAC

Couleur	définir le registre de masque DAC

Couleur	définir le registre de palette

Couleur	définir tous les registres de palette

Couleur	écrire un caractère/une couleur

Couleur	lire la méthode de sélection de couleur et le contenu du registre de sélection de couleur

Couleur	Lire le contenu de tous les registres de palette et le registre Overscan

Couleur	lire le contenu du registre de masque DAC

Couleur	lire le registre de palette

Couleur	lire un des registres de couleur DAC

Couleur	sélectionner la palette de couleurs

Couleur	sélectionner les couleurs de cadre et de fond

Crayon optique	lire la position du crayon optique

Curseur	activer/désactiver l'émulation du curseur

Curseur	définir l'apparence du curseur

Curseur	lire la position du curseur

Curseur	positionner le curseur

Définir la méthode de sélection des couleurs ou sélectionner un groupe de registres DAC

Ecran	définir le nombre de lignes de balayage

Ecran	écrire un point graphique

Ecran	faire défiler les lignes de texte vers le bas

Ecran	faire défiler les lignes de texte vers le haut

Ecran	interdire le rafraîchissement de l'écran

Ecran	lire le contenu du registre Overscan

Ecran	lire un point graphique

Ecran	sélectionner la page actuelle de l'écran

Lire un caractère/une couleur

Mode vidéo	définir le mode vidéo

Mode vidéo	lire le mode vidéo

VESA	activer le mode VESA

VESA	lire la fenêtre d'accès sur la RAM vidéo

VESA	lire la taille du buffer de stockage

VESA	lire le mode en cours

VESA	lire les données-clés d'un mode VESA

VESA	placer la fenêtre d'accès sur la RAM vidéo

VESA	restaurer l'état vidéo de la carte Super VGA

VESA	sauver l'état vidéo de la carte Super VGA

Vidéo	autoriser/verrouiller l'accès de l'unité centrale à la RAM vidéo

Vidéo	définir les cartes vidéo primaire et secondaire

Vidéo	demander la taille de la zone de sauvegarde

Vidéo	lire le type d'adaptateur vidéo primaire et secondaire

Vidéo	lire les informations d'état concernant le mode vidéo et le BIOS VGA

Vidéo	lire les spécificités de la carte Super VGA

Vidéo	restaurer l'état vidéo

Vidéo	sauvegarder l'état vidéo


Attribut : définir attribut de clignotement    Int 10h, Fct 10h, Sous-Fct 03h    BIOS EGA/VGA

L'appel de cette fonction permet de savoir si le bit 7 de l'octet d'attribut d'un caractère entraîne, en mode de texte, un clignotement de ce caractère, ou un affichage plus intense du fond du caractère.

Entrée :

AH	= 10h

AL	= 03h

BL	= attribut de clignotement

0 = couleur de fond intense

1 = clignotement

Sortie :

aucune

Remarques :

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Caractère : charger et activer le jeu de caractères 8*14    Int 10h, Fct 11h, Sous-Fct 11h    BIOS EGA/VGA

Cette fonction charge le jeu de caractères 8*14 points tout entier du BIOS en ROM de la carte EGA/VGA dans l'une des deux tables de caractères et l'active en programmant les registres du CRTC.

Entrée :

AH	= 11h

AL	= 11h

BL	= table de caractères appelée (0 ou 1)

Sortie :

aucune

Remarques :

·	Le fait d'appeler cette fonction fait automatiquement passer l'écran en affichage de 25 lignes pour la carte EGA et de 28 lignes pour la carte VGA.

·	Les lignes de début et de fin du curseur clignotant de l'écran sont automatiquement adaptées à la hauteur de la nouvelle matrice de caractère.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Caractère : charger et activer un jeu de caractères défini par l'utilisateur    Int 10h, Fct 11h, Sous-Fct 10h    BIOS EGA/VGA

Cette fonction charge un jeu de caractères défini par l'utilisateur dans l'une des deux tables de caractères EGA/VGA et l'active en programmant les registres du CRTC.

Entrée :

AH	= 11h

AL	= 10h

BH	= lignes par caractère (et donc octets par caractère)

BL	= table de caractères appelée (0 ou 1)

CX	= nombre de caractères dans la table

DX	= code ASCII du premier caractère dans la table

ES	= adresse de segment de la table de caractères dans la RAM

BP	= adresse d'offset de la table de caractères dans la RAM

Sortie :

aucune

Remarques :

·	256 caractères peuvent être chargés au maximum par table de caractères.

·	Le nombre de lignes de texte affichées sur l'écran dépend de la hauteur des caractères. Il est égal au nombre de lignes de l'écran (350 ou 480) divisé par la hauteur de caractère.

·	Les lignes de début et de fin du curseur clignotant de l'écran sont automatiquement adaptées à la hauteur de la nouvelle matrice de caractère.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Caractère : charger jeu de caractères 8*16    Int 10h, Fct 11h, Sous-Fct 14h    VGA

Cette fonction charge le jeu de caractères 8*16 points complet du BIOS en ROM de la carte VGA dans l'une des deux tables de caractères et l'active en programmant les registres CRTC.

Entrée :

AH	= 11h

AL	= 14h

BL	= table de caractères appelée (0 ou 1)

Sortie :

Aucune

Remarques :

·	Après appel de cette fonction, la carte VGA affiche 25 lignes de texte sur l'écran.

·	Les lignes de départ et de fin du curseur clignotant de l'écran sont automatiquement adaptées à la hauteur de la nouvelle matrice de caractère.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Caractère : charger le jeu de caractères 8*14    Int 10h, Fct 11h, Sous-Fct 01h    BIOS EGA/VGA

Cette fonction charge le jeu de caractères 8*14 points tout entier du BIOS en ROM dans l'une des deux tables de caractères.

Entrée :

AH	= 11h

AL	= 01h

BL	= table de caractères appelée (0 ou 1)

Sortie :

aucune

Remarques :

·	Le jeu de caractères chargé n'est pas activé et les registres du CRTC ne sont pas non plus programmés de façon à adapter l'affichage des caractères sur l'écran à la taille des caractères. Les modifications ne sont donc perceptibles sur l'écran que si la table de caractères dans laquelle sont chargées les définitions de caractères est la table actuellement activée. La carte EGA affiche dans ce cas 25 lignes sur l'écran, la carte VGA 28.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Caractère : charger le jeu de caractères 8*16    Int 10h, Fct 11h, Sous-Fct 04h    VGA

Cette fonction charge le jeu de caractères 8*16 points complet du BIOS en ROM de la carte VGA dans l'une des deux tables de caractères.

Entrée :

AH	= 11h

AL	= 04h

BL	= table de caractères appelée (0-7)

Sortie :

Aucune

Remarques :

·	Le jeu de caractères chargé n'est pas activé et les registres du CRTC ne sont pas non plus programmés de façon à adapter l'affichage des caractères sur l'écran à la taille des caractères. Les modifications ne sont donc perceptibles sur l'écran que si la table de caractères dans laquelle sont chargées les définitions de caractères est la table actuellement activée. La carte VGA affiche dans ce cas 25 lignes sur l'écran.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Caractère : charger le jeu de caractères 8*8    Int 10h, Fct 11h, Sous-Fct 02h    BIOS EGA/VGA

Cette fonction charge le jeu de caractères 8*8 points tout entier du BIOS en ROM dans l'une des deux tables de caractères.

Entrée :

AH	= 11h

AL	= 02h

BL	= table de caractères appelée (0 ou 1)

Sortie :

aucune

Remarques :

·	Le jeu de caractères chargé n'est pas activé et les registres du CRTC ne sont pas non plus programmés de façon à adapter l'affichage des caractères sur l'écran à la taille des caractères. Les modifications ne sont donc perceptibles sur l'écran que si la table de caractères dans laquelle sont chargées les définitions de caractères est la table actuellement activée. La carte EGA affiche dans ce cas 43 lignes sur l'écran, la carte VGA 50.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Caractère : charger le jeu de caractères 8*8    Int 10h, Fct 11h, Sous-Fct 12h    BIOS EGA/VGA

Cette fonction charge le jeu de caractères 8*8 points tout entier du BIOS en ROM de la carte EGA/VGA dans l'une des deux tables de caractères et l'active en programmant les registres du CRTC.

Entrée :

AH	= 11h

AL	= 12h

BL	= table de caractères appelée (0 ou 1)

Sortie :

Aucune

Remarques :

·	Après appel de cette fonction, la carte EGA affiche 43 lignes sur l'écran, et la carte VGA 50 lignes.

·	Les lignes de départ et de fin du curseur clignotant de l'écran sont automatiquement adaptées à la hauteur de la nouvelle matrice de caractère.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Caractère : charger le jeu de caractères défini par l'utilisateur    Int 10h, Fct 11h, Sous-Fct 00h    BIOS EGA/VGA

Cette fonction charge un jeu de caractères défini par l'utilisateur de la mémoire RAM dans l'une des deux tables de caractères EGA/VGA.

Entrée :

AH	= 11h

AL	= 00h

BH	= lignes par caractère (et donc octets par caractère)

BL	= table de caractères appelée (0 ou 1)

CX	= nombre de caractères dans la table

DX	= code ASCII du premier caractère dans la table

ES	= adresse de segment de la table de caractères dans la RAM

BP	= adresse d'offset de la table de caractères dans la RAM

Sortie :

aucune

Remarques :

·	512 caractères peuvent être chargés au maximum par table de caractères.

·	Le jeu de caractères chargé n'est pas activé et les registres du CRTC ne sont pas non plus programmés de façon à adapter l'affichage des caractères sur l'écran à la taille des caractères. Les modifications ne sont donc perceptibles sur l'écran que si la table de caractères dans laquelle sont chargées les définitions de caractères est la table actuellement activée.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Caractère : écrire un caractère    Int 10h, Fct 0Ah    BIOS

Un caractère est écrit dans la position actuelle du curseur dans la page écran spécifiée. La couleur de l'ancien caractère dans cette position de l'écran est maintenue.

Entrée :

AH 	= 0Ah

BH 	= Numéro de la page écran

CX 	= Nombre d'écritures successives du caractère

AL 	= Code ASCII du caractère

Sortie :

aucune sortie

Remarques :

·	Si le caractère indiqué doit être sorti plusieurs fois (auquel cas la valeur du registre CX est supérieure à 1), il faut, en mode graphique, que tous les caractères rentrent dans la page écran actuelle.

·	Les codes de commande "bell", "carriage return", etc..., ne sont pas identifiés comme tels mais sortis comme des codes ASCII normaux.

·	Cette fonction permet également de sortir des caractères en mode graphique. Dans ce cas, les modèles des caractères portant les codes 0 à 127 sont tirés dans une table en ROM et les modèles des caractères portant les codes 128 à 255 sont tirés d'une table en RAM qui doit avoir été installée préalablement avec l'instruction GRAFTABL du DOS.

·	En mode de texte, le contenu du registre BL définit l'octet d'attribut du caractère. En mode graphique, il détermine la couleur du caractère. En mode graphique 640*200 points, les valeurs 0 et 1, en mode graphique 320*200 points, les valeurs 0 à 3 sont possibles pour définir les différentes couleurs de la palette de couleurs sélectionnée.

·	Si le mode graphique est activé lors de la sortie de caractères et si le bit 7 du registre BL est fixé, le modèle de caractère est combiné par un 'ou exclusif' avec les points graphiques figurant sous ce caractère.

·	Cette fonction ne fait pas avancer le curseur vers la prochaine position de l'écran.

Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Caractère : écrire un caractère     Int 10h, Fct 0Eh    BIOS

Un caractère est écrit dans la position actuelle du curseur dans la page écran actuelle. La couleur de l'ancien caractère dans cette position de l'écran est maintenue.

Entrée :

AH 	= 0Eh

AL 	= Code ASCII du caractère

BL 	= Couleur de premier plan du caractère (en mode graphique uniquement)

Sortie :

aucune sortie

Remarques :

·	Cette fonction n'interprète pas les différents codes de commande tels que "bell" et "carriage return" comme des codes ASCII normaux mais comme des codes de commande particuliers. La sortie du caractère "bell" produira par exemple un bip.

·	Après sortie d'un caractère à l'aide de cette fonction, la position du curseur est incrémentée de sorte que le caractère suivant sera sorti dans la position suivante de l'écran. Lorsque la dernière position de l'écran est atteinte, l'écran défile d'une ligne vers le haut et la sortie se poursuit dans la première colonne de la dernière ligne de l'écran.

·	La couleur de premier plan se réfère au mode graphique actuel.

·	En mode 640*200 points, seules les valeurs 0 et 1 sont possibles.

·	En mode 320*200 points, les valeurs 0 à 3 sont autorisées. Elles génèrent une couleur en fonction de la palette de couleurs sélectionnée. La valeur 0 correspond à la couleur sélectionnée pour le fond, 1 à la première couleur de la palette sélectionnée, 2 à la seconde, etc...

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Caractère : écrire un caractère/une couleur    Int 10h, Fct 09h    BIOS

Ecrire un caractère dans une couleur déterminée dans la position actuelle du curseur (dans la page écran spécifiée).

Entrée :

AH 	=  09h

BH 	= Numéro de la page écran

CX 	= Nombre d'écritures successives du caractère

AL 	= Code ASCII du caractère

BL 	= Attribut

Sortie :

aucune sortie

Remarques :

·	Si le caractère indiqué doit être sorti plusieurs fois (auquel cas la valeur du registre CX est supérieure à 1), il faut, en mode graphique, que tous les caractères rentrent dans la page écran actuelle.

·	Les codes de commande "bell", "carriage return", etc..., ne sont pas identifiés comme tels mais sortis comme des codes ASCII normaux.

·	Cette fonction permet également de sortir des caractères en mode graphique. Dans ce cas, les modèles des caractères portant les codes 0 à 127 sont tirés dans une table en ROM et les modèles des caractères portant les codes 128 à 255 sont tirés d'une table en RAM qui doit avoir été installée préalablement avec l'instruction GRAFTABL du DOS.

·	En mode de texte, le contenu du registre BL définit l'octet d'attribut du caractère. En mode graphique, il détermine la couleur du caractère. En mode graphique 640*200 points, les valeurs 0 et 1, en mode graphique 320*200 points, les valeurs 0 à 3 sont possibles pour définir les différentes couleurs de la palette de couleurs sélectionnée.

·	Si le mode graphique est activé lors de la sortie de caractères et si le bit 7 du registre BL est fixé, le modèle de caractère est combiné par un 'ou exclusif' avec les points graphiques figurant sous ce caractère.

·	Seule la page écran actuelle peut être modifiée par cette fonction

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Caractère : lire des informations sur le générateur de caractères    Int 10h, Fct 11h, Sous-Fct 30h    BIOS EGA/VGA

Cette fonction permet d'obtenir différentes informations sur l'état actuel du générateur de caractères.

Entrée :

AH	= 11h

AL	= 30h

BH	= Type d'informations recherchées

0 = Contenu du vecteur d'interruption 1Fh

1 = Contenu du vecteur d'interruption 43h

2 = Adresse de la table de caractères 8*14 en ROM

3 = Adresse de la table de caractères 8*8 en ROM

4 = Adresse de la seconde moitié de la table de caractères 8*8

5 = Adresse de la table de caractères 9*14 alternative en ROM

6 = Adresse de la table de caractères 8*16 alternative en ROM

7 = Adresse de la table de caractères 9*16 alternative en ROM

Sortie :

CX	= Hauteur de la matrice de caractère actuelle

DL	= Nombre de colonnes par ligne - 1

ES	= Adresse de segment du pointeur testé

BP	= Adresse de segment du pointeur testé

Remarques :

·	Le contenu des registres BX, DH, SI, DI ainsi que celui des registres de segment CS, DS et SS n'est pas modifié par cette fonction.


Caractère : sélectionner un jeu de caractères    Int 10h, Fct 11h, Sous-Fct 03h    BIOS EGA/VGA

Active un (ou deux) des quatre jeux de 256 caractères.

Entrée :

AH	= 11h

AL	= 03h

BL	= numéro du jeu de caractères à activer

Sortie :

aucune

Remarques :

·	Les bits 0 et 1 du registre BL spécifient le numéro du jeu de caractères auquel il faut accéder lorsque le bit 3 de l'octet d'attribut vaut 0.

·	Les bits 2 et 3 du registre BL spécifient le numéro du jeu de caractères auquel il faut accéder lorsque le bit 3 de l'octet d'attribut vaut 1.

·	Si le contenu des bits 0 et 1 ainsi que celui des bits 2 et 3 du registre BL est identique, le bit 3 de l'octet d'attribut d'un caractère est sans effet sur le code ASCII du caractère affiché. Seuls 256 caractères différents peuvent donc être affichés sur l'écran.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Caractère : sortie d'une chaîne de caractères     Int 10h, Fct 13h    BIOS (>= AT)

Une chaîne de caractères est sortie sur l'écran, dans une page écran déterminée, à partir d'une position spécifiée de l'écran. Les caractères sont retirés d'un buffer dont l'adresse doit être transmise à la fonction.

Entrée :

AH 	= 13h

AL 	= Mode de sortie (0 - 3)

0 = Attribut dans BL, conserver position du curseur

1 = Attribut dans BL, actualiser position du curseur

2 = Attribut dans le buffer, conserver position du curseur

3 = Attribut dans le buffer, actualiser position du curseur

BL 	= Octet d'attribut des caractères (modes 0 et 1 seulement)

CX 	= Nombre de caractères à sortir

DH	= Ligne de l'écran

DL 	= Colonne de l'écran

BH 	= Page écran

ES 	= Adresse de segment du buffer

BP 	= Adresse d'offset du buffer

Sortie :

aucune sortie

Remarques :

·	En modes 1 et 3, la position du curseur est fixée à la suite du dernier caractère de la chaîne de caractères sortie, de sorte que, lors des appels ultérieurs d'une fonction BIOS de sortie de caractères, les caractères seront sortis à la suite de la chaîne de caractères. Ce n'est pas le cas en modes 0 et 2.

·	En modes 0 et 1, le buffer contient uniquement les codes ASCII des caractères à sortir. La couleur de tous les caractères de la chaîne de caractères est dans ce cas fixée par le registre BL. En modes 2 et 3, par contre, chaque caractère est suivi, dans le buffer, de l'octet d'attribut correspondant de sorte que chaque caractère est doté d'un attribut individuel. Bien que la taille en octets de la chaîne de caractères soit deux fois supérieure au nombre de caractères à sortir, c'est bien ce nombre de caractères ASCII qui doit être spécifié dans le registre CX et non la longueur effective de la chaîne.

·	Les codes de commande spéciaux tels que "bell" et "carriage return" sont interprétés comme des codes de commande et non comme des codes ASCII normaux.

·	Lorsqu'est atteinte la dernière position de l'écran, l'écran défile d'une ligne vers le haut et la sortie se poursuit sur la première colonne de la dernière ligne de l'écran.

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Configuration : lire la configuration EGA/VGA    Int 10h, Fct 12h, Sous-Fct 10h    BIOS EGA/VGA

Cette fonction sert à déterminer la configuration de la carte EGA/VGA.

Entrée :

AH	= 12h

BL	= 10h

Sortie :

BH	= moniteur connecté

0 = moniteur couleur ou haute résolution

1 = moniteur monochrome

BL	= taille de la RAM EGA

0 = 64 Ko

1 = 128 Ko

2 = 192 Ko

3 = 256 Ko

CL	= moniteur connecté

Remarques :

·	Le contenu des registres DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Copie d'écran : définir une autre routine de copie d'écran    Int 10h, Fct 12h, Sous-Fct 20h    BIOS EGA

Comme la routine de copie d'écran normale du BIOS en ROM sort systématiquement une copie d'écran sur 25 lignes, elle ne convient pas pour une copie d'écran sous les modes EGA/VGA affichant plus de 25 lignes sur l'écran. C'est pourquoi en appelant cette fonction on peut faire installer une routine de copie d'écran de remplacement qui sortira sur l'imprimante autant de lignes qu'il y en a effectivement d'affichées sur l'écran.

Entrée :

AH	= 12h

BL	= 20h

Sortie :

aucune

Remarques :

·	Le contenu des registres BH, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Couleur : activer ou désactiver le chargement des registres de palette    Int 10h, Fct 12h, Sous-Fct 31h    VGA

Cette fonction permet à un programme d'indiquer au BIOS VGA si les valeurs défaut doivent automatiquement être chargées dans les registres de palette lorsqu'un changement de mode vidéo est opéré à l'aide de la fonction 00h.

Entrée :

AH	=	12h

BL	=	31h

AL	=	Chargement automatique des registres de palette

0 : Oui

1 : Non

Sortie :

Aucune

Remarques :

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Couleur : activer/désactiver la conversion en gris des registres de couleur DAC    Int 10h, Fct 12h, Sous-Fct 33h    VGA

Alors que la sous-fonction 1Bh de la fonction 10h entraîne une conversion sélective du contenu des registres de couleur DAC en nuances de gris, cette fonction provoque une conversion systématique, lors de tous les accès à ces registres à travers le BIOS VGA.

Entrée :

AH	=	12h

BL	=	33h

AL	=	Conversion en gris des registres de couleur DAC

0 : oui

1 : non

Sortie :

Aucune

Remarques :

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Couleur : Charger plusieurs registres de couleur DAC    Int 10h, Fct 10h, Sous-Fct 12h    VGA

Cette fonction représente une extension de la fonction 10h et permet de charger des valeurs dans plusieurs registres de couleur DAC simultanément.

Entrée :

AH	= 10h

AL	= 12h

BX	= Numéro du premier registre de couleur DAC appelé (0 à 255)

CX	= Nombre de registres à définir

ES	= Adresse de segment du buffer

DX	= Adresse d'offset du buffer

Sortie :

Aucune

Remarques :

·	Le buffer spécifié doit comporter pour chacun des registres de couleur à définir un groupe de 3 octets consécutifs, dont le premier définit la part de rouge, le deuxième la part de vert et le troisième la part de bleu. Les trois premiers octets correspondent au premier registre de couleur DAC appelé, les trois octets suivants au registre de couleur DAC suivant, etc.

·	Pour le mélange de la couleur, seuls les bits 0 à 5 sont significatifs, les autres bits sont ignorés.

·	Si la somme de BX et CX est supérieure à 255, c'est le premier registre de couleur DAC qui sera traité après que le dernier registre de couleur DAC ait été traité. Il y a donc une exécution en boucle (Wrap Around).

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Couleur : Charger un registre de couleur DAC    Int 10h, Fct 10h, Sous-Fct 10h    VGA

Cette fonction permet de définir le contenu de l'un des 256 registres de couleurs DAC.

Entrée :

AH	= 10h

AL	= 10h

BX	= Numéro du registre de couleur DAC (0 à 255)

CH	= Vert

CL	= Bleu

DH	= Rouge

Sortie :

Aucune

Remarques :

·	Seuls les bits 0 à 5 des registres CH, CL et DH servent à composer le mélange de la couleur, les autres bits sont ignorés.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Couleur : convertir le contenu des registres de couleur DAC en nuances de gris    Int 10h, Fct 10h, Sous-Fct 1Bh    VGA

Cette fonction convertit une section déterminée de la table de couleurs DAC en nuances de gris correspondantes.

Entrée :

AH	= 10h

AL	= 1Bh

BX	= Numéro du premier registre de couleur DAC à convertir

CX	= Nombre de registres de couleur DAC à traiter

Sortie :

Aucune

Remarques :

·	La conversion en une nuance de gris s'effectue par une pondération différenciée des parts de rouge, de vert et de bleu, qui reflète les différences d'intensité entre ces couleurs fondamentales sur l'écran. Le coefficient appliqué au rouge est 0,3, celui appliqué au vert 0,59, et celui appliqué au bleu 0,11.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Couleur : définir la couleur du cadre de l'écran    Int 10h, Fct 10h, Sous-Fct 01h    BIOS EGA/VGA

La valeur spécifiée est copiée par cette fonction dans le registre Overscan du contrôleur d'attribut EGA/VGA.

Entrée :

AH	= 10h

AL	= 01h

BH	= couleur du cadre

Sortie :

aucune

Remarques :

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Couleur : définir le contenu de plusieurs registres de couleur DAC    Interrupt 10h, Fct 10h, Sous-Fct 17h    VGA

Cette fonction, qui représente une extension de la fonction 10h, permet de définir en une fois le contenu de plusieurs registres de couleur DAC.

Entrée :

AH	= 10h

AL	= 17h

BX	= Numéro du premier registre de couleur DAC appelé (0 à 255)

CX	= Nombre de registres à définir

ES	= Adresse de segment du buffer

DX	= Adresse d'offset du buffer

Sortie :

Aucune

Remarques :

·	Le buffer spécifié doit comporter pour chacun des registres de couleur à définir un groupe de 3 octets consécutifs, dont le premier définit la part de rouge, le deuxième la part de vert et le troisième la part de bleu. Les trois premiers octets correspondent au premier registre de couleur DAC appelé, les trois octets suivants au registre de couleur DAC suivant, etc.

·	Pour le mélange de la couleur, seuls les bits 0 à 5 sont significatifs, les autres bits sont ignorés.

·	Si la somme de BX et CX est supérieure à 255, c'est le premier registre de couleur DAC qui sera traité après que le dernier registre de couleur DAC ait été traité. Il y a donc une exécution en boucle (Wrap Around).

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Couleur : définir le registre de masque DAC    Interrupt 10h, Fct 10h, Sous-Fct 18h    VGA

Charge la valeur transmise dans le registre de masque DAC.

Entrée :

AH	= 10h

AL	= 18h

BL	= Valeur pour le registre de masque DAC

Sortie :

Aucune

Remarques :

·	Le contenu du registre de masque DAC intervient dans la sélection de couleur car il est combiné par un ET logique avec l'index servant à l'accès à la table de couleurs DAC.

·	Le contenu des registres BH, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Couleur : définir le registre de palette    Int 10h, Fct 10h, Sous-Fct 00h    BIOS EGA/VGA

Cette fonction permet de régler le contenu de l'un des registres de palette du contrôleur d'attribut de la carte EGA/VGA.

Entrée :

AH	= 10h

AL	= 00h

BL	= code couleur

BH	= registre à adresser

Sortie :

aucune

Remarques :

·	Le numéro de registre n'étant pas contrôlé par le BIOS, cette fonction permet de programmer aussi les autres registres du contrôleur d'attribut. Il s'agit notamment des registres Mode Control, Overscan etc.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Couleur : définir tous les registres de palette    Int 10h, Fct 10h, Sous-Fct 02h    BIOS EGA/VGA

Ces fonctions permettent de régler simultanément les 16 registres de palette et le registre Overscan.

Entrée :

AH	= 10h

AL	= 02h

ES	= adresse de segment de la table de couleurs

DX	= adresse d'offset de la table de couleurs

Sortie :

aucune

Remarques :

·	La paire de registres ES:BX désigne une table qui doit avoir une longueur de 17 octets. Les 16 premiers octets seront transférés dans les 16 registres de palette du contrôleur d'attribut alors que le 17ème registre sera copié dans le registre Overscan.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Couleur : écrire un caractère/une couleur    Int 10h, Fct 09h    BIOS

Ecrire un caractère dans une couleur déterminée dans la position actuelle du curseur (dans la page écran spécifiée).

Entrée :

AH 	=  09h

BH 	= Numéro de la page écran

CX 	= Nombre d'écritures successives du caractère

AL 	= Code ASCII du caractère

BL 	= Attribut

Sortie :

aucune sortie

Remarques :

·	Si le caractère indiqué doit être sorti plusieurs fois (auquel cas la valeur du registre CX est supérieure à 1), il faut, en mode graphique, que tous les caractères rentrent dans la page écran actuelle.

·	Les codes de commande "bell", "carriage return", etc..., ne sont pas identifiés comme tels mais sortis comme des codes ASCII normaux.

·	Cette fonction permet également de sortir des caractères en mode graphique. Dans ce cas, les modèles des caractères portant les codes 0 à 127 sont tirés dans une table en ROM et les modèles des caractères portant les codes 128 à 255 sont tirés d'une table en RAM qui doit avoir été installée préalablement avec l'instruction GRAFTABL du DOS.

·	En mode de texte, le contenu du registre BL définit l'octet d'attribut du caractère. En mode graphique, il détermine la couleur du caractère. En mode graphique 640*200 points, les valeurs 0 et 1, en mode graphique 320*200 points, les valeurs 0 à 3 sont possibles pour définir les différentes couleurs de la palette de couleurs sélectionnée.

·	Si le mode graphique est activé lors de la sortie de caractères et si le bit 7 du registre BL est fixé, le modèle de caractère est combiné par un 'ou exclusif' avec les points graphiques figurant sous ce caractère.

·	Seule la page écran actuelle peut être modifiée par cette fonction

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Couleur : lire la méthode de sélection de couleur     et le contenu du registre de sélection de couleur    Interrupt 10h, Fct 10
Couleur : lire la méthode de sélection de couleur     et le contenu du registre de sélection de couleur    Interrupt 10h, Fct 10h, Sous-Fct 1Ah    VGA

Cette fonction fournit d'une part le contenu du bit 7 du registre de contrôle de mode, et donc la méthode de sélection de couleur, ainsi que le contenu du registre de sélection de couleur, qui détermine le groupe de registres de couleur DAC activé.

Entrée :

AH	= 10h

AL	= 1Ah

Sortie :

BL	= Bit 7 du registre de contrôle de mode

BH	= Contenu du registre de sélection de couleur

Remarques :

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Couleur : Lire le contenu de tous les registres de palette et le registre Overscan    Int 10h, Fct 10h, Sous-Fct 09h        VGA

Lorsque cette fonction est appelée, le contenu des 16 registres de palette ainsi que le contenu du registre Overscan sont copiés dans un buffer du programme d'appel.

Entrée :

AH	= 10h

AL	= 09h

ES	= Adresse de segment du buffer

DX	= Adresse d'offset du buffer

Sortie :

Aucune

Remarques :

·	Le buffer doit disposer d'une place d'au moins 17 octets pour pouvoir recevoir le contenu de tous les registres de palette (octets 0 à 15) et le contenu du registre Overscan (octet 16).

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Couleur : lire le contenu du registre de masque DAC    Int 10h, Fct 10h, Sous-Fct 19h    VGA

Lit le contenu actuel du registre de masque DAC.

Entrée :

AH	= 10h

AL	= 19h

Sortie :

BL	= Contenu du registre de masque DAC

Remarques :

·	Le contenu du registre de masque DAC intervient dans la sélection de couleur car il est combiné par un ET logique avec l'index servant à l'accès à la table de couleurs DAC.

·	Le contenu des registres BH, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Couleur : lire le registre de palette    Int 10h, Fct 10h, Sous-Fct 07h    VGA

Cette fonction offre à un programme la possibilité de connaître le contenu de l'un des registres de palette du contrôleur d'attribut.

Entrée :

AH	= 10h

AL	= 07h

BL	= Numéro du registre de palette

Sortie :

BH	= Contenu du registre de palette adressé

Remarques :

·	Le numéro du registre de palette appelé n'étant pas contrôlé par le BIOS, cette fonction permet en fait de lire tous les registres du contrôleur d'attribut.

·	Le contenu des registres BL, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Couleur : lire un des registres de couleur DAC    Int 10h, Fct 10h, Sous-Fct 15h    VGA

Fournit au programme d'appel le contenu de l'un des 256 registres de couleur DAC.

Entrée :

AH	= 10h

AL	= 15h

BX	= Numéro du registre de couleur DAC

Sortie :

CH	= Vert

CL	= Bleu

DH	= Rouge

Remarques :

·	Seuls les bits 0 à 5 des registres CH, CL et DH participent au mélange de la couleur.

·	Le contenu des registres BX, DL, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Couleur : sélectionner la palette de couleurs    Int 10h, Fct 0Bh, Sous-Fct 1    BIOS

Sélection d'une des deux palettes de couleurs pour le mode graphique 320*200 points.

Entrée :

AH 	= 0Bh

BH 	= 1

BL 	= Numéro de la palette de couleurs

Sortie :

aucune sortie

Remarques :

·	Deux palettes de couleurs sont disponibles. Elles portent les numéros 0 et 1 et contiennent les couleurs suivantes :

Palette 0 : vert, rouge, jaune

Palette 1 : turquoise, magenta, blanc

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Couleur : sélectionner les couleurs de cadre et de fond    Int 10h, Fct 0Bh, Sous-Fct 0    BIOS

Cette fonction sert à sélectionner les couleurs de cadre et de fond pour les modes graphique et de texte.

Entrée :

AH 	= 0Bh

BH 	= 0

BL 	= Couleurs de cadre/de fond

Sortie :

aucune sortie

Remarques :

·	En mode graphique, la valeur de couleur transmise définit aussi bien la couleur du cadre de l'écran que celle du fond de l'écran. En mode de texte, la couleur du fond est définie séparément pour chaque caractère, de sorte que la valeur de couleur transmise définit uniquement la couleur du cadre de l'écran.

·	La valeur de couleur transmise peut être comprise entre 0 et 15 et peut donc représenter les 16 couleurs possibles.

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Crayon optique : lire la position du crayon optique    Int 10h, Fct 04h    BIOS

Si possible, la position du crayon optique sur l'écran est lue.

Entrée :

AH 	= 04h

Sortie :

AH 	= 0 : position du crayon optique ne peut être testée pour le moment.

AH 	= 1 : position du crayon optique a pu être obtenue, auquel cas :

DH = Ligne écran du crayon optique (mode texte)

DL = Colonne écran du crayon optique (mode texte)

CH = Ligne écran du crayon optique (mode graphique)

BX = Colonne écran du crayon optique (mode graphique)

Remarques :

·	L'appel de cette fonction doit être répété jusqu'à ce qu'un 1 soit renvoyé dans le registre AH car ce n'est que dans ce cas que les coordonnées peuvent être lues dans les autres registres.

·	Les coordonnées indiquées se réfèrent naturellement au mode vidéo actuel et à sa résolution horizontale et verticale.

·	Les coordonnées du crayon optique ne peuvent pas être déterminées très précisément, surtout en mode graphique. La coordonnée Y (ligne) est toujours une valeur paire de sorte qu'il n'est pas possible de distinguer si le crayon optique se trouve sur la ligne 8 ou 9. En mode graphique 320*200 points, la coordonnée X (colonne) est toujours un multiple entier de 4 et en mode graphique 640*200 points toujours un multiple entier de 8.

·	Le contenu du registre CL et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Curseur : activer/désactiver l'émulation du curseur    Int 10h, Fct 12h, Sous-Fct 34h    VGA

Pour que le programme appelant la fonction 01h (définition des lignes de départ et de fin du curseur de l'écran) n'ait pas à tenir compte des différentes résolutions de la matrice de caractère dans les différents modes, il peut se référer systématiquement à une matrice de caractère 8*8 et laisser au BIOS VGA le soin d'effectuer la conversion vers la taille de la matrice de caractère actuelle. Ce n'est cependant possible qu'en mode dit d'émulation du curseur, que cette fonction permet d'activer ou de désactiver.

Entrée :

AH	= 	12h

BL	= 	34h

AL	= 	Mode d'émulation du curseur ...

0 : oui

1 : non

Sortie :

Aucune

Remarques :

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Curseur : définir l'apparence du curseur    Int 10h, Fct 01h    BIOS

Les lignes de départ et de fin du curseur de l'écran sont fixées en  appelant cette fonction. Cette fonction ne dépend pas de la page écran actuellement affichée sur l'écran.

Entrée :

AH 	= 01h

CH 	= Ligne de départ du curseur

CL 	= Ligne de fin du curseur

Sortie :

aucune sortie

Remarques :

·	Les valeurs autorisées pour les lignes de départ et de fin dépendent de la carte vidéo installée. Les valeurs suivantes sont autorisées :

Cartes écran monochromes :	0 - 13

Cartes écran couleur :	0 - 7

·	Le BIOS fixe au départ les valeurs suivantes :

Cartes écran monochromes :	lignes 11 et 12

Cartes écran couleur :	lignes 6 et 7

·	Il ne faut pas définir des valeurs non autorisées à l'aide de cette fonction car cela peut avoir des conséquences imprévisibles (en général, une disparition du curseur).

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Curseur : lire la position du curseur    Int 10h, Fct 03h    BIOS

Lecture de la position du curseur de texte dans une page écran et lecture des lignes de départ et de fin du curseur clignotant de l'écran.

Entrée :

AH	 = 03h

BH 	= Numéro de la page écran

Sortie :

DH 	= Ligne de l'écran dans laquelle figure le curseur

DL 	= Colonne de l'écran dans laquelle figure le curseur

CH 	= Ligne de départ du curseur clignotant de l'écran

CL 	= Ligne de fin du curseur clignotant de l'écran

Remarques :

·	Le numéro de la page écran dépend aussi du nombre de pages écran disponibles sur la carte vidéo utilisée.

·	Les ligne et colonne de l'écran se réfèrent au système de coordonnées de texte.

·	Le contenu du registre BX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Curseur : positionner le curseur    Int 10h, Fct 02h    BIOS

Cette fonction permet de déplacer le curseur qui fixe la position de la sortie de caractères sur l'écran, à l'aide d'une des fonctions de sortie de caractères du BIOS.

Entrée :

AH 	= 02h

BH 	= Numéro de la page écran

DH	= Ligne de l'écran

DL 	= Colonne de l'écran

Sortie :

aucune sortie

Remarques :

·	Le curseur clignotant de l'écran n'est déplacé par cette fonction qu'à condition que la page écran appelée soit la page actuelle de l'écran.

·	La ligne de l'écran est une valeur entre 0 et 24.

·	La colonne de l'écran est une valeur comprise entre 0 et 79 (en 80 colonnes) ou entre 0 et 39 (en 40 colonnes), suivant le mode vidéo fixé.

·	Une méthode pour faire disparaître le curseur clignotant consiste à le placer dans une position hors du champ de l'écran (par exemple colonne 0, ligne 25).

·	Le numéro de la page écran dépend aussi du nombre de pages écran disponibles sur la carte vidéo utilisée.

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Définir la méthode de sélection des couleurs ou sélectionner un groupe de registres DAC    Int 10h, Fct 10h, Sous-Fct 13h    VGA

Cette fonction manipule le bit 7 du registre de contrôle de mode.

Entrée :

AH	= 10h

AL	= 13h

BL	= 00h ou 01h (voir plus bas)

BH	= voir plus bas

Sortie :

Aucune

Remarques :

·	Cette sous-fonction dispose elle-même à son tour de deux sous-fonctions sélectionnées à travers la valeur dans le registre BL. La sous-fonction 00h permet de définir la sélection des couleurs, alors que la sous-fonction 01h sert à sélectionner le groupe de registres DAC activé.

·	La sous-fonction 00h copie le bit 0 du registre BH dans le bit 7 du registre de contrôle de mode, fixant ainsi la méthode de sélection des couleurs. Si le bit 0 de BH contient la valeur 0, les 256 registres de couleur DAC seront divisés en quatre groupes de 64 registres. En ce qui concerne la sélection de couleur, les bits 0 à 5 de chaque registre de palette forment avec les bits 2 à 3 du registre de sélection de couleur les 8 bits utilisés comme index dans la table de couleurs DAC. Si le bit 0 du registre BH contient par contre la valeur 1, les registres de couleur DAC seront groupés en 16 groupes de 16 registres. Les 4 bits inférieurs du registre de palette composeront alors avec les 4 bits inférieurs du registre de sélection de couleur l'index 8 bits sur la table de couleurs DAC.

·	La sous-fonction 01h sert à définir le registre de sélection de couleur, dont le contenu sélectionne le groupe de registres de couleur DAC activé. Le contenu du registre BH est copié à cet effet dans le registre de sélection de couleur.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Ecran : définir le nombre de lignes de balayage    Int 10h, Fct 12h, Sous-Fct 30h    EGA/VGA

Sélectionne le nombre de lignes apparaissant sur l'écran (à ne pas confondre avec les lignes de texte).

Entrée :

AH	=	12h

BL	=	30h

AL	=	0 : 200 lignes de balayage (EGA et VGA)

1 : 350 lignes de balayage (EGA et VGA)

2 : 400 lignes de balayage (possible uniquement avec VGA)

Sortie :

Aucune

Remarques :

·	Le nombre de lignes sélectionné ne peut être affiché sur l'écran que si un moniteur suffisamment puissant est relié à la carte vidéo. C'est ainsi qu'un moniteur CGA ne permettra jamais d'afficher plus de 200 lignes sur l'écran, même si l'électronique vidéo autorise une résolution plus élevée.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Ecran : écrire un point graphique    Int 10h, Fct 0Ch    BIOS

Définir la valeur de couleur pour un point écran en mode graphique.

Entrée :

AH 	= 0Ch

DX 	= Ligne de l'écran

CX 	= Colonne de l'écran

AL 	= Valeur de couleur

Sortie :

aucune sortie

Remarques :

·	La valeur de couleur se réfère au mode graphique actuel.

·	En mode 640*200 points, seules les valeurs 0 et 1 sont autorisées.

·	En mode 320*200 points, les valeurs 0 à 3 sont autorisées. Elles génèrent une couleur en fonction de la palette de couleurs sélectionnée. La valeur 0 correspond à la couleur sélectionnée pour le fond, 1 à la première couleur de la palette sélectionnée, 2 à la seconde, etc...

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Ecran : faire défiler les lignes de texte vers le bas (scrolling)    Int 10h, Fct 07h    BIOS

Faire défiler d'une ou plusieurs lignes vers le haut ou effacer une partie de la page écran actuelle

Entrée :

AH	= 07h

AL 	= Nombre de lignes dont la fenêtre doit être décalée vers le bas (0 signifie effacer la fenêtre)

CH 	= Ligne écran du coin supérieur gauche de la fenêtre

CL 	= Colonne écran du coin supérieur gauche de la fenêtre

DH 	= Ligne écran du coin inférieur droit de la fenêtre

DL 	= Colonne écran du coin inférieur droit de la fenêtre

BH 	= Couleur (attribut) pour les lignes vides

Sortie :

aucune sortie

Remarques :

·	Seule la page écran actuelle peut être modifiée par cette fonction

·	Le fait d'effacer la zone de l'écran (nombre de lignes = 0) revient à la remplir d'espaces (code ASCII 32).

·	Le contenu des lignes expulsées de l'écran lors du défilement est définitivement perdu et ne peut être récupéré.

·	Pour vider l'écran tout entier, il est préférable d'employer la fonction 0 de cette interruption.

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Ecran : faire défiler les lignes de texte vers le haut (scrolling)    Int 10h, Fct 06h    BIOS

Faire défiler d'une ou plusieurs lignes vers le haut ou effacer une partie de la page écran actuelle

Entrée :

AH 	=  06h

AL 	= Nombre de lignes dont la fenêtre doit être décalée vers le haut (0 signifie effacer la fenêtre)

CH 	= Ligne écran du coin supérieur gauche de la fenêtre

CL 	= Colonne écran du coin supérieur gauche de la fenêtre

DH 	= Ligne écran du coin inférieur droit de la fenêtre

DL 	= Colonne écran du coin inférieur droit de la fenêtre

BH 	= Couleur (attribut) pour les lignes vides

Sortie :

aucune sortie

Remarques :

·	Seule la page écran actuelle peut être modifiée par cette fonction

·	Le fait d'effacer la zone de l'écran (nombre de lignes = 0) revient à la remplir d'espaces (code ASCII 32).

·	Le contenu des lignes expulsées de l'écran lors du défilement est définitivement perdu et ne peut être récupéré.

·	Pour vider l'écran tout entier, il est préférable d'employer la fonction 0 de cette interruption.

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Ecran : interdire le rafraîchissement de l'écran    Int 10h, Fct 12h, Sous-Fct 36h    VGA

Cette fonction permet à un programme d'interdire temporairement le rafraîchissement de l'écran, pour effectuer des manipulations d'envergure à l'intérieur de la RAM vidéo.

Entrée :

AH	= 	12h

BL	= 	36h

AL	= 	Rafraîchissement de l'écran ...

0 : oui

1 : non

Sortie :

Aucune

Remarques :

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Ecran : lire le contenu du registre Overscan    Int 10h, Fct 10h, Sous-Fct 08h    VGA

Cette fonction renvoie au programme d'appel le contenu du registre Overscan, qui définit la couleur du cadre de l'écran.

Entrée :

AH	= 10h

AL	= 08h

Sortie :

BH	= Contenu du registre Overscan

Remarques :

·	Le contenu des registres BL, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Ecran : lire un point graphique     Int 10h, Fct 0Dh    BIOS

Lire la couleur d'un point écran en mode graphique.

Entrée :

AH 	= 0Dh

DX 	= Ligne de l'écran

CX 	= Colonne de l'écran

Sortie :

AL 	= Valeur de couleur

Remarques :

·	La valeur de couleur se réfère au mode graphique actuel.

·	En mode 640*200 points, seules les valeurs 0 et 1 sont possibles.

·	En mode 320*200 points, les valeurs 0 à 3 sont autorisées. Elles génèrent une couleur en fonction de la palette de couleurs sélectionnée. La valeur 0 correspond à la couleur sélectionnée pour le fond, 1 à la première couleur de la palette sélectionnée, 2 à la seconde, etc...

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Ecran : sélectionner la page actuelle de l'écran    Int 10h, Fct 05h    BIOS

Sélection de la page écran actuelle, c'est-à-dire de celle qui doit être affichée sur l'écran (mode texte uniquement).

Entrée :

AH 	=  05h

AL 	= Numéro de la page écran

Sortie :

aucune sortie

Remarques :

·	Le numéro de la page écran dépend aussi du nombre de pages écran disponibles sur la carte vidéo.

·	Lorsqu'une nouvelle page écran est activée le curseur clignotant de l'écran est toujours fixé sur la position du curseur de texte sur cette page.

·	Le fait de passer d'une page écran à l'autre n'affecte pas le contenu de ces pages.

·	Il n'est pas nécessaire qu'une page écran soit activée pour pouvoir y écrire.

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Lire un caractère/une couleur    Int 10h, Fct 08h     BIOS

Lecture du code ASCII et de la couleur (attribut) du caractère figurant dans la position actuelle du curseur.

Entrée :

AH 	= 08h

BH 	= Numéro de la page écran

Sortie :

AL 	= Code ASCII du caractère

AH 	= Couleur (attribut)

Remarques :

·	Le numéro de la page écran dépend aussi du nombre de pages écran disponibles sur la carte vidéo

·	Cette fonction peut également être appelée en mode graphique. Dans ce cas, le modèle de bits du caractère sur l'écran sera comparé avec les modèles de bits des caractères définis dans la ROM de caractères de la carte vidéo et avec les caractères qui ont été stockés dans une table en RAM dont l'adresse figure à l'interruption 1Fh. Si le caractère ne peut être identifié, le registre AL contiendra la valeur 0 après appel de la fonction.

·	Le contenu des registres BX, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


Mode vidéo : définir le mode vidéo    Int 10h, Fct 00h    BIOS

Cette fonction permet de sélectionner et initialiser un mode vidéo. L'écran est alors entièrement effacé. De ce fait, cette fonction peut aussi être appelée pour vider l'écran d'une façon très simple même lorsqu'on ne souhaite pas changer le mode vidéo.

Entrée :

AH 	= 00h

AL	Mode	Résolution	Résolution	Couleurs	Système

T/G	texte	graphique

00h	T	40x25  8x8	Gris	CGA,PCjr

T	40x25  8x14	Gris	EGA

T	40x25  8x16	16	MCGA

T	40x25  9x16	16	VGA

01h	T	40x25  8x8	16	CGA,PCjr

T	40x25  8x14	16	EGA

T	40x25  8x16	16	MCGA

T	40x25  9x16	16	VGA

02h	T	80x25  8x8	16 gris	CGA,PCjr

T	80x25  8x14	16 gris	EGA

T	80x25  8x16	16	MCGA

T	80x25  9x16	16	VGA

03h	T	80x25  8x8	16	CGA,PCjr

T	80x25  8x14	16	EGA

T	80x25  8x16	16	MCGA

T	80x25  9x16	16	VGA

04h	G	40x25  8x8	320x200	4	CGA,PCjr,EGA,MCGA,VGA

05h	G	40x25  8x8	320x200	4 gris	CGA,PCjr,EGA

G	40x25  8x8	320x200	4	MCGA,VGA

06h	G	80x25  8x8	640x200	2	CGA,PCjr,EGA,MCGA,VGA

07h	T	80x25  9x14	mono	MDA,Hercules,EGA

T	80x25  9x16	mono	VGA

08h	G	20x25  8x8	160x200	16	PCjr

G	90x43  8x8	720x352	mono	Hercules + MSHERC.COM

09h	G	40x25  8x8	320x200	16	PCjr

0Ah	G	80x25  8x8	640x200	4	PCjr

0Bh	réservé pour le BIOS EGA

0Ch	réservé pour le BIOS EGA

0Dh	G	40x25  8x8	320x200	16	EGA,VGA

0Eh	G	80x25  8x8	640x200	16	EGA,VGA

0Fh	G	80x25  8x14	640x350	mono	EGA,VGA

10h	G	80x25  8x14	640x350	4	EGA 64 Ko

G	640x350	16	EGA 256 Ko,VGA

11h	G	80x30  8x16	640x480	mono	VGA,MCGA

12h	G	80x30  8x16	640x480 	16/256k	VGA

13h	G	40x25  8x8	320x200 	256/256k	VGA,MCGA

18h	T	132x44  8x8	mono	Tseng Labs EVA

T	132x44  8x8	16/256	Tseng ET4000

19h	T	132x25  8x14	mono	Tseng Labs EVA

T	132x25  8x14	16/256	Tseng ET4000

1Ah	T	132x28  8x13	mono	Tseng Labs EVA

T	132x28  8x13	16/256	Tseng ET4000

22h	T	132x44  8x8	Tseng Labs EVA

T	132x44  8x8	16/256	Tseng ET4000

T	132x44	16	Orchid Prodesigner VGA

23h	T	132x25  6x14	Tseng Labs EVA

T	132x25  8x14	16/256	Tseng ET4000

T	132x28	16	Orchid Prodesigner VGA

24h	T	132x28  6x13	Tseng Labs EVA

T	132x28  8x13	16/256	Tseng ET4000

T	132x25	16	Orchid Prodesigner VGA

25h	G	80x60  8x8	640x480	Tseng Labs EVA

G	80x60  8x8	640x480	16/256	Tseng ET4000

G	80x60  8x8	640x480	16	Orchid Prodesigner VGA

26h	T	80x60  8x8	Tseng Labs EVA

T	80x60  8x8	16/256	Tseng ET4000

T	80x60	16	Orchid ProDesigner VGA

G	100x37  8x16	800x600	16	Orchid

G	100x37  8x16	800x600	16/256	Tseng ET4000

T	100x40  8x16	16	Orchid Prodesigner VGA

T	100x40  8x15	16/256	Tseng ET4000

2Dh	G	80x25  8x14	640x350	256/256k	Tseng ET4000

2Eh	G	80x30  8x16	640x480 	256/256k	Orchid

G	80x30  8x16	640x480	256/256k 	Tseng ET4000

2Fh	G	80x25  8x16	640x400	256/256k	Tseng ET4000

30h	G	100x37  8x16	800x600 	256/256k	Orchid

G	100x37  8x16	800x600 	256/256k	Tseng ET4000

37h	G	128x48  8x16 	1024x768	16	Orchid

38h	G	128x48  8x16 	1024x768 	256/256k 	Tseng ET4000

6Ah	G	800x600	16	VESA standard

Sortie :

aucune sortie

Remarques :

·	Les couleurs pour les modes 4, 5 et 6 peuvent être fixées à l'aide de la fonction 11.

·	Le contenu des registres BX, CX, DX et des registres SS, CS et DS n'est pas modifié. Le contenu de tous les autres registres, et notamment celui des registres SI et DI, peut avoir été modifié


Mode vidéo : lire le mode vidéo     Int 10h, Fct 0Fh    BIOS

Lire le numéro du mode vidéo actuel, le nombre de caractères par ligne et le numéro de la page écran actuelle.

Entrée :

AH 	= 0Fh

Sortie :

AL 	= Mode vidéo (voir plus bas)

AH	= Nombre de caractères par ligne

BH	= Numéro de la page écran actuelle

Remarques :

AL	Mode	Résolution	Résolution	Couleurs	Système

T/G	texte	graphique

00h	T	40x25  8x8	Gris	CGA,PCjr

T	40x25  8x14	Gris	EGA

T	40x25  8x16	16	MCGA

T	40x25  9x16	16	VGA

01h	T	40x25  8x8	16	CGA,PCjr

T	40x25  8x14	16	EGA

T	40x25  8x16	16	MCGA

T	40x25  9x16	16	VGA

02h	T	80x25  8x8	16 gris	CGA,PCjr

T	80x25  8x14	16 gris	EGA

T	80x25  8x16	16	MCGA

T	80x25  9x16	16	VGA

03h	T	80x25  8x8	16	CGA,PCjr

T	80x25  8x14	16	EGA

T	80x25  8x16	16	MCGA

T	80x25  9x16	16	VGA

04h	G	40x25  8x8	320x200	4	CGA,PCjr,EGA,MCGA,VGA

05h	G	40x25  8x8	320x200	4 gris	CGA,PCjr,EGA

G	40x25  8x8	320x200	4	MCGA,VGA

06h	G	80x25  8x8	640x200	2	CGA,PCjr,EGA,MCGA,VGA

07h	T	80x25  9x14	mono	MDA,Hercules,EGA

T	80x25  9x16	mono	VGA

08h	G	20x25  8x8	160x200	16	PCjr

G	90x43  8x8	720x352	mono	Hercules + MSHERC.COM

09h	G	40x25  8x8	320x200	16	PCjr

0Ah	G	80x25  8x8	640x200	4	PCjr

0Bh	réservé pour le BIOS EGA

0Ch	réservé pour le BIOS EGA

0Dh	G	40x25  8x8	320x200	16	EGA,VGA

0Eh	G	80x25  8x8	640x200	16	EGA,VGA

0Fh	G	80x25  8x14	640x350	mono	EGA,VGA

10h	G	80x25  8x14	640x350	4	EGA 64 Ko

G	640x350	16	EGA 256 Ko,VGA

11h	G	80x30  8x16	640x480	mono	VGA,MCGA

12h	G	80x30  8x16	640x480 	16/256k	VGA

13h	G	40x25  8x8	320x200 	256/256k	VGA,MCGA

18h	T	132x44  8x8	mono	Tseng Labs EVA

T	132x44  8x8	16/256	Tseng ET4000

19h	T	132x25  8x14	mono	Tseng Labs EVA

T	132x25  8x14	16/256	Tseng ET4000

1Ah	T	132x28  8x13	mono	Tseng Labs EVA

T	132x28  8x13	16/256	Tseng ET4000

22h	T	132x44  8x8	Tseng Labs EVA

T	132x44  8x8	16/256	Tseng ET4000

T	132x44	16	Orchid Prodesigner VGA

23h	T	132x25  6x14	Tseng Labs EVA

T	132x25  8x14	16/256	Tseng ET4000

T	132x28	16	Orchid Prodesigner VGA

24h	T	132x28  6x13	Tseng Labs EVA

T	132x28  8x13	16/256	Tseng ET4000

T	132x25	16	Orchid Prodesigner VGA

25h	G	80x60  8x8	640x480	Tseng Labs EVA

G	80x60  8x8	640x480	16/256	Tseng ET4000

G	80x60  8x8	640x480	16	Orchid Prodesigner VGA

26h	T	80x60  8x8	Tseng Labs EVA

T	80x60  8x8	16/256	Tseng ET4000

T	80x60	16	Orchid ProDesigner VGA

G	100x37  8x16	800x600	16	Orchid

G	100x37  8x16	800x600	16/256	Tseng ET4000

T	100x40  8x16	16	Orchid Prodesigner VGA

T	100x40  8x15	16/256	Tseng ET4000

2Dh	G	80x25  8x14	640x350	256/256k	Tseng ET4000

2Eh	G	80x30  8x16	640x480 	256/256k	Orchid

G	80x30  8x16	640x480	256/256k 	Tseng ET4000

2Fh	G	80x25  8x16	640x400	256/256k	Tseng ET4000

30h	G	100x37  8x16	800x600 	256/256k	Orchid

G	100x37  8x16	800x600 	256/256k	Tseng ET4000

37h	G	128x48  8x16 	1024x768	16	Orchid

38h	G	128x48  8x16 	1024x768 	256/256k 	Tseng ET4000

6Ah	G	800x600	16	VESA standard

·	Le contenu des registres BL, CX, DX et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres, et notamment des registres SI et DI, peut avoir été modifié.


VESA : activer le mode VESA    Int 10h, Fct 4Fh, Sous-Fct 02h    VESA

Cette fonction sert à activer un mode VESA.

Entrée :

AH 	= 4Fh

AL 	= 02h

BX 	= Numéro de code du mode souhaité

Sortie :

AL 	= 4Fh et

AH 	= 00h : Fonction exécutée correctement

Remarques :

·	Cette fonction ne doit être appelée que si la sous-fonction 00h s'est exécutée correctement et ainsi l'existence d'un driver VESA a pu être signalée. En outre, seuls les modes inclus dans la liste de la fonction 00h peuvent être initialisés.

·	Le bit 15 peut être mis dans le registre BX contenant le numéro de code du mode vidéo si la RAM vidéo ne doit pas être effacée pendant l'initialisation du mode vidéo.


VESA : lire la fenêtre d'accès sur la RAM vidéo    Int 10h, Fct 4Fh, Sous-Fct 05h/01h    VESA

Cette fonction permet de déterminer l'état de la fenêtre d'accès sur la RAM vidéo de la carte Super VGA.

Entrée :

AH 	= 4Fh

AL 	= 05h

BH 	= 01h

BL 	= Fenêtre d'accès (0 ou 1)

Sortie :

AL 	= 4Fh et

AH 	= 00h : Fonction exécutée correctement, dans ce cas

DX 	= Adresse de départ

Remarques :

L'adresse de départ située dans le registre DX doit être considérée par rapport à la granularité de la fenêtre obtenue par l'appel de la sous-fonction 01h.


VESA : lire la taille du buffer de stockage    Int 10h, Fct 4Fh, Sous-Fct 04h/00h    VESA

La taille du buffer de stockage nécessaire peut être obtenue à l'aide de cette fonction en vue d'un appel ultérieur de la sous-fonction 04h/01h.

Entrée :

AH 	= 4Fh

AL 	= 04h

DL 	= 00h

CX 	= Eléments de l'état vidéo à sauvegarder

Sortie :

AL 	= 4Fh et

AH 	= 00h : Fonction exécutée correctement, dans ce cas

BX 	= Nombre des 64 blocs d'octets associés nécessaires en guise de buffer de stockage

Remarques :

·	Cette fonction doit être appelée avant la sous-fonction 04h/01h. La taille du buffer nécessaire à la sous-fonction 04h/01h peut ainsi être obtenue.

·	Lors de l'appel de la fonction, les différents bits du registre CX indiquent les éléments de l'état vidéo à sauvegarder. Dans ce cas, seul l'octet faible du registre CX est occupé par les bits suivants :

Bit 0 = 1	Statut de l'électronique vidéo

Bit 1 = 1	Variables de la zone de données BIOS

Bit 2 = 1	Registre de la table de couleurs DAC

Bit 3 = 1	Statut SuperVGA

Bit 4 à 7	Non occupé (0)


VESA : lire le mode en cours    Int 10h, Fct 4Fh, Sous-Fct 03h    VESA

Cette fonction retourne le numéro de code du mode vidéo en cours et tient compte des modes non VESA.

Entrée :

AH 	= 4Fh

AL 	= 03h

Sortie :

AL 	= 4Fh et

AH 	= 00h : Fonction exécutée correctement, dans ce cas

BX	= Numéro de code du mode en cours

Remarques :

·	Cette fonction ne doit être appelée que si la sous-fonction 00h s'est exécutée correctement et ainsi l'existence d'un driver VESA a pu être signalée.


VESA : lire les données-clés d'un mode VESA    Int 10h, Fct 4Fh, Sous-Fct 01h    VESA

Cette fonction donne des informations sur un mode VESA sans pour autant l'activer.

Entrée :

AH 	= 4Fh

AL 	= 01h

CX 	= Numéro de code du mode VESA souhaité

ES:DI	= Pointeur FAR sur buffer Info

Sortie :

AL 	= 4Fh et

AH 	= 00h : Fonction non exécutée correctement

Remarques :

·	Cette fonction ne doit être appelée que si la sous-fonction 00h s'est exécutée correctement et ainsi l'existence d'un driver VESA a pu être signalée. En outre, seuls les modes inclus dans la liste de la fonction 00h peuvent être réclamés.

·	Le buffer Info dont l'adresse est à transmettre à la fonction doit disposer de 29 octets. Si la fonction s'exécute correctement, vous obtenez les informations suivantes :

Structure du buffer Info

Offset	Contenu	Type

00h	Flag de mode, voir plus loin	1 WORD

02h	Flags pour la première fenêtre d'accès, voir plus loin	1 BYTE

03h	Flags pour la seconde fenêtre d'accès, voir plus loin	1 BYTE

04h	Granularité en Ko à utiliser pour déplacer les deux fenêtres	1 WORD

06h	Taille des deux fenêtres d'accès en Ko	1 WORD

08h	Adresse de segment de la première fenêtre d'accès	1 WORD

0Ah	Adresse de segment de la seconde fenêtre d'accès	1 WORD

0Ch	Pointeur FAR sur routine de définition de la zone visible dans les deux fenêtres d'accès	1 DWORD

10h	Nombre d'octets occupant chacun une ligne de points dans la RAM vidéo	1 WORD

Informations en option

12h	Résolution X en points/caractères	1 WORD

14h	Résolution Y en points/caractères	1 WORD

16h	Largeur de la matrice de caractères en points	1 BYTE

17h	Hauteur de la matrice de caractères en points	1 BTYE

18h	Nombre des plans de bits	1 BYTE

19h	Nombre de bits par point écran	1 BYTE

1Ah	Nombre de blocs mémoire	1 BYTE

1Bh	Modèle de mémoire	1 BYTE

1Ch	Taille des blocs de mémoire en Ko	1 BYTE

Le flag de mode (offset 00h) indique si les champs optionnels du buffer Info ont été complétés par la fonction VESA et retourne également des informations importantes concernant le mode souhaité.

Les deux fenêtres d'accès (Offset 02h et 03h) sont décrites à travers les champs de bits suivants :

Bit 0 = 0	fenêtre non disponible

Bit 0 = 1	fenêtre disponible

Bit 1 = 0	lecture de la RAM vidéo par cette fenêtre inactive

Bit 1 = 0	lecture de la RAM vidéo par cette fenêtre active

Bit 2 = 0	Ecriture en RAM-vidéo par cette fenêtre inactive

Bit 2 = 1	Ecriture en RAM-vidéo par cette fenêtre active

Bit 3 à 7	Réservés

Le modèle de mémoire (Offset 1Bh) reproduit la structure de la RAM vidéo dans le mode vidéo souhaité. Les codes suivants sont reconnus à cet effet :

Codes de description du modèle de mémoire

Nº	Fonction

00h	Mode texte

01h	Format CGA, soit 2 ou 4 blocs de mémoire

02h	Format Hercules avec 4 blocs de mémoire

03h	Format normal EGA/VGA pour mode graphique 16 couleurs

04h	Format compacté avec deux points à 4 bits par octet

05h	Format normal EGA/VGA pour mode graphique 256 couleurs

06h-0Fh	Réservé

10h-FFh	Code spécifique au constructeur,	actuellement inutilisé


VESA : placer la fenêtre d'accès sur la RAM vidéo    Int 10h, Fct 4Fh, Sous-Fct 05h/00h    VESA

Cette fonction sert à insérer une portion précise de la RAM vidéo dans l'une des deux fenêtres d'accès VESA pour qu'un programme puisse l'adresser.

Entrée :

AH 	= 4Fh

AL 	= 05h

BH 	= 00h

BL 	= Fenêtre d'accès (0 ou 1)

DX 	= Adresse de départ

Sortie :

AL 	= 4Fh et

AH 	= 00h : Fonction exécutée correctement

Remarques :

·	Dans le registre DX, l'adresse de départ doit être considérée par rapport à la granularité de la fenêtre obtenue par l'appel de la sous-fonction 01h.

·	La seconde fenêtre d'accès ne doit être réclamée que si un appel préalable de la sous-fonction 00h confirme l'existence de deux fenêtres d'accès.


VESA : restaurer l'état vidéo de la carte Super VGA    Int 10h, Fct 4Fh, Sous-Fct 04h/02h    VESA

Après avoir sauvegardé l'état vidéo avec la sous-fonction 04h/01h, vous pouvez le restaurer en appelant cette fonction.

Entrée :

AH 	= 4Fh

AL 	= 04h

DL 	= 01h

CX 	= Eléments de l'état vidéo à restaurer

ES:BX	= Pointeur FAR sur l'adresse de segment du buffer de stockage

Sortie :

AL 	= 4Fh et

AH 	= 00h : Fonction exécutée correctement

Remarques :

·	Le buffer transmis doit auparavant être chargé avec les informations sur l'état vidéo à travers un appel de la sous-fonction 04h/01h.

·	Lors de l'appel de la fonction, les différents bits du registre CX montrent les éléments de l'état vidéo à restaurer. Dans ce cas, seul l'octet faible du registre CX est occupé par les bits suivants :

Bit 0 = 1	Statut de l'électronique vidéo

Bit 1 = 1	Variables de la zone de données BIOS

Bit 2 = 1	Registre de la table de couleurs DAC

Bit 3 = 1	Statut SuperVGA

Bit 4 à 7	Non occupé (0)


VESA : sauver l'état vidéo de la carte Super VGA    Int 10h, Fct 4Fh, Sous-Fct 04h/01h    VESA

Après un appel préalable de la sous-fonction 04h/00h, les informations souhaitées à propos des divers éléments de l'état vidéo sont stockées dans un buffer à l'aide de cette fonction.

Entrée :

AH 	= 4Fh

AL 	= 04h

DL 	= 01h

CX 	= Eléments de l'état vidéo à sauvegarder

ES:BX	= Pointeur FAR sur le buffer de stockage

Sortie :

AL	= 4Fh et

AH	= 00h : Fonction exécutée correctement

Remarques :

·	Le buffer transmis doit indiquer la taille obtenue lors de l'appel préalable de la sous-fonction 04h/00h à travers le registre BX.

·	Lors de l'appel de la fonction, les différents bits du registre CX indiquent les éléments de l'état vidéo à stocker. Dans ce cas, seul l'octet faible du registre CX est occupé par les bits suivants :

Bit 0 = 1	Statut de l'électronique vidéo

Bit 1 = 1	Variables de la zone de données BIOS

Bit 2 = 1	Registre de la table de couleurs DAC

Bit 3 = 1	Statut SuperVGA

Bit 4 à 7	Non occupé (0)


Vidéo : autoriser/verrouiller l'accès de l'unité centrale à la RAM vidéo    Int 10h, Fct 12h, Sous-Fct 32h    VGA

Cette fonction permet d'autoriser ou de verrouiller l'accès de l'unité centrale à la RAM vidéo et aux différents ports d'entrée/sortie d'une carte VGA.

Entrée :

AH	= 	12h

BL	= 	32h

AL	= 	0 : Accès autorisé

1 : Accès interdit

Sortie :

Aucune

Remarques :

·	Le BIOS EGA ne disposant pas de cette fonction, l'accès direct de l'unité centrale à la carte vidéo peut néanmoins être interdit en manipulant directement le bit 1 du registre de sortie (adresse de port 3C2h).

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Vidéo : définir les cartes vidéo primaire et secondaire    Int 10h, Fct 1Ah, Sous-Fct 01h    VGA

A l'intérieur d'un système équipé de deux cartes vidéo, cette fonction permet d'activer l'une des deux cartes et de désactiver l'autre.

Entrée :

AH 	= 1Ah

AL 	= 1

BL 	= Code de périphérique de la carte vidéo active

BH 	= Code de périphérique de la carte vidéo passive

Sortie :

AL 	= 1Ah

Remarques :

·	Si la valeur 1Ah n'est pas retournée dans le registre AL, cela signifie que ni un BIOS VGA ni une carte VGA n'est installé.

·	La liste des codes de périphérique est fournie dans le cadre de la description de la sous-fonction 00h.

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Vidéo : demander la taille de la zone de sauvegarde    Int 10h, Fct 1Ch, Sous-Fct 00h    VGA

Les trois sous-fonctions de la fonction 1Ch permettent de sauvegarder l'état en cours de l'équipement vidéo et du BIOS VGA dans un buffer du programme. A cet effet, le programme d'appel doit d'abord demander la taille du buffer nécessaire à l'aide de cette sous-fonction.

Entrée :

AH 	= 1Ch

AL 	= 0

CX 	= Composantes à sauvegarder (voir plus bas)

Sortie :

AL 	= 1Ch

BX 	= Taille de buffer en unités de 64 octets

Remarques :

·	Si la valeur 1Ch n'est pas retournée dans le registre AL, cela signifie que ni un BIOS VGA ni une carte VGA n'est installé.

·	Lors de l'appel de la fonction, les trois bits inférieurs indiquent les composantes de l'équipement vidéo et le BIOS VGA à sauvegarder dans le registre CX. Le bit approprié est à régler sur 1 si les éléments correspondants doivent être sauvegardés.

Bit 0 	= Equipement vidéo

Bit 1 	= Zone de données du BIOS VGA

Bit 3 	= Contenu du registre DAC

·	Notez que "l'équipement vidéo" n'inclut pas également le contenu de la RAM vidéo. La sauvegarde de ce dernier est à la charge du programme utilisateur.

·	Le contenu des registres CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Vidéo : lire le type d’adaptateur vidéo primaire et secondaire    Int 10h, Fct 1Ah, Sous-Fct 00h    VGA
Vidéo : lire le type d'adaptateur vidéo primaire et secondaire    Int 10h, Fct 1Ah, Sous-Fct 00h    VGA

Entrée :

AH	= 1Ah

AL	= 00h

Sortie :

AL	= 1Ah

BL	= Code de périphérique de la carte vidéo active

BH	= Code de périphérique de la carte vidéo non passive

Remarques :

·	Si la valeur 1Ah n'est pas renvoyée dans le registre AL, c'est qu'aucun BIOS VGA et donc aucune carte VGA n'est installée.

Les codes de périphérique suivants sont renvoyés :

FFh	=	Carte vidéo inconnue

00h	=	Pas de carte vidéo

01h	=	MDA avec écran monochrome

02h	=	CGA avec moniteur CGA

03h	=	Réservé

04h	=	EGA avec moniteur EGA ou Multisync

05h	=	EGA avec moniteur monochrome

06h	=	Réservé

07h	=	VGA avec écran monochrome analogique

08h	=	VGA avec écran couleur analogique (VGA, Multisync)

09h	=	Réservé

0Ah	=	Carte MCGA avec moniteur CGA (PS/2 uniquement)

0Bh	=	MCGA avec écran monochrome analogique (PS/2 uniquement)

0Ch	=	MCGA avec écran couleur analogique (PS/2 uniquement)

·	Il suffit qu'une seule carte vidéo soit présente dans le registre BH pour que la valeur 00h soit retournée.

·	Le contenu des registres CX, DX, SI, DI et BP ainsi que le contenu de tous les registres de segment ne sont pas modifiés par cette fonction.


Vidéo : lire les informations d'état concernant le mode vidéo et le BIOS VGA    Int 10h, Fct 1Bh    VGA

Cette fonction permet de lire toutes les caractéristiques du mode vidéo en cours ainsi que les informations concernant les techniques fondamentales du BIOS VGA.

Entrée :

 	AH 	= 1Bh

BX 	= 0

ES:DI 	= Pointeur sur un buffer

Sortie :

 	AL 	= 1Bh

Remarques :

·	Si la valeur 1Bh n'est pas retournée dans le registre AL, cela signifie que ni un BIOS VGA ni une carte VGA n'est installé.

·	Le buffer transmis par l'appel de cette fonction doit contenir au moins 64 Ko parce que le BIOS VGA y place une table comme celle présentée plus bas. Cette table contient toutes les informations décrivant le mode vidéo en cours.

Un pointeur se trouve au début de cette table. Il conduit vers une autre table située dans la ROM BIOS et pour laquelle le programme d'appel ne doit allouer aucune place mémoire. Elle reproduit les techniques du BIOS VGA qui sont indépendantes de la définition actuelle des différents paramètres (mode vidéo, registre de palettes, etc.).

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.

Structure du bloc de données avec les informations d'état du BIOS VGA compte tenu du mode

Offset	Contenu	Type

00h	Adresse de la table contenant les informations statiques	1 PTR

04h	Numéro de code du mode vidéo en cours	1 BYTE

05h	Nombre de colonnes de l'écran ou de points affichées	1 WORD

07h	Longueur d'une page écran à l'intérieur de la RAM vidéo	1 WORD

09h	Adresse de début de la page écran en cours dans la RAM vidéo	1 WORD

0Bh	Positions du curseur dans les huit pages écran maximales où la spécification de la colonne prévaut toujours par rapport à celle de la ligne	16 BYTE

1Bh	Ligne de fin du curseur (ligne de points)	1 BYTE

1Ch	Ligne de début du curseur (ligne de points)	1 BYTE

1Dh	Numéro de la page écran en cours	1 BYTE

1Eh	Adresse du port du registre d'adresse du contrôleur CRT	1 WORD

20h	Contenu actuel du registre CRTC dans l'adresse du port 3B8h (émulation DMA) ou 3D8h (VGA)	1 BYTE

21h	Contenu actuel du registre de sélection de couleurs dans l'adresse du port 3D9h 	1 BYTE

22h	Nombre de lignes écran affichées	1 BYTE

23h	Hauteur des caractères en lignes de points	1 WORD

25h	Numéro de code de l'adaptateur vidéo en cours	1 BYTE

26h	Numéro de code de l'adaptateur vidéo inactif	1 BYTE

27h	Nombre de couleurs à afficher (0 = monochrome)	1 WORD

29h	Nombre de pages écran	1 BYTE

2Ah	Nombre de lignes de points affichées	1 BYTE

2Bh	Numéro de la table de caractères utilisée et dont le bit 3 vaut 0 dans l'octet d'attribut	1 BYTE

2Ch	Numéro de la table de caractères utilisée et dont le bit 3 vaut 1 dans l'octet d'attribut	1 BYTE

2Dh	Informations diverses #1 (voir plus bas)	1 BYTE

2Eh	Réservé	3 BYTE

31h	Taille de la RAM vidéo disponible	1 BYTE

32h	Réservé	14 BYTE

64 octets

Structure du bloc de données avec les informations d'état du BIOS VGA compte tenu du mode (informations statiques)

Offset	Contenu	Type

00h	Modes vidéo reconnus (voir plus bas)	3 BYTE

03h	Réservé	4 BYTE

07h	Nombre des lignes de points dans les modes texte (voir plus bas)	1 BYTE

08h	Nombre maximal des jeux de caractères affichables	1 BYTE

09h	Nombre des tables de jeux de caractères à charger dans la RAM vidéo	1 BYTE

0Ah	Informations d'état sur les capacités du BIOS VGA (voir plus bas)	1 BYTE

0Bh	Autres informations d'état sur les capacités du BIOS VGA (voir plus bas)	1 BYTE

0Ch	Réservé	2 BYTE

0Eh	Réservé	2 BYTE

16 octets


Vidéo : lire les spécificités de la carte Super VGA    Int 10h, Fct 4Fh, Sous-Fct 00h    VESA

Cette fonction permet de prendre connaissance des techniques offertes par la carte Super VGA installée et déterminer si les fonctions VESA sont soutenues.

Entrée :

AH 	= 4Fh

AL 	= 00h

ES:DI : Pointeur FAR sur le buffer Info

Sortie :

AL 	= 4Fh et

AH 	= 00h : Fonctions VESA soutenues

Remarques :

·	Le buffer Info dont l'adresse est à transmettre à la fonction doit disposer de 256 octets. Si la fonction s'exécute correctement, vous obtenez les informations suivantes :

Structure du buffer Info

Offset	Contenu	Type

00h	Signature VESA ("VESA")	4 BYTE

04h	Version VESA, Numéro de version principal	1 BYTE

05h	Version VESA, Numéro de version secondaire	1 BYTE

06h	Pointeur FAR sur chaîne ASCIIZ contenant le nom du fabricant de cartes	1 DWORD

0Ah	Flag indiquant les performances de la carte. Actuellement inutilisé, donc 0000h.

0Eh	Pointeur FAR sur liste contenant les numéros de code des modes vidéo reconnus	1 DWORD

La liste des numéros de codes des modes vidéo reconnus, transmise dans le dernier champ du buffer, se compose de divers Words indiquant chacun le code d'un mode vidéo d'après le tableau ci-dessus. Cette liste se termine par un Word de valeur 0FFFFh. Sa longueur varie d'une carte à l'autre.


Vidéo : restaurer l'état vidéo    Int 10h, Fct 1Ch, Sous-Fct 02h    VGA

Suite à un appel préalable de la sous-fonction 01h, cette fonction peut restaurer l'état sauvegardé du matériel vidéo et/ou du BIOS VGA.

Entrée :

AH 	= 1Ch

AL 	= 2

CX 	= Composantes à restaurer

ES:BX	= Pointeur sur le buffer dans lequel les informations ont été sauvegardées

Sortie :

AL 	= 1Ch

Remarques :

·	Si la valeur 1Ch n'est pas retournée dans le registre AL, cela signifie que ni un BIOS VGA ni une carte VGA n'est installé.

·	L'appel de cette fonction n'a un sens que s'il s'effectue après un appel de la sous-fonction 01h. Le nombre de composantes restaurées dépend naturellement du nombre qui a été préalablement sauvegardé. Avant d'appeler cette fonction, pensez donc à vérifier le contenu du registre CX.

·	Lors de l'appel de la fonction, les trois bits inférieurs indiquent les composantes de l'équipement vidéo et le BIOS VGA à sauvegarder dans le registre CX. Le bit approprié est à régler sur 1 si les éléments correspondants doivent être sauvegardés.

Bit 0 	= Equipement vidéo

Bit 1 	= Zone de données du BIOS VGA

Bit 3 	= Contenu du registre DAC

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Vidéo : sauvegarder l'état vidéo    Int 10h, Fct 1Ch, Sous-Fct 01h    VGA

Après avoir demandé le buffer nécessaire à l'aide de la sous-fonction 00h, vous pouvez sauvegarder l'état du matériel vidéo et/ou du BIOS VGA que vous souhaitez avec cette fonction.

Entrée :

AH 	= 1Ch

AL 	= 1

CX 	= Composantes à sauvegarder

ES:BX = Pointeur sur le buffer devant stocker les informations

Sortie :

AL 	= 1Ch

Remarques :

·	Si la valeur 1Ch n'est pas retournée dans le registre AL, cela signifie que ni un BIOS VGA ni une carte VGA n'est installé.

·	Avant d'appeler cette fonction, il faut d'abord obtenir la taille du buffer nécessaire à l'aide de la sous-fonction 00h. Notez que le contenu du registre CX ne varie pas entre les deux appels sinon le buffer transmis risque d'être trop petit.

·	Lors de l'appel de la fonction, les trois bits inférieurs indiquent les composantes de l'équipement vidéo et le BIOS VGA à sauvegarder dans le registre CX. Le bit approprié est à régler sur 1 si les éléments correspondants doivent être sauvegardés.

Bit 0 	= Equipement vidéo

Bit 1 	= Zone de données du BIOS VGA

Bit 3 	= Contenu du registre DAC

·	Le contenu des registres BX, CX, DX, SI, DI et BP ainsi que celui de tous les registres de segment n'est pas modifié par cette fonction.


Mémoire

Définir le mode de répartition de la mémoire

Demander l'utilisation des UMB

Déplacer un bloc de mémoire

HIMEM.SYS : Indiquer l'adresse d'appel des fcts XMS

HIMEM.SYS : Tester la présence

Libérer la mémoire RAM

Lire l'utilisation des UMB

Lire la taille de la mémoire

Lire la taille de mémoire étendue

Lire le mode de répartition de la mémoire

Modifier la taille d'une zone de mémoire

Réserver la mémoire RAM


Définir le mode de répartition de la mémoire    Int 21h, Fct 58h, Sous-Fct 01h    DOS (>= 3)

Lorsqu'un programme réclame au DOS une zone de mémoire, à l'aide de la fonction 48h, la mémoire se trouve généralement déjà divisée en différentes zones affectées aux divers programmes. Comme ces zones de mémoire sont rarement exactement de la taille requise, le DOS dispose de différentes possibilités pour affecter une zone de mémoire au programme. Il peut rechercher une zone de mémoire appropriée en partant du bas de la mémoire et affecter alors au programme la première zone présentant au moins la taille requise. Il peut au contraire commencer sa recherche par le haut de la mémoire et affecter également la première zone convenable. La méthode la plus efficace consiste cependant à rechercher une zone de mémoire qui soit à peine plus grande que la zone réclamée, de façon à consommer le moins de mémoire possible. Dans ce cas, aucun compte n'est tenu de la situation de cette zone de mémoire à l'intérieur de l'ensemble de la mémoire.

Cette fonction permet donc de fixer laquelle de ces trois méthodes sera utilisée pour répartir la mémoire RAM.

Entrée :

AH 	= 58h

AL 	= 1

BX 	= Stratégie

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas

AX = 1 : Code de fonction inconnu

Remarques :

·	Le principe de répartition de la mémoire s'applique à tous les programmes et non pas seulement au programme actuel.

·	Le code de la répartition de la mémoire se définit comme suit :

Bit 0-1	= 00b 	: premier bloc convenable

= 01b	: meilleur bloc convenable

= 10b	: dernier bloc convenable

Bit 2-6	= 0b

Bit 7	= 0 	: Rechercher d'abord dans la mémoire conventionnelle (>= la version 5)

= 1	: Rechercher d'abord dans le UMB (>= la version 5)

Bit 8-15	= 0b

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Demander l'utilisation des UMB    Int 21h, Fct 58h, Sous-Fct 02h    DOS (>= 5.0)

A partir de la version 5.0, les blocs de mémoire supérieure (UMB) situés entre la limite des 640 Ko et 1 Mo peuvent être inclus dans la gestion de mémoire DOS. Cette fonction informe le programme d'appel si les UMB participent actuellement à la gestion de la mémoire.

Entrée :

AH 	= 58h

AL 	= 02h

Sortie :

Flag Carry	= 0 : Tout va bien, dans ce cas

AL	= 0 : UMB non utilisés

AL	= 1 : UMB inclus dans la gestion de la mémoire

Flag Carry	= 1 : Erreur, dans ce cas

AX	= 1 : UMB non reconnu car commande DOS = UMB non spécifiée

AX	= 7 : Gestion de la mémoire impossible

Remarques :

·	Le code d'erreur 7 est retourné lorsque DOS remarque une inconsistance dans sa gestion de mémoire. Elle est généralement due à un accès erroné à cette zone de mémoire à l'intérieur d'un programme DOS.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Déplacer un bloc de mémoire    Int 15h, Fct 87h    BIOS (>= AT)

Cette fonction permet de déplacer un nombre déterminé de cellules de mémoire entre la RAM sous la limite de 1 Mo et la RAM située au-dessus de cette limite.

Entrée :

AH 	= 87h

CX 	= Nombre de mots à transférer

ES 	= Adresse de segment de la GDT (table générale des descripteurs)

SI 	= Adresse d'offset de la GDT

Sortie :

Flag Carry =0 :	aucune erreur

Flag Carry =1 :	Erreur, dans ce cas

AH = 1 :	Erreur de parité de la RAM

AH = 2 :	GDT incorrecte lors d'appel de fonction

AH = 3 :	Mode protégé n'a pu être initialisé

Remarques :

·	Seuls des mots, et non des octets isolés, peuvent être transférés.

·	64 Ko au maximum peuvent être transférés. La valeur dans le registre CX ne doit donc pas être supérieure à 8000h.

·	Toutes les interruptions sont désactivées pendant le transfert du bloc de mémoire.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


HIMEM.SYS : Indiquer l'adresse d'appel des Fcts XMS    Int 2Fh, code MUX 43h, Fct 10h    MUX

Contrairement à ce qui se passe pour les autres gestionnaires de mémoire, les fonctions XMS de HIMEM.SYS ne sont pas déclenchées par des interruptions mais par une routine FAR CALL dont l'adresse est obtenue par le moyen de la présente fonction.

Entrée :

AH	= 43h

AL	= 10h

Sortie :

ES:BX = Pointeur FAR pour appeler les fonctions XMS

Remarque :

·	Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé au préalable que HIMEM.SYS est déjà installé


HIMEM.SYS : Tester la présence    Int 2Fh, code MUX 43h, Fct 00h    MUX

Cette fonction permet de tester la présence du driver de périphérique HIMEM.SYS qui permet d'accéder à la mémoire étendue selon le standard XMS.

Entrée :

AH	= 43h

AL	= 00h

Sortie :

AL	=80h: HIMEM.SYS installé

Remarque :

·	Notez bien que cette fonction contrairement à ses homologues qui effectuent également un test d'installation ne renvoie pas la valeur FFh en cas de succès mais la valeur 80h.

·	Pour assurer la compatibilité avec HIMEM.SYS, cet appel est aussi supporté par d'autres gestionnaires de mémoire XMS.


Libérer la mémoire RAM    Int 21h, Fct 49h    DOS (>= 1.0)

Cette fonction permet de libérer une zone de mémoire qui avait été auparavant réservée à l'aide de la fonction 48h, pour qu'elle soit à nouveau disponible pour d'autres programmes.

Entrée :

AH = 49h

BX = Nombre de paragraphes réservés

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas

AX = Code d'erreur

7 : Bloc de contrôle de la mémoire détruit

9 : La zone de mémoire commençant à l'adresse de segment spécifiée n'avait pas été réservée

Remarques :

·	Il n'est pas nécessaire d'indiquer à la fonction la taille de la zone de mémoire à libérer car cette taille est connue du DOS.

·	Si la fonction est appelée avec une adresse de segment erronée dans le registre ES, il se peut que soit libérée une zone de mémoire attribuée à un tout autre programme. Or cela peut avoir des conséquences imprévisibles allant jusqu'à un plantage du système.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Lire l'utilisation des UMB    Int 21h, Fct 58h, Sous-Fct 03h    DOS (>= 5.0)

A partir de la version 5.0, les blocs de mémoire supérieure (UMB) situés entre la limite des 640 Ko et 1 Mo peuvent être inclus dans la gestion de la mémoire DOS. Cette fonction détermine si les UMB peuvent faire partie de la gestion de la mémoire.

Entrée :

AH 	= 58h

AL 	= 03h

BX 	= 0 : UMB non inclus

1 : UMB inclus dans la gestion de mémoire

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas

AX = 1 : UMB non reconnus car commande DOS=UMB non spécifiée

AX = 7 : Gestion de mémoire impossible

Remarques :

·	Le code d'erreur 7 est retourné lorsque DOS remarque une inconsistance dans sa gestion de mémoire. Elle est généralement due à un accès erroné à cette zone de mémoire à l'intérieur d'un programme DOS.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Lire la taille de la mémoire     Int 12h    BIOS

Entrée :

aucune entrée

Sortie :

AX 	= Taille de la mémoire en Ko

Remarques :

·	Le PC et le XT ne peuvent recevoir plus de 640 Ko de RAM alors que l'AT peut encore recevoir jusqu'à 14 Mo de mémoire RAM au-delà de la limite de 1 Mo. La taille de cette mémoire supplémentaire n'est pas prise en compte dans la taille de mémoire indiquée par cette fonction. Pour connaître le volume de la mémoire au-delà de la limite de 1 Mo, vous pouvez utiliser la fonction 88h de l'interruption 15h. Cette fonction n'existe d'ailleurs que sur l'AT.

·	Seul le contenu du registre AX est modifié par l'appel de cette fonction.


Lire la taille de mémoire étendue    Int 15h, Fct 88h    BIOS (>= AT)

Cette fonction permet de déterminer la taille de la mémoire installée au-delà de la limite de 1 Mo.

Entrée :

AH 	= 88h

Sortie :

AX 	= Taille de la mémoire

Remarques :

·	Le paramètre dans le registre AX est exprimé en Ko.

·	La taille de la mémoire sous la limite de 1 Mo peut être lu à l'aide de l'interruption 12h.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Lire le mode de répartition de la mémoire     Int 21h, Fct 58h, Sous-Fct 00h    DOS (> 3)

Lorsqu'un programme réclame au DOS une zone de mémoire, à l'aide de la fonction 48h, la mémoire se trouve généralement déjà divisée en différentes zones affectées aux divers programmes. Comme ces zones de mémoire sont rarement exactement de la taille requise, le DOS dispose de différentes possibilités pour affecter une zone de mémoire au programme. Il peut rechercher une zone de mémoire appropriée en partant du bas de la mémoire et affecter alors au programme la première zone présentant au moins la taille requise. Il peut au contraire commencer sa recherche par le haut de la mémoire et affecter également la première zone convenable. La méthode la plus efficace consiste cependant à rechercher une zone de mémoire qui soit à peine plus grande que la zone réclamée, de façon à consommer le moins de mémoire possible. Dans ce cas, aucun compte n'est tenu de la situation de cette zone de mémoire à l'intérieur de l'ensemble de la mémoire.

Cette fonction permet donc de déterminer laquelle de ces trois méthodes est utilisée pour répartir la mémoire RAM.

Entrée :

AH 	= 58h

AL 	= 0

Sortie :

Flag Carry	=0 : Tout va bien, dans ce cas

AX	= 0 : Recherche en partant du bas

AX	= 1 : Recherche suivant la meilleure méthode

AX	= 2 : Recherche en partant du haut

Flag Carry	=1 : Erreur, dans ce cas

AX	= 1 : Code de fonction inconnu

Remarques :

·	Le principe de répartition de la mémoire s'applique à tous les programmes et non pas seulement au programme actuel.

·	Le code de la répartition de la mémoire se définit comme suit :

Bit 0-1	= 00b 	: premier bloc convenable

= 01b	: meilleur bloc convenable

= 10b	: dernier bloc convenable

Bit 2-6	= 0b

Bit 7	= 0 	: Rechercher d'abord dans la mémoire conventionnelle (>= la version 5)

= 1	: Rechercher d'abord dans le UMB (>= la version 5)

Bit 8-15	= 0b

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Modifier la taille d'une zone de mémoire    Int 21h, Fct 4Ah    DOS (>= 1.0)

Cette fonction permet de modifier la taille d'une zone de mémoire qui avait été auparavant réservée avec la fonction 48h. Cette zone peut aussi bien être agrandie que diminuée.

Entrée :

AH 	= 4Ah

BX 	= Nouvelle taille de la zone de mémoire en paragraphes

ES 	= Adresse de segment de la zone de mémoire

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas

AX = Code d'erreur

7 : Bloc de contrôle de la mémoire détruit

8 : Mémoire résiduelle insuffisante

9 : Bloc illégal

BX = Nombre de paragraphes encore disponibles

Remarques :

·	Un paragraphe comporte 16 octets.

·	Si la fonction est appelée avec une adresse de segment erronée dans le registre ES, il se peut que soit libérée une zone de mémoire attribuée à un tout autre programme. Or cela peut avoir des conséquences imprévisibles allant jusqu'à un plantage du système.

·	Dans un programme COM, il est conseillé d'utiliser cette fonction pour libérer toute la mémoire dont le programme n'a pas vraiment besoin car la totalité de la mémoire RAM disponible est toujours affectée à un programme COM lors de son lancement. Cela est notamment indispensable avant d'appeler la fonction EXEC (fonction numéro 4Bh).

·	Le contenu des registres CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Réserver la mémoire RAM    Int 21h, Fct 48h    DOS (>= 1.0)

Cette fonction permet de réserver une zone de mémoire à l'usage d'un programme.

Entrée :

AH 	= 48h

BX 	= Nombre de paragraphes réservés

Sortie :

Flag Carry	=0 : Tout va bien, dans ce cas

AX	= Adresse de segment de la zone de mémoire

Flag Carry	=1 : Erreur, dans ce cas

AX	= Code d'erreur

7 : Bloc de contrôle de la mémoire détruit

8 : Mémoire résiduelle insuffisante

BX = Nombre de paragraphes encore disponibles

Remarques :

·	Un paragraphe comporte 16 octets.

·	Si la mémoire demandée a pu être réservée, elle commence à l'adresse AX:0000.

·	Dans un programme COM, l'appel de cette fonction échouera systématiquement puisque la totalité de la place mémoire disponible est toujours affectée à un programme COM lors de son lancement.

·	Le contenu des registres CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Disquette

Définir le format de disquette

Définir le format de disquette

Détecter un changement de disquette

Ecriture

Formatage

Lecture

Lire l'état

Lire le format

Lire le type de lecteur

Réinitialiser le lecteur de disquette

Vérification


Définir le format de disquette     Int 13h, Fct 17h    BIOS (>= AT)

Cette fonction permet de configurer un lecteur par rapport à un format de disquette précis. Cette fonction est déjà utilisée dans les versions 3.0 et 3.1 de DOS, mais à partir de la version 3.2, cette tâche est remplie par la fonction 18h. Les programmes doivent également éviter cette fonction d'autant qu'elle ne convient pas aux lecteurs 3,5" qui se sont largement répandus dans le monde PC.

Entrée :

AH 	= 17h

AL 	= Format

1:	formater en 320/360 Ko sur un lecteur 320/360 Ko

2:	formater en 320/360 Ko sur un lecteur 1,2 Mo

3:	formater en 1,2 Mo sur un lecteur 1,2 Mo

4:	formater en 720 Ko sur un lecteur 720 Ko

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur

Remarques :

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Définir le format de disquette     Int 13h, Fct 18h    BIOS (>= AT)

Cette fonction remplace la fonction 17h. Elle doit être appelée pour définir le format des disquettes. Mais elle ne doit être appelée qu'après avoir inséré une disquette dans le lecteur spécifié, sinon elle signale une erreur.

Entrée :

AH 	= 18h

CH 	= Nombre de pistes

CL 	= Nombre de secteurs

DL 	= Numéro du lecteur (0 ou 1)

Sortie :

Flag Carry = 0 : Opération exécutée

Flag Carry = 1 : Erreur

Remarques :

·	Dans ce cas, cette fonction doit être appelée avant le premier appel de la fonction de formatage 05h pour que le BIOS puisse être configuré au format de disquette souhaité.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Détecter un changement de disquette     Int 13h, Fct 16h    BIOS (>= AT)

L'AT soutient non seulement les anciens lecteurs 320/360 Ko mais aussi les nouveaux lecteurs 1,2 Mo. Ces nouveaux lecteurs disposent, contrairement aux précédents, de la possibilité de détecter un changement de disquette. Si vous disposez d'un lecteur de disquette de ce type, cette fonction vous permet de tester si un changement de disquette est intervenu depuis le dernier accès à la disquette.

Entrée :

AH 	= 16h

DL 	= Numéro du lecteur de disquette (0 ou 1)

Sortie :

AH 	= 0 : Pas de changement de disquette

AH 	= 6 : Disquette changée depuis le dernier accès disquette

Remarques :

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Ecriture     Int 13h, Fct 03h    BIOS

Cette fonction permet d'écrire un ou plusieurs secteurs sur la disquette. Les données à transférer sont tirées d'un buffer.

Entrée :

AH 	= 03h

DL 	= Numéro du lecteur de disquette

DH 	= Numéro de la face de disquette (0 ou 1)

CH 	= Numéro de piste

CL 	= Numéro de secteur

AL 	= Nombre de secteurs à écrire

ES 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Opération exécutée, dans ce cas AH=0

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le nombre de secteurs à écrire, qui est spécifié dans le registre AL, est limité par le fait qu'un seul appel de fonction ne permet d'écrire que sur des secteurs consécutifs sur une même piste d'une même face de disquette.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Formatage     Int 13h, Fct 05h    BIOS

En appelant cette fonction, vous pouvez formater une piste complète d'une face de la disquette. Il faut communiquer à la fonction, à cet effet, l'adresse d'un buffer contenant certaines informations sur les secteurs à formater.

Entrée :

AH 	= 05h

DL 	= Numéro du lecteur de disquette

DH 	= Numéro de la face de disquette (0 ou 1)

CH 	= Numéro de piste

AL 	= Nombre de secteurs à vérifier

ES 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Opération exécutée, dans ce cas AH=0

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le nombre de secteurs à formater, qui est spécifié dans le registre AL, est limité par le fait qu'un seul appel de fonction ne permet de formater que des secteurs consécutifs sur une même piste d'une même face de disquette.

·	En ce qui concerne les AT et les systèmes équipés d'un processeur 80386 ou 80486, il faut appeler la fonction 17h avant d'appeler cette fonction pour déterminer le type de la disquette à formater.

·	Le buffer dont l'adresse est fournie dans ES:BX contient pour chaque secteur à formater une entrée composée de 4 octets consécutifs :

1. Numéro de piste

2. Numéro de face

3. Numéro logique du secteur

4. Nombre d'octets dans ce secteur

0 : 128 octets

1 : 256 octets

2 : 512 octets (Standard PC)

3 : 1024 octets

Les numéros de piste et de face doivent être identiques pour tous les secteurs alors que le numéro de secteur doit être au contraire différent pour chacun. Ce numéro de secteur peut être décalé par rapport au numéro de secteur physique.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Lecture    Int 13h, Fct 02h    BIOS

Cette fonction permet de lire un ou plusieurs secteurs sur la disquette pour les transférer dans un buffer.

Entrée :

AH 	= 02h

DL 	= Numéro du lecteur de disquette

DH 	= Numéro de la face de disquette (0 ou 1)

CH 	= Numéro de piste

CL 	= Numéro de secteur

AL 	= Nombre de secteurs à lire

ES 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Opération exécutée, dans ce cas AH=0

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le nombre de secteurs à lire, qui est spécifié dans le registre AL, est limité par le fait qu'un seul appel de fonction ne permet de lire que des secteurs consécutifs sur une même piste d'une même face de disquette.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Lire l'état    Int 13h, Fct 01h    BIOS

Cette fonction permet de consulter l'état de la dernière opération disquette.

Entrée :

AH 	= 01h

DL 	= 0 ou 1

Sortie :

Flag Carry =0 : Opération exécutée, dans ce cas AH=0

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	La valeur dans le registre DL ne sert à rien en fait car l'état est toujours renvoyé pour le lecteur de disquette auquel il avait été accédé en dernier. Il est cependant utilisé sur le XT et l'AT pour distinguer si c'est l'état du lecteur de disquette ou du disque dur qui doit être consulté.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Lire le format    Int 13h, Fct 08h    BIOS (>= AT)

Cette fonction permet de déterminer la capacité d'une unité de disquettes et le format des disquettes. On se réfère ici aux capacités physiques de l'unité et non au format de la disquette qui y est insérée.

Entrée :

AH	= 08h

DL	= Numéro de l'unité de disquettes

Sortie :

Flag Carry	= 0 : Opération exécutée, dans ce cas

AH	= 0

BL	= Type de l'unité

01h = 5,25", 360 Ko

02h = 5,25", 1,2 Mo

03h = 3,5", 720 Ko

04h = 3,5", 1,44 Mo

DH	= Numéro de tête (toujours 1)

CH	= Nombre de pistes

CL	= Nombre de secteurs

Flag Carry	= 1 : Erreur, dans ce cas AH = Code d'erreur

Remarques :

·	Le contenu des registres SI, BP et des registres de segment CS, DS et SS n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Lire le type de lecteur    Int 13h, Fct 15h    BIOS (>= AT)

L'AT soutient non seulement les anciens lecteurs 320/360 Ko mais aussi les nouveaux lecteurs 1,2 Mo. Ces nouveaux lecteurs disposent, contrairement aux précédents, de la possibilité de détecter un changement de disquette. Cette fonction vous permet de tester si le lecteur utilisé dispose de cette possibilité.

Entrée :

AH	= 15h

DL 	= Numéro du lecteur de disquette (0 ou 1)

Sortie :

Flag Carry =0 : Opérations exécutée, dans ce cas

AH	=type du lecteur

0 : Périphérique absent

1 : Lecteur ne détecte pas les changements de disquette

2 : Lecteur détecte les changements de disquette

3 : Disque dur (voir Remarques)

1 : Erreur

Remarques :

·	Il se peut que l'unité testée soit un disque dur car l'AT comporte un contrôleur qui peut gérer, au choix, 2 lecteurs de disquette et un disque dur ou bien un lecteur de disquette et 2 disques durs. Dans ce dernier cas, le premier disque dur porte le numéro 1 et peut donc être testé à l'aide de cette fonction.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Réinitialiser le lecteur de disquette    Int 13h, Fct 00h    BIOS

L'appel de cette fonction déclenche une réinitialisation du contrôleur de disquette ainsi que des lecteurs de disquette connectés. Il convient d'effectuer une réinitialisation (Reset) après toute opération disquette à la suite de laquelle une erreur a été signalée.

Entrée :

AH	= 00h

DL 	= 0 ou 1

Sortie :

Flag Carry = 0 : Opération exécutée, dans ce cas AH=0

Flag Carry = 1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	La valeur dans le registre DL ne sert à rien en fait car la réinitialisation est effectuée sur tous les lecteurs de disquette. Elle est cependant utilisée sur le XT et l'AT pour signaler si la réinitialisation doit concerner les lecteurs de disquette ou le disque dur.

·	Les codes d'erreur suivants peuvent se présenter :

01h :	Numéro de fonction non autorisé

02h :	Marque d'adresse non trouvée

03h :	Tentative d'écriture sur disquette protégée contre l'écriture

04h :	Secteur appelé non trouvé

08h :	Débordement DMA

09h :	Transfert de données par-delà la limite de segment

10h :	Erreur de lecture

20h :	Erreur sur le contrôleur de disque

40h :	Piste non trouvée

80h :	Erreur de Time Out, le lecteur ne réagit pas

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment SS, CS et DS n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Vérification     Int 13h, Fct 04h    BIOS

Cette fonction permet de comparer un ou plusieurs secteurs de la disquette avec les données d'un buffer en mémoire. Cela permet par exemple, à la suite d'une instruction d'écriture, de vérifier si les données ont été correctement transférées sur la disquette.

Entrée :

AH 	= 04h

DL 	= Numéro du lecteur de disquette

DH 	= Numéro de la face de disquette (0 ou 1)

CH 	= Numéro de piste

CL 	= Numéro de secteur

AL 	= Nombre de secteurs à vérifier

ES 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Opération exécutée, dans ce cas AH=0

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le nombre de secteurs à vérifier, qui est spécifié dans le registre AL, est limité par le fait qu'un seul appel de fonction ne permet de vérifier que des secteurs consécutifs sur une même piste d'une même face de disquette.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Disque dur

Adaptation de disques durs étrangers    Int 13h, Fct 09h    BIOS

Déplacer tête de lecture/écriture    Int 13h, Fct 0Ch    BIOS (>= XT)

Ecriture

Ecriture de secteurs étendus

Formatage

Formatage XT

Formatage XT

Le lecteur est-il prêt ?

Lecture

Lecture de secteurs étendus

Lire l'état du disque dur

Lire le format

Lire le type de lecteur

Ranger les têtes de lecture

Recalibrage du lecteur

Réinitialisation

Reset

Test d'écriture du contrôleur

Test de lecteur

Test de lecture du contrôleur

Test du contrôleur interne

Test du contrôleur RAM

Vérification


Adaptation de disques durs étrangers    Int 13h, Fct 09h    BIOS

Cette fonction permet d'adapter des lecteurs étrangers de façon à ce que les fonctions du BIOS puissent y accéder.

Entrée :

AH 	= 09h

DL 	= Numéro de disque dur (80h ou 81h)

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Le BIOS tire les informations nécessaires sur le disque dur à adapter (nombre de têtes de lecture/écriture, etc...) d'une table. L'adresse de cette table figure dans le vecteur d'interruption 41h pour le disque dur numéro 80h et dans le vecteur 46h pour le disque dur numéro 81h. C'est sous ces vecteurs que vous trouverez de plus amples renseignements sur cette table.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Déplacer tête de lecture/écriture    Int 13h, Fct 0Ch    BIOS (>= XT)

Cette fonction permet de positionner l'une des têtes de lecture/écriture du disque dur sur un cylindre donné. Cette option s'avère particulièrement utile lors d'un transport pour éviter que la tête ne vienne s'écraser sur un cylindre utilisé.

Entrée :

AH 	= 0Ch

DL 	= Numéro du lecteur de disque (80h ou 81h)

DH 	= Numéro de tête de lecture/écriture

CH 	= Numéro du cylindre

CL 	= Numéro du secteur

Sortie :

Flag Carry = 0 : Opération exécutée

Flag Carry = 1 : Erreur, dans ce cas AH = Code d'erreur.

Remarques :

·	Le premier lecteur de disque porte le numéro 80h, le second le numéro 81h.

·	Comme les 8 bits du registre CH ne permettent d'adresser que 256 cylindres, les bits 6 et 7 constituent le numéro de secteur (registre CL), les bits 8 et 9 le numéro de cylindre et permettent ainsi d'adresser jusqu'à 1023 cylindres.

·	Lors des opérations de lecture/écriture, la tête de lecture/écriture se positionne automatiquement, si bien qu'il n'est pas nécessaire d'appeler préalablement cette fonction.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Ecriture    Int 13h, Fct 03h    BIOS

Cette fonction permet d'écrire sur un ou plusieurs secteurs du disque dur. Les données à transférer sont tirées d'un buffer mis en place dans le programme d'appel.

Entrée :

AH 	= 03h

DL 	= Numéro de disque dur (80h ou 81h)

DH 	= Numéro de tête de lecture/écriture

CH 	= Numéro de cylindre

CL 	= Numéro de secteur

AL 	= Nombre de secteurs à écrire (1 - 128)

ES 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Les 8 bits du registre CH ne permettant d'adresser que 256 cylindres, les bits 6 et 7 du numéro de secteur (registre CL) représentent les bits 8 et 9 du numéro de cylindre et permettent ainsi d'adresser jusqu'à 1023 cylindres.

·	Si on écrit sur plusieurs secteurs et que le dernier secteur d'un cylindre est atteint, l'écriture se poursuit sur le premier secteur du même cylindre sur la prochaine tête de lecture/écriture. Une fois la dernière tête de lecture/écriture atteinte, l'écriture se poursuit sur le premier secteur du cylindre suivant sur la première tête de lecture/écriture.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Ecriture de secteurs étendus    Int 13h, Fct 0Bh    BIOS

Cette fonction permet d'écrire un ou plusieurs secteurs sur le disque dur provenant d'un buffer. Outre les 512 octets que comporte le secteur, seront également écrits les 4 octets de contrôle (ECC), tirés du buffer, qui sont stockés à la fin de chaque secteur.

Entrée :

AH 	= 0Bh

DL 	= Numéro de disque dur (80h ou 81h)

DH 	= Numéro de tête de lecture/écriture

CH 	= Numéro de cylindre

CL 	= Numéro de secteur

AL 	= Nombre de secteurs à écrire (1 - 127)

ES 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Les 4 octets de contrôle sont normalement calculés par le contrôleur mais ici il les tire directement du buffer.

·	Les 8 bits du registre CH ne permettant d'adresser que 256 cylindres, les bits 6 et 7 du numéro de secteur (registre CL) représentent les bits 8 et 9 du numéro de cylindre et permettent ainsi d'adresser jusqu'à 1023 cylindres.

·	Si on écrit sur plusieurs secteurs et que le dernier secteur d'un cylindre est atteint, l'écriture se poursuit sur le premier secteur du même cylindre sur la prochaine tête de lecture/écriture. Une fois la dernière tête de lecture/écriture atteinte, l'écriture se poursuit sur le premier secteur du cylindre suivant sur la première tête de lecture/écriture.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Formatage    Int 13h, Fct 05h    BIOS

Cette fonction permet de formater un cylindre complet, par exemple 17 secteurs du disque dur. La fonction a cependant besoin pour cela que le programme d'appel lui communique dans un buffer un certain nombre d'informations supplémentaires.

Entrée :

AH 	= 05h

DL 	= Numéro de disque dur (80h ou 81h)

DH 	= Numéro de tête de lecture/écriture

CH 	= Numéro de cylindre

CL 	= Numéro de secteur (1 en général)

AL 	= Nombre de secteurs / cylindre

ES 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Les 8 bits du registre CH ne permettant d'adresser que 256 cylindres, les bits 6 et 7 du numéro de secteur (registre CL) représentent les bits 8 et 9 du numéro de cylindre et permettent ainsi d'adresser jusqu'à 1023 cylindres.

·	Comme c'est toujours un cylindre complet qui est formaté à la fois, le premier secteur à formater, dans le registre CL, est toujours le secteur 1. Pour la même raison, le nombre de secteurs à formater, dans le registre AL, est souvent 17 car les disques durs standard travaillent avec 17 secteurs par cylindre.

·	Le buffer dont l'adresse est fournie en ES:BX doit avoir une taille de 512 octets au moins. Les 17 secteurs à formater d'un cylindre n'occupent toutefois que les 34 premiers octets de ce buffer. Les informations correspondant à chaque secteur physique sont chaque fois stockées dans deux octets consécutifs. Le premier octet n'a aucune signification avant appel de la fonction mais indique après l'appel de fonction si le secteur a pu être formaté (00h) ou non (80h). Le second octet spécifie le numéro de secteur logique. Il doit être inscrit dans le buffer par le programme d'appel avant appel de la fonction.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Formatage XT    Int 13h, Fct 06h    BIOS

Auparavant, cette fonction servait à formater les disques durs XT. A l'heure actuelle, elle ne joue aucun rôle dans la programmation.


Formatage XT    Int 13h, Fct 07h    BIOS

Auparavant, cette fonction servait à formater les disques durs XT. A l'heure actuelle, elle ne joue aucun rôle dans la programmation.


Le lecteur est-il prêt ?    Int 13h, Fct 10h    BIOS

Cette fonction permet de déterminer si le lecteur de disque dur est prêt, c'est-à-dire si la dernière opération est déjà achevée.

Entrée :

AH 	= 10h

DL 	= (80h ou 81h)

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Lecture    Int 13h, Fct 02h    BIOS

Cette fonction permet de lire un ou plusieurs secteurs sur le disque dur, pour les transférer dans un buffer.

Entrée :

AH 	= 02h

DL 	= Numéro de disque dur (80h ou 81h)

DH 	= Numéro de tête de lecture/écriture

CH 	= Numéro de cylindre

CL 	= Numéro de secteur

AL 	= Nombre de secteurs à lire (1 - 128)

ES 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Les 8 bits du registre CH ne permettant d'adresser que 256 cylindres, les bits 6 et 7 du numéro de secteur (registre CL) représentent les bits 8 et 9 du numéro de cylindre et permettent ainsi d'adresser jusqu'à 1023 cylindres.

·	Si plusieurs secteurs sont lus et que le dernier secteur d'un cylindre est atteint, la lecture se poursuit sur le premier secteur du même cylindre sur la prochaine tête de lecture/écriture. Une fois la dernière tête de lecture/écriture atteinte, la lecture se poursuit sur le premier secteur du cylindre suivant sur la première tête de lecture/écriture.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Lecture de secteurs étendus    Int 13h, Fct 0Ah    BIOS

Cette fonction permet de lire un ou plusieurs secteurs sur le disque dur pour les transférer dans un buffer. Outre les 512 octets que comporte le secteur, seront également lus les 4 octets de contrôle (ECC) qui sont stockés à la fin de chaque secteur.

Entrée :

AH 	= 0Ah

DL 	= Numéro de disque dur (80h ou 81h)

DH 	= Numéro de tête de lecture/écriture

CH 	= Numéro de cylindre

CL 	= Numéro de secteur

AL 	= Nombre de secteurs à lire (1 - 127)

ES 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Les 4 octets de contrôle sont normalement calculés par le contrôleur mais ici il les tire directement du buffer.

·	Les 8 bits du registre CH ne permettant d'adresser que 256 cylindres, les bits 6 et 7 du numéro de secteur (registre CL) représentent les bits 8 et 9 du numéro de cylindre et permettent ainsi d'adresser jusqu'à 1023 cylindres.

·	Si on lit plusieurs secteurs et que le dernier secteur d'un cylindre est atteint, la lecture se poursuit sur le premier secteur du même cylindre sur la prochaine tête de lecture/écriture. Une fois la dernière tête de lecture/écriture atteinte, la lecture se poursuit sur le premier secteur du cylindre suivant sur la première tête de lecture/écriture.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Lire l'état du disque dur    Int 13h, Fct 01h    BIOS

Cette fonction permet de connaître l'état de la dernière opération sur disque dur.

Entrée :

AH 	= 01h

DL 	= 80h ou 81h

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	La valeur dans le registre DL ne sert à rien en fait car l'état est toujours renvoyé pour le disque dur auquel il a été accédé en dernier lieu. Elle est utilisée sur le XT et sur l'AT pour distinguer si c'est l'état d'un lecteur de disquette ou de disque dur qui doit être obtenu.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Lire le format    Int 13h, Fct 08h    BIOS (XT AT)

En appelant cette fonction, un programme peut connaître le format ou les caractéristiques du disque dur.

Entrée :

AH 	= 08h

DL 	= Numéro de disque dur (80h ou 81h)

Sortie :

Flag Carry =0 : Opération exécutée, dans ce cas

DL = Nombre de disques durs connectés

DH = Nombre de têtes de lecture/écriture (0=première tête)

CH = Nombre de cylindres

CL = Nombre de secteurs

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Les 8 bits du registre CH ne permettant d'adresser que 256 cylindres, les bits 6 et 7 du numéro de secteur (registre CL) représentent les bits 8 et 9 du numéro de cylindre et permettent ainsi d'adresser jusqu'à 1023 cylindres.

·	La formule suivante permet de calculer la capacité totale du disque dur en octets :

Capacité = Têtes * Cylindres * Secteurs * 512

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Lire le type de lecteur    Int 13h, Fct 15h    BIOS (>= AT)

L'AT contient un contrôleur qui peut gérer aussi bien des disques durs que des lecteurs de disquette. Il peut gérer soit 2 lecteurs de disquette et un disque dur, soit 2 disques durs et un lecteur de disquette. Cette fonction vous permet donc de déterminer si les périphériques portant les numéros 80h et 81h sont des lecteurs de disquette ou de disque dur.

Entrée :

AH 	= 15h

DL 	= Numéro de lecteur (80h ou 81h)

Sortie :

Flag Carry =0 : Opération exécutée, dans ce cas AH = 03h

CX	= Mot de poids fort du nombre de secteurs

DX 	= Mot de poids faible du nombre de secteurs

Flag Carry =1 : Erreur, pas de lecteur de disque dur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	La capacité du disque dur en octets se calcule d'après la formule ((CX*65536) + DX) * 512

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Ranger les têtes de lecture    Int 13h, Fct 19h    BIOS

Cette fonction permet de parquer les têtes du disque dur avant un transport.

Entrée :

AH 	= 19h

DL 	= (80h ou 81h)

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Recalibrage du lecteur    Int 13h, Fct 11h    BIOS

Après apparition d'une erreur (surtout s'il s'agit d'une erreur de lecture ou écriture), il est conseillé d'opérer non seulement une réinitialisation mais aussi un recalibrage du disque dur.

Entrée :

AH 	= 11h

DL 	= (80h ou 81h)

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Réinitialisation    Int 13h, Fct 0Dh    BIOS

Lorsque cette fonction est appelée, une réinitialisation est opérée sur le contrôleur de disque dur ainsi que sur les disques durs connectés. Il convient d'effectuer une réinitialisation après toute opération sur disque dur à la suite de laquelle une erreur a été signalée.

Entrée :

AH 	= 0Dh

DL 	= (80h ou 81h)

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	La valeur dans le registre DL ne sert à rien en fait car la réinitialisation est systématiquement opérée sur tous les disques durs connectés. Elle est cependant utilisée, sur le XT et l'AT, pour distinguer si la réinitialisation doit concerner les lecteurs de disquette ou le disque dur.

·	Cette fonction est identique à la fonction 0.

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Reset    Int 13h, Fct 00h    BIOS

Si vous appelez cette fonction, un Reset est effectué aussi bien sur le contrôleur de disque dur que sur les lecteurs de disque dur connectés. Il convient d'effectuer une réinitialisation après toute opération disque dur à la suite de laquelle une erreur a été signalée.

Entrée :

AH 	= 00h

DL 	= 80h ou 81h

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	La valeur dans le registre DL ne sert à rien en fait car une réinitialisation est effectuée sur tous les lecteurs de disque dur. Elle est utilisée sur le XT et sur l'AT pour distinguer si la réinitialisation doit concerner les lecteurs de disquette ou de disque dur.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Test d'écriture du contrôleur    Int 13h, Fct 0Fh    BIOS (PS/2)

Cette fonction effectue un test interne de la transmission des données entre le contrôleur et le CPU dans le cas des ordinateurs PS/2 uniquement. Elle n'est pas conçue pour être appelée par un programme d'application.


Test de lecteur    Int 13h, Fct 13h    BIOS (PS/2)

Cette fonction n'effectue un test interne du contrôleur du lecteur que pour les ordinateurs PS/2. Elle n'est donc pas conçue pour être appelée par un programme d'application.


Test de lecture du contrôleur    Int 13h, Fct 0Eh    BIOS (PS/2)

Cette fonction effectue un test interne de la transmission des données entre le contrôleur et le CPU dans le cas des ordinateurs PS/2 uniquement. Elle n'est pas conçue pour être appelée par un programme d'application.


Test du contrôleur interne    Int 13h, Fct 14h        BIOS

Après appel de cette fonction, le contrôleur disque est soumis à un test interne.

Entrée :

AH = 14h

DL = 80h ou 81h

Sortie :

Flag Carry = 0 : Opération exécutée

Flag Carry = 1 : Erreur, dans ce cas AH=Code d'erreur

Le premier lecteur de disque porte le numéro 80h, le deuxième 81h.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

Cette fonction ne modifie pas le contenu des registres BX, CX, DX, SI, DI, BP et le registre de segment. Le contenu de tous les autres registres peut avoir été modifié.


Test du contrôleur RAM    Int 13h, Fct 12h    BIOS (PS/2)

Cette fonction n'effectue un test interne du contrôleur RAM que pour les ordinateurs PS/2. Elle n'est donc pas conçue pour être appelée par un programme d'application.


Vérification    Int 13h, Fct 04h    BIOS

Cette fonction permet de vérifier un ou plusieurs secteurs du disque dur. Contrairement à la fonction disquette équivalente, cette fonction ne compare cependant pas les données du disque dur avec des données en mémoire. 4 octets de contrôle sont en effet systématiquement sauvegardés avec chaque secteur. Ils permettent ainsi de vérifier le contenu d'un secteur, même bien après qu'il ait été sauvegardé.

Entrée :

AH 	= 04h

DL 	= Numéro de disque dur (80h ou 81h)

DH 	= Numéro de tête de lecture/écriture

CH 	= Numéro de cylindre

CL 	= Numéro de secteur

AL 	= Nombre de secteurs à vérifier (1 - 128)

ES 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Opération exécutée

Flag Carry =1 : Erreur, dans ce cas AH=Code d'erreur

Remarques :

·	Le premier lecteur de disque dur porte le numéro 80h, le second le numéro 81h.

·	Les 8 bits du registre CH ne permettant d'adresser que 256 cylindres, les bits 6 et 7 du numéro de secteur (registre CL) représentent les bits 8 et 9 du numéro de cylindre et permettent ainsi d'adresser jusqu'à 1023 cylindres.

·	Si on vérifie plusieurs secteurs et que le dernier secteur d'un cylindre est atteint, la vérification se poursuit sur le premier secteur du même cylindre sur la prochaine tête de lecture/écriture. Une fois la dernière tête de lecture/écriture atteinte, la vérification se poursuit sur le premier secteur du cylindre suivant sur la première tête de lecture/écriture.

·	Les codes d'erreur suivants peuvent apparaître :

01h :	Numéro de fonction non autorisé ou lecteur appelé absent

02h :	Marque d'adresse non trouvée

04h :	Secteur non trouvé

05h :	Erreur lors de réinitialisation contrôleur

07h :	Erreur lors d'initialisation du contrôleur

09h :	Erreur de transmission DMA : transfert de données par-delà la limite de segment

0Ah :	Secteur défectueux

10h :	Erreur de lecture

11h :	Erreur de lecture corrigée par ECC

20h :	Contrôleur défectueux

40h :	Opération de recherche infructueuse

80h :	Lecteur ne répond pas (Time Out)

AAh :	Lecteur n'est pas prêt

CCh :	Erreur en écriture

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Interface série

Emission de caractères

Initialisation

Réception d'un caractère

Réception d'un caractère

Sortie d'un caractère vers l'interface série

Tester l'état de l'interface


Emission de caractères    Int 14h, Fct 01h    BIOS

Cette fonction est appelée pour envoyer des caractères à travers une interface série.

Entrée :

AH = 	01h

DX = 	Numéro d'interface série (la première interface série porte le numéro 0)

AL = 	Code du caractère à transmettre

Sortie :

AH :

Bit 7 = 0 : Caractère a été transmis

Bit 7 = 1 : Erreur, dans ce cas :

Bits 0 à 6 = 	Etat de l'interface série

Bit 0 : Données prêtes

Bit 1 : Débordement

Bit 2 : Erreur de parité

Bit 3 : Erreur de protocole

Bit 4 : Break détecté

Bit 5 : Registre d'attente de transmission vide

Bit 6 : Registre de décalage de transmission vide

Remarques :

·	L'interface série appelée COM1 par le DOS porte le numéro 0, COM2 le numéro 1.

·	Si le bit 7 du registre AH est réglé après l'appel de la fonction, on est en présence d'une erreur Time Out (dépasseement de délai). Les bits restants spécifient alors avec précision la cause de l'erreur.

·	Le contenu des registres AL, BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Initialisation    Int 14h, Fct 00h    BIOS

Cette fonction permet d'initialiser et de configurer une interface série connectée sur le PC en définissant la parité de la transmission ainsi que le nombre de bits d'arrêt et la vitesse de transmission en bauds.

Entrée :

AH 	= 00h

DX 	= Numéro d'interface série (la première interface série porte le numéro 0)

AL 	= Paramètres de configuration

Bits 0-1 : 	largeur de données

10(b) = 7 bits

11(b) = 8 bits

Bit 2 : 	Nombre de bits d'arrêt

0(b) = 1 bit d'arrêt

1(b) = 2 bits d'arrêt

Bit 3-4 : 	Contrôle de parité

00(b) = aucun

01(b) = impaire

11(b) = paire

Bits 5-7 : 	Vitesse de transmission

000(b) = 110 bauds

001(b) = 150 bauds

010(b) = 300 bauds

011(b) = 600 bauds

100(b) = 1200 bauds

101(b) = 2400 bauds

110(b) = 4800 bauds

111(b) = 9600 bauds

Sortie :

AH 	= Etat de l'interface série

Bit 0 :	Données prêtes

Bit 1 :	Débordement

Bit 2 :	Erreur de parité

Bit 3 :	Erreur de protocole

Bit 4 :	 Break détecté

Bit 5 :	Registre d'attente de transmission vide

Bit 6 :	Registre de décalage de transmission vide

Bit 7 :	Time Out (Périphérique ne répond pas)

AL 	= Etat du modem

Bit 0 :	(Delta) Modem prêt à émettre

Bit 1 :	(Delta) Modem activé

Bit 2 :	(Delta) Téléphone sonne

Bit 3 :	(Delta) Liaison avec modem récepteur établie

Bit 4 :	Modem prêt à émettre

Bit 5 :	Modem activé

Bit 6 :	Téléphone sonne

Bit 7 :	Liaison avec modem récepteur établie

Remarques :

·	L'interface série appelée COM1 par le DOS porte le numéro 0, COM2 le numéro 1.

·	Les bits Delta montrent la modification de l'état en cours par rapport au dernier appel de la fonction. Si un bit Delta est posé, cela signifie que l'état correspondant a changé entre-temps.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Réception d'un caractère    Int 14h, Fct 02h    BIOS

Reçoit un caractère de l'interface série.

Entrée :

AH 	= 02h

DX 	= Numéro d'interface série (la première interface série porte le numéro 0)

Sortie :

AH : 	Bit 7 = 0 : Caractère a été reçu, dans ce cas : AL = Caractère reçu

Bit 7 = 1 : Erreur, dans ce cas :

Bits 0-6 :	Etat de l'interface série

Bit 0 :	Données prêtes

Bit 1 :	Débordement

Bit 2 :	Erreur de parité

Bit 3 :	Erreur de protocole

Bit 4 :	Break détecté

Bit 5 :	Registre d'attente de transmission vide

Bit 6 :	Registre de décalage de transmission vide

Remarques :

·	L'interface série appelée COM1 par le DOS porte le numéro 0, COM2 le numéro 1.

·	Il convient de n'appeler cette fonction qu'après que la fonction 3 ait permis de constater qu'un caractère était prêt à être reçu.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Réception d'un caractère    Int 21h, Fct 03h    DOS (>= 1.0)

Cette fonction permet de lire un caractère sur l'interface série. L'accès concerne le périphérique portant la désignation AUX ou COM1.

Entrée :

AH 	= 03h

Sortie :

AL 	= Le caractère reçu

Remarques :

·	Comme l'interface série ne dispose pas de buffer interne, il peut arriver que l'interface série reçoive des caractères plus vite que l'appel de cette fonction ne permet de les lire. Ces caractères sont alors perdus.

·	Les paramètres de communication (vitesse de transmission, nombre de bits Stop, etc.) doivent avoir été fixés préalablement à l'aide de l'instruction MODE. Le DOS définit sinon les valeurs défaut suivantes : vitesse de transmission de 2400 bauds avec un bit Stop, sans contrôle de parité et une largeur de données de 8 bits.

·	Plutôt qu'à cette fonction, il est préférable de recourir aux fonctions du BIOS pour l'accès à l'interface série. Elles peuvent être appelées à travers l'interruption 14h et elles offrent une plus grande souplesse que les fonctions du DOS car elles permettent notamment de tester l'état de l'interface série.

·	Si un caractère Ctrl-C (code ASCII 3) est reçu, l'interruption 23h est appelée.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Sortie d'un caractère vers l'interface série    Int 21h, Fct 04h    DOS (>= 1.0)

Cette fonction permet de sortir un caractère sur l'interface série. L'accès concerne le périphérique portant la désignation AUX ou COM1.

Entrée :

AH 	= 04h

DL 	= Le caractère à sortir

Sortie :

aucune

Remarques :

·	Le caractère n'est sorti qu'après que le périphérique qui doit recevoir le caractère ait signalé qu'il est prêt à recevoir. Ce n'est qu'après cela que le contrôle est rendu au programme d'appel.

·	Les paramètres de communication (vitesse de transmission, nombre de bits Stop, etc.) doivent avoir été fixés préalablement à l'aide de l'instruction MODE. Le DOS définit sinon les valeurs défaut suivantes : vitesse de transmission de 2400 bauds avec un bit Stop, sans contrôle de parité et une largeur de données de 8 bits.

·	Plutôt qu'à cette fonction, il est préférable de recourir aux fonctions du BIOS pour l'accès à l'interface série. Elles peuvent être appelées à travers l'interruption 14h et elles offrent une plus grande souplesse que les fonctions du DOS car elles permettent notamment de tester l'état de l'interface série.

·	Si un caractère Ctrl-C (code ASCII 3) est sorti, l'interruption 23h est appelée.

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Tester l'état de l'interface    Int 14h, Fct 03h    BIOS

Teste l'état de l'interface série et du modem éventuellement connecté.

Entrée :

AH 	= 03h

DX 	= Numéro d'interface série (la première interface série porte le numéro 0)

Sortie :

AH 	= Etat de l'interface série

Bit 0 :	Données prêtes

Bit 1 :	Débordement

Bit 2 :	Erreur de parité

Bit 3 :	Erreur de protocole

Bit 4 :	Break détecté

Bit 5 :	Registre d'attente de transmission vide

Bit 6 :	Registre de décalage de transmission vide

Bit 7 :	Time Out (Périphérique ne répond pas)

AL 	= Etat du modem

Bit 0 :	(Delta) Modem prêt à émettre

Bit 1 :	(Delta) Modem activé

Bit 2 :	(Delta) Téléphone sonne

Bit 3 :	(Delta) Liaison avec modem récepteur établie

Bit 4 :	Modem prêt à émettre

Bit 5 :	Modem activé

Bit 6 :	Téléphone sonne

Bit 7 :	Liaison avec modem récepteur établie

Remarques :

·	L'interface série appelée COM1 par le DOS porte le numéro 0, COM2 le numéro 1.

·	Cette fonction doit être appelée avant d'appeler la fonction 2 (Réception de caractères) pour déterminer si un caractère est prêt à être reçu. Dans ce cas, le bit 0 du registre AH vaut 1.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Interface parallèle

Initialiser l'imprimante

PRINT : Ajouter un fichier à la file d'attente

PRINT : Déterminer l'imprimante en service

PRINT : Interrompre l'impression pour tester son état

PRINT : Reprendre l'impression

PRINT : Retirer un fichier de la file d'attente

PRINT : Supprimer la file d'attente

PRINT : Tester la présence

Sortie de caractères

Sortir un caractère sur l'imprimante

Tester l'état de l'imprimante


Initialiser l'imprimante     Int 17h, Fct 01h    BIOS

Cette fonction initialise une imprimante connectée sur le PC. Il convient d'y recourir avant toute première transmission d'un caractère sur une imprimante donnée.

Entrée :

AH 	= 01h

DX 	= Numéro d'imprimante

Sortie :

AH 	= Etat de l'imprimante

Bit 0 = 1	time out

Bit 3 = 1	erreur de transmission

Bit 4 = 1	imprimante On Line

Bit 5 = 1	plus de papier

Bit 6 = 1	accusé de réception

Bit 7 = 0	imprimante occupée

Remarques :

·	La première imprimante connectée sur le PC porte le numéro 0.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.

Interruption 17h, Fonction 02h


PRINT : Ajouter un fichier à la file d'attente    Int 2Fh, code MUX 01h, Fct 01h    MUX

Cette fonction permet à un programme d'ajouter un fichier à la fin de la file en attente d'impression pour qu'il soit imprimé par PRINT en tâche de fond.

Entrée :

AH	= 01h

Al	= 01h

DS:DX	= PPointeur FAR sur une structure de données contenant des informations sur le fichier

Sortie :

Indicateur de retenue (flag Carry)

= 0 : ok

=1 : erreur, dans ce cas AX=code d'erreur

Remarque :

·	La structure de données référencée par DS:DX comporte 5 octets et doit être conforme au modèle suivant :

Offset	Signification	Type

00h	0	1 Byte

01h	Pointeur FAR sur chaîne ASCIIZ contenant le nom du fichier	1 Pointeur FAR

Les caractères génériques ne sont pas autorisés dans le nom, mais les désignations de lecteur et de chemin d'accès sont permises.

En cas d'erreur, le code retourné est le suivant :

0001h	Fonction inconnue

0002h	Fichier non trouvé

0003h	Chemin d'accès non trouvé

0004h	Trop de fichiers ouverts

0005h	Accès au fichier refusé

0008h	File d'attente saturée

000Fh	Périphérique inconnu

Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé que la partie résidente de PRINT était installée


PRINT : Déterminer l'imprimante en service    Int 2Fh, code MUX 01h, Fct 06h    MUX

Tant qu'il reste au moins un fichier dans la file d'attente, cette fonction indique l'imprimante qui effectue l'impression.

Entrée :

AH	= 01h

AL	= 06h

Sortie :

Indicateur de retenue (flag carry)

=0 : file d'attente vide

=1 : File non vide, dans ce cas AX=0008h

DS:SI = Pointeur FAR sur l'en-tête du driver de périphérique

Remarque :

·	La manière dont cette fonction retourne son résultat est un peu bizarre. L'information cherchée, à savoir le pointeur sur l'en-tête du périphérique, n'est obtenue qu'en liaison avec un indicateur de retenue armé et le code d'erreur 0008 (file non vide). Si la file d'attente est vide et si de ce fait le pointeur n'est pas disponible, l'indicateur de retenue est désarmé.


PRINT : Interrompre l'impression pour tester son état    Int 2Fh, code MUX 01h, Fct 04h    MUX

Cette fonction permet de connaître le contenu courant de la file d'attente et le nombre d'erreurs survenues

Entrée :

AH	= 01h

AL	= 04h

Sortie :

DX	= Compteur d 'erreurs

DS:SI	= pointeur FAR sur la file d'attente

Remarque :

·	L'impression est interrompue et ne reprendra que si on fait appel à la fonction 05h.

·	Le pointeur retourné en DS:SI référence le buffer dans lequel DOS maintient la file d'attente comme une suite d'éléments de 64 octets. Chacun de ces éléments contient la chaîne ASCIIZ du nom du fichier à imprimer. Le dernier élément de la liste commence par un caractère nul.

·	La liste peut être inspectée mais elle ne doit pas être modifiée.

·	Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé au préalable que la partie résidente de PRINT est déjà installée.


PRINT : Reprendre l'impression    Int 2Fh, code MUX 01h, Fct 05h    MUX

Cette fonction permet de reprendre l'impression après interruption par la fonction 04h.

Entrée :

AH	= 01h

AL	= 05h

Sortie :

néant

Remarque :

·	L'usage de cette fonction n'a évidemment de sens que si on a invoqué précédemment la fonction 04h.


PRINT : Retirer un fichier de la file d'attente    Int 2Fh, code MUX 01h, Fct 02h    MUX

Grâce à cette fonction un ou plusieurs fichiers peuvent être supprimés dans la file d'attente. Même le fichier en cours d'impression peut être retiré, ce qui arrête évidemment son impression.

Entrée :

AH	= 01h

AL	= 02h

DS:DX	= Pointeur sur nom de fichier sous forme de chaîne ASCIIZ

Sortie :

Indicateur de retenue

=0 : ok

=1 : Erreur, dans ce cas

AX= code d'erreur

0001h	Fonction inconnue

0002h	Fichier non trouvé

0003h	Chemin d'accès non trouvé

0004h	Trop de fichiers ouverts

0005h	Accès au fichier refusé

0008h	File d'attente saturée

000Fh	Périphérique inconnu

Remarque :

·	La structure de données référencée par DS:DX comporte 5 octets et doit être conforme au modèle suivant :

Offset	Signification	Type

00h	0	1 Byte

01h	Pointeur FAR sur chaîne ASCIIZ contenant le nom du fichier	1 Pointeur FAR

·	Les caractères génériques sont permis dans le nom de fichier indiqué, ce qui permet en un seul appel de retirer plusieurs fichiers de la file d'attente

·	Le seul code d'erreur possible est 0002h, "Fichier non trouvé", qui indique que le fichier en question n'est pas dans la file d'attente.

·	Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé que la partie résidente de PRINT était installée


PRINT : Supprimer la file d'attente    Int 2Fh, code MUX 01h, Fct 03h    MUX

Tous les fichiers sont retirés de la file d'attente et l'impression du fichier en cours est stoppée.

Entrée :

AH	= 01h

AL	= 03h

Sortie :

néant

Remarque :

·	Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé au préalable que la partie résidente de PRINT est déjà installée


PRINT : Tester la présence    Int 2Fh, code MUX 01h, Fct 00h    MUX

Grâce à cette fonction un programme peut détecter si la partie résidente de la commande PRINT de DOS est chargée.

Entrée :

AH	= 01h

Al	= 00h

Sortie :

AL 	= FFh : PRINT installé

Remarque :

·	Lorsque PRINT est installé, la fonction retourne la valeur FFh en AL. Ce n'est qu'à cette condition que les autres fonctions de PRINT pourront être invoquées. L'exploitation des fonctions de PRINT suppose donc que cette fonction ait été déclenchée au préalable.


Sortie de caractères     Int 17h, Fct 00h    BIOS

Cette fonction envoie un caractère sur l'une des imprimantes connectées au PC.

Entrée :

AH 	= 00h

AL 	= Code du caractère à sortir

DX 	= Numéro d'imprimante

Sortie :

AH 	= Etat de l'imprimante

Bit 0 = 1	time out

Bit 3 = 1	erreur de transmission

Bit 4 = 1	imprimante On Line

Bit 5 = 1	plus de papier

Bit 6 = 1	accusé de réception

Bit 7 = 0	imprimante occupée

Remarques :

·	La première imprimante connectée sur le PC porte le numéro 0.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Sortir un caractère sur l'imprimante    Int 21h, Fct 05h    DOS (>= 1.0)

Cette fonction sort un caractère sur l'imprimante. A moins que cette sortie n'ait été redirigée avec l'instruction MODE, l'accès se fait sur le périphérique portant la désignation LPT1 (identique à PRN).

Entrée :

AH 	= 05h

DL 	= Code du caractère à sortir.

Sortie :

aucune

Remarques :

·	Le caractère n'est sorti que si l'imprimante signale qu'elle est prête à recevoir. Ce n'est qu'après cela que le contrôle est rendu au programme d'appel.

·	Si un caractère Ctrl-C (code ASCII 3) est détecté, l'interruption 23h est appelée.

·	Pour la sortie de caractères sur l'imprimante, les fonctions du BIOS pour la communication avec l'imprimante, qui peuvent être appelées à travers l'interruption 17h, offrent une plus grande souplesse.

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Tester l'état de l'imprimante     Int 17h, Fct 02h    BIOS

La seule tâche de cette fonction consiste à renvoyer l'état d'une imprimante connectée sur le PC.

Entrée :

AH 	= 02h

DX 	= Numéro d'imprimante

Sortie :

AH 	= Etat de l'imprimante

Bit 0 = 1	time out

Bit 3 = 1	erreur de transmission

Bit 4 = 1	imprimante On Line

Bit 5 = 1	plus de papier

Bit 6 = 1	accusé de réception

Bit 7 = 0	imprimante occupée

Remarques :

·	La première imprimante connectée sur le PC porte le numéro 0.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Souris

Activer le driver de la souris

Afficher le curseur de la souris

Crayon optique : activer l'émulation

Crayon optique : désactiver l'émulation

Définir la fréquence d'Int de l'électronique de la souris

Définir la langue étrangère pour les messages

Définir la sensibilité de la souris

Définir la zone d'exclusion

Définir la zone de déplacement horizontale pour le curseur de la souris

Définir la zone de déplacement verticale pour le curseur de la souris

Définir le curseur de la souris en mode graphique

Définir le curseur de la souris en mode texte

Définir le mode vidéo

Définir le rapport entre les mickeys et les points

Définir le seuil pour le doublement de la vitesse

Définir les paramètres

Définir une page écran pour le curseur de la souris

Définir/Lire la courbe d'accélération en cours

Définir/Obtenir les paramètres de la souris Ballpoint

Déplacer le curseur de la souris

Désactiver le driver de la souris

Echange des gestionnaires d'événements

Enregistrer l'état de la souris

Installer le gestionnaire d'événements

Installer un gestionnaire d'événements alternatif

Lire combien de fois un bouton de la souris a été enfoncé

Lire combien de fois un bouton de la souris a été relâché

Lire des informations générales

Lire l'adresse d'un gestionnaire d'événements alternatif

Lire l'état du fichier MOUSE.INI

Lire l'étirement de l'écran virtuel

Lire l'extension de l'écran de souris virtuel

Lire la courbe d'accélération en cours

Lire la liste des modes vidéo disponibles

Lire la position de la souris et l'état des boutons

Lire la sensibilité de la souris

Lire la taille du buffer d'état de la souris

Lire le type de souris

Lire les courbes d'accélération

Lire les distances de déplacement

Lire les fonctions disponibles

Lire les masques de bits du curseur d'écran

Lire une page écran du curseur de la souris

Masquer le curseur de la souris

Obtenir des informations sur le curseur de la souris

Réinitialiser l'électronique de la souris

Réinitialiser le driver de la souris

Réinitialiser le driver de la souris

Restaurer l'état de la souris

Vérifier l'existence d'une langue étrangère pour les messages


Activer le driver de la souris    Int 33h, Fct 20h    Mouse (>= 1.0)

Active un driver de souris désactivé auparavant avec la fonction 1Fh.

Entrée :

AX	= 0020h

Sortie :

Aucune


Afficher le curseur de la souris    Int 33h, Fct 01h    Mouse (>= 1.0)

Après appel de cette fonction, le curseur de la souris devient visible sur l'écran et suit désormais les déplacements de la souris sur l'écran.

Entrée :

AX	= 0001h

Sortie :

Aucune

Remarques :

·	L'appel de cette fonction entraîne l'incrémentation d'un compteur interne, en fonction duquel le curseur de la souris est ou non affiché sur l'écran. Si ce compteur contient la valeur 0, le curseur de la souris sera affiché sur l'écran, alors que la valeur -1 a pour effet de le faire disparaître de l'écran. Lorsque la fonction 00h (Reset) est appelée, ce compteur est tout d'abord fixé sur -1, pour prendre ensuite la valeur 0 lors du premier appel de cette fonction, ce qui se traduit par la réapparition du curseur sur l'écran.

·	Le driver de la souris suit les déplacements de la souris même si le curseur de la souris n'est pas affiché sur l'écran. A la suite de l'appel de cette fonction, le curseur de la souris ne réapparaîtra donc pas nécessairement au même endroit que là où il se trouvait lorsqu'il avait été caché.


Crayon optique : activer l'émulation    Int 33h, Fct 0Dh    Mouse (>= 1.0)

Active l'émulation du crayon optique et simule ainsi un crayon optique inexistant.

Entrée :

AX	= 000Dh

Sortie :

Aucune

Remarques :

·	L'émulation d'un crayon optique n'est intéressante qu'en liaison avec des programmes soutenant le crayon optique ou fournissant des mécanismes de test du crayon optique. C'est le cas par exemple du BASIC IBM avec son instruction PEN.

·	Sous le mode d'émulation, la position de la souris est associée à la position du crayon optique et le fait d'actionner simultanément les boutons gauche et droit de la souris est interprété comme le fait d'appuyer sur le bouton du crayon optique.


Crayon optique : désactiver l'émulation    Int 33h, Fct 0Eh    Mouse (>= 1.0)

Désactive à nouveau l'émulation du crayon optique qui avait été auparavant activée avec la fonction 0Dh.

Entrée :

AX	= 000Eh

Sortie :

Aucune


Définir la fréquence d'Int de l'électronique de la souris    Int 33h, Fct 1Ch    Mouse (>= 1.0)

Détermine à quelle fréquence l'électronique de la souris lit la position actuelle de la souris et l'état des boutons de la souris pour les retransmettre au driver de la souris.

Entrée :

AX	= 001C

BX	= Fréquence d'interruption

Bit	Signification

0	Pas d'interruptions

1	30 interruptions par seconde

2	50 interruptions par seconde

3	100 interruptions par seconde

4	200 interruptions par seconde

5-15	Aucune signification (0)

Sortie :

Aucune

Remarques :

·	Cette fonction n'est disponible que pour la souris InPort.

·	Si plus d'un bit est fixé dans le registre BX, c'est le bit fixé de plus faible poids qui compte.

·	La précision de la souris est proportionnelle à la fréquence des interruptions, mais la vitesse du programme de premier plan est au contraire inversement proportionnelle à cette fréquence, puisqu'il est interrompu plus souvent par le driver de souris


Définir la langue étrangère pour les messages    Int 33h, Fct 22h    Mouse (>= 1.0)

La version internationale du driver de la souris reconnaît plusieurs langues étrangères et peut retourner les messages dans ces langues. Cette fonction détermine la langue étrangère souhaitée.

Entrée :

AX 	= 0022h

BX 	= Numéro de code de la langue étrangère (voir plus bas)

Sortie :

aucune

Remarques :

·	Les codes suivants sont utilisés pour désigner les langues étrangères :

0	Anglais

1	Français

2	Néerlandais

3	Allemand

4	Suédois

5	Finlandais

6	Espagnol

7	Portugais

8	Italien

·	Vu que cette fonction ne retourne pas un état d'erreur, il n'est pas toujours possible de déterminer si une version internationale du driver de la souris existe réellement et de définir l'option souhaitée. La fonction 23h permet cependant de contrôler facilement cet aspect.


Définir la sensibilité de la souris    Int 33h, Fct 1Ah    Mouse (>= 1.0)

Cette fonction est une combinaison des fonctions 0Fh et 13h, qui permettent respectivement de fixer le rapport entre déplacement de la souris et déplacement du curseur de la souris, d'une part, et de fixer le seuil de doublement de la vitesse de la souris, d'autre part.

Entrée :

AX	= 001Ah

BX	= Nombre de mickeys représentant huit points horizontalement

CX	= Nombre de mickeys représentant huit points verticalement

DX	= Seuil pour le doublement de la vitesse de la souris

Sortie :

Aucune

Remarques :

·	Pour les paramètres dans les registres CX et DX sont autorisées des valeurs comprises entre 1 et 32767.

·	Le réglage par défaut est de 8 mickeys horizontalement et de 16 mickeys verticalement, de sorte que le curseur de la souris se déplace deux fois plus "vite" horizontalement que verticalement.

·	Pour empêcher tout doublement de la vitesse de la souris, il suffit de fixer le seuil suffisamment haut. Des vitesses de 5000 mickeys par seconde ne peuvent, par exemple, déjà plus être atteintes en pratique.

·	Les valeurs par défaut peuvent être à nouveau fixées en appelant la fonction 00h (Réinitialisation du driver de la souris).


Définir la zone d'exclusion    Int 33h, Fct 10h    Mouse (>= 1.0)

Cette fonction permet à un programme de définir une zone quelconque de l'écran comme zone d'exclusion (une sorte de trou noir), qui aura pour effet de faire disparaître le curseur de la souris de l'écran dès qu'il pénétrera dans cette zone.

Entrée :

AX	= 0010h

CX	= Ordonnée X du coin supérieur gauche de la zone d'exclusion

DX	= Ordonnée Y du coin supérieur gauche de la zone d'exclusion

SI	= Ordonnée X du coin inférieur droit de la zone d'exclusion

DI	= Ordonnée Y du coin inférieur droit de la zone d'exclusion

Sortie :

Aucune

Remarques :

·	Les ordonnées transmises dans les registres CX, DX, SI et DI ne se rapportent pas à l'écran physique mais aux positions en points écran dans l'écran virtuel de la souris.

·	La zone d'exclusion peut être à nouveau annulée en appelant la fonction 00h (réinitialisation du driver de souris) ou 01h (affichage du curseur de la souris).


Définir la zone de déplacement horizontale pour le curseur de la souris    Int 33h, Fct 07h    Mouse (>= 1.0)

Définit la zone horizontale à l'intérieur de laquelle le curseur de la souris peut se déplacer. L'utilisateur n'aura aucune possibilité de faire sortir le curseur de la souris de la zone ainsi fixée.

Entrée :

AX	= 0007h

CX	= position horizontale minimale de la souris

DX	= position horizontale maximale de la souris

Sortie :

Aucune

Remarques :

·	Les ordonnées transmises dans les registres CX et DX ne se rapportent pas à l'écran physique mais aux positions en points écran dans l'écran virtuel de la souris.

·	Si le curseur de la souris se trouve en dehors de la zone spécifiée, il y est automatiquement ramené par le driver de la souris.

·	Si la valeur spécifiée dans le registre DX est inférieure à celle dans CX, les deux paramètres sont échangés.


Définir la zone de déplacement verticale pour le curseur de la souris    Int 33h, Fct 08h    Mouse (>= 1.0)

Définit la zone verticale à l'intérieur de laquelle le curseur de la souris peut se déplacer. L'utilisateur n'aura aucune possibilité de faire sortir le curseur de la souris de la zone ainsi fixée.

Entrée :

AX	= 0008h

CX	= position verticale minimale de la souris

DX	= position verticale maximale de la souris

Sortie :

Aucune

Remarques :

·	Les ordonnées transmises dans les registres CX et DX ne se rapportent pas à l'écran physique mais aux positions en points écran dans l'écran virtuel de la souris.

·	Si le curseur de la souris se trouve en dehors de la zone spécifiée, il y est automatiquement ramené par le driver de la souris.

·	Si la valeur spécifiée dans le registre DX est inférieure à celle dans CX, les deux paramètres sont échangés.


Définir le curseur de la souris en mode graphique    Int 33h, Fct 09h    Mouse (>= 1.0)

En mode graphique, un tableau de bits définit l'apparence du curseur de la souris, en fixant de quelle manière les points sous le curseur de la souris et les points du curseur de la souris doivent être combinés. Cette fonction sert à définir ce tableau de bits, et donc l'apparence du curseur de la souris.

Entrée :

AX	= 0009h

BX	= Distance du point de référence au bord gauche du tableau de bits

CX	= Distance du point de référence au bord supérieur du tableau de bits

ES:DX	= Adresses de segment et d'offset du tableau de bits dans la mémoire

Sortie :

Aucune

Remarques :

·	Le tableau de bits comporte 64 octets, dont les 32 premiers définissent une combinaison ET et les 32 autres une combinaison OU avec le motif de points actuel.


Définir le curseur de la souris en mode texte    Int 33h, Fct 0Ah    Mouse (>= 1.0)

Fixe le motif de bits définissant l'apparence du curseur de la souris en mode de texte.

Entrée :

AX	= 000Ah

BX	= Type de curseur de la Souris (>= 1.0)

0	= curseur logiciel

1	= curseur électronique

CX	= Masque AND pour le curseur logiciel ou la ligne de départ du curseur électronique

DX	= Masque XOR pour le curseur logiciel ou la ligne finale du curseur électronique

Sortie :

Aucune

Remarques :

·	Si le curseur logiciel est sélectionné, le code du caractère sous le curseur de la souris et l'octet d'attribut correspondant sont tout d'abord combiné par un AND binaire avec le masque dans le registre CX, avant qu'une combinaison OU EXCLUSIF (XOR) soit ensuite opérée avec la valeur dans le registre DX. L'octet d'attribut est combiné avec les octets de plus fort poids des deux valeurs (CH et DH), alors que le code de caractère est combiné avec les octets de plus faible poids (CL et DL).

·	Le curseur électronique est le curseur clignotant de l'écran. Les lignes de départ et de fin doivent être comprises, en mode monochrome, entre 0 et 13, et en mode couleur, entre 0 et 7.


Définir le mode vidéo    Int 33h, Fct 28h    Mouse (>= 7.0)

Cette fonction permet de spécifier un mode vidéo à condition qu'il soit reconnu par l'équipement vidéo en cours.

Entrée :

AX 	= 0028h

CX 	= Numéro de code du mode vidéo

DX 	= Taille de la fonte écran

Sortie :

CX 	= Etat de la fonction

Remarques :

·	La liste des modes vidéo disponibles et leurs numéros de code peut être obtenue par la fonction 29h.

·	La valeur 0 est retournée dans le registre CX si le mode vidéo spécifié est reconnu par le matériel en cours. Dans ce cas, il peut être défini sinon le numéro de code est renvoyé par le registre AX.

·	Certains modes vidéo utilisant les polices à tailles variables attendent le paramètre d'appel en DX. La taille de la police le long de l'axe X doit alors être codifiée dans l'octet de poids fort de DX et l'étirement le long de l'axe Y dans l'octet de poids faible.


Définir le rapport entre les mickeys et les points    Int 33h, Fct 0Fh    Mouse (>= 1.0)

Cette fonction définit le rapport entre les mickeys et les points, dont dépend la sensibilité de la souris du point de vue de l'utilisateur, c'est-à-dire la vitesse avec laquelle le curseur de la souris peut être déplacé sur l'écran.

Entrée :

AX	= 000Fh

CX	= Nombre de mickeys horizontaux représentant huit points

DX	= Nombre de mickeys verticaux représentant huit points

Sortie :

Aucune

Remarques :

·	Peuvent être spécifiées des valeurs comprises entre 1 et 32767.

·	Le réglage par défaut est de 8 mickeys horizontalement et de 16 mickeys verticalement, de sorte que le curseur de la souris se déplace deux fois plus "vite" horizontalement que verticalement.

·	Les valeurs par défaut peuvent être à nouveau fixées en appelant la fonction 00h (Réinitialisation du driver de la souris).


Définir le seuil pour le doublement de la vitesse    Int 33h, Fct 13h    Mouse (>= 1.0)

Si la vitesse de déplacement de la souris dépasse un seuil déterminé, le driver de la souris double le rapport entre les points et les mickeys, de façon à doubler la vitesse de la souris. Cette fonction permet de fixer le seuil au-delà duquel ce doublement intervient.

Entrée :

AX	= 0013h

DX	= Seuil en mickeys par seconde

Sortie :

Aucune

Remarques :

·	1 mickey équivaut à une longueur d'1/200 ou d'1/400 de pouce selon la souris.

·	Pour empêcher tout doublement de la vitesse de la souris, il suffit de fixer le seuil suffisamment haut. Des vitesses de 5000 mickeys par seconde ne peuvent, par exemple, déjà plus être atteintes en pratique.


Définir les paramètres    Int 33h, Fct 33h    Mouse (>= 7.05)

Tous les paramètres spécifiés par le logiciel ou le matériel à l'intérieur du driver de souris peuvent être lus dans un buffer à l'aide de cette fonction. La structure de ce buffer n'étant pas encore documentée avec précision, l'utilisation de cette fonction semble peu intéressante.

Entrée :

AX 	= 0033h

CX 	= Taille du buffer

ES 	= Adresse de segment du buffer

DX 	= Adresse d'offset du buffer

Sortie :

AX 	= 0

CX 	= Nombre d'octets dans le buffer

ES 	= Adresse de segment du buffer

DX 	= Adresse d'offset du buffer


Définir une page écran pour le curseur de la souris    Int 33h, Fct 1Dh    Mouse (>= 1.0)

Fixe la page écran dans laquelle le driver de la souris doit afficher le curseur de la souris.

Entrée :

AX	= 001Dh

BX	= Numéro de la page écran

Sortie :

Aucune

Remarques :

·	La valeur par défaut est la page écran 0.

·	L'appel de cette fonction ne présente naturellement d'intérêt que si votre programme travaille avec plusieurs pages écran, telles qu'elles sont offertes par les cartes CGA, EGA et VGA.


Définir/Lire la courbe d'accélération en cours    Int 33h, Fct 2Dh    Mouse (>= 7.0)

Cette fonction a pour rôle d'activer l'une des quatre courbes d'accélération ou de renvoyer la courbe en cours.

Entrée :

AX 	= 002Dh

BX 	= -1 : Retourner la courbe d'accélération en cours

= 1 - 4 : Activer cette courbe

Sortie :

AX 	= Etat de la fonction

BX 	= Numéro de la courbe d'accélération en cours (1-4)

ES 	= Adresse de segment du buffer avec le nom de la courbe d'accélération

SI 	= Adresse d'offset du buffer avec le nom de la courbe d'accélération

Remarques :

·	Si la valeur -1 est transmise dans le registre BX lors de l'appel de la fonction, celle-ci retourne alors des informations sur la courbe d'accélération en cours dans les registres BX, ES et SI. En revanche, si l'une des quatre courbes d'accélération est activée lors de l'appel, une valeur comprise entre 1 et 4 doit être chargée dans le registre BX avant l'appel de la fonction. Dans ce cas, seul l'état de la fonction est retourné en BX en guise de résultat.

·	Après appel de la fonction, l'état contient la valeur 0 si la fonction s'est exécutée correctement, sinon une valeur quelconque.

·	Lorsqu'une demande est formulée pour connaître la courbe d'accélération en cours, les registres ES:SI indiquent la chaîne ainsi que les autres données-clé concernant la courbe qui ont été définies lors de l'appel de la fonction 2Bh. La chaîne comprend 16 octets et ne se termine pas par un caractère spécial ($ ou octet nul). L'évaluation de cette chaîne permet de connaître le nom symbolique de la courbe d'accélération.


Définir/Obtenir les paramètres de la souris Ballpoint    Int 33h, Fct 30h    Mouse (>= 7.04)

Cette fonction est conçue spécialement pour les besoins de la souris Ballpoint. Elle permet de définir ou lire les paramètres spécifiques à cette souris. Il s'agit notamment de connaître l'orientation de la souris Ballpoint et les trois boutons considérés comme activés parmi les quatre qui sont disponibles.

Entrée :

AX 	= 0030h

BX 	= Angle de rotation

CX 	= Code de commande

Sortie :

AX 	= Etat de la fonction

BX 	= Angle de rotation

CX 	= Boutons activés

Remarques :

·	Après appel de la fonction, il faut obligatoirement vérifier l'état dans le registre AX. La valeur -1 indique en effet qu'aucune souris Ballpoint n'est installée. Toute autre valeur signale en revanche l'existence d'une souris Ballpoint et reproduit l'état des divers boutons de la souris. Les différents boutons sont représentés par les bits suivants à l'intérieur du registre AX :

Bit 2 = Bouton 4

Bit 3 = Bouton 2

Bit 4 = Bouton 3

Bit 5 = Bouton 1

Les autres bits contiennent la valeur 0.

·	Si cette fonction est utilisée pour demander l'angle de rotation en cours et les boutons activés, il faut préalablement charger le registre CX avec la valeur 0 avant l'appel. Un angle de rotation en BX ne s'avère alors pas indispensable.

Comme résultat de la fonction, on obtient l'angle de rotation en BX avec une valeur comprise entre 0 et 360 (degrés). En outre, les deux boutons activés peuvent être lus dans l'octet de poids fort de CX alors que les boutons désactivés sont codifiés dans l'octet de poids faible de ce registre. A l'intérieur des deux octets, les bits suivants sont disponibles pour les différents boutons :

Bit 2 = Bouton 4

Bit 3 = Bouton 2

Bit 4 = Bouton 3

Bit 5 = Bouton 1

Les autres bits contiennent la valeur 0.

·	Si l'angle de rotation actuel de la souris Ballpoint est communiqué au driver de souris à l'aide de cette fonction et les deux boutons activés sont sélectionnés, les boutons activés et désactivés sont alors à codifier en CX. La codification s'effectue selon le même principe que le renvoi des boutons activés ou désactivés à la suite d'un appel (voir plus haut). Comme angle de rotation, la fonction attend une valeur comprise entre 0 et 360 en BX.


Déplacer le curseur de la souris    Int 33h, Fct 04h    Mouse (>= 1.0)

Déplace le curseur de la souris vers une position déterminée de l'écran, à moins qu'il n'ait été caché avec la fonction 02h.

Entrée :

AX	= 0004h

CX	= Position horizontale de la Souris (>= 1.0)

DX	= Position verticale de la souris

Sortie :

Aucune

Remarques :

·	Les ordonnées renvoyées dans les registres CX et DX ne se rapportent pas à l'écran physique mais aux positions en points écran dans l'écran virtuel de la souris.

·	Si la position spécifiée se situe en dehors de la zone de déplacement fixée avec les fonctions 07h et 08h, les coordonnées sont adaptées pour que le curseur de la souris ne sorte pas de cette zone.

·	Le curseur de la souris est bien déplacé vers la nouvelle position même s'il est caché, mais ce déplacement n'apparaîtra naturellement que lorsque le curseur sera à nouveau incrusté.


Désactiver le driver de la souris    Int 33h, Fct 1Fh    Mouse (>= 1.0)

Désactive le driver actuel de la souris et fournit l'adresse du gestionnaire d'interruption précédent pour l'interruption 33h.

Entrée :

AX	= 001Fh

Sortie :

AX 	= 	FFFFh : Erreur

001Fh : Tout va bien, auquel cas

ES:BX = Adresses de segment et d'offset du driver de souris antérieur

Remarques :

·	Lorsque cette fonction est appelée, le driver de souris libère à nouveau toutes les routines d'interruption qu'ils avaient installées lors de son activation. Seul fait exception le gestionnaire de l'interruption 33h, mais le programme d'appel peut charger à nouveau sa valeur d'origine dans ce vecteur d'interruption également, car son adresse est renvoyée dans la paire de registres ES:BX.


Echange des gestionnaires d'événements    Int 33h, Fct 14h    Mouse (>= 1.0)

Cette fonction permet à un programme d'installer un nouveau gestionnaire d'événements pour certains événements souris déterminés, tout en obtenant en même temps l'adresse de l'ancien gestionnaire d'événements.

Entrée :

AX	= 0014h

CX	= Evénements devant entraîner l'appel du gestionnaire d'événements

Bit	Signification

0	La souris a été déplacée

1	Bouton gauche de la souris appuyé

2	Bouton gauche de la souris relâché

3	Bouton droit de la souris appuyé

4	Bouton droit de la souris relâché

5	Bouton central de la souris appuyé

6	Bouton central de la souris relâché

7-15	Aucune signification

ES:DX = Adresses de segment et d'offset du gestionnaire

Sortie :

CX	= Masque d'événements du gestionnaire d'événements installé jusqu'ici

ES:DX	= Adresses de segment et d'offset du gestionnaire d'événements installé jusqu'ici

Remarques :

·	Les informations nécessaires sur l'appel du gestionnaire d'événements sont fournies dans la description de la fonction 0Ch (Installer le gestionnaire d'événements).


Enregistrer l'état de la souris    Int 33h, Fct 16h    Mouse (>= 1.0)

Lorsque cette fonction est appelée, le driver de la souris copie toutes les informations d'état gérées dans un buffer du programme d'appel.

Entrée :

AX	= 0016h

ES:DX	= Adresses de segment et d'offset du buffer

Sortie :

Aucune

Remarques :

·	Le programme d'appel doit veiller à ce que le buffer soit suffisamment grand pour recevoir toutes les informations d'état. Avant d'appeler cette fonction, il ferait donc bien de déterminer à l'aide de la fonction 15h la taille du buffer d'état de la souris.

·	L'appel de cette fonction peut par exemple être utile avant de faire exécuter un programme à l'aide de la fonction EXEC, pour que tous les paramètres de la souris puissent être à nouveau fixés sur leurs valeurs antérieures après exécution de ce programme, quelles que soient les modifications intervenues à l'intérieur du programme appelé.


Installer le gestionnaire d'événements    Int 33h, Fct 0Ch    Mouse (>= 1.0)

Cette fonction permet à un programme d'installer un gestionnaire d'événements, qui sera appelé lorsque interviendra un événement déterminé concernant la souris.

Entrée :

AX	= 000Ch

CX	= Evénements devant déclencher l'appel du gestionnaire d'événements (masque d'événements)

Bit	Signification

0	La souris a été déplacée

1	Bouton gauche de la souris appuyé

2	Bouton gauche de la souris relâché

3	Bouton droit de la souris appuyé

4	Bouton droit de la souris relâché

5	Bouton central de la souris appuyé

6	Bouton central de la souris relâché

7-15	Aucune signification

ES:DX	= Adresses de segment et d'offset du gestionnaire

Sortie :

Aucune

Remarques :

·	Le gestionnaire d'événements est appelé par le driver de la souris à travers une instruction assembleur FAR CALL et il doit donc de ce fait se terminer également par une instruction FAR RETurn. Comme pour un gestionnaire d'interruption, aucun des registres du processeur ne doit être restitué à l'utilisateur avec un contenu modifié.

·	Le driver de la souris fournit les informations suivantes au gestionnaire d'événements lorsqu'il est appelé :

AX = Masque d'événements.

Les différents bits correspondent aux différents événements tels qu'ils ont été indiqués dans le registre CX lors de l'installation du gestionnaire d'événements. D'autres bits peuvent également être fixés car cette valeur reflète l'état actuel du driver de la souris, sans se limiter aux événements sélectionnés.

BX = Etat des boutons de la Souris (>= 1.0)

Bit	Signification

0	Bouton gauche de la souris a été appuyé

1	Bouton droit de la souris a été appuyé

2	Bouton central de la souris a été appuyé

CX	= Position horizontale de la souris.

DX	= Position verticale de la souris.

SI	= Longueur du dernier déplacement horizontal de la souris.

DI	= Longueur du dernier déplacement vertical de la souris.

DS	= Segment de données du driver de la souris

·	Les ordonnées transmises dans les registres CX et DX ne se rapportent pas à l'écran physique mais aux positions en points écran dans l'écran virtuel de la souris.

·	Les distances spécifiées dans les registres SI et DI ne sont pas exprimées en points écran, mais en mickeys (1/200ème de pouce). Les valeurs transmises doivent être interprétées comme des nombres signés, les valeurs négatives indiquant un déplacement vers le haut ou la gauche de l'écran, alors que les valeurs positives indiquent un déplacement vers le bas ou la droite de l'écran.


Installer un gestionnaire d'événements alternatif    Int 33h, Fct 18h    Mouse (>= 1.0)

Cette fonction permet à un programme d'installer au maximum trois gestionnaires d'événements différents, qui devront être appelés par le driver de la souris lorsque interviendront certains événements liés à la souris et au clavier.

Entrée :

AX	= 0018h

CX	= Evénements devant entraîner l'appel du gestionnaire d'événements

Bit	Signification

0	La souris a été déplacée

1	Bouton gauche de la souris appuyé

2	Bouton gauche de la souris relâché

3	Bouton droit de la souris appuyé

4	Bouton droit de la souris relâché

5	Touche Shift actionnée pendant qu'un bouton de la souris était appuyé ou relâché

6	Touche Ctrl actionnée pendant qu'un bouton de la souris était appuyé ou relâché

7	Touche Alt actionnée pendant qu'un bouton de la souris était appuyé ou relâché

8-15	Aucune signification

ES:DX = Adresses de segment et d'offset du gestionnaire

Sortie :

AX	= 	0018h:	Le gestionnaire d'événements a été installé

FFFFh:	Le gestionnaire d'événements n'a pu être installé

Remarques :

·	Dans le masque d'événements du registre CX doit être fixé au moins l'un des bits 5 à 7 pour que l'événement soit combiné au fait d'actionner au moins une touche de contrôle. Si les touches de contrôle ne doivent pas être prises en compte, il est préférable d'utiliser les fonctions 0Ch ou 14h.

·	Une erreur peut se produire si trois gestionnaires d'événements alternatifs ont déjà été installés ou bien si un gestionnaire d'événements a déjà été enregistré avec la même masque d'événements.

·	Le gestionnaire d'événements est appelé par le driver de la souris à travers une instruction assembleur FAR CALL et il doit donc de ce fait se terminer également par une instruction FAR RET. Comme pour un gestionnaire d'interruption, aucun des registres du processeur ne doit être restitué à l'utilisateur avec un contenu modifié.

·	Le driver de la souris fournit les informations suivantes au gestionnaire d'événements lorsqu'il est appelé :

AX = Masque d'événements.

Les différents bits correspondent aux différents événements tels qu'ils ont été indiqués dans le registre CX lors de l'installation du gestionnaire d'événements. D'autres bits peuvent également être fixés car cette valeur reflète l'état actuel du driver de la souris, sans se limiter aux événements sélectionnés.

BX = Etat des boutons de la Souris (>= 1.0)

Bit	Signification

0	Bouton gauche de la souris a été appuyé

1	Bouton droit de la souris a été appuyé

2	Bouton central de la souris a été appuyé

CX = Position horizontale de la souris.

DX = Position verticale de la souris.

SI = Longueur du dernier déplacement horizontal de la souris.

DI = Longueur du dernier déplacement vertical de la souris.

DS = Segment de données du driver de la souris

·	Les ordonnées transmises dans les registres CX et DX ne se rapportent pas à l'écran physique mais aux positions en points écran dans l'écran virtuel de la souris.

·	Les distances spécifiées dans les registres SI et DI ne sont pas exprimées en points écran, mais en mickeys (1/200ème de pouce). Les valeurs transmises doivent être interprétées comme des nombres signés, les valeurs négatives indiquant un déplacement vers le haut ou la gauche de l'écran, alors que les valeurs positives indiquent un déplacement vers le bas ou la droite de l'écran.


Lire combien de fois un bouton de la souris a été enfoncé    Int 33h, Fct 05h    Mouse (>= 1.0)

Indique au programme d'appel combien de fois un bouton de la souris a été appuyé depuis le dernier appel de cette fonction et où le curseur de la souris se trouvait la dernière fois que ce bouton avait été actionné.

Entrée :

AX	= 0005h

BX	= Bouton de la souris appelé :

0	= bouton gauche de la Souris (>= 1.0)

1	= bouton droit de la Souris (>= 1.0)

2	= bouton central de la souris

Sortie :

AX	= Etat de tous les boutons de la souris (>= 1.0)

Bit	Signification

0	1 = bouton gauche de la souris appuyé

1	1 = bouton droit de la souris appuyé

2	1 = bouton central de la souris appuyé

3-15	Aucune signification (0)

BX	= Nombre de fois que le bouton de la souris appelé a été actionné depuis le dernier appel de cette fonction

CX	= Position horizontale de la souris la dernière fois que le bouton a été actionné

DX	= Position verticale de la souris la dernière fois que le bouton a été actionné

Remarques :

·	Les ordonnées transmises dans les registres CX et DX ne se rapportent pas à l'écran physique mais aux positions en points écran dans l'écran virtuel de la souris.

·	Le compteur du nombre de fois que le bouton de la souris appelé a été appuyé est à nouveau fixé sur 0 lorsque cette fonction est appelée.


Lire combien de fois un bouton de la souris a été relâché    Int 33h, Fct 06h    Mouse (>= 1.0)

Indique au programme d'appel combien de fois un bouton de la souris a été relâché depuis le dernier appel de cette fonction et où figurait le curseur de la souris lors du dernier de ces événements.

Entrée :

AX	= 0006h

BX	= Bouton de la souris appelé :

0	= bouton gauche de la Souris (>= 1.0)

1	= bouton droit de la Souris (>= 1.0)

2	= bouton central de la souris

Sortie :

AX	= Etat de tous les boutons de la Souris (>= 1.0)

Bit	Signification

0	1 = bouton gauche de la souris appuyé

1	1 = bouton droit de la souris appuyé

2	1 = bouton central de la souris appuyé

3-15	Aucune signification (0)

BX	= Nombre de fois que le bouton de la souris a été relâché

CX	= Position horizontale de la souris la dernière fois que le bouton a été relâché

DX	= Position verticale de la souris la dernière fois que le bouton a été relâché

Remarques :

·	Les ordonnées transmises dans les registres CX et DX ne se rapportent pas à l'écran physique mais aux positions en points écran dans l'écran virtuel de la souris.

·	Le compteur du nombre de fois que le bouton de la souris appelé a été relâché est à nouveau fixé sur 0 lorsque cette fonction est appelée.


Lire des informations générales    Int 33h, Fct 25h    Mouse (>= 6.26)

Cette fonction retourne des informations générales sur le driver de souris, par exemple le type du driver et l'état du curseur de la souris.

Entrée :

AX 	= 0025h

Sortie :

AX 	= Informations générales (voir plus bas)

BX,CX,	DX = Informations d'état concernant OS/2 uniquement

Remarques :

·	Les informations générales sont transmises dans les divers tableaux de bits du registre AX. Il reproduit les informations suivantes :

Bit 15 : Type du driver

0b 	= Le driver se trouve dans un fichier COM

1b 	= Le driver est sauvegardé en tant qu'un driver de périphérique. Il a été inséré par un fichier CONFIG.SYS.

Bits 12 & 13 : Informations sur le curseur de la souris

00b 	= Affichage d'un curseur texte logiciel

01b 	= Affichage d'un curseur texte électronique

10b, 11b 	= Affichage d'un curseur graphique

Bits 8 à 11 : Valeur binaire représentant la fréquence d'interruption de l'électronique de la souris

·	Les arguments obtenus dans les registres BX, CX et DX ne sont retournés que par un driver de souris sous OS/2. Ils ne jouent aucun rôle dans la programmation DOS.


Lire l'adresse d'un gestionnaire d'événements alternatif    Int 33h, Fct 19h    Mouse (>= 1.0)

Renvoie au programme d'appel l'adresse d'un gestionnaire d'événements alternatif.

Entrée :

AX	= 0019h

CX	= Masque d'événements du gestionnaire d'événements appelé

Sortie :

AX =	0000h :	OK, dans ce cas :

CX =	Masque d'événements

Bit	Signification

0	La souris a été déplacée

1	Bouton gauche de la souris appuyé

2	Bouton gauche de la souris relâché

3	Bouton droit de la souris appuyé

4	Bouton droit de la souris relâché

5	Touche Shift actionnée pendant qu'un bouton de la souris était appuyé ou relâché

6	Touche Ctrl actionnée pendant qu'un bouton de la souris était appuyé ou relâché

7	Touche Alt actionnée pendant qu'un bouton de la souris était appuyé ou relâché

8-15	Aucune signification

ES:DX =	Adresses de segment et d'offset du gestionnaire

Remarques :

·	L'appel de fonction échoue si aucune gestionnaire d'événements alternatif n'a encore été installé avec le masque d'événements spécifié.


Lire l'état du fichier MOUSE.INI    Int 33h, Fct 34h    Mouse (>= 8.0)

Cette fonction est conçue pour la programmation de la souris sous Windows. Elle retourne la désignation exacte du chemin du fichier d'initialisation MOUSE.INI sous la forme d'une chaîne ASCII dans un buffer.

Entrée :

AX 	= 0034h

Sortie :

AX 	= 0

ES 	= Adresse de segment du buffer

DX 	= Adresse d'offset du buffer

Remarques :

·	La chaîne retournée se termine par un octet nul.

·	La désignation de chemin du fichier MOUSE.INI provient de la variable d'environnement MOUSE. Si cette variable n'est pas définie, MOUSE.INI est recherché dans le répertoire du driver de souris et la fonction retourne une chaîne correspondante.


Lire l'étirement de l'écran virtuel    Int 33h, Fct 31h    Mouse (>= 7.05)

Cette fonction offre à un programme la possibilité de demander l'étirement de l'écran de souris virtuel dans le mode vidéo actuel.

Entrée :

AX 	= 0031h

Sortie :

AX 	= Ordonnée X minimale

BX 	= Ordonnée Y minimale

CX 	= Ordonnée X maximale

DX 	= Ordonnée Y maximale

Remarques :

·	La taille de l'écran de souris virtuel peut également être modifiée par les fonctions 07h et 08h qui réduisent le champ de déplacement du curseur.


Lire l'extension de l'écran de souris virtuel    Int 33h, Fct 26h    Mouse (>= 6.26)

Cette fonction retourne l'extension absolue de l'écran de souris virtuel et indique si le driver de souris est actuellement activé ou désactivé.

Entrée :

AX 	= 0026h

Sortie :

BX 	= Etat du driver de souris

CX 	= Ordonnée X maximale

DX 	= Ordonnée Y maximale

Remarques :

·	En ce qui concerne l'état du driver de souris, 0 représente l'état désactivé et les autres valeurs l'état activé. Cet état peut être modifié à l'aide des fonctions 1Fh et 20h.

·	Les valeurs retournées dans les registres CX et DX concernent la taille absolue de l'écran de souris virtuel et non les valeurs spécifiées à l'aide des fonctions 07h et 08h. Elles peuvent être obtenues au moyen de la fonction 31h.


Lire la courbe d'accélération en cours    Int 33h, Fct 2Ch    Mouse (>= 7.0)

Cette fonction sert à lire la courbe d'accélération en cours.

Entrée :

AX = 002Ch

Sortie :

AX 	= Etat de la fonction

BX 	= Numéro de la courbe d'accélération en cours (0 à 3)

ES 	= Adresse de segment du buffer

SI 	= Adresse d'offset du buffer

Remarques :

·	Après appel de cette fonction, il faut obligatoirement demander l'état de la fonction dans le registre AX. La courbe d'accélération ne peut être lue que lorsque la valeur 0 a été retournée dans le registre.

·	Après appel de la fonction, le contenu des registres ES:SI indique le buffer renfermant les données-clé de la courbe d'accélération en cours. La structure de ces données correspond au format identique à celui attendu lors de la définition d'une courbe d'accélération à l'aide de la fonction 2Bh.


Lire la liste des modes vidéo disponibles    Int 33h, Fct 29h    Mouse (>= 7.0)

Cette fonction permet à un programme utilisateur de demander la liste des modes vidéo reconnus par le matériel vidéo en cours.

Entrée :

AX 	= 0029h

CX 	= Demander le premier mode vidéo ou le suivant

Sortie :

BX 	= Adresse de segment d'une chaîne

CX 	= Numéro de code du mode vidéo

DX 	= Adresse d'offset d'une chaîne

Remarques :

·	Pour demander la liste complète des modes vidéo disponibles, il convient d'exécuter un appel multiple. Lors du premier appel, la fonction doit retourner la valeur 0 pour le paramètre de CX et une valeur différente de 0 lors des appels suivants.

Chaque appel décrit un mode vidéo différent jusqu'à ce que la valeur 0 obtenue dans le registre CX indique que tous les modes vidéo ont été sollicités.

·	Outre le numéro de code du mode vidéo, cette fonction ne fournit pas toujours le type du mode vidéo (texte ou graphique), sa résolution et le nombre de couleurs à afficher. Généralement, cette information figure dans une chaîne ASCII dont l'adresse est retournée dans la paire des registres BX:DX.

Dans la mesure où une telle chaîne est disponible et les deux registres cités ne contiennent pas la valeur 0, elle se termine par un caractère dollar et un octet nul.


Lire la position de la souris et l'état des boutons    Int 33h, Fct 03h    Mouse (>= 1.0)

L'appel de cette fonction fournit la position actuelle de la souris et l'état des différents boutons de la souris.

Entrée :

AX	= 0003h

Sortie :

BX	= Etat des boutons de la Souris (>= 1.0)

Bit	Signification

0	1 = bouton gauche de la souris appuyé

1	1 = bouton droit de la souris appuyé

2	1 = bouton central de la souris appuyé

3-15	Aucune (0)

CX	= Position horizontale de la Souris (>= 1.0)

DX	= Position verticale de la souris

Remarques :

·	Les ordonnées renvoyées dans les registres CX et DX ne se rapportent pas à l'écran physique mais aux positions en points écran dans l'écran virtuel de la souris.

·	Si la souris ne possède que deux boutons, les informations fournies sur le bouton central sont dépourvues de signification.


Lire la sensibilité de la souris    Int 33h, Fct 1Bh    Mouse (>= 1.0)

Renvoie les paramètres qui ont été fixés à travers la fonction 1Ah ou à travers les fonctions 0Fh et 13h.

Entrée :

AX	= 001Bh

Sortie :

BX	= Nombre de mickeys représentant huit points horizontalement

CX	= Nombre de mickeys représentant huit points verticalement

DX	= Seuil pour le doublement de la vitesse de la souris


Lire la taille du buffer d'état de la souris    Int 33h, Fct 15h    Mouse (>= 1.0)

Cette fonction fournit la taille du buffer d'état de la souris dans lequel un programme peut sauvegarder l'état complet du driver de la souris.

Entrée :

AX	= 0015h

Sortie :

BX	= Taille du buffer d'état de la souris en octets

Remarque :

·	L'état de la souris peut être sauvegardé à l'aide de la fonction 16h.


Lire le type de souris    Int 33h, Fct 24h    Mouse (>= 1.0)

Fournit le type de souris ainsi que son numéro de version.

Entrée :

AX	=	0024h

Sortie :

BH	=	Partie entière du numéro de version

BL	=	Partie décimale du numéro de version

CH	=	Type de souris

1 = Souris bus

2 = Souris série

3 = Souris InPort

4 = Souris PS/2

5 = Souris HP

CL	=	Numéro IRQ

0 = PS/2

2, 3, 4, 5 ou 7 = Numéro PC

Remarque :

·	Un driver de souris de version 6.24 aura 6 dans le registre BH et 24h dans le registre BL.


Lire les courbes d'accélération    Int 33h, Fct 2Bh    Mouse (>= 7.0)

Les quatre courbes d'accélération gérées par le driver de souris sur le plan interne peuvent être chargées à l'aide de cette fonction. L'une d'entre elles peut être sélectionnée comme la courbe en cours.

Entrée :

AX = 002Bh

BX = Numéro de la courbe d'accélération à activer

ES = Adresse de segment des données-clé

SI = Adresse d'offset des données-clé

Sortie :

AX 	= FFFFh : Erreur

= 0021h : Tout va bien, dans ce cas

BX = Nombre d'appuis sur la souris

Remarques :

·	Cette fonction permet de commuter entre les courbes d'accélération prédéfinies dans le driver, la valeur -1 représentant le numéro de la courbe en cours. Il n'est pas indispensable de transmettre un buffer avec les données-clé des courbes d'accélération.

·	Les quatre courbes d'accélération sont décrites à l'aide d'une structure de données définie dans la mémoire par le programme d'appel. Elle doit être transmise au moyen du registre ES:SI.


Lire les distances de déplacement    Int 33h, Fct 0Bh    Mouse (>= 1.0)

Détermine la distance entre la position actuelle de la souris et la position de la souris lors du dernier appel de cette fonction.

Entrée :

AX	= 000Bh

Sortie :

CX	= Distance horizontale

DX	= Distance verticale

Remarques :

·	Les valeurs doivent être interprétées comme des nombres signés, les valeurs positives indiquant un déplacement vers le bas ou la droite de l'écran, alors que les valeurs négatives indiquent un déplacement vers le haut ou la gauche de l'écran.

·	Les valeurs ne sont pas fournies en points mais en mickeys.(1 mickey équivaut à 1/200 de pouce).


Lire les Fcts disponibles    Int 33h, Fct 32h    Mouse (>= 7.05)

Cette fonction permet tout simplement de connaître toutes les fonctions reconnues depuis la fonction 25h.

Entrée :

AX 	= 0032h

Sortie :

AX 	= Fonctions reconnues

Remarques :

·	Le résultat de la fonction retourné en AX doit être considéré comme un tableau de bits où chaque bit représente une fonction. S'il est réglé, cela signifie que la fonction est reconnue.

Le bit 15 représente la fonction 25h, le bit 14 la fonction 26h, le bit 13 la fonction 27h, etc.

Bit 15 = Fonction 25h

Bit 45 = Fonction 26h

Bit 13 = Fonction 27h

Bit 12 = Fonction 28h

Bit 11 = Fonction 29h

Bit 10 = Fonction 2Ah

Bit 9 = Fonction 2Bh

Bit 8 = Fonction 2Ch

Bit 7 = Fonction 2Dh

Bit 6 = Fonction 2Eh

Bit 5 = Fonction 2Fh

Bit 4 = Fonction 30h

Bit 3 = Fonction 31h

Bit 1 = Fonction 32h

Bit 0 = Fonction 33h


Lire les masques de bits du curseur d'écran    Int 33h, Fct 27h    Mouse (>= 7.01)

Cette fonction permet de prendre connaissance des masques de bits en cours pour la création du curseur logiciel ou pour la ligne de départ et la ligne finale du curseur électronique. En outre, cette fonction donne des informations sur le déplacement de la souris depuis sa dernière utilisation.

Entrée :

AX 	= 0027h

Sortie :

AX 	= Masque AND du curseur logiciel ou ligne de départ du curseur électronique

BX 	=  Masque XOR du curseur logiciel ou ligne finale du curseur électronique

CX 	= Longueur du déplacement horizontal en mickeys

DX 	=  Longueur du déplacement vertical en mickeys

Remarques :

·	Si un curseur électronique se trouve activé au moment de l'appel de la fonction, celle-ci retourne la ligne de départ et la ligne finale (en lignes Scan). Au contraire, si le curseur logiciel est actif, la fonction retourne les masques de bits en cours.

·	Bien que cette fonction soit reconnue depuis la version 7.01 du driver de souris, les informations concernant les lignes de départ et finales du curseur électronique ne sont transmises qu'à partir de la version 7.02. Cela élimine un risque d'erreur dans la version 7.01 qui ne fonctionne librement qu'avec le curseur logiciel.

·	Les distances de déplacement retournées dans les registres CX et DX ne sont pas modifiées à cause des différents paramètres logiciels tels que le seuil du doublement de la vitesse de la souris ou la table d'accélération. Elles représentent donc les valeurs transmises directement au driver de souris par le hard.


Lire une page écran du curseur de la souris    Int 33h, Fct 1Eh    Mouse (>= 1.0)

Détermine la page écran dans laquelle le curseur de la souris est représenté par le driver de la souris.

Entrée :

AX	= 001Eh

Sortie :

BX	= Numéro de la page écran


Masquer le curseur de la souris    Int 33h, Fct 02h    Mouse (>= 1.0)

Cette fonction élimine le curseur de la souris de l'écran.

Entrée :

AX	= 0002h

Sortie :

Aucune

Remarques :

·	L'appel de cette fonction entraîne la décrémentation d'un compteur interne, en fonction duquel le curseur de la souris est ou non affiché sur l'écran. Si ce compteur contient la valeur 0, le curseur de la souris sera affiché sur l'écran, alors que la valeur -1 a pour effet de le faire disparaître de l'écran.

·	Le driver de la souris suit les déplacements de la souris même après appel de cette fonction. A la suite de l'appel de la fonction 01h (Afficher le curseur de la souris), le curseur de la souris ne réapparaîtra donc pas nécessairement au même endroit que là où il se trouvait lorsqu'il avait été caché.


Obtenir des informations sur le curseur de la souris    Int 33h, Fct 2Ah    Mouse (>= 7.02)

Cette fonction retourne diverses informations concernant le curseur et l'électronique de la souris.

Entrée :

AX 	= 002Ah

Sortie :

AX 	= Compteur de curseur interne

BX 	= Ordonnée X du Hot-Spot

CX 	= Ordonnée Y du Hot-Spot

DX 	= Type de souris

Remarques :

·	Le compteur de souris interne indique si le curseur est actuellement visible ou non. Vous pouvez agir indirectement sur lui en appelant les fonctions 01h et 02h. La valeur 0 signale alors que le curseur de souris est pour l'instant invisible. Toute autre valeur indique que le curseur de souris se trouve sur l'écran.

·	En ce qui concerne le curseur graphique, le Hot-Spot reproduit le point à l'intérieur du masque de bits du curseur retourné à la suite d'une demande de sa position. Pour exprimer sa suppression du coin supérieur gauche du masque de bits, une valeur positive signée comprise entre -128 et 127 est retournée dans les registres BX ou CX.

·	Dans le registre DX, la fonction retourne un code de type selon la table suivante :

0 	= pas de souris

1 	= souris bus

2 	= souris série

3 	= souris InPort

4 	= souris PS/2

5 	= souris HP


Réinitialiser l'électronique de la souris    Int 33h, Fct 2Fh    Mouse (>= 7.02)

Cette fonction réinitialise l'électronique de la souris sans agir sur les paramètres logiciels tels que le masque de bits du curseur de la souris, le seuil du doublement de la vitesse de la souris ou les courbes d'accélération.

Entrée :

AX 	= 002Fh

Sortie :

AX 	= 	FFFFh : Tout va bien

0 = Erreur

Remarques :

·	Cette fonction représente le contraire de la fonction 21h qui ne réinitialise que les paramètres logiciels.


Réinitialiser le driver de la souris    Int 33h, Fct 00h    Mouse (>= 1.0)

Initialise le driver de souris et enclenche ainsi le test de la souris.

Entrée :

AX	= 0000h

Sortie :

AX	= FFFFh : dans ce cas, un driver de souris est installé

BX	= Nombre de boutons de la Souris (>= 1.0)

AX	= 0000h : erreur, aucun driver de souris n'est installé

Remarques :

·	L'appel de cette fonction agit sur toute une série de paramètres de la souris qui peuvent être fixés à l'aide des différentes fonctions de la souris :

Þ	Le curseur de la souris est placé au centre de l'écran puis caché. Il apparaîtra désormais en mode graphique sous forme d'une flèche, alors qu'il sera représenté en mode de texte sous forme d'une case de texte en inversion vidéo. Le curseur de la souris est systématiquement affiché dans la page 0 de l'écran, indépendamment du mode. La zone de déplacement sélectionnée est la totalité de l'écran.

Þ	Les gestionnaires d'événements installés par un programme. Ils sont désactivés.

Þ	L'émulation du crayon optique est également désactivée.

Þ	La vitesse de la souris. Pour la vitesse horizontale de la souris, un rapport de 8 mickeys pour 8 points est défini. Pour la vitesse verticale, ce rapport est de 16 pour 8

Þ	Le seuil de doublement de la vitesse de la souris. Il est fixé à 64 mickeys par seconde.


Réinitialiser le driver de la souris    Int 33h, Fct 21h    Mouse (>= 1.0)

Cette fonction effectue une réinitialisation du driver de la souris, en cachant le curseur de la souris et en désactivant les gestionnaires d'événements déjà installés.

Entrée :

AX	= 0021h

Sortie :

AX	= 	FFFFh : Erreur

0021h :Tout va bien, dans ce cas :

BX = nombre de boutons

Remarque :

·	Cette fonction, contrairement à la fonction 00h ne réinitialise pas le hardware de la souris.


Restaurer l'état de la souris    Int 33h, Fct 17h    Mouse (>= 1.0)

Lit tous les paramètres de la souris dans un buffer dans lequel ils avaient été sauvegardés auparavant avec la fonction 16h.

Entrée :

AX	= 0017h

ES:DX	= Adresses de segment et d'offset du buffer d'état de la souris

Sortie :

Aucune


Vérifier l'existence d'une langue étrangère pour les messages    Int 33h, Fct 23h    Mouse (>= 1.0)

La version internationale du driver de la souris reconnaît plusieurs langues étrangères et peut retourner les messages dans ces langues. Cette fonction retourne le numéro de code de la langue étrangère actuellement définie.

Entrée :

AX 	= 0023h

Sortie :

BX 	= Numéro de code de la langue étrangère choisie

Remarques :

·	Les codes suivants sont utilisés pour désigner les langues étrangères :

0	Anglais

1	Français

2	Néerlandais

3	Allemand

4	Suédois

5	Finlandais

6	Espagnol

7	Portugais

8	Italien

·	Si vous n'êtes pas en présence d'une version internationale du driver de la souris, la fonction retourne la valeur 0.


Joystick

Test des boutons de tir de joystick

Test de la position du joystick


Test des boutons de tir de joystick    Int 15h, Fct 84h, Sous-Fct 0    BIOS (>= AT)

Si un adaptateur de jeux avec les joysticks correspondants est connecté sur le PC, l'état des boutons Feu peut être testé à l'aide de cette fonction.

Entrée :

AH 	= 84h

DX 	= 0

Sortie :

Flag Carry =1 : Pas d'adaptateur de jeux connecté

Flag Carry =0 : Adaptateur de jeux présent, dans ce cas

AL =	Etat des boutons Feu

Bit 7 = 1 : Premier bouton Feu du premier joystick enfoncé

Bit 6 = 1 : Second bouton Feu du premier joystick enfoncé

Bit 5 = 1 : Premier bouton Feu du second joystick enfoncé

Bit 4 = 1 : Second bouton Feu du second joystick enfoncé

Remarques :

·	La position des joysticks peut être testée à l'aide de la sous-fonction 1.

·	Le contenu des registres BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Test de la position du joystick    Int 15h, Fct 84h, Sous-Fct 1    BIOS (>= AT)

Si un adaptateur de jeux avec les joysticks correspondants est connecté sur le PC, la position des joysticks peut être testée à l'aide de cette fonction.

Entrée :

AH 	= 84h

DX 	= 1

Sortie :

Flag Carry =1 : Pas d'adaptateur de jeux connecté

Flag Carry =0 : Adaptateur de jeux présent, dans ce cas

AX = Position X du premier joystick

BX = Position Y du premier joystick

CX = Position X du second joystick

DX = Position Y du second joystick

Remarques :

·	L'état des boutons Feu peut être testé à l'aide de la sous-fonction 0.

·	Le contenu des registres SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Date/heure, horloge système

Annuler l'heure d'alarme

Définir l'heure d'alarme

Définir l'horloge temps réel

Définir la date de l'horloge temps réel

Définir le compteur de l'horloge système

Définir les date et heure de la dernière modification d'un fichier

Lire l'heure

Lire l'horloge temps réel BIOS

Lire la date

Lire la date sur l'horloge temps réel

Lire le compteur de l'horloge système

Lire les date et heure de la dernière modification d'un fichier

Modifier l'heure

Modifier la date


Annuler l'heure d'alarme     Int 1Ah, Fct 07h    BIOS (>= AT)

Cette fonction permet d'annuler une heure d'alarme déjà programmée. Aucune alarme ne sera donc plus déclenchée lorsque cette heure sera atteinte (seulement AT).

Entrée :

AH 	= 07h

Sortie :

aucune

Remarques :

·	Cette fonction doit notamment être appelée chaque fois que l'on veut modifier l'heure d'alarme. Dans ce cas en effet, il ne sera possible de programmer une nouvelle heure d'alarme, en appelant la fonction 6, qu'après avoir appelé cette fonction.

·	Le contenu des registres BX, CX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Définir l'heure d'alarme     Int 1Ah, Fct 06h    BIOS (>= AT)

Cette fonction permet de régler une heure d'alarme se référant au jour actuel. Lorsque cette heure d'alarme est atteinte, l'interruption 4Ah est déclenchée. L'horloge en temps réel alimentée par batterie n'existe que sur les AT.

Entrée :

AH 	= 06h

CH 	= Heures

CL 	= Minutes

DH 	= Secondes

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : soit la batterie de l'horloge est déchargée, soit une autre heure d'alarme a déjà été programmée.

Remarques :

·	Les indications fournies à la fonction doivent être codées en format BCD.

·	L'interruption 4Ah est dirigée, lors du lancement du système, sur une instruction langage machine IRET. Si cette interruption n'est donc pas redirigée sur une routine spéciale, il ne se passera rien lorsque l'heure d'alarme sera atteinte.

·	Il n'est pas possible d'activer plus d'une heure d'alarme à la fois. Si une heure d'alarme est déjà programmée, il faut d'abord l'annuler à l'aide de la fonction 7.

·	Le contenu des registres BX, CX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Définir l'horloge temps réel     Int 1Ah, Fct 03h    BIOS (>= AT)

Cette fonction permet de régler l'heure sur l'horloge temps réel alimentée par batterie. Comme ce type d'horloge n'existe que sur les AT, seul ce modèle de PC soutient cette fonction.

Entrée :

AH 	= 03h

CH 	= Heures

CL 	= Minutes

DH 	= Secondes

DL 	= 1 : c'est l'heure d'été

DL 	= 0 : ce n'est pas l'heure d'été

Sortie :

aucune

Remarques :

·	Les indications d'heures, minutes et secondes doivent être fournies en format BCD.

·	Le contenu des registres BX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Définir la date de l'horloge temps réel    Int 1Ah, Fct 05h    BIOS (> AT)

Cette fonction permet de régler la date qui est stockée dans la mémoire RAM de l'horloge temps réel alimentée par batterie. Cette fonction n'est soutenue que par l'AT qui dispose seul d'une horloge en temps réel.

Entrée :

AH 	= 05h

CH 	= Siècle (19 ou 20)

CL 	= Année

DH 	= Mois

DL 	= Jour

Sortie :

aucune

Remarques :

·	Toutes les indications fournies à la fonction doivent être codées en format BCD.

·	Le contenu des registres BX, CX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Définir le compteur de l'horloge système    Int 1Ah, Fct 01h    BIOS

Cette fonction permet de régler le contenu du compteur horaire. Ce compteur étant augmenté 18,2 fois par seconde, il permet de connaître le temps écoulé depuis la mise en marche de l'ordinateur ou depuis minuit, à moins que cette fonction ne soit utilisée pour le régler.

Entrée :

AH 	= 01h

CX 	= Mot fort du compteur horaire

DX 	= Mot faible du compteur horaire

Sortie :

aucune

Remarques :

·	L'AT, qui dispose d'une horloge alimentée par batterie, règle le compteur horaire sur l'heure réelle lors du lancement de l'ordinateur. Les PC qui ne disposent pas d'horloge en temps réel fixent ce compteur sur 0 lors du lancement. C'est pourquoi, sur ces modèles, il convient d'utiliser cette fonction si l'on veut que le compteur horaire soit réglé sur l'heure actuelle.

·	Le contenu des registres AX, BX, CX, DX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Définir les date et heure de la dernière modification d'un fichier    Int 21h, Fct 57h, Sous-Fct 01h    DOS (>= 1.0)

Cette fonction permet de régler les date et heure de création ou du moins de la dernière modification d'un fichier. Cette information est sauvegardée dans l'entrée du fichier dans le répertoire du périphérique voulu.

Entrée :

AH 	= 57h

AL 	= 1

BX 	= Handle

CX 	= Heure

DX 	= Date

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Fonction inconnue

6 : Handle inconnu

Remarques :

·	Le fichier doit avoir été préalablement ouvert ou créé à l'aide d'une fonction Handle, de façon à ce qu'il soit possible d'y accéder à travers son handle.

·	L'heure dans le registre CX présente le format suivant :

Bits 0 - 4 :	Secondes par unités de 2

Bits 5 - 10 :	Minutes

Bits 11 - 15 : 	Heures

·	La date dans le registre DX présente le format suivant :

Bits 0 - 4 :	Jour du mois

Bits 5 - 8 :	Mois

Bits 9 - 15 :	Année (par rapport à 1980)

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Lire l'heure    Int 21h, Fct 2Ch    DOS

Cette fonction permet de déterminer l'heure actuelle.

Entrée :

AH 	= 2Ch

Sortie :

CH 	= Heures

CL 	= Minutes

DH 	= Secondes

DL 	= Centièmes de seconde

Remarques :

·	Pour obtenir l'heure, le DOS appelle le driver d'horloge.

·	Le contenu des registres AX, BX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Lire l'horloge temps réel BIOS (>= AT)

Cette fonction permet de lire l'heure de l'horloge temps réel alimentée par batterie. Comme ce type d'horloge n'existe que sur les AT, seul ce modèle de PC soutient cette fonction.

Entrée :
Interruption 1Ah, Fonction 02h

AH 	= 02h

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas

CH = Heures

CL = Minutes

DH = Secondes

Flag Carry =1 : La batterie de l'horloge est déchargée

Remarques :

·	Toutes les indications sont fournies en format BCD.

·	Le contenu des registres BX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Lire la date    Int 21h, Fct 2Ah    DOS (>= 1.0)

Cette fonction permet de déterminer la date actuelle.

Entrée :

AH 	= 2Ah

Sortie :

AL 	= Jour de la semaine (0=Dimanche, 1=Lundi, etc.)

CX 	= Année

DH 	= Mois

DL 	= Jour

Remarques :

·	Pour obtenir la date, le DOS appelle le driver d'horloge.

·	Le contenu des registres AH, BX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Lire la date sur l'horloge temps réel     Int 1Ah, Fct 04h    BIOS (>= AT)

Cette fonction permet de lire la date qui est stockée dans la mémoire RAM de l'horloge en temps réel alimentée par batterie. Cette fonction n'est soutenue que par l'AT.

Entrée :

AH 	= 04h

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas

CH = Siècle (19 ou 20)

CL = Année

DH = Mois

DL = Jour

Flag Carry =1 : La batterie de l'horloge est déchargée

Remarques :

·	Toutes les indications renvoyées par la fonction sont fournies en format BCD.

·	Le contenu des registres BX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Lire le compteur de l'horloge système    Int 1Ah, Fct 00h    BIOS

Cette fonction permet de lire le contenu du compteur horaire. Il est incrémenté 18,2 fois par seconde et permet de calculer le temps écoulé depuis la mise en marche de l'ordinateur ou depuis minuit.

Entrée :

AH 	= 00h

Sortie :

CX 	= Mot fort du compteur

DX 	= Mot faible du compteur

AL 	= 0 : Moins de 24 heures se sont écoulées depuis la dernière fois que l'heure a été lue.

Différent de 0 : Plus de 24 heures se sont écoulées depuis la dernière  fois que l'heure a été lue.

Remarques :

·	L'AT, qui dispose d'une horloge alimentée par batterie, règle le compteur horaire sur l'heure réelle lors du lancement de l'ordinateur. Les PC qui ne disposent pas d'horloge en temps réel règlent ce compteur sur 0 lors du lancement.

·	Le contenu des registres BX, SI, DI, BP et des registres de segment n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Lire les date et heure de la dernière modification d'un fichier    Int 21h, Fct 57h, Sous-Fct 00h    DOS(>= 1.0)

Cette fonction permet de déterminer la date et l'heure de création ou du moins de la dernière modification d'un fichier.

Entrée :

AH 	= 57h

AL 	= 0

BX 	= Handle

Sortie :

Flag Carry	=0 : Tout va bien, dans ce cas

CX	= Heure

DX	= Date

Flag Carry	=1: Erreur, dans ce cas AX = Code d'erreur

1 : Fonction inconnue

6 : Handle inconnu

Remarques :

·	Le fichier doit avoir été préalablement ouvert ou créé à l'aide d'une fonction Handle, de façon à ce qu'il soit possible d'y accéder à travers son handle.

·	L'heure dans le registre CX présente le format suivant :

Bits 0 - 4 :	Secondes par unités de 2

Bits 5 - 10 :	Minutes

Bits 11 - 15 : 	Heures

·	La date dans le registre DX présente le format suivant :

Bits 0 - 4 :	Jour du mois

Bits 5 - 8 :	Mois

Bits 9 - 15 :	Année (par rapport à 1980)

·	Le contenu des registres BX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Modifier l'heure    Int 21h, Fct 2Dh    DOS (>= 1.0)

Cette fonction permet de modifier l'heure actuelle.

Entrée :

AH 	= 2Dh

CH 	= Heures

CL 	= Minutes

DH 	= Secondes

DL 	= Centièmes de seconde

Sortie :

AL 	= 0 : Tout va bien

AL 	= 255 : Heure impossible

Remarques :

·	L'heure transmise est communiquée au driver d'horloge.

·	Si le PC n'est pas doté d'une horloge en temps réel sur piles ainsi que d'un driver d'horloge soutenant ce type d'horloge, l'heure ne sera conservée (et actualisée) que jusqu'à l'arrêt de l'ordinateur ou jusqu'à un nouveau lancement du système.

·	L'ancienne heure est conservée si l'heure n'est pas plausible.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Modifier la date    Int 21h, Fct 2Bh    DOS (>= 1.0)

Cette fonction permet de modifier la date actuelle.

Entrée :

AH 	= 2Bh

CX 	= Année

DH 	= Mois

DL 	= Jour

Sortie :

AL 	= 0 : Tout va bien

AL 	= 255 : Date impossible

Remarques :

·	La date transmise est communiquée au driver d'horloge.

·	Si le PC n'est pas doté d'une horloge en temps réel sur piles ainsi que d'un driver d'horloge soutenant ce type d'horloge, la date ne sera conservée que jusqu'à l'arrêt de l'ordinateur ou jusqu'à un nouveau lancement du système.

·	L'ancienne heure est conservée si l'heure n'est pas plausible.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Lecteur, répertoire et fichier

Affecter un handle à un autre

APPEND : Définir les paramètres de la commande

APPEND : Déterminer la compatibilité avec DOS 5

APPEND : Indiquer la liste des répertoires APPEND

APPEND : Lire les paramètres de la commande

APPEND : Tester la présence

Augmenter le nom de fichier

Créer ou vider fichier (Handle)

Créer ou vider un fichier (FCB)

Créer un fichier temporaire (Handle)

Créer un nouveau fichier (handle)

Créer un nouveau PSP

Créer un sous-répertoire

Définir l'adresse de la DTA

Définir l'attribut d'un fichier

Définir le flag Verify

Définir le numéro d'enregistrement

Définir les date et heure de la dernière modification d'un fichier

Définir un second Handle

Défnir le sous-répertoire en cours

Déplacer le pointeur de fichier (handle)

Ecrire dans un fichier (Handle)

Ecrire le prochain enregistrement dans un fichier (FCB)

Ecrire plusieurs enregistrements (FCB)

Ecrire un nom de fichier dans FCB

Ecriture absolue

Ecriture sélective (FCB)

Fermer un fichier (FCB)

Fermer un fichier (Handle)

Fct OPEN étendue

Lecture absolue

Lecture sélective (FCB)

Libérer le buffer de fichier

Libérer une zone verrouillée dans un fichier

Lire l'adresse de la DTA

Lire l'attribut d'un fichier

Lire l'espace disque disponible

Lire la désignation de périphérique du lecteur actuel

Lire la première entrée du répertoire

Lire la prochaine entrée du répertoire

Lire la taille du fichier (FCB)

Lire le flag Verify

Lire le pointeur BPD pour le lecteur en cours

Lire le prochain enregistrement d'un fichier (FCB)

Lire le répertoire actuel

Lire les date et heure de la dernière modification d'un fichier

Lire les informations sur le lecteur actuel

Lire les informations sur un lecteur quelconque

Lire plusieurs enregistrements (FCB)

Lire un fichier (Handle)

Ouvrir un fichier (FCB)

Ouvrir un fichier (Handle)

Placer un pointeur sur le BPD d'un lecteur quelconque

Protéger une zone de fichier contre l'accès

Rechercher l'entrée suivante du répertoire (FCB)

Rechercher la première entrée du répertoire (FCB)

Renommer ou déplacer un fichier (Handle)

Renommer un fichier (FCB)

Sélectionner le lecteur actuel

Spécifier le nombre de handles disponibles

Supprimer un fichier (FCB)

Supprimer un fichier (Handle)

Supprimer un sous-répertoire


Affecter un handle à un autre    Int 21h, Fct 46h    DOS (>= 1.0)

Cette fonction attend deux handles associés à deux fichiers ou périphériques différents. Le second handle est alors assimilé par la fonction au premier, c'est-à-dire qu'il se retrouve associé au même fichier ou au même périphérique que le premier handle. La valeur de son pointeur de fichier coïncide également avec celle du pointeur de fichier du premier handle.

Entrée :

AH 	= 46h

BX 	= Premier handle

CX 	= Second handle (à assimiler)

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

4 : Pas d'autre handle disponible

6 : Handle spécifié non ouvert ou qui n'existe pas

Remarques :

·	Si le second handle est associé à un fichier ouvert lors de l'appel de cette fonction, ce fichier est tout d'abord fermé.

·	Lorsque le pointeur de fichier d'un des deux handles est déplacé du fait de l'appel d'une fonction de lecture ou écriture, le pointeur de fichier de l'autre handle est automatiquement déplacé de la même façon.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


APPEND : Définir les paramètres de la commande    Int 2Fh, code MUX B7h, Fct 07h    MUX

Cette fonction est symétrique de la fonction 06h et permet de fixer les paramètres de fonctionnement de APPEND

Entrée :

AH	= B7h

AL	= 07h

BX	= Indicateur APPEND

Sortie :

néant

Remarque :

·	Les différents bits de l'indicateur représentent les modes opératoires. Les bits non mentionnés dans le tableau ci-dessous n'ont pas de signification et sont à 0 :

Bit	Signification

0	1 = APPEND est actif

12	1 =	Les répertoires APPEND ne sont pris en compte que si les noms des fichiers cherchés comportent des désignations explicites d'unité correspondant exactement à celles transmises à APPEND

13	1 = commutateur /PATH:ON actif

14	1 = commutateur /E actif

15	1 = commutateur /X:ON actif

·	Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé au préalable que APPEND est bien chargé


APPEND : Déterminer la compatibilité avec DOS 5    Int 2Fh, code MUX B7h, Fct 02h    MUX

Entrée :

AH	= B7h

AL	= 02h

Sortie :

AX	= FFFFh : compatible avec DOS 5

Remarque :

·	Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé au préalable que APPEND est bien installé


APPEND : Indiquer la liste des répertoires APPEND    Int 2Fh, code MUX B7h, Fct 04h    MUX

Grâce à cette fonction on peut prendre connaissance des différents répertoires confiés à APPEND pour la recherche des fichiers.

Entrée :

AH	= B7h

AL	= 04h

Sortie :

ES:DI	= Pointeur FAR sur le buffer des répertoires APPEND

Remarque :

·	Le buffer référencé par le pointeur en ES:DI contient les répertoires sous forme de chaîne ASCIIZ. Comme c'est le cas pour la commande PATH, les différentes répertoires sont séparés par des points virgules.

·	Le contenu de ce buffer ne doit pas être modifié par celui qui l'inspecte

·	Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé au préalable que APPEND est bien chargé


APPEND : Lire les paramètres de la commande    Int 2Fh, code MUX B7h, Fct 06h    MUX

Cette fonction permet de prendre connaissance des différents modes opératoires fixés par les paramètres de la ligne de commande au moment du chargement de APPEND.

Entrée :

AH	=B7h

AL	=06h

Sortie :

BX	= Indicateur APPEND

Remarque :

·	Les différents bits de l'indicateur retourné représentent les modes opératoires. Les bits non mentionnés dans le tableau ci-dessous n'ont pas de signification et sont à 0 :

Bit	Signification

0	1 = APPEND est actif

12	1 =	Les répertoires APPEND ne sont pris en compte que si les noms des fichiers cherchés comportent des désignations explicites d'unité correspondant exactement à celles transmises à APPEND

13	1 = commutateur /PATH:ON actif

14	1 = commutateur /E actif

15	1 = commutateur /X:ON actif

·	Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé au préalable que APPEND est bien chargé.


APPEND : Tester la présence    Int 2Fh, code MUX B7h, Fct 00h    MUX

Cette fonction permet de savoir si la partie résidente de la commande APPEND de DOS est chargée.

Entrée :

AH	= B7h

AL	= 00h

Sortie :

AL	= FFh : APPEND chargé


Augmenter le nom de fichier    Int 21h, Fct 60h    DOS (>= 3.0)

Cette fonction sert à augmenter un nom de fichier si bien qu'il peut contenir une désignation complète de chemin et de périphérique outre le nom de fichier. On parle alors d'un nom de fichier "canonique".

Entrée :

AH 	= 60h

DS:SI 	= Pointeur FAR sur le buffer contenant le nom de fichier à compléter sous forme d'une chaîne ASCII

ES:DI 	= Pointeur FAR sur le buffer devant recevoir le nom complet sous forme d'une chaîne ASCII

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas AX = Code d'erreur

Remarques :

·	Outre l'augmentation du nom, cette fonction permet également de déterminer si un périphérique donné existe physiquement ou s'il est représenté par un autre périphérique. A cet effet, transmettez une chaîne à la fonction qui ne se compose uniquement que de la désignation du périphérique à consulter suivie d'un double point et d'un backslash pour le répertoire principal. Si cette chaîne est identique à la chaîne retournée, cela signifie que le périphérique existe physiquement. Le cas contraire indique qu'il s'agit d'une représentation et la valeur de retour désigne le périphérique et le répertoire sur lequel se trouve le lecteur.

·	Le contenu des registres BX, CX, SI, DI, CS, DS, SS et ES n'est pas modifié par cette fonction.


Créer ou vider fichier (Handle)     Int 21h, Fct 3Ch    DOS (>= 1.0)

Après l'appel de cette fonction, le DOS examine si le fichier spécifié existe déjà. Si c'est le cas, ce fichier est vidé et son contenu antérieur est irrémédiablement perdu. Si cependant le fichier spécifié n'existe pas encore, il est créé.

Entrée :

AH 	= 3Ch

CX 	= Attribut de fichier

Bit 0 = 1 : Fichier peut seulement être lu

Bit 1 = 1 : Fichier caché

Bit 2 = 1 : Fichier système

DS 	= Adresse de segment du nom de fichier

DX 	= Adresse d'offset du nom de fichier

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas AX = Handle du fichier

Flag Carry =1 : Erreur, dans ce cas AX = code d'erreur :

3 : Chemin non trouvé

4 : Plus de handle libre

5 : Accès refusé

Remarques :

·	Les différents bits de l'attribut de fichier peuvent parfaitement être combinés.

·	Le nom de fichier doit être fourni sous forme d'une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Ce nom de fichier peut comporter une désignation de périphérique, une désignation de chemin complète et un nom de fichier proprement dit mais il ne doit pas contenir de jokers. Si la désignation de périphérique ou la désignation de chemin sont omises, l'accès se fera sur le périphérique actuel ou sur le répertoire actuel.

·	Une erreur peut apparaître lors de l'appel de cette fonction si un élément de la désignation de chemin n'existe pas, si le fichier est censé être créé dans le répertoire racine alors que ce dernier est déjà plein ou encore si un fichier existe déjà sous ce nom et qu'il ne peut être vidé parce qu'il est protégé contre l'écriture (bit 0 de l'attribut de fichier = 1).

·	Si l'appel de la fonction s'est conclu sans problème, toutes les autres fonctions handle pourront être appelées à l'aide du handle renvoyé car le fichier a aussi été ouvert.

·	Le pointeur de fichier est dirigé sur le premier octet du fichier.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Créer ou vider un fichier (FCB)     Int 21h, Fct 16h    DOS (>= 1.0)

Après appel de cette fonction, un fichier n'existant pas encore sera créé. Un fichier déjà existant sera vidé par l'appel de cette fonction, la longueur de ce fichier passant donc à 0. Le fichier est en même temps ouvert par cette fonction, de sorte que ce fichier pourra être écrit et ensuite lu en appelant d'autres fonctions.

Entrée :

AH 	= 16h

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Fichier a été créé ou vidé

AL 	= 255 : Fichier n'a pu être créé (par exemple parce que le répertoire était déjà plein)

Remarques :

·	Le contenu d'un fichier déjà existant qui aura été vidé à l'aide de cette fonction sera irrémédiablement perdu.

·	Après appel de cette fonction, il n'est plus nécessaire d'ouvrir le fichier à l'aide de la fonction 0Fh.

·	Si le fichier est ouvert à l'aide d'un FCB étendu, il peut aussi posséder certains attributs (nom de volume, fichier caché). Il n'est toutefois pas possible de créer un sous-répertoire à l'aide de cette fonction.

·	Après ouverture du fichier, le pointeur de fichier est dirigé sur le premier octet du fichier.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Créer un fichier temporaire (Handle)    Int 21h, Fct 5Ah    DOS (>= 3)

Cette fonction permet de créer un fichier qui servira uniquement au stockage intermédiaire de données pendant l'exécution d'un programme mais qui sera supprimé après exécution du programme. Le programme d'appel n'a donc pas à se préoccuper du choix d'un nom de programme. Ce nom sera en effet choisi automatiquement par le DOS. Le programme d'appel doit simplement indiquer dans quel répertoire le fichier temporaire devra être mis en place. L'accès au fichier se fera ensuite à travers le handle qui lui a été attribué, de sorte que le nom de fichier ne jouera vraiment aucun rôle. Comme un programme peut ouvrir plusieurs fichiers simultanément à l'aide de cette fonction, le DOS construit le nom du fichier à partir de la date et de l'heure actuelles. Comme la fonction ne peut jamais être appelée deux fois au même moment, cette méthode garantit que chaque fichier temporaire porte un nom différent.

Entrée :

AH	 = 5Ah

CX 	= Attribut du fichier

DS 	= Adresse de segment du répertoire

DX 	= Adresse d'offset du répertoire

Sortie :

Flag Carry	=0 : Tout va bien, dans ce cas

AX	= Handle

DS	= Adresse de segment du nom de fichier complet

DX	= Adresse d'offset du nom de fichier complet

Flag Carry	=1 : Erreur, dans ce cas

AX = Code d'erreur

3 : Chemin non trouvé

4 : Pas de handle disponible

5 : Accès refusé

Remarques :

·	Le nom du répertoire doit être fourni sous forme d'une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Il peut contenir une désignation de périphérique ainsi qu'une spécification de chemin complète. Si la désignation de périphérique ou la spécification de chemin sont omises, l'accès se fera sur le lecteur actuel ou sur le chemin actuel.

·	Les différents bits de l'attribut de fichier ont la signification suivante :

Bit 0 = 1 : 	Fichier en lecture seule

Bit 1 = 1 : 	Fichier caché

Bit 2 = 1 : 	Fichier système

·	Les fichiers qui ont été créés à l'aide de cette fonction ne sont pas automatiquement supprimés à la fin du programme. Pour les supprimer, il faut tout d'abord refermer chaque fichier (fonction 3Eh) puis les supprimer à l'aide du nom de fichier complet (fonction 41h).

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Créer un nouveau fichier (handle)    Int 21h, Fct 5Bh    DOS (>= 3.0)

Tout comme la fonction 3Ch, cette fonction crée également un nouveau fichier et retourne un handle relatif à l'accès. Contrairement à la fonction 3Ch, un fichier existant sous le même nom n'est pas détruit et se trouve protégé contre la réécriture.

Entrée :

AH 	= 3Ch

CX 	= Attribut de fichier

Bit 0 = 1 : Fichier en lecture seule

Bit 1 = 1 : Fichier caché

Bit 2 = 1 : Fichier système

DS:DX = Pointeur FAR sur le buffer contenant le nom de fichier

Sortie :

Flag Carry = 0 : Tout va bien, dans ce cas AX = Handle du fichier

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

3 : Chemin non trouvé

4 : Plus de handle libre

5 : Accès refusé

80 : Le fichier existe déjà

Remarques :

·	Les divers bits de l'attribut de fichier peuvent être combinés.

·	Le nom de fichier doit être une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Outre une désignation de périphérique, il doit contenir une désignation de chemin complète et un nom de fichier mais pas de caractères génériques. Si la désignation de périphérique ou de chemin fait défaut, l'accès portera sur le périphérique ou le répertoire en cours.

·	Une erreur lors de l'appel de cette fonction se produit toujours lorsqu'un élément de la désignation de chemin n'existe pas, le fichier doit être créé dans le répertoire principal qui est saturé ou lorsqu'un fichier portant le même nom existe déjà.

·	Si l'appel de la fonction se termine correctement, toutes les autres fonctions handle peuvent être appelés à l'aide du handle transmis puisque le fichier a été ouvert.

·	Lorsque l'appel de cette fonction a abouti, le pointeur de fichier vient se placer sur le premier octet du fichier.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Créer un nouveau PSP    Int 21h, Fct 26h    DOS (>= 1.0)

Le PSP du programme exécuté est copié à l'adresse spécifiée.

Entrée :

AH 	= 26h

DX 	= Adresse de segment du nouveau PSP

Sortie :

aucune

Remarques :

·	L'adresse d'offset du nouveau PSP est 0.

·	Cette fonction était utilisée sous la version 1 du DOS pour exécuter d'autres programmes. A cet effet, un PSP était mis en place, après quoi le programme voulu pouvait être chargé à la suite de ce PSP puis être exécuté.

·	Sous les versions 2 et 3 du DOS, il est préférable de ne plus recourir à cette fonction car les autres programmes peuvent être chargés et exécutés à l'aide de la fonction EXEC 4Bh.

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Créer un sous-répertoire     Int 21h, Fct 39h    DOS (>= 1.0)

Cette fonction permet de créer un nouveau sous-répertoire sur le périphérique spécifié.

Entrée :

AH 	= 39h

DS 	= Adresse de segment du chemin du sous-répertoire

DX 	= Adresse d'offset du chemin du sous-répertoire

Sortie :

Flag Carry =0 : Nouveau sous-répertoire créé

Flag Carry =1 : Erreur, dans ce cas

AX = 3 : Chemin non trouvé

AX = 5 : Accès refusé

Remarques :

·	Le chemin de sous-répertoire transmis est une chaîne ASCII terminée par un caractère de fin (code ASCII 0).

·	Si le chemin de sous-répertoire comporte une désignation de périphérique, l'accès se fera sur le périphérique spécifié, sinon le sous-répertoire sera créé sur le périphérique actuel.

·	Une erreur peut se produire si un élément du chemin n'existe pas, si un sous-répertoire existe déjà sous le nom spécifié ou bien si le sous-répertoire devait être créé dans le répertoire racine alors que ce dernier est déjà plein.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Définir l'adresse de la DTA     Int 21h, Fct 1Ah    DOS (>= 1.0)

En appelant cette fonction, vous pouvez déplacer vers une autre zone de mémoire la zone de transfert disque (Disk Transfer Area = DTA), qui est utilisée pour le stockage intermédiaire des données lors de tous les accès de fichier soutenus par FCB.

Entrée :

AH 	= 1Ah

DS 	= Adresse de segment de la nouvelle DTA

DX 	= Adresse d'offset de la nouvelle DTA

Sortie :

aucune

Remarques :

·	Cette fonction doit être appelée chaque fois que la DTA prédéfinie n'est pas assez grande pour recevoir les données à transférer.

·	Lors du lancement d'un programme, le DOS place la DTA à l'adresse 128 du PSP du programme. Elle a donc une taille de 128 octets puisque le programme lui-même commence immédiatement après l'adresse 255 du PSP.

·	Le DOS ne connaît pas la longueur de la DTA et il considère toujours a priori qu'elle est suffisamment grande pour absorber les données à transférer. Or s'il n'en est pas ainsi en réalité, les données excédentaires effaceront les données suivantes de la fonction DOS utilisée.

·	Avec différentes fonctions, le DOS détecte toutefois une erreur lorsque la DTA se situe à la fin d'un segment et que les données à transférer sont de ce fait conduites à dépasser la limite du segment.

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Définir l'attribut d'un fichier    Int 21h, Fct 43h, Sous-Fct 1    DOS (>= 1.0)

Cette fonction permet de régler l'attribut d'un fichier quelconque.

Entrée :

AH 	= 43h

AL 	= 1

CX 	= Attribut du fichier

Bit 0 = 1 : 	Fichier doit seulement être lu, on ne peut y écrire

Bit 1 = 1 : 	Fichier est caché (ne sera pas affiché par DIR)

Bit 2 = 1 : 	Fichier est un fichier système

Bit 3 = 0 :	Volume

Bit 4 = 0 :	Répertoire	Bit 3 : 0(b)

Bit 5 = 1 : 	Fichier a été modifié depuis le dernier archivage

DS 	= Adresse de segment du nom de fichier

DX 	= Adresse d'offset du nom de fichier

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

2 : Fichier non trouvé

3 : Chemin non trouvé

5 : Attribut ne peut pas être modifié

Remarques :

·	Le nom de fichier doit être fourni sous forme d'une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Il peut comporter une désignation de périphérique, une spécification de chemin complète ainsi qu'un nom de fichier proprement dit, mais pas de jokers. Si la désignation de périphérique ou la spécification de chemin sont omises, l'accès se fera sur le périphérique actuel ou sur le répertoire actuel.

·	Une erreur apparaîtra si un élément de la spécification de chemin ou le fichier lui-même n'existe pas.

·	Cette fonction ne permet pas de manipuler les sous-répertoires ni les noms de volumes. C'est pourquoi les bits 3 et 4 de l'attribut de fichier doivent valoir 0 lors de l'appel de la fonction. Si on tente malgré tout d'accéder à un sous-répertoire ou à un nom de volume, le code d'erreur 5 sera renvoyé.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction. Le contenu de tous les autres registres peut avoir été modifié.


Définir le flag Verify     Int 21h, Fct 2Eh    DOS (>= 1.0)

L'indicateur de vérification définit si après une opération d'écriture sur un driver de bloc (disquette, disque dur) il convient de vérifier si les données écrites ont été correctement transmises. Cette vérification ralentit naturellement l'accès aux périphériques concernés mais accroît la sécurité de transmission des données.

Entrée :

AH 	= 2Eh

DL 	= 0

AL 	= 0 : Ne pas vérifier les données

AL 	= 1 : Vérifier les données

Sortie :

aucune

Remarques :

·	Au niveau utilisateur, ce flag peut également être manipulé à l'aide des instructions VERIFY ON et VERIFY OFF.

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Définir le numéro d'enregistrement     Int 21h, Fct 24h    DOS (>= 1.0)

Cette fonction permet de fixer sur la position actuelle du pointeur de fichier le numéro d'enregistrement dans le FCB qui définit l'accès séquentiel à un fichier. Après une série d'accès de fichier séquentiels, on peut ainsi poursuivre avec l'accès sélectif à l'endroit précis où les accès séquentiels avaient été interrompus.

Entrée :

AH 	= 24h

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

aucune

Remarques :

·	Cette fonction ne doit être appelée qu'après que le fichier ait été ouvert à travers le FCB spécifié.

·	Cette fonction ne modifie le contenu d'aucun registre du processeur, y compris le registre de flags.


Définir les date et heure de la dernière modification d'un fichier    Int 21h, Fct 57h, Sous-Fct 01h    DOS (>= 1.0)

Cette fonction permet de régler les date et heure de création ou du moins de la dernière modification d'un fichier. Cette information est sauvegardée dans l'entrée du fichier dans le répertoire du périphérique voulu.

Entrée :

AH 	= 57h

AL 	= 1

BX 	= Handle

CX 	= Heure

DX 	= Date

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Fonction inconnue

6 : Handle inconnu

Remarques :

·	Le fichier doit avoir été préalablement ouvert ou créé à l'aide d'une fonction Handle, de façon à ce qu'il soit possible d'y accéder à travers son handle.

·	L'heure dans le registre CX présente le format suivant :

Bits 0 - 4 :	Secondes par unités de 2

Bits 5 - 10 :	Minutes

Bits 11 - 15 : 	Heures

·	La date dans le registre DX présente le format suivant :

Bits 0 - 4 :	Jour du mois

Bits 5 - 8 :	Mois

Bits 9 - 15 :	Année (par rapport à 1980)

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Définir un second Handle    Int 21h, Fct 45h    DOS (>= 1.0)

Cette fonction permet de mettre en place un second handle pour un handle spécifié. Ce second handle sera associé au même fichier ou au même périphérique que le premier. Si le premier handle se rapportait à un fichier, le pointeur de fichier de ce handle sera couplé avec le pointeur de fichier du nouveau handle.

Entrée :

AH 	= 45h

BX 	= Handle

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas AX = le nouveau Handle

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

Flag Carry =4 : Pas d'autre handle disponible

Flag Carry =6 : Handle spécifié non ouvert ou qui n'existe pas

Remarques :

·	Cette fonction permet, après qu'un fichier ait été modifié, de faire actualiser l'entrée de ce fichier dans le répertoire sans être obligé de refermer le fichier. Il suffit en effet de réclamer à l'aide de cette fonction un nouveau handle pour le fichier puis de refermer le fichier avec ce handle à l'aide de la fonction 3Eh.

·	Lorsque le pointeur de fichier d'un des deux handles est déplacé du fait de l'appel d'une fonction de lecture ou écriture, le pointeur de fichier de l'autre handle est automatiquement déplacé de la même façon.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Défnir le sous-répertoire en cours    Int 21h, Fct 3Bh    DOS (>= 1.0)

Cette fonction permet d'activer un sous-répertoire sur le périphérique spécifié.

Entrée :

AH 	= 3Bh

DS 	= Adresse de segment du chemin du sous-répertoire

DX 	= Adresse d'offset du chemin du sous-répertoire

Sortie :

Flag Carry =0 : Sous-répertoire indiqué devient le sous-répertoire en cours

Flag Carry =1 : Erreur, dans ce cas

AX = 3 : Chemin non trouvé

Remarques :

·	Le chemin de sous-répertoire transmis est une chaîne ASCII terminée par un caractère de fin (code ASCII 0).

·	Si le chemin de sous-répertoire comporte une désignation de périphérique, l'accès se fera sur le périphérique spécifié, sinon le sous-répertoire actuel sera modifié sur le périphérique actuel.

·	Une erreur peut se produire si un élément du chemin n'existe pas.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Déplacer le pointeur de fichier (handle)    Int 21h, Fct 42h    DOS (>= 1.0)

Cette fonction permet de déplacer le pointeur de fichier d'un fichier déjà ouvert, à l'aide de son handle. On obtient ainsi une possibilité d'accès sélectif puisque les différents enregistrements ne sont plus nécessairement lus de façon séquentielle, c'est-à-dire dans l'ordre dans lequel ils sont disposés. La nouvelle position du pointeur de fichier n'est pas spécifiée de façon absolue mais sous forme d'une distance (offset) par rapport à la position actuelle, par rapport au début du fichier ou encore par rapport à la fin du fichier. Ce déplacement est défini par un nombre 32 bits.

Entrée :

AH 	= 42h

AL 	= Code du déplacement

0 : Le déplacement se rapporte au début du fichier

1 : La distance se rapporte à la position actuelle du pointeur de fichier

2 : Le déplacement se rapporte à la fin du fichier

BX 	= Handle

CX 	= Mot fort du déplacement

DX 	= Mot faible du déplacement

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas

DX = Mot fort du pointeur de fichier

AX = Mot faible du pointeur de fichier

Flag Carry =1 : dans ce cas AX = code d'erreur

1 : Code de déplacement non autorisé

6 : Handle non autorisé ou fichier non ouvert

Remarques :

·	Si vous travaillez avec les codes d'offset 1 et 2, le déplacement spécifié peut aussi être négatif, soit pour ramener le pointeur de fichier en arrière, soit pour le placer avant le début du fichier. Il est ainsi possible de régler le pointeur de fichier avant la fin du fichier. Dans ce cas, une erreur ne sera cependant signalée qu'au cours du prochain accès en lecture ou écriture à ce fichier.

·	Quel que soit le code de déplacement transmis pour appeler la fonction, la position du pointeur de fichier renvoyée après appel de la fonction se rapporte toujours au début du fichier.

·	Cette fonction permet aussi de déterminer la taille d'un fichier si on lui transmet 2 comme code de distance et 0 comme distance. Le pointeur de fichier étant ainsi amené sur le dernier octet du fichier, sa position, qui est renvoyée au programme ayant appelé la fonction, correspondra au nombre d'octets et donc à la taille du fichier.

·	Le contenu des registres BX, CX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Ecrire dans un fichier (Handle)     Int 21h, Fct 40h    DOS (>= 1.0)

Cette fonction permet d'écrire, à l'aide d'un handle, un nombre déterminé de caractères dans un fichier (ou sur un périphérique) préalablement ouvert. Ces caractères sont tirés d'un buffer. L'opération d'écriture commence à la position actuelle du pointeur de fichier.

Entrée :

AH 	= 40h

BX 	= Handle du fichier ou du périphérique

CX 	= Nombre d'octets à écrire

DS 	= Adresse de segment du buffer

DX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas AX = nombre d'octets écrits

Flag Carry =1 : Erreur, dans ce cas AX = code d'erreur

5 : Accès refusé

6 : Handle non autorisé ou fichier non ouvert

Remarques :

·	Cette fonction permet non seulement d'écrire des caractères sur un fichier mais aussi sur un périphérique comme le périphérique de sortie standard (l'écran), qui porte le handle 1.

·	Si le flag Carry est annulé après appel de cette fonction mais que le registre AX contient la valeur 0, cela signifie que le périphérique sur lequel figure le fichier était déjà plein avant même que cette fonction n'ait été appelée.

·	Si le flag Carry est annulé après appel de cette fonction mais que le registre AX contient une valeur inférieure à celle du registre CX avant appel de la fonction, cela signifie que le nombre d'octets voulu n'a pu être écrit parce que le périphérique sur lequel figure le fichier a été rempli auparavant.

·	Après appel de cette fonction, le pointeur de fichier est dirigé sur le premier octet immédiatement à la suite du dernier octet écrit.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Ecrire le prochain enregistrement dans un fichier (FCB)     Int 21h, Fct 15h    DOS (>= 1.0)

Ecrire le prochain enregistrement dans un fichier.

Entrée :

AH 	= 15h

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Enregistrement a été écrit

AL 	= 1 : Support (disquette/disque dur) plein

AL 	= 2 : Débordement de segment

Remarques :

·	Cette fonction ne doit être appelée qu'après que le fichier ait été ouvert à travers le FCB indiqué.

·	L'enregistrement est transféré de la DTA dans le fichier. Si la DTA n'est pas assez grande, il convient de la déplacer auparavant vers un buffer utilisateur à l'aide de la fonction 1Ah.

·	La taille de l'enregistrement, c'est-à-dire le nombre d'octets écrits, est inscrit dans le FCB.

·	L'erreur 2 se produit si la DTA est située à la fin d'un segment et que l'enregistrement à écrire est conduit, de ce fait, à dépasser la limite du segment.

·	Après que l'enregistrement ait été écrit, le pointeur de fichier est dirigé sur le début du prochain enregistrement, de sorte que c'est automatiquement le prochain enregistrement qui sera écrit lors du prochain appel de cette fonction.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Ecrire plusieurs enregistrements (FCB)    Int 21h, Fct 28h    DOS (>= 1.0)

Ecriture de plusieurs enregistrements consécutifs dans un fichier, à partir de l'enregistrement spécifié.

Entrée :

AH 	= 28h

CX 	= Nombre d'enregistrements à écrire

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Enregistrements tous écrits

= 1 : Support (disquette/disque dur) plein

= 2 : Débordement de segment

CX 	= Nombre d'enregistrements écrits

Remarques :

·	Cette fonction ne doit être appelée qu'après que le fichier ait été ouvert à travers le FCB indiqué.

·	L'adresse du premier enregistrement à écrire doit être spécifiée à partir de la cellule de mémoire 21h du FCB.

·	La taille de chaque enregistrement est inscrite dans le FCB.

·	Les enregistrements sont transférés de la DTA dans le fichier. Si celle-ci n'est pas assez grande, il convient de la déplacer auparavant vers un buffer utilisateur à l'aide de la fonction 1Ah.

·	Après appel de cette fonction, le pointeur de fichier est dirigé automatiquement à la suite du dernier enregistrement écrit. Le numéro d'enregistrement est en outre incrémenté à raison du nombre d'enregistrements écrits, de sorte qu'il désigne l'enregistrement suivant le dernier enregistrement écrit.

·	L'erreur 2 se produit si la DTA est située à la fin d'un segment et que l'enregistrement à écrire est conduit, de ce fait, à dépasser la limite du segment.

·	Le contenu des registres AH, BX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Ecrire un nom de fichier dans FCB     Int 21h, Fct 29h    DOS (>= 1.0)

Cette fonction inscrit dans les champs appropriés du FCB un nom de fichier fourni sous forme de chaîne ASCII et qui peut contenir une désignation de périphérique, un nom de fichier et une extension de fichier.

Entrée :

AH 	= 29h

DS 	= Adresse de segment du nom de fichier dans la mémoire

SI 	= Adresse d'offset du nom de fichier dans la mémoire

ES 	= Adresse de segment du FCB

DI	= Adresse d'offset du FCB

AL 	= Paramètres de transmission

Bit 1 = 	1 : La désignation de périphérique dans le FCB ne sera modifiée que si le nom de fichier transmis contient une désignation de périphérique.

0: La désignation de périphérique sera modifiée en tout état de cause. Si le nom de fichier transmis ne comporte pas de désignation de périphérique, la valeur 0 (lecteur actuel) sera inscrite dans le FCB.

Bit 2 =	1 : Le nom de fichier dans le FCB ne sera modifié que si le nom de fichier transmis contient un nom de fichier.

0: Le nom de fichier sera modifié en tout état de cause. Si le nom de fichier transmis ne comporte pas de nom de fichier, le nom de fichier sera rempli d'espaces (code ASCII 32) dans le FCB.

Bit 3 =	1 : L'extension de fichier dans le FCB ne sera modifiée que si le nom de fichier transmis contient une extension de fichier.

0: L'extension de fichier sera modifiée en tout état de cause. Si le nom de fichier transmis ne comporte pas d'extension de fichier, ce champ sera rempli d'espaces (code ASCII 32) dans le FCB.

Tous les autres bits doivent contenir la valeur 0.

Sortie :

AL	= 0 : Le nom de fichier transmis ne comportait pas de jokers

= 1 : Le nom de fichier transmis comportait des jokers

= 255 : La désignation de périphérique spécifiée est incorrecte.

DS	= Adresse de segment du premier caractère après le nom de fichier dans le buffer de nom de fichier spécifié

SI	= Adresse d'offset du premier caractère après le nom de fichier dans le buffer de nom de fichier spécifié

ES	= Adresse de segment du FCB

DI	= Adresse d'offset du FCB

Remarques :

·	Le nom de fichier transmis doit être terminé par un caractère de fin (code ASCII 0).

·	Si le nom de fichier transmis comporte le joker "*", tous les emplacements à partir de la position de "*" seront remplis de jokers "?" dans le champ correspondant du FCB.

·	Le contenu des registres AH, BX, CX, DX, BP, CS, SS et du registre de flags n'est pas modifié par cette fonction.


Ecriture absolue    Int 26h    DOS

Cette interruption permet d'écrire un ou plusieurs secteurs logiques consécutifs sur une disquette ou sur un disque dur. Cette écriture peut accéder à tous les secteurs du support et non pas seulement à la zone de fichiers du DOS au sens strict. Le DOS utilise lui-même cette interruption pour écrire le répertoire racine et la FAT d'un support. Les données sont transférées d'un buffer du programme d'appel vers le support.

Entrée :

AL 	= Désignation de périphérique

CX 	= Nombre de secteurs à écrire

DX 	= Premier secteur à écrire

DS 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0	: Tout va bien

Flag Carry =1	: Erreur, dans ce cas

AX = Code d'erreur

1	Instruction incorrecte

2	Marque d'adresse incorrecte

4	Secteur non trouvé

8	Erreur DMA

16	Erreur CRC

32	Erreur du contrôleur de disque

64	Recherche infructueuse

128	Périphérique ne répond pas

Remarques :

·	Pour la désignation de périphérique, 0 représente le lecteur A, 1 le lecteur B, etc.

·	Après appel de cette fonction, le contenu de tous les registres peut avoir été modifié hormis celui des registres de segment.

·	Après appel de cette interruption, le pointeur de pile n'a pas la même position que lors de l'appel car deux octets qui avaient été placés sur la pile n'en sont pas retirés. Ces octets représentent le registre de flags, qui peut être retiré de la pile à l'aide de l'instruction (langage machine) POPF. Il suffit donc d'ajouter 2 à la valeur du pointeur de pile pour qu'il retrouve sa valeur d'origine. Si cette correction est négligée, la pile risque de croître sans cesse, jusqu'à déborder. C'est la raison pour laquelle cette interruption ne peut malheureusement être appelée à l'aide de fonctions de langages évolués pour appeler des interruptions.


Ecriture sélective (FCB)     Int 21h, Fct 22h    DOS (>= 1.0)

Ecrire un enregistrement déterminé dans le fichier.

Entrée :

AH 	= 22h

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Enregistrement écrit entièrement

AL 	= 1 : Support (disquette/disque dur) plein

AL 	= 2 : Débordement de segment

Remarques :

·	Cette fonction ne doit être appelée qu'après que le fichier ait été ouvert à travers le FCB indiqué.

·	L'adresse de l'enregistrement à écrire doit être spécifiée à partir de la cellule de mémoire 21h du FCB.

·	La taille de l'enregistrement, c'est-à-dire le nombre d'octets écrits, est inscrit dans le FCB.

·	L'enregistrement est transféré de la DTA dans le fichier. Si celle-ci n'est pas assez grande, il convient de la déplacer auparavant vers un buffer utilisateur à l'aide de la fonction 1Ah.

·	Après appel de cette fonction, le pointeur de fichier est dirigé automatiquement sur le début de l'enregistrement à écrire, de sorte qu'un appel consécutif de la fonction d'écriture séquentielle d'un enregistrement écrirait à nouveau le même enregistrement.

·	Le numéro d'enregistrement n'est pas incrémenté après appel de la fonction, de sorte qu'un nouvel appel de cette fonction écrirait le même enregistrement.

·	L'erreur 2 se produit si la DTA est située à la fin d'un segment et que l'enregistrement à écrire est conduit, de ce fait, à dépasser la limite du segment.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Fermer un fichier (FCB)     Int 21h, Fct 10h    DOS (>= 1.0)

Après appel de cette fonction, toutes les données qui figurent encore dans un des buffers internes du DOS sont écrites dans le fichier qui est ensuite refermé. L'entrée du répertoire correspondant à ce fichier est alors actualisée pour tenir compte de la nouvelle taille du fichier ainsi que des date et heure de modification.

Entrée :

AH 	= 10h

DS 	= Adresse de segment du FCB du fichier

DX 	= Adresse d'offset du FCB du fichier

Sortie :

AL 	= 0 : Fichier refermé et entrée du répertoire actualisée

AL 	= 255 : Fichier non trouvé dans le répertoire

Remarques :

·	Seuls peuvent naturellement être refermés des fichiers qui ont été précédemment ouverts.

·	Pour les fichiers sur disquette, il faut absolument s'assurer que la disquette placée dans le lecteur au moment de l'appel de cette fonction est bien la disquette qui contient le fichier. S'il n'en est pas ainsi, une FAT et un répertoire erronés seront écrits sur la disquette, ce qui rendra inutilisables les données qu'elle contenait.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Fermer un fichier (Handle)    Int 21h, Fct 3Eh    DOS (>= 1.0)

Cette fonction permet de fermer un fichier préalablement ouvert. Auparavant, toutefois, toutes les données qui doivent être écrites dans le fichier mais qui figurent encore dans les buffers internes du DOS sont écrites dans le fichier. Si le fichier a été modifié, l'entrée du répertoire correspondant à ce fichier est encore actualisée, c'est-à-dire que la nouvelle taille du fichier y est inscrite ainsi que les date et heure actuelle, en tant que date et heure de la dernière modification.

Entrée :

AH 	= 3Eh

BX 	= Handle à fermer

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas

AX = 6 : Handle non autorisé ou fichier correspondant non ouvert

Remarques :

·	Il faut veiller à ne pas appeler par mégarde cette fonction avec le numéro d'un des handles prédéfinis (0 à 4) car vous risqueriez ainsi de fermer par exemple le périphérique d'entrée ou le périphérique de sortie standard, la conséquence étant alors que vous ne pourriez plus recevoir de caractères du clavier ou que vous ne pourriez plus en afficher sur l'écran.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Fct OPEN étendue     Int 21h, Fct 6Ch    DOS (>= 4.0)

A partir de la version 4.0, cette fonction permet de créer un fichier lors de l'appel OPEN ou d'écraser un fichier existant. La fonction augmente ainsi les possibilités normales de la fonction OPEN 3Dh.

Entrée :

AH 	= 6Ch

AL	= 0

BX 	= Mode d'accès

CX 	= Attribut de fichier

DX 	= Réaction DOS

DS:SI 	= Pointeur FAR sur le buffer contenant le nom de fichier.

Sortie :

Flag Carry = 0 : Tout va bien, dans ce cas

AX = Handle du fichier

CX = Statut

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

1 : Logiciel de partage de fichier absent

2 : Fichier non trouvé

3 : Chemin non trouvé ou fichier inexistant

4 : Plus de handle disponible

5 : Accès refusé

12 : Mode d'accès interdit

Remarques :

·	Le nom de fichier doit être une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Outre la désignation du périphérique, il doit contenir la désignation complète du chemin et un nom de fichier, mais pas de jokers. Si la désignation de périphérique ou de chemin fait défaut, l'accès portera sur le périphérique ou le répertoire en cours.

·	Le mode d'accès se construit comme suit :

Bit 0-2 : Autorisation de lecture/écriture

000b 	= 	Le fichier est destiné uniquement à la lecture

001b 	= 	Le fichier est destiné uniquement à l'écriture

010b 	= 	Le fichier est destiné à la lecture et l'écriture

Bit 3 : 0b

Bit 4-6 : Mode de partage de fichier

000b 	= 	Seul le programme en cours peut accéder au fichier (mode de compatibilité)

001b 	= 	Seul le programme en cours peut accéder au fichier

010b 	= 	Un autre programme peut lire le fichier mais ne peut pas y écrire

011b 	= 	Un autre programme peut écrire dans le fichier mais ne peut pas le lire

100b 	= 	Un autre programme peut écrire dans le fichier et le lire

Bit 7 : Flag Handle

0 	= 	Le programme enfant du programme en cours peut également accéder au handle de ce fichier

1 	= 	Seul le programme en cours peut accéder au handle de ce fichier

Bit 8-12 : 0b

Bit 13:0 	= 	En cas d'erreur grave, appeler l'interruption 24h

1 	= 	En cas d'erreur grave, retourner le code d'erreur correspondant dans AX mais ne pas appeler l'interruption 24h

Bit 14:1 	= 	Lors de tout accès en écriture sur le fichier, adapter immédiatement l'entrée du répertoire

Bit 15 : 0b

·	Avant l'appel de la fonction, l'attribut de fichier du registre CX peut être chargé avec les attributs suivants.

Bit 0 = 1 : 	Le fichier peut uniquement être lu (Read-Only)

Bit 1 = 1 : 	Le fichier est protégé (non affiché par DIR)

Bit 2 = 1 : 	C'est un fichier système

Bit 5 = 1 : 	Fichier modifié depuis la dernière sauvegarde

Bit 6-15 : 	0b

·	Lorsque le fichier à ouvrir n'existe pas encore ou existe déjà, la réaction de la fonction apparaît dans les deux Nibles du registre DX. Les bits 0 à 3 sont réservés à la réaction lorsque le fichier n'existe pas encore. Dans ce cas, les valeurs prennent la signification suivante :

0000b = Terminer la fonction avec un code d'erreur

0001b = Créer le fichier

·	Les bits 4 à 7 signalent la réaction lorsque l'accès porte sur un fichier existant. Les valeurs signifient alors :

0000b = Terminer la fonction avec un code d'erreur

0001b = Ouvrir le fichier existant

·	Sous DOS 4.0 également, la fonction 3Dh peut être naturellement utilisée pour ouvrir un fichier.

·	Si l'appel de la fonction se déroule correctement, on peut utiliser le handle transmis pour appeler toutes les autres fonctions handle. Le registre CX contient alors un statut de la fonction informant sur les actions de la fonction. Dans ce cas :

0 = Fichier ouvert

1 = Nouveau fichier créé ou ouvert

2 = Fichier existant écrasé ou ouvert

·	Le pointeur de fichier est placé sur le premier octet du fichier.

·	Dans la version 4.0 également, le mode de partage de fichier dans les bits 4 à 6 du mode d'accès n'est intéressant que si le fichier se trouve sur une mémoire de masse faisant partie d'un réseau. Dans un tel cas, ces trois bits déterminent si d'autres programmes du réseau peuvent accéder à ce fichier lors de son ouverture et précisent les droits d'accès de ces programmes. Si ce bit possède la valeur 0, DOS traite ce fichier dans le Compatibility-Mode où l'existence d'un réseau est ignorée par rapport à ce fichier. Ainsi, seul le programme en cours peut accéder effectivement à ce fichier.

·	L'erreur 12 ne survient que sous la version DOS 3 et uniquement à l'intérieur d'un réseau lorsque le fichier est déjà ouvert par un autre programme et qu'il a été confirmé qu'aucun autre programme ne peut momentanément y accéder.

·	Le contenu des registres BX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Lecture absolue    Int 25h    DOS

Cette interruption permet de lire un ou plusieurs secteurs logiques consécutifs sur une disquette ou sur un disque dur. Cette lecture peut accéder à tous les secteurs du support et non pas seulement à la zone de fichiers du DOS au sens strict. Le DOS utilise lui-même cette interruption pour lire le répertoire racine et la FAT d'un support. Les données sont transférées du support dans un buffer du programme d'appel.

Entrée :

AL 	= Désignation de périphérique

CX 	= Nombre de secteurs à lire

DX 	= Premier secteur à lire

DS 	= Adresse de segment du buffer

BX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas

AX = Code d'erreur

1	Instruction incorrecte

2	Marque d'adresse incorrecte

4	Secteur non trouvé

8	Erreur DMA

16	Erreur CRC

32	Erreur du contrôleur de disque

64	Recherche infructueuse

128	Périphérique ne répond pas

Remarques :

·	Pour la désignation de périphérique, 0 représente le lecteur A, 1 le lecteur B, etc.

·	Après appel de cette fonction, le contenu de tous les registres peut avoir été modifié hormis celui des registres de segment.

·	Après appel de cette interruption, le pointeur de pile n'a pas la même position que lors de l'appel car deux octets qui avaient été placés sur la pile n'en sont pas retirés. Ces octets représentent le registre de flags, qui peut être retiré de la pile à l'aide de l'instruction (langage machine) POPF. Il suffit donc d'ajouter 2 à la valeur du pointeur de pile pour qu'il retrouve sa valeur d'origine. Si cette correction est négligée, la pile risque de croître sans cesse, jusqu'à déborder. C'est la raison pour laquelle cette interruption ne peut malheureusement être appelée à l'aide de fonctions de langages évolués pour appeler des interruptions.


Lecture sélective (FCB)    Int 21h, Fct 21h    DOS (>= 1.0)

Lire un enregistrement déterminé d'un fichier en le transférant dans la DTA.

Entrée :

AH 	= 21h

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Enregistrement lu complètement

AL 	= 1 : Fin du fichier atteinte, rien n'a été lu

AL 	= 2 : Débordement de segment

AL 	= 3 : Enregistrement lu partiellement

Remarques :

·	Cette fonction ne doit être appelée qu'après que le fichier ait été ouvert à travers le FCB indiqué.

·	L'enregistrement lu est celui dont l'adresse est spécifiée dans le FCB à partir de la cellule 21h.

·	L'enregistrement est transféré dans la DTA. Si celle-ci n'est pas assez grande, il convient de la déplacer auparavant vers un buffer utilisateur à l'aide de la fonction 1Ah.

·	La taille de l'enregistrement, c'est-à-dire le nombre d'octets lus, est inscrit dans le FCB.

·	Après appel de cette fonction, le pointeur de fichier est dirigé automatiquement sur le début de l'enregistrement à lire, de sorte qu'un appel consécutif de la fonction de lecture séquentielle d'un enregistrement lirait à nouveau le même enregistrement.

·	Le numéro d'enregistrement n'est pas incrémenté après appel de la fonction, de sorte qu'un nouvel appel de cette fonction lirait le même enregistrement.

·	L'erreur 2 se produit si la DTA est située à la fin d'un segment et que l'enregistrement lu est conduit, de ce fait, à dépasser la limite du segment.

·	L'erreur 3 se produit lorsque la fin d'un fichier ne comporte pas un enregistrement complet mais seulement un enregistrement partiel. Dans ce cas, l'enregistrement partiel est lu mais comblé de zéros jusqu'à la longueur prescrite.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Libérer le buffer de fichier     Int 21h, Fct 68h    DOS (>= 3.3)

En raison de l'appel de cette fonction, DOS est obligé d'inscrire toutes les données non encore écrites dans un fichier mais se trouvant encore dans les buffers de fichier internes dans le fichier spécifié. Cela empêche par exemple de perdre les données à cause d'une panne d'électricité.

Entrée :

AH 	= 68h

BX 	= Handle du fichier adressé

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas AX = Code d'erreur

Remarques :

·	Avant que cette fonction ne soit introduite dans la version DOS 3.3, il existait deux méthodes pour obliger DOS à libérer les buffers de fichier internes dans le fichier concerné. A certains égards, elles ont perdu leur intérêt face à la fonction décrite ici et ne sont d'ailleurs plus utilisées surtout si on exécute un programme sous la version DOS 3.3 ou supérieure.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Libérer une zone verrouillée dans un fichier    Int 21h, Fct 5Ch, Sous-Fct 01h    DOS (>= 3.0)

Cette fonction libère une zone préalablement verrouillée par a sous-fonction 00h à l'intérieur d'un fichier.

Entrée :

AH 	= 5Ch

AL 	= 01h

BX 	= Handle du fichier

CX 	= Mot de poids fort de l'adresse du premier octet à libérer à l'intérieur du fichier

DX 	= Mot de poids faible de l'adresse du premier octet à libérer

SI 	= Mot de poids fort du nombre d'octets à libérer

DI 	= Mot de poids faible du nombre d'octets à libérer

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas AX = Code d'erreur

1 : Logiciel réseau non activé

6 : Handle incorrect

33 : La zone spécifiée n'est pas verrouillée

Remarques :

·	Cette fonction ne peut être appelée qu'après avoir appelé la commande SHARE ou le logiciel réseau.

·	L'offset de début de la zone à verrouiller ainsi que sa longueur doivent être indiqués sous forme de LONGINTS positifs composés respectivement de 2 mots et 4 octets. Ils doivent correspondre exactement aux indications données lors d'un précédent appel de la sous-fonction 00h.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Lire l'adresse de la DTA     Int 21h, Fct 2Fh    DOS (>= 1.0)

Cette fonction fournit en résultat l'adresse de la zone de transfert disque (DTA) qui sert de buffer de données pour tous les accès de fichier soutenus par FCB.

Entrée :

AH 	= 2Fh

Sortie :

ES 	= Adresse de segment de la DTA

BX 	= Adresse d'offset de la DTA

Remarques :

·	Cette fonction permet bien de déterminer l'adresse de la DTA mais cela ne permet nullement d'en déduire la taille de la DTA.

·	Immédiatement après le lancement d'un programme, la DTA commence à la cellule de mémoire 128 du PSP et présente une longueur de 128 octets.

·	Le contenu des registres AX, CX, DX, SI, DI, BP, CS, DS, SS et du registre de flags n'est pas modifié par cette fonction.


Lire l'attribut d'un fichier    Int 21h, Fct 43h, Sous-Fct 0    DOS (>= 1.0)

Cette fonction permet de lire l'attribut d'un fichier quelconque.

Entrée :

AH 	= 43h

AL 	= 0

DS 	= Adresse de segment du nom de fichier

DX 	= Adresse d'offset du nom de fichier

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas CX = Attribut du fichier

Bit 0 = 1 : 	Fichier doit seulement être lu mais on ne peut rien y écrire

Bit 1 = 1 : 	Fichier est caché (ne sera pas affiché par DIR)

Bit 2 = 1 : 	Fichier est un fichier système

Bit 5 = 1 : 	Fichier a été modifié depuis le dernier archivage

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

2 : Fichier non trouvé

3 : Chemin non trouvé

Remarques :

·	Le nom de fichier doit être fourni sous forme d'une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Il peut comporter une désignation de périphérique, une spécification de chemin complète ainsi qu'un nom de fichier proprement dit, mais pas de jokers. Si la désignation de périphérique ou la spécification de chemin sont omises, l'accès se fera sur le périphérique actuel ou sur le répertoire actuel.

·	Une erreur apparaîtra si un élément de la spécification de chemin ou le fichier lui-même n'existe pas.

·	Le contenu des registres BX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Lire l'espace disque disponible    Int 21h, Fct 36h    DOS (>= 1.0)

Cette fonction renvoie des informations sur le périphérique spécifié (c'est-à-dire le driver de bloc spécifié) qui permettent de calculer l'espace disque encore libre.

Entrée :

AH 	= 36h

DL 	= Code de périphérique

Sortie :

AX 	= 65535 : Périphérique absent, sinon nombre de secteurs par cluster

BX 	= Nombre de clusters libres

CX 	= Nombre d'octets par secteur

DX 	= Nombre total de clusters du périphérique

Remarques :

·	Pour le code de périphérique transmis, 0 représente le lecteur actuel, 1 le lecteur A, 2 le lecteur B, etc.

·	La mémoire encore libre sur le support se calcule en multipliant le nombre d'octets par secteur par le nombre de secteurs par cluster puis par le nombre de clusters libres.

·	Le contenu des registres SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Lire la désignation de périphérique du lecteur actuel    Int 21h, Fct 19h    DOS (>= 1.0)

L'appel de cette fonction renvoie la désignation de périphérique du lecteur actuel.

Entrée :

AH 	= 19h

Sortie :

AL 	= Désignation de périphérique

Remarques :

·	Alors que pour d'autres fonctions DOS la désignation de périphérique 0 correspond au périphérique actuel et que c'est le code 1 qui désigne le lecteur A, c'est ici le code 0 qui désigne le lecteur A, le code 1 désignant le lecteur B, etc..

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Lire la première entrée du répertoire     Int 21h, Fct 4Eh    DOS (>= 1.0)

Cette fonction attend le nom d'un fichier qu'il s'agit de rechercher. Le fichier peut être doté d'un attribut déterminé, de sorte que des sous-répertoires ou des noms de volumes peuvent également être recherchés.

Entrée :

AH 	= 4Eh

CX 	= Attribut du fichier

DS 	= Adresse de segment du nom de fichier

DX 	= Adresse d'offset du nom de fichier

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur,

dans ce cas AX = Code d'erreur

2 : Chemin non trouvé

18 : Aucun fichier trouvé avec l'attribut spécifié

Remarques :

·	Le nom du fichier doit être fourni sous forme d'une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Ce nom de fichier peut comporter une désignation de périphérique, une spécification de chemin complète, le nom de fichier proprement dit et des jokers. Si la désignation de périphérique ou la spécification de chemin sont omises, l'accès se fera sur le périphérique actuel ou sur le répertoire actuel.

·	L'attribut 0 permet de rechercher les fichiers normaux. Si différents bits sont fixés dans le champ d'attribut, seront recherchés non seulement les fichiers correspondants mais aussi tous les fichiers normaux.

·	Si un fichier spécifié a pu être trouvé, les 43 premiers octets de la DTA fournissent des informations sur ce fichier :

Octets 0 - 20 :	Réservés

Octet 21 :	Attribut du fichier

Octets 22 - 23 : 	Heure de la dernière modification du fichier

Octets 24 - 25 : 	Date de la dernière modification du fichier

Octets 26 - 27 : 	Mot faible de la taille du fichier

Octets 28 - 29 : 	Mot fort de la taille du fichier

Octets 30 - 42 : 	Nom de fichier et extension, sous forme d'une chaîne ASCII terminée par un caractère de fin (code ASCII 0).

·	Cette fonction ne doit être employée que pour rechercher la première apparition d'un fichier. Lorsqu'il s'agit de rechercher un groupe de fichiers (donc lorsque le nom de fichier contient des jokers), c'est la fonction 4Fh qu'il faut appeler pour poursuivre la recherche.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Lire la prochaine entrée du répertoire     Int 21h, Fct 4Fh    DOS (>= 1.0)

Après appel réussi de la fonction 4Eh ou après d'autres appels de cette fonction, cette dernière permet de rechercher d'autres fichiers correspondant au nom de fichier spécifié.

Entrée :

AH 	= 4Fh

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

AX = 18 : Plus trouvé de fichier avec l'attribut spécifié

Remarques :

·	Si un fichier spécifié a pu être trouvé, les 43 premiers octets de la DTA fournissent des informations sur ce fichier :

Octets 0 - 20 :	Réservés

Octet 21 :	Attribut du fichier

Octets 22 - 23 : 	Heure de la dernière modification du fichier

Octets 24 - 25 : 	Date de la dernière modification du fichier

Octets 26 - 27 : 	Mot faible de la taille du fichier

Octets 28 - 29 : 	Mot fort de la taille du fichier

Octets 30 - 42 : 	Nom de fichier et extension, sous forme d'une chaîne ASCII terminée par un caractère de fin (code ASCII 0).

·	Cette fonction ne doit être appelée qu'après que la fonction 4Eh ait été appelée en premier lieu.

·	Cette fonction ne doit être appelée que si le contenu de la DTA n'a pas été modifié depuis le dernier appel de la fonction 4Eh ou 4Fh car la DTA contient des informations essentielles pour poursuivre la recherche de fichiers.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Lire la taille du fichier (FCB)     Int 21h, Fct 23h    DOS (>= 1.0)

Cette fonction permet de connaître le nombre d'enregistrements et donc, de ce fait, la taille d'un fichier.

Entrée :

AH 	= 23h

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Fichier trouvé, dans ce cas le champ d'enregistrement à partir de l'adresse 21h du FCB contient le nombre d'enregistrements dans le fichier.

AL 	= 255 : Fichier non trouvé

Remarques :

·	Le FCB transmis contient la désignation de périphérique ainsi que le nom et l'extension du fichier dont il s'agit de déterminer la taille.

·	Contrairement à tous les autres accès de fichier soutenus par FCB, la taille d'enregistrement doit être inscrite dans le FCB avant appel de cette fonction.

·	Si la taille d'enregistrement spécifiée est 1, cette fonction permet d'obtenir directement et précisément la taille du fichier en octets.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Lire le flag Verify    Int 21h, Fct 54h    DOS (>= 1.0)

Le flag Verify définit si les données écrites sur un support tel que le disque dur ou la disquette doivent être contrôlées après une opération d'écriture pour vérifier que la transmission a été correctement effectuée. Cette fonction permet de lire l'état de ce flag qui s'applique à tous les programmes et non pas seulement au programme actuel.

Entrée :

AH 	= 54h

Sortie :

AL 	= Flag Verify

0 : Verify désactivé

1 : Verify activé

Remarques :

·	Le contenu du flag Verify peut être fixé à l'aide de la fonction 2Eh.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Lire le pointeur BPD pour le lecteur en cours    Int 21h, Fct 1Fh    DOS (>= 1.0)

A travers l'appel de cette fonction, DOS place un pointeur sur le bloc de paramètres DOS (BPD) du lecteur en cours. Le BPD décrit la structure logique et physique du lecteur.

Entrée :

AH 	= 1Fh

Sortie :

AL 	= 0 : Pas d'erreur, dans ce cas

DS:BX = Pointeur FAR sur BPD

Remarques :

·	S'il s'agit d'un changement de disquette effectué sur le périphérique en cours, DOS s'adresse d'abord au lecteur pour compléter le BPD avec les données concernant le lecteur et le format de la disquette. En revanche, pour le disque dur, ces informations se trouvent déjà dans la mémoire si bien qu'il n'est pas nécessaire d'effectuer un accès au périphérique.

·	La structure du bloc de paramètres DOS varie en fonction des versions DOS.

·	Le contenu des registres AH, CX, DX, SI, DI, BP, CS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Lire le prochain enregistrement d'un fichier (FCB)     Int 21h, Fct 14h    DOS (>= 1.0)

Lire le prochain enregistrement d'un fichier.

Entrée :

AH 	= 14h

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Enregistrement a été lu

AL 	= 1 : Fin du fichier atteinte

AL 	= 2 : Débordement de segment

AL 	= 3 : Lu enregistrement partiel

Remarques :

·	Cette fonction ne doit être appelée qu'après que le fichier ait été ouvert à travers le FCB indiqué.

·	L'enregistrement est transféré dans la DTA. Si celle-ci n'est pas assez grande, il convient de la déplacer auparavant vers un buffer utilisateur à l'aide de la fonction 1Ah.

·	La taille de l'enregistrement, c'est-à-dire le nombre d'octets lus, est inscrit dans le FCB.

·	L'erreur 2 se produit si la DTA est située à la fin d'un segment et que l'enregistrement lu est conduit, de ce fait, à dépasser la limite du segment.

·	L'erreur 3 se produit lorsque la fin d'un fichier ne comporte pas un enregistrement complet mais seulement un enregistrement partiel. Dans ce cas, l'enregistrement partiel est lu mais comblé de zéros jusqu'à la longueur prescrite.

·	Après que l'enregistrement ait été lu, le pointeur de fichier est dirigé sur le début du prochain enregistrement, de sorte que c'est automatiquement le prochain enregistrement qui sera lu lors du prochain appel de cette fonction.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Lire le répertoire actuel     Int 21h, Fct 47h    DOS (>= 1.0)

Cette fonction inscrit dans un buffer la spécification de chemin complète du répertoire actuel sur le lecteur spécifié.

Entrée :

AH 	= 47h

DL 	= Désignation de périphérique

DS 	= Adresse de segment du buffer

SI 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas

AX = 15 : Périphérique inconnu

Remarques :

·	Pour la désignation de périphérique, 0 représente le lecteur actuel, 1 le lecteur A, 2 le lecteur B, etc.

·	La spécification de chemin placée dans le buffer est terminée par un caractère de fin (code ASCII 0). Elle n'est précédée d'aucune désignation de périphérique ni d'un '\' pour le répertoire racine. Si le répertoire racine est le répertoire actuel, le caractère de fin se trouvera donc être le premier caractère du buffer.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Lire les date et heure de la dernière modification d'un fichier    Int 21h, Fct 57h, Sous-Fct 00h    DOS(>= 1.0)

Cette fonction permet de déterminer la date et l'heure de création ou du moins de la dernière modification d'un fichier.

Entrée :

AH 	= 57h

AL 	= 0

BX 	= Handle

Sortie :

Flag Carry	=0 : Tout va bien, dans ce cas

CX	= Heure

DX	= Date

Flag Carry	=1: Erreur, dans ce cas AX = Code d'erreur

1 : Fonction inconnue

6 : Handle inconnu

Remarques :

·	Le fichier doit avoir été préalablement ouvert ou créé à l'aide d'une fonction Handle, de façon à ce qu'il soit possible d'y accéder à travers son handle.

·	L'heure dans le registre CX présente le format suivant :

Bits 0 - 4 :	Secondes par unités de 2

Bits 5 - 10 :	Minutes

Bits 11 - 15 : 	Heures

·	La date dans le registre DX présente le format suivant :

Bits 0 - 4 :	Jour du mois

Bits 5 - 8 :	Mois

Bits 9 - 15 :	Année (par rapport à 1980)

·	Le contenu des registres BX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Lire les informations sur le lecteur actuel     Int 21h, Fct 1Bh    DOS (>= 1.0)

Cette fonction permet d'obtenir un certain nombre d'informations sur le format du lecteur actuel.

Entrée :

AH 	= 1Bh

Sortie :

AL 	= Nombre de secteurs par cluster

DS 	= Adresse de segment du descripteur de support

BX 	= Adresse d'offset du descripteur de support

DX 	= Nombre de clusters

Remarques :

·	Pour le descripteur de support peuvent être renvoyés les codes suivants :

F0h :	Lecteur de disquette : deux faces, 80 pistes, 18 secteurs par piste (3 pouces 1/2)

F8h :	Disque dur

F9h :	Lecteur de disquette : deux faces, 15 secteurs par piste (5 pouces 1/4, AT seulement) ou deux faces, 80 pistes, 9 secteurs par piste (3 pouces 1/2)

FAh :	Lecteur de disquette : une face, 80 pistes, 8 secteurs par piste (5 ou 3 pouces 1/2)

FBh :	Lecteur de disquette : deux faces, 80 pistes, 8 secteurs par piste (5 ou 3 pouces 1/2)

FCh :	Lecteur de disquette : une face, 40 pistes, 9 secteurs par piste (5 pouces 1/4)

FDh :	Lecteur de disquette : deux faces, 40 pistes, 9 secteurs par piste (5 pouces 1/4)

FEh :	Lecteur de disquette : une face, 40 pistes, 8 secteurs par piste (5 pouces 1/4)

FFh :	Lecteur de disquette : deux faces, 40 pistes, 8 secteurs par piste (5 pouces 1/4)

·	La fonction 1Ch vous permet d'obtenir des informations sur n'importe quel lecteur.

·	Le contenu des registres AH, SI, DI, BP, CS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Lire les informations sur un lecteur quelconque     Int 21h, Fct 1Ch    DOS (>= 1.0)

Cette fonction permet d'obtenir un certain nombre d'informations sur le format du lecteur spécifié.

Entrée :

AH 	= 1Ch

DL 	= Désignation de périphérique

Sortie :

AL 	= Nombre de secteurs par cluster

DS 	= Adresse de segment du descripteur de support

BX 	= Adresse d'offset du descripteur de support

DX 	= Nombre de clusters

Remarques :

·	Pour la désignation de périphérique, 0 représente le lecteur actuel, 1 le lecteur A, 2 le lecteur B, etc.

·	                                                                                                                                                                                                         Pour le descripteur de support, les codes suivants peuvent être renvoyés :

F0h :	Lecteur de disquette : deux faces, 80 pistes, 18 secteurs par piste (3 pouces 1/2)

F8h :	Disque dur

F9h :	Lecteur de disquette : deux faces, 15 secteurs par piste (5 pouces, AT seulement) ou deux 	faces, 80 pistes, 9 secteurs par piste (3 pouces 1/2)

FAh :	Lecteur de disquette : une face, 80 pistes, 8 secteurs par piste (5 ou 3 pouces 1/2)

FBh :	Lecteur de disquette : deux faces, 80 pistes, 8 secteurs par piste (5 ou 3 pouces 1/2)

FCh :	Lecteur de disquette : une face, 40 pistes, 9 secteurs par piste (5 pouces 1/4)

FDh :	Lecteur de disquette : deux faces, 40 pistes, 9 secteurs par piste (5 pouces 1/4)

FEh :	Lecteur de disquette : une face, 40 pistes, 8 secteurs par piste (5 pouces 1/4)

FFh :	Lecteur de disquette : deux faces, 40 pistes, 8 secteurs par piste (5 pouces 1/4)

·	Le contenu des registres AH, SI, DI, BP, CS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Lire plusieurs enregistrements (FCB)    Int 21h, Fct 27h    DOS (>= 1.0)

Lecture de plusieurs enregistrements consécutifs du fichier, à partir de l'enregistrement spécifié.

Entrée :

AH 	= 27h

CX 	= Nombre d'enregistrements à lire

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Enregistrements tous lus

= 1 : Fin du fichier atteinte, pas de lecture

= 2 : Débordement de segment

= 3 : Enregistrements lus partiellement

CX 	= Nombre d'enregistrements lus

Remarques :

·	Cette fonction ne doit être appelée qu'après que le fichier ait été ouvert à travers le FCB indiqué.

·	Le premier enregistrement lu est celui dont l'adresse est spécifiée à partir de la cellule de mémoire 21h du FCB.

·	Les enregistrements sont transférés dans la DTA. Si celle-ci n'est pas assez grande, il convient de la déplacer auparavant vers un buffer utilisateur à l'aide de la fonction 1Ah.

·	La taille de chaque enregistrement est inscrite dans le FCB.

·	Après appel de cette fonction, le pointeur de fichier est dirigé automatiquement à la suite du dernier enregistrement lu. Le numéro d'enregistrement est en outre incrémenté à raison du nombre d'enregistrements lus, de sorte qu'il désigne l'enregistrement suivant le dernier enregistrement lu.

·	L'erreur 2 se produit si la DTA est située à la fin d'un segment et que l'enregistrement lu est conduit, de ce fait, à dépasser la limite du segment.

·	L'erreur 3 se produit lorsque la fin d'un fichier ne comporte pas un enregistrement complet mais seulement un enregistrement partiel. Dans ce cas, l'enregistrement partiel est lu mais comblé de zéros jusqu'à la longueur prescrite.

·	Le contenu des registres AH, BX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Lire un fichier (Handle)    Int 21h, Fct 3Fh    DOS (>= 1.0)

Cette fonction permet de lire, à l'aide d'un handle, un nombre déterminé de caractères dans un fichier (ou sur un périphérique) préalablement ouvert. Ces caractères sont transférés dans un buffer. L'opération de lecture commence sur la position actuelle du pointeur de fichier.

Entrée :

AH 	= 3Fh

BX 	= Handle du fichier ou du périphérique

CX 	= Nombre d'octets à lire

DS 	= Adresse de segment du buffer

DX 	= Adresse d'offset du buffer

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas AX = nombre d'octets lus

Flag Carry =1 : Erreur, dans ce cas AX = code d'erreur

5 : Accès refusé

6 : Handle non autorisé ou fichier non ouvert

Remarques :

·	Cette fonction permet non seulement de lire des caractères sur un fichier mais aussi sur un périphérique comme le périphérique d'entrée standard (le clavier), qui porte le handle 0.

·	Si le flag Carry est annulé après appel de cette fonction mais que le registre AX contient la valeur 0, cela signifie que le pointeur de fichier se trouvait déjà sur la fin du fichier avant même que cette fonction n'ait été appelée. Dans ce cas, aucune donnée n'a pu être lue.

·	Si le flag Carry est annulé après appel de cette fonction mais que le registre AX contient une valeur inférieure à celle du registre CX avant appel de la fonction, cela signifie que le nombre d'octets voulu n'a pu être lu parce que la fin du fichier a été atteinte auparavant.

·	Après appel de cette fonction, le pointeur de fichier est dirigé sur le premier octet immédiatement à la suite du dernier octet lu.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Ouvrir un fichier (FCB)     Int 21h, Fct 0Fh    DOS (>= 1.0)

Cette fonction permet d'ouvrir un fichier (s'il existe). Après exécution réussie de cette fonction, le fichier peut alors être lu ou écrit.

Entrée :

AH 	= 0Fh

DS 	= Adresse de segment du FCB du fichier

DX 	= Adresse d'offset du FCB du fichier

Sortie :

AL 	= 0 : Fichier trouvé et ouvert

AL 	= 255 : Fichier non trouvé

Remarques :

·	Des FCB normaux ainsi que des FCB étendus sont utilisables.

·	Si le fichier a été trouvé, le DOS inscrit dans le FCB la taille du fichier, la date et l'heure de sa création ou de sa dernière modification.

·	Le DOS fixe la longueur d'enregistrement sur 128 octets. Cette longueur d'enregistrement peut être modifiée dans le FCB mais cela ne doit être fait qu'une fois le fichier ouvert. Pour travailler avec une longueur d'enregistrement supérieure, il est en outre nécessaire de déplacer la DTA car la DTA prédéfinie a une taille de 128 octets seulement.

·	Pour effectuer un accès sélectif au fichier, il convient de définir le champ approprié du FCB après ouverture réussie du fichier.

·	Le pointeur de fichier est dirigé sur le premier octet du fichier après ouverture de celui-ci.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Ouvrir un fichier (Handle)    Int 21h, Fct 3Dh    DOS (>= 1.0)

Cette fonction permet d'ouvrir un fichier déjà existant pour pouvoir y accéder à l'aide des autres fonctions.

Entrée :

AH 	= 3Dh

AL 	= Mode d'accès

Bits 0 - 3 : Autorisation de lecture/écriture

0000(b) = 	Fichier peut seulement être lu

0001(b) = 	Fichier peut seulement être écrit

0010(b) = 	Fichier peut être lu ou écrit

Bits 4 - 6 : Mode de partage

000(b) = 	seul le programme actuel peut accéder au fichier (mode FCB)

001(b) = 	seul le programme actuel peut accéder au fichier

010(b) = 	un autre programme peut lire le fichier mais non y écrire

011(b) = 	un autre programme peut écrire dans le fichier mais non le lire

100(b) = 	un autre programme peut lire et écrire le fichier

Bit 7 : Flag Handle

0 = 	le programme-enfant du programme actuel peut accéder au handle de ce fichier

1 = 	seul le programme actuel peut accéder au handle de ce fichier

DS 	= Adresse de segment du nom de fichier

DX 	= Adresse d'offset du nom de fichier

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas AX = Handle du fichier

Flag Carry =1 : Erreur, dans ce cas AX = code d'erreur

1 : Pas de logiciel de gestion de partage (par ex SHARE)

2 : Fichier non trouvé

3 : Chemin non trouvé ou fichier n'existe pas

4 : Plus de handle libre

5 : Accès refusé

12 : Mode d'accès non autorisé

Remarques :

·	Le nom de fichier doit être fourni sous forme d'une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Ce nom de fichier peut comporter une désignation de périphérique, une désignation de chemin complète et un nom de fichier proprement dit mais il ne doit pas contenir de jokers. Si la désignation de périphérique ou la désignation de chemin sont omises, l'accès se fera sur le périphérique actuel ou sur le répertoire actuel.

·	Si l'appel de la fonction s'est conclu sans problème, toutes les autres fonctions handle pourront être appelées à l'aide du handle renvoyé.

·	Le pointeur de fichier est dirigé sur le premier octet du fichier.

·	Sous la version 2 du DOS, seuls les bits 0 à 2 du mode d'accès sont significatifs. Il convient de régler tous les autres bits sur 0 pour garantir une bonne exécution de l'appel de fonction même sous la version 3.

·	Le mode de partage des bits 4 à 6 n'a d'intérêt, même sous la version 3 du DOS, qu'à condition que le fichier figure sur une mémoire de masse faisant partie d'un réseau. Dans ce cas, ces 3 bits définissent si, et si oui dans quelles conditions, d'autres programmes, tournant sur d'autres PC du réseau, pourront accéder au fichier pendant qu'il sera ouvert à la suite de cet appel de fonction.

·	L'erreur 12 ne peut apparaître que sous la version 3 du DOS, et uniquement à l'intérieur d'un réseau, si le fichier a déjà été ouvert par un autre programme et s'il a été décidé qu'aucun autre programme ne peut y accéder pour le moment.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Placer un pointeur sur le BPD d'un lecteur quelconque    Int 21h, Fct 32h    DOS (>= 1.0)

Cette fonction permet de placer un pointeur sur le bloc de paramètres DOS (BPD) d'un lecteur quelconque.

Entrée :

AH 	= 32h

DL 	= code de lecteur (0 = actuel, 1 = A, 2 = B, etc.)

Sortie :

Flag Carry = 1 : Erreur

0 : Tout va bien, dans ce cas

DS:BX = Pointeur FAR sur le BPD

Remarques :

·	S'il s'agit d'un changement de disquette effectué sur le périphérique spécifié, DOS s'adresse d'abord au lecteur pour compléter le BPD avec les données concernant le lecteur et le format. En revanche, s'il s'agit de disques durs, ces informations se trouvent déjà dans la mémoire si bien qu'il n'est pas nécessaire d'accéder à un périphérique.

·	Lors de l'appel de cette fonction, une erreur ne peut survenir que si un code de lecteur erroné a été spécifié. Dans ce cas, le code d'erreur 15 sera retourné dans le registre AL.

·	La structure du bloc de paramètres DOS varie en fonction des diverses versions DOS.

·	Le contenu des registres AH, CX, DX, SI, DI, BP, CS, SS et ES n'a pas été modifié par cette fonction.


Protéger une zone de fichier contre l'accès     Int 21h, Fct 5Ch, Sous-Fct 00h    DOS (>= 3.0)

L'accès des différentes zones d'un fichier par d'autres programmes doit être interdit en particulier dans les réseaux. Cette fonction aide à assurer la protection contre d'éventuelles modifications de ces zones.

Entrée :

AH 	= 5Ch

AL 	= 00h

BX 	= Handle du fichier

CX 	= Mot de poids fort de l'adresse du premier octet à l'intérieur du fichier à verrouiller

DX 	= Mot de poids faible de l'adresse du premier octet à verrouiller

SI 	= Mot de poids fort du nombre d'octets à verrouiller

DI 	= Mot de poids faible du nombre d'octets à verrouiller

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas AX = Code d'erreur

1 : Logiciel réseau non activé

6 : Handle incorrect

33 : La zone spécifiée est déjà entièrement ou partiellement verrouillée

Remarques :

·	Cette fonction ne peut être appelée qu'après avoir appelé la commande SHARE ou le logiciel réseau.

·	L'offset de début de la zone à verrouiller ainsi que sa longueur doivent être indiqués sous forme de LONGINT positifs composés respectivement de 4 octets.

·	Une région verrouillée à l'aide de cette fonction doit être libérée avec la sous-fonction 01h. Il faut surtout empêcher de terminer le programme sans avoir libéré la zone verrouillée au risque d'obtenir des résultats imprévus lors de l'accès au fichier.

·	Les programmes appelés par la fonction EXEC héritent certes des handles d'accès au fichier via le principe hiérarchique, mais ne disposent pas des zones verrouillées qui leur restent inaccessibles au même titre que tout autre programme.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Rechercher l'entrée suivante du répertoire (FCB)     Int 21h, Fct 12h    DOS (>= 1.0)

Après que le premier nom de fichier ait été identifié en appelant la fonction 11h, cette fonction vous permet de faire rechercher tous les autres noms de fichiers (s'il y en a).

Entrée :

AH 	= 12h

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Fichier trouvé

AL 	= 255 : Fichier non trouvé (pas d'autres fichiers présents)

Remarques :

·	Cette fonction ne doit être appelée qu'après que la fonction 11h ait été tout d'abord appelée.

·	Si un autre nom de fichier a été trouvé, son nom figure à nouveau dans le FCB placé au début de la DTA.

·	La recherche s'effectue exclusivement dans le répertoire actuel du périphérique spécifié.

·	La DTA peut être déplacée à l'aide de la fonction 1Ah vers un buffer utilisateur pour garantir que ce buffer soit suffisamment grand pour recevoir le FCB approprié.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Rechercher la première entrée du répertoire (FCB)     Int 21h, Fct 11h    DOS (>= 1.0)

Cette fonction permet de rechercher la première apparition d'un nom de fichier déterminé dans le répertoire actuel du périphérique désigné dans le FCB.

Entrée :

AH 	= 11h

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Fichier trouvé

AL 	= 255 : Fichier non trouvé

Remarques :

·	Le FCB transmis à la fonction contient la désignation du périphérique sur lequel le fichier doit être recherché ainsi que le nom de ce fichier.

·	Le nom de fichier peut contenir le joker "?" si vous voulez faire rechercher un groupe de fichiers.

·	La recherche s'effectue exclusivement sur le répertoire actuel du périphérique spécifié.

·	Si c'est un fichier normal qu'il s'agit de rechercher, un FCB normal doit être transmis à la fonction. S'il s'agit au contraire de rechercher des fichiers dotés d'attributs particuliers (noms de volumes, sous-répertoires, fichiers cachés, etc.), il faut travailler avec des FCB étendus.

·	Si un fichier a été trouvé, la DTA contient un FCB de même type que le FCB transmis, qui contient le nom du fichier trouvé. C'est pourquoi la DTA doit toujours être d'une taille lui permettant de recevoir au moins un FCB normal ou étendu.

·	La DTA peut être déplacée vers un buffer utilisateur à l'aide de la fonction 1Ah pour s'assurer qu'elle sera d'une taille suffisante pour recevoir le FCB correspondant.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Renommer ou déplacer un fichier (Handle)    Int 21h, Fct 56h    DOS (>= 1.0)

Cette fonction permet de renommer un fichier ou de le déplacer dans un autre répertoire d'une unité de mémoire de masse. Le transfert ne peut toutefois se faire que dans les limites des différents répertoires d'un même périphérique. Il est donc impossible de déplacer de cette façon un fichier d'un répertoire du disque dur dans un répertoire d'une disquette.

Entrée :

AH 	= 56h

DS 	= Adresse de segment de l'ancien nom de fichier

DX 	= Adresse d'offset de l'ancien nom de fichier

ES 	= Adresse de segment du nouveau nom de fichier

DI 	= Adresse d'offset du nouveau nom de fichier

Sortie :

Flag Carry =	0	: Tout va bien

Flag Carry =	1	: Erreur, dans ce cas AX = Code d'erreur

2	: Fichier non trouvé

3	: Chemin non trouvé

5	: Accès refusé

11	: Périphérique différent

Remarques :

·	Les noms de fichiers doivent être fournis sous forme de chaînes ASCII terminées par un caractère de fin (code ASCII 0). Ces noms de fichiers peuvent comporter une désignation de périphérique, une spécification de chemin complète, le nom de fichier proprement dit, mais pas de jokers. Si la désignation de périphérique ou la spécification de chemin sont omises, l'accès se fera sur le périphérique actuel ou sur le répertoire actuel.

·	Une erreur peut se produire si le fichier est censé être transféré dans le répertoire racine alors que ce dernier est déjà plein.

·	Cette fonction ne permet pas d'accéder aux sous-répertoires ou aux noms de volumes.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Renommer un fichier (FCB)     Int 21h, Fct 17h    DOS (>= 1.0)

Renommer un fichier ou un groupe de fichiers dans le répertoire actuel sur le périphérique spécifié.

Entrée :

AH 	= 17h

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Fichier(s) renommé(s)

AL 	= 255 :

Remarques :

·	Le FCB transmis doit être un FCB spécial. Il est basé sur un FCB normal dont les 12 premiers octets contiennent comme d'habitude la désignation de périphérique et le nom du fichier à renommer. Ce FCB a cependant ceci de particulier qu'il comporte à partir de la cellule de mémoire 16 la désignation de périphérique et le nouveau nom du fichier. La désignation de périphérique doit naturellement être identique à celle spécifiée pour l'ancien nom du fichier.

·	Le nom du fichier à renommer peut contenir le joker "?" si vous voulez renommer plusieurs fichiers à la fois.

·	Si le nouveau nom du fichier contient également le joker "?", les emplacements du nom de fichier ou de l'extension de fichier pour lesquels figure un "?" dans le nouveau nom de fichier ne seront pas modifiés.

·	A partir de la version 2.0, un FCB augmenté peut être spécifié pour renommer un répertoire simultanément avec cette fonction.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Sélectionner le lecteur actuel    Int 21h, Fct 0Eh    DOS (>= 1.0)

Cette fonction permet de définir le lecteur actuel dont la désignation apparaîtra désormais sur l'écran comme message de dialogue chaque fois que l'interpréteur de commandes attendra des entrées de l'utilisateur. Tous les accès de fichier pour lesquels aucune désignation de lecteur ne sera spécifiée se feront à l'avenir sur le lecteur indiqué ici.

Entrée :

AH 	= 0Eh

DL 	= Code du lecteur actuel

Sortie :

AL 	= Nombre de lecteurs (ou Volumes) installés

Remarques :

·	Le lecteur A porte le code 0, B le code 1, etc.

·	Même si un PC dispose seulement d'un lecteur de disquette et d'un disque dur, le nombre de volumes dans le registre AL peut être supérieur à 2 car le disque dur peut être subdivisé en plusieurs volumes et un ou plusieurs disques RAM peuvent également avoir été installés.

·	Sur un PC disposant d'un seul lecteur de disquette, le nombre de volumes est de 2 car ce lecteur fait office aussi bien de lecteur A que de lecteur B.

·	La version 2 du DOS autorisait 63 codes de périphériques différents alors que la version 3 du DOS a limité le nombre de périphériques à 26 (les lettres A à Z). Il n'est donc pas possible d'accéder à plus de 26 périphériques à la fois.

·	Le nombre de lecteurs de disquette physiques n'est pas nécessairement identique au nombre de volumes. Il peut donc être déterminé de façon plus précise en appelant l'interruption 11h du BIOS.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Spécifier le nombre de handles disponibles     Int 21h, Fct 67h    DOS (>= 3.3)

Le nombre de handles disponibles ainsi que le nombre de fichiers qu'un programme peut adresser simultanément peut être défini en appelant cette fonction. Alors que jusqu'à la version DOS 3.3, un programme ne pouvait disposer que de 20 handles au maximum, cette fonction permet à un programme de travailler simultanément sur plusieurs milliers de fichiers.

Entrée :

AH 	= 67h

BX 	= Nombre de handles disponibles

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas AX = Code d'erreur

Remarques :

·	Tant que DOS travaille avec l'option par défaut définie à 20, les handles sont remis dans le PSP du programme. Avec une valeur plus grande, les handles ne peuvent plus tenir dans le PSP, ce qui oblige DOS à allouer une cellule mémoire chargée de recevoir les handles à l'avenir. L'appel de la fonction échoue si la mémoire RAM est insuffisante.

·	Un programme ne peut pas accéder à plus de handles que le nombre prévu dans la commande FILES du fichier de configuration CONFIG.SYS. Bien que DOS ne signale pas une erreur en présence d'une valeur plus grande, le nombre des handles disponibles reste toutefois limité à la valeur spécifiée dans FILES.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Supprimer un fichier (FCB)     Int 21h, Fct 13h    DOS (>= 1.0)

Cette fonction sert à supprimer un ou plusieurs fichiers dans le répertoire actuel du périphérique spécifié.

Entrée :

AH 	= 13h

DS 	= Adresse de segment du FCB

DX 	= Adresse d'offset du FCB

Sortie :

AL 	= 0 : Fichier(s) supprimé(s)

AL 	= 255 : Aucun fichier trouvé ou bien les fichiers trouvés ne pouvaient être supprimés (parce qu'ils étaient dotés de l'attribut "Lecture seule")

Remarques :

·	Le FCB transmis à la fonction contient la désignation du périphérique sur lequel figurent les fichiers à supprimer ainsi que le nom de ces fichiers.

·	Le nom de fichier peut contenir le joker "?" si vous voulez supprimer un groupe de fichiers.

·	Seuls des fichiers du répertoire actuel du périphérique spécifié peuvent être supprimés.

·	Si c'est un fichier normal qu'il s'agit de supprimer, un FCB normal doit être transmis à la fonction. S'il s'agit au contraire de supprimer des fichiers dotés d'attributs particuliers (noms de volumes, fichiers cachés, etc.), il faut travailler avec des FCB étendus.

·	Des noms de volumes peuvent être supprimés à l'aide de cette fonction mais pas des sous-répertoires.

·	Le contenu des registres AH, BX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Supprimer un fichier (Handle)    Int 21h, Fct 41h    DOS (>= 1.0)

Cette fonction permet de supprimer le fichier dont le nom est transmis à la fonction.

Entrée :

AH 	= 41h

DS 	= Adresse de segment du nom de fichier

DX 	= Adresse d'offset du nom de fichier

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas AX = code d'erreur

2 : Fichier non trouvé

5 : Accès refusé

Remarques :

·	Le nom de fichier doit être fourni sous forme d'une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Ce nom de fichier peut comporter une désignation de périphérique, une désignation de chemin complète et un nom de fichier proprement dit mais il ne doit pas contenir de jokers. Si la désignation de périphérique ou la désignation de chemin sont omises, l'accès se fera sur le périphérique actuel ou sur le répertoire actuel.

·	Une erreur apparaît si un élément de la spécification de chemin n'existe pas ou si le fichier porte l'attribut "lecture seulement", auquel cas il n'est possible ni d'y écrire ni de le supprimer. Cet attribut peut toutefois être modifié à l'aide de la fonction 43h.

·	Cette fonction ne permet de supprimer ni des sous-répertoires ni des noms de volumes.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Supprimer un sous-répertoire     Int 21h, Fct 3Ah    DOS (>= 1.0)

Cette fonction permet de supprimer un sous-répertoire sur le périphérique spécifié.

Entrée :

AH 	= 3Ah

DS 	= Adresse de segment du chemin du sous-répertoire

DX 	= Adresse d'offset du chemin du sous-répertoire

Sortie :

Flag Carry =0 : Sous-répertoire supprimé

Flag Carry =1 : Erreur, dans ce cas

AX = 3 : Chemin non trouvé

AX = 5 : Accès refusé

Remarques :

·	Le chemin de sous-répertoire transmis est une chaîne ASCII terminée par un caractère de fin (code ASCII 0).

·	Si le chemin de sous-répertoire comporte une désignation de périphérique, l'accès se fera sur le périphérique spécifié, sinon le sous-répertoire sera supprimé sur le périphérique actuel.

·	Une erreur peut se produire si un élément du chemin n'existe pas, si le sous-répertoire est le sous-répertoire actuel ou bien si des fichiers figurent encore dans le sous-répertoire à supprimer.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Gestionnaire de périphérique (IOCTL)
Gestionnaire de périphérique (IOCTL

Affecter un handle à un autre

Communiquer avec un driver de bloc

Communiquer avec un driver de caractères

Définir la désignation de lecteur suivante

Définir la répétition

Définir un second Handle

Lire la dernière désignation de lecteur

Solliciter le soutien IOCTL au niveau du périphérique

Solliciter le soutien IOCTL au niveau Handle

Tester l'état d'entrée

Tester l'état de sortie

Tester le Handle Remote

Tester le périphérique

Tester si c'est un support amovible


Affecter un handle à un autre    Int 21h, Fct 46h    DOS (>= 1.0)

Cette fonction attend deux handles associés à deux fichiers ou périphériques différents. Le second handle est alors assimilé par la fonction au premier, c'est-à-dire qu'il se retrouve associé au même fichier ou au même périphérique que le premier handle. La valeur de son pointeur de fichier coïncide également avec celle du pointeur de fichier du premier handle.

Entrée :

AH 	= 46h

BX 	= Premier handle

CX 	= Second handle (à assimiler)

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

4 : Pas d'autre handle disponible

6 : Handle spécifié non ouvert ou qui n'existe pas

Remarques :

·	Si le second handle est associé à un fichier ouvert lors de l'appel de cette fonction, ce fichier est tout d'abord fermé.

·	Lorsque le pointeur de fichier d'un des deux handles est déplacé du fait de l'appel d'une fonction de lecture ou écriture, le pointeur de fichier de l'autre handle est automatiquement déplacé de la même façon.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Communiquer avec un driver de bloc    Int 21h, Fct 44h, Sous-Fct 0Dh    DOS (>= 3.2)

Tout comme la fonction IOCTL 0Ch, cette fonction permet également d'accéder à de nombreuses sous-fonctions d'un driver de périphérique. Cependant, cette fonction IOCTL ne permet pas d'adresser un driver de caractères, mais un driver de bloc.

Entrée :

AH 	= 44h

AL 	= 0Dh

BL 	= Numéro de lecteur

CH 	= 08h

CL 	= Numéro de la sous-fonction à appeler

DS:DX	= Pointeur FAR sur le buffer contenant des informations complémentaires

Sortie :

Flag Carry 	= 0 : Tout va bien

Flag Carry 	= 1 : Erreur, dans ce cas

AX 	= Code d'erreur

Remarques :

·	En ce qui concerne le code de périphérique, 0 indique le lecteur en cours, 1 est utilisé pour A, 2 pour B, etc.

·	Les sous-fonctions suivantes peuvent être appelées par le registre CL :

40h = Spécifier les paramètres du périphérique (>= DOS 3.2)

41h = Ecrire la piste sur le périphérique logique (>= DOS 3.2)

42h = Formater et contrôler la piste sur le périphérique logique (>= DOS 3.2)

47h = Spécifier le flag d'accès (>= DOS 4.0)

60h = Déterminer les paramètres de périphérique (>= DOS 3.2)

61h = Lire la piste depuis le périphérique logique (>= DOS 3.2)

62h = Contrôler la piste sur le périphérique logique (>= DOS 3.2)

67h = Lire le flag d'accès (>= DOS 4.0)

·	En règle générale, le schéma suivant s'applique à l'utilisation de ces fonctions :

Þ	Lire, vérifier et sauvegarder les paramètres en cours à l'aide de la fonction 60h,

Þ	Spécifier les nouveaux paramètres à l'aide de la fonction 40h,

Þ	Exécuter la fonction nécessaire,

Þ	Remettre en place les anciens paramètres avec la fonction 40h.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Communiquer avec un driver de caractères     Int 21h, Fct 44h, Sous-Fct 0Ch    DOS (>= 3.3)

Cette fonction IOCTL représente l'interface entre des sous-fonctions assurant le travail avec les pages de code. Etant donné que les pages de code ne sont reconnues que par quelques drivers de caractères précis, ces fonctions ne sont généralement disponibles qu'avec ces drivers.

Entrée :

AH 	= 44h

AL 	= 0Ch

BX 	= Handle lié au driver de caractères à adresser

CH 	= Code de périphérique

CL 	= Numéro de la sous-fonction à appeler

DS:DX	= Pointeur FAR sur le buffer contenant des informations complémentaires

Sortie :

Flag Carry = 0 : tout va bien

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

Remarques :

·	Le périphérique concerné est défini à l'aide du code de périphérique contenu dans le registre CH. Les affectations suivantes sont prévues dans ce cas :

0 	= Le périphérique n'appartient à aucun des groupes suivants

1 	= COM1, COM2, COM3 ou COM4

2 	= Périphérique CON (écran et clavier)

5 	= LPT1, LPT2 ou LPT3

·	Les sous-fonctions suivantes peuvent être appelées par le registre CL :

45h 	= 	Spécifier le compteur d'accès pour le driver d'imprimante (>= DOS 3.2)

4Ah 	= 	Sélectionner la page de code (>= DOS 3.3)

4Ch 	= 	Préparer l'initialisation des pages de code (>= DOS 3.3)

4Dh 	= 	Terminer l'initialisation des pages de code (>= DOS 3.3)

5Fh 	= 	Informations concernant l'écran (>= DOS 4.0)

65h 	=	Déterminer le compteur d'accès pour le driver d'imprimante (>= DOS 3.2)

6Ah 	= 	Spécifier la page de code en cours (>= DOS 3.3)

6Bh 	= 	Définir la liste des pages de code installées (>= DOS 3.3)

7Fh 	= 	Lire les informations concernant l'écran (>= DOS 4.0)

·	En règle générale, le schéma suivant s'applique à l'utilisation de ces fonctions :

Lire, vérifier et sauvegarder les paramètres en cours à l'aide de la fonction 60h, Spécifier les nouveaux paramètres à l'aide de la fonction 40h, Exécuter la fonction nécessaire,

·	Remettre en place les anciens paramètres avec la fonction 40h.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Définir la désignation de lecteur suivante    Int 21h, Fct 44h, Sous-Fct 0Fh    DOS (>= 3.2)

Cette fonction permet de spécifier la désignation de lecteur logique utilisée pour appeler un périphérique lors d'un prochain accès.

Entrée :

AH 	= 44h

AL 	= 0Fh

BL 	= Code de périphérique (0 = actuel, 1 = A, 2 = B, etc.)

Sortie :

Flag Carry = 0 : Tout va bien, dans ce cas

AL = Code de périphérique servant à appeler le lecteur lors d'un prochain accès

Flag Carry = 1 : Erreur, dans ce cas AX = Code d'erreur

Remarques :

·	Cette fonction est surtout intéressante pour les systèmes équipés d'un seul lecteur de disquette parce que ce dernier peut être appelé sous A et B. Dans ce cas, cette fonction permet de faire commuter le lecteur de disquette de A vers B. Comme cette fonction travaille en alternance, le lecteur revient sur A à la suite d'un appel ultérieur.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Définir la répétition    Int 21h, Fct 44h, Sous-Fct 0Bh    DOS (>= 3)

En réseau, il arrivera souvent qu'un programme souhaite accéder à un fichier alors qu'un autre programme est déjà en train d'y accéder et que ce fichier ne puisse être ouvert de ce fait. Dans une telle situation, il ne serait pas raisonnable de renoncer immédiatement à accéder au fichier car le fichier redeviendra généralement disponible après un très bref délai. C'est pourquoi le DOS gère, sur un plan interne, deux variables qui indiquent combien de fois une tentative d'accès à un fichier doit être répétée et quel délai doit s'écouler entre deux tentatives. Ce sont ces deux paramètres que cette fonction permet de fixer.

Entrée :

AH 	= 44h

AL 	= 0Bh

BX 	= Nombre de répétitions des tentatives

CX 	= Délai entre deux tentatives

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

Remarques :

·	Cette fonction ne doit être appelée que si un logiciel de réseau est installé.

·	Le délai imparti au driver de périphérique dans le registre CX dépend de la vitesse du système informatique en cours. Au lieu de faire référence à une unité de temps constante, il indique notamment le nombre des répétitions d'une boucle vide dont la vitesse d'exécution dépend naturellement de celle du processeur.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Définir un second Handle    Int 21h, Fct 45h    DOS (>= 1.0)

Cette fonction permet de mettre en place un second handle pour un handle spécifié. Ce second handle sera associé au même fichier ou au même périphérique que le premier. Si le premier handle se rapportait à un fichier, le pointeur de fichier de ce handle sera couplé avec le pointeur de fichier du nouveau handle.

Entrée :

AH 	= 45h

BX 	= Handle

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas AX = le nouveau Handle

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

Flag Carry =4 : Pas d'autre handle disponible

Flag Carry =6 : Handle spécifié non ouvert ou qui n'existe pas

Remarques :

·	Cette fonction permet, après qu'un fichier ait été modifié, de faire actualiser l'entrée de ce fichier dans le répertoire sans être obligé de refermer le fichier. Il suffit en effet de réclamer à l'aide de cette fonction un nouveau handle pour le fichier puis de refermer le fichier avec ce handle à l'aide de la fonction 3Eh.

·	Lorsque le pointeur de fichier d'un des deux handles est déplacé du fait de l'appel d'une fonction de lecture ou écriture, le pointeur de fichier de l'autre handle est automatiquement déplacé de la même façon.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Lire la dernière désignation de lecteur    Int 21h, Fct 44h, Sous-Fct 0Eh    DOS (>= 3.2)

Cette fonction permet de déterminer la désignation logique du lecteur dernièrement utilisée pour adresser un périphérique.

Entrée :

AH 	= 44h

AL	= 0Eh

BL 	= Code de périphérique (0 = actuel, 1 = A, 2 = B, etc.)

Sortie :

Flag Carry = 0 : Tout va bien, dans ce cas

AL = 0	: Un seul périphérique logique appartient au périphérique spécifié

AL 1	: Numéro du périphérique logique attribué au périphérique spécifié (1 = A, 2 = B, etc.)

Flag Carry = 1	: Erreur, dans ce cas AX = Code d'erreur

Remarques :

·	Cette fonction est surtout intéressante pour les systèmes équipés d'un seul lecteur de disquette. Dans ce cas, ce lecteur peut être appelé sous A et B. Cette fonction permet notamment de spécifier si le lecteur de disquette a été adressé dernièrement en tant que lecteur A ou B. Si le lecteur est adressé au moyen d'une telle désignation, un message DOS apparaît immédiatement pour demander d'insérer une disquette lors de l'accès au lecteur.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Solliciter le soutien IOCTL au niveau du périphérique    Int 21h, Fct 44h, Sous-Fct 11h    DOS (>= 5.0)

A partir de la version 5.0, la mise en disponibilité de cette fonction peut être sollicitée avant l'appel d'une fonction IOCTL qui ne fait pas partie de l'environnement des fonctions de la version 3.2.

Entrée :

AH 	= 44h

AL 	= 11h

BX 	= Numéro de périphérique (0 = actuel, 1 = A, B = 2, etc.)

CL 	= Numéro de la fonction IOCTL souhaitée

Sortie :

Flag Carry	= 0 : La fonction est disponible par rapport au périphérique spécifié

Flag Carry	= 1 : Erreur, la fonction n'est pas disponible par rapport au périphérique, dans ce cas AX = 1 (fonction non disponible)

Remarques :

·	Alors que cette fonction ne permet de tester la disponibilité d'une fonction IOCTL précise que par rapport à un périphérique précis, la fonction IOCTL 10h permet en revanche d'effectuer un test par rapport à un handle donné et le périphérique qui s'y cache derrière.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Solliciter le soutien IOCTL au niveau Handle     Int 21h, Fct 44h, Sous-Fct 10h    DOS (>= 5.0)

A partir de la version 5.0, la mise en disponibilité de cette fonction peut être sollicitée avant l'appel d'une fonction IOCTL qui ne fait pas partie de l'environnement des fonctions de la version 3.2.

Entrée :

AH 	= 44h

AL 	= 10h

BX 	= Handle sur le périphérique à adresser lors de l'appel de la fonction IOCTL

CL 	= Numéro de la fonction IOCTL souhaitée

Sortie :

Flag Carry = 0 : La fonction est disponible par rapport au handle spécifié

Flag Carry = 1 : Erreur, la fonction n'est pas disponible par rapport au handle spécifié, dans ce cas AX = 1 (fonction non disponible)

Remarques :

·	Alors que cette fonction ne permet de tester la disponibilité d'une fonction IOCTL précise que par rapport au périphérique qui se cache derrière un handle, la fonction IOCTL 11h permet en revanche d'effectuer un test par rapport à un périphérique précis.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Tester l'état d'entrée    Int 21h, Fct 44h, Sous-Fct 6    DOS (>= 1.0)

Cette fonction permet de déterminer si un driver de périphérique est prêt à transmettre des données à un autre programme.

Entrée :

AH 	= 44h

AL 	= 6

BX 	= Handle

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas AX = Etat d'entrée

0 : Le driver n'est pas prêt

255 : Le driver est prêt

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

5 : Accès refusé

6 : Handle incorrect

Remarques :

·	Le handle spécifié peut être associé à un driver de caractères ou à un fichier.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Tester l'état de sortie    Int 21h, Fct 44h, Sous-Fct 7    DOS (>= 1.0)

Cette fonction permet de déterminer si un driver de périphérique est prêt à recevoir des données d'un autre programme.

Entrée :

AH 	= 44h

AL 	= 7

BX 	= Handle

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas AX = Etat de sortie

0 : Le driver n'est pas prêt

255 : Le driver est prêt

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

5 : Accès refusé

6 : Handle incorrect

Remarques :

·	Le handle spécifié peut être associé à un driver de caractères ou à un fichier.

·	Si le handle est associé à un fichier, le driver de bloc correspondant annoncera toujours que le périphérique est prêt à recevoir des données, même si le support sur lequel figure le fichier est plein et donc même si, de ce fait, il n'est plus possible d'ajouter des données à la suite du fichier.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Tester le Handle Remote    Int 21h, Fct 44h, Sous-Fct 0Ah    DOS (>= 3.1)

Cette fonction permet de déterminer si le fichier associé au handle spécifié (Device) est un élément du PC sur lequel le test est effectué (local) ou bien s'il figure sur un autre PC, dans le cadre d'un réseau (remote).

Entrée :

AH 	= 44h

AL 	= 0Ah

BX 	= Handle

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas DX = Code IOCTL

Bit 15 = 0 : local

Bit 15 = 1 : remote

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

6 : Handle non ouvert ou qui n'existe pas

Remarques :

·	Cette fonction ne peut être appelée que si un logiciel de réseau est installé.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Tester le périphérique    Int 21h, Fct 44h, Sous-Fct 9    DOS (>= 3.1)

Cette fonction permet de déterminer si le lecteur spécifié (Device) est un élément du PC sur lequel le test est effectué (local) ou bien s'il figure sur un autre PC, dans le cadre d'un réseau (remote).

Entrée :

AH 	= 44h

AL 	= 9

BL 	= Désignation de périphérique

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas DX = Attribut de périphérique

Bit 12 = 0 : local

Bit 12 = 1 : remote

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

15 : Périphérique inconnu

Remarques :

·	Cette fonction ne peut être appelée que si un logiciel de réseau est installé.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Tester si c'est un support amovible    Int 21h, Fct 44h, Sous-Fct 8    DOS (>= 3)

Cette fonction permet de déterminer si le support (disquette, disque dur) d'un périphérique est amovible.

Entrée :

AH 	= 44h

AL 	= 8

BL 	= Désignation de périphérique

Sortie :

Flag Carry =0 : Tout va bien, dans ce cas

AX = 0 : Support amovible

AX = 1 : Support fixe

Flag Carry =1 : Erreur, dans ce cas AX = Code d'erreur

1 : Code de fonction inconnu

15 : Périphérique inconnu

Remarques :

·	La désignation de périphérique n'indique pas directement le driver de périphérique mais le périphérique duquel les données devront être reçues.Le code 0 désigne ici le périphérique actuel, 1 le lecteur A, 2 le lecteur B, etc.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Réseau

Définir la chaîne d'initialisation de l'imprimante réseau

Définir une entrée dans la liste du réseau

Indiquer le nom de l'ordinateur dans le réseau

Lire la chaîne d'initialisation d'une imprimante réseau

Lire une entrée de la liste du réseau

Supprimer une entrée de la liste du réseau


Définir la chaîne d'initialisation de l'imprimante réseau    Int 21h, Fct 5Eh, Sous-Fct 02h    DOS (>= 3.1)

A l'intérieur d'un réseau, chaque ordinateur peut se servir de cette fonction pour définir une chaîne d'initialisation tout à fait spécifique chargée de transmettre la sortie depuis l'ordinateur concerné vers l'imprimante réseau. Il est par exemple possible de définir un mode d'exploitation particulier et d'utiliser l'imprimante réseau reliée à divers ordinateurs dans des modes d'exploitation variés.

Entrée :

AH 	= 5Eh

AL 	= 02h

BX 	= Identification numérique de l'imprimante adressée par rapport à la liste du réseau

CX 	= Longueur de la chaîne d'initialisation en caractères

DS:SI = Pointeur FAR sur le buffer contenant la chaîne d'initialisation

Sortie :

Flag Carry = 	0 : Tout va bien

Flag Carry = 	1 : Erreur, dans ce cas

AX = Code d'erreur

1 : Logiciel réseau non chargé

Remarques :

·	Cette fonction ne peut être appelée qu'une fois le logiciel réseau lancé.

·	La liste du réseau est une liste permettant d'affecter des noms de périphérique locaux aux périphériques, répertoires et fichiers d'un réseau.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Définir une entrée dans la liste du réseau     Int 21h, Fct 5Fh, Sous-Fct 03h    DOS (>= 3.1)

Ces fonctions permettent de définir une nouvelle entrée dans la liste du réseau utilisée pour représenter un nom local à partir du nom d'une imprimante ou d'un lecteur.

Entrée :

AH 	= 5Fh

AL 	= 03h

BL 	= Type de périphérique

: 03 = Imprimante

: 04 = Lecteur (périphérique, répertoire ou fichier)

CX 	= Identification numérique pour accéder au périphérique via la liste du réseau

DS:SI 	= Pointeur FAR sur le buffer contenant le nom local du périphérique

ES:DI 	= Pointeur FAR sur le buffer contenant le nom réseau du périphérique

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

1 : Logiciel réseau non chargé

3 : Chemin d'accès inexistant

5 : Accès refusé

8 : Mémoire insuffisante pour incorporer une autre entrée dans la liste du réseau

Remarques :

·	Cette fonction ne peut être appelée qu'une fois le logiciel réseau lancé.

·	La longueur du nom du périphérique doit être de 15 caractères et doit se terminer par le code ASCII nul. On obtient ainsi une longueur maximale de 16 octets.

·	La longueur du nom réseau du périphérique peut atteindre 127 caractères et doit se terminer également par le code ASCII nul. La longueur maximal du buffer concerné s'élève ici à 128 octets.

·	Le contenu des registres BX, CX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Indiquer le nom de l'ordinateur dans le réseau    Int 21h, Fct 5Eh, Sous-Fct 00h    DOS (>= 3.1)

Tout ordinateur connecté au réseau peut porter un nom représenté par une chaîne ASCII. L'ordinateur exécutant peut se servir de cette fonction pour demander ce nom. Le numéro NetBios de l'ordinateur est fourni simultanément.

Entrée :

Ah 	= 5Eh

AL 	= 00h

DS:DX	= Pointeur FAR sur le buffer dans lequel il faut copier le nom

Sortie :

Flag Carry = 0 : Tout va bien, dans ce cas

CH<> = 0 : Pas de nom

CH = 0 : Nom dans le buffer spécifié, dans ce cas

CL = Numéro NetBios de l'ordinateur

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

1 : Pas de logiciel réseau chargé

Remarques :

·	Cette fonction ne peut être appelée qu'une fois le logiciel réseau lancé.

·	Après l'appel de cette fonction, le buffer spécifié contient une chaîne ASCII représentant le nom de l'ordinateur sur lequel s'est effectué l'appel de la fonction. La longueur de la chaîne est toujours de 15 caractères. Elle se termine par le code ASCII nul et comprend ainsi 16 octets.

·	Le contenu des registres BX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Lire la chaîne d'initialisation d'une imprimante réseau    Int 21h, Fct 5Eh, Sous-Fct 03h    DOS (>= 3.1)

La chaîne d'initialisation d'une imprimante réseau spécifiée par la sous-fonction 02h peut être obtenue à l'aide de cette fonction.

Entrée :

AH 	= 5Eh

AL 	= 03h

BX 	= Identification numérique de l'entrée souhaitée dans la liste du réseau

DS:SI	= Pointeur FAR sur le buffer devant recevoir la chaîne d'initialisation

Sortie :

Flag Carry =	0 : Tout va bien, dans ce cas

CX = Longueur de la chaîne d'initialisation transmise

Flag Carry =	1 : Erreur, dans ce cas

AX = Code d'erreur

1 : Logiciel réseau non chargé

Remarques :

·	Cette fonction ne peut être appelée qu'une fois le logiciel réseau lancé.

·	Le buffer spécifié doit contenir suffisamment de place pour recevoir 64 caractères.

·	L'identification numérique de l'imprimante peut être obtenue à l'aide de la sous-fonction 02h de la fonction 5Fh. Elle est définie par la sous-fonction 03h de la fonction 5Fh lors de la création de l'entrée dans la liste du réseau.

·	Le contenu des registres BX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Lire une entrée de la liste du réseau     Int 21h, Fct 5Fh, Sous-Fct 02h    DOS (>= 3.1)

Retourne une entrée de la liste du réseau définie préalablement par la sous-fonction 03h de cette fonction.

Entrée :

AH 	= 5Fh

AL 	= 02h

BX 	= Numéro de l'entrée souhaitée comme index dans la liste du réseau

DS:SI	= Pointeur FAR sur le buffer devant recevoir le nom local

ES:DI	= Pointeur FAR sur le buffer devant recevoir le nom réseau du périphérique

Sortie :

Flag Carry = 0 : Tout va bien

BH = Bit 0 : 0 = Périphérique existant

: 1 = Périphérique inexistant

BL = Type de périphérique

: 03 = Imprimante

: 04 = Lecteur (périphérique, répertoire ou fichier)

CX = Identification numérique pour l'accès au périphérique via la liste du réseau

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

1 : Logiciel réseau non chargé

18 : Index spécifié trop grand

Remarques :

·	Cette fonction ne peut être appelée qu'une fois le logiciel réseau lancé.

·	Le buffer réservé pour le nom local doit prévoir une place de 16 caractères et 128 pour celui du nom réseau. Dans les deux cas, l'information souhaitée est retournée sous la forme d'une chaîne ASCII terminée par le code ASCII nul.

·	Vous pouvez utiliser cette fonction pour obtenir toutes les entrées de la liste du réseau. Commencez l'appel à partir de l'indice 0 puis continuez avec des indices croissants jusqu'à ce que la fonction retourne le code d'erreur 18.

·	Le contenu des registres SI, DI, CS, DS, SS et ES n'est pas modifié par cette fonction. En revanche, le contenu de tous les autres registres est modifié même si le registre ne sert pas à retourner des informations.


Supprimer une entrée de la liste du réseau DOS (>= 3.1)    Int 21h, Fct 5Fh, Sous-Fct 04h

Cette fonction permet de supprimer de la liste du réseau une entrée définie préalablement par la sous-fonction 03h. La redirection vers le périphérique concerné s'effectue alors automatiquement.

AH 	= 5Fh

AL 	= 04h

DS:SI 	= Pointeur FAR sur le buffer contenant le nom local du périphérique

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

1 : Logiciel réseau non chargé

3 : Entrée inconnue

Remarques :

·	Cette fonction ne peut être appelée qu'une fois le logiciel réseau lancé.

·	La longueur du nom du périphérique doit être de 15 caractères et doit se terminer par le code ASCII nul. On obtient ainsi une longueur maximale de 16 octets.

·	Le contenu des registres BX, CX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Exécution de programmes

Adapter les EXEC personnels

Charger un autre programme sans l'exécuter

Convertir le BPB en DPB

Créer un nouveau PSP

Définir le caractère de commutateur de ligne de commande

Définir le PSP actif

Déterminer l'adresse de PSP

Exécuter un autre programme

Lire le code de fin

Lire le PSP actif

Placer un pointeur sur le bloc info DOS

Routine pour terminer un programme

Terminer programme avec un code de fin

Terminer programme mais laisser en mémoire


Adapter les EXEC personnels     Int 21h, Fct 4Bh, Sous-Fct 05h    DOS (>= 5.0)

A partir de la version DOS 5.0, les applications qui chargent d'autres programmes ou overlays à l'aide de la fonction DOS Exec doivent utiliser cette fonction pour éviter des problèmes lors du chargement de ces programmes ou overlays.

Entrée :

AH 	= 4Bh

AL 	= 05h

DS:DX	= Pointeur FAR sur la structure Exec-State

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

1	: code de fonction inconnu

2	: chemin ou programme non trouvé

3	: programme non trouvé

4	: trop de fichiers ouverts

5	: accès refusé

8	: zone de mémoire insuffisante

10	: bloc d'environnement erroné

11	: format erroné

Remarques :

·	L'appel de cette fonction doit s'effectuer entre le chargement du programme ou overlay et son exécution. Aucune fonction DOS ou BIOS ou une interruption logicielle de quelque nature que ce soit ne doit être appelée entre l'appel de cette fonction et le lancement du programme ou overlay.

·	La structure Exec-State contient des informations sur le programme ou overlay. Elle regroupe 18 octets et présente la structure suivante.

Structure Exec-State

Adr.	Contenu	Type

00h	Réservé, doit contenir 0	1 WORD

02h	1 = Programme EXEC 2 = Overlay	1 WORD

04h	Pointeur sur une chaîne ASCII contenant le nom du programme
ou overlay (l'indication du chemin est autorisée dans cette chaîne)	1 PTR

08h	Adresse de segment du PSP du programme ou overlay	1 WORD

0Ah	Point d'entrée dans le programme ou overlay	1 PTR

0Eh	Taille du programme ou overlay y compris PSP	1 DWORD

Longueur : 12h (18 octets)


Charger un autre programme sans l'exécuter    Int 21h, Fct 4Bh, Sous-Fct 03h    DOS (>= 1.0)

Cette fonction permet à un programme de charger un autre programme en mémoire sans que ce programme soit pour autant automatiquement exécuté.

Entrée :

AH 	= 4Bh

AL 	= 3

ES 	= Adresse de segment du bloc de paramètres

BX 	= Adresse d'offset du bloc de paramètres

DS 	= Adresse de segment du nom de programme

DX 	= Adresse d'offset du nom de programme

Sortie :

Flag Carry =0: Tout va bien

Flag Carry =1: Erreur, dans ce cas

AX = Code d'erreur

1 : Code de fonction inconnu

2 : Chemin ou programme non trouvé

3 : Programme non trouvé

4 : Trop de fichiers ouverts

5 : Accès refusé

8 : Zone mémoire insuffisante

10 : Bloc d'environnement erroné

11 : Format erroné

Remarques :

·	Le nom du programme doit être fourni sous forme d'une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Il peut comporter une désignation de périphérique, une spécification de chemin complète ainsi qu'un nom de fichier, mais pas de jokers. Si la désignation de périphérique ou la spécification de chemin sont omises, l'accès se fera sur le périphérique actuel ou sur le répertoire actuel.

·	Le bloc de paramètres doit présenter le format suivant :

Octets 0 - 1 :	Adresse de segment à laquelle devra être chargé l'overlay (l'adresse d'offset correspondante est 0)

Octets 2 - 3 :	Facteur de relogement

·	Le facteur de relogement spécifié devra être 0 pour les programmes COM et l'adresse de segment à laquelle le programme doit être chargé pour les programmes EXE.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Convertir le BPB en DPB    Int 21h, Fct 53h    DOS (>= 2.0)

Ces fonctions non documentées permettent de convertir un bloc de paramètres BIOS en un bloc de paramètres Drive.

Entrée :

AH 	= 53h

DS:SI 	= Pointeur FAR sur le buffer contenant le BPB converti

ES:BP =	Pointeur sur le buffer dans lequel le bloc de paramètres Drive doit être créé

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas

·	AX = Code d'erreur


Créer un nouveau PSP    Int 21h, Fct 55h    DOS (>= 2.0)

Cette fonction crée un nouveau PSP en copiant l'ancien PSP dans le nouveau et en adaptant ensuite les diverses informations dans le nouveau PSP. Il s'agit en particulier d'informations liées à l'état du PSP en mémoire. Par conséquent, elles peuvent être transférées de l'ancien PSP vers le nouveau avec des modifications.

Entrée :

AH 	= 55h

DX 	= Adresse de segment du nouveau PSP

CX 	= Adresse de segment de l'ancien PSP

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur

Remarques :

·	Cette fonction non documentée est conçue pour pouvoir créer un PSP pour un programme avant de le charger. Eu égard à la fonction 4Bh, elle s'avère toutefois inutile car la fonction 4Bh charge automatiquement un programme, crée un nouveau PSP et adapte les adresses de segment dans le PSP et le programme chargé.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Définir le caractère de commutateur de ligne de commande    Int 21h, Fct 37h, Sous-Fct 01h    DOS (>= 2.0)

L'appel de cette fonction permet de définir le caractère que tous les commutateurs de lignes de commande doivent reconnaître lors de l'appel d'un programme.

Entrée :

AH 	= 37h

AL 	= 01h

DL 	= code ASCII du caractère

Sortie :

Flag Carry :	0, caractère accepté

1, Erreur

Remarques :

·	Actuellement, les caractères autorisés pour introduire les paramètres dans une ligne de commande sont (=), (/) et (-). Les autres caractères ne sont pas acceptés et sont rejetés.

·	Vu que les programmes utilisant la sous-fonction 00h sont peu nombreux et que le caractère adopté comme commutateur de lignes de commande est toujours le caractère (/), l'appel de la sous-fonction 01h n'agit que sur de rares programmes. Mais on peut citer les divers programmes DOS internes et externes qui accordent une importance à ce caractère.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS, ES n'est pas modifié par cette fonction.


Définir le PSP actif     Int 21h, Fct 50h    DOS (>= 2.0)

Cette fonction spécifie le PSP en cours. Elle est par exemple utile dans les programmes TSR pour que DOS lise les données à partir de son PSP et non celui du programme tournant au premier plan lors de l'accès au fichier.

Entrée :

AH 	= 50h

BX 	= Adresse de segment du PSP

Sortie :

Flag Carry = 0 : Tout va bien

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

Remarques :

·	Implicitement, DOS considère qu'un PSP commence fondamentalement à l'adresse d'offset 0000h à l'intérieur d'un segment. Il faut en tenir compte lors de l'appel de cette fonction.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Déterminer l'adresse de PSP    Int 21h, Fct 62h    DOS (>= 3)

Cette fonction permet de lire l'adresse du PSP du programme actuellement exécuté.

Entrée :

AH 	= 62h

Sortie :

BX 	= Adresse de segment du PSP

Remarques :

·	Le PSP commence à l'adresse BX:0000.

·	Le contenu des registres AX, CX, DX, SI, DI, BP, CS, DS, SS, ES et du registre de flags n'est pas modifié par cette fonction.


Exécuter un autre programme     Int 21h, Fct 4Bh, Sous-Fct 00h    DOS (>= 1.0)

Cette fonction permet à un programme d'en faire exécuter un autre de façon à ce que l'exécution du premier programme reprenne dès que l'exécution du second programme sera achevée. A cet effet, il faut transmettre à la fonction le nom du programme à exécuter ainsi que l'adresse d'un bloc de paramètres qui contienne les informations dont la fonction a besoin.

Entrée :

AH 	= 4Bh

AL 	= 0

ES 	= Adresse de segment du bloc de paramètres

BX 	= Adresse d'offset du bloc de paramètres

DS 	= Adresse de segment du nom de programme

DX 	= Adresse d'offset du nom de programme

Sortie :

Flag Carry =0 : Tout va bien

Flag Carry =1 : Erreur, dans ce cas

AX = Code d'erreur :

1 : Code de fonction inconnu

2 : Chemin ou programme non trouvé

3 : Programme non trouvé

4 : Trop de fichiers ouverts

5 : Accès refusé

8 : Zone mémoire insuffisante

10 : Bloc d'environnement erroné

11 : Format erroné

Remarques :

·	Le nom du programme doit être fourni sous forme d'une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Il peut comporter une désignation de périphérique, une spécification de chemin complète ainsi qu'un nom de fichier, mais pas de jokers. Si la désignation de périphérique ou la spécification de chemin sont omises, l'accès se fera sur le périphérique actuel ou sur le répertoire actuel.

·	Seuls des programmes EXE ou COM peuvent ainsi être exécutés. Pour faire exécuter un fichier batch, il faut appeler l'interpréteur de commandes (COMMAND.COM) avec le paramètre '/c' suivi du nom du fichier batch voulu.

·	Le bloc de paramètres doit présenter le format suivant :

Octets 0 - 1 :	Adresse de segment du bloc d'environnement

Octets 2 - 3 :	Adresse d'offset des paramètres de commande

Octets 4 - 5 :	Adresse de segment des paramètres de commande

Octets 6 - 7 :	Adresse d'offset du premier FCB

Octets 8 - 9 :	Adresse de segment du premier FCB

Octets 10 - 11 : 	Adresse d'offset du second FCB

Octets 12 - 13 : 	Adresse de segment du second FCB

·	Si l'adresse de segment du bloc d'environnement communiquée est la valeur 0, c'est que le programme à appeler dispose du même bloc d'environnement que le programme d'appel.

·	Les paramètres de commande doivent être stockés dans la mémoire de la façon suivante: un premier octet spécifie le nombre de caractères dans la ligne d'instruction ; viennent ensuite les différents caractères ASCII dont la fin est marquée par un Carriage Return (code ASCII 13). Ce Carriage Return ne doit toutefois pas être pris en compte pour le nombre de caractères.

·	Le premier FCB transmis est copié à l'adresse 5Ch, le second à l'adresse 6Ch dans le PSP du programme appelé. Si le programme appelé n'attend aucune information de ces deux FCB, n'importe quelles valeurs peuvent être inscrites dans les champs FCB du bloc de paramètres.

·	Après appel de cette fonction, tous les registres sont modifiés, hormis les registres CS et IP. Il ne faut donc pas oublier de sauvegarder le contenu des registres utiles avant d'appeler cette fonction, de façon à pouvoir les restaurer une fois le programme exécuté.

·	Le programme appelé peut disposer de tous les handles dont pouvait disposer le programme d'appel.


Lire le code de fin     Int 21h, Fct 4Dh    DOS (>= 1.0)

Un programme qui en a appelé un autre à l'aide de la fonction EXEC peut déterminer à l'aide de cette fonction quel code de fin le programme appelé a renvoyé en fin d'exécution.

Entrée :

AH 	= 4Dh

Sortie :

AH 	= Type de fin du programme

0 : Fin normale

1 : Fin à la suite d'un caractère Ctrl-C ou parce que touche Break actionnée

2 : A cause d'une erreur d'accès à un périphérique

3 : Après appel de la fonction 31h ou INT 27h

AL = Code de fin

Remarques :

·	Le code de fin du programme appelé ne peut être lu qu'une seule fois à l'aide de cette fonction.

·	Le contenu des registres AX, BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Lire le PSP actif     Int 21h, Fct 51h    DOS (>= 2.0)

Cette fonction permet de connaître l'adresse de segment du PSP du programme en cours. Elle sert particulièrement aux programmes TSR pour lire l'adresse du PSP du programme de premier plan avant de définir leur propre PSP à l'aide de la fonction 50h.

Entrée :

AH 	= 51h

Sortie :

Flag Carry	= 0 : Tout va bien, dans ce cas

BX	= Adresse de segment du PSP en cours

Flag Carry	= 1 : Erreur, dans ce cas

AX	= Code d'erreur

Remarques :

·	Le PSP spécifié commence toujours à l'adresse offset 0000h par rapport à l'adresse de segment indiquée.

·	Vous devez donner la priorité à cette fonction par rapport à la fonction 62h qui est destinée spécialement à cet effet. En outre, elle est plus documentée que la fonction 51h. Mais elle n'est disponible qu'à partir de la version DOS 3.0 alors que la fonction 51h a été déjà introduite avec la version 2.0.

·	Le contenu des registres BX, CX, DX, SI, DI, BP, CS, DS, SS et ES n'est pas modifié par cette fonction.


Placer un pointeur sur le bloc info DOS     Int 21h, Fct 52h    DOS (>= 2.0)

Cette fonction retourne un pointeur sur le bloc info DOS. Elle permet d'obtenir de nombreuses informations intéressantes qui ne sont pas toujours accessibles par un programme.

Entrée :

AH 	= 52h

Sortie :

Flag Carry = 0 : Tout va bien, dans ce cas

ES:BX = Pointeur FAR sur le DIB

Flag Carry = 1 : Erreur, dans ce cas

AX = Code d'erreur

Remarques :

·	Le contenu des registres CX, DX, SI, DI, BP, CS, DS et SS n'est pas modifié par cette fonction.


Routine pour terminer un programme     Int 22h    DOS (>= 1.0)

Le vecteur d'interruption de cette routine, qui figure à l'adresse 0000:0088, contient l'adresse d'une routine servant à terminer un programme. Cette routine sera appelée par toutes les fonctions pour terminer un programme, c'est-à-dire par l'interruption 20h et les fonctions 0h, 21h et 4Ch de l'interruption 21h. Elle rend ensuite le contrôle au programme-père, c'est-à-dire au programme qui avait appelé le programme qu'il s'agit de terminer. Cependant, bien que le vecteur d'interruption contienne l'adresse d'une routine qui pourrait donc être appelée à l'aide de l'instruction (langage machine) INT, cela ne doit jamais être tenté car cette routine est conçue comme une procédure FAR et non comme une routine d'interruption.

Si un programme modifie le contenu de ce vecteur d'interruption au cours de son exécution, la routine du DOS ne pourra plus être appelée pour terminer un programme. Pour éviter cela, le DOS sauvegarde le contenu de ce vecteur d'interruption dans le PSP du programme à exécuter avant de lui passer la main. Lorsqu'un programme est terminé à l'aide des fonctions indiquées plus haut, le contenu du vecteur d'interruption est tout d'abord recopié du PSP dans le vecteur, après quoi la routine voulue peut être appelée.


Terminer programme avec un code de fin    Int 21h, Fct 4Ch    DOS (>= 1.0)

Cette fonction permet de terminer un programme en définissant un code de fin que le programme d'appel pourra tester à l'aide de la fonction 4Dh. La mémoire RAM occupée par le programme à terminer est libérée après appel de cette fonction, de sorte qu'elle peut à nouveau être attribuée à d'autres programmes.

Entrée :

AH 	= 4Ch

AL 	= Code de fin

Sortie :

aucune

Remarques :

·	Cette fonction est à utiliser de préférence aux autres fonctions pour terminer un programme.

·	Lorsque cette fonction est appelée, les 3 vecteurs d'interruption dont le contenu avait été stocké dans le PSP avant le lancement du programme sont restaurés.

·	Avant que le contrôle ne soit rendu au programme d'appel, tous les handles qui ont été ouverts par le programme appelé, ainsi que tous les fichiers correspondants, sont refermés. Cela ne concerne toutefois que les fichiers auquel on accédait par FCB.

·	Le code de fin peut être examiné dans un fichier batch à l'aide des instructions ERRORLEVEL et IF.


Terminer programme mais laisser en mémoire     Int 27h    DOS

Cette fonction permet de terminer le programme exécuté et de rendre le contrôle au programme qui avait appelé le programme actuel.

Comme quand est appelée la fonction 31h de l'interruption du DOS 21h, cette fonction ne libère cependant pas la mémoire occupée par le programme, qui reste donc résident dans la mémoire.

Entrée :

CS 	= Adresse de segment du PSP

DX 	= Nombre d'octets à réserver + 1

Sortie :

aucune

Remarques :

·	Cette fonction convient uniquement à l'appel de programmes COM.

·	Le nombre d'octets à réserver se rapporte au commencement du PSP.

·	Les blocs de mémoire qui ont été réservés à l'aide de la fonction 48h ne sont pas affectés par la valeur dans le registre DX car ils ne peuvent être à nouveau libérés qu'en appelant la fonction 49h.

·	Il est préférable d'appeler la fonction 31h de l'interruption 21h plutôt que cette interruption.

·	Une erreur apparaîtra si cette interruption est appelée avec une valeur entre FFF1h et FFFFh dans le registre DX.

·	Les fichiers ouverts ne sont pas refermés par l'appel de cette interruption.


Programmes résidents

ANSI.SYS : Tester la présence

APPEND : Définir les paramètres de la commande

APPEND : Déterminer la compatibilité avec DOS 5

APPEND : Lire la liste des répertoires APPEND

APPEND : Lire les paramètres de la commande

APPEND : Tester la présence

ASSIGN : Tester la présence

DOSKEY : Prendre en compte la saisie d'un utilisateur

DOSKEY : Tester la présence

GRAFTABL : Tester la présence

HIMEM.SYS : Indiquer l'adresse d'appel des fonctions XMS

HIMEM.SYS : Tester la présence

KEYB.COM : Définir la page de codes active

KEYB.COM : Lire le numéro de la version

MSCDEX > 1.0 : Ecrire des secteurs sur le CD-R

MSCDEX > 1.0 : Fournir des informations sur le gestionnaire CD-ROM

MSCDEX > 1.0 : Lire des secteurs du CD-ROM

MSCDEX > 1.0 : Lire le nom du fichier Abstract

MSCDEX > 1.0 : Lire le nom du fichier Bibliographic Documentation

MSCDEX > 1.0 : Lire le nom du fichier de copyright

MSCDEX > 1.0 : Lire le nombre de lecteurs CD-ROM

MSCDEX > 1.0 : Lire VTOC du CD-ROM

MSCDEX > 2.0 : Définir le paramétrage par défaut du volume du CD-ROM

MSCDEX > 2.0 : Interroger le lecteur CD-ROM

MSCDEX > 2.0 : Lire le numéro de version MSCDEX

MSCDEX > 2.0 : Lire les noms de périphérique des lecteurs CD-ROM

MSCDEX > 2.0 : Lire les paramètres par défaut du volume du CD-ROM

MSCDEX > 2.0 : Lire une entrée de répertoire du CD-ROM

MSCDEX > 2.1 : Envoyer une requête au driver du CD-ROM

PRINT : Ajouter un fichier à la file d'attente

PRINT : Déterminer l'imprimante en service

PRINT : Interrompre l'impression pour tester son état

PRINT : Reprendre l'impression

PRINT : Retirer un fichier de la file d'attente

PRINT : Supprimer la file d'attente

PRINT : Tester la présence

SHARE : Tester la présence


ANSI.SYS : Tester la présence    Int 2Fh, code MUX 1Ah, Fct 00h    MUX

Cette fonction permet de tester la présence du driver de périphérique ANSI.SYS

Entrée :

AH	= 1Ah

AL	= 00h

Sortie :

Al	=FFh : ANSI.SYS installé


APPEND : Définir les paramètres de la commande    Int 2Fh, code MUX B7h, Fct 07h    MUX

Cette fonction est symétrique de la fonction 06h et permet de fixer les paramètres de fonctionnement de APPEND

Entrée :

AH	= B7h

AL	= 07h

BX	= Indicateur APPEND

Sortie :

néant

Remarque :

·	Les différents bits de l'indicateur représentent les modes opératoires. Les bits non mentionnés dans le tableau ci-dessous n'ont pas de signification et sont à 0 :

Bit	Signification

0	1 = APPEND est actif

12	1 =	Les répertoires APPEND ne sont pris en compte que si les noms des fichiers cherchés comportent des désignations explicites d'unité correspondant exactement à celles transmises à APPEND

13	1 = commutateur /PATH:ON actif

14	1 = commutateur /E actif

15	1 = commutateur /X:ON actif

·	Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé au préalable que APPEND est bien chargé


APPEND : Déterminer la compatibilité avec DOS 5    Int 2Fh, code MUX B7h, Fct 02h    MUX

Entrée :

AH	= B7h

AL	= 02h

Sortie :

AX	= FFFFh : compatible avec DOS 5

Remarque :

·	Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé au préalable que APPEND est bien installé


APPEND : Lire la liste des répertoires APPEND    Int 2Fh, code MUX B7h, Fct 04h    MUX

Grâce à cette fonction on peut prendre connaissance des différents répertoires confiés à APPEND pour la recherche des fichiers.

Entrée :

AH	= B7h

AL	= 04h

Sortie :

ES:DI	= Pointeur FAR sur le buffer des répertoires APPEND

Remarque :

·	Le buffer référencé par le pointeur en ES:DI contient les répertoires sous forme de chaîne ASCIIZ. Comme c'est le cas pour la commande PATH, les différentes répertoires sont séparés par des points virgules.

·	Le contenu de ce buffer ne doit pas être modifié par celui qui l'inspecte

·	Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé au préalable que APPEND est bien chargé


APPEND : Lire les paramètres de la commande    Int 2Fh, code MUX B7h, Fct 06h    MUX

Cette fonction permet de prendre connaissance des différents modes opératoires fixés par les paramètres de la ligne de commande au moment du chargement de APPEND.

Entrée :

AH	=B7h

AL	=06h

Sortie :

BX	= Indicateur APPEND

Remarque :

·	Les différents bits de l'indicateur retourné représentent les modes opératoires. Les bits non mentionnés dans le tableau ci-dessous n'ont pas de signification et sont à 0 :

Bit	Signification

0	1 = APPEND est actif

12	1 =	Les répertoires APPEND ne sont pris en compte que si les noms des fichiers cherchés comportent des désignations explicites d'unité correspondant exactement à celles transmises à APPEND

13	1 = commutateur /PATH:ON actif

14	1 = commutateur /E actif

15	1 = commutateur /X:ON actif

·	Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé au préalable que APPEND est bien chargé.


APPEND : Tester la présence    Int 2Fh, code MUX B7h, Fct 00h    MUX

Cette fonction permet de savoir si la partie résidente de la commande APPEND de DOS est chargée.

Entrée :

AH	= B7h

AL	= 00h

Sortie :

AL	= FFh : APPEND chargé


ASSIGN : Tester la présence    Int 2Fh, code MUX 06h, Fct 00h    MUX

Grâce à cette fonction un programme peut détecter si la partie résidente de la commande ASSIGN est chargée.

Entrée :

AH	= 06h

AL	= 00h

Sortie :

AL	= FFh : ASSIGN installé


DOSKEY : Prendre en compte la saisie d'un utilisateur    Int 2Fh, code MUX 48h, Fct 10h    MUX

Entrée :

AH	= 48h

AL	= 10h

DS:DX	= Pointeur sur structure de données

Sortie :

néant

Remarque :

·	La structure de données référencée par le pointeur en DS:DX s'étend sur 130 octets et mémorise entre autres les saisies de l'utilisateur. Elle doit être conforme au modèle suivant :

Offset	Signification	Type

00h	Taille du buffer de saisie doit être 128	1 OCTET

01h	Nombre de caractères lus - 1	1 OCTET

02h	Buffer de saisie 	128 OCTETS

Le nombre de caractères lus est reporté par DOSKEY dans la structure de données. Avant appel à DOSKEY, ce champ, contrairement à celui de la taille, n'a pas besoin d'être initialisé.


DOSKEY : Tester la présence    Int 2Fh, code MUX 48h, Fct 00h    MUX

Cette fonction permet de savoir si le programme de DOS DOSKEY.COM est chargé

Entrée :

AH	= 48h

AL	= 00h

Sortie :

AL	=00h : non installé

Remarque :

·	DOSKEY n'existe que depuis la version 5.0 de DOS

·	Notez qu'à l'inverse de fonctions semblables seule est définie la valeur qui indique que le programme DOSKEY.COM n'est pas chargé!


GRAFTABL : Tester la présence    Int 2Fh, code MUX B0h, Fct 00h    MUX

Cette fonction permet de savoir si la partie résidente de la commande GRAFTABL de DOS est chargée.

Entrée :

AH	= B0h

AL	= 00h

Sortie :

AL	= FFh : GRAFTABL chargé


HIMEM.SYS : Indiquer l'adresse d'appel des Fcts XMS    Int 2Fh, code MUX 43h, Fct 10h    MUX

Contrairement à ce qui se passe pour les autres gestionnaires de mémoire, les fonctions XMS de HIMEM.SYS ne sont pas déclenchées par des interruptions mais par une routine FAR CALL dont l'adresse est obtenue par le moyen de la présente fonction.

Entrée :

AH	= 43h

AL	= 10h

Sortie :

ES:BX = Pointeur FAR pour appeler les fonctions XMS

Remarque :

·	Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé au préalable que HIMEM.SYS est déjà installé


HIMEM.SYS : Tester la présence    Int 2Fh, code MUX 43h, Fct 00h    MUX

Cette fonction permet de tester la présence du driver de périphérique HIMEM.SYS qui permet d'accéder à la mémoire étendue selon le standard XMS.

Entrée :

AH	= 43h

AL	= 00h

Sortie :

AL	=80h: HIMEM.SYS installé

Remarque :

·	Notez bien que cette fonction contrairement à ses homologues qui effectuent également un test d'installation ne renvoie pas la valeur FFh en cas de succès mais la valeur 80h.

·	Pour assurer la compatibilité avec HIMEM.SYS, cet appel est aussi supporté par d'autres gestionnaires de mémoire XMS.


KEYB.COM : Définir la page de codes active    Int 2Fh, code MUX ADh, Fct 81h    MUX

Cette fonction permet de fixer la page de codes active.

Entrée :

AH	= Adh

AL	= 81

BX	= Numéro de la page de codes

Sortie :

Indicateur de retenue

= 0 : ok

=1 : erreur. Dans ce cas

AX=0001 "Page de codes inconnue"

Sortie :

néant

Remarque :

·	Les pages de codes suivantes sont reconnues par KEYB :

Code	Jeu de caractères

437	USA

850	Multilingue (tous pays européens )

860	Portugal

863	Canada français

865	Scandinavie

·	Cette fonction ne devrait être invoquée que si un appel à la fonction 80h a prouvé au préalable que KEYB.COM est installé


KEYB.COM : Lire le numéro de la version    Int 2Fh, code MUX ADh, Fct 80h    MUX

Cette fonction indique le numéro de la version du driver de clavier de DOS appelé KEYB.COM.

Entrée :

AH	= Adh

AL	= 80h

BX	=0

Sortie :

BH	= partie majeure du numéro de la version

BL	= partie mineure du même numéro

Remarque :

·	Si BH et BL sont égaux à 0, c'est que KEYB.COM n'est pas installé


MSCDEX > 1.0 : Ecrire des secteurs sur le CD-R    Int 2Fh, Code MUX 15h, Fct 09h    MUX

Cette fonction n'est disponible que pour des CD-R. Un lecteur CD-ROM ordinaire peut uniquement lire des secteurs. Cette fonction correspond à l'interruption 26h qui permet d'écrire des secteurs sur un lecteur quelconque. Contrairement à l'interruption 26h, l'appel de cette fonction ne doit être effectué que sur des lecteurs CD.

Entrée :

AH	= 15h

AL	= 09h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

SI:DI	= Numéro du premier secteur

DX	= Nombre de secteurs à écrire

ES:BX	= Pointeur FAR sur le buffer devant contenir les secteurs à écrire.

Sortie :

Flag Carry 	= 0 : Tout va bien

= 1 : Erreur dans ce cas

AL = 15: Lecteur spécifié incorrect ou

AL = 21: Lecteur pas prêt

Remarque :

·	Le buffer doit réserver 2048 octets pour stocker le contenu de chaque secteur à écrire.

·	Le numéro du premier secteur à lire est codé par SI et DI en tant que valeur 32 bits. SI stocke la valeur 16 bits de poids fort (Hi-Word) et DI la valeur de poids faible (Lo-Word).


MSCDEX > 1.0 : Fournir des informations sur le gestionnaire CD-ROM    Int 2Fh, Code MUX 15h, Fct 01h    MUX

Cette fonction remplit le buffer de l'appelant avec des informations sur les gestionnaires de périphérique qui, sur ordre de MSCDEX, ouvrent l'accès aux lecteurs CD-ROM installés. Ces informations aident à accéder directement aux gestionnaires en contournant MSCDEX.

Entrée :

AH	= 15h

AL	= 01h

ES:BX	= Pointeur FAR sur le buffer dans lequel la fonction inscrit les informations demandées

Sortie :

Aucune

Remarque :

·	Chaque entrée du buffer nécessite 5 octets. Si le buffer est alloué dynamiquement lors de l'exécution du programme, il faut d'abord déterminer le nombre de lecteurs CD-ROM installés avec la fonction 00h. Chaque lecteur CD-ROM occupe exactement une entrée du buffer. Si le buffer est alloué de façon statique, il faut prévoir une entrée pour chacun des 26 lecteurs CD-ROM (A: à Z:).

·	Les entrées du buffer acceptent un pointeur FAR sur l'en-tête du gestionnaire de périphérique concerné ainsi qu'un Unit Code. Ce code est requis car un gestionnaire de périphérique peut piloter plusieurs lecteurs CD-ROM émanant généralement du même fabricant. Pour différencier les divers lecteurs, il faut spécifier l'Unit Code avant l'appel du gestionnaire.

Offset	Contenu	Type

00h	Sub Unit Code pour le premier lecteur CD-ROM	1 BYTE

01h	Pointeur FAR sur l'en-tête du gestionnaire de périphérique concerné	1 DWORD

05h	Sub Unit Code pour le second lecteur CD-ROM	1 BYTE

06h	Pointeur FAR sur l'en-tête du gestionnaire de périphérique concerné	1 DWORD

0Ah	Sub Unit Code pour le troisième lecteur CD-ROM	1 BYTE

0Bh	Pointeur FAR sur l'en-tête du gestionnaire de périphérique concerné	1 DWORD


MSCDEX > 1.0 : Lire des secteurs du CD-ROM    Int 2Fh, Code MUX 15h, Fct 08h    MUX

Cette fonction correspond à l'interruption 25h qui lit les secteurs d'un lecteur quelconque. Contrairement à l'interruption 25h, l'appel de cette fonction ne doit concerner que des lecteurs CD-ROM.

Entrée :

AH	= 15h

AL	= 08h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

SI:DI	= Numéro du premier secteur

DX	= Nombre de secteurs à lire

ES:BX	= Pointeur FAR sur le buffer devant contenir les secteurs à lire

Sortie :

Carry-Flag 	= 0: Tout va bien

= 1 : Erreur dans ce cas

AL = 15 : Lecteur spécifié incorrect ou

AL = 21 : Lecteur pas prêt

Remarque :

·	Chaque secteur d'un CD-ROM renfermant 2048 octets, le buffer doit prévoir 2 Ko d'espace par secteur lu.

·	Le numéro du premier secteur à lire est codé par SI et DI en tant que valeur 32 bits. SI stocke la valeur 16 bits de poids fort (Hi-Word) et DI la valeur de poids faible (Lo-Word).


MSCDEX > 1.0 : Lire le nom du fichier Abstract    Int 2Fh, Code MUX 15h, Fct 03h    MUX

Chaque CD-ROM peut être doté d'un fichier Abstract qui résume le contenu du CD. Cette fonction permet à un programme de déterminer le nom de ce fichier.

Entrée :

AH	= 15h

AL	= 03h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

ES:BX	= Pointeur FAR sur le buffer devant contenir le nom.

Sortie :

Carry-Flag 	= 0: Tout va bien

= 1 : Erreur dans ce cas

AL = 15 : Lecteur spécifié incorrect

Remarque :

Le buffer transmis doit renfermer suffisamment d'espace pour 38 octets bien que le nom du fichier Abstract ne se compose que de 8 caractères pour le nom et de 3 caractères pour l'extension (selon le format High Sierra). Il prend par conséquence le format habituel "nnnnnnnn.eee". Dans le buffer, le nom doit être stocké comme une chaîne ASCIIZ terminé par un octet nul. Le fichier doit se trouver dans le répertoire principal du CD car le nom ne peut pas contenir de chemin.

Le CD ne dispose pas d'un fichier Abstract si la chaîne renvoyée est vide.


MSCDEX > 1.0 : Lire le nom du fichier Bibliographic Documentation    Int 2Fh, Code MUX 15h, Fct 04h    MUX

Chaque CD-ROM est doté d'un fichier Bibliographic Documentation qui indique la source des informations stockées sur le CD. Cette fonction permet à un programme de déterminer le nom de ce fichier.

Entrée :

AH	= 15h

AL	= 04h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

ES:BX	= Pointeur FAR sur le buffer devant contenir le nom.

Sortie :

Carry-Flag 	= 0: Tout va bien

= 1 : Erreur dans ce cas

AL = 15 : Lecteur spécifié incorrect

Remarque :

·	Le buffer transmis doit renfermer suffisamment d'espace pour 38 octets bien que le nom du fichier BibDoc ne se compose que de 8 caractères pour le nom et de 3 caractères pour l'extension (selon le format High Sierra). Il prend par conséquence le format habituel "nnnnnnnn.eee". Dans le buffer, le nom doit être stocké comme une chaîne ASCIIZ terminé par un octet nul. Le fichier doit se trouver dans le répertoire principal du CD car le nom ne peut pas contenir de chemin.

·	Le CD ne dispose pas d'un fichier BibDoc si la chaîne renvoyée est vide.


MSCDEX > 1.0 : Lire le nom du fichier de copyright    Int 2Fh, Code MUX 15h, Fct 02h    MUX

Un CD-ROM peut contenir ce qu'on appelle un fichier de copyright qui renseigne sur l'origine du CD. Cette fonction permet à un programme d'identifier le nom de ce fichier.

Entrée :

AH	= 15h

AL	= 02h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

ES:BX	= Pointeur FAR sur le buffer devant contenir le nom.

Sortie :

Flag Carry	= 0 : Tout va bien

= 1 : Erreur dans ce cas

AL= 15 : Lecteur spécifié non valide

Remarque :

Le buffer transmis doit renfermer suffisamment d'espace pour 38 octets bien que le nom du fichier de copyright ne se compose que de 8 caractères pour le nom et de 3 caractères pour l'extension (selon le format High Sierra). Il prend par conséquence le format habituel "nnnnnnnn.eee". Dans le buffer, le nom doit être stocké comme une chaîne ASCIIZ terminé par un octet nul. Le fichier doit se trouver dans le répertoire principal du CD car le nom ne peut pas contenir de chemin.

Le CD ne dispose pas d'un fichier de copyright si la chaîne renvoyée est vide.


MSCDEX > 1.0 : Lire le nombre de lecteurs CD-ROM    Int 2Fh, Code MUX 15h, Fct 00h    MUX

Cette fonction indique le nombre de lecteurs CD-ROM installés. Cette fonction exécute également un test d'installation de MSCDEX.

Entrée :

AH	= 15h

AL	= 00h

Sortie :

BX	= Nombre de lecteurs CD-ROM reconnus

CX	= Nom de périphérique du premier lecteur CD-ROM (0=A:, 1=B: etc.)

Remarque :

·	Un programme doit appeler cette fonction avant toutes les autres fonctions pour vérifier que MSCDEX est réellement installé. Avant l'appel de fonction, chargez la valeur 0 dans le registre BX et vérifiez si BX contient toujours 0 en fin d'appel. Si oui, MSCDEX ne peut pas être installé car il faut au moins un lecteur CD-ROM lorsque MSCDEX est en service.

·	Même si les noms de périphérique des lecteurs CD-ROM peuvent être communiqués en BX et CX après un appel de la fonction, il vaut mieux utiliser la fonction 0Dh dans la mesure où un gestionnaire MSCDEX de la version 2.0 et suivantes est disponible. Dans un réseau, il n'est pas toujours évident que les périphériques portent des noms consécutifs. Le premier lecteur CD-ROM D: peut être suivi d'un lecteur réseau E: auquel fait suite le second lecteur CD-ROM sous le nom F:. Il est conseillé d'appeler la fonction 0Dh car la fonction 00h ne fournit pas des informations précises.


MSCDEX > 1.0 : Lire VTOC du CD-ROM    Int 2Fh, Code MUX 15h, Fct 05h    MUX

Cette fonction permet à un programme de lire la table décrivant le contenu du CD-ROM.

Entrée :

AH	= 15h

AL	= 05h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

DX	= Numéro du volume dont il faut lire la VTOC.

ES:BX	= Pointeur FAR sur un buffer de 2 Ko devant stocker la VTOC

Sortie :

Carry-Flag 	= 0: Tout va bien, dans ce cas

= 1 : Erreur dans ce cas

AX = 1 : VTOC lue

AX = 00ffh : Il n'y a plus de volume donc il n'y a plus de VTOC à lire

AL= 15 : Lecteur spécifié incorrect ou

AL = 21 : Lecteur pas prêt

Remarque :

·	Une "Volume Table Of Contents" (VTOC) renfermant 2048 octets, il faut prévoir un buffer de 2 Ko pour stocker les données.

·	La plupart des CD-ROM ne sont équipés que d'un seul volume donc d'une seule VTOC. Des volumes multiples se rencontrent sur des CD multisession tels que des CD photo ou des CD MO.


MSCDEX > 2.0 : Définir le paramétrage par défaut du volume du CD-ROM    Int 2Fh, Code MUX 15h, Fct 0Eh, Sous-Fct 01h    MUX

MSCDEX active normalement le premier volume sur le CD lors de la définition d'un nouveau lecteur CD-ROM. Mais cette sous-fonction permet de changer ce paramétrage en spécifiant le second volume à activer par défaut.

Entrée :

AH	= 15h

AL	= 0Eh

BX	= 01h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

DX	= 0100h : Activer automatiquement le premier volume

DX	= 0200h : Activer automatiquement le second volume

Sortie :

FC	= 0: Tout va bien

= 1 : Erreur dans ce cas

AL = 1 : Sous-fonction inconnue ou

AL = 15 : Lecteur spécifié incorrect

Remarque :

·	Cette fonction ne présente de l'intérêt que dans des environnements opérant avec des CD-ROM japonais équipés généralement de deux volumes : le premier est destiné au texte en code ASCII normal, le deuxième au texte en code 2 Byte Kanji.


MSCDEX > 2.0 : Interroger le lecteur CD-ROM    Int 2Fh, Code MUX 15h, Fct 0Bh    MUX

Cette fonction permet de savoir si le lecteur spécifié est un lecteur CD-ROM contrôlé par MSCDEX.

Entrée :

AH	=	15h

AL	=	0Bh

CX	=	Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

Sortie :

AX = 0 : Ce n'est pas un lecteur CD-ROM

AX  <> 0 : C'est un lecteur CD-ROM

BX = ADADh

Remarque :

Après appel de la fonction, il convient tout d'abord de tester le contenu du registre BX pour confirmer que c'est bien MSCDEX qui a répondu à l'appel et non pas un autre gestionnaire MUX. Si BX contient la signature MSCDEX ADADh, le contenu de AX montre si le lecteur spécifié est oui ou non un lecteur CD-ROM.


MSCDEX > 2.0 : Lire le numéro de version MSCDEX    Int 2Fh, Code MUX 15h, Fct 0Ch    MUX

Un appel de cette fonction permet de connaître le numéro de version du gestionnaire MSCDEX installé.

Entrée :

AH	= 15h

AL	= 0Ch

Sortie :

BH	= Numéro de version majeure (1, 2 etc.)

BL	= Numéro de sous-version par exemple 10 pour 1.10 ou 2.10

Remarque :

·	Un appel de la fonction 00h doit précéder l'appel de cette fonction pour s'assurer que MSCDEX est réellement installé.

·	Avant l'appel de la fonction, le registre BX doit être chargé avec 0 car cette fonction n'est disponible que depuis la version 2.0 de MSCDEX. Si le registre contient toujours la même valeur après l'appel, cela signifie que la MSCDEX > 2.0 : Détermine les lecteurs CD-ROMfonction n'est pas exécutable. On a donc affaire à la version 1.x de MSCDEX.


MSCDEX > 2.0 : Lire les noms de périphérique des lecteurs CD-ROM    Int 2Fh, Code MUX 15h, Fct 0Dh    MUX

Cette fonction renvoie les noms de périphérique exacts des lecteurs CD-ROM gérés par MSCDEX. Cette fonction est à préférer par rapport à la fonction 00h car elle n'exige pas que tous les lecteurs CD-ROM soient énumérés de façon consécutive.

Entrée :

AH	= 15h

AL	= 0Dh

ES:BX	= Pointeur FAR sur le buffer contenant les noms de périphérique des lecteurs CD

Sortie :

ES:BX	= Pointeur FAR sur le buffer contenant les données concernées

Remarque :

·	Le buffer transmis doit fournir 1 octet d'espace à chaque lecteur CD-ROM. Cet octet renferme le nom de périphérique du lecteur sachant que 0 correspond à A:, 1 à B:, etc. Si le buffer est alloué dynamiquement pendant l'exécution du programme, il faut déterminer auparavant le nombre de lecteurs CD-ROM au moyen de la fonction 00h. Une entrée de buffer est requise pour chaque lecteur CD-ROM. Si le buffer est alloué de façon statique, il faut réserver une entrée pour chacun des 26 lecteurs CD-ROM (A: à Z:).


MSCDEX > 2.0 : Lire les paramètres par défaut du volume du CD-ROM    Int 2Fh, Code MUX 15h, Fct 0Eh, Sous-Fct 00h    MUX

MSCDEX active normalement le premier volume sur le CD lors de la définition d'un nouveau lecteur CD-ROM. Mais la sous-fonction 01h permet de changer ce paramétrage en spécifiant le second volume à activer par défaut. Cette fonction renvoie l'état en cours de cette définition.

Entrée :

AH	= 15h

AL	= 0Eh

BX	= 00h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

DX	= 00h

Sortie :

FC	= 0: Tout va bien, dans ce cas

DH	= 1 : premier volume actif

DH	= 2 : deuxième volume actif

DH	= 1 : Erreur dans ce cas

AL = 1: Sous-fonction inconnue ou

AL = 15: Lecteur spécifié incorrect

Remarque :

·	Cette fonction ne présente de l'intérêt que dans des environnements opérant avec des CD-ROM japonais équipés généralement de deux volumes : le premier est destiné au texte en code ASCII normal, le deuxième au texte en code 2 Byte Kanji.


MSCDEX > 2.0 : Lire une entrée de répertoire du CD-ROM    Int 2Fh, Code MUX 15h, Fct 0Fh    MUX

Cette fonction lit des entrées de répertoire d'un lecteur CD-ROM.

Entrée :

AH	= 15h

AL	= 0Fh

CL	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

CH	= Flag Copy	0 : Copier une entrée de répertoire sans aucune modification

1 : Convertir l'entrée de répertoire en une structure MSCDEX (toutes les différences entre ISO 9660 et High Sierra sont prises en compte)

ES:BX	= Pointeur FAR sur le buffer contenant les noms de fichier

SI:DI	= Pointeur FAR sur le buffer stockant l'entrée de répertoire

Sortie :

FC 	= 0: Tout va bien

= 1 : Erreur dans ce cas

AL = 2 : Fichier non trouvé

AL = 15: Lecteur spécifié incorrect

AL = 18: Mémoire insuffisante pour MSCDEX

AL = 21: Lecteur pas prêt

Remarque :

Le chemin et le nom de fichier renvoyés par la fonction à l'aide d'un pointeur sur ES:BX doivent être une chaîne ASCIIZ ne contenant que des caractères autorisés par le format High Sierra ou par la norme ISO 9660. Les caractères génériques tels que * et ? sont expressément interdits de même que les renvois aux répertoires (.) et (..).

Selon la valeur spécifiée en CH, MSCDEX renvoie l'entrée de répertoire sous deux formes. Dans sa forme brute (CH=0), l'entrée de répertoire est copiée en mémoire par le CD-ROM sans aucune modification. Mais les entrées de répertoire peuvent être données au format High Sierra ou ISO 9660, selon le CD-ROM utilisé. Le buffer doit disposer dans ce cas d'au moins 255 octets.

Si CH contient la valeur 1, MSCDEX construit l'entrée de répertoire au format High Sierra ou ISO 9660 sur une structure commune à configurer pour un buffer de 280 octets. L'entrée de répertoire renvoyée présente dans ce cas la structure suivante :

Offset	Contenu	Type

00h	Importance des attributs étendus (XAR) en tant que facteur de la taille de bloc logique	1 BYTE

01h	Numéro de bloc logique du premier bloc du fichier	1 DWORD

05h	Taille des blocs logiques en octet (2048 octets, mais 512 et 1024 octets sont admis)	1 WORD

07h	Taille du fichier en octets	1 DWORD

0Bh	Date et heure d'enregistrement du fichier	7 BYTE

12h	Flags de fichier	1 BYTE

13h	Interleave Size	1 BYTE

14h	Interleave Skip	1 BYTE

15h	Numéro Volume Set	1 WORD

17h	Longueur du nom de fichier en octets	1 BYTE

18h	Numéro de fichier sous forme de chaîne ASCIIZ	38 BYTE

3Ah	Numéro de version du fichier	1 WORD

3Ch	Nombre d'octets enregistrés en plus dans le champ suivant	1 WORD

3Eh	Octets additionnels enregistrés	220 BYTE


MSCDEX > 2.1 : Envoyer une requête au driver du CD-ROM    Int 2Fh, Code MUX 15h, Fct 10h    MUX

Cette fonction permet à un programme d'envoyer une requête au gestionnaire de périphérique d'un lecteur CD-ROM sans connaître l'adresse du gestionnaire ni le code Sub Unit du lecteur CD-ROM concerné.

Entrée :

AH	= 15h

AL	= 10h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

ES:BX	= Pointeur FAR sur le buffer contenant la requête du gestionnaire de périphérique

Sortie :

Aucune

Remarque :

·	Microsoft conseille d'utiliser cette fonction pour communiquer avec le gestionnaire de périphérique d'un lecteur CD-ROM. Elle permet au programmeur d'adresser un gestionnaire de périphérique sans connaître l'adresse ni le code Sub Unit du lecteur concerné. Lors de l'appel de cette fonction, MSCDEX inscrit automatiquement cette information dans le bloc Device Request spécifié et détermine le gestionnaire de périphérique adéquat à partir du nom de lecteur.


PRINT : Ajouter un fichier à la file d'attente    Int 2Fh, code MUX 01h, Fct 01h    MUX

Cette fonction permet à un programme d'ajouter un fichier à la fin de la file en attente d'impression pour qu'il soit imprimé par PRINT en tâche de fond.

Entrée :

AH	= 01h

Al	= 01h

DS:DX	= PPointeur FAR sur une structure de données contenant des informations sur le fichier

Sortie :

Indicateur de retenue (flag Carry)

= 0 : ok

=1 : erreur, dans ce cas AX=code d'erreur

Remarque :

·	La structure de données référencée par DS:DX comporte 5 octets et doit être conforme au modèle suivant :

Offset	Signification	Type

00h	0	1 Byte

01h	Pointeur FAR sur chaîne ASCIIZ contenant le nom du fichier	1 Pointeur FAR

Les caractères génériques ne sont pas autorisés dans le nom, mais les désignations de lecteur et de chemin d'accès sont permises.

En cas d'erreur, le code retourné est le suivant :

0001h	Fonction inconnue

0002h	Fichier non trouvé

0003h	Chemin d'accès non trouvé

0004h	Trop de fichiers ouverts

0005h	Accès au fichier refusé

0008h	File d'attente saturée

000Fh	Périphérique inconnu

Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé que la partie résidente de PRINT était installée


PRINT : Déterminer l'imprimante en service    Int 2Fh, code MUX 01h, Fct 06h    MUX

Tant qu'il reste au moins un fichier dans la file d'attente, cette fonction indique l'imprimante qui effectue l'impression.

Entrée :

AH	= 01h

AL	= 06h

Sortie :

Indicateur de retenue (flag carry)

=0 : file d'attente vide

=1 : File non vide, dans ce cas AX=0008h

DS:SI = Pointeur FAR sur l'en-tête du driver de périphérique

Remarque :

·	La manière dont cette fonction retourne son résultat est un peu bizarre. L'information cherchée, à savoir le pointeur sur l'en-tête du périphérique, n'est obtenue qu'en liaison avec un indicateur de retenue armé et le code d'erreur 0008 (file non vide). Si la file d'attente est vide et si de ce fait le pointeur n'est pas disponible, l'indicateur de retenue est désarmé.


PRINT : Interrompre l'impression pour tester son état    Int 2Fh, code MUX 01h, Fct 04h    MUX

Cette fonction permet de connaître le contenu courant de la file d'attente et le nombre d'erreurs survenues

Entrée :

AH	= 01h

AL	= 04h

Sortie :

DX	= Compteur d 'erreurs

DS:SI	= pointeur FAR sur la file d'attente

Remarque :

·	L'impression est interrompue et ne reprendra que si on fait appel à la fonction 05h.

·	Le pointeur retourné en DS:SI référence le buffer dans lequel DOS maintient la file d'attente comme une suite d'éléments de 64 octets. Chacun de ces éléments contient la chaîne ASCIIZ du nom du fichier à imprimer. Le dernier élément de la liste commence par un caractère nul.

·	La liste peut être inspectée mais elle ne doit pas être modifiée.

·	Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé au préalable que la partie résidente de PRINT est déjà installée.


PRINT : Reprendre l'impression    Int 2Fh, code MUX 01h, Fct 05h    MUX

Cette fonction permet de reprendre l'impression après interruption par la fonction 04h.

Entrée :

AH	= 01h

AL	= 05h

Sortie :

néant

Remarque :

·	L'usage de cette fonction n'a évidemment de sens que si on a invoqué précédemment la fonction 04h.


PRINT : Retirer un fichier de la file d'attente    Int 2Fh, code MUX 01h, Fct 02h    MUX

Grâce à cette fonction un ou plusieurs fichiers peuvent être supprimés dans la file d'attente. Même le fichier en cours d'impression peut être retiré, ce qui arrête évidemment son impression.

Entrée :

AH	= 01h

AL	= 02h

DS:DX	= Pointeur sur nom de fichier sous forme de chaîne ASCIIZ

Sortie :

Indicateur de retenue

=0 : ok

=1 : Erreur, dans ce cas

AX= code d'erreur

0001h	Fonction inconnue

0002h	Fichier non trouvé

0003h	Chemin d'accès non trouvé

0004h	Trop de fichiers ouverts

0005h	Accès au fichier refusé

0008h	File d'attente saturée

000Fh	Périphérique inconnu

Remarque :

·	La structure de données référencée par DS:DX comporte 5 octets et doit être conforme au modèle suivant :

Offset	Signification	Type

00h	0	1 Byte

01h	Pointeur FAR sur chaîne ASCIIZ contenant le nom du fichier	1 Pointeur FAR

·	Les caractères génériques sont permis dans le nom de fichier indiqué, ce qui permet en un seul appel de retirer plusieurs fichiers de la file d'attente

·	Le seul code d'erreur possible est 0002h, "Fichier non trouvé", qui indique que le fichier en question n'est pas dans la file d'attente.

·	Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé que la partie résidente de PRINT était installée


PRINT : Supprimer la file d'attente    Int 2Fh, code MUX 01h, Fct 03h    MUX

Tous les fichiers sont retirés de la file d'attente et l'impression du fichier en cours est stoppée.

Entrée :

AH	= 01h

AL	= 03h

Sortie :

néant

Remarque :

·	Cette fonction ne doit être invoquée que si un appel à la fonction 00h a prouvé au préalable que la partie résidente de PRINT est déjà installée


PRINT : Tester la présence    Int 2Fh, code MUX 01h, Fct 00h    MUX

Grâce à cette fonction un programme peut détecter si la partie résidente de la commande PRINT de DOS est chargée.

Entrée :

AH	= 01h

Al	= 00h

Sortie :

AL 	= FFh : PRINT installé

Remarque :

·	Lorsque PRINT est installé, la fonction retourne la valeur FFh en AL. Ce n'est qu'à cette condition que les autres fonctions de PRINT pourront être invoquées. L'exploitation des fonctions de PRINT suppose donc que cette fonction ait été déclenchée au préalable.


SHARE : Tester la présence    Int 2Fh, code MUX 10h, Fct 00h    MUX

Cette fonction permet de tester la présence de la partie résidente de la commande SHARE de DOS.

Entrée :

AH	= 10h

AL	= 00h

Sortie :

Al	=FFh : SHARE installé


CD-ROM

Définir le paramétrage par défaut du volume du CD-ROM

Ecrire des secteurs sur le CD-R

Envoyer une requête au driver du CD-ROM

Interroger le lecteur CD-ROM

Lire des informations sur le gestionnaire CD-ROM

Lire des secteurs du CD-ROM

Lire le nom du fichier Abstract

Lire le nom du fichier Bibliographic Documentation

Lire le nom du fichier de copyright

Lire le nombre de lecteurs CD-ROM

Lire le numéro de version MSCDEX

Lire les noms de périphérique du lecteur CD-ROM

Lire les paramètres par défaut du volume du CD-ROM

Lire une entrée de répertoire du CD-ROM

Lire VTOC du CD-ROM


Définir le paramétrage par défaut du volume du CD-ROM    Int 2Fh, Code MUX 15h, Fct 0Eh, Sous-fct 01h    MSCDEX > 2.0

MSCDEX active normalement le premier volume sur le CD lors de la définition d'un nouveau lecteur CD-ROM. Mais cette sous-fonction permet de changer ce paramétrage en spécifiant le second volume à activer par défaut.

Entrée :

AH	= 15h

AL	= 0Eh

BX	= 01h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

DX	= 0100h : Activer automatiquement le premier volume

DX	= 0200h : Activer automatiquement le second volume

Sortie :

FC	= 0: Tout va bien

= 1 : Erreur dans ce cas

AL = 1 : Sous-fonction inconnue ou

AL = 15 : Lecteur spécifié incorrect

Remarque :

·	Cette fonction ne présente de l'intérêt que dans des environnements opérant avec des CD-ROM japonais équipés généralement de deux volumes : le premier est destiné au texte en code ASCII normal, le deuxième au texte en code 2 Byte Kanji.


Ecrire des secteurs sur le CD-R    Int 2Fh, Code MUX 15h, Fct 09h    MSCDEX > 1.0

Cette fonction n'est disponible que pour des CD-R. Un lecteur CD-ROM ordinaire peut uniquement lire des secteurs. Cette fonction correspond à l'interruption 26h qui permet d'écrire des secteurs sur un lecteur quelconque. Contrairement à l'interruption 26h, l'appel de cette fonction ne doit être effectué que sur des lecteurs CD.

Entrée :

AH	= 15h

AL	= 09h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

SI:DI	= Numéro du premier secteur

DX	= Nombre de secteurs à écrire

ES:BX	= Pointeur FAR sur le buffer devant contenir les secteurs à écrire.

Sortie :

Flag Carry 	= 0 : Tout va bien

= 1 : Erreur dans ce cas

AL = 15: Lecteur spécifié incorrect ou

AL = 21: Lecteur pas prêt

Remarque :

·	Le buffer doit réserver 2048 octets pour stocker le contenu de chaque secteur à écrire.

·	Le numéro du premier secteur à lire est codé par SI et DI en tant que valeur 32 bits. SI stocke la valeur 16 bits de poids fort (Hi-Word) et DI la valeur de poids faible (Lo-Word).


Envoyer une requête au driver du CD-ROM    Int 2Fh, Code MUX 15h, Fct 10h    MSCDEX > 2.1

Cette fonction permet à un programme d'envoyer une requête au gestionnaire de périphérique d'un lecteur CD-ROM sans connaître l'adresse du gestionnaire ni le code Sub Unit du lecteur CD-ROM concerné.

Entrée :

AH	= 15h

AL	= 10h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

ES:BX	= Pointeur FAR sur le buffer contenant la requête du gestionnaire de périphérique

Sortie :

Aucune

Remarque :

·	Microsoft conseille d'utiliser cette fonction pour communiquer avec le gestionnaire de périphérique d'un lecteur CD-ROM. Elle permet au programmeur d'adresser un gestionnaire de périphérique sans connaître l'adresse ni le code Sub Unit du lecteur concerné. Lors de l'appel de cette fonction, MSCDEX inscrit automatiquement cette information dans le bloc Device Request spécifié et détermine le gestionnaire de périphérique adéquat à partir du nom de lecteur.


Interroger le lecteur CD-ROM    Int 2Fh, Code MUX 15h, Fct 0Bh    MSCDEX > 2.0

Cette fonction permet de savoir si le lecteur spécifié est un lecteur CD-ROM contrôlé par MSCDEX.

Entrée :

AH	=	15h

AL	=	0Bh

CX	=	Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

Sortie :

AX = 0 : Ce n'est pas un lecteur CD-ROM

AX  <> 0 : C'est un lecteur CD-ROM

BX = ADADh

Remarque :

Après appel de la fonction, il convient tout d'abord de tester le contenu du registre BX pour confirmer que c'est bien MSCDEX qui a répondu à l'appel et non pas un autre gestionnaire MUX. Si BX contient la signature MSCDEX ADADh, le contenu de AX montre si le lecteur spécifié est oui ou non un lecteur CD-ROM.


Lire des informations sur le gestionnaire CD-ROM    Int 2Fh, Code MUX 15h, Fct 01h    MSCDEX > 1.0

Cette fonction remplit le buffer de l'appelant avec des informations sur les gestionnaires de périphérique qui, sur ordre de MSCDEX, ouvrent l'accès aux lecteurs CD-ROM installés. Ces informations aident à accéder directement aux gestionnaires en contournant MSCDEX.

Entrée :

AH	= 15h

AL	= 01h

ES:BX	= Pointeur FAR sur le buffer dans lequel la fonction inscrit les informations demandées

Sortie :

Aucune

Remarque :

·	Chaque entrée du buffer nécessite 5 octets. Si le buffer est alloué dynamiquement lors de l'exécution du programme, il faut d'abord déterminer le nombre de lecteurs CD-ROM installés avec la fonction 00h. Chaque lecteur CD-ROM occupe exactement une entrée du buffer. Si le buffer est alloué de façon statique, il faut prévoir une entrée pour chacun des 26 lecteurs CD-ROM (A: à Z:).

·	Les entrées du buffer acceptent un pointeur FAR sur l'en-tête du gestionnaire de périphérique concerné ainsi qu'un Unit Code. Ce code est requis car un gestionnaire de périphérique peut piloter plusieurs lecteurs CD-ROM émanant généralement du même fabricant. Pour différencier les divers lecteurs, il faut spécifier l'Unit Code avant l'appel du gestionnaire.

Offset	Contenu	Type

00h	Sub Unit Code pour le premier lecteur CD-ROM	1 BYTE

01h	Pointeur FAR sur l'en-tête du gestionnaire de périphérique concerné	1 DWORD

05h	Sub Unit Code pour le second lecteur CD-ROM	1 BYTE

06h	Pointeur FAR sur l'en-tête du gestionnaire de périphérique concerné	1 DWORD

0Ah	Sub Unit Code pour le troisième lecteur CD-ROM	1 BYTE

0Bh	Pointeur FAR sur l'en-tête du gestionnaire de périphérique concerné	1 DWORD


Lire des secteurs du CD-ROM    Int 2Fh, Code MUX 15h, Fct 08h    MSCDEX > 1.0

Cette fonction correspond à l'interruption 25h qui lit les secteurs d'un lecteur quelconque. Contrairement à l'interruption 25h, l'appel de cette fonction ne doit concerner que des lecteurs CD-ROM.

Entrée :

AH	= 15h

AL	= 08h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

SI:DI	= Numéro du premier secteur

DX	= Nombre de secteurs à lire

ES:BX	= Pointeur FAR sur le buffer devant contenir les secteurs à lire

Sortie :

Carry-Flag 	= 0: Tout va bien

= 1 : Erreur dans ce cas

AL = 15 : Lecteur spécifié incorrect ou

AL = 21 : Lecteur pas prêt

Remarque :

·	Chaque secteur d'un CD-ROM renfermant 2048 octets, le buffer doit prévoir 2 Ko d'espace par secteur lu.

·	Le numéro du premier secteur à lire est codé par SI et DI en tant que valeur 32 bits. SI stocke la valeur 16 bits de poids fort (Hi-Word) et DI la valeur de poids faible (Lo-Word).


Lire le nom du fichier Abstract    Int 2Fh, Code MUX 15h, Fct 03h    MSCDEX > 1.0

Chaque CD-ROM peut être doté d'un fichier Abstract qui résume le contenu du CD. Cette fonction permet à un programme de déterminer le nom de ce fichier.

Entrée :

AH	= 15h

AL	= 03h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

ES:BX	= Pointeur FAR sur le buffer devant contenir le nom.

Sortie :

Carry-Flag 	= 0: Tout va bien

= 1 : Erreur dans ce cas

AL = 15 : Lecteur spécifié incorrect

Remarque :

Le buffer transmis doit renfermer suffisamment d'espace pour 38 octets bien que le nom du fichier Abstract ne se compose que de 8 caractères pour le nom et de 3 caractères pour l'extension (selon le format High Sierra). Il prend par conséquence le format habituel "nnnnnnnn.eee". Dans le buffer, le nom doit être stocké comme une chaîne ASCIIZ terminé par un octet nul. Le fichier doit se trouver dans le répertoire principal du CD car le nom ne peut pas contenir de chemin.

Le CD ne dispose pas d'un fichier Abstract si la chaîne renvoyée est vide.


Lire le nom du fichier Bibliographic Documentation    Int 2Fh, Code MUX 15h, Fct 04h    MSCDEX > 1.0

Chaque CD-ROM est doté d'un fichier Bibliographic Documentation qui indique la source des informations stockées sur le CD. Cette fonction permet à un programme de déterminer le nom de ce fichier.

Entrée :

AH	= 15h

AL	= 04h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

ES:BX	= Pointeur FAR sur le buffer devant contenir le nom.

Sortie :

Carry-Flag 	= 0: Tout va bien

= 1 : Erreur dans ce cas

AL = 15 : Lecteur spécifié incorrect

Remarque :

·	Le buffer transmis doit renfermer suffisamment d'espace pour 38 octets bien que le nom du fichier BibDoc ne se compose que de 8 caractères pour le nom et de 3 caractères pour l'extension (selon le format High Sierra). Il prend par conséquence le format habituel "nnnnnnnn.eee". Dans le buffer, le nom doit être stocké comme une chaîne ASCIIZ terminé par un octet nul. Le fichier doit se trouver dans le répertoire principal du CD car le nom ne peut pas contenir de chemin.

·	Le CD ne dispose pas d'un fichier BibDoc si la chaîne renvoyée est vide.


Lire le nom du fichier de copyright    Int 2Fh, Code MUX 15h, Fct 02h    MSCDEX > 1.0

Un CD-ROM peut contenir ce qu'on appelle un fichier de copyright qui renseigne sur l'origine du CD. Cette fonction permet à un programme d'identifier le nom de ce fichier.

Entrée :

AH	= 15h

AL	= 02h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

ES:BX	= Pointeur FAR sur le buffer devant contenir le nom.

Sortie :

Flag Carry	= 0 : Tout va bien

= 1 : Erreur dans ce cas

AL= 15 : Lecteur spécifié non valide

Remarque :

Le buffer transmis doit renfermer suffisamment d'espace pour 38 octets bien que le nom du fichier de copyright ne se compose que de 8 caractères pour le nom et de 3 caractères pour l'extension (selon le format High Sierra). Il prend par conséquence le format habituel "nnnnnnnn.eee". Dans le buffer, le nom doit être stocké comme une chaîne ASCIIZ terminé par un octet nul. Le fichier doit se trouver dans le répertoire principal du CD car le nom ne peut pas contenir de chemin.

Le CD ne dispose pas d'un fichier de copyright si la chaîne renvoyée est vide.


Lire le nombre de lecteurs CD-ROM    Int 2Fh, Code MUX 15h, Fct 00h    MSCDEX > 1.0

Cette fonction indique le nombre de lecteurs CD-ROM installés. Cette fonction exécute également un test d'installation de MSCDEX.

Entrée :

AH	= 15h

AL	= 00h

Sortie :

BX	= Nombre de lecteurs CD-ROM reconnus

CX	= Nom de périphérique du premier lecteur CD-ROM (0=A:, 1=B: etc.)

Remarque :

·	Un programme doit appeler cette fonction avant toutes les autres fonctions pour vérifier que MSCDEX est réellement installé. Avant l'appel de fonction, chargez la valeur 0 dans le registre BX et vérifiez si BX contient toujours 0 en fin d'appel. Si oui, MSCDEX ne peut pas être installé car il faut au moins un lecteur CD-ROM lorsque MSCDEX est en service.

·	Même si les noms de périphérique des lecteurs CD-ROM peuvent être communiqués en BX et CX après un appel de la fonction, il vaut mieux utiliser la fonction 0Dh dans la mesure où un gestionnaire MSCDEX de la version 2.0 et suivantes est disponible. Dans un réseau, il n'est pas toujours évident que les périphériques portent des noms consécutifs. Le premier lecteur CD-ROM D: peut être suivi d'un lecteur réseau E: auquel fait suite le second lecteur CD-ROM sous le nom F:. Il est conseillé d'appeler la fonction 0Dh car la fonction 00h ne fournit pas des informations précises.


Lire le numéro de version MSCDEX    Int 2Fh, Code MUX 15h, Fct 0Ch    MSCDEX > 2.0

Un appel de cette fonction permet de connaître le numéro de version du gestionnaire MSCDEX installé.

Entrée :

AH	= 15h

AL	= 0Ch

Sortie :

BH	= Numéro de version majeure (1, 2 etc.)

BL	= Numéro de sous-version par exemple 10 pour 1.10 ou 2.10

Remarque :

·	Un appel de la fonction 00h doit précéder l'appel de cette fonction pour s'assurer que MSCDEX est réellement installé.

·	Avant l'appel de la fonction, le registre BX doit être chargé avec 0 car cette fonction n'est disponible que depuis la version 2.0 de MSCDEX. Si le registre contient toujours la même valeur après l'appel, cela signifie que la MSCDEX > 2.0 : Détermine les lecteurs CD-ROMfonction n'est pas exécutable. On a donc affaire à la version 1.x de MSCDEX.


Lire les noms de périphérique du lecteur CD-ROM    Int 2Fh, Code MUX 15h, Fct 0Dh    MSCDEX > 2.0

Cette fonction renvoie les noms de périphérique exacts des lecteurs CD-ROM gérés par MSCDEX. Cette fonction est à préférer par rapport à la fonction 00h car elle n'exige pas que tous les lecteurs CD-ROM soient énumérés de façon consécutive.

Entrée :

AH	= 15h

AL	= 0Dh

ES:BX	= Pointeur FAR sur le buffer contenant les noms de périphérique des lecteurs CD

Sortie :

ES:BX	= Pointeur FAR sur le buffer contenant les données concernées

Remarque :

·	Le buffer transmis doit fournir 1 octet d'espace à chaque lecteur CD-ROM. Cet octet renferme le nom de périphérique du lecteur sachant que 0 correspond à A:, 1 à B:, etc. Si le buffer est alloué dynamiquement pendant l'exécution du programme, il faut déterminer auparavant le nombre de lecteurs CD-ROM au moyen de la fonction 00h. Une entrée de buffer est requise pour chaque lecteur CD-ROM. Si le buffer est alloué de façon statique, il faut réserver une entrée pour chacun des 26 lecteurs CD-ROM (A: à Z:).


Lire les paramètres par défaut du volume du CD-ROM    Int 2Fh, Code MUX 15h, Fct 0Eh, Sous-fct 00h    MSCDEX > 2.0

MSCDEX active normalement le premier volume sur le CD lors de la définition d'un nouveau lecteur CD-ROM. Mais la sous-fonction 01h permet de changer ce paramétrage en spécifiant le second volume à activer par défaut. Cette fonction renvoie l'état en cours de cette définition.

Entrée :

AH	= 15h

AL	= 0Eh

BX	= 00h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

DX	= 00h

Sortie :

FC	= 0: Tout va bien, dans ce cas

DH	= 1 : premier volume actif

DH	= 2 : deuxième volume actif

DH	= 1 : Erreur dans ce cas

AL = 1: Sous-fonction inconnue ou

AL = 15: Lecteur spécifié incorrect

Remarque :

·	Cette fonction ne présente de l'intérêt que dans des environnements opérant avec des CD-ROM japonais équipés généralement de deux volumes : le premier est destiné au texte en code ASCII normal, le deuxième au texte en code 2 Byte Kanji.


Lire une entrée de répertoire du CD-ROM    Int 2Fh, Code MUX 15h, Fct 0Fh    MSCDEX > 2.0

Cette fonction lit des entrées de répertoire d'un lecteur CD-ROM.

Entrée :

AH	= 15h

AL	= 0Fh

CL	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

CH	= Flag Copy	0 : Copier une entrée de répertoire sans aucune modification

1 : Convertir l'entrée de répertoire en une structure MSCDEX (toutes les différences entre ISO 9660 et High Sierra sont prises en compte)

ES:BX	= Pointeur FAR sur le buffer contenant les noms de fichier

SI:DI	= Pointeur FAR sur le buffer stockant l'entrée de répertoire

Sortie :

FC 	= 0: Tout va bien

= 1 : Erreur dans ce cas

AL = 2 : Fichier non trouvé

AL = 15: Lecteur spécifié incorrect

AL = 18: Mémoire insuffisante pour MSCDEX

AL = 21: Lecteur pas prêt

Remarque :

Le chemin et le nom de fichier renvoyés par la fonction à l'aide d'un pointeur sur ES:BX doivent être une chaîne ASCIIZ ne contenant que des caractères autorisés par le format High Sierra ou par la norme ISO 9660. Les caractères génériques tels que * et ? sont expressément interdits de même que les renvois aux répertoires (.) et (..).

Selon la valeur spécifiée en CH, MSCDEX renvoie l'entrée de répertoire sous deux formes. Dans sa forme brute (CH=0), l'entrée de répertoire est copiée en mémoire par le CD-ROM sans aucune modification. Mais les entrées de répertoire peuvent être données au format High Sierra ou ISO 9660, selon le CD-ROM utilisé. Le buffer doit disposer dans ce cas d'au moins 255 octets.

Si CH contient la valeur 1, MSCDEX construit l'entrée de répertoire au format High Sierra ou ISO 9660 sur une structure commune à configurer pour un buffer de 280 octets. L'entrée de répertoire renvoyée présente dans ce cas la structure suivante :

Offset	Contenu	Type

00h	Importance des attributs étendus (XAR) en tant que facteur de la taille de bloc logique	1 BYTE

01h	Numéro de bloc logique du premier bloc du fichier	1 DWORD

05h	Taille des blocs logiques en octet (2048 octets, mais 512 et 1024 octets sont admis)	1 WORD

07h	Taille du fichier en octets	1 DWORD

0Bh	Date et heure d'enregistrement du fichier	7 BYTE

12h	Flags de fichier	1 BYTE

13h	Interleave Size	1 BYTE

14h	Interleave Skip	1 BYTE

15h	Numéro Volume Set	1 WORD

17h	Longueur du nom de fichier en octets	1 BYTE

18h	Numéro de fichier sous forme de chaîne ASCIIZ	38 BYTE

3Ah	Numéro de version du fichier	1 WORD

3Ch	Nombre d'octets enregistrés en plus dans le champ suivant	1 WORD

3Eh	Octets additionnels enregistrés	220 BYTE


Lire VTOC du CD-ROM    Int 2Fh, Code MUX 15h, Fct 05h    MSCDEX > 1.0

Cette fonction permet à un programme de lire la table décrivant le contenu du CD-ROM.

Entrée :

AH	= 15h

AL	= 05h

CX	= Nom de périphérique du lecteur CD-ROM à adresser (0=A:, 1=B: etc.)

DX	= Numéro du volume dont il faut lire la VTOC.

ES:BX	= Pointeur FAR sur un buffer de 2 Ko devant stocker la VTOC

Sortie :

Carry-Flag 	= 0: Tout va bien, dans ce cas

= 1 : Erreur dans ce cas

AX = 1 : VTOC lue

AX = 00ffh : Il n'y a plus de volume donc il n'y a plus de VTOC à lire

AL= 15 : Lecteur spécifié incorrect ou

AL = 21 : Lecteur pas prêt

Remarque :

·	Une "Volume Table Of Contents" (VTOC) renfermant 2048 octets, il faut prévoir un buffer de 2 Ko pour stocker les données.

·	La plupart des CD-ROM ne sont équipés que d'un seul volume donc d'une seule VTOC. Des volumes multiples se rencontrent sur des CD multisession tels que des CD photo ou des CD MO.


Mémoire étendue XMS

Activation globale de l'adresse de ligne A20

Agrandir ou diminuer le bloc de mémoire étendue (EMB) alloué

Allouer un bloc de mémoire étendue (EMB)

Allouer un bloc de mémoire supérieure (UMB)

Copier la mémoire

Déverrouiller le bloc de mémoire étendue (EMB)

Fermeture globale de la ligne d'adresse A20

Libération locale de la ligne d'adresse A20

Libérer la HMA

Libérer le bloc de mémoire supérieure (UMB) alloué

Libérer un bloc de mémoire étendue (EMB)

Lire l'état de la ligne d'adresse A20

Lire la taille de la mémoire étendue disponible

Lire le numéro de version XMS

Lire les informations sur un EMB

Protéger un bloc de mémoire étendue (EMB) contre un déplacement

Réserver une HMA

Verrouillage local de la ligne d'adresse A20


Activation globale de l'adresse de ligne A20    Int 2Fh, Fct 03h    XMA

Cette fonction permet d'activer l'adresse A20 pour qu'un accès direct à la HMA puisse également avoir lieu à partir du mode réel du processeur.

Entrée :

AH = 	03h

Sortie :

AX =	0001h : 	Fonction exécutée

0000h : 	Erreur, dans ce cas

BL = Numéro d'erreur

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Cette fonction doit être appelée avant ou après la demande portant sur la HMA pour s'assurer qu'il est également possible d'accéder à la HMA à partir du mode réel via l'adresse de segment FFFFh.

·	Avant de terminer un programme, la ligne d'adresse A20 doit être clôturée avec la fonction 04h pour éviter tout risque de débordement de segment dans le programme suivant.

·	L'activation de la ligne d'adresse A20 constitue un processus relativement long selon le système informatique dont vous disposez. Vous devez donc éviter d'appeler trop souvent cette fonction.


Agrandir ou diminuer le bloc de mémoire étendue (EMB) alloué    Int 2Fh, Fct 0Fh    XMS

Cette fonction permet de modifier la taille d'un EMB.

Entrée :

AH = 	0Fh

BX = 	Nouvelle taille de l'EMB en Ko

DX = 	Handle de l'EMB

Sortie :

AX = 	0001h :	Fonction exécutée

0000h :	Erreur, dans ce cas

BL = Numéro d'erreur:

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	L'EMB spécifié doit être verrouillé pour pouvoir être agrandi ou diminué.

·	Le contenu du bloc se perd définitivement si la taille de l'EMB est réduite.


Allouer un bloc de mémoire étendue (EMB)    Int 2Fh, Fct 09h    XMS

Un programme peut se servir de cette fonction pour réserver un bloc de mémoire étendue.

Entrée :

AH = 	09h

DX = 	Taille de la zone sollicitée en Ko

Sortie :

AX = 	0001h :	Fonction exécutée

0000h :	Erreur, dans ce cas

BL = Numéro d'erreur :

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

DX = 	Handle sur le prochain accès à l'EMB si un tel bloc peut être alloué

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Pour tous les appels ultérieurs, le handle retourné sert à accéder à l'EMB et doit être sauvegardé dans le programme. S'il est perdu, il faut réinitialiser l'ordinateur ou effectuer un démarrage à chaud pour libérer l'EMB concerné.

·	Le XMS ne peut répondre aux besoins d'un EMB que s'il existe un bloc de mémoire suffisamment grand et un handle. Mais comme le nombre de handles est limité (32 en règle générale), il faut toujours essayer d'allouer des EMB suffisamment grands pour éviter d'appeler trop souvent la fonction et d'utiliser trop de handles.

·	Avant de terminer un programme, il faut libérer l'EMB avec la fonction 0Ah pour qu'il ne soit pas perdu lors de sa transmission à d'autres applications.


Allouer un bloc de mémoire supérieure (UMB)    Int 2Fh, Fct 10h    XMS

Compte tenu du matériel installé, certains drivers XMS permettent d'utiliser la mémoire conventionnelle située entre la limite des 640 Ko et le début de la mémoire étendue. Un tel bloc de mémoire peut être alloué à l'aide de cette fonction.

Entrée :

AH = 	10h

DX = 	Taille du bloc de mémoire sollicité en paragraphes

Sortie :

AX = 	0001h :	Fonction exécutée, dans ce cas

BX 	= 	Adresse de segment de l'UMB

0000h :	Erreur, dans ce cas

BL 	= 	Numéro d'erreur :

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

DX 	= 	Taille maximale d'un UMB à allouer en paragraphes

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Attention ! Cette fonction dépend considérablement du matériel et n'est pas disponible sur tous les drivers XMS. Après son appel, il est donc indispensable de vérifier l'état d'erreur pour s'assurer qu'un UMB peut effectivement être alloué.

·	L'adresse de segment retournée par la fonction permet également d'accéder directement à l'UMB en mode réel. Dans ce cas, l'adresse d'offset en octets résultant du calcul de la taille du bloc n'est pas ignorée.

·	Cette fonction peut également être utilisée pour obtenir le plus grand bloc UMB disponible en spécifiant tout simplement une valeur non réelle pour la taille du bloc à allouer (exemple, FFFFh). La fonction n'alloue en aucun cas un UMB mais retourne la taille du plus grand bloc UMB disponible.


Copier la mémoire    Int 2Fh, Fct 0Bh    XMS

Cette fonction sert à transférer la mémoire entre la RAM conventionnelle et la mémoire étendue ou à copier les blocs de mémoire à l'intérieur de la mémoire conventionnelle ou la mémoire étendue.

Entrée :

AH 	= 0Bh

DS:SI 	= Pointeur sur la structure suivante déterminant la zone de mémoire à copier et sa destination.

Structure de l'EMB à déplacer

Adresse	Contenu	Type

00h	Taille du bloc en octets	1DWORD

04h	Handle du bloc source	1WORD

06h	Offset du bloc source à partir duquel la copie doit avoir lieu	1DWORD

0Ah	Handle du bloc cible	1WORD

0Ch	Offset du bloc cible à partir duquel la copie doit avoir lieu	1DWORD

Taille : 16 octets

Sortie :

AX = 	0001h :	Fonction exécutée

0000h :	Erreur, dans ce cas

BL = Numéro d'erreur :

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Si un EMB doit être appelé, il faut spécifier également le handle retourné dans la fonction 09h lors de l'allocation du EMB. L'adresse d'offset représente alors l'offset relativement au début du bloc.

·	Au contraire, si une zone doit être appelée dans la RAM conventionnelle, il faut spécifier la valeur 0 en guise de handle et les adresses de segment et d'offset du bloc de départ selon le format habituel (d'abord l'adresse d'offset, puis l'adresse de segment) en guise d'offset.

·	En ce qui concerne les handles spécifiés, il ne faut pas qu'ils correspondent aux handles dont les blocs correspondants ont été verrouillés par la fonction 0Ch.

·	Si les zones spécifiées se superposent, la zone source doit figurer avant la zone cible pour garantir une exécution dépourvue d'erreurs de la fonction.

·	Pour assurer une duplication rapide de la zone source, il est souhaitable que les deux zones commencent par une adresse de mémoire paire dans un AT et par une adresse de mémoire divisible par quatre dans un 80386.


Déverrouiller le bloc de mémoire étendue (EMB)    Int 2Fh, Fct 0Dh    XMS

Un EMB préalablement verrouillé peut être déverrouillé à l'aide de cette fonction. Il pourra donc être déplacé dans la mémoire étendue.

Entrée :

AH = 	0Dh

DX = 	Handle de l'EMB

Sortie :

AX = 	0001h :	Fonction exécutée

0000h :	Erreur, dans ce cas

BL = Numéro d'erreur :

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	L'adresse de l'EMB retournée par l'appel de la fonction 0Ch devient caduque à la suite de cet appel.


Fermeture globale de la ligne d'adresse A20    Int 2Fh, Fct 04h    XMS

Contrairement à la fonction 03h, cette fonction a pour rôle de refermer la ligne d'adresse A20. Il devient alors impossible d'accéder directement à la HMA à partir du mode réel.

Entrée :

AH = 	04h

Sortie :

AX =	0001h : 	Fonction exécutée

0000h : 	Erreur, dans ce cas

BL = Numéro d'erreur

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Selon le système informatique, le verrouillage de la ligne d'adresse A20 constitue un processus relativement long. Vous devez donc éviter d'appeler trop souvent cette fonction.


Libération locale de la ligne d'adresse A20    Int 2Fh, Fct 05h    XMS

Contrairement à la libération globale réalisée avec la fonction 03h, ici la libération ne s'effectue que localement. Un compteur comptabilise l'appel de cette fonction et de la fonction 06h. La mise en service de la ligne ne s'effectue que si elle n'a pas été déjà activée par un appel antérieur.

Entrée :

AH = 05h

Sortie :

AX =	0001h : 	Fonction exécutée

0000h : 	Erreur, dans ce cas

BL = Numéro d'erreur

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Cette fonction doit être appelée avant ou après la demande portant sur la HMA pour s'assurer qu'il est également possible d'accéder à la HMA à partir du mode réel via l'adresse de segment FFFFh.

·	Avant de terminer un programme, la ligne d'adresse A20 doit être clôturée avec la fonction 04h pour éviter tout risque de débordement de segment dans le programme suivant.

·	L'activation de la ligne d'adresse A20 constitue un processus relativement long selon le système informatique dont vous disposez. Vous devez donc éviter d'appeler trop souvent cette fonction.


Libérer la HMA    Int 2Fh, Fct 02h    XMS

Un programme occupant la HMA à l'aide de la fonction 01h peut libérer cette zone de mémoire avec la fonction 02h.

Entrée :

AH =	02h

Sortie :

AX =	0001h : 	Fonction exécutée

0000h : 	Erreur, dans ce cas

BL = Numéro d'erreur :

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Sans appeler cette fonction, une HMA préalablement allouée reste réservée lorsqu'un programme est terminé. Elle ne peut donc pas être attribuée au programme suivant.

·	Le contenu de la HMA est détruit définitivement à la suite d'un appel de cette fonction.


Libérer le bloc de mémoire supérieure (UMB) alloué    Int 2Fh, Fct 11h    XMS

Un UMB préalablement alloué par la fonction 10h est libéré par l'appel de cette fonction et devient ainsi disponible pour d'autres programmes.

Entrée :

AH = 	11h

DX = 	Adresse de segment de l'UMB

Sortie :

AX = 	0001h :	Fonction exécutée, dans ce cas

0000h :	Erreur, dans ce cas

BL = Numéro d'erreur :

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Le contenu de l'UMB se perd définitivement après l'appel de cette fonction. Il devient alors impossible d'accéder à la mémoire au moyen de l'adresse de segment du bloc.

·	Avant de terminer un programme, il convient de libérer tous les blocs UMB alloués à l'aide de cette fonction, sinon ils ne peuvent pas être accédés par les applications lancées ultérieurement.


Libérer un bloc de mémoire étendue (EMB)    Int 2Fh, Fct 0Ah    XMS

Un bloc de mémoire alloué préalablement par la fonction 09h peut être libéré à l'aide de cette fonction.

Entrée :

AH = 	0Ah

DX = 	Handle

Sortie :

AX = 	0001h :	Fonction exécutée

0000h :	Erreur, dans ce cas

BL = Numéro d'erreur :

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Le contenu de l'EMB est définitivement perdu à la suite d'un appel de cette fonction et le handle devient non valable.


Lire l'état de la ligne d'adresse A20    Int 2Fh, Fct 07h    XMS

Cette fonction permet de constater si la ligne d'adresse A20 est déjà en service, si un appel des fonctions 03h ou 05h est en cours.

Entrée :

AH = 	07h

Sortie :

AX = 	0001h : Ligne d'adresse A20 libre

0000h : Adresse A20 verrouillée

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	La demande formulée pour la ligne d'adresse A20 s'effectue indépendamment de l'électronique pour que l'appel de cette fonction ne dure pas aussi longtemps que par exemple le verrouillage ou la libération de la ligne d'adresse A20.


Lire la taille de la mémoire étendue disponible    Int 2Fh, Fct 08h    XMS

Cette fonction retourne le volume total disponible dans la mémoire étendue et la taille du plus grand bloc encore libre.

Entrée :

AH = 	08h

Sortie :

AX = 	Taille du plus grand bloc de mémoire étendue (EMB) en octet

DX = 	Volume total disponible dans la mémoire étendue en Ko

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Attention ! La HMA n'est pas prise en compte lors de l'évaluation des deux indications même si elle n'a pas été encore allouée. Par conséquent, les indications s'élèvent à 64 Ko parce que l'allocation de la mémoire étendue commence toujours après la HMA.


Lire le numéro de version XMS    Int 2Fh, Fct 00h    XMS

Cette fonction retourne le numéro de version du driver XMS et son numéro de révision interne.

Entrée :

AH = 	00h

Sortie :

AX = 	Numéro de version XMS

BX = 	Numéro de révision interne

DX = 	Etat de la HMA

0 : Accès à HMA impossible

1 : HMA disponible

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.


Lire les informations sur un EMB    Int 2Fh, Fct 0Eh    XMS

Cette fonction permet de prendre connaissance des diverses informations concernant un EMB. Outre la taille du bloc, vous pouvez connaître son compteur de verrouillage ainsi que le nombre de handles encore disponibles.

Entrée :

AH = 	0Eh

DX = 	Handle de l'EMB

Sortie :

AX = 	0001h :	Fonction exécutée, dans ce cas

BH 	= 	Compteur de verrouillage du bloc

BL 	= 	Nombre de handles EMB disponibles

DX 	= 	Taille de l'EMB en Ko

0000h :	Erreur, dans ce cas

BL 	= 	Numéro d'erreur :

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	En ce qui concerne le compteur de verrouillage, il s'agit d'un compteur réglé individuellement pour chaque EMB. Il augmente à chaque appel de la fonction de verrouillage (0Ch) et diminue en conséquence à chaque appel de la fonction 0Dh. L'EMB n'est effectivement verrouillé que lorsque le compteur atteint la valeur 0. Une valeur différente de zéro indique le nombre d'appels de la fonction 0Dh à effectuer pour verrouiller à nouveau l'EMB.


Protéger un bloc de mémoire étendue (EMB) contre un déplacement    Int 2Fh, Fct 0Ch    XMS

Pour que des trous n'apparaissent pas dans la mémoire étendue après sa libération, la XMM se voit parfois contrainte de déplacer les divers EMB dans la mémoire. Cette fonction empêche de déplacer un EMB bien précis.

Entrée :

AH 	= 0Ch

DX 	= Handle de l'EMB

Sortie :

AX 	= 	0001h :	Fonction exécutée

0000h :	Erreur, dans ce cas

BL = Numéro d'erreur :

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

DX:BX	= 	Adresse 32 bits linéaire de l'EMB dans la mémoire

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	La fonction retourne l'adresse de l'EMB qui ne reste valable que tant que l'EMB n'est pas à nouveau verrouillé. Les blocs verrouillés doivent être libérés aussi vite que possible avec la fonction 0Dh pour que la gestion de la mémoire XMM ne subisse pas trop de conséquences.

·	L'état de verrouillage des différents EMB est fourni distinctement dans un compteur qui augmente à chaque appel de cette fonction et diminue à chaque appel de la fonction 0Dh. Le compteur commence avec la valeur 0. Lorsque le compteur indique à nouveau la valeur 0, cela signifie que le EMB concerné est déverrouillé.


Réserver une HMA    Int 2Fh, Fct 01h    XMS

Cette fonction permet à un programme d'allouer totalement ou partiellement la HMA pour ses besoins personnels.

Entrée :

AH = 	01h

DX = 	Place mémoire demandée en octets, FFFFh pour une application normale ayant un besoin réel en programmes résidents

Sortie :

AX =	0001h : Fonction exécutée

0000h : Erreur, dans ce cas

BL =	Numéro d'erreur

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Après un appel réussi de cette fonction, l'accès à la HMA ne peut s'effectuer que si l'adresse de ligne A20 a été correctement activée. Cela est possible grâce aux fonctions 03h et 05h.

·	Une erreur peut survenir dans le déroulement de la fonction si un programme résident ne dispose pas de la totalité de la HMA et si l'insuffisance de la mémoire se situe au-dessous de la valeur spécifiée dans le paramètre /HMAMIN lors de l'installation du driver. Cela empêche d'octroyer un droit d'accès exclusif à la HMA à un programme résident ne nécessitant que peu de Ko et de laisser ainsi la place à un autre qui peut avoir besoin d'une place mémoire plus importante.

·	A la fin d'un programme, si la HMA reste toujours en sa possession, elle doit être libérée avec la fonction 02h avant de terminer le programme.


Verrouillage local de la ligne d'adresse A20    Int 2Fh, Fct 06h    XMS

Tout comme la fonction 05h, celle-ci ne prend effet que si l'adresse n'a pas été encore verrouillée à l'aide d'un appel antérieur.

Entrée :

AH = 	06

Sortie :

AX =	0001h : 	Fonction exécutée

0000h : 	Erreur, dans ce cas

BL = Numéro d'erreur

80h	Fonction spécifiée non connue

81h	VDISK-RAMDISK présent

82h	Erreur sur l'adresse de ligne A20

8Eh	Erreur gestionnaire générale

8Fh	Erreur impossible à éliminer

90h	HMA inexistante

91h	HMA déjà occupée

92h	Taille de mémoire spécifiée en DX inférieure à la valeur du paramètre /HmaMin=, donc trop petite

93h	HMA non allouée

94h	La ligne est encore en fonction

A0h	Plus de mémoire étendue disponible

A1h	Tous les handles XMS occupés

A2h	Handle incorrect

A3h	Handle source irrecevable

A4h	Offset source irrecevable

A5h	Handle cible incorrect

A6h	Offset cible incorrect

A7h	Longueur incorrecte pour la fonction Move

A8h	Superposition interdite avec la fonction Move

A9h	Erreur de parité

AAh	UMB non verrouillé

ABh	UMB encore verrouillé

ACh	Débordement du compteur de verrouillage UMB

ADh	UMB ne peut pas être verrouillé

B0h	UMB plus petit disponible

B1h	Plus de UMB disponible

B2h	Adresse de segment de l'UMB incorrecte

Remarques :

·	Les appels des fonctions 05h et 06h sont exprimés sur le plan interne à l'aide d'un compteur qui augmente à chaque appel de la fonction 05h et diminue à chaque appel de la fonction 06h. L'adresse n'est réellement verrouillée que lorsque le compteur atteint la valeur 0. Les appels des deux fonctions doivent donc être équivalents.

·	Comme toutes les fonctions du driver XMS, celle-ci ne doit également être appelée qu'après avoir vérifié l'existence d'un tel driver à l'aide de l'interruption 2Fh et obtenu le point d'entrée du driver :

L'appel des fonctions XMS se fait grâce à l'interruption multiplexeur 2Fh qui gère tous les drivers de programmes résidents. Pour tester la présence d'un driver XMS, appelez d'abord l'interruption 2Fh avec le code de fonction 4300h dans le registre AX. Si un driver XMS est présent en mémoire, la fonction renvoie la valeur 80h dans le registre AL (une autre valeur signifie qu'il n'existe aucun driver XMS en mémoire). Appelez une seconde fois l'interruption 2Fh avec la valeur 4310h dans le registre AX. En guise de résultat, vous obtenez l'adresse de segment de l'XMM dans le registre ES et l'adresse d'offset dans le registre BX. Ces adresses permettent d'appeler toutes les routines du standard XMS.

·	Cette fonction doit être appelée avant ou après la demande portant sur la HMA pour s'assurer qu'il est également possible d'accéder à la HMA à partir du mode réel via l'adresse de segment FFFFh.

·	Avant de terminer un programme, la ligne d'adresse A20 doit être clôturée avec la fonction 04h pour éviter tout risque de débordement de segment dans le programme suivant.

·	L'activation de la ligne d'adresse A20 constitue un processus relativement long selon le système informatique dont vous disposez. Vous devez donc éviter d'appeler trop souvent cette fonction.


Mémoire paginée EMS

Afficher des pages et appeler une routine de la mémoire étendue

Afficher des pages et appeler une routine en mémoire étendue

Afficher pages et sauter vers la mémoire étendue

Allouer des pages EMS

Allouer des pages EMS non standardisées

Allouer la mémoire EMS

Construire des pages et sauter vers la mémoire étendue

Construire des pages logiques sur des pages physiques par adresses

Construire des pages logiques sur des pages physiques par numéros

Copier un bloc de mémoire

Définir l'attribut d'un handle

Définir le mapping

Définir le nom d'un handle

Désactiver le système d'exploitation

Déterminer le nombre de pages allouées

Echanger des blocs de mémoire

Enregistrer et rétablir simultanément la table des pages

Enregistrer la table des pages

Enregistrer le mapping

Enregistrer une partie de la table des pages

Libérer les pages EMS

Lire des informations sur le matériel EMS

Lire l'adresse de segment du cadre de page

Lire l'attribut d'un handle

Lire l'état de l'EMM

Lire la mémoire nécessaire

Lire la taille de la table des pages

Lire la taille du buffer pour recevoir une table des pages partielle

Lire la version EMM

Lire le nom d'un handle

Lire le nombre de handles

Lire le nombre de pages

Lire le nombre de pages

Lire le nombre de pages EMS non standardisées

Lire les adresses des pages EMS physiques et leurs numéros

Lire les noms de tous les handles

Lire tous les handles

Lire un handle avec un nom précis

Modifier le nombre de pages logiques allouées

Préparer l'EMS à un redémarrage à chaud

Rétablir la table des pages

Rétablir le mapping

Rétablir une table des pages enregistrée partiellement

Transferts DMA

Vérifier les pages EMS non volatiles


Afficher des pages et appeler une routine de la mémoire étendue    Int 67h, Fct 56h, sous-Fct 01h    LIM/EMS (>= 4.0)

Cette sous-fonction est similaire à la sous-fonction 00h mais elle renvoie les adresses de ses segments et non les numéros des pages physiques.


Afficher des pages et appeler une routine en mémoire étendue    Int 67h, Fct 56h, Sous-Fct 00h    LIM/EMS (>= 4.0)

Cette fonction définit la structure entre les pages logiques et physiques et elle provoque la poursuite de l'exécution du programme avec une routine en mémoire étendue par un appel FAR. A la fin de cette routine, une nouvelle structure est construite et on revient à l'appelant de la fonction d'interruption.

Entrée :

AH	= 55h

AL	= 00h

DX	= identificateur

DS:SI = pointeur sur tampon avec informations complémentaires

Sortie :

AH	= 0, ok

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

L'appel de cette fonction doit être précédé de la vérification présence d'un EMM ("Expanded Memory Manager") de la version 4.0.

Le tampon indiqué doit avoir la structure suivante :

Structure du tampon

Adresse	Contenu	Type

+00h	Pointeur sur le sous-programme par lequel le programme doit continuer	1 PTR

+05h	Nombre de pages à afficher avant l'appel du sous-programme	1 BYTE

+06h	Pointeur sur la liste d'affichage pour l'affichage avant

l'affichage avant l'appel du sous-programme	1 PTR

+0Ah	Nombre de pages à afficher avant l'appel du sous-programme	1 BYTE

+0Bh	Pointeur sur la liste d'affichage après l'appel du sous-programme	1 PTR

Longueur : 14 octets

La structure de la liste d'affichage est identique à celle de cette liste dans l'appel de la fonction 50h, sous-fonction 00h : elle renvoie le numéro d'une page logique et d'une page physique.

L'exécution de cette fonction exige un certain espace libre de la pile. La taille requise est renvoyée par la sous-fonction 02h de cette fonction.


Afficher pages et sauter vers la mémoire étendue    Int 67h, Fct 55h, Sous-Fct 01h    LIM/EMS (>= 4.0)

Cette sous-fonction est similaire à la 00h, mais la liste d'affichage contient les adresses de segment au lieu des numéros des pages physiques.


Allouer des pages EMS    Int 67h, Fct 5Ah, sous-Fct 00h    LIM/EMS (>= 4.0)

Cette fonction alloue des pages EMS et ressemble donc à la 43h. Cependant, contrairement à cette dernière, la fonction 5Ah permet l'allocation de 0 page EMS sans que cela ne se traduise par une erreur.

Entrée :

AH	= 5Ah

Al	= 0h

BX	= nombre des pages EMS allouées

Sortie :

AH	= 0, ok. Dans ce cas :

DX = identificateur permettant l'accès aux pages allouées

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

L'appel de cette fonction doit être précédé de la vérification de la présence d'un EMM ("Expanded Memory Manager") de la version 4.0.

Vous pouvez allouer 0 page à l'aide de cette fonction sans causer d'erreur, et ainsi obtenir un identificateur.


Allouer des pages EMS non standardisées    Int 67h, Fct 5Ah, sous-Fct 01h        LIM/EMS (>= 4.0)

Cette fonction permet d'allouer des pages EMS dont la taille diffère des 16 Ko standard.

Entrée :

AH	= 5Ah

AL	= 01h

Sortie :

AH	= 0, ok, dans ce cas :

DX = identificateur permettant d'accéder aux pages allouées

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

L'appel de cette fonction doit être précédé de la vérification de la présence d'un EMM ("Expanded Memory Manager") de la version 4.0.

Cette forme particulière de pages EMS n'est pas gérée par toutes les cartes EMS. Vérifiez soigneusement l'état de la fonction dans le registre AH après l'appel.

Cette fonction permet d'allouer zéro page pour obtenir simplement un identificateur.


Allouer la mémoire EMS    Int 67h, Fct 43h    LIM/EMS (>= 3.0)

Cette fonction permet à un programme de se faire allouer un certain nombre de pages (de 16 Ko) pour ses opérations.

Entrée :

AH	= 43h

BX	= Nombre de pages logiques à allouer (de 16 Ko)

Sortie :

AH	= 0, o.k, auquel cas :

DX = Handle pour l'accès à la mémoire allouée

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	Le handle renvoyé servira ensuite à accéder à, puis à libérer la mémoire allouée. Il doit donc être mémorisé par l'utilisateur. Si ce handle est "perdu" après appel de la fonction, le programme d'appel n'aura plus aucune possibilité de se le faire communiquer à nouveau, de sorte que la mémoire allouée ne pourra plus être libérée pour être à nouveau rendue accessible à d'autres programmes.

·	L'appel de cette fonction peut échouer si le nombre de pages réclamées est supérieur au nombre de pages libres ou bien si, bien qu'il reste encore suffisamment de pages, cette fonction a été appelée tellement souvent que l'EMM ne peut plus fournir d'autre handle.

·	Les handles portent normalement les numéros FF00h, FE01h, FD02h, FC03h etc.


Construire des pages et sauter vers la mémoire étendue    Int 67h, Fct 55h, Sous-Fct 00h    LIM/EMS (>= 4.0)

D'une part, cette fonction définit la structure entre les pages logiques et physiques. D'autre part, elle transfère l'exécution du programme vers l'une des pages construites à l'aide d'un FAR-Jump.

Entrée :

AH 	= 55h

AL 	= 00h

DX 	= Handle

DS:SI 	= Pointeur sur le buffer contenant des informations complémentaires

Sortie :

AH 	= 0, Tout va bien

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.

·	Le buffer spécifié doit présenter la structure suivante :

Structure du tampon

Adresse	Contenu	Type

+00h	Pointeur sur l'adresse à laquelle le programme doit continuer 	1 PTR

+05h	Nombre des pages mémoire à afficher avant le saut 	1 BYTE

+06h	Pointeur sur la liste d'affichage 	1 PTR

Longueur : 9 octets

La structure de la liste d'affichage est identique à celle de cette liste dans la structure de la fonction 50h, sous-fonction 00h. A chaque appel, nous obtenons donc le numéro d'une page logique et celui de la page physique correspondante.


Construire des pages logiques sur des pages physiques par adresses    Int 67h, Fct 50h, Sous-Fct 01h    LIM/EMS (>= 4.0)

Tout comme la sous-fonction 00h, celle-ci permet de construire des pages logiques multiples sur un nombre quelconque de pages physiques à l'aide d'un seul appel de la fonction. Ici, les pages physiques ne sont pas adressées avec leur numéros, mais avec leur adresse de segment.

Entrée :

AH 	= 50h

AL 	= 01h

CX 	= Nombre de pages logiques à construire

DX 	= Handle sur lequel les pages sont à allouer

DS:SI 	= Pointeur sur le buffer contenant les informations sur la structure

Sortie :

AH 	= 0, Tout va bien, dans ce cas

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.

·	Le buffer spécifié doit contenir deux mots consécutifs pour toutes les structures à élaborer. Le premier mot doit renfermer le numéro de la page logique, le second l'adresse de segment de la page physique.

·	Si le numéro de la page logique vaut -1, la page physique correspondante sera alors désactivée. Dans ce cas, elle devient interdite à la lecture et à l'écriture.

·	Les adresses de segment des pages physiques disponibles peuvent être obtenues à l'aide de la sous-fonction 00h de la fonction 58h.


Construire des pages logiques sur des pages physiques par numéros    Int 67h, Fct 50h, Sous-Fct 00h    LIM/EMS (>= 4.0)

En appelant une seule fois cette fonction, un programme peut construire des pages logiques multiples sur un nombre quelconque de pages physiques adressées au moyen de leur numéro respectif.

Entrée :

AH 	= 50h

AL 	= 00h

CX 	= Nombre de pages logiques à construire

DX 	= Handle sur lequel les pages sont à allouer

DS:SI 	= Pointeur sur le buffer contenant les informations sur la structure

Sortie :

AH 	= 0, Tout va bien, dans ce cas

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.

·	Le buffer spécifié doit contenir deux mots consécutifs pour toutes les structures à élaborer. Le premier mot doit renfermer le numéro de la page logique, le second le numéro de la page physique.

Si le numéro de la page logique vaut -1, la page physique correspondante sera alors désactivée. Dans ce cas, elle devient interdite à la lecture et à l'écriture.


Copier un bloc de mémoire    Int 67h, Fct 57h, sous-Fct 00h        LIM/EMS (>= 4.0)

Cette fonction permet de copier tout bloc de mémoire entre la mémoire paginée et la mémoire étendue ou à l'intérieur de chacune de ces mémoires.

Entrée :

AH	= 57h

AL	= 00h

DS:SI	= Pointeur sur le tampon contenant les informations sur les blocs à copier

Sortie :

AH	= 0, ok

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

L'appel de cette fonction doit être précédé de la vérification de la présence d'un EMM ("Expanded Memory Manager") de la version 4.0.

Le tampon contenant les informations sur les blocs à copier doit avoir le format suivant :

Structure du tampon

Adresse	Contenu	Type

+00h	Taille (en octets) du bloc à copier	1 DWORD

+04h	Type du bloc source (0 = mémoire conventionnelle, 1 = EMS)	1 BYTE

+05h	Identificateur du bloc source (EMS seulement)	1 WORD

+07h	Décalage du début du bloc source	1 WORD

+09h	Adresse de segment du bloc source (mémoire conventionnelle)

ou numéro de la page physique (EMS)	1 WORD

+0Bh	Type du bloc cible (0 = mémoire conventionnelle, 1 = EMS)	1 BYTE

+0Ch	Identificateur du bloc cible (EMS seulement)	1 WORD

+0Eh	Décalage du début du bloc source	1 WORD

+10h	Adresse segment du bloc cible (mémoire conventionnelle)

ou numéro de la page physique (EMS)	1 WORD

Longueur : 18 octets


Définir l'attribut d'un handle    Int 67h, Fct 52h, Sous-Fct 01h    LIM/EMS (>= 4.0)

Si une carte EMS est capable de protéger les pages EMS contre un démarrage à chaud de l'ordinateur, l'attribut correspondant peut alors être défini à l'aide de cette fonction.

Entrée :

AH 	= 52h

AL 	= 01h

BL 	= Attribut pour les pages du handle

0 : le contenu des pages est perdu (volatile)

1 : le contenu des pages reste conservé (non volatile)

DX 	= Handle à consulter

Sortie :

AH 	= 0, Tout va bien

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.

·	Attention ! Très peu de cartes EMS sont capables de protéger les pages EMS contre l'écriture lors d'un démarrage à chaud de l'ordinateur. En ce qui concerne les émulateurs EMS, cette possibilité est généralement à exclure. N'oubliez donc pas de vérifier au préalable si les pages EMS non volatiles disposent de cette technique au moyen de la sous-fonction 02h.


Définir le mapping    Int 67h, Fct 44h    LIM/EMS (>= 3.0)

Cette fonction permet de placer l'une des pages précédemment allouées à l'aide de la fonction 4h dans l'une des 4 pages physiques du cadre de page.

Entrée :

AH	= 44h

AL	= Numéro de page physique (0 à 3)

BX	= Numéro de page logique

DX	= Handle

Sortie :

AH	= Etat d'erreur

00h :	tout va bien

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	Le handle à spécifier lors de l'appel de cette fonction doit avoir été obtenu à la suite d'un appel antérieur de la fonction 43h de l'EMM.

·	Les pages logiques sont numérotées à partir de 0, de sorte que la valeur 0 doit être spécifiée pour accéder à la première page allouée. La plus grande valeur autorisée est donc égale au nombre de pages allouées moins 1.

·	Pour pouvoir accéder à la page physique, il faut connaître l'adresse de segment du cadre de page, qui peut être obtenue à l'aide de la fonction 41h.


Définir le nom d'un handle    Int 67h, Fct 53h, Sous-Fct 01h    LIM/EMS (>= 4.0)

Cette sous-fonction affecte un nom à un handle préalablement alloué servant ensuite à l'appeler.

Entrée :

AH 	= 53h

AL 	= 01h

DX 	= Handle

ES:DI 	= Pointeur sur le buffer contenant le nom du handle

Sortie :

AH 	= 0, Tout va bien

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.

·	La longueur du nom d'un handle est toujours de 8 caractères si bien que le buffer spécifié doit contenir au moins 8 octets.


Désactiver le système d'exploitation    Int 67h, Fct 5Dh    LIM/EMS (>= 4.0)

Cette fonction possède trois sous-fonctions que nous ne décrirons pas ici car leur intérêt est strictement limité au développement de systèmes d'exploitation, et elles ne sont en outre gérées que par quelques cartes et pilotes EMS. En d'autres termes, ces sous-fonctions ne sont pas utilisées dans le cadre du développement normal sur PC.


Déterminer le nombre de pages allouées    Int 67h, Fct 4Ch    LIM/EMS (>= 3.0)

Cette fonction indique au programme d'appel combien de pages ont été allouées au handle spécifié.

Entrée :

AH	= 4Ch

DX	= Handle

Sortie :

AH	= 0, o.k, auquel cas :

BX 	= Nombre de pages logiques allouées

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	Le nombre de pages allouées renvoyées doit être compris entre 1 et 512.


Echanger des blocs de mémoire    Int 67h, Fct 57h, sous-Fct 01h        LIM/EMS (>= 4.0)

Cette fonction équivaut à la sous-fonction 00h, mais elle échange le contenu des blocs de mémoire au lieu de copier le contenu de l'un dans l'autre.

Entrée :

AH	= 57h

AL	= 01h

DS:SI	= Pointeur sur le tampon contenant les informations sur les blocs à copier

Sortie :

AH	= 0, ok

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

L'appel de cette fonction doit être précédé de la vérification de la présence d'un EMM ("Expanded Memory Manager") de la version 4.0.

Le tampon contenant les informations sur les blocs à copier doit avoir le format décrit pour la sous-fonction 00h.

Cette fonction peut échanger au maximum 1 Mo de mémoire par appel.

Si des pages d'EMS sont concernées par le déplacement et si le bloc défini sort de la page EMS définie, les pages EMS suivantes sont également déplacées.

Les blocs source et cible ne doivent pas se chevaucher !


Enregistrer et rétablir simultanément la table des pages    Int 67h, Fct 4Eh, Sous-Fct 02h    LIM/EMS (>= 3.2)

Cette fonction permet de sauvegarder simultanément la table des pages en cours et de charger une autre qui a été préalablement sauvegardée.

Entrée :

AH 	= E4h

AL 	= 02h

DS:SI 	= Pointeur sur le tableau contenant déjà la table des pages à charger

ES:DI 	= Pointeur sur le tableau devant recevoir la table des pages en cours

Sortie :

AH 	= 0, Tout va bien

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.2 ou supérieure est effectivement installée.

·	Le buffer contenant la table des pages à installer doit d'abord être chargé à l'aide d'un appel de la sous-fonction 00h ou 02h de cette fonction.

·	Vous pouvez prendre connaissance de la taille du buffer devant recevoir la table des pages en cours à l'aide de la sous-fonction 03h de cette fonction.

·	Contrairement aux fonctions 47h et 48h de même nature, ici un handle EMM s'avère inutile.


Enregistrer la table des pages    Int 67h, Fct 4Eh, Sous-Fct 00h    LIM/EMS (>= 3.2)

Cette fonction permet à un programme de sauvegarder la table des pages décrivant la concordance entre les pages logiques et physiques.

Entrée :

AH 	= 4Eh

AL 	= 00h

ES:DI	= Pointeur sur la tableau devant recevoir la table des pages

Sortie :

AH 	= 0, Tout va bien

AH 	 >0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.2 ou supérieure est effectivement installée.

·	Contrairement à la fonction similaire 47h, ici un handle EMM s'avère inutile.

·	Vous pouvez prendre connaissance de la taille du buffer à l'aide de la sous-fonction 03h.

·	La codification des informations entrées dans le buffer varie en fonction des constructeurs de cartes et drivers EMS. Il faut donc éviter de le manipuler ou l'interpréter.

·	Après avoir modifié la concordance entre les pages EMS physiques et logiques, vous pouvez la rétablir avec la sous-fonction 01h mais en prenant soin de la sauvegarder au préalable avec la sous-fonction 00h.


Enregistrer le mapping    Int 67h, Fct 47h    LIM/EMS (>= 3.0)

En appelant cette fonction, vous faites sauvegarder la concordance actuelle entre les quatre pages physiques du Page Frame et les pages logiques qui leur ont été attribuées.

Entrée :

AH	= 47h

DX	= Handle

Sortie :

AH	= Etat d'erreur

00h : tout va bien

 AH > 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	Le handle à spécifier lors de l'appel de cette fonction doit avoir été obtenu à la suite d'un appel antérieur de la fonction 43h de l'EMM.

·	Cette fonction est conçue pour être appelée par des programmes résidents ou le système d'exploitation dans le cadre d'un environnement multitâche mais elle peut aussi être utilisée par n'importe quel autre programme.


Enregistrer une partie de la table des pages    Int 67h, Fct 4Fh, Sous-Fct 00h    LIM/EMS (>= 4.0)

Cette fonction permet de sauvegarder séparément la structure de pages physiques bien précises et leurs pages logiques correspondantes.

Entrée :

AH 	= 4Fh

AL 	= 00h

DS:SI 	= Pointeur sur la liste des informations à propos des pages physiques à construire

ES:DI	= Pointeur sur le buffer devant stocker les entrées choisies parmi la table des pages.

Sortie :

AH 	= 0, Tout va bien, dans ce cas

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.

·	La liste des pages physiques à construire doit contenir le nombre des pages concernées dans le premier mot. Suivent ensuite les adresses de segment de ces pages occupant chacune un mot. La taille de cette liste se calcule comme suit :

2 + (Nombre de pages à construire * 2) octets

·	La taille du buffer nécessaire pour recevoir les entrées sélectionnées parmi la table des pages peut être obtenue par la sous-fonction 02h de cette fonction.


Libérer les pages EMS    Int 67h, Fct 45h    LIM/EMS (>= 3.0)

Cette fonction permet de restituer à l'EMM et de rendre ainsi accessibles à d'autres programmes les pages précédemment allouées à l'aide de la fonction 43h.

Entrée :

AH	= 45h

DX	= Handle

Sortie :

AH	= Etat d'erreur

00h : tout va bien

AH > 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	Le handle à spécifier lors de l'appel de cette fonction doit avoir été obtenu à la suite d'un appel antérieur de la fonction 4 de l'EMM.

·	L'appel de cette fonction libère toutes les pages allouées à travers ce handle. Il n'est pas possible de sélectionner les pages à libérer. Cependant, la fonction 51h (Modifier le nombre de pages logiques allouées, à partir de 4.0) permet d'ajouter ou de retirer une ou plusieurs pages parmi les pages déjà allouées.

·	Après un appel réussi de cette fonction, le handle spécifié n'est plus valable et ne peut donc plus être employé pour accéder à la mémoire EMS.

·	Si la fonction revient avec un message d'erreur, il convient de répéter au moins trois fois l'appel de cette fonction car sinon les pages qui n'ont pu être libérées resteraient allouées une fois le programme terminé et ne pourraient donc être remises à la disposition d'autres programmes.


Lire des informations sur le matériel EMS    Int 67h, Fct 59h, sous-Fct 00h        LIM/EMS (>= 4.0)

Cette fonction permet de recueillir certaines informations sur le matériel EMS, présentant pour la plupart de l'intérêt pour un système d'exploitation intégrant la mémoire EMS à sa gestion de la mémoire.

Entrée :

AH	= 59h

AL	= 00h

Sortie :

AH	= 0, ok, dans ce cas :

CX = taille (en octets) du tableau des pages

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

L'appel de cette fonction doit être précédé de la vérification de la présence d'un EMM ("Expanded Memory Manager") de la version 4.0.

La taille du tampon doit être au moins égale à 10 octets. Après l'appel de la fonction, le tampon contient les informations suivantes :

Structure du tampon

Adresse	Contenu	Type

+00h	Taille des pages EMS non standardisées en paragraphes	1 WORD

+02h	Nombre des jeux alternatifs de registres EMS	1 WORD

+04h	Taille de la table d'affichage et de sauvegarde en octets	1 WORD

+06h	Nombre de jeux de registres pour le transfert en DMA	1 WORD

+08h	Mode d'opération DMA	1 WORD

Longueur : 10 octets

Les modes d'opérations DMA sont au nombre de deux :

0 : le DMA est également utilisable avec des jeux alternatifs de registres

1 : Un seul jeu de registres DMA disponible


Lire l'adresse de segment du cadre de page    Int 67h, Fct 41h    LIM/EMS (>= 3.0)

Cette fonction détermine l'adresse de segment du Page Frame.

Entrée :

AH	= 41h

Sortie :

AH	= 0, o.k, auquel cas :

BX = adresse de segment du cadre de page

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	L'adresse renvoyée ainsi que la fonction 58h/01h (Déterminer le nombre de pages EMS physiques, à partir de 4.0) permettent de calculer les adresses des autres pages physiques, la première page commençant à l'adresse PAGE FRAME:0000. Les autres pages suivent ensuite à intervalles de 16 Ko. Si le numéro de version de l'EMM est inférieur à 4.0, le nombre des pages physiques EMS est alors toujours de 4.


Lire l'attribut d'un handle    Int 67h, Fct 52h, Sous-Fct 00h    LIM/EMS (>= 4.0)

Cette fonction permet de constater si le contenu des pages EMS affectées à un handle reste conservé à travers un démarrage à chaud de l'ordinateur. Dans ce cas, elles sont désignées comme des pages "non volatiles".

Entrée :

AH 	= 52h

AL 	= 00h

DX 	= Handle à consulter

Sortie :

AH 	= 0, Tout va bien, dans ce cas

AL = Attribut des pages

0 : le contenu des pages est perdu (volatile)

1 : le contenu des pages reste conservé (non volatile)

AH > 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.


Lire l'état de l'EMM    Int 67h, Fct 40h    LIM/EMS (>= 3.0)

Cette fonction détermine l'état (d'erreur) de l'EMM (Expanded Memory Manager), tel qu'il est également renvoyé après appel de toutes les autres fonctions EMS.

Entrée :

AH	= 40h

Sortie :

AH	= état de l'EMM

00h : 	tout va bien

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	Il est conseillé d'appeler cette fonction avant de commencer à travailler avec la mémoire EMS car cela permet de constater facilement si le matériel et le logiciel correspondants fonctionnent sans problème.


Lire la mémoire nécessaire    Int 67h, Fct 56h, sous-Fct 02h    LIM/EMS (>= 4.0)

Cette fonction renvoie l'espace minimal requis sur la pile pour permettre l'exécution des sous-fonctions 00h et 01h.

Entrée :

AH	= 56h

AL	= 02h

Sortie :

AH	= 0, ok, dans ce cas :

BX = espace pile demandé

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

L'appel de cette fonction doit être précédé de la vérification de la présence d'un EMM ("Expanded Memory Manager") de la version 4.0.

La valeur renvoyée correspond exclusivement aux besoins de l'EMM. L'espace de la pile requis pour la routine à appeler dans la mémoire étendue vient  s'y ajouter.


Lire la taille de la table des pages    Int 67h, Fct 4Eh, Sous-Fct 03h    LIM/EMS (>= 3.2)

Avant l'appel de la sous-fonction 00h ou 02h, vous pouvez utiliser cette fonction pour déterminer la place mémoire nécessaire pour stocker la table des pages.

Entrée :

AH 	= 4Eh

AL 	= 03h

Sortie :

AH 	= 0, Tout va bien, dans ce cas

AL = Taille de la table des pages en octets

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.2 ou supérieure est effectivement installée.


Lire la taille du buffer pour recevoir une table des pages partielle    Int 67h, Fct 4Fh, Sous-Fct 02h    LIM/EMS (>= 4.0)

Si vous devez sauvegarder une partie de la table des pages avec la sous-fonction 00h, cette sous-fonction peut vous aider à déterminer d'abord la taille du buffer nécessaire à cet effet.

Entrée :

AH 	= 4Fh

AL 	= 02h

BX 	= Nombre de pages physiques à construire lors de la sauvegarde

Sortie :

AH 	= 0, Tout va bien, dans ce cas

AL	= Taille du buffer nécessaire en octets

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.


Lire la version EMM    Int 67h, Fct 46h    LIM/EMS (>= 3.0)

Cette fonction permet d'obtenir le numéro de version de l'EMM (Expanded Memory Manager).

Entrée :

AH	= 46h

Sortie :

AH	= 0, o.k, auquel cas :

AL	= numéro de version EMM

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	Le numéro de version EMM figure dans le registre AL sous forme d'un nombre BCD, le numéro de version principale (le chiffre avant le point) étant placé dans les 4 bits de plus fort poids et le numéro de sous-version (le chiffre après le point) étant placé dans les 4 bits de plus faible poids.


Lire le nom d'un handle    Int 67h, Fct 53h, Sous-Fct 00h    LIM/EMS (>= 4.0)

Le nom d'un handle est transmis dans un buffer du programme d'appel suite à l'appel de cette fonction.

Entrée :

AH 	= 53h

AL 	= 00h

DX 	= Handle

ES:DI 	= Pointeur sur le buffer devant recevoir le nom

Sortie :

AH 	= 0, Tout va bien

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.

·	La longueur du nom d'un handle est toujours de 8 caractères si bien que le buffer spécifié doit contenir au moins 8 octets.

·	Lorsqu'un handle est alloué avec la fonction 43h, le nom est d'abord vide, c'est-à-dire qu'il ne contient que les caractères ayant le code 0. A l'aide de la sous-fonction 01h de la fonction 53h, un handle peut toutefois obtenir un nom qui est transmis par un appel de la sous-fonction 00h.


Lire le nombre de handles    Int 67h, Fct 4Bh    LIM/EMS (>= 3.0)

Cette fonction permet de connaître le nombre de zones de mémoire ayant été actuellement allouées à l'aide de la fonction 4h, autrement dit le nombre de handles attribués.

Entrée :

AH	= 4Bh

Sortie :

AH	= 0, o.k, auquel cas :

BX	= nombre de handles attribués

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	Le nombre de handles attribués n'est pas nécessairement identique au nombre de programmes accédant actuellement à la mémoire EMS car un programme peut réclamer à l'aide de la fonction 43h autant de blocs de mémoire EMS et donc autant de handles qu'il le souhaite.


Lire le nombre de pages EMS    Int 67h, Fct 42h    LIM/EMS (>= 3.0)

Cette fonction indique au programme d'appel combien de pages EMS (de 16 Ko chacune) sont installées et combien sont encore libres, c'est-à-dire combien n'ont pas encore été allouées.

Entrée :

AH	= 42h

Sortie :

AH	= 0, o.k, auquel cas :

BX = Nombre de pages libres (non encore allouées)

DX = Nombre total de pages EMS

AH	> 0, erreur:

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	Pour calculer la taille en Ko de la mémoire EMS libre, on multiplie le nombre de pages libres par 16.


Lire le nombre de pages EMS    Int 67h, Fct 58h, sous-Fct 01h    LIM/EMS (>= 4.0)

Cette fonction retourne le nombre des pages EMS physiques, ce qui permet de calculer la taille du tampon qui sera nécessaire pour l'appel de la sous-fonction 00h de cette fonction.

Entrée :

AH	= 58h

AL	= 01h

Sortie :

AH	= 0, ok, dans ce cas :

CX = nombre des entrées retournées dans le tampon

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

L'appel de cette fonction doit être précédé de la vérification de la présence d'un EMM ("Expanded Memory Manager") de la version 4.0.

La taille requise pour le tampon est obtenue en multipliant le nombre des entrées (registre CX) par quatre.


Lire le nombre de pages EMS non standardisées    Int 67h, Fct 59h, sous-Fct 01h        LIM/EMS (>= 4.0)

Cette fonction retourne le nombre total de pages EMS dont la taille diffère des 16 Ko standard et le nombre des pages encore libres parmi celles-ci.

Entrée :

AH	= 59h

AL	= 01h

Sortie :

AH	= 0, ok, dans ce cas :

DX = nombre total des pages non standardisées

BX = nombre des pages non encore allouées

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

L'appel de cette fonction doit être précédé de la vérification de la présence d'un EMM ("Expanded Memory Manager") de la version 4.0.

Cette forme particulière de pages EMS n'est pas gérée par toutes les cartes EMS. Ceci se traduit par la valeur 0 dans le registre DX.


Lire les adresses des pages EMS physiques et leurs numéros    Int 67h, Fct 58h, sous-Fct 00h    LIM/EMS (>= 4.0)

Cette fonction retourne, dans un tampon établi par l'appelant, les adresses des segments de toutes les pages physiques EMS et de leurs numéros.

Entrée :

AH	= 58h

AL	= 00h

DS:SI	= Pointeur sur le tampon destiné à recevoir les informations

Sortie :

AH	= 0, ok, dans ce cas :

CX = nombre des entrées retournées dans le tampon

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

L'appel de cette fonction doit être précédé de la vérification de la présence d'un EMM ("Expanded Memory Manager") de la version 4.0.

Vous pouvez demander à la sous-fonction 00h la taille requise pour le tampon.

Dans le tampon indiqué, l'EMM contient les informations demandées sous forme d'entrées de 2 mots chacune. Le premier contient l'adresse du segment d'une page EMS, le deuxième contient son numéro.


Lire les noms de tous les handles    Int 67h, Fct 54h, Sous-Fct 00h    LIM/EMS (>= 4.0)

Les noms de tous les handles sont transmis dans un buffer du programme d'appel une fois cette fonction appelée.

Entrée :

AH 	= 54h

AL 	= 00h

ES:DI 	= Pointeur sur le buffer recevant les noms des handles

Sortie :

AH 	= 0, Tout va bien, dans ce cas

AL 	= Nombre de handles actifs

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.

·	Le buffer doit disposer d'une place équivalente à 2550 octets parce qu'un maximum de 255 handles est géré et chaque entrée de handle nécessite 10 octets de ce buffer. Les deux premiers octets reçoivent le véritable handle, puis viennent les huit octets qui contiennent le nom du handle.


Lire tous les handles    Int 67h, Fct 4Dh    LIM/EMS (>= 3.0)

Cette fonction permet de charger dans un tableau tous les handles activés ainsi que le nombre de pages respectivement allouées à chacun.

Entrée :

AH	= 4Dh

ES:DI = Pointeur sur le tableau

Sortie :

AH	= 0, o.k, auquel cas :

BX	= Nombre de pages logiques allouées

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	Si la fonction est exécutée avec succès, la zone de mémoire dont l'adresse avait été transmise dans la paire de registres ES:DI contient deux mots pour chaque handle activé. Le premier mot représente le handle, le mot suivant le nombre de pages allouées à ce handle. Le nombre d'entrées de ce tableau figure après appel de la fonction dans le registre BX.

·	Comme l'EMM attribue au maximum 256 handles, le tableau ne peut jamais occuper plus de 1024 octets (soit 1 Ko).


Lire un handle avec un nom précis    Int 67h, Fct 54h, Sous-Fct 01h    LIM/EMS (>= 4.0)

Cette fonction renvoie le handle dont le nom lui a été transmis.

Entrée :

AH 	= 54h

AL 	= 01h

DS:SI 	= Pointeur sur le buffer contenant le nom du handle à rechercher

Sortie :

AH 	= 0, Tout va bien, dans ce cas

DX 	= Le handle recherché

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.


Modifier le nombre de pages logiques allouées    Int 67h, Fct 51h    LIM/EMS (>= 4.0)

Le nombre de pages logiques appartenant à un handle alloué préalablement à l'aide de la fonction 43h peut être augmenté ou diminué librement avec cette fonction.

Entrée :

AH 	= 48h

DX 	= Handle sur lequel les pages ont été allouées

BX 	= Nouveau nombre des pages rendues disponibles par ce handle

Sortie :

AH 	= 0, Tout va bien, dans ce cas

BX = Nombre de pages logiques dont dispose maintenant le handle

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.

·	La réduction du nombre de pages affectées est toujours possible, mais l'augmentation dépend de la taille de la mémoire EMS non encore allouée. Par conséquent, après avoir appelé la fonction, n'oubliez jamais de vérifier l'état d'erreur dans le registre AH.

·	Si vous réduisez le nombre de pages affectées à l'aide de cette fonction, un nombre correspondant de pages est soustrait de l'extrémité supérieure des pages actuellement allouées. Leur contenu est perdu définitivement.

·	Après appel de cette fonction, le handle reste toujours valable même si le nombre de pages atteint 0.


Préparer l'EMS à un redémarrage à chaud    Int 67h, Fct 5Ch    LIM/EMS (>= 4.0)

Entrée :

AH	= 5Ch

Sortie :

AH	= 0, ok

AH	> 0, erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

L'appel de cette fonction doit être précédé de la vérification de la présence d'un EMM ("Expanded Memory Manager") de la version 4.0.


Rétablir la table des pages    Int 67h, Fct 4Eh, Sous-Fct 01h    LIM/EMS (>= 3.2)

L'appel de cette fonction rétablit la concordance entre les pages EMS physiques et logiques préalablement définie avec la sous-fonction 00h de cette fonction.

Entrée :

AH 	= 4Eh

AL 	= 01h

ES:DI 	= Pointeur sur la tableau contenant la table des pages

Sortie :

AH 	= 0, Tout va bien

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.2 ou supérieure est effectivement installée.

·	Contrairement à la fonction 48h de même nature, ici un handle EMM s'avère inutile.


Rétablir le mapping    Int 67h, Fct 48h    LIM/EMS (>= 3.0)

Cette fonction rétablit la concordance entre pages logiques et physiques (Mapping) qui avait été précédemment sauvegardée à l'aide de la fonction 47h.

Entrée :

AH	= 48h

DX	= Handle

Sortie :

AH	= Etat d'erreur

00h : tout va bien

AH > 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 3.0 ou supérieure est effectivement installée.

·	Le handle à spécifier lors de l'appel de cette fonction doit avoir été obtenu à la suite d'un appel antérieur de la fonction 42h de l'EMM.

·	Cet appel est toujours infructueux lorsque le Mapping correspondant au handle spécifié n'a pas encore été sauvegardé à l'aide de la fonction 47h ou bien s'il avait déjà été rétabli au cours d'un appel antérieur de la fonction 48h.

·	Cette fonction est conçue pour être appelée par des programmes résidents ou le système d'exploitation dans le cadre d'un environnement multitâche mais elle peut aussi être utilisée par n'importe quel autre programme.


Rétablir une table des pages enregistrée partiellement    Int 67h, Fct 4Fh, Sous-Fct 01h    LIM/EMS (>= 4.0)

Cette fonction rétablit une table des pages sauvegardée préalablement à l'aide de la sous-fonction 00h.

Entrée :

AH 	= 4Fh

AL 	= 01h

DS:SI 	= Pointeur sur le buffer contenant la table sauvegardée

Sortie :

AH 	= 0, Tout va bien, dans ce cas

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.

·	Le buffer spécifié doit être chargé au préalable avec la sous-fonction 00h de la fonction 4Fh.


Transferts DMA    Int 67h, Fct 5Bh    LIM/EMS (>= 4.0)

Cette fonction possède neuf sous-fonctions que nous ne décrirons pas ici car leur intérêt est strictement limité au développement de systèmes d'exploitation, et elles ne sont en outre gérées que par quelques cartes et pilotes EMS. En d'autres termes, ces sous-fonctions ne sont pas utilisées dans le cadre du développement normal sur PC.


Vérifier les pages EMS non volatiles    Int 67h, Fct 52h, Sous-Fct 02h    LIM/EMS (>= 4.0)

Cette fonction permet de vérifier si une carte EMS offre la possibilité de protéger les pages EMS lors d'un démarrage à chaud de l'ordinateur. Les fonctions 52h/00h et 52h/01h ne peuvent être utilisées que dans ce cas.

Entrée :

AH 	= 52h

AL 	= 02h

Sortie :

AH 	= 0, Tout va bien, dans ce cas

AL = 0 : Les pages non volatiles ne sont pas reconnues

AL = 1 : Les pages volatiles sont reconnues

AH 	> 0, Erreur :

80h : 	erreur interne, éventuellement EMM détruit

81h : 	défaut de fonctionnement EMS

82h :	EMM occupé

83h :	Handle incorrect

84h :	Fonction appelée non reconnue

85h :	Plus de handles disponibles

86h :	Erreur lors de la sauvegarde ou le renvoi de la concordance entre pages logiques et physiques

87h :	Le nombre de pages demandées est supérieur au nombre de pages physiques disponibles

88h :	Le nombre de pages logiques demandées est supérieur au nombre actuellement disponible

89h :	Tentative d'allouer 0 page

8Ah :	Numéro de page logique non valable

8Bh :	Numéro de page physique non valable

8Ch :	Cellule de mémoire devant stocker la table de sauvegarde pleine

8Dh :	La zone de sauvegarde contient déjà une table réservée au handle spécifié

8Eh :	Il n'existe aucune table de sauvegarde pour le handle spécifié

8Fh :	Erreur dans la spécification du numéro de la sous-fonction

Erreurs pouvant survenir à partir de la version 4.0 de l'EMS :

90h :	Type d'attribut non défini

91h :	Caractéristique non reconnue

92h :	Superposition entre les zones source et cible, une partie de la zone est écrasée

93h :	La longueur spécifiée est supérieure à la longueur réelle de la zone allouée

94h :	La zone conventionnelle et la zone de la mémoire EMS se chevauchent

95h :	L'offset indiqué se situe en dehors de la page logique

96h :	Le nombre d'octets à traiter est supérieur à 1 Mo

97h :	Les zones source et cible possèdent le même handle, l'échange ne peut pas avoir lieu

98h :	Type de zone mémoire non défini pour la source ou la cible

99h :	Code d'erreur inutilisé

9Ah :	Le groupe de registres de remplacement spécifié n'est pas reconnu

9Bh :	Tous les groupes de registres de remplacement sont alloués

9Ch :	Les groupes de registres ne sont pas reconnus et le groupe de registre ne correspond pas au numéro zéro

9Dh :	Le groupe de registres de remplacement spécifié n'est pas défini ou alloué

9Eh :	Les canaux DMA dédiés ne sont pas reconnus

9Fh :	Le canal DMA dédié n'est pas valable

A0h :	Pas de handle trouvé sous le nom spécifié

A1h :	Un handle existe déjà sous ce nom

A2h :	Débordement d'adresses au-delà de 1 Mo

A3h :	Pointeur spécifié ou contenu du buffer désigné non valable

A4h :	Accès à la fonction interrompu par le système d'exploitation

Remarques :

·	Comme toutes les autres fonctions de l'EMM, cette fonction ne doit être appelée qu'après s'être assuré qu'une mémoire EMM de la version 4.0 ou supérieure est effectivement installée.


Contents
Index des interruptions et fonctions

Fonctions BIOS	Fonctions BIOS EGA/VGA

Fonctions VESA	Fonctions DOS

Fonctions Multiplexeur	Fonctions EMM/EMS

Fonctions XMS	Fonctions souris

Interruptions matérielles

Liste de toutes les interruptions

Liste des périphériques

Systèmes numériques