COURS208.TXT/fr
****************************************************************** * * * COURS D'ASSEMBLEUR 68000 SUR ATARI ST * * * * par Le F�roce Lapin (from 44E) * * * * Seconde s�rie * * * * Cours num�ro 8 * ****************************************************************** J'esp�re que vous n'abordez pas ce cours imm�diatement apr�s avoir fini de lire le pr�c�dent, mais, qu'au contraire, vous vous �tes plong� dans la ligne A avec bonheur! Nous allons maintenant aborder un sujet qui, je dois l'avouer, m'effrayait un peu au d�but: le GEM. En fait, en programmation comme dans beaucoup d'autres sujets, on se met � bosser simplement lorsqu'on y est oblig�. Ainsi je n'avais r�alis� que de tout petits trucs avec le GEM en assembleur, des trucs du genre ACCessoire de bureau qui permet de mettre l'�cran en inverse vid�o, avec un choix dans une bo�te d'alerte, avant de me trouver face au descriptif du soft que me proposait une bo�te Parisienne. Je dois avouer que les premiers jours ont �t� un peu durs, mais qu'� la longue j'ai d�couvert que le GEM est vraiment une chose fabuleuse, pas tr�s dur � ma�triser et que les possibilit�s sont largement suffisantes pour combler de bonheur tout programmeur digne de ce nom!!! J'esp�re donc que vous prendrez autant de plaisir que moi � programmer sous GEM une fois que vous aurez lu ce chapitre. Tout d'abord les remarques qui se trouvent au d�but du chapitre sur la ligne A, m�ritent d'�tre relus. Chercher donc de la docu- mentation sans vous soucier du langage. Vous trouverez dans le dernier cours de cette s�rie une bibliographie dans laquelle j'ai essay� de recenser divers articles bien sympas. Le GEM est accessible par le TRAP #2, mais en fait gr�ce � ce trap nous avons acc�s � plusieurs parties du GEM, un peu comme si le trap #1 d�bouchait en m�me temps sur GEMDOS et BIOS. Le GEM est, en effet, compos� principalement de 2 parties: l'AES et le VDI. Les routines du VDI - VIRTUAL DEVICE INTERFACE - s'occupent des graphismes; tra�age de cercles, ellipse, traits, rectangles etc ... Par contre, l'affichage des objets typiques du GEM : fen�tres, bo�tes d'alertes est r�alis� par l'AES - APPLICATION ENVIRONMENT SYSTEM - . Au fur et � mesure que vous d�couvrirez les fonctions VDI et AES vous vous rendrez compte de l'interaction des 2. Le gros avantage de ce syst�me peut s'expliquer simplement: il semble �vident � tout le monde que sortir un dessin sur un �cran, une disquette ou une imprimante, ce n'est pas la m�me chose. ERREUR! Pour le GEM c'est pareil! En fait, on peut dire que vous avez � pr�parer votre dessin et � dire "je l'envoie". O�? Ah l�, c'est comme vous voulez parce que pour le VDI l'�cran, la table tra�ante, le disque, l'imprimante etc.. ne sont que des p�riph�riques. Il suffit de lui d�signer le p�ri- ph�rique de notre choix et il fait le boulot tout seul!!!! Le seul probl�me: les routines v�ritablement ind�pendantes des p�riph�riques se trouvent dans GDOS - ce nom vous fait s�rement fr�mir d'effroi...- -- Plusieurs programmes en m�me temps ? Le principe du GEM est tr�s attirant mais doit nous amener � r�- fl�chir un petit peu sur le m�lange potentiel des donn�es. En ef- fet le GEM, m�me s'il n'est pas r�ellement multit�che (�tre multi- t�che consiste � pouvoir faire tourner des applications exactement en m�me temps, ce qui est de toute fa�on impossible avec un 68000) le GEM donc, permet d'avoir plusieurs programmes actifs en m�me temps, en l'occurrence un programme principal et 6 accessoires. Pour le GEM il n'y a fondamentalement pas de diff�rence entre un PRG et un ACC et, pour cette raison, dans le vocabulaire GEM on les nomme "applications". Le GEM peut donc se retrouver avec 7 ap- plications � g�rer, chacune ayant potentiellement plusieurs fen�- tres. On imagine facilement le bazar dans la m�moire!!! -- Comment le GEM s'y retrouve t-il? Au d�marrage d'une application, celle-ci appelle la fonction AP- PL_INIT (Application_Init). Cette fonction pr�vient le GEM que no- tre application d�sire devenir active, et le GEM r�pond en nous fournissant un num�ro, l'APP_ID (Application_Identificator) qui nous servira maintenant de r�f�rence. Notre application sera donc par exemple la 3, et sera reconnue comme telle par le GEM. Atten- tion, l'APP_ID n'est donn� � l'application que pour la dur�e de pr�sence en m�moire de celle-ci. Si je lance un ACC le lundi, il peut h�riter de l'APP_ID 4 mais si je le relance le mardi dans des conditions diff�rentes, il peut obtenir l'APP_ID 5. Seulement il gardera cet APP_ID pendant toute son activit�. Lorsque l'on ouvre une fen�tre, c'est le m�me principe. Le GEM fournit ce que l'on nomme un HANDLE, c'est � dire un num�ro cor- respondant � la fen�tre. En fait le HANDLE c'est le num�ro d'iden- tification d'une fen�tre mais potentiellement aussi d'un p�riph�- rique. -- Multitraitement ? Une des parties les plus importantes du GEM concerne la gestion des �v�nements. Un �v�nements c'est une action de l'utilisateur de la machine: clic souris, appui sur une touche etc... En fait, sous GEM les applications passent la plus grande partie de leur temps � attendre. Imaginons un PRG avec une fen�tre ouverte et un menu d�roulant, et en m�me temps en m�moire 3 accessoires. Je vais dans le menu des accessoires. Le menu se d�roule et les titres passent en inverse vid�o lorsque la souris passe dessus. Tout ceci est fait par le GEM, tout seul comme un grand. Je clique sur le titre de l'accessoire 2. Le GEM d�tecte le clic, sait que je suis dans les accessoires, re- garde sur quelle entr�e j'ai cliqu�. Comme c'est le GEM qui a at- tribu� les entr�es aux ACC, il envoie un message � l'accessoire 2 pour lui dire "il faut que tu t'ouvres". Celui-ci s'ouvre donc, et affiche une fen�tre � l'�cran. Nous avons donc 2 fen�tres en m�me temps. Je clique sur celle du PRG, le GEM regarde � qui appartient cette fen�tre et envoi au PRG un message pour lui dire "on a acti- v� ta fen�tre num�ro XX" etc... Nous allons donc construire dans nos programmes sous GEM, un noyau de surveillance des actions, et nous r�agirons en fonction de celles-ci. -- Pour appeler les fonctions du GEM. Les appels se font avec des param�tres que nous passons dans des tableaux. Comme nous utilisons DEVPACK, nous utiliserons sa bi- blioth�que. En effet, pour les appels au GEM, les param�tres sont nombreux et � placer � des endroits bien pr�cis dans les tableaux. Pour ces raisons, les macros trouvent ici tout leur int�r�t. Nous appellerons donc les fonctions du GEM avec les macros contenues dans la biblioth�que de DEVPACK. Cependant il convient de conna�- tre �galement les tableaux, afin de pouvoir parfaitement compren- dre le principe de fonctionnement. Pour l'AES, il faut 6 tableaux: CONTROL, GLOBAL, INT_IN, INT_OUT, ADDR_IN, ADDR_OUT. Pour le VDI il en faut 5: CONTRL, INTIN, INTOUT, PTSIN, PTSOUT. Attention � la l�g�re diff�rence d'orthographe entre INT_IN et INTIN ! Pour indiquer, lors de l'appel au GEM, l'emplacement o� il trouvera ces tableaux, leurs adresses sont plac�es dans 2 listes: Une pour l'AES: aes_params dc.l control, global, int_in, int_out,addr_in, addr_out et une pour le VDI: vdi_params dc.l contrl, intin, ptsin, intout, ptsout Voici les tableaux tels qu'ils sont d�finis dans la biblioth�que GEM de DEVPACK: control ds.w 5 global ds.w 14 int_in ds.w 16 int_out ds.w 7 addr_in ds.l 3 addr_out ds.l 1 contrl ds.w 1 contrl1 ds.w 1 contrl2 ds.w 1 contrl3 ds.w 1 contrl4 ds.w 1 contrl5 ds.w 1 contrl6 ds.w 1 contrl7 ds.w 1 contrl8 ds.w 1 contrl9 ds.w 1 contrl10 ds.w 1 contrl11 ds.w 1 intin ds.w 128 min 30 intout ds.w 128 min 45 ptsin ds.w 128 min 30 ptsout ds.w 128 min 12 Vous remarquez l'�trange mise en place du tableau CONTRL (tableau pour le VDI). En effet il faut assez souvent passer des param�tres '� la main' dans ce tableau. Avec ce syst�me, il sera possible de r�aliser une op�ration du genre MOVE.W #10,CONTRL2 Attention cette num�rotation des CONTRL correspond au nombre de words car chacune des entr�es est d�finie par DS.W et non pas par DS.B!!! Ceci s'explique par le fait que 99% des documents relatifs au GEM sont pour le 'C' et que c'est ce type de commande qui est faite en 'C'. Ainsi vous trouverez souvent; "mettre 10 en contrl(2)"; il vous suffira de faire MOVE.W #10,CONTRL2 et le tour est jou�. -- Pourquoi tant de tableaux? Parce que chacun de ces tableaux est destin� � recevoir ou � renvoyer un certain type de donn�es. Voyons un descriptif rapide de ces tableaux. Tableaux AES ** control Destin� � contenir, dans l'ordre: num�ro de la fonction (.W), nombre d'octets de INT_IN (.W), nombre d'octets de INT_OUT (.W), nombre de longs mots de ADDR_IN (.W) nombre de longs mots de ADDR_OUT ** global Ce tableau est un peu sp�cial, et les explications le concernant ne sont d'aucune utilit� dans le cadre de ces cours. Une fois bien ingurgit� le reste, vous pourrez toujours vous pencher dessus mais actuellement cela ne ferait que vous embrouiller! (Voir la biblio- graphie pour en savoir plus) ** int_in Ce tableau est destin� � recevoir des valeurs enti�res (Integer In) dont l'AES aura besoin. Par exemple un num�ro de fen�tre. ** int_out A l'inverse du pr�c�dent ce tableau renvoi des r�sultats par exem- ple si vous demander la surface disponible pour une fen�tre, vous aurez ici les dimensions. ** addr_in Liste dans laquelle vous pourrez placer des adresses ** addr_out et l�, vous pourrez en lire! En fait il suffit, comme toujours, de lire le nom du tableau pour en d�duire ce qu'il contient! Tableaux VDI ** contrl Dans contrl0 nous pla�ons l'opcode de la fonction, c'est ainsi que l'on appelle son num�ro. Dans contrl1 nous pla�ons le nombre de donn�es qui seront mise dans le tableau intin Dans contrl2 nous pla�ons le nombre de points (donc de couples de donn�es) qui seront plac�s dans le tableau ptsin Dans contrl3 nous placerons l'identificateur de la sous-fonction. Par exemple le tra�age des cercles, ellipse, rectangle etc... ce fait avec la fonction 11. Il faut donc un sous-code permettant de d�finir quel module dans la fonction 11 on d�sire utiliser. Dans contrl6 nous pla�ons le handle du p�riph�rique. (voir plus haut) A partir de contrl7 il y a parfois des informations � passer, suivant la fonction. ** intin et ptsin Nous remplirons ensuite le tableau INTIN avec les param�tres en- tiers demand�s par la fonction et le tableau PTSIN avec les coor- donn�es demand�es par la fonction. Une fois la fonction appel�e, nous r�cup�rerons: en contrl2 le nombre de couples de coordonn�es de ptsout et en contrl4 le nombre de mots de intout. Voici un appel au GEM. Cette fonction affiche une phrase o� l'on veut sur l'�cran, contrairement � Gemdos (9) qui est limit� sur les lignes et les colonnes de texte. De plus cette fonction permet d'afficher du texte avec des effets (gras, soulign� etc...) avec la fonte de notre choix: LEA MESSAGE,A1 adresse de la phrase LEA INTIN,A0 tableau de r�ception MOVEQ.L #0,D2 init le compteur de lettres ICI3 CLR.W D0 MOVE.B (A1)+,D0 pr�l�ve en bytes BEQ GO_ON fin du texte ADDQ.B #1,D2 on compte les lettres MOVE.W D0,(A0)+ transf�re dans INTIN (en words) BRA ICI GO_ON MOVE.W #100,PTSIN position X MOVE.W #150,PTSIN+2 position Y MOVE.W D2,CONTRL3 nombre de lettres MOVE.W #1,CONTRL1 MOVE.W CURRENT_HANDLE,CONTRL6 MOVE.W #8,CONTRL opcode MOVE.L #VDI_PARAMS,D1 MOVE.W #$73,D0 TRAP #2 AAAAAAAAAARRRRRRGGGLLL!!!!!! C'est l'horreur n'est ce pas! Il faut vous munir de patience et d�cortiquer les multiples appels au GEM. Pour vous aider dans vos essais, vous trouverez ci-joint un dos- sier intitul� GEM. Il contient le source d'un ACC qui affiche une bo�te d'alerte, d'un PRG qui g�re une ressource (listing issu de WERCS) et d'un accessoire g�rant une fen�tre. Pour ce qui est des �diteurs de ressources, je travaille avec K Ressource qui est bien sympa et qui ne plante pas, contrairement � Wercs! Essayez de bien comprendre le principe: affichez une bo�te d'alerte avec un seul bouton, puis avec plusieurs, faites des petites ressources toutes simples, puis de plus en plus compli- qu�es etc... Le principe restera toujours le m�me quelle que soit la taille de votre application. Essayez de faire de petits acces- soires du genre formateur de disquettes, avec un petit formulaire qui demande si l'on veut formater le disque A ou le B, en simple ou en double face etc... A l'aide de ces exemples, vous devriez r�ussir � vous d�brouiller. C'est avec �a que j'ai commenc�! Jetez �galement un coup d'oeil sur la bibliographie, il y a quelques trucs int�ressants!
Back to ASM_Tutorial