COURS210.TXT
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