COURS210.TXT/fr
******************************************************************
* *
* 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