COURS210.TXT/fr

From Atari Wiki
Revision as of 11:44, 24 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