COURS202.TXT/fr

From Atari Wiki
Revision as of 14: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 2                         *
   ******************************************************************

   Nous  voici donc repartis pour de nouvelles aventures!  Ce  second
   cours   aura pour sujet les TRAP et plus pr�cis�ment  comment  les
   programmer  soit m�me.Nous  avions vu, dans la premi�re s�rie, que
   les  traps �taient un excellent  moyen  d'acc�der au syst�me d'ex-
   ploitation,  et plus g�n�ralement d'acc�der � des espaces prot�g�s
   (uniquement  accessible  en mode Superviseur).  Nous avions �gale-
   ment  �tudi�  le  passage des param�tres par la pile,  ce qui nous
   avait servi pour r�aliser des subroutines avec param�tres.

   Le   premier exemple va consister � changer la couleur du fond  de
   l'�cran,   avec une routine fabrication maison,  qui sera  appel�e
   par un trap.

   D'abord la routine:
   Etant  donn� qu'un trap est toujours ex�cut� en Superviseur,  nous
   n'h�sitons  pas � utiliser  les  adresses syst�me.  La palette  de
   couleurs   du ST est situ�e � l'adresse  $FF8240.  Chaque  couleur
   �tant  cod�e sur un mot, la couleur 0 est en $FF8240, la couleur 1
   en $FF8242 etc...

   Nous  allons faire 2 routines.  Une qui mettra le fond en  rouge, 
   l'autre qui mettra le fond en vert. Les voici:

   ROUGE   MOVE.W  #$700,$FF8240
           RTE

   VERT    MOVE.W  #$070,$FF8240
           RTE

   Une  �tiquette permet de les rep�rer (ROUGE et VERT). Les couleurs
   �tant  cod�es en RVB (rouge/vert/bleu. On trouve aussi RGB qui est
   la  traduction anglaise: red/green/blue) et les niveaux varient de
   0 �  7. Nous  remarquons  que les routines ne se terminent pas par
   RTS  mais  par RTE. Cela signifie Return from exception. Il s'agit
   bien  en effet d'un retour d'exception et non pas du retour d'une 
   subroutine classique.

   Petit rappel: RTE se lit "return from exception". Je vous rappelle
   qu'il faut TOUT lire en Anglais et pas se contenter de lire l'abr�
   viation dont la signification est souvent assez �vasive.

   Voici le programme 'en entier'.

           MOVE.L  #MESSAGE,-(SP)  toujours sympa de se pr�senter
           MOVE.W  #9,-(SP)
           TRAP    #1              appel GEMDOS
           ADDQ.L  #6,SP   

   * Fixer les vecteur d'exception
           MOVE.L  #ROUGE,-(SP)    adresse 'routine'
           MOVE.W  #35,-(SP)       num�ro de vecteur du trap #3
           MOVE.W  #5,-(SP)        fonction Setexec()
           TRAP    #13             du bios
           ADDQ.L  #8,SP

           MOVE.L  #VERT,-(SP)     adresse 'routine'
           MOVE.W  #36,-(SP)       num�ro de vecteur du trap #4
           MOVE.W  #5,-(SP)        fonction Setexec()
           TRAP    #13             du bios
           ADDQ.L  #8,SP

   * Les  routines sont donc maintenant accessibles par le trap 3  et
   par le trap 4.
           BSR     TOUCHE
           TRAP    #3
           BSR     TOUCHE
           TRAP    #4
           BSR     TOUCHE
           TRAP    #3
           BSR     TOUCHE
           
           MOVE.W  #0,-(SP)
           TRAP    #1
   *-------------------------------------*
   ROUGE   MOVE.W  #$700,$FF8240
           RTE
           
   VERT    MOVE.W  #$070,$FF8240
           RTE
   *-------------------------------------*
   TOUCHE  MOVE.W  #7,-(SP)
           TRAP    #1
           ADDQ.L  #2,SP
           RTS
   *-------------------------------------*
           SECTION DATA
   MESSAGE DC.B    27,"E","LES TRAPS",0


   Facile   n'est ce pas ?  Et bien maintenant que vous savez  mettre
   vos   propres routines en TRAP et que vous savez �galement  passer
   des   param�tres  � une sub routine,  il ne vous reste  plus  qu'�
   faire  la  m�me chose.  J'estime que vous �tes assez grand pour le
   faire  tout seul et c'est pour cette raison que nous n'allons  pas
   le   faire  ici.  A vous de travailler!  Une  seule  pr�caution  �
   prendre:  Une  subroutine n'a besoin que de l'adresse de retour et
   donc  n'empile que cela.  Un TRAP par contre,  du fait qu'il passe
   en  Superviseur, sauve  �galement  le Status Register.  Il ne faut
   donc   pas  oublier  de le prendre en compte pour calculer le saut
   qui   vous   permettra de r�cup�rer vos param�tres  pass�s  sur la
   pile.  L'adresse   de  retour est bien s�r cod�e sur 4 bytes et le
   Status  Register  sur  2.  Il  y a donc empilage de 6 bytes par le
   TRAP   qui les d�pile automatiquement au retour afin de  retrouver
   d'o� il vient et afin �galement de remettre comme avant le Status-
   Register.  Il  ne faudra pas non plus oublier de corriger la  pile
   au retour.

   Comme  d'habitude, prenez votre temps et faites de nombreux petits
   essais afin de parfaitement comprendre la syst�me.
   Regardez   �galement attentivement la fonction du Bios qui nous  a
   servi   �  mettre en place nos deux routines.  Si au lieu  de  lui
   fournir  la nouvelle adresse pour le vecteur, nous lui passons -1,
   cette   fonction  nous  retourne,  dans D0.L, l'adresse   actuelle
   correspondant  � ce vecteur. Rien ne nous emp�che donc de demander
   l'adresse  utilis�e par le TRAP #1 (Gemdos),  de transf�rer  cette
   adresse   dans le trap #0 (par exemple) et de mettre notre  propre
   routine   dans  le  TRAP #1.  Cela peut  aussi  vous  servir  pour
   d�tourner  le TRAP.  Par exemple pour g�n�rer automatiquement  des
   macros. Il  est possible d'imaginer ainsi un programme r�sident en
   m�moire,  qui   est plac� � la place du trap 13 (Bios).  A  chaque
   fois  qu'il y a un appel au Bios, c'est donc notre routine qui est
   d�clench�e.  Etant   donn�  que  les appels se font avec  empilage
   des   param�tres,   il  est  tout � fait possible de savoir quelle
   fonction  du Bios on veut appeler. Il est alors possible de r�agir
   diff�remment pour certaines fonctions.  Cela permet par exemple de
   tester   des  appuis sur Alternate+touches de fonction et dans  ce
   cas, d'aller  �crire des phrases dans le buffer clavier, ceci afin
   de g�n�rer des macros!

   Note:  Un trap ne peut faire appel � des traps plac�s 'au-dessous'
   de   lui.  Ainsi,  dans  un trap #1, il est tout �  fait  possible
   d'appeler un trap #13 mais l'inverse n'est pas possible. 

   Exemple curieux et int�ressant:
           MOVE.W  #"A",-(SP)
           MOVE.W  #2,-(SP)
           TRAP    #1
           ADDQ.L  #4,SP

           MOVE.W  #0,-(SP)
           TRAP    #1

   Ce court programme ne doit pas poser de probl�me. Nous affichons A
    puis   nous   quittons.  Assemblez-le, puis  passez  sous  MONST.
   Appuyez  sur [Control] + P.  Vous choisissez alors les pr�f�rences
   de MONST.   Parmi celles-ci, il y a "follow traps",   c'est-�-dire
   suivre  les TRAPs qui, par d�faut, est sur "NO". Tapez Y pour YES.
   Une  fois les pr�f�rences d�finies, faites avancer votre programme
   pas   �  pas  avec control+Z.  A la diff�rence  des  autres  fois,
   lorsque  vous arrivez sur le TRAP vous voyez ce qui se  passe.  Ne
   vous   �tonnez  pas,  cela  va �tre assez long  car  il  se  passe
   beaucoup  de chose pour afficher un caract�re � l'�cran.  Le  plus
   �tonnant   va �tre l'appel au trap #13.  Eh oui, pour afficher  un
   caract�re le GEMDOS fait appel au Bios!!!!!

   Une autre exp�rience tout aussi int�ressante:

           MOVE.W  #"A",-(SP)
           MOVE.W  #2,-(SP)
           MOVE.W  #3,-(SP)
           TRAP    #13
           ADDQ.L  #6,SP   

           MOVE.W  #0,-(SP)
           TRAP    #1

   Affichage   de  A mais cette fois avec la  fonction  Bconout()  du
   Bios.  Assemblez  puis passez sous MONST avec un suivi des  traps.
   Lorsque   vous  arrivez dans le Bios (donc apr�s  le  passage  sur
   l'instruction  TRAP  #13),  faites  avancer pas � pas le programme
   mais  de temps en temps taper sur la lettre V. Cela vous permet de
   voir   l'�cran.  Pour  revenir sous MONST tapez  n'importe  quelle
   touche.  Avancer   encore de quelques instructions puis retaper  V
   etc...  Au   bout d'un moment vous verrez appara�tre la lettre  A.
   R�fl�chissez  � la notion d'�cran graphique et � la notion de fon-
   tes et vous comprendrez sans mal ce qui se passe. Surprenant non ?

   Quelques  petites choses encore:  suivez les traps du Bios,  Xbios
   GemDos   et regardez ce qui se passe au d�but.  Vous vous  rendrez
   compte  qu'il y a sauvegarde des registres sur la pile.  Seulement
   il n'y a pas sauvegarde de TOUS les registres! Seuls  D3-D7/A3-A6 
   sont  sauv�s et donc le contenu  de D2 est potentiellement �crasa-
   ble  par  un appel au syst�me d'exploitation. La prudence est donc
   conseill�e.  En  suivant �galement les  TRAPs vous apercevrez USP.
   Cela  signifie  User Stack Pointer c'est ainsi que l'on d�signe la
   pile utilisateur.

   Voil�, normalement  les traps n'ont plus de secret pour vous. Vous
   devez  savoir leur passer des param�tres, les reprogrammer etc ...
   Vous  devez m�me vous rendre compte qu'en suivant les fonctions du
   syst�me  d'exploitation, on doit pouvoir d�couvrir comment se font
   telle  et telle choses,  et ainsi pouvoir r��crire des morceaux de
   routines. 

Back to ASM_Tutorial