Initiation à lassembleur 6809
Cours n°11
Nous allons maintenant étudier pour exemple une entrée du moniteur.
La mémoire Moniteur, logée en ROM, contient plusieurs programmes pouvant faciliter
une opération pour le programmeur : opération sur LEP, lecteur de disquettes,
tracé dun segment de droite, dun point, lecture du crayon optique, etc...
Procurez-vous, pour les MO, le guide du MO5 aux éditions Cedic Nathan ainsi
que, pour les TO comme pour les MO, le «Manuel de lassembleur 6809 du
TO7/TO7-70 » de Michel Weissgerber dans la même édition. Outre tous les
détails sur les routines Moniteur des TO, ce dernier vous donnera aussi le mode
demploi du programme ASSEMBLER de MicroSoft, un chapitre très complet sur les
types dadressages, les registres programmables du 6809, le codage et le tableau
des instructions assembleur incluant leur vitesse dexécution et leur effet sur
le registre condition CC. Un ouvrage indispensable pour tout programmeur en
assembleur.
Attardons-nous par exemple sur le point dentrée pour
laffichage dun segment au chapitre « 7.2 tracé dun segment de
droite » du manuel :
Pour les MO:
* Code du point dentrée : 0EH pour un JSR, 8EH pour un JMP
* paramètres dentrée :
- registres 6809 X et Y
- registres PLOTX(2032H-2033H), PLOTY (2034H-2035H), FORME (2029H), COLOUR (202BH),
CHDRAW(2036H)
* paramètres de retour
registres PLOTX (2032H-2033H), PLOTY (2034H-2035H)
...et pour les TO :
* Adresse du point dentrée : DRAW$ (E80CH)
* paramètres dentrée :
registres 6809 X et Y
registres PLOTX (603DH-603EH), PLOTY (603FH-6040H), CHDRAW
(6041H), FORME (6038H), COLOUR (603BH)
* paramètres de retour
registres PLOTX (603DH-603EH), PLOTY (603FH-6040H)
Vous remarquerez que les registres ont un nom identique, même sils sont adressés
différemment, ce qui permet, éventuellement, une adaptation facile sur des
machines différentes. Les adresses sont suivies du caractère « H »,
qui signifie simplement que les valeurs sont exprimées en hexadécimal.
Sous Basic, le traçage dun segment suppose des
coordonnées de départ et darrivée, le choix du tracé en mode graphique ou
caractère et la couleur. Toutes ces options sont aussi gérées par la routine
moniteur de tracé.
Pour un mode de tracé graphique, le registre CHDRAW doit être mis à 0. Dans le cas
où il serait différent de 0, le tracé serait en mode caractère et CHDRAW
devrait donc contenir le code du caractère pour le traçage du segment.
La couleur du segment sera définie dans le registre FORME. Elle peut varier de 0 à
15 sil sagit dun segment de forme et de -1 à -16 sil sagit dun segment de
fond.
Pour les coordonnées, la gêne réside dans le fait que les registres X et Y sont
utilisés pour formuler les coordonnées darrivée. Pour afficher un segment, il
est donc nécessaire au préalable ou de fixer les coordonnées de départ dans les
registres PLOTX et PLOTY. Pour un écran normal en 40 colonnes, il faut veiller
à ce que les abscisses ne soient pas supérieures à 319 et les ordonnées à 199,
de telle façon que le segment ne saffiche pas hors de lécran.
En retour de routine moniteur, il est dit que les registres PLOTX et PLOTY seront
mis à jour, cest à dire quils contiendront alors respectivement labscisse et
lordonnée darrivée du segment. Ainsi, dans le cas du traçage de lignes
brisées, les coordonnées du point de départ du segment suivant seront déjà
mises à jour dans ces registres. Ce qui équivaut à leffet, sous Basic, de la
syntaxe « LINE-(X1,Y1) ».
Définissons la couleur et les coordonnées à laide de la commande « EQU ». Toutes
ces valeurs sont arbitraires. Vous les changerez à votre guise. Pour le
programme, la partie TO se trouve dans la colonne 2 et la partie MO dans la
colonne 3 :
COLOR EQU 4 Couleur choisie pour le segment
X0 EQU 20 Abscisse de départ à 20
Y0 EQU 10 Ordonnée de départ à 10
X1 EQU 300 Abscisse darrivée à 300
Y1 EQU 180 Ordonnée darrivée à 180
DEBUT | LDB #COLOR | LDB #COLOR | Fixe la couleur
| STB $6038 | STB $2029 | du tracé
| CLR $6041 | CLR $2036 Demande de tracé en mode graphique
| LDD #X0 | LDD #X0 | Fixe labscisse
| STD $603D | STD $2032 | de départ
| LDD #Y0 | LDD #Y0 | Fixe lordonnée
| STD $603F | STD $2034 | de départ
| LDX #X1 | LDX #X1 Charge abscisse darrivée
| LDY #Y1 | LDY #Y1 Charge ordonnée darrivée
| JSR $E80C | CALL $0E Trace le segment
| SWI | STOP Arrêt du programme
| END | END - Fin du programme -
Il est aussi possible de fixer les coordonnées de départ du segment en utilisant la routine daffichage dun point (chapitre 7.1
du manuel), ce qui donne, avec la même table dégalité :
DEBUT | LDB #COLOR | LDB #COLOR | Fixe la couleur
| STB $6038 | STB $2029 | du tracé
| CLR $6041 | CLR $2036 Demande de tracé en mode graphique
| LDX #X0 | LDX #X0 Charge labscisse de départ
| LDY #Y0 | LDY #Y0 Charge lordonnée de départ
| JSR $E80F | CALL $10 Affiche le point de départ
| LDX #X1 | LDX #X1 Charge abscisse darrivée
| LDY #Y1 | LDY #Y1 Charge ordonnée darrivée
| JSR $E80C | CALL $0E Trace le segment
| SWI | STOP Arrêt du programme
| END | END - Fin du programme -
Avant chaque appel aux routines moniteur, il faudra donc toujours veiller à la bonne
initialisation des registres. Dans le cas du tracé de segment, une coordonnée dépassant
les limites de lécran amènera le moniteur à tracer un segment à lextérieur de
lécran, ce qui provoquera un bug. En effet, les routines Moniteur ne sont pas
bridées comme les instructions sous Basic. Leur utilisation implique donc le
filtrage systématique des registres utilisés.
Pour information, le chapitre 5 dans « La conduite du TO7-70 » de
Gabriel GUILLON aux éditions Eyrolles passe en revue certains de ces points
dentrées. Comme son titre lindique, cet ouvrage nest malheureusement consacré
quau TO. Mais les routines Moniteur nécessitent les mêmes types de registres
et réagissent de la même manière sur MO.
Sur les TO7, TO7-70 et MO5, il faudra faire attention. Les registres assembleur (A,
B, X, Y, U,...) qui ne sont pas utilisés par la routine Moniteur peuvent
néanmoins être altérés ou même réinitialisés. Il est conseillé dempiler en
entrée de la routine les registres importants et de les dépiler en sortie. Ou
ne pas en avoir lusage.
Les Thomson de dernière génération (MO6/TO9/TO8/TO8D/TO9+) possèdent, quant à eux,
un ExtraMoniteur. Il sagit, comme son nom lindique, dune extension du
Moniteur, permettant lappel de routines plus riches. Son maniement offre au
programmeur averti de rapprocher des programmes Basic lefficacité - et la
concision - de ses programmes assembleur. On y trouve notamment les fonctions
CIRCLE, PAINT, NAME, DSKINI, OPEN, CLOSE, BOX, BOXF, etc...
La vitesse dexécution des routines Moniteur, vous vous en rendrez compte au
cours de vos pérégrinations, nest pas toujours optimale puisque gérant quelquefois
de multiples options. En attendant que vous maîtrisiez le langage assembleur
au point de vous attaquer aux programmes en ROM, étudiez donc les autres routines
proposées par le Moniteur. Vous comprendrez alors plus clairement comment
fonctionne votre Thomson.
|