Pl2 VDI.DOC/fr: Difference between revisions
Jump to navigation
Jump to search
m (Added category) |
Olivier.jan (talk | contribs) mNo edit summary |
||
(3 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
+ | {{Languages|Pl2 VDI.DOC}} |
||
<pre> |
<pre> |
||
Line 19: | Line 20: | ||
cher un cercle,un polygone,remplir des surfaces etc... |
cher un cercle,un polygone,remplir des surfaces etc... |
||
− | Je vais aussi être |
+ | Je vais aussi être amené à parler des fonctions de l'AES, celles-ci ne |
− | seront pas |
+ | seront pas étudiées dans cet ouvrage (vu la complexité de leur mise en |
oeuvre). |
oeuvre). |
||
Les fonctions de l'AES s'occupent essentiellement de la gestion de |
Les fonctions de l'AES s'occupent essentiellement de la gestion de |
||
− | l' |
+ | l'écran et de la souris.(Fenètres,gestion des objets...) |
- Il faudra fournir un certain nombre de paramètres aux fonctions du VDI |
- Il faudra fournir un certain nombre de paramètres aux fonctions du VDI |
||
− | pour pouvoir obtenir l'effet |
+ | pour pouvoir obtenir l'effet désiré: |
− | La transmission des paramètres se fait par l' |
+ | La transmission des paramètres se fait par l'intermédiaire d'un TABLEAU: |
− | (Un TABLEAU n'est rien d'autre qu'un espace de la |
+ | (Un TABLEAU n'est rien d'autre qu'un espace de la mémoire qu'on a réser- |
− | + | vé à partir d'une adresse (avec DS.x place) ). |
|
Ce tableau est commun aux fonctions du VDI et de l'AES. |
Ce tableau est commun aux fonctions du VDI et de l'AES. |
||
Le tableau se trouve dans le segment BSS et c'est à certaines de ses ad- |
Le tableau se trouve dans le segment BSS et c'est à certaines de ses ad- |
||
resses qu'on placera les paramètres. |
resses qu'on placera les paramètres. |
||
Dans le segment DATA, on devra aussi poser un label qui pointe sur les |
Dans le segment DATA, on devra aussi poser un label qui pointe sur les |
||
− | + | différentes adresses du tableau.(Un label qui pointe sur des adresses |
|
− | en zone DATA est |
+ | en zone DATA est généralement appellé VECTEUR...) |
− | Dans le tableau qui regroupe toutes les |
+ | Dans le tableau qui regroupe toutes les réservations pour les fonctions |
du VDI et de l'AES, on distingue plusieurs groupes de tableaux: |
du VDI et de l'AES, on distingue plusieurs groupes de tableaux: |
||
− | .Le tableau |
+ | .Le tableau pointé par l'adresse 'CONTROL' (pour le VDI et l'AES) |
− | :c'est dans ce tableau qu'on |
+ | :c'est dans ce tableau qu'on déposera le code de la fonction et |
les dimensions des tableaux 'intin','ptsin','intout','ptsout'. |
les dimensions des tableaux 'intin','ptsin','intout','ptsout'. |
||
− | .Celui |
+ | .Celui pointé par l'adresse 'GLOBAL' (pour l'AES) |
− | : |
+ | :détails plus loin... |
− | .4 tableaux |
+ | .4 tableaux pointés par les adresses 'INTIN','INTOUT','PTSIN','PTSOUT' |
Dans les tableaux de type 'IN', l'utilisateur peut fournir des para- |
Dans les tableaux de type 'IN', l'utilisateur peut fournir des para- |
||
mètres et dans ceux du type 'OUT', certaines fonctions du VDI ou de |
mètres et dans ceux du type 'OUT', certaines fonctions du VDI ou de |
||
l'AES retournent des valeurs. |
l'AES retournent des valeurs. |
||
Dans INTIN on placera les paramètres propres à la fonction VDI ou |
Dans INTIN on placera les paramètres propres à la fonction VDI ou |
||
− | AES |
+ | AES utilisée. |
− | Dans INTOUT, le VDI ou l'AES posera des |
+ | Dans INTOUT, le VDI ou l'AES posera des données de retour. |
− | Dans PTSIN on range des |
+ | Dans PTSIN on range des coordonnées:ce tableau est utlisé par le VDI. |
− | Dans PTSOUT le VDI fournit en retour des |
+ | Dans PTSOUT le VDI fournit en retour des coordonnées (avec certaines |
fonction). |
fonction). |
||
.On trouvera aussi 2 tableaux: 'ADDRIN' et 'ADDROUT' qui sont |
.On trouvera aussi 2 tableaux: 'ADDRIN' et 'ADDROUT' qui sont |
||
− | + | spécifiques à l'AES et qui contiennent des adresses (pointant |
|
− | sur des |
+ | sur des données...). |
.Le vecteur 'VDIPB' du segment DATA pointe successivement les adresses |
.Le vecteur 'VDIPB' du segment DATA pointe successivement les adresses |
||
− | des tableaux: CONTROL,INTIN,PTSIN,INTOUT,PTSOUT qui sont |
+ | des tableaux: CONTROL,INTIN,PTSIN,INTOUT,PTSOUT qui sont utilisés par |
le VDI. |
le VDI. |
||
.Il existe aussi un vecteur (AESPB) qui pointe sur les adresses des |
.Il existe aussi un vecteur (AESPB) qui pointe sur les adresses des |
||
tableaux OPCODE,APVERS,INTIN,INTOUT,ADDRIN,ADDROUT et qui est uti- |
tableaux OPCODE,APVERS,INTIN,INTOUT,ADDRIN,ADDROUT et qui est uti- |
||
− | + | lisé par les fonctions de l'AES. |
|
− | Ce tableau est donc |
+ | Ce tableau est donc composé ainsi: |
Line 88: | Line 89: | ||
− | GLOBAL: ; |
+ | GLOBAL: ;début du tableau GLOBAL |
apvers ds.w 1 ;1° adresse du tableau 'global':apvers |
apvers ds.w 1 ;1° adresse du tableau 'global':apvers |
||
apcount ds.w 1 ;2° adresse:apcount |
apcount ds.w 1 ;2° adresse:apcount |
||
Line 118: | Line 119: | ||
− | grhandle ds.w 1 ;ici on |
+ | grhandle ds.w 1 ;ici on réserve 1 mot pour le handle |
Line 165: | Line 166: | ||
apvers :(en GLOBAL+0) =nr° de la version de l'AES en service |
apvers :(en GLOBAL+0) =nr° de la version de l'AES en service |
||
− | apcount :(en GLOBAL+2) =nombre maximum |
+ | apcount :(en GLOBAL+2) =nombre maximum autorisé de programmes |
− | simultanement en |
+ | simultanement en mémoire |
apid :(en GLOBAL+4) =nr° de l'application en cours |
apid :(en GLOBAL+4) =nr° de l'application en cours |
||
apprivate:(en GLOBAL+6) =selon la fonction |
apprivate:(en GLOBAL+6) =selon la fonction |
||
apptree :(en GLOBAL+10)=pointeur sur une structure d'arbre d'objets |
apptree :(en GLOBAL+10)=pointeur sur une structure d'arbre d'objets |
||
− | ap1resv :(en GLOBAL+14)= |
+ | ap1resv :(en GLOBAL+14)=réservé à des applications futures... |
ap2resv :(en GLOBAL+18)=idem |
ap2resv :(en GLOBAL+18)=idem |
||
ap3resv :(en GLOBAL+22)=idem |
ap3resv :(en GLOBAL+22)=idem |
||
Line 176: | Line 177: | ||
− | - Mais avant de pouvoir utiliser les |
+ | - Mais avant de pouvoir utiliser les différentes fonctions du VDI ou |
de l'AES, il faudra faire quelques initialisations. |
de l'AES, il faudra faire quelques initialisations. |
||
(Comme pour le GEMDOS avec SETBLOCK). |
(Comme pour le GEMDOS avec SETBLOCK). |
||
Line 187: | Line 188: | ||
- Pour appeller ces fonctions, nous allons passer les paramètres |
- Pour appeller ces fonctions, nous allons passer les paramètres |
||
− | + | nécéssaires dans le tableau (aux bonnes adresses) des réserva- |
|
tions et nous appellerons le VDI avec: |
tions et nous appellerons le VDI avec: |
||
Line 204: | Line 205: | ||
La fonction OPEN_SCREEN_WORKSTATION permet d'ouvrir une station |
La fonction OPEN_SCREEN_WORKSTATION permet d'ouvrir une station |
||
− | de travail en chargeant en |
+ | de travail en chargeant en mémoire le système de gestion graphique |
du VDI. |
du VDI. |
||
Line 212: | Line 213: | ||
Dans sptsin ,1 MOT=0 |
Dans sptsin ,1 MOT=0 |
||
Dans sintin,1 MOT=11 |
Dans sintin,1 MOT=11 |
||
− | Dans handle,le MOT |
+ | Dans handle,le MOT pointé par grhandle |
Dans intin jusqu'à intin+20, 1 MOT=1 |
Dans intin jusqu'à intin+20, 1 MOT=1 |
||
− | En |
+ | En réalité, les paramètres placés en INTIN, doivent donner les |
renseignements suivants: |
renseignements suivants: |
||
− | intin =identification du |
+ | intin =identification du périphérique à la carte mère |
intin+2 =type de ligne |
intin+2 =type de ligne |
||
intin+4 =couleur de la ligne |
intin+4 =couleur de la ligne |
||
Line 224: | Line 225: | ||
intin+8 =couleur du marquage |
intin+8 =couleur du marquage |
||
intin+10=jeu de caractère |
intin+10=jeu de caractère |
||
− | intin+12=couleur de l' |
+ | intin+12=couleur de l'écriture |
intin+14=type de remplissage |
intin+14=type de remplissage |
||
intin+16=motif de remplissage |
intin+16=motif de remplissage |
||
intin+18=couleur du remplissage |
intin+18=couleur du remplissage |
||
− | intin+20= |
+ | intin+20=coordonnées pour des drapeaux |
Mais nous ne nous en servirons pas, nous mettons alors toutes ces |
Mais nous ne nous en servirons pas, nous mettons alors toutes ces |
||
Line 245: | Line 246: | ||
Dans sintout,1 MOT=0 |
Dans sintout,1 MOT=0 |
||
− | La fonction GRAF_HANDLE de l'AES permet de donner un |
+ | La fonction GRAF_HANDLE de l'AES permet de donner un numéro |
d'identification à notre programme. |
d'identification à notre programme. |
||
− | Ce |
+ | Ce numéro retourne dans INTOUT et nous le placerons en 'grhandle'. |
Les paramètres à passer sont: |
Les paramètres à passer sont: |
||
Line 261: | Line 262: | ||
Après l'appel de la fonction GRAF_HANDLE de l'AES, nous poserons |
Après l'appel de la fonction GRAF_HANDLE de l'AES, nous poserons |
||
− | le nr° d'identification |
+ | le nr° d'identification déposé en INTOUT en 'grhandle' avec: |
MOVE INTOUT,GRHANDLE |
MOVE INTOUT,GRHANDLE |
||
− | Nous allons aussi |
+ | Nous allons aussi créer 2 MACROS instructions qui vont se charger |
d'appeller le VDI et l'AES. |
d'appeller le VDI et l'AES. |
||
Line 363: | Line 364: | ||
INCLUDE "INIT_GEM.L" ;fichier des initialisations du VDI/AES |
INCLUDE "INIT_GEM.L" ;fichier des initialisations du VDI/AES |
||
− | SETBLOCK ; |
+ | SETBLOCK ;réserve mémoire |
. ;les instructions qui forment |
. ;les instructions qui forment |
||
Line 371: | Line 372: | ||
DATA |
DATA |
||
− | . ;les |
+ | . ;les données initialisées |
. |
. |
||
Line 377: | Line 378: | ||
INCLUDE "TABLEAU.L" ;le TABLEAU du VDI et de l'AES: |
INCLUDE "TABLEAU.L" ;le TABLEAU du VDI et de l'AES: |
||
− | ;Contient aussi les |
+ | ;Contient aussi les réservations en 'PILE' |
;pour SETBLOCK... |
;pour SETBLOCK... |
||
END |
END |
||
Line 386: | Line 387: | ||
--------------------------- |
--------------------------- |
||
− | Vous voilà prèts à |
+ | Vous voilà prèts à présent à utiliser les fonctions graphiques du VDI: |
− | Je vais citer les fonctions les plus |
+ | Je vais citer les fonctions les plus intéressantes et vous donner pour |
chacunes d'elles les paramètres à passer dans le tableau: TABLEAU.L |
chacunes d'elles les paramètres à passer dans le tableau: TABLEAU.L |
||
Line 396: | Line 397: | ||
− | TEXT:Permet l' |
+ | TEXT:Permet l'édition d'un texte à des coordonnées (x,y) |
---- |
---- |
||
Paramètres: |
Paramètres: |
||
Line 404: | Line 405: | ||
sintin=n |
sintin=n |
||
handle=grhandle |
handle=grhandle |
||
− | intin=la chaine de caractère |
+ | intin=la chaine de caractère composée de 'n' lettres |
ptsin=x |
ptsin=x |
||
ptsin+2=y |
ptsin+2=y |
||
Line 425: | Line 426: | ||
GRAPHIC TEXT SPECIAL EFFECTS:Permet de manipuler le type du texte graph. |
GRAPHIC TEXT SPECIAL EFFECTS:Permet de manipuler le type du texte graph. |
||
---------------------------- |
---------------------------- |
||
− | Le type du texte graphique est |
+ | Le type du texte graphique est déposé en 'intin' sous la forme d'un mot, |
− | seuls les bits 0 à 5 du mot sont |
+ | seuls les bits 0 à 5 du mot sont utilisés et permettent de choisir: |
nr° BIT: Effet sur TEXT |
nr° BIT: Effet sur TEXT |
||
Line 433: | Line 434: | ||
1 caractères fins |
1 caractères fins |
||
2 caractères italiques |
2 caractères italiques |
||
− | 3 caractères |
+ | 3 caractères soulignés |
4 caractères 'light' |
4 caractères 'light' |
||
5 caractères 'outline' |
5 caractères 'outline' |
||
Line 447: | Line 448: | ||
− | CONTOUR FILL:Permet de remplir une surface à partir d'un point de |
+ | CONTOUR FILL:Permet de remplir une surface à partir d'un point de départ |
− | ------------ de |
+ | ------------ de coordonnées (x,y) |
Paramètres: |
Paramètres: |
||
Line 461: | Line 462: | ||
− | SET FILL COLOR INDEX: |
+ | SET FILL COLOR INDEX:Détermine la couleur utilisée pour les fonctions de |
-------------------- remplissage. |
-------------------- remplissage. |
||
Line 483: | Line 484: | ||
0=pas de remplissage |
0=pas de remplissage |
||
− | 1=remplissage de type PLEIN avec la couleur |
+ | 1=remplissage de type PLEIN avec la couleur selectionnée |
− | 2=remplissage avec des motifs |
+ | 2=remplissage avec des motifs prédéfinis |
3=remplissage avec des HACHURES |
3=remplissage avec des HACHURES |
||
− | 4=remplissage avec un motif |
+ | 4=remplissage avec un motif redéfini par le programmeur |
Paramètres: |
Paramètres: |
||
Line 500: | Line 501: | ||
-------------- remplissage:36 motifs sont disponibles |
-------------- remplissage:36 motifs sont disponibles |
||
− | La matrice est la trame |
+ | La matrice est la trame utilisée pour le remplissage de la surface: |
Elle peut ètre du type 3 (24 motifs) ou du type 2 (12 motifs) (voir |
Elle peut ètre du type 3 (24 motifs) ou du type 2 (12 motifs) (voir |
||
la fonction SET FILL INTERIOR pour les 5 types disponibles) |
la fonction SET FILL INTERIOR pour les 5 types disponibles) |
||
Line 513: | Line 514: | ||
− | SET WRITING MODE:Permet de selectionner le mode d' |
+ | SET WRITING MODE:Permet de selectionner le mode d'écriture de toutes les |
− | ---------------- |
+ | ---------------- éditions graphiques. |
− | En mode 1:mode AND, ce qui est en dessous est toujours |
+ | En mode 1:mode AND, ce qui est en dessous est toujours effacé. |
− | En mode 2:mode OR , on |
+ | En mode 2:mode OR , on écrit seulement là o— il n'y a pas encore de |
− | points et les vides sont toujours |
+ | points et les vides sont toujours représentés. |
En mode 3:mode XOR ,on ne place des points que là o— il n'y en a pas |
En mode 3:mode XOR ,on ne place des points que là o— il n'y en a pas |
||
− | encore et les points |
+ | encore et les points déjà occupés sont éffacés |
En mode 4:mode transparent inverse, on ne place que des points là o— il |
En mode 4:mode transparent inverse, on ne place que des points là o— il |
||
− | y en avait |
+ | y en avait déjà et seulement si ils ne possèdent pas de cou- |
leur (permet d'obtenir un NEGATIF de la trame destination). |
leur (permet d'obtenir un NEGATIF de la trame destination). |
||
Line 535: | Line 536: | ||
− | FILL RECTANGLE:Rempli un rectangle |
+ | FILL RECTANGLE:Rempli un rectangle définit ainsi:coordonnées du coin |
− | -------------- |
+ | -------------- supérieur gauche (x1,y1),coordonnées du coin inférieur |
droit (x2,y2) |
droit (x2,y2) |
||
Line 551: | Line 552: | ||
− | CIRCLE:Permet de dessiner un cercle de |
+ | CIRCLE:Permet de dessiner un cercle de coordonnées (x,y) et de rayon R |
− | ------ à l' |
+ | ------ à l'écran. |
Line 572: | Line 573: | ||
− | - Voilà pour les fonctions du VDI, je n'ai bien sur pas |
+ | - Voilà pour les fonctions du VDI, je n'ai bien sur pas présenté toutes |
les fonctions... |
les fonctions... |
||
Elles sont bien trop lentes et trop lourdes à exploiter pour pouvoir |
Elles sont bien trop lentes et trop lourdes à exploiter pour pouvoir |
||
− | + | véritablement être dignes de votre attention... |
|
Je parlerais bientot des LINES_A, ce sont aussi des fonctions graphi- |
Je parlerais bientot des LINES_A, ce sont aussi des fonctions graphi- |
||
ques mais elles au moins sont très rapides.En attendant, vous pouvez |
ques mais elles au moins sont très rapides.En attendant, vous pouvez |
||
regarder le listing d'un programme exemple qui illustre clairement |
regarder le listing d'un programme exemple qui illustre clairement |
||
− | l'utilisation des fonctions du VDI |
+ | l'utilisation des fonctions du VDI décrites ci-dessus. |
.Listing :fichier VDI.L |
.Listing :fichier VDI.L |
||
− | . |
+ | .éxecutable:fichier VDI.PRG |
− | NB:Si vous |
+ | NB:Si vous désirez utiliser une fonction du VDI dans une boucle, il |
− | -- n'est pas |
+ | -- n'est pas nécessaire de réinitialiser tous les paramètres du tableau |
− | puisqu'ils ne sont pas |
+ | puisqu'ils ne sont pas effacés:il suffira donc de faire varier les |
paramètres qui doivent changer dans votre boucle puis d'appeller le |
paramètres qui doivent changer dans votre boucle puis d'appeller le |
||
VDI. |
VDI. |
||
− | Ceux qui |
+ | Ceux qui désirent malgré tout en savoir plus sur les fonctions du VDI |
− | ou de l'AES pourront se |
+ | ou de l'AES pourront se réfèrer au livre: |
'LE LIVRE DU GEM' de Micro Application. |
'LE LIVRE DU GEM' de Micro Application. |
||
Line 609: | Line 610: | ||
</pre> |
</pre> |
||
Back to [[ASM_Tutorial]] |
Back to [[ASM_Tutorial]] |
||
− | [[Category: |
+ | [[Category: ASSEMBLEUR 68000 sur ATARI ST Part 2]] |
Latest revision as of 21:42, 17 December 2023
-------------------- CHAPITRE N°7: LE VDI -------------------- *** INTRODUCTION *** -------------------- - Le VDI est un ensemble de fonctions (tout comme le Gemdos,le bios et l'xbios) graphiques: En appellant les fonctions adequates, on pourra donc par exemple affi- cher un cercle,un polygone,remplir des surfaces etc... Je vais aussi être amené à parler des fonctions de l'AES, celles-ci ne seront pas étudiées dans cet ouvrage (vu la complexité de leur mise en oeuvre). Les fonctions de l'AES s'occupent essentiellement de la gestion de l'écran et de la souris.(Fenètres,gestion des objets...) - Il faudra fournir un certain nombre de paramètres aux fonctions du VDI pour pouvoir obtenir l'effet désiré: La transmission des paramètres se fait par l'intermédiaire d'un TABLEAU: (Un TABLEAU n'est rien d'autre qu'un espace de la mémoire qu'on a réser- vé à partir d'une adresse (avec DS.x place) ). Ce tableau est commun aux fonctions du VDI et de l'AES. Le tableau se trouve dans le segment BSS et c'est à certaines de ses ad- resses qu'on placera les paramètres. Dans le segment DATA, on devra aussi poser un label qui pointe sur les différentes adresses du tableau.(Un label qui pointe sur des adresses en zone DATA est généralement appellé VECTEUR...) Dans le tableau qui regroupe toutes les réservations pour les fonctions du VDI et de l'AES, on distingue plusieurs groupes de tableaux: .Le tableau pointé par l'adresse 'CONTROL' (pour le VDI et l'AES) :c'est dans ce tableau qu'on déposera le code de la fonction et les dimensions des tableaux 'intin','ptsin','intout','ptsout'. .Celui pointé par l'adresse 'GLOBAL' (pour l'AES) :détails plus loin... .4 tableaux pointés par les adresses 'INTIN','INTOUT','PTSIN','PTSOUT' Dans les tableaux de type 'IN', l'utilisateur peut fournir des para- mètres et dans ceux du type 'OUT', certaines fonctions du VDI ou de l'AES retournent des valeurs. Dans INTIN on placera les paramètres propres à la fonction VDI ou AES utilisée. Dans INTOUT, le VDI ou l'AES posera des données de retour. Dans PTSIN on range des coordonnées:ce tableau est utlisé par le VDI. Dans PTSOUT le VDI fournit en retour des coordonnées (avec certaines fonction). .On trouvera aussi 2 tableaux: 'ADDRIN' et 'ADDROUT' qui sont spécifiques à l'AES et qui contiennent des adresses (pointant sur des données...). .Le vecteur 'VDIPB' du segment DATA pointe successivement les adresses des tableaux: CONTROL,INTIN,PTSIN,INTOUT,PTSOUT qui sont utilisés par le VDI. .Il existe aussi un vecteur (AESPB) qui pointe sur les adresses des tableaux OPCODE,APVERS,INTIN,INTOUT,ADDRIN,ADDROUT et qui est uti- lisé par les fonctions de l'AES. Ce tableau est donc composé ainsi: BSS ;segment BSS CONTROL: ;tableau CONTROL (':' car il pointe sur une ;adresse et non pas sur une instruction...) opcode ds.w 1 ;1° adresse du tableau 'control':opcode sptsin ds.w 1 ;2° adresse:sptsin sptsout ds.w 1 ;3° adresse:sptsout sintin ds.w 1 ;4° adresse:sintin sintout ds.w 1 ;5° adresse:sintout idsfct ds.w 1 ;6° adresse:idsfct handle ds.w 1 ;7° adresse:handle ds.w 10 ;le tableau CONTROL a une taille de 54 octets. GLOBAL: ;début du tableau GLOBAL apvers ds.w 1 ;1° adresse du tableau 'global':apvers apcount ds.w 1 ;2° adresse:apcount apid ds.w 1 ;3° adresse:apid apprivate ds.l 1 ;4° adresse:apprivate apptree ds.l 1 ;5° adresse:apptree ap1resv ds.l 1 ;6° adresse:ap1resv ap2resv ds.l 1 ;7° adresse:ap2resv ap3resv ds.l 1 ;8° adresse:ap3resv ap4resv ds.l 1 ;9° adresse:ap4resv ;le tableau GLOBAL a une taille de 30 octets intin ds.w 128 ;tableau 'intin':128 mots intout ds.w 128 ;tableau 'intout':128 mots ptsin ds.w 128 ;tableau 'ptsint':128 mots ptsout ds.w 128 ;tableau 'ptsout':128 mots addrin ds.w 128 ;tableau 'addrin' (AES):128 mots addrout ds.w 128 ;tableau 'addrout' (AES):128 mots grhandle ds.w 1 ;ici on réserve 1 mot pour le handle ds.b 300 ;RESERVATIONS POUR SETBLOCK en 'PILE' PILE ds.b 1 DATA ;segment DATA ;le vecteur de l'AES ALIGN.W ;adresse paire car ici se trouvent des L-M aespb dc.l control,global,intin,intout,addrin,addrout ;le vecteur du VDI ALIGN.W ;adresse paire car ici se trouvent des L-M vdipb dc.l control,intin,ptsin,intout,ptsout END - Ce tableau devra être inclu dans vos listings si vous utilisez des fonctions du VDI ou de l'AES. Il se trouve dans le fichier :TABLEAU.L ,il vous suffira donc de l'inclure à la fin de votre listing. - Voilà maintenant la signification de chaque CHAMP (sous-parties) des tableaux CONTROL et GLOBAL: Tableau CONTROL: opcode :(en CONTROL+0) =le code de la fonction à appeller sptsin :(en CONTROL+2) =le nombre de couples de points dans PTSIN sptsout :(en CONTROL+4) =idem pour PTSOUT sintin :(en CONTROL+6) =nombre de mots dans INTIN sintout :(en CONTROL+8) =idem pour INTOUT idsfct :(en CONTROL+10)=nr° d'identification de la fonction handle :(en CONTROL+12)=nr° du handle Tableau GLOBAL apvers :(en GLOBAL+0) =nr° de la version de l'AES en service apcount :(en GLOBAL+2) =nombre maximum autorisé de programmes simultanement en mémoire apid :(en GLOBAL+4) =nr° de l'application en cours apprivate:(en GLOBAL+6) =selon la fonction apptree :(en GLOBAL+10)=pointeur sur une structure d'arbre d'objets ap1resv :(en GLOBAL+14)=réservé à des applications futures... ap2resv :(en GLOBAL+18)=idem ap3resv :(en GLOBAL+22)=idem ap4resv :(en GLOBAL+26)=idem - Mais avant de pouvoir utiliser les différentes fonctions du VDI ou de l'AES, il faudra faire quelques initialisations. (Comme pour le GEMDOS avec SETBLOCK). Il faudra appeler les fonctions:APPL_INIT puis GRAF_HANDLE pour initialiser l'AES. Il faudra appeler les fonctions:OPEN_SCREEN_ WORKSTATION puis pour initialiser le VDI. - Pour appeller ces fonctions, nous allons passer les paramètres nécéssaires dans le tableau (aux bonnes adresses) des réserva- tions et nous appellerons le VDI avec: MOVE.L #vdipb,d1 ;adresse du VECTEUR VDIPB dans d1 MOVE #$73,d0 ;mot=$73 dans d0 TRAP #2 ;appel du VDI ou l'AES avec: MOVE.L #aespb,d1 ;adresse du VECTEUR AESPB dans d1 MOVE #$C8,d0 ;mot=$C8 dans d0 TRAP #2 et cela après chaque fonction VDI ou AES que nous appelleront. La fonction OPEN_SCREEN_WORKSTATION permet d'ouvrir une station de travail en chargeant en mémoire le système de gestion graphique du VDI. Les paramètres à fournir sont: Dans opcode,1 MOT=100 (le CODE de la fonction) Dans sptsin ,1 MOT=0 Dans sintin,1 MOT=11 Dans handle,le MOT pointé par grhandle Dans intin jusqu'à intin+20, 1 MOT=1 En réalité, les paramètres placés en INTIN, doivent donner les renseignements suivants: intin =identification du périphérique à la carte mère intin+2 =type de ligne intin+4 =couleur de la ligne intin+6 =type de marquage intin+8 =couleur du marquage intin+10=jeu de caractère intin+12=couleur de l'écriture intin+14=type de remplissage intin+16=motif de remplissage intin+18=couleur du remplissage intin+20=coordonnées pour des drapeaux Mais nous ne nous en servirons pas, nous mettons alors toutes ces valeurs à 1... La fonction APPL_INIT de l'AES permet d'initialiser l'AES. Les paramètres à fournir sont: Dans les 4 apresv,1 L-M=0 Dans opcode,1 MOT=10 (le CODE de la fonction) Dans sptsin,1 MOT=0 Dans sptsout,1 MOT=1 Dans sintin,1 MOT=0 Dans sintout,1 MOT=0 La fonction GRAF_HANDLE de l'AES permet de donner un numéro d'identification à notre programme. Ce numéro retourne dans INTOUT et nous le placerons en 'grhandle'. Les paramètres à passer sont: Dans opcode,1 MOT=77 (le CODE de la fonction) Dans sptsin,1 MOT=0 Dans sptsout,1 MOT=5 Dans sintin et sintout, 1 MOT=0 Comme la fonctions OPEN_SCREEN_WORSTATION du VDI a besoin de ce nr° d'identification ( paramètre ), c'est par l'appel de l'AES qu'il faudra commencer. Après l'appel de la fonction GRAF_HANDLE de l'AES, nous poserons le nr° d'identification déposé en INTOUT en 'grhandle' avec: MOVE INTOUT,GRHANDLE Nous allons aussi créer 2 MACROS instructions qui vont se charger d'appeller le VDI et l'AES. VDI MACRO ;macro d'appel du VDI MOVE.L #VDIPB,d1 ;adresse du Vecteur VDIPB dans d1 MOVE #$73,d0 ;mot=$73 dans d0 TRAP #2 ;appel du GEM ENDM ;fin de la macro AES MACRO ;macro d'appel de l'AES MOVE.L #AESPB,d1 ;adresse du Vecteur AESPB dans d1 MOVE #$C8,D0 ;mot=$C8 dans d0 TRAP #2 ;appel du GEM ENDM ;fin de la macro - Le listing complet du programme d'initialisation pour l'AES et le VDI sera donc: ; initialisation du VDI et de l'AES TEXT VDI MACRO move.l #vdipb,d1 move #$73,d0 trap #2 ENDM AES MACRO move.l #aespb,d1 move #$C8,D0 trap #2 ENDM ; APPL_INIT move.l #0,ap1resv move.l #0,ap2resv move.l #0,ap3resv move.l #0,ap4resv move.w #10,opcode move.w #0,sptsin move.w #1,sptsout move.w #0,sintin move.w #0,sintout AES ;-->AES ; GRAF_HANDLE move.w #77,opcode move.w #0,sptsin move.w #5,sptsout move.w #0,sintin move.w #0,sintout AES ;-->AES move.w intout,grhandle ;On sauvgarde le HANDLE ; OPEN VIRTUAL SCREEN WORKSTATION move.w #100,opcode move.w #0,sptsin move.w #11,sptsout move.w grhandle,handle move.w #1,intin move.w #1,intin+2 move.w #1,intin+4 move.w #1,intin+6 move.w #1,intin+8 move.w #1,intin+10 move.w #1,intin+12 move.w #1,intin+14 move.w #1,intin+16 move.w #1,intin+18 move.w #1,intin+20 VDI ;-->VDI END Le listing de cette initialisation se trouve dans le fichier INIT_GEM.L - Tous vos programmes qui utilisent le VDI ou l'AES auront donc cette structure: TEXT INCLUDE "INIT_TOS.L" ;fichier de la macro SETBLOCK INCLUDE "INIT_GEM.L" ;fichier des initialisations du VDI/AES SETBLOCK ;réserve mémoire . ;les instructions qui forment . ;votre programme... . DATA . ;les données initialisées . BSS INCLUDE "TABLEAU.L" ;le TABLEAU du VDI et de l'AES: ;Contient aussi les réservations en 'PILE' ;pour SETBLOCK... END *** LES FONTIONS DU VDI *** --------------------------- Vous voilà prèts à présent à utiliser les fonctions graphiques du VDI: Je vais citer les fonctions les plus intéressantes et vous donner pour chacunes d'elles les paramètres à passer dans le tableau: TABLEAU.L Je vous donnerais aussi les paramètres de retour si la fonction en fournit et si ils peuvent être utiles... TEXT:Permet l'édition d'un texte à des coordonnées (x,y) ---- Paramètres: Opcode=8 sptsin=1 sintin=n handle=grhandle intin=la chaine de caractère composée de 'n' lettres ptsin=x ptsin+2=y NB:La chaine de caractère doit se terminer par une valeur NULLE. -- GRAPHIC TEXT COLOR:Permet de selectionner la couleur d'un texte graph. ------------------ Paramètre: opcode=22 sptsin=0 sintin=1 handle=grhandle intin=couleur choisie GRAPHIC TEXT SPECIAL EFFECTS:Permet de manipuler le type du texte graph. ---------------------------- Le type du texte graphique est déposé en 'intin' sous la forme d'un mot, seuls les bits 0 à 5 du mot sont utilisés et permettent de choisir: nr° BIT: Effet sur TEXT 0 caractères gras 1 caractères fins 2 caractères italiques 3 caractères soulignés 4 caractères 'light' 5 caractères 'outline' paramètres: opcode=106 sptsin=0 sintin=1 handle=grhandle intin=vecteur bit CONTOUR FILL:Permet de remplir une surface à partir d'un point de départ ------------ de coordonnées (x,y) Paramètres: opcode=103 sptsin=1 sintin=1 handle=grhandle intin=couleur du remplissage ptsin=x ptsin+2=y SET FILL COLOR INDEX:Détermine la couleur utilisée pour les fonctions de -------------------- remplissage. Paramètres: opcode=25 sptsin=0 sintin=1 handle=grhandle intin=couleur de remplissage Paramètres de retour: intout=couleur de remplissage SET FILE INTERIOR:Permet de selectionner le type de remplissage pour ----------------- les fonctions de remplissage Il existe 5 types de remplissages: 0=pas de remplissage 1=remplissage de type PLEIN avec la couleur selectionnée 2=remplissage avec des motifs prédéfinis 3=remplissage avec des HACHURES 4=remplissage avec un motif redéfini par le programmeur Paramètres: opcode=23 sptsin=0 sintin=1 handle=grhandle intin=type de remplissage (0-5) SET FILL STYLE:Permet de selectionner la matrice pour les fonctions de -------------- remplissage:36 motifs sont disponibles La matrice est la trame utilisée pour le remplissage de la surface: Elle peut ètre du type 3 (24 motifs) ou du type 2 (12 motifs) (voir la fonction SET FILL INTERIOR pour les 5 types disponibles) Paramètres: opcode=24 sptsin=0 sintin=1 handle=grhandle intin=nr° motif (1-24) ou (1-12) SET WRITING MODE:Permet de selectionner le mode d'écriture de toutes les ---------------- éditions graphiques. En mode 1:mode AND, ce qui est en dessous est toujours effacé. En mode 2:mode OR , on écrit seulement là o— il n'y a pas encore de points et les vides sont toujours représentés. En mode 3:mode XOR ,on ne place des points que là o— il n'y en a pas encore et les points déjà occupés sont éffacés En mode 4:mode transparent inverse, on ne place que des points là o— il y en avait déjà et seulement si ils ne possèdent pas de cou- leur (permet d'obtenir un NEGATIF de la trame destination). Paramètres: opcode=32 sptsin=0 sintin=1 handle=grhandle intin=mode graphique (1-4) FILL RECTANGLE:Rempli un rectangle définit ainsi:coordonnées du coin -------------- supérieur gauche (x1,y1),coordonnées du coin inférieur droit (x2,y2) Paramètres: opcode=114 sptsin=2 sintin=0 handle=grhandle ptsin =x1 ptsin+2=y1 ptsin+4=x2 ptsin+6=y2 CIRCLE:Permet de dessiner un cercle de coordonnées (x,y) et de rayon R ------ à l'écran. Paramètres: opcode=11 sptsin=3 sintin=0 idsfct=5 handle=grhandle ptsin =x ptsin+2=y ptsin+4=0 ptsin+6=0 ptsin+8=R ptsin+10=0 - Voilà pour les fonctions du VDI, je n'ai bien sur pas présenté toutes les fonctions... Elles sont bien trop lentes et trop lourdes à exploiter pour pouvoir véritablement être dignes de votre attention... Je parlerais bientot des LINES_A, ce sont aussi des fonctions graphi- ques mais elles au moins sont très rapides.En attendant, vous pouvez regarder le listing d'un programme exemple qui illustre clairement l'utilisation des fonctions du VDI décrites ci-dessus. .Listing :fichier VDI.L .éxecutable:fichier VDI.PRG NB:Si vous désirez utiliser une fonction du VDI dans une boucle, il -- n'est pas nécessaire de réinitialiser tous les paramètres du tableau puisqu'ils ne sont pas effacés:il suffira donc de faire varier les paramètres qui doivent changer dans votre boucle puis d'appeller le VDI. Ceux qui désirent malgré tout en savoir plus sur les fonctions du VDI ou de l'AES pourront se réfèrer au livre: 'LE LIVRE DU GEM' de Micro Application. PIECHOCKI Laurent 8, Impasse Bellevue Suite dans le fichier LINEA.DOC 57980 TENTELING ---------
Back to ASM_Tutorial