Introduction
L'extension de fichier «.BGI», tirant son nom de l'abréviation de l'anglicisme «Borland Graphics Interface», est un format de fichier contenant un code exécutable d'un pilote pour carte graphique.
Le pilote BGI (Borland Graphics Interface) est un logiciel rapide, compact et indépendant du périphérique, conçu pour le développement graphique intégré aux produits de langage
de programmation Turbo Pascal (voir l'unité Graph) et Borland C++. L'indépendance du périphérique est obtenue
via des pilotes chargeables spécifiques au périphérique appelés à partir d'un noyau commun.
Spécification
Spécification |
Description |
Type |
Pilote graphique |
Format |
Binaire |
Auteur |
Borland |
Année de création |
1987 |
Architecture d'exécution BGI
Les programmes produits par les langages de programmations de Borland créent des graphiques via deux
entités agissant de concert : le noyau BGI générique et un pilote spécifique à un périphérique. Généralement, une application créée avec un compilateur de la marque
Borland inclura plusieurs fichiers de pilote de périphérique sur le disque de la distribution (extension .BGI), de sorte que le
programme puisse être exécuté sur différents types d'écrans et d'imprimantes. Les demandes graphiques (par exemple, une ligne, une barre,...) sont envoyées par l'application au noyau BGI,
qui à son tour demande au pilote de périphérique de manipuler réellement le matériel. Un pilote de périphérique BGI est une image binaire, c'est-à-dire une séquence d'octets sans
symboles ni autres informations de liaison. Le pilote commence par un entête court, suivi d'un tableau vectoriel contenant les points d'entrée des fonctions à l'intérieur. La balance du pilote
comprend le code et les données nécessaires pour manipuler le matériel graphique cible. Toutes les références de code et de données dans le pilote doivent être dans un emplacement mémoire
proches (c'est-à-dire, un modèle SMALL, avec un déplacement dans un segment uniquement), et l'intégralité du pilote, code et données, doit correspondre à 64 Ko. En cours de l'utilisation,
le pilote de périphérique peut compter sur son chargement sur une limite de paragraphe. Le noyau BGI utilise une convention d'appel basée sur des registres pour communiquer avec le pilote
de périphérique.
Modèle graphique BGI
Lorsque vous examinez les fonctions répertoriées ici, n'oubliez pas que le BGI effectue la plupart des opérations de dessin en utilisant une couleur de
traçage ou une couleur de traçage implicite (COLOR), une couleur de remplissage (FILLCOLOR) et un motif (FILLPATTERN). Par exemple, l'appel PIESLICE n'accepte
aucune information de motif ou de couleur, mais utilise plutôt la valeur COLOR définie précédemment pour tracer le bord de la tranche du polygone, ainsi que les valeurs FILLCOLOR
et FILLPATTERN précédemment définies pour l'intérieur. Pour plus d'efficacité, de nombreuses opérations ont lieu à la position du pointeur actuel. Par exemple, la routine LINE
n'accepte qu'une seule paire de coordonnées (x,y), en utilisant le pointeur actuel comme point de départ de la ligne et la paire de coordonnées passée comme point d'arrivée. De
nombreuses fonctions (LINE, pour n'en nommer qu'une) affectent le pointeur actuel, et la fonction MOVE peut être utilisée pour ajuster explicitement le pointeur actuel. Le système
de coordonnées BGI place l'origine (pixel 0,0) dans le coin supérieur gauche de l'écran.
Structure d'entête
La section d'entête de périphérique, devant figurer au début du pilote de périphérique, est générée à l'aide de la macro BGI définie dans le fichier
DEVICE.INC. La macro BGI prend le nom du pilote de périphérique à construire en tant que paramètre. Par exemple, un pilote nommé DEBUG devrait commencer comme indiqué ici :
- CSEG SEGMENT PARA PUBLIC 'CODE' ; toute dénomination de segment peut être utilisée
- ASSUME DS:CSEG, CS:CSEG ; CS=DS
-
- CODESEG
-
- INCLUDE DEVICE.INC ; Inclure le fichier DEVICE.INC
- BGI DEBUG ; déclarer la section de la structure d'entête de périphérique
La section de la structure d'entête de périphérique déclare un point d'entrée spécial appelé EMULATE. Si l'action d'un vecteur de pilote de périphérique
n'est pas prise en charge par le matériel d'un périphérique, l'entrée de vecteur doit contenir l'entrée EMULATE. Cette situation sera corrigé au moment du chargement pour contenir un
saut vers la routine d'émulation du noyau. Ces routines émuleront l'action du vecteur en décomposant la demande en primitives plus simples. Par exemple, si le matériel a la fonctionnalité
nécessaire pour dessiner un ARC, le vecteur de l'arc contiendra l'adresse de la routine de distribution des données de l'arc au matériel et s'affichera comme suit :
- DW Offset ARC ; Vecteur à la routine d'arc
Si, comme c'est souvent le cas, le matériel ne dispose pas de la fonctionnalité permettant d'afficher des arcs, le vecteur contiendrait le vecteur EMULATE :
- DW EMULATE
Le noyau prend en charge l'émulation pour les vecteurs suivants :
Vecteur |
Description |
BAR |
Ce vecteur permet d'effectuer un remplissage de rectangles 3D |
ARC |
Ce vecteur permet d'afficher un arc en rendu elliptique |
PIESLICE |
Ce vecteur permet d'effectuer d'afficher une tranches de tarte elliptiques. |
FILLED_ELLIPSE |
Ce vecteur permet d'effectuer l'affichage d'un ellipses remplit. |
La table d'état du pilote (DST)
Le BGI requiert que chaque pilote contienne une table d'état de pilote (DST) pour déterminer les caractéristiques de base du périphérique
qu'il adresse. À titre d'exemple, le DST pour un affichage avec une carte vidéo CGA est indiquée comme ici :
- STATUS STRUC
- STAT DB 0 ; État actuel du périphérique (0 = aucune erreur)
- DEVTYP DB 0 ; Identificateur du type d'appareil (doit être 0)
- XRES DW 639 ; Résolution complète du périphérique dans la direction X
- YRES DW 199 ; Résolution complète du périphérique dans la direction Y
- XEFRES DW 639 ; Résolution X effective du périphérique
- YEFRES DW 199 ; Résolution Y effective du périphérique
- XINCH DW 9000 ; Taille du périphérique X en pouces * 1000
- YINCH DW 7000 ; Taille du périphérique Y en pouces * 1000
- ASPEC DW 4500 ; Rapport de format du ratio = (y_size/x_size) * 10000
- DB 8h
- DB 8h ; pour la compatibilité, utilisez ces valeurs
- DB 90h
- DB 90h
- STATUS ENDS
L'interface BGI fournit un système permettant de signaler les erreurs au noyau BGI et au code de niveau supérieur développé à l'aide des paquets de
langage de programmation de la marque Borland. Cette situation est fait en utilisant le champ STAT de la table d'état du pilote.
Ce champ doit être renseigné par le code du pilote si une erreur est détectée lors de l'exécution de l'installation du périphérique (INSTALL). Les codes d'erreur suivants sont prédéfinis
dans le fichier à inclure GRAPHICS.H pour Turbo C et dans l'unité graphique pour Turbo Pascal.
- grOk = 0;
- grNoInitGraph = -1;
- grNotDetected = -2;
- grFileNotFound = -3;
- grInvalidDriver = -4;
- grNoLoadMem = -5;
- grNoScanMem = -6;
- grNoFloodMem = -7;
- grFontNotFound = -8;
- grNoFontMem = -9;
- grInvalidMode = -10;
- grError = -11;
- grIOerror = -12;
- grInvalidFont = -13;
- grInvalidFontNum = -14;
- grInvalidDeviceNum = -15;
Le champ suivant de la table d'état des périphériques, DEVTYP (Device Status Table), décrit la classe du périphérique contrôlé par le pilote; pour
les périphériques d'écran, cette valeur est toujours égale à 0. Les quatre champs suivants, XRES, YRES, XEFRES et YEFRES, contiennent le nombre de pixels disponibles
pour BGI sur ce périphérique dans les dimensions horizontale et verticale, moins un. Pour les périphériques d'écran, XRES = XEFRES et YRES = YEFRES. Les champs
XINCH et YINCH correspondent au nombre de pouces horizontalement et verticalement dans lequel les pixels du périphérique sont cartographiés, multipliés par 1 000. Ces champs
conjointement avec XRES et YRES permettent un calcul de résolution de périphérique (DPI ou points par pouce) :
Résolution horizontale (DPI) = (XRES + 1) / (XINCH / 1000)
Résolution verticale (DPI) = (YRES + 1) / (YINCH / 1000)
|
Le champ ASPEC (rapport de format de ratio) est en réalité une paire multiplicateur / diviseur (le diviseur est toujours 10000) étant appliqué aux valeurs
de coordonnées Y pour produire des images ajustées selon le rapport d'aspect (par exemple, des cercles ronds). Par exemple, un champ ASPEC de 4500 implique que l'application
devra transformer les coordonnées Y selon le rapport 4500/10000 lors du tracé de cercles sur ce périphérique si elle s'attend à ce qu'ils soient arrondis. Les variations de moniteur
individuelles peuvent nécessiter un ajustement supplémentaire par l'application.
La table des vecteurs de pilote de périphérique
Les routines du pilote de périphérique sont accessibles via un tableau vectoriel. Cette table est au début du pilote et contient des déplacements de 16 bits des
sous-routines et des tables de configuration dans le pilote. Le format de la table de vecteurs est indiqué ci-dessous :
- VECTOR_TABLE:
- DW INSTALL ; Initialisation et installation du pilote
- DW INIT ; Initialiser le périphérique pour la sortie
- DW CLEAR ; Effacer le périphérique graphique; obtenir un nouvel écran
- DW POST ; Quitter le mode graphique, décharger le traceur
- DW MOVE ; Déplacer le pointeur actuel (CP) vers (X, Y)
- DW DRAW ; Tracer une ligne de (CP) à (X, Y)
- DW VECT ; Tracez une ligne de (X0, Y0) à (X1, Y1)
- DW EMULATE ; Réservé, doit contenir le vecteur Emulate
- DW BAR ; Barre 3D remplie de (CP) à (X, Y)
- DW PATBAR ; Rectangle à motifs de (X, Y) à (X1, Y1)
- DW ARC ; Définir ARC
- DW PIESLICE ; Définir une tarte elliptique
- DW FILLED_ELLIPSE ; Dessine une ellipse remplie
- DW PALETTE ; Charger une entrée de palette
- DW ALLPALETTE ; Charger la palette complète
- DW COLOR ; Fixe la couleur/l'arrière-plan du dessin actuel
- DW FILLSTYLE ; Contrôle de remplissage et style
- DW LINESTYLE ; Contrôle du style de dessin au trait
- DW TEXTSTYLE ; Contrôle des polices de caractères matérielles
- DW TEXT ; Matériel dessinez le texte au pointeur courant)
- DW TEXTSIZ ; Requête de taille de police de caractères matérielle
- DW RESERVED ; Réservé
- DW FLOODFILL ; Remplir une région délimitée
- DW GETPIX ; Lire un pixel de (X, Y)
- DW PUTPIX ; Ecrire un pixel à (X, Y)
- DW BITMAPUTIL ; Fonction de requête de taille de bitmap
- DW SAVEBITMAP ; BITBLT de l'écran à la mémoire système
- DW RESTOREBITMAP ; BITBLT de la mémoire système à l'écran
- DW SETCLIP ; Définir un rectangle de découpage
- DW COLOR_QUERY ; Demande d'informations sur la table des couleurs
- ;
- ; 35 vecteurs supplémentaires sont réservés à l'utilisation future de Borland.
- ;
- DW RESERVED ; Réservé à l'usage de Borland (1)
- DW RESERVED ; Réservé à l'usage de Borland (2)
- DW RESERVED ; Réservé à l'usage de Borland (3)
- DW RESERVED ; Réservé à l'usage de Borland (4)
- DW RESERVED ; Réservé à l'usage de Borland (5)
- DW RESERVED ; Réservé à l'usage de Borland (6)
- DW RESERVED ; Réservé à l'usage de Borland (7)
- DW RESERVED ; Réservé à l'usage de Borland (8)
- DW RESERVED ; Réservé à l'usage de Borland (9)
- DW RESERVED ; Réservé à l'usage de Borland (10)
- DW RESERVED ; Réservé à l'usage de Borland (11)
- DW RESERVED ; Réservé à l'usage de Borland (12)
- DW RESERVED ; Réservé à l'usage de Borland (13)
- DW RESERVED ; Réservé à l'usage de Borland (14)
- DW RESERVED ; Réservé à l'usage de Borland (15)
- DW RESERVED ; Réservé à l'usage de Borland (16)
- DW RESERVED ; Réservé à l'usage de Borland (17)
- DW RESERVED ; Réservé à l'usage de Borland (18)
- DW RESERVED ; Réservé à l'usage de Borland (19)
- DW RESERVED ; Réservé à l'usage de Borland (20)
- DW RESERVED ; Réservé à l'usage de Borland (21)
- DW RESERVED ; Réservé à l'usage de Borland (22)
- DW RESERVED ; Réservé à l'usage de Borland (23)
- DW RESERVED ; Réservé à l'usage de Borland (24)
- DW RESERVED ; Réservé à l'usage de Borland (25)
- DW RESERVED ; Réservé à l'usage de Borland (26)
- DW RESERVED ; Réservé à l'usage de Borland (27)
- DW RESERVED ; Réservé à l'usage de Borland (28)
- DW RESERVED ; Réservé à l'usage de Borland (29)
- DW RESERVED ; Réservé à l'usage de Borland (30)
- DW RESERVED ; Réservé à l'usage de Borland (31)
- DW RESERVED ; Réservé à l'usage de Borland (32)
- DW RESERVED ; Réservé à l'usage de Borland (33)
- DW RESERVED ; Réservé à l'usage de Borland (34)
- DW RESERVED ; Réservé à l'usage de Borland (35)
- ;
- ; Tout vecteur suivant ce bloc peut être utilisé par les
- ; développeurs de pilotes de périphériques indépendants comme bon leur semble.
- ;
Descriptions des vecteurs
Les informations suivantes décrivent l'entrée, la sortie et la fonction de chacune des fonctions accessibles via la table des vecteurs de périphérique.
INSTALL |
Installation du pilote de périphérique |
Pilote BGI |
Syntaxe
Entrée
Registre |
Valeur ou description |
AL |
00h |
CL |
Ce registre permet d'indiquer le numéro de mode pour le périphérique. |
Sortie
Registre |
Valeur ou description |
ES:BX |
Cette paire de registre permet d'indiquer un tableau d'état des périphériques (voir la structure STATUS). |
Description
Le noyau appelle le vecteur INSTALL pour préparer le pilote de périphérique à utiliser. Un code de fonction est passé dans le registre AL.
Remarques
- La fonction INSTALL a pour but d'informer le pilote des paramètres de fonctionnement étant utilisés. Le périphérique ne doit pas être commuté en mode graphique (voir INIT). En
entrée, le registre CL contient le mode dans lequel le périphérique fonctionnera (se référer à l'instruction setgraphmode de BGI).
- La valeur de retour de la fonction INSTALL de périphérique est un pointeur sur une table d'état du périphérique (décrite précédemment).
Entrée
Registre |
Valeur ou description |
AL |
01h |
Sortie
Registre |
Valeur ou description |
CX |
Ce registre permet d'indiquer le nombre de modes pris en charge par ce périphérique. |
Description
La fonction MODE QUERY permet de demander le nombre maximal de modes pris en charge par ce pilote de périphérique.
Entrée
Registre |
Valeur ou description |
AL |
02h |
CX |
Ce registre permet d'indiquer le nombre de modes pour la requête. |
Sortie
Registre |
Valeur ou description |
ES:BX |
Cette paire de registre permet d'indiquer une chaîne de caractères de format Turbo Pascal contenant le nom. |
La fonction MODE NAMES permet demander le format ASCII du numéro de mode présent dans le registre CX. La valeur de retour dans la paire de registres
ES:BX pointe sur une chaîne de caractères de format Turbo Pascal décrivant le mode donné.
Remarque
- Une chaîne de caractères Turbo Pascal ou _length_, est une chaîne de caractères dans laquelle le premier octet de données correspond au nombre de caractères de la chaîne
de caractères, suivi des données de la chaîne de caractères elle-même. Pour faciliter l'accès à ces chaînes de caractères à partir du langage de programmation
C, les chaînes de caractères doivent être: suivi d'un octet nul, bien que cet octet nul ne doive pas être inclus dans la longueur de la
chaîne de caractères.
INIT |
Initialiser le périphérique pour la sortie |
Pilote BGI |
Syntaxe
Entrée
Registre |
Valeur ou description |
ES:BX |
Cette paire de registre permet d'indiquer une table de périphérique d'informations. |
Sortie
Aucun
Description
Ce vecteur permet de modifier un périphérique déjà installé du mode texte au mode graphique. Ce vecteur doit également initialiser les palettes par défaut et les
informations relatives au mode de dessin, selon les besoins. L'entrée de ce vecteur est une table d'informations sur les périphériques (DIT). Le format du DIT est présenté
ci-dessous et contient la couleur d'arrière-plan et un indicateur d'initialisation. Si le périphérique requiert des informations supplémentaires de DIT à INIT, ces valeurs peuvent
être ajoutées au DIT. Il n'y a pas de valeur de retour pour cette fonction. Si une erreur survient lors de l'initialisation du périphérique, le champ STAT de la table d'état des
périphériques doit être chargé avec la valeur d'erreur appropriée. Voici la structure DIT :
- struct DIT
- DB 0 ; Couleur de fond pour l'écran d'initialisation
- DB 0 ; Drapeau d'init; 0A5h = ne pas initier; n'importe quoi sinon = init
- DB 64 dup 0 ; Réservé à l'usage futur de Borland
- ; informations utilisateur supplémentaires ici
- DIT ends
CLEAR |
Effacer le périphérique graphique; obtenir un nouvel écran |
Pilote BGI |
Syntaxe
Entrée
Aucun
Sortie
Aucun
Description
Ce vecteur permet d'effacer le périphérique graphique à un état connu. Dans le cas d'un périphérique CRT, l'écran est effacé. Dans le cas d'une imprimante ou
d'un traceur, le papier avance et les stylos sont renvoyés à la station.
POST |
Quitter le mode graphique, décharger le traceur |
Pilote BGI |
Syntaxe
Entrée
Aucun
Sortie
Aucun
Description
Ce vecteur permet de fermer le système graphique. Dans le cas d'écrans graphiques ou d'imprimantes, le mode doit être remis en mode texte. Pour les traceurs,
le papier doit être déchargé et les stylos doivent être retournés à la station.
MOVE |
Déplacer le pointeur actuel (CP) vers (X, Y) |
Pilote BGI |
Syntaxe
Entrée
Registre |
Valeur ou description |
AX |
Ce registre permet d'indiquer la nouvelle coordonnée horizontale du pointeur. |
BX |
Ce registre permet d'indiquer la nouvelle coordonnée verticale du pointeur. |
Sortie
Aucun
Description
Ce vecteur permet de fixer le pointeur actuel du pilote sur (AX, BX). Cette fonction est utilisée avant les routines
TEXT, ARC, SYMBOL, DRAW, FLOODFILL, BAR ou PIESLICE pour définir la position où le dessin doit avoir lieu.
DRAW |
Tracer une ligne de (CP) à (X, Y) |
Pilote BGI |
Syntaxe
Entrée
Registre |
Valeur ou description |
AX |
Ce registre permet d'indiquer la coordonnée X de terminaison pour la ligne. |
BX |
Ce registre permet d'indiquer la coordonnée Y de terminaison pour la ligne. |
Sortie
Aucun
Ce vecteur permet de tracer une ligne du pointeur courant vers (X, Y). Le paramètre actuel LINESTYLE est utilisé. Le pointeur actuel (CP) est mis à jour
vers le noeud final de la ligne.
VECT |
Tracez une ligne de (X0, Y0) à (X1, Y1) |
Pilote BGI |
Syntaxe
Entrée
Registre |
Valeur ou description |
AX |
Ce registre permet d'indiquer la coordonnée X de début pour la ligne (X1). |
BX |
Ce registre permet d'indiquer la coordonnée Y du début pour la ligne (Y1). |
CX |
Ce registre permet d'indiquer la coordonnée X de fin de la ligne (X2). |
DX |
Ce registre permet d'indiquer la coordonnée Y de fin pour la ligne (Y2). |
Sortie
Aucun
Ce vecteur permet de tracer une ligne de (X1, Y1) à (X2, Y2). Le paramètre actuel LINESTYLE est utilisé pour tracer la ligne.
Remarque
- Le pointeur courant n'est pas modifié par ce vecteur.
BAR |
Barre 3D remplie de (CP) à (X, Y) |
Pilote BGI |
Syntaxe
Entrée
Registre |
Valeur ou description |
AX |
Ce registre permet d'indiquer la coordonnée X du bord droit du rectangle. |
BX |
Ce registre permet d'indiquer la coordonnée Y du bord inférieur du rectangle. |
CX |
Ce registre permet d'indiquer le 3D = largeur de la barre 3D (hauteur := 0.75 * largeur); 0 = pas d'effet 3D. |
DX |
Ce registre permet d'indiquer le drapeau du haut de la barre 3D; si CX <> 0 et DX = 0, dessinez un sommet. |
Sortie
Aucun
Ce vecteur permet de remplir et tracer une barre (rectangle) en utilisant les couleurs actuelles COLOR, FILLCOLOR et FILLPATERN. Le pointeur
actuel définit le coin supérieur gauche du rectangle et (X, Y) est situé en bas à droite. Un effet d'ombre 3D facultatif (destiné aux programmes graphiques d'entreprise) est obtenu en rendant
CX différent de zéro. Le registre DX sert alors de drapeau indiquant si un sommet doit être tracé sur la barre.
PATBAR |
Rectangle à motifs de (X, Y) à (X1, Y1) |
Pilote BGI |
Syntaxe
Entrée
Registre |
Valeur ou description |
AX |
Ce registre permet d'indiquer la coordonnée X de la coordonnée du coin gauche d'un rectangle. |
BX |
Ce registre permet d'indiquer la coordonnée Y de la coordonnée du coin supérieur d'un rectangle. |
CX |
Ce registre permet d'indiquer la coordonnée X de la coordonnée du coin droite d'un rectangle. |
DX |
Ce registre permet d'indiquer la coordonnée Y de la coordonnée du coin inférieur d'un rectangle. |
Sortie
Aucun
Ce vecteur permet de remplir (mais ne dessine pas la bordure) le rectangle indiqué avec le motif et la couleur de remplissage actuels.
ARC |
Définir ARC |
Pilote BGI |
Syntaxe
Entrée
Registre |
Valeur ou description |
AX |
Ce registre permet d'indiquer l'angle de départ de l'arc en degrés (0 à 360). |
BX |
Ce registre permet d'indiquer l'angle final de l'arc en degrés (0 à 360). |
CX |
Ce registre permet d'indiquer le X du rayon de l'arc elliptique. |
DX |
Ce registre permet d'indiquer le Y du rayon de l'arc elliptique. |
Sortie
Aucun
Ce vecteur permet de dessiner un arc elliptique en utilisant le pointeur courant comme point central de l'arc, de l'angle de départ donné à l'angle de fin spécifié.
Pour obtenir des arcs de cercle, l'application (et non le pilote) doit régler le rayon Y de la manière suivante :
YRAD := XRAD * (ASPEC / 10000);
|
où ASPEC est la valeur d'aspect enregistrée dans le DST.
PIESLICE |
Définir une tarte elliptique |
Pilote BGI |
Syntaxe
Entrée
Registre |
Valeur ou description |
AX |
Ce registre permet d'indiquer le rayon horizontale de l'ellipse (X). |
BX |
Ce registre permet d'indiquer le rayon verticale de l'ellipse (Y). |
Sortie
Aucun
Ce vecteur permet de dessiner une ellipse remplie. Le point central de l'ellipse est supposé être au pointeur actuel (CP). Le registre AX contient le rayon
X de l'ellipse et le registre BX, le rayon Y de l'ellipse.
PALETTE |
Charger une entrée de palette |
Pilote BGI |
Syntaxe
Entrée
Registre |
Valeur ou description |
AX |
Ce registre permet d'indiquer le numéro d'index et le code de fonction pour le chargement. |
BX |
Ce registre permet d'indiquer la valeur de couleur à charger dans la palette. |
Sortie
Aucun
Ce vecteur permet d'indiquer le vecteur PALETTE chargeant des entrées uniques dans la palette. Le registre AX contient le code de fonction pour l'action
de chargement et l'index de l'entrée de table de couleurs à charger. Les deux bits supérieurs de AX déterminent l'action à prendre. Le tableau ci-dessous récapitule les actions. Si les bits de
contrôle sont à 00, l'index de la table des couleurs dans (AX AND 03FFFh) est chargé avec la valeur dans BX. Si les bits de contrôle sont à 10, l'index de la table des couleurs dans (AX AND 03FFFh)
est chargé avec la valeur RVB dans (Rouge = BX, Vert = CX et Bleu = DX). Si les bits de contrôle sont à 11, l'entrée de la table de couleurs pour l'arrière-plan est chargée avec la valeur dans BX.
Bits de contrôle |
VAleur de couleur et d'index |
00 |
Cette valeur permet d'indiquer que le registre BX contient une couleur, AX est un index |
01 |
Cette valeur n'est pas utilisé. |
10 |
Cette valeur permet d'indiquer : Rouge = BX Vert = CX Bleu = DX, AX est un index. |
11 |
Cette valeur permet d'indiquer que le registre BX contient une couleur pour l'arrière-plan. |
ALLPALETTE |
Charger la palette complète |
Pilote BGI |
Syntaxe
Entrée
Registre |
Valeur ou description |
ES:BX |
Cette paire de registres permet d'indiquer un tableau d'entrées de palette. |
Sortie
Aucun
Description
Ce vecteur permet d'indiquer que la routine ALLPALETTE charge la palette entière en un seul appel de pilote. La paire de registres ES:BX pointe vers la
table de valeurs à charger dans la palette. Le nombre d'entrées est déterminé par les entrées de couleur dans la table d'état du pilote. La couleur d'arrière-plan n'est pas explicitement chargée
avec cette commande.
COLOR |
Fixe la couleur/l'arrière-plan du dessin actuel |
Pilote BGI |
Syntaxe
Entrée
Registre |
Valeur ou description |
AL |
Ce registre permet d'indiquer le numéro d'index de la couleur de dessin actuelle. |
AH |
Ce registre permet d'indiquer le numéro d'index de la couleur de remplissage. |
Sortie
Aucun
Description
Ce vecteur permet d'indiquer la couleur de dessin actuelle. La valeur dans AL correspond à l'index dans la palette de la nouvelle couleur de dessin actuelle.
La valeur dans le registre AH est l'indice de couleur de la nouvelle couleur de remplissage. Toutes les primitives sont dessinées avec la couleur de dessin actuelle jusqu'à ce que la
couleur soit modifiée. La couleur de remplissage est utilisée pour la couleur intérieure des primitives de barres, de polygones, de pointes de tarte (de secteurs) et
de remplissage de région primitive.
FILLSTYLE |
Contrôle de remplissage et style |
Pilote BGI |
Syntaxe
Entrée
Registre |
Valeur ou description |
AL |
Ce registre permet d'indiquer le numéro du motif de remplissage primaire. |
ES:BX |
Cette paire de registres permet d'indiquer si le numéro de modèle est 0FFh, pointe vers le masque de modèle défini par l'utilisateur. |
Sortie
Aucun
Description
Ce vecteur permet de fixer le motif de remplissage pour le dessin. Le motif de remplissage est utilisé pour remplir toutes les régions délimitées
(BAR, POLY et PIESLICE). Les numéros des motifs de remplissage prédéfinis sont les suivants :
Code |
Description |
Motif de remplissage sur 8 octets |
0 |
Pas de remplissage |
000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h |
1 |
Remplissage solide |
0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh |
3 |
Remplissage de barre oblique |
001h, 002h, 004h, 008h, 010h, 020h, 040h, 080h |
4 |
Barres obliques |
0E0h, 0C1h, 083h, 007h, 00Eh, 01Ch, 038h, 070h |
5 |
Remplissage de oblique inversé |
0F0h, 078h, 03Ch, 01Eh, 00Fh, 087h, 0C3h, 0E1h |
6 |
Remplissage de barre oblique inversé |
0A5h, 0D2h, 069h, 0B4h, 05Ah, 02Dh, 096h, 04Bh |
7 |
Remplissage de hachures |
0FFh, 088h, 088h, 088h, 0FFh, 088h, 088h, 088h |
8 |
Remplissage de hachures horizontale |
081h, 042h, 024h, 018h, 018h, 024h, 042h, 081h |
9 |
Remplissage d'interligne |
0CCh, 033h, 0CCh, 033h, 0CCh, 033h, 0CCh, 033h |
10 |
Remplissage de point large |
080h, 000h, 008h, 000h, 080h, 000h, 008h, 000h |
11 |
Fermer le remplissage de points |
088h, 000h, 022h, 000h, 088h, 000h, 022h, 000h |
0FFh |
L'utilisateur définit le motif du remplissage. |
Dans le cas d'un motif de remplissage défini par l'utilisateur, la paire de registres ES:BX pointe vers 8 octets de données agencées sous la forme d'un motif de
8x8 bits à utiliser pour le motif de remplissage.
LINESTYLE |
Contrôle du style de dessin au trait |
Pilote BGI |
Syntaxe
Entrée
Registre |
Valeur ou description |
AL |
Ce registre permet d'indiquer le numéro de motif de ligne. |
BX |
Ce registre permet d'indiquer le motif de dessin au trait défini par l'utilisateur. |
CX |
Ce registre permet d'indiquer la largeur de trait pour dessiner. |
Sortie
Aucun
Description
Ce vecteur permet de fixer le style de dessin de ligne actuel et la largeur de la ligne. La largeur de la ligne est d'un pixel ou de trois pixels de large. Le
tableau suivant définit les styles de trait par défaut :
Code |
Description |
Motif de 16 bits |
AL = 0 |
Style de trait continu |
1111111111111111B |
AL = 1 |
Style de ligne en pointillé |
1100110011001100B |
AL = 2 |
Style de ligne médiane |
1111110001111000B |
AL = 3 |
Style de ligne pointillée |
1111100011111000B |
AL = 4 |
Style de ligne défini par l'utilisateur |
Si la valeur dans AL est quatre, l'utilisateur définit un style de ligne dans le registre BX. Si la valeur dans AL n'est pas quatre, la valeur dans
le registre BX est ignorée.
TEXTSTYLE |
Contrôle des polices de caractères matérielles |
Pilote BGI |
Syntaxe
Entrée
Registre |
Valeur ou description |
AL |
Ce registre permet d'indiquer le numéro de police de caractères du matériel. |
AH |
Ce registre permet d'indiquer l'orientation de la police de caractères matérielle : 0 = normal, 1 = 90 degrés, 2 = bas. |
BX |
Ce registre permet d'indiquer le caractère X souhaité (taille en unités graphiques). |
CX |
Ce registre permet d'indiquer le caractère Y souhaité (taille en unités graphiques). |
Sortie
Registre |
Valeur ou description |
BX |
Ce registre permet d'indiquer la taille de caractère X la plus proche disponible (en unités graphiques). |
CX |
Ce registre permet d'indiquer la taille de caractère Y la plus proche disponible (en unités graphiques). |
Description
Ce vecteur permet de fixer les attributs de la police de caractères matérielle pour la sortie. Les paramètres concernés sont la police de caractères matérielle à
utiliser, l'orientation de la police de caractères pour la sortie, la hauteur et la largeur souhaitées pour la sortie de la police de caractères. Tout le texte suivant sera dessiné en utilisant
ces attributs. Si la taille souhaitée n'est pas prise en charge par le périphérique actuel, utilisez la correspondance disponible la plus proche de la taille souhaitée. La valeur de retour de
cette fonction donne les dimensions de la police de caractères (en pixels) étant réellement utilisée. Par exemple, si la police de caractères souhaitée est de 8x10 pixels et que le
périphérique prend en charge les polices de caractères de 8x8 et 16x16, la correspondance la plus proche sera celle de 8x8. La sortie de la fonction sera BX = 8 et CX = 8.
TEXT |
Matériel dessinez le texte au pointeur courant |
Pilote BGI |
Syntaxe
Entrée
Registre |
Valeur ou description |
ES:BX |
Cette paire de registres permet d'indiquer le texte ASCII de la chaîne de caractères. |
CX |
Ce registre permet d'indiquer la longueur (en caractères) de la chaîne de caractères. |
Sortie
Aucun
Description
Ce vecteur permet d'envoyer un texte matériel au périphérique de sortie. Le texte est envoyé au périphérique à partir du pointeur courant.
Le pointeur courant est supposé être en haut à gauche de la chaîne de caractères.
TEXTSIZ |
Requête de taille de police de caractères matérielle |
Pilote BGI |
Syntaxe
Entrée
Registre |
Valeur ou description |
ES:BX |
Cette paire de registres permet d'indiquer le texte ASCII de la chaîne de caractères. |
CX |
Ce registre permet d'indiquer la longueur (en caractères) de la chaîne de caractères. |
Sortie
Registre |
Valeur ou description |
BX |
Ce registre permet d'indiquer la largeur de la chaîne de caractères en unités graphiques. |
CX |
Ce registre permet d'indiquer la hauteur de la chaîne en unités graphiques. |
Description
Ce vecteur permet de demander la longueur physique réelle et la largeur d'une chaîne de caractères de texte. Les attributs de texte actuels (définis par
TEXTSTYLE) permettent de déterminer les dimensions réelles d'une chaîne de caractères sans l'afficher. L'application peut ainsi déterminer comment une chaîne de caractères spécifique va
s'adapter et réduire ou augmenter la taille de la police de caractères selon les besoins. Il n'y a aucune sortie graphique pour ce vecteur. Si une erreur se produit pendant le calcul de la longueur,
le champ STAT de l'enregistrement d'état de périphérique doit être marqué avec le code d'erreur de périphérique.
FLOODFILL |
Remplir une région délimitée |
Pilote BGI |
Syntaxe
Entrée
Registre |
Valeur ou description |
AX |
Ce registre permet d'indiquer la coordonnée horizontale du point de départ. |
BX |
Ce registre permet d'indiquer la coordonnée verticale pour le point de départ. |
CL |
Ce registre permet d'indiquer la couleur de délimitation du remplissage inondé. |
Sortie
Aucun (les erreurs sont renvoyées dans le champ STAT de l'état du périphérique).
Description
Ce vecteur est appelée pour remplir une région délimitée sur des périphériques bitmap. La coordonnée d'entrée (X, Y) est utilisée comme point de départ pour le
remplissage d'une surface. Le pointeur courant devient le point de départ. Le FILLPATTERN actuel est utilisé pour effectuer un remplissage de la région.
GETPIXEL |
Lire un pixel de (X, Y) |
Pilote BGI |
Syntaxe
Entrée
Registre |
Valeur ou description |
AX |
Ce registre permet d'indiquer la coordonnée horizontale du point à examiner. |
BX |
Ce registre permet d'indiquer la coordonnée verticale du point à examiner. |
Sortie
Registre |
Valeur ou description |
DL |
Ce registre permet d'indiquer l'index de couleur du pixel à lire dans l'écran. |
Description
Ce vecteur permet d'effectuer la lecture de la valeur d'indice de couleur d'un seul pixel à partir de l'écran graphique. La valeur de l'indice de couleur est
renvoyée dans le registre DL.
PUTPIXEL |
Ecrire un pixel à (X, Y) |
Pilote BGI |
Syntaxe
Entrée
Registre |
Valeur ou description |
AX |
Ce registre permet d'indiquer la coordonnée horizontale du point à fixer. |
BX |
Ce registre permet d'indiquer la coordonnée verticale du point à fixer. |
DL |
Ce registre permet d'indiquer l'index de couleur du pixel à écrire dans l'écran. |
Sortie
Aucun
Description
Ce vecteur permet d'écrire un seul pixel avec la valeur d'indice de couleur contenue dans le registre DL.
BITMAPUTIL |
Fonction de requête de taille de bitmap |
Pilote BGI |
Syntaxe
Entrée
Aucun
Sortie
Registre |
Valeur ou description |
ES:BX |
Cette paire de registres permet d'indiquer la table d'utilitaire Bitmap (BitMap Utility Table). |
Description
Ce vecteur permet d'indiquer la charge du pointeur dans ES:BX, étant la base d'un tableau définissant des points de saisie de casse spéciaux utilisés pour la
manipulation de pixels. Ces fonctions ne sont actuellement appelées que par les routines d'émulation d'ellipse se trouvant dans le noyau BGI. Si le pilote de périphérique n'utilise pas
l'émulation pour les ellipses, cette entrée n'a pas besoin d'être implémentée. Cette entrée a été fournie car certains matériels ont besoin de commandes supplémentaires pour entrer et sortir du
mode pixel, ce qui alourdit les vecteurs GETPIXEL et SETPIXEL. Cette surcharge a affecté la vitesse d'affichage des routines d'émulation d'ellipse. Ces points d'entrée sont fournis
de sorte que les routines d'émulation d'ellipse puissent passer en mode pixel et restent en mode pixel pendant toute la durée du processus de rendu d'ellipse.
Le format de la table BITMAPUTIL est le suivant :
- DW offset GOTOGRAPHIC ; Entrer en mode pixel sur le matériel graphique
- DW offset EXITGRAPHIC ; Laisser le mode pixel sur le matériel graphique
- DW offset PUTPIXEL ; +crire un pixel au matériel graphique
- DW offset GETPIXEL ; Lire un pixel du matériel graphique
- DW offset GETPIXBYTE ; Retourne un mot contenant la profondeur de pixel
- DW offset SET_DRAW_PAGE ; Sélectionnez la page dans laquelle dessiner les primitives
- DW offset SET_VISUAL_PAGE ; Fixe la page à afficher
- DW offset SET_WRITE_MODE ; Contrôle de dessin au trait XOR
Les fonctionnalités de ces fonctions sont les suivants :
Fonctions |
Description |
GOTOGRAPHIC |
Cette fonction permet d'entrer dans le mode spécial Pixel Graphics. |
EXITGRAPHIC |
Cette fonction permet de quitter le mode spécial Pixel Graphics. |
PUTPIXEL |
Cette fonction permet d'effectuer l'écriture d'un pixel sur le matériel graphique. |
GETPIXEL |
Cette fonction permet d'effectuer la lecture d'un pixel du matériel graphique. |
GETPIXBYTE |
Cette fonction permet de demander le nombre de bits par pixel (profondeur de couleur) du graphique. |
SET_DRAW_PAGE |
Cette fonction permet de prendre le numéro de page souhaité dans le registre AL et sélectionne d'autres pages graphiques pour la sortie des primitives graphiques. |
SET_VISUAL_PAGE |
Cette fonction permet de prendre le numéro de page souhaité dans le registre AL et sélectionne des graphiques de remplacement à afficher à l'écran. |
SET_WRITE_MODE |
Cette fonction permet de prendre le mode XOR si la valeur dans AX est égal à un et désactivé si la valeur dans AX est égale à zéro. |
SAVEBITMAP |
BITBLT de l'écran à la mémoire système |
Pilote BGI |
Syntaxe
Entrée
Registre |
Valeur ou description |
ES:BX |
Cette paire de registres pointe vers la mémoire tampon dans la mémoire système à écrire. L'adresse ES:[BX] contient la largeur du rectangle -1. L'adresse ES:[BX+2] contient la hauteur du rectangle -1. |
CX |
Ce registre permet d'indiquer la coordonnée X supérieure gauche du rectangle. |
DX |
Ce registre permet d'indiquer la coordonnée Y supérieure gauche du rectangle. |
Sortie
Aucun
Description
Ce vecteur permet de copier un bloc de pixels d'écran d'un rectangle défini, comme spécifié par (SI,DI) - (CX,DX), dans la mémoire système.
RESTOREBITMAP |
BITBLT de la mémoire système à l'écran |
Pilote BGI |
Syntaxe
Entrée
Registre |
Valeur ou description |
ES:BX |
Cette paire de registres pointe vers la mémoire tampon dans la mémoire système à lire. L'adresse ES:[BX] contient la largeur du rectangle -1. L'adresse ES:[BX+2] contient la hauteur du rectangle -1. |
CX |
Ce registre permet d'indiquer la coordonnée X supérieure gauche du rectangle. |
DX |
Ce registre permet d'indiquer la coordonnée Y supérieure gauche du rectangle. |
AL |
Ce registre permet d'indiquer l'opération de pixel à utiliser lors du transfert de l'image dans la mémoire graphique. Mode écriture pour écriture en bloc : |
0 |
Cette valeur d'indiquer le mode écrasement. |
1 |
Cette valeur d'indiquer le mode XOR. |
2 |
Cette valeur d'indiquer le mode OR. |
3 |
Cette valeur d'indiquer le mode AND. |
4 |
Cette valeur d'indiquer le mode par complément. |
Sortie
Aucun
Description
Ce vecteur permet de charger les pixels d'écran à partir de la mémoire système. La routine lit un flux d'octets de la mémoire système dans le rectangle défini
par (SI,DI)-(CX,DX). La valeur dans le registre AL définit le mode utilisé pour l'écriture. Le tableau suivant définit les valeurs des modes d'écriture disponibles :
Opération pixel |
Valeur |
Mode en écriture |
0 |
XOR logique |
1 |
OR logique |
2 |
AND logique |
3 |
Complément |
4 |
SETCLIP |
Définir un rectangle de découpage |
Pilote BGI |
Syntaxe
Entrée
Registre |
Valeur ou description |
AX |
Ce registre permet d'indiquer la coordonnée horizontale supérieur gauche du rectangle à découper. |
BX |
Ce registre permet d'indiquer la coordonnée verticale supérieur gauche du rectangle à découper. |
CX |
Ce registre permet d'indiquer la coordonnée horizontale inférieur droite du rectangle à découper. |
DX |
Ce registre permet d'indiquer la coordonnée verticale inférieur droite du rectangle à découper. |
Sortie
Aucun
Description
Ce vecteur permet de fixer une zone de découpage rectangulaire à l'écran. Les registres (AX,BX)-(CX,DX) définissent la région de découpage.
COLOR_QUERY |
Demande d'informations sur la table des couleurs |
Pilote BGI |
Syntaxe
Entrée
Registre |
Valeur ou description |
AL |
000h |
Sortie
Registre |
Valeur ou description |
BX |
Ce registre permet d'indiquer la taille de la table de correspondance des couleurs. |
CX |
Ce registre permet d'indiquer le nombre maximal de couleurs autorisé. |
Description
Ce vecteur permet de demander le nombre maximal de couleurs prises en charge par le matériel. La valeur renvoyée dans le registre BX est le nombre d'entrées de
couleur dans la table de correspondance des couleurs. La valeur renvoyée dans le registre CX est le nombre le plus élevé pour une valeur de couleur. Cette valeur est généralement la valeur en BX
moins un; cependant, il peut y avoir des exceptions.
Entrée
Registre |
Valeur ou description |
AL |
001h |
Sortie
Registre |
Valeur ou description |
ES:BX |
Cette paire de registres permet d'indiquer tableau des couleurs par défaut pour le périphérique. |
Description
Ce vecteur permet de demander les valeurs de la table de couleurs pour la table de couleurs par défaut (mise sous tension). Le format de cette table est un
octet contenant le nombre d'entrées valides, suivi du nombre d'octets donné d'informations de couleur.
Dernière mise à jour : Vendredi, le 13 septembre 2019