ASSEMBLEUR

 

 
COURS D'ASM 68000
(par le Féroce Lapin)

retour au VOLUME 2

            
******************************************************************
*                                                                *
*             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!