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