COURS203.TXT/fr

From Atari Wiki
Revision as of 15:08, 23 November 2023 by Exxos (talk | contribs)
Jump to navigation Jump to search
   ******************************************************************
   *                                                                *
   *             COURS D'ASSEMBLEUR 68000 SUR ATARI ST              *
   *                                                                *
   *                 par Le F�roce Lapin (from 44E)                 *
   *                                                                *
   *                         Seconde s�rie                          *
   *                                                                *
   *                         Cours num�ro 3                         *
   *****************************************************************
   
   Avant  de continuer � �tudier ces cours,  je pense qu'il est grand
   temps  pour vous d'�tudier toutes les instructions du 68000.  Vous
   avez d�j� suffisamment de bases pour r�aliser de petits programmes
   et  surtout  vous  devez  vous  �tre  habitu�  avec le syst�me qui
   consiste  �   taper  seulement  2 ou 3 lignes de programmes puis �
   visualiser leur fonction avec MONST.
   
   Prenez  donc  l'ouvrage sur le 68000 que vous avez normalement ac-
   quis,  et faites le tour de toutes les instructions avec cette m�-
   thode.  Observez  bien  les  r�sultats des op�rations de d�calages
   (ASL,  ASR  etc..) Il ne s'agit pas ici de les conna�tre par coeur
   mais  au  moins  de  savoir qu'elles existent pour pouvoir, le cas
   �ch�ant, les  retrouver  facilement,  et surtout d'�tre capable de
   comprendre  ce qu'elles font.  Le nombre d'instructions est faible
   mais  chacune  d'elle  r�alise  une  op�ration  bien pr�cise qu'il
   convient  de conna�tre dans ses moindres d�tails. Il ne suffit pas
   de  savoir  que  ROR r�alise une rotation vers la droite,  il faut
   �galement  savoir que le bit �ject� d'un cot� est remis de l'autre
   et, qu'en  plus, il  est recopi� dans le bit C du SR.  Il faut re-
   marquer  aussi  que ROR #4,D0 est accept� mais pas ROR #9,D0. Dans
   ce  cas il faut faire 2 ROR ou MOVE.W #9,D1 puis ROR D1,D0.  C'est
   ce  genre  de  petits  trucs qui vous bloqueront plus tard si vous
   n'avez pas pass� quelques heures � les d�cortiquer!
   
   LES INCLUSIONS DE FICHIERS
   
   L'un  des plus gros probl�me de l'ASSEMBLEUR se situe au niveau de
   la  taille  des  listings.  Si  en BASIC une ligne suffit pour une
   op�ration parfois tr�s complexe, nous avons vu qu'en ASSEMBLEUR ce
   n'�tait  pas  le  cas.  Par  contre  nous  avons  vu �galement que
   l'�criture  en ASSEMBLEUR consistait �  taper le bon nombre d'ins-
   truction  machine, alors  que  le compilateur du BASIC, du C ou du
   PASCAL  se  d�brouille  � faire une traduction 'qui marche' et qui
   n'est donc pas forc�ment la plus �conomique au niveau taille et/ou
   au niveau vitesse.
   
   En contre partie,  nos sources ASSEMBLEUR font tr�s rapidement des
   pages  et des pages l�, o� un programmeur travaillant avec un lan-
   gage  '�volu�' n'aurait que quelques dizaines de lignes. Il existe
   cependant  quelques  m�thodes  permettant  non  pas  d'�viter  ces
   multiples pages, mais de r�duire sensiblement la taille du listing
   sur lequel nous travaillons.
   
   Deux  directives vont principalement nous servir. Attention, ce ne
   sont  pas des instructions ASSEMBLEUR, mais des ordres interpr�t�s
   par  l'ASSEMBLEUR.  Ce sont donc, dans notre cas, des instructions
   'Devpack' et non pas des instructions '68000'.
   
   La  premi�re, INCBIN, permet  d'incorporer  dans  le  programme un
   fichier  binaire.  Un fichier binaire cela peut-�tre une image, de
   la digit, des sprites etc... ou bien un morceau de programme qui a
   �t�  assembl� sous forme de fichier binaire. Voici un exemple avec
   une image. (listing 1 s�rie 2)
   
   Tout  d'abord  nous  transf�rons l'adresse de l'image en A6,  nous
   sautons  l'en-t�te  de  celle-ci pour pointer sur les couleurs qui
   sont mises en place avec Xbios(6), nous cherchons ensuite l'adres-
   se de l'�cran avec la fonction Xbios(3) puis, apr�s avoir saut� la
   palette  de couleurs de notre image,  nous transf�rons cette image
   sur  l'�cran. Un  �cran  fait  32000  octets.  Si nous transf�rons
   long  mot  par  long  mot,  nous  ne  devons transf�rer que 32000 
   divis�  par  4 c'est  � dire 8000 long mots.  Comme nous utilisons
   une  boucle  DBF  qui compte jusqu'� 0 compris (la boucle s'arr�te
   quand  le  compteur  atteint  -1),  il  faut  donc  initialiser le
   compteur  �  7999. Ensuite  attente  d'appui sur une touche et bye
   bye.
   
   Petit exercice �ducatif. Une fois ce programme assembl�, suivez le
   sous MONST. Lorsque Xbios(3) aura donn� l'adresse de l'�cran, pla-
   cez  la fen�tre 3 sur cette adresse puis continuez � faire avancer
   pas � pas le programme, pour voir la recopie se faire. De temps en
   temps tapez sur la touche V afin de voir l'�cran au lieu de MONST,
   vous pourrez ainsi suivre l'affichage 'en direct'!!!
   
   Autre  petit  exercice:  Le ST poss�de la particularit� d'avoir en
   quelque sorte 2 �crans: l'�cran sur lequel on travaille (Xbios(2))
   et  celui  que  l'on  voit (Xbios(3)).  Dans la plupart des cas il
   s'agit  du  m�me  mais il est tout � fait possible de les placer �
   des  endroits  diff�rents  de  la  m�moire et ainsi de pr�parer un
   affichage  dans  xbios2 tout  en  montrant  Xbios3.  Il sera ainsi
   possible  d'afficher  rapidement  Xbios2 en  le  transf�rant  dans
   Xbios3, et ainsi, de faire des animations rapides. Essayez donc de
   changer  un  peu  le  listing  et de mettre MOVE.W  #2,-(SP)  � la
   place  de 3 pour la recherche de l'�cran. D�buggez le programme et
   constatez!
   
   Mais ceci nous �loigne un peu du sujet qui �tait l'inclusion. Pour
   r�aliser ceci nous avons juste fourni un label de rep�rage qui est
   ici  IMAGE  puis l'instruction INCBIN suivi du chemin pour trouver
   cette  image. Dans l'exemple c'est une image PI3 mais rien ne vous
   emp�che  de mettre une image PI2 ou PI1! Nous aurions tr�s bien pu
   mettre 2 images l'une � la suite de l'autre,  sans mettre de label
   pour  rep�rer  la  seconde.  Pour  pointer dessus,  sachant qu'une
   image DEGAS fait 32066 octets, nous aurions fait:
   
            LEA       IMAGE,A6
            ADDA.L    #32066,A6
   Je rappelle que cela se lit: load effective address IMAGE dans A6 
   add address long...
   
   Petit  exercice: faire  un  programme  qui tourne en moyenne r�so-
   lution, passe en basse, affiche une image basse r�solution, attend
   un appui sur une touche puis repasse en moyenne.  Sachant utiliser
   les  fonctions Xbios et les boucles,  vous devriez �tre capable de
   faire  une  routine  de  sauvegarde  de la palette et une autre de
   restitution de celle-ci.
   
   Il  est  tout  �  fait  possible d'inclure ainsi des fichiers tr�s
   divers.  Il  existe pourtant plusieurs probl�mes.  Tout d'abord la
   taille  du programme r�sultant.  En effet,  notre image DEGAS,  de
   part sa taille, a grossi notre programme de 32Ko!  Bien s�r il y a
   maintenant  l'avantage  de  pouvoir  emp�cher  les bidouilleurs de
   venir  y   mettre  leur  pieds!  Encore  qu'une  image  DEGAS fait
   toujours  la m�me taille, mais il est possible d'inclure une image
   compact�e   (en  mettant bien s�r une routine de d�compactage dans
   notre programme!).
   
   Autre  probl�me,  le temps! En effet,  si l'affichage lui m�me est
   plus  rapide  du fait qu'il n'y a pas � aller chercher l'image sur
   la  disquette  puisque  cette  image  est  d�j� en m�moire avec le
   programme, c'est � l'assemblage que �a p�dale!!! Il faut donc pas-
   ser  par des m�canismes de travail bien ordonn�s.  Mettre en place
   un  disque virtuel (de pr�f�rence r�sistant au Reset) recopier les
   images dedans et ensuite commencer �  travailler. Vous comprendrez
   bien  vite pourquoi les possesseurs de  520 ont tout int�r�t � les
   faire gonfler � un m�ga minimum et pourquoi un lecteur externe ou 
   mieux un disque dur devient vite indispensable!!!
   
   Apr�s  avoir vu le m�canisme d'inclusion de fichiers,  nous allons
   nous  int�resser  maintenant aux inclusions de listings. Il est en
   effet  possible  de  prendre un bout de listing,  de le sauver sur
   disquette et de demander � l'assembleur de l'inclure lors de l'as-
   semblage.  L�  aussi,  perte  de temps � l'assemblage mais gain de
   temps  tr�s  appr�ciable  lors  de  la  cr�ation de programme. Par
   exemple votre routine de sauvegarde de palette:  faites avec soin,
    elle  marche  bien  et  en fait vous en avez besoin dans tous vos
   programmes.  Il  faut  donc  �  chaque  fois la retaper et surtout
   consommer  quelques  dizaines de lignes avec cette routine.  Perte
   de  temps,  possibilit�  d'erreur  de  frappe  et allongement bien
   inutile  du listing.  Lorsque vous commencerez � circuler dans  10
   ou   20  pages  de sources � la recherche d'une variable vous com-
   mencerez  � comprendre de quoi je parle, en sachant en plus que 20
   pages, c'est un tout petit source assembleur...
   
   Voyons concr�tement un exemple, avec la sauvegarde de palette.
   
   SAUVE_PALETTE
            MOVEM.L   D0-D4/A0-A4,-(SP)
            LEA       ANC_PAL,A4            ptn sur le lieu de 
sauvegarde
            MOVE.W    #15,D4                16 couleurs
   
   .ICI     MOVE.W    #-1,-(SP)             demande de couleurs
            MOVE.W    D4,-(SP)              num�ro de la couleur
            MOVE.W    #7,-(SP)              Setcolor()
            TRAP      #14                   Xbios
            ADDQ.L    #6,SP
            MOVE.W    D0,(A4)+              sauvegarde de la couleur
            DBF       D4,.ICI               et on passe � la suivante
            MOVEM.L   (SP)+,D0-D4/A0-A4
            RTS
   ANC_PAL  DC.L      0,0,0,0,0,0,0,0
   REMET_PALETTE
            MOVEM.L   D0-D4/A0-A4,-(SP)
            LEA       ANC_PAL,A4            ptn sur le lieu de 
sauvegarde
            MOVE.W    #15,D4                16 couleurs
   
   .ICI     MOVE.W    (A4)+,-(SP)           demande de couleurs
            MOVE.W    D4,-(SP)              num�ro de la couleur
            MOVE.W    #7,-(SP)              Setcolor()
            TRAP      #14                   Xbios
            ADDQ.L    #6,SP
            DBF       D4,.ICI               et on passe � la suivante
            MOVEM.L   (SP)+,D0-D4/A0-A4
            RTS
   
   Voici  donc  2 routines.  Tout d'abord sachant qu'un appel � Xbios
   ne  sauve pas les registres D0-D3 et A0-A3 nous utilisons D4 et A4
   pour  le  compteur  de couleur et l'adresse de sauvegarde,  ce qui
   explique  aussi  la  sauvegarde  sur  la  pile  au  d�but des deux
   routines. La  premi�re sauvegarde la palette et la met � l'adresse
   ANC_PAL.  Nous  constatons que cette adresse se trouve entre les 2
   routines.  En effet plusieurs solutions s'offrent � nous.  D'abord
   la  plus  �conomique  en  taille c'est de mettre cette r�servation
   pour  la palette dans la section BSS de notre programme en faisant
   ANC_PAL  DS.W  16 Nous avons d�j� vu que la section BSS n'occupait
   pas  de  place sur la disquette.  Cependant nous avons r�alis� ces
   routines  avec  en  t�te l'id�e de les inclure,  afin de gagner en
   facilit�  de programmation. En pla�ant cette r�servation entre les
   routines,  elle  fera  partie  int�grante  du  fichier.  Il  n'est
   cependant  pas  possible  de  la  mettre  en  DS  nous  somme donc
   contraint  de  la  mettre  en  DC.  Le  danger  serait  que  notre
   programme  essaye  de lire cette partie.  Faire un BSR ANC_PAL par
   exemple serait fatal mais nous sommes assez s�rieux pour ne pas le
   faire, donc pas de probl�me...
   
   Une  fois tap� ce petit listing, sauvez le par exemple sous le nom
   SAUV_PAL.S. Ensuite  modifiez le programme du listing 1 (celui que
   nous  venons de voir avec l'image incluse).  Juste apr�s la fin du
   programme  par  MOVE.W   #0,-(SP),   TRAP   #1  (donc  juste avant
   l'inclusion de l'image), mettez
   
            INCLUDE   "A:\SAUV_PAL.S"
   
   Ne  mettez  pas d'�tiquette sur le bord gauche puisque la premi�re
   �tiquette  c'est  SAUVE_PALETTE et qu'elle est dans notre routine.
   Ensuite  au tout d�but du programme, mettez BSR SAUVE_PALETTE et �
   la fin juste avant de quitter, mettez BSR REMET_PALETTE. Au niveau
   taille, votre listing est donc simplement augment� de 3  lignes:
   
    (BSR SAUVE_PALETTE, BSR REMET_PALETTE et INCLUDE "A:\SAUV_PAL.S")
   
   et pourtant ce sont 24 lignes qui sont ajout�es!!!
   
   Nous  sommes  donc en train de nous cr�er une biblioth�que.  C'est
   une tr�s grande partie du travail du programmeur en assembleur car
   de nombreuses choses reviennent souvent: initialisation par sauve-
   garde de la palette, passage en basse r�solution et passage en Su-
   perviseur,  restitution  en  faisant  l'inverse,  d�compactage des
   images etc
   
   De  m�me, si  vous �tes en train de r�aliser un gros programme, en
   cours de d�veloppement ce sont des pages enti�res qui peuvent �tre
   incluses  diminuant  d'autant la taille du listing et y permettant
   des d�placements nettement plus ais�s.
   
   Voyons  tout  de  suite  un  autre bloc qui devra maintenant faire
   partie  de notre biblioth�que. Jusqu'� pr�sent nous avons tap� pas
   mal  de petits programmes,  sans nous soucier de la place m�moire.
   Il  est temps d'y penser afin de commencer � prendre conscience du
   fait  qu'il  faut  programmer  proprement.   Imaginons  que  notre
   programme  soit en m�moire mais qu'en m�me temps il y ait d'autres
   programmes  dans cette m�moire.  Il est bien �vident que chacun ne
   doit  s'approprier  que  la place m�moire dont il a  besoin,  afin
   d'en  laisser le plus possible pour ces voisins. Pour cela il faut
   savoir  que lors de l'assemblage sous forme de fichier ex�cutable,
   il y  a g�n�ration d'une en-t�te.  Gr�ce �  cette en-t�te, au lan-
   cement  de  notre programme il va y avoir cr�ation de ce qu'on ap-
   pelle  la  page  de base.  En voici un descriptif. Si vous d�sirez
   obtenir un maximum de renseignements sur les en-t�tes de programme
   ou  les pages de base,  reportez vous aux chapitres correspondants
   dans  la Bible ou le Livre du D�veloppeur.  Excellent chapitre sur
   ce  sujet  dans la doc officielle ATARI (document sur la structure
   des programmes).
   
   * Page de base
   
   Adresse         Description
   $00      Adresse de d�but de cette page de base
   $04      Adresse de fin de la m�moire libre
   $08      Adresse du d�but de la section TEXTE
   $0C      Taille de la section TEXTE
   $10      Adresse de d�but de la section DATA
   $14      Taille de la section DATA
   $18      Adresse de d�but de la section BSS
   $1C      Taille de la section BSS
   
   Nous allons donc piocher ces informations, et en d�duire la taille
   qui    devrait   suffire   pour   notre   programme.   Connaissant
   l'emplacement  de  la  zone  d'implantation  du  programme,   nous
   utiliserons  la  fonction 74 du  GEMDOS  (fonction Mshrink)    qui
   permet,  en  donnant  la  taille  d�sir�e et l'adresse de fin,  de
   r�tr�cir  une zone m�moire. En effet, au lancement notre programme
   a  pris  toute  la place disponible, nous devons donc la r�tr�cir.
   Notre  programme a �galement besoin d'une pile. Au lieu de prendre
   celle  qui est d�j� en place, nous allons lui substituer la notre,
   dont nous pourrons r�gler la taille � loisir.
   
   * ROUTINE DE DEMARRAGE DES PROGRAMMES
   
            MOVE.L    A7,A5                 pr�l�ve ptn de pile pour 
prendre
                                            * les param�tres
            LEA.L     PILE,A7               impose notre pile
            MOVE.L    4(A5),A5              adresse de la page de base 
de
                                            * l'ancienne pile
            MOVE.L    12(A5),D0             taille de la section texte
            ADD.L     20(A5),D0             + taille section data
            ADD.L     28(A5),D0             + taille section bss
            ADD.L     #$100,D0              + longueur de la page de 
base    
                                            *(256 bytes)
   
   * Appel � la fonction MShrink() du GEMDOS (Memory Shrink)
   
            MOVE.L    D0,-(SP)
            MOVE.L    A5,-(SP)
            MOVE.W    #0,-(SP)
            MOVE.W    #74,-(SP)             M_shrink()
            TRAP      #1
            LEA       12(A7),A7
   
   Voil�,  apr�s  cette op�ration, notre programme n'utilise plus que
   la  place  m�moire  dont  il  a besoin.  Il ne faut pas oublier de
   d�finir la pile dans la section BSS par ceci:
   
            DS.L      256
   PILE     DS.L      1
   
   J'en  vois  qui  sont  surpris  par  cette r�servation!!! Dans les
   exemples fournis avec DEVPACK il est marqu�  "stack go backwards",
   que je traduis librement par "moi j'avance la pile recule, comment
   veux tu ..." Un peu de s�rieux. Nous avons vu que l'utilisation de
   la pile se faisait en d�cr�mentant celle ci:
   
   (move.w        #12,-(sp) par exemple).
   
   Il  faut  donc r�server de la place AVANT l'�tiquette.  Pour cette
   raison  nous  notons  le label et, au-dessus, la taille r�ellement
   r�serv�e pour la pile.
   
   Quelle  taille  choisir?  Cela d�pend de vous!  Si votre programme
   est  plein  de subroutines s'appelant mutuellement et sauvant tous
   les registres � chaque fois, il faut pr�voir assez gros.
   
   Tapez  le  programme suivant.  Il est �vident que vous devez avoir
   tap� au pr�alable la routine de d�marrage de programmes qui est un
   peu plus haut dans ce cours. Elle est ici incluse au d�but. Pas de
   branchement  �  y  faire.  Si, une fois assembl�, vous d�buggez ce
   programme, vous  verrez au d�but la routine de start.  Dor�navant,
   cette  routine  sera  toujours pr�sente au d�but de nos programmes
   mais  ne  sera jamais int�gralement recopi�e,  un INCLUDE est bien
   plus  commode! Note:  Il semble que DEVAPCK se m�lange parfois les
   pinceaux   lorsque  les inclusions sont nombreuses et font appel �
   des  fichiers  contenus  dans des dossiers.  De m�me il existe des
   probl�mes  avec  les  inclusions sur disque B lorsque celui-ci est
   pris  comme lecteur A dans lequel on met le disque B. (je n'ai par
   contre pas rencontr� de probl�me avec mon lecteur externe). 
   
            INCLUDE   "A:\START.S"
            MOVE.W    #$AAAA,BIDULE
            BSR       TRUCMUCHE
            MOVE.W    BIDULE,D6
            MOVE.W    #0,-(SP)
            TRAP      #1
   *-----------------------------------------------*
   TRUCMUCHE MOVEM.L  D0-D7/A0-A6,-(SP)
            BSR       MACHIN
            MOVEM.L   (SP)+,D0-D7/A0-A6
            RTS
   
   MACHIN   MOVEM.L   D0-D7/A0-A6,-(SP)
            MOVE.L    #$12345678,D0
            MOVEM.L   (SP)+,D0-D7/A0-A6
            RTS
   
            SECTION BSS
           
   BIDULE   DS.W      1
            DS.B      124
   PILE     DS.L      1
            END
   
   Ce  programme  est  bien  sur  bidon.  J'esp�re cependant que vous
   l'avez scrupuleusement tap�. Lancez le... paf  4 bombes!!!!!
   
   Observons  le  � la loupe afin de comprendre pourquoi...  Le start
   est  bien  mis  en place et lorsque nous d�buggons il est effectu�
   sans  incident.  On  place  ensuite $AAAA dans la variable BIDULE.
   Activons  la fen�tre 3 et pointons sur BIDULE (il suffit pour cela
   de faire Alternate A et de taper le nom du label en majuscule donc
   ici  BIDULE).  Avan�ons  pas  �  pas,   nous  voyons  bien  BIDULE
   recevoir  AAAA.  Continuons � avancer: nous sautons dans TRUCMUCHE
   avec  au passage sauvegarde dans la pile de l'adresse de retour (�
   ce  propos  vous  pouvez  faire  pointer la fen�tre 3  sur PILE et
   regarder  au  dessus  l'empilage des donn�es). Ensuite nous allons
   sauter  dans  MACHIN mais l�, stop!!!!!!! Suivez attentivement les
   explications. Juste  avant d'ex�cuter le BSR MACHIN, faites scrol-
   ler  la  fen�tre 1 avec  la touche 'fl�che vers le bas'.  En effet
   d'apr�s  la taille du listing et celle de la fen�tre vous ne devez
   pas  voir  BIDULE.  Descendez donc de  7 lignes.   Normalement, la
   premi�re  ligne de la fen�tre doit maintenant �tre BSR MACHIN avec
   la petite fl�che en face indiquant que c'est cette instruction qui
   va  �tre  ex�cut�e.  En  bas  de la fen�tre vous devez voir BIDULE
   avec en face DC.W  $AAAA puisque c'est ce que nous y avons d�pos�.
    En  dessous  des  ORI.B#0,D0 .  En  effet  nous  sommes  dans une
   fen�tre  qui cherche � nous montrer le d�sassemblage de ce qu'il y
   a  dans le tube.  Or � cette endroit il y a 0 dans le tube et cela
   correspond  � ORI.B #0,d0;  ce qui explique ces instructions. Mais
   ces  ORI.B correspondent � quoi ?  o� sont-ils situ�s? eh bien, il
   sont dans notre pile puisque celle-ci est constitu�e d'un bloc de 
   124 octets  entre  BIDULE  et PILE.  Alors maintenant scrutez tr�s
   attentivement  BIDULE et avancez le programme d'un pas. Nous voici
   maintenant sur la ligne MOVEM.L de la subroutine MACHIN. Ex�cutons
   cette ligne...
   
   Stupeur,  BIDULE  est  �cras�, de m�me que le RTS de la subroutine
   MACHIN  qui  est  juste  au  dessus!!!  Et  maintenant,   si  nous
   continuons,  apr�s  le  second MOVEM le 68000 ne va pas tomber sur
   le RTS puisque celui-ci vient d'�tre �cras�, et notre programme va
   planter! Pourquoi ? eh bien, parce que nous avons essay� d'empiler
   128 octets  (MOVEM de trucmuche=15 registres donc 15*4=60  octets,
   idem pour le MOVEM de machin,  auquel il faut ajouter l'adresse de
   retour pour trucmuche et celle de machin, total 128 octets!) alors
   que nous n'avions pr�vu qu'une pile de 124 octets.
   
   Pour que ce programme marche sans probl�me, il faut donc mettre au
   minimum une pile de 128 octets. Faites tr�s attention � �a, car si
   nous  avions  mis  une  pile  de  124  octets,  le programme ne se
   serait  pas plant� car il n'y aurait pas eu �crasement du RTS mais
   il  y  aurait  eu �crasement de BIDULE et je suis certain que vous
   auriez  cherch� bien longtemps en vous disant " mais qu'est ce qui
   peut  bien �craser BIDULE  " surtout que cet �crasement survient �
   un moment o�, justement, on n'utilise pas BIDULE!!!
   
   Gardez  donc  toujours  pr�sent  �  l'esprit  le  principe du tube
   m�moire,  sans oublier qu'il est plein d'instructions, de contenus
   de variables et que rien n'emp�che de les �craser!
   
   Encore  une  petite  remarque  sur  le Start.   Il est tout � fait
   possible  de  tester  D0 en  retour du Mshrink().  Si celui-ci est
   n�gatif, c'est  qu'il y  a eu erreur. Si vous savez que syst�mati-
   quement vous mettez le label BYE_BYE en face du GEMDOS(0) qui ter-
   mine votre programme,  vous pouvez rajouter � la fin du start:
   
            TST.W     D0
            BMI       BYE_BYE
   
   Une  derni�re  pr�cision  sur  les inclusions.  Il existe d'autres
   moyens  de r�aliser de telles choses,  par exemple d'assembler les
   morceaux  puis  de  les  lier  avec un LINKER.  Cette solution est
   int�ressante  lorsque les programmes commencent � prendre des pro-
   portions gigantesques.
   
   Sinon, il  s'agit  plus d'emb�tements qu'autre chose!!!!   M�me si
   certains puristes pr�f�rent linker:
   
   j'�dite, j'assemble, je  quitte, je linke, je lance, �a plante, je
   d�bugge, j'�dite etc...) 
   
   je  pr�f�re, quant  � moi, la m�thode de l' "include". Elle permet
   �ventuellement  d'avoir  acc�s directement au source. Par exemple,
   si  votre routine de sauvegarde palette plante,  placer le curseur
   de  GENST  sur  la ligne INCLUDE  "A:\SAUV_PAL.S"  puis choisissez
   l'option  Insert  File  dans  le  menu fichier.  Votre routine est
   maintenant  sous  vos  yeux. Une  fois  que  ce bloc est au point,
   d�limitez le avec F1 et F2 puis sauver le avec F3, hop le tour est
   jou�!
   
   Fin  du  cours  sur  les  inclusions!  Commencez � fabriquez votre
   biblioth�que  et  n'h�sitez pas � en faire des copies de s�curit�,
   et  m�fiez  vous  des virus!  Sur cette disquette il y a  IMUN.PRG
   Vous  le mettez en dossier Auto sur votre disquette de boot, et il
   v�rifi�  toutes  les  disquettes  que  vous  introduisez  dans  le
   lecteur!

Back to ASM_Tutorial