COURS207.TXT/fr
****************************************************************** * * * COURS D'ASSEMBLEUR 68000 SUR ATARI ST * * * * par Le F�roce Lapin (from 44E) * * * * Seconde s�rie * * * * Cours num�ro 7 * ****************************************************************** Inutile de vous complimenter inutilement, mais si vous avez suivi bien tranquillement les cours depuis le d�but, si vous avez pris soin de vous exercer avec des petites applications, vous devez d�j� avoir un niveau correct en assembleur! N'oubliez donc pas les commandements principaux: bien commenter les programmes, r�fl�chir simplement, utiliser papier et crayon etc... Plus vous avancerez et plus vos listings seront longs, et plus une programmation propre sera indispensable!!! De m�me cherchez par vous m�me avant de poser d�s questions, cela �vitera bien souvent de demander n'importe quoi... Dans ce cours ainsi que dans les 2 suivants, nous aborderons2 sujets tabous: la Ligne A et le GEM. Concernant ces 2 sujets, les critiques vont bon train: la ligne A c'est pas commode, c'est nul et le GEM, pouah!!! Apr�s pas mal de temps pass� � discuter et � �couter les opinions de plusieurs personnes, je suis arriv� � la conclusion suivante: Tout d'abord les critiqueurs sont rarement les programmeurs Ligne A ou GEM. Ensuite, imaginons un cours instant notre ST sans GEM et pr�parons nous � faire un effort, GEM nous le rend bien! En dernier lieu je dirais que ces cours sont destin�s � faire de vous des programmeurs et pas des bidouilleurs. Vous devez donc avoir connaissances des possibilit�s de la ligne A et de celles du GEM. Ne pensez pas cependant trouver dans ces cours la totalit� des commandes GEM. Ces cours sont destin�s � levez un coin du voile, et si possible � vous donnez de quoi continuer vos recherches. En tout cas je peux vous assurer que la ligne A et le GEM ne sont pas plus dur qu'autre choses (D'ailleurs y a t-il quelques chose de dur en assembleur?????). Il y a �galement un avantage non-n�gligeable concernant la ligne A et surtout GEM: Jusqu'� maintenant, nous avons utilis� des instructions assembleur 68000, et il semblait �vident que dans un ouvrage sur le PASCAL, le BASIC GFA ou le C, nous aurions eu du mal � trouver des pr�cisions sur l'instruction MOVEM.L par exemple ! Concernant la ligne A, mais surtout GEM, nous allons utiliser principalement des macros (vous voyez pourquoi ce sujet a �t� abord� avant!). Or ces macros ont chacune un nom, et ce nom est un nom 'GEM' et non pas relatif � tel ou tel assembleur!! Ainsi ouvrir une fen�tre pour la faire appara�tre sur l'�cran, se fera avec une macro nomm�e WIND_OPEN. L'avantage c'est que cette fonction GEM est utilis�e en Pascal, en C etc... Pour cette raison, vous pouvez chercher de la documen- tation sur GEM quelque soit le langage utilis� dans cette documentation. Dans 99% des cas ce sera le C. Pour ma part mes connaissances en C sont r�duites et pourtant, une grande partie des documents GEM avec lesquels je travaille, fait r�f�rence � ce langage. Surtout ne vous contentez pas des ouvrages traitant du GEM en assembleur car vous serez bien vite d�go�t�!! Idem pour la ligne A, les param�tres n�cessaires ne d�pendent pas du langage!! Un autre avantage tr�s important, surtout pour le GEM, concerne les formats de donn�es. Ayant la chance de pouvoir travailler sur des Macs, de nombreuses choses y rendent la manipulation des pro- grammes plus ais�e que sur ST. Par exemple on charge un logiciel de dessin, on fait un petit gribouillis, ensuite on charge n'importe quel traitement de texte et hop on y colle notre gribouillis. Sur ST il y a 99% de chance que le format de l'un ne soit pas reconnu par l'autre! Si on jette un coup d'oeil vers le monde PC, on se rend compte qu'il n'existe pas de format normalis� pour ce type de machine, et que c'est l'anarchie � ce niveau. De tels formats normalis�s existent sur Mac, ils sont respect�s, et les rares softs ne se pliant pas � cette norme sont vou�s � un formatage rapide de la disquette!!! Le comble c'est que sur ST de telles normes de formats existent, mais elles ne sont pas respect�es.... En fait l'utilisation de la ligne A et surtout celle du GEM, doivent nous amener � une r�flexion plus globale sur ce qu'est la programmation. Raymond Loewy (1893-1986), que l'on peut consid�rer comme le p�re du design industriel, a eu beaucoup de r�flexions sur ce qu'il faut donner au consommateur. Dans notre langage nous parlons d'utilisateur de softs mais c'est en fait de la m�me personne qu'il s'agit. Comparons un soft Mac et un soft ST. L'�cran est allum�, le soft est charg�, et la seule chose que nous faisons, c'est promener notre oeil sur les ic�nes et la souris dans la barre de menu. Difficile de juger des qualit�s respectives des 2 softs sans aller plus loin. Pourtant, la simple disposition des entr�es dans les menus, le positionnement des ic�nes, le faible nombre de celles-ci mais en m�me temps leur impression de clart� donne dans 99% des cas l'avantage au Mac Intosh. Sur le ST, les menus d�gueulent de partout (surtout dans les softs r�cents), et les ic�nes recouvrent un bureau qui n'en demande pas tant! Ceci est � rapprocher d'une r�flexion de Raymond Loewy que je vous demande de m�diter: "Un v�hicule a�rodynamique bien dessin� donne une impression de vitesse, m�me quand il est arr�t�". Inutile donc d'en rajouter � la pelle, les 14524874 fonctions du softs ST sont simplement des d�lires de programmeurs alors que les 20 fonctions du softs Mac ont �t� pens�es pour l'utilisateur. Lorsque Raymond Loewy a �t� demand� pour faire le nouveau logo de la soci�t� Shell, ainsi que tout le design des stations services, il a simplement dit � ses employeurs: "Vos clients, ce ne sont pas les automobiles, ce sont les automobilistes". Evident, sauf qu'� l'�poque la Shell vendait pour les automobiles, sans s'en rendre compte! Eh bien, sur ST les programmeurs programment pour le ST (ou pour eux!) mais tr�s rarement pour les utilisateurs... Tout ceci �tant dit, nous allons aborder maintenant la ligne A, en esp�rant cependant que cela vous fera r�fl�chir lorsque vous concevrez vos programmes! LA LIGNE A Doc officielle Atari, Chapitre Ligne A: Bon descriptif des diff�rentes fonctions, assez brut mais efficace. Bible ST: Bon descriptif des fonctions Livre du d�veloppeur: idem mais en plus descriptif des donn�es dont on peut d�duire l'empla- cement avec la ligne A. Doc du GFA 3.00: Assez �trange. Si les fonctions ligne A du GFA sont appel�es de la m�me mani�re qu'en assembleur, le concepteur de ce langage a r�ussi � 'inventer' des fonctions en clamant bien haut qu'il s'agit de fonction Ligne A !!! Peut-�tre pour que le GFA soit encore moins compatible... A ce propos, il semblerait que la ligne A ne soit plus officiellement support�e par le TT.... A voir... Dans le premier kilo de m�moire de notre machine, nous avons un bon paquet d'adresses utilis�es par le microprocesseur. Nous avons pass� pas mal de temps � �plucher le principe de fonctionnement de ce kilo, qui sert au 68000 de 'relais' afin qu'il trouve l'adresse de la routine qu'il doit ex�cuter pour telle ou telle raison. J'esp�re de tout coeur que vous avez parfaitement assimil� ce principe car pour la ligne A, le GEM, les interruptions etc... c'est encore et toujours ce m�me principe qui est appliqu� ! Prenez la feuille qui vous a �t� fournie avec les cours de la s�rie 1, et qui montre ce premier kilo. Le vecteur 10 (adresse 40 en d�cimal et $28 en hexa.) poss�de comme 'description': �mulateur ligne 1010. Convertissons 1010 en hexad�cimal, nous obtenons.... $A ! Premi�re constatation, si ce vecteur est dans le premier kilo de m�moire, c'est donc que l'�mulateur ligne A n'est pas une particularit� du ST mais bien du 68000. Ces vecteurs vont donc nous donner acc�s � une ou des routines, en utilisant toujours le m�me principe: Ordre au 68000, celui-ci analyse l'ordre, saute dans le premier kilo de m�moire � l'adresse correspondant � cet ordre, y trouve l'adresse de la routine � ex�cuter, il ne lui reste plus qu'� sauter � celle-ci. Comment donc appeler les routines accessibles par l'interm�diaire de l'�mulateur ligne A, que font ces routines, et comment 'discu- ter' avec elles, c'est � dire comment leur passer d'�ventuels pa- ram�tres ? Dans le cas de l'Atari ST, les routines accessibles par le biais de l'�mulateur ligne A sont des routines graphiques. Ces routines sont les routines graphiques de base de notre machine. Elles sont utilis�es par le GEM. Leur acc�s est rustique et mal commode mais la commodit� n'est pas le but recherch�. G�n�ralement en assem- bleur on recherche souvent � faire soit m�me ses routines (c'est toujours mieux que celles des copains) Il faut cependant noter que dans beaucoup de cas, une bonne utilisation de la Ligne A ou du Gem est amplement suffisante. De plus, c'est bien souvent une bonne connaissance de ces interfaces qui vous permettra d'am�- liorer vos routines. Une raison suppl�mentaire r�side dans la facilit� de mise en oeuvre et dans la facilit� d'am�lioration. Il est tout a fait possible que la soci�t� pour laquelle vous avez r�alis� un soft, vous demande la version 2.00 plusieurs ann�es apr�s la version 1.00. Les inf�mes bidouilles pour gagner 3 cycles d'horloges vous semblerons alors bien moins claires qu'un appel classique � la ligne A, peut �tre un peu plus lent. Mais l� encore, il faut penser en se mettant � la place de l'utilisateur ! Ainsi SPECTRUM 512 est un excellent soft pens� avec un esprit programmeur et le r�sultat c'est que tout le monde utilise DEGAS... Les routines ligne A sont donc des routines graphiques de base. Elles sont au nombre de 16, et sont num�rot�s de 0 � 15. Voici leur fonctions par num�ro: 0 = initialisation 1 = placer un pixel � une couleur donn�e 2 = demander la couleur d'un pixel 3 = trac� d'une ligne quelconque 4 = trac� d'un ligne horizontale 5 = trac� d'un rectangle rempli 6 = remplissage d'une ligne d'un polygone 7 = transfert d'un bloc de bit 8 = transfert de matrice de caract�re 9 = visualisation de la souris 10 = non-visualisation de la souris 11 = transformation de la forme de la souris 12 =effacement de sprite 13 = affichage de sprite 14 = copie de zone (FDB) 15 = remplissage de zone Nous avons r�pondu � la premi�re question: "qu'est ce que �a fait?" Nous pouvons passer � la suivante :"comment l'appelle-t-on ?" Un appel ligne A se fait � l'aide d'un word. Le poids faible de ce word contient le num�ro de la fonction, et le poids fort est �quivalent � $A (d'o� le nom ligne A). Ainsi pour appeler la fonction 3, on utilisera le word $A003. Mais o� le placer? Et bien tout simplement dans notre programme ! Pour pouvoir le noter tel quel nous le ferons pr�c�der de DC.W de fa�on � ce que DEVPACK ne cherche pas � transformer ceci en code 68000 puisqu'aucune mn�monique ne correspond � ce nombre! Pour appeler la fonction 1 de la ligne A nous mettrons donc dans notre programme: DC.W $A001 Note: si cela vous int�resse, vous pouvez suivre les appels ligne A de la m�me mani�re que les appels Trap, sous MONST, en tout cas si vous avez une des derni�res versions de MONST. Question suivante: comment passer des param�tres. En effet si nous voulons utiliser par exemple la fonction 2 pour conna�tre la couleur d'un pixel, il faudra bien fournir les coordonn�es de celui-ci. Nous avons vu avec Gemdos, Bios et Xbios que les param�tres �taient pass�s par la pile. Nous avons �galement utilis� ce principe dans nos propres routines. Empilage, saut � la routine (par BSR ou TRAP) puis correction de la pile. Concernant la ligne A et le GEM, la pile n'est pas utilis�e. En effet, la ligne A et le GEM utilisent un syst�me de tableau. Nous avons �tudi� les tableaux et nous avons vu comment lire dans ceux-ci. Et bien c'est un peu ce principe qui va �tre utilis�. Les param�tres, parfois tr�s nombreux, vont �tre plac�s dans un ou plusieurs tableaux, � des endroits pr�cis, avant l'appel de la fonction choisie. Celle-ci ira chercher les param�tres n�cessaires et retournera ensuite ses r�sultats �galement dans des tableaux. L'avantage du syst�me des macros devient �vident: si pour des appels gemdos, bios et xbios il suffit d'empiler (le nombre de param�tres n'est pas �norme et le principe et toujours le m�me), il faut en revanche une sacr� dose de m�moire pour se rappeler dans quel tableau et surtout o� dans ce tableau doivent �tre d�pos�s les param�tres de chaque fonction. Malheureusement dans la biblioth�que de Devpack, il n'y a pas de macros pour la ligne A. Nous allons donc d�tailler quelques fonctions '� la main'. Etant donn� que vous avez sous la main le cours sur les macros, je ne peux que vous conseiller de r�aliser les macros correspondantes � ces fonctions. Nous allons tout d'abord tracer un rectangle sur l'�cran. Voir listing num�ro 5. Tout d'abord inclusion de la routine de d�marrage des programmes, petit message de pr�sentation en effa�ant l'�cran au passage. Ensuite initialisation de la ligne A. En retour, nous avons en A0 l'adresse du tableau que nous allons remplir avec les param�tres. Ceux-ci sont assez nombreux et doivent �tre pass�s � des endroits bien pr�cis. Certains demandent une petite explication: Le clipping. C'est un syst�me bien utile, que nous retrouverons dans le GEM. Par exemple nous voulons afficher sur l'�cran une image, mais celle-ci ne doit appara�tre que dans un petit rectangle. Il va donc falloir se compliquer s�rieusement la tache afin e de ne pas afficher toute l'image. Au lieu de cela nous pouvons utiliser le clipping. Cela consistera � donner les coordonn�es du rectangle dans lequel nous voulons que l'image apparaisse, et � dire que c'est le rectangle de clipping. Ensuite il reste � afficher l'image sur tout l'�cran et elle n'appara�tra que dans le rectangle, le reste de l'�cran �tant 'clipp�'. La encore, il est bien �vident que cela ralenti l'affichage, nous avons en effet affich� tout une image pour n'en voir qu'un bout, et de plus le syst�me a �t� oblig� de tester sans arr�t pour savoir s'il devait nous montrer ce pixel, puis l'autre etc... Cette m�thode est pourtant hyper-utile et nous verrons cela de nombreuses fois. Le type d'affichage. C'est un descripteur permettant de savoir comment va se faire l'affichage. 0= mode remplacement, 1=mode transparent, 2=mo deXOR, 3=transparent inverse. Essayer de faire 2e rectangle qui se recouvre et observez le r�sultat en faisant varier les modes. Nous allons maintenant utiliser une autre fonction, qui demande la couleur d'un pixel. Dans le cas du tra�age d'un rectangle nous avons utilis� la tableau dont l'adresse �tait en A0 pour passer les param�tres. Pour la demande de couleur d'un pixel et pour le coloriage d'un pixel, nous allons utiliser d'autres tableaux.Alors l�, suivez bien parce que les tableaux que nous allons d�crire maintenant sont �galement utilis�s pas le GEM? nous allons donc faire d'une pierre deux coups !!!!! Tout comme le GEM donc, la ligne A utilise des tableaux, destin�s chacun � recevoir ou � rendre des choses diff�rentes. Le premier tableau, c'est le tableau CONTRL (Control) Il re�oit le num�ro de la fonction et quelques autres param�tres. Le second c'est le tableau INT_IN. Cela signifie Integer In, c'est donc un tableau qui va recevoir des entiers (un nombre entier c'est en Anglais un integer) Le troisi�me tableau c'est PTSIN (Points In). C'est un tableau destin� � recevoir les coordonn�es des points ou bien des dimensions. Disons que ce tableau va recevoir par exemple les coordonn�es X et Y pour le centre d'un cercle, mais aussi son rayon. Il r�gne une certaine confusion dans les explications sur ce tableau. En effet il re�oit entre autre des coordonn�es, qui vont souvent par couple (X et obligatoirement Y), ce qui fait que bien souvent on dit par exemple "il faut mettre 1 donn�e dans PTSIN" alors qu'en fait il faut mettre un couple de donn�es! Le quatri�me tableau c'est INTOUT. C'est la m�me chose que INT_IN sauf que c'est en sortie, pour les r�sultats. Vous vous en doutez maintenant, le dernier tableau, c'est PTSOUT!!!! Jetons maintenant un coup d'oeil sur le listing num�ro 6.Un peu de r�flexion et cela ne doit pas vous poser de probl�me. Essayez cependant de refaire ce listing avec des boucles parce qu'avec le coloriage d'un seul pixel, c'est bien sur un peu limit�... Juste une chose, essayer de bien imaginer ce qui se passe avec les tableaux Contrl, Int_in, Ptsin, Intout et Ptsout parce dans le chapitre suivant il va y en avoir beaucoup..... Bon maintenant que vous savez tracer un rectangle, vous pouvez �galement tracer des lignes, demander la couleur d'un pixel etc... La fonction la plus d�licate est � mon avis celle qui sert pour l'affichage de texte. Elle permet cependant des effets assez int�ressants (�criture avec diff�rents styles). Pour utiliser maintenant la ligne A, reportez vous aux descriptifs donn�s dans la Bible et essayez! 2e remarque cependant: avec le GEM et la ligne A nous abordons en quelque sorte le concept du multi-utilisateur/multi-machines. En effet le GEM utilise beaucoup la ligne A et partage donc avec lui les tableaux. Or, votre programme peut tr�s bien �tre en train de tracer de jolis rectangles lorsqu'il vient � l'utilisateur l'id�e de promener sa souris dans le menu d�roulant... Appel � GEM, modification des tableaux communs au GEM et � la ligne A, et au retour adieu les rectangles... L� encore prudence et r�flexion pour se mettre � la place de l'utilisateur... Seconde remarque, les adresses fournies par la ligne A. Nous pouvons prendre comme exemple les fontes. O� se trouvent- elles? Avec MONST, en se balladant en m�moire, il sera toujours possible de les trouver. Malheureusement elles ne sont pas au m�me endroit dans toutes les machines. Ce n'est pas grave, il suffit de passer par la ligne A. En effet la fonction $A000 permet d'initialiser mais en grande partie cela ne fait que nous fournir des adresses. Gr�ce � celles-ci nous pouvons en d�duire de tr�s nombreuses choses (emplacement des fontes entre autre). L� encore, il est pr�f�rable de passer par DC.W $A000 puis de faire des d�calage pour trouver ce qui nous int�resse. Le petit rigolo qui se vante d'avoir trouv� l'adresse cach�e qui donne les fontes se rendra bien vite compte que cela ne marche pas tout le temps alors qu'avec la ligne A, c'est moins frime mais c'est s�r! Pour l'utilisation de la ligne A, le descriptif des fonctions dans la bible est suffisant. Commencez par les rectangles, les lignes, placez des points o� demander leur couleurs etc... Voici un exemple qui a �t� dans les premiers que j'ai r�alis� avec la ligne A: Affichage d'un petit texte en haut � gauche (environ 5 lignes de 20 caract�res). A l'aide d'un boucle, on demande la couleur des pixels, et on recolorie les pixels sur la droite de l'�cran et de fa�on � ce que le texte apparaissent verticalement. Pour ce qui est de d�terminer l'emplacement de certaines donn�es gr�ce � un saut dans les adresses d'initialisation ligne A, la bible est un peu silencieuse l�-dessus alors que le Livre du D�veloppeur chez Micro-App est plus fourni. Conseil de derni�re minute: faites beaucoup d'exercices avec la ligne A et surtout faites vous une biblioth�que de Macro pour ses fonctions.
Back to ASM_Tutorial