Pl2 VDI.DOC/fr
-------------------- 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