COURS210.TXT

From AtariForumWiki
Revision as of 10:54, 22 December 2016 by >Zorro 2 (Created page with "<pre> ****************************************************************** * * * COURS D'ASSEMBL...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
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