COURS210.TXT/fr

From Atari Wiki
Revision as of 15:02, 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 10                         *
   ******************************************************************

   Avant de vous fournir la bibliographie tant attendue, je vais vous
   parler tr�s succinctement des interruptions.  Le principe est nor-
   malement connu  (sinon  reportez vous au cours num�ro 5 de la pre-
   mi�re  s�rie!). Il  y  a  pourtant un sujet qui m�rite un peu plus
   d'attention: le  MFP68901.  Il s'agit  d'un circuit reconnu par le
   68000 comme  ayant  un  niveau  d'interruption  de 6 (voir feuille
   fournie avec le cours 1 et intitul�e "TABLEAU DES VECTEURS D'INTER
   RUPTIONS DU 68000 ET DU 68901"). En interne ce circuit est capable
   de  g�rer  16 niveaux  d'interruption, avec pour chaque niveau une
   adresse  associ�e  ($100-$13C pour le ST).  Voici un petit bout de
   listing  destin�  �  vous montrer comment placer sa propre routine
   dans  le  Timer A. Il  faut  d'abord  bloquer les interruptions en
   pla�ant  le  SR  �  $2700, sauver  les registres du MFP, placer sa
   routine  et ensuite redescendre le niveau d'interruption � son ni-
   veau  habituel  sur  le  ST, c'est � dire $2300. Ceci se fait bien
   �videmment  en mode Superviseur, mode auquel on acc�de avec Gemdos
   $20.

   * Pour mettre en place....
             MOVE.W    #$2700,SR            it interdites
             MOVE.B    $FFFFFA07,ANC_IERA   sauve les
             MOVE.B    $FFFFFA09,ANC_IERB   valeurs du
             MOVE.B    $FFFFFA13,ANC_IMRA   MFP 68901
             MOVE.B    $FFFFFA15,ANC_IMRB
             MOVE.B    $FFFFFA17,ANC_VR

             MOVE.L    $134,ANC_TIMEA       sauve Timer A
             MOVE.L    #MY_TIMEA,$134       place nouvelle routine

             CLR.B     $FFFFFA09            emp�che interrupt 0-7
             CLR.B     $FFFFFA15            masque interrupt 0-7
             MOVE.B    #%00100000,$FFFA07   OK interrupt 13 (timer A)
             MOVE.B    #%00100000,$FFFA13   OK aussi pour son masque 
             MOVE.B    #7,$FFFFFA19         r�gle TACR
             MOVE.B    #12,$FFFFFA1F        et TADR (1khz)
             BCLR      #3,$FFFFFA17         automatic end of interupt

             MOVE.W    #$2300,SR            autorise interruptions
   * Et maintenant, lorsque nous quittons le programme...
             MOVE.W    #$2700,SR            it interdites
             MOVE.B    ANC_IERA,$FFFFFA07   restitution
             MOVE.B    ANC_IERB,$FFFFFA09
             MOVE.B    ANC_IMRA,$FFFFFA13
             MOVE.B    ANC_IMRB,$FFFFFA15
             MOVE.B    ANC_VR,$FFFFFA17
             MOVE.L    ANC_TIMEA,$134
             MOVE.W    #$2300,SR            autorise les interruptions

   * Ma routine Timer A
   * Ne pas oublier de sauver les registres qui sont utilis�s
   * et de terminer par un RTE.

   MY_TIMEA: movem.l   d0-a6,-(sp)
   '
   '
   '
             BCLR      #5,ISRA              suivant VR !!!
             MOVEM.L   sp)+,d0-a6
             RTE

   *----------------------------------------------------------*
           SECTION BSS
   ANC_TIMEA DS.L      1
   ANC_IERA  DS.B      1             sauvegarde pour le MFP
   ANC_IERB  DS.B      1                    "
   ANC_IMRA  DS.B      1                    "
   ANC_IMRB  DS.B      1                    "
   ANC_VR    DS.B      1                    "


   Je  vais  simplement  vous  d�crire les registres IERA, IMRA, IPRA
   etc... du MFP. Pour de plus amples d�tails, consultez la Bible ST,
   le  Livre du D�veloppeur ou la doc officielle ATARI (l'id�al!), le
   but de ces cours n'�tant pas d'�tre une recopie des infos que vous
   pouvez trouver autre part.

   Tout d'abord les 16 niveaux du MFP sont class�s en 2 groupes. Le A
   concerne  les niveaux 15 � 8 et le B les niveaux 7 � 0. Attention,
   ici A et B n'ont rien � voir avec les Timers A et B!!! Pour chaque
   groupe  (A  ou B) on trouve une s�rie de registres. Dans chacun de
   ces  registres  les  interruptions  sont  repr�sent�es par un bit.
   Voyons ces registres:

   IERA ($FFFFFA07) et IERB ($FFFFFA09)
   Interrupt Enable Register A (ou B)
   En  pla�ant  �  0 le  bit  correspondant  �  une  interruption, on
   interdit  celle-ci. Elle ne sera aucunement prise en compte par le
   MFP.

   IPRA ($FFFFFA0B) et IPRB ($FFFFFA0D)
   Interrupt Pending Register A (ou B)
   Lorsqu'une  interruption  arrive, le MFP met � 1 le bit correspon-
   dant � celle-ci dans IPRA (ou IPRB). Cela signale qu'une interrup-
   tion  est  en attente. En effet � cause du syst�me de priorit�, il
   est  possible  qu'une interruption de haut niveau soit en cours et
   que pendant ce temps une interruption plus faible se d�clenche. Il
   faut  donc  noter cette volont� de se d�clencher, afin qu'une fois
   fini le traitement de l'interruption prioritaire, le traitement de
   la plus faible puisse s'effectuer.

   Il  est  bien s�r possible de lire IPRA et IPRB afin de d�terminer
   si une interruption est en attente.  Il est aussi possible de met-
   tre � 0 le bit d'une interruption en attente, afin que celle-ci ne
   se d�clenche pas. Par contre, le fait de mettre un bit � 1 dans ce
   registre  n'a  aucun  effet.  On  se  rend  ainsi  compte  que les
   possiblit�s  deviennent  d�j�  assez nombreuses.  Une interruption
   peut  ainsi  en  scruter  une  autre  de  fa�on � obtenir un cycle
   irr�gulier d'interruption.

   Il  est en plus possible de laisser une interruption se d�clencher
   juste  'pour  voir'. ceci  peut se faire en la laissant valide par
   IERA mais en la masquant avec IMRA.


   IMRA ($FFFFFA13) et IMRB ($FFFFFA15)
   Interrupt Mask Register A (et B)

   Le masquage emp�che une interruption de se d�clencher bien qu'elle
   soit autoris�e par IERA ou IERB. Ceci peut permettre par exemple �
   une  interruption  de niveau 4 de ne pas �tre g�n�e par une inter-
   ruption de niveau 6.  Pour cela, il lui suffit de masquer celle-ci
   durant son ex�cution.


   VR ($FFFFFA17)
   Vector Register

   Cet  octet  est  un peu sp�cial. Dans notre cas seul le bit 3 nous
   int�resse, les  autres servant au MFP � coder le num�ro de vecteur
   qui  correspond  � la source d'interruption. Le bit 3 sert � indi-
   quer  au MFP s'il est en mode Software End of Interrupt ou en mode
   Automatic  End of Interrupt (mode par d�faut). Voyons les explica-
   tions avec les registres suivants:


   ISRA ($FFFFFA0F) et ISRB ($FFFFFA11)
   Interrupt in Service Register A (ou B)

   Un  bit � 1 indique que l'interruption est en cours de traitement.
   Si  nous  sommes en mode Software End of Interrupt, c'est � la fin
   de  notre  routine  en interruption que nous devons indiquer, nous
   m�me  que notre routine est finie. Pour cela il faut mettre � 0 le
   bit  correspondant � notre interruption, dans ISRA (ou ISRB). Tant
   que  ce bit est � 1,  les interruptions moins prioritaires ne peu-
   vent pas venir nous d�ranger. Par contre, d�s que le traitement de
   notre  interruption commence,  son bit IPRA est remis automatique-
   ment  � 0, et pendant le traitement de cette interruption, une au-
   tre  de m�me niveau peut tr�s bien intervenir.  Le bit d'IPRA sera
   donc  remis � 1,  mais cette nouvelle interruption ne sera trait�e
   que lorsque la premi�re aura remise le bit ISRA � 0.

   D'un  autre  c�t�, si  nous sommes en mode Automatic End of Inter-
   rupt, d�s  que  notre routine s'ex�cute, le MFP met, bien s�r, son
   bit d'IPRA � 0  (puisque l'interrupt n'est plus en attente),  mais
   met  �galement  son bit ISRA � 0 ! Il est alors possible que d'au-
   tres  interruptions plus faibles viennent interrompre la premi�re,
   m�me si elle n'est pas termin�e.

   Vous  voyez qu'avec tout ceci, il est possible de jongler all�gre-
   ment en envisageant les cas les plus tordus!!!  Concernant les ti-
   mers  A, B, C  et  D, voici  juste  les adresses permettant de les
   adresser, les  informations  fournies dans la bible ou le livre du
   d�veloppeur  �tant  largement suffisante. Si par hasard vous �tiez
   avides  d'informations sur ce circuit, pr�cipitez vous chez un li-
   braire  sp�cialis�  dans la "litt�rature" �lectronique et demandez
   un ouvrage sur le MK68901. Passez aussi chez le pharmacien prendre
   quelques tubes d'aspirine....

   Pour  terminer ces cours d'assembleur, voici une petite bibliogra-
   phie afin que vous puissiez diriger vos recherches vers les sujets
   qui vous int�ressent.

   Le  Langage  Machine  sur  ST (Ed. Micro App). Assez inutile comme
   bouquin! Tr�s  tr�s peu d'informations, non vraiment, ce n'est pas
   un bon achat.

   La  bible  ST (Ed. Micro-App). Devenue assez introuvable, dommage!
   Pas  mal de bonne infos, bien suffisant dans la plupart des cas. A
   �t� remplac� par le Livre du D�veloppeur.

   Trucs  et  Astuces  (Ed. Micro-App). A �viter absolument! Les pro-
   grammes  r�alis�s en suivant ces conseils seront s�rement incompa-
   tibles d�s qu'il y aura changement de TOS.

   Le  Livre  du  D�veloppeur  (Tome  1 et 2) (Ed. Micro App) Si vous
   n'avez  pas acc�s � la doc. pour les d�veloppeurs ayant l'agr�ment
   Atari, c'est le bouquin qu'il vous faut. On peut regretter les di-
   zaines de pages contenant le listing du BIOS des STF et les autres
   dizaines  de  pages contenant le BIOS du M�ga ST. Cela fait un peu
   remplissage: soit  on  a le niveau en assembleur pour y comprendre
   quelque  chose  et  alors  on a le niveau pour suivre le BIOS avec
   MONST, soit, de  toute fa�on, on n'y comprend rien et ce n'est pas
   parce qu'on a le listing sous les yeux que cela va changer quelque
   chose. Enfin, c'est  mon avis, et comme, en plus, le listing n'est
   valable  que  pour  les  mod�les  cit�s, si  vous vous y fiez pour
   "d�couvrir" de nouvelles adresses vous risquez fort d'�tre surpris
   avec les machines plus r�centes ...

   Le  livre  du GEM sur Atari ST (Ed. Micro App). Si vous pensez ap-
   prendre  �  programmer GEM avec �a, vous courrez � la catastrophe.
   Le  probl�me  du  GEM  c'est  qu'il est utilisable en assembleur �
   condition  de  se  servir  des  macros, sinon  c'est beaucoup trop
   lourd. Or  dans  un  livre  commercialis�, il est impossible de se
   borner  �  un  seul assembleur. Ceci fait que les auteurs ont tout
   d�cortiqu� avec les appels directs au TRAP #2, et que cela devient
   totalement  incompr�hensible  pour  le  d�butant. Par  contre, les
   fonctions  y  sont relativement bien d�taill�es, et, si vous savez
   d�j�  ce  que  vous cherchez, ce livre sera un bon outil. On peut,
   simplement, regretter  quelques absence comme les fonctions Escape
   du  GEM  et  quelques fonctions de l'AES. A noter que ce livre est
   repris � 99% dans le Livre du D�veloppeur.

   Doc  GFA  3.00. L�, c'est le bon truc! En effet dans les derni�res
   pages de la doc de ce BASIC, vous trouverez la liste de toutes les
   fonctions  GEMDOS, BIOS et XBIOS (il manque la fonction GEMDOS $20
   permettant  de  passer  en  Superviseur, �tant  donn�  qu'elle est
   inaccessible  en GFA), les codes ASCII, les codes clavier et quel-
   ques  pages  avant, une  bonne  liste  des  fonctions AES. Je dois
   avouer  que j'ai photocopi� ces quelques pages et qu'elles me ser-
   vent  bien souvent: les informations sont suffisantes dans le plu-
   part  des cas, et surtout tr�s faciles � trouver, ce qui n'est pas
   le  cas par exemple du Livre du GEM qui ne comprend m�me pas d'in-
   dex des fonctions !!!

   A noter que certaines fonctions du GEM existent dans la biblioth�-
   que interne du GFA mais ne sont pas disponibles dans celle de DEV-
   PACK. C'est  le cas de Form_Button et Form_Keybd. Et c'est g�nant!
   En  effet au d�but Form_do n'existait pas. Les gens de Digital Re-
   search  ont  donc d�cid� de fabriquer de toutes pi�ces cette fonc-
   tion  �  partir  de  Form_Keybd  et Fomr_button, et ont diffus� le
   source en C. Au bout d'un moment, les programmeurs n'ont plus uti-
   lis�  que Form_Do et nous sommes tomb�s dans la routine de gestion
   de formulaires que nous connaissons actuellement.

   Si vous voulez faire votre propre Form_do, plus �volu� il "suffit"
   de  reprendre Form_Keybd et Form_button pour recr�er Form_do. Mal-
   heureusement  ces  deux fonctions sont tomb�es dans les oubliettes
   et pour les avoir pffuuuuuttt!!! 

   Vous voulez conna�tre leur opcode et les param�tres ? Facile comme
   tout! Si vous avez bien suivi ces cours, vous savez plein de chose
   sur le GEM (o� se place l'opcode d'une fonction, o� est inscrit le
   nombre  de param�tres etc... et bien vous lancez AMonst, puis vous
   faites un petit bout de GFA qui appelle Form_keybd en affichant au
   pr�alable  sur l'�cran l'adresse du tableau AES, et qui attend en-
   suite un appui sur une touche. Tout ceci se passe sous l'interpr�-
   teur  du  GFA bien s�r! D�s que vous �tes sur l'attente d'un appui
   touche, vous  d�clenchez  AMONST (shift+alternate+help) et hop, la
   grande  recherche  commence. Vous faites de m�me avec Form_button,
   et  le tour est jou�. Courage, ce n'est pas bien dur, et cela fait
   un excellent exercice!

   Mise en oeuvre du 68000 (Ed. Sybex) Excellent bouquin, traitant du
   68000 en  g�n�ral. Ne  vous  attendez pas � y trouver des adresses
   syst�me  pour  votre  ST.  On parle, ici, cycles d'horloges, modes
   d'adressage etc...

   Implantation  des  fonctions  usuelles  en  68000 (Ed. Masson, par
   Fran�ois  BRET). Comment  faire des sinus, des cosinus, des trans-
   form�es  de  Fourier etc.. . N'est pas vendu avec l'aspirine ni le
   caf�, mais  s'av�re  indispensable, si vous vous attaquez aux pro-
   bl�mes  de  trigo  en  ASM. Seulement 191Frs, une mis�re! (Merci �
   Shizuka de m'avoir fourni la r�f�rence de cet ouvrage!!!!!)

   STATION INFORMATIQUE 2 rue Pi�mont�si 75018 PARIS
   t�l:(1)42.55.14.26
   Excellent  catalogue  de Dom-Pubs. Avant de chercher � pirater des
   softs  divers  sans en avoir la doc, jetez un coup d'oeil sur leur
   catalogue. De  nombreuses petites choses sont � y d�couvrir (sour-
   ces  divers  en ASM, utilitaires de d�buggage etc...) Si vous �tes
   un adepte de l'�mulation Mac, dans les dom-pub de cette machine se
   trouve  le  pack Cyclan, un assembleur Mac avec son �diteur etc...
   Bien  sympa pour d�couvrir cette autre machine, �quip�e elle aussi
   d'un 68000.

   Les  ST  Mags fourmillaient �galement de trucs divers, en tout cas
   surtout dans les anciens num�ros � mon avis...

   Voici une petite liste non-limitative...

   Int�gration d'une ressource en GFA (46)
   Form Exdo (46)
   Echantillons sur ST  (27,28,29,30,31,35) (En  GFA avec de l'assem-
   bleur, mais le GFA on ne le sent qu'un tout petit peu...)

   Scrolling  en GFA (31 � 45 sauf num�ro 37 et 44) M�me remarque que
   pour les digits!!!

   Gestion des disquettes en GFA (13,14,15,16)

   Programmer  GEM  (6 � 30 environ) Super! Tout en C mais les appels
   sont  les  m�mes et la syntaxe identique � celle de la biblio DEV-
   PACK! Faites vite une recherche de vos vieux num�ros de ST Mag car
   pour apprendre le GEM c'est extra!!!

   Animation en 3D (45,46,49) Pour le moment le dernier article n'est
   pas  sorti... Esp�rons  que cela ne fera pas comme le listing per-
   mettant  de  booter  sur une cartouche....Bien clair, sympa, id�al
   pour commencer la 3D.

   Pour les coprocesseurs, 2 articles dans les num�ros 31 et 32.

   Dans  le d�funt First (1ST) il y avait quelques trucs sympa sur le
   MIDI, le  d�compactage des images DEGAS, la cr�ation de ram-disque
   et de spooler d'imprimante.

   Atari Mag revient en force en ce moment.

   Tr�s bon articles sur la programmation graphique du STE. Cela per-
   met  de se faire une id�e sur le BLITTER, les 4096 couleurs etc...
   C'est en BASIC mais la traduction est facile. (21,22).

   Etant dans la confidence, je peux vous informer �galement que dans
   les  prochains num�ros d'Atari Mag vous trouverez des articles sur
   diff�rents  sujets  avec  sources  en ASM et en GFA et que ce type
   d'article devrait durer pas mal de temps.

   Bon, en  r�sum�, achetez tous les mois ST Mag et Atari Mag. Si be-
   soin  est, achetez les � plusieurs, mais faire un gros tas de tou-
   tes  ces  revues car c'est une mine d'information importante. Bien
   souvent  les  questions qui sont pos�es sur RTEL par exemple trou-
   vent  leur  r�ponse  dans  une lecture des vieux num�ros! Quelques
   bons  classeurs, des intercalaires et vous aurez une documentation
   �norme pour pas tr�s cher.

   Je  terminerai ces cours en renouvelant l'avertissement concernant
   la  chasse  aux  listings! Il est pr�f�rable d'avoir quelques bou-
   quins  et  des notes sur papier plut�t que 10 m�gas de sources au-
   quel  on ne comprend pas grand chose, et qui de, toute fa�on, sont
   assez  malcommodes  �  consulter  par  rapport  � des informations
   �crites!

   Pour  ce  qui  est  des  programmes  assez gros, pr�parez quelques
   feuilles  �  c�t� de vous, pour y noter les noms des routines, des
   labels, des  variables etc... vous vous rendrez vite compte que la
   principale  difficult� de l'assembleur r�side dans le fait que les
   listings sont tr�s tr�s longs et qu'il est difficile de s'y d�pla-
   cer  pour  chercher  quelque  chose. Programmez  proprement, soyez
   clairs et �vitez si possible les bidouilles. Commentez abondamment
   vos  sources car dans 6 mois lorsqu'il faudra faire une petite mo-
   dification, vous  verrez la diff�rence entre les sources clairs et
   les autres!

   Allez, je  vous quitte en esp�rant que ces cours vous auront int�-
   ress�s  et qu'ils vous auront donn� go�t � l'assembleur! N'oubliez
   pas  que  vous  pouvez toujours me contacter sur le 3614 RTEL1 (ou
   RTEL2) en bal FEROCE LAPIN, et qu'il y a sur ce serveur une rubri-
   que  pour  l'assembleur 68000 sur ST, MAC ou AMIGA. Pour acc�der �
   cette rubrique, tapez *MOT et ENVOI. A bient�t!

Back to ASM_Tutorial