COURS207.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 7 *
******************************************************************
Inutile de vous complimenter inutilement, mais si vous avez suivi
bien tranquillement les cours depuis le d‚but, si vous avez pris
soin de vous exercer avec des petites applications, vous devez
d‚j… avoir un niveau correct en assembleur! N'oubliez donc pas les
commandements principaux: bien commenter les programmes, r‚fl‚chir
simplement, utiliser papier et crayon etc... Plus vous avancerez
et plus vos listings seront longs, et plus une programmation
propre sera indispensable!!! De mˆme cherchez par vous mˆme avant
de poser dŠs questions, cela ‚vitera bien souvent de demander
n'importe quoi...
Dans ce cours ainsi que dans les 2 suivants, nous aborderons2
sujets tabous: la Ligne A et le GEM.
Concernant ces 2 sujets, les critiques vont bon train: la ligne A
c'est pas commode, c'est nul et le GEM, pouah!!! AprŠs pas mal de
temps pass‚ … discuter et … ‚couter les opinions de plusieurs
personnes, je suis arriv‚ … la conclusion suivante: Tout d'abord
les critiqueurs sont rarement les programmeurs Ligne A ou GEM.
Ensuite, imaginons un cours instant notre ST sans GEM et pr‚parons
nous … faire un effort, GEM nous le rend bien! En dernier lieu je
dirais que ces cours sont destin‚s … faire de vous des
programmeurs et pas des bidouilleurs. Vous devez donc avoir
connaissances des possibilit‚s de la ligne A et de celles du GEM.
Ne pensez pas cependant trouver dans ces cours la totalit‚ des
commandes GEM. Ces cours sont destin‚s … levez un coin du voile,
et si possible … vous donnez de quoi continuer vos recherches.
En tout cas je peux vous assurer que la ligne A et le GEM ne sont
pas plus dur qu'autre choses (D'ailleurs y a t-il quelques chose
de dur en assembleur?????). Il y a ‚galement un avantage
non-n‚gligeable concernant la ligne A et surtout GEM: Jusqu'…
maintenant, nous avons utilis‚ des instructions assembleur 68000,
et il semblait ‚vident que dans un ouvrage sur le PASCAL, le BASIC
GFA ou le C, nous aurions eu du mal … trouver des pr‚cisions sur
l'instruction MOVEM.L par exemple ! Concernant la ligne A, mais
surtout GEM, nous allons utiliser principalement des macros (vous
voyez pourquoi ce sujet a ‚t‚ abord‚ avant!). Or ces macros ont
chacune un nom, et ce nom est un nom 'GEM' et non pas relatif …
tel ou tel assembleur!! Ainsi ouvrir une fenˆtre pour la faire
apparaŒtre sur l'‚cran, se fera avec une macro nomm‚e WIND_OPEN.
L'avantage c'est que cette fonction GEM est utilis‚e en Pascal, en
C etc... Pour cette raison, vous pouvez chercher de la documen-
tation sur GEM quelque soit le langage utilis‚ dans cette
documentation. Dans 99% des cas ce sera le C.
Pour ma part mes connaissances en C sont r‚duites et pourtant, une
grande partie des documents GEM avec lesquels je travaille, fait
r‚f‚rence … ce langage. Surtout ne vous contentez pas des ouvrages
traitant du GEM en assembleur car vous serez bien vite d‚go–t‚!!
Idem pour la ligne A, les paramŠtres n‚cessaires ne d‚pendent pas
du langage!!
Un autre avantage trŠs important, surtout pour le GEM, concerne
les formats de donn‚es. Ayant la chance de pouvoir travailler sur
des Macs, de nombreuses choses y rendent la manipulation des pro-
grammes plus ais‚e que sur ST. Par exemple on charge un logiciel
de dessin, on fait un petit gribouillis, ensuite on charge
n'importe quel traitement de texte et hop on y colle notre
gribouillis. Sur ST il y a 99% de chance que le format de l'un ne
soit pas reconnu par l'autre! Si on jette un coup d'oeil vers le
monde PC, on se rend compte qu'il n'existe pas de format normalis‚
pour ce type de machine, et que c'est l'anarchie … ce niveau. De
tels formats normalis‚s existent sur Mac, ils sont respect‚s, et
les rares softs ne se pliant pas … cette norme sont vou‚s … un
formatage rapide de la disquette!!! Le comble c'est que sur ST de
telles normes de formats existent, mais elles ne sont pas
respect‚es....
En fait l'utilisation de la ligne A et surtout celle du GEM,
doivent nous amener … une r‚flexion plus globale sur ce qu'est la
programmation. Raymond Loewy (1893-1986), que l'on peut consid‚rer
comme le pŠre du design industriel, a eu beaucoup de r‚flexions
sur ce qu'il faut donner au consommateur. Dans notre langage nous
parlons d'utilisateur de softs mais c'est en fait de la mˆme
personne qu'il s'agit. Comparons un soft Mac et un soft ST.
L'‚cran est allum‚, le soft est charg‚, et la seule chose que nous
faisons, c'est promener notre oeil sur les ic“nes et la souris
dans la barre de menu. Difficile de juger des qualit‚s respectives
des 2 softs sans aller plus loin. Pourtant, la simple disposition
des entr‚es dans les menus, le positionnement des ic“nes, le
faible nombre de celles-ci mais en mˆme temps leur impression de
clart‚ donne dans 99% des cas l'avantage au Mac Intosh. Sur le ST,
les menus d‚gueulent de partout (surtout dans les softs r‚cents),
et les ic“nes recouvrent un bureau qui n'en demande pas tant! Ceci
est … rapprocher d'une r‚flexion de Raymond Loewy que je vous
demande de m‚diter: "Un v‚hicule a‚rodynamique bien dessin‚ donne
une impression de vitesse, mˆme quand il est arrˆt‚". Inutile donc
d'en rajouter … la pelle, les 14524874 fonctions du softs ST sont
simplement des d‚lires de programmeurs alors que les 20 fonctions
du softs Mac ont ‚t‚ pens‚es pour l'utilisateur. Lorsque Raymond
Loewy a ‚t‚ demand‚ pour faire le nouveau logo de la soci‚t‚
Shell, ainsi que tout le design des stations services, il a
simplement dit … ses employeurs: "Vos clients, ce ne sont pas les
automobiles, ce sont les automobilistes". Evident, sauf qu'…
l'‚poque la Shell vendait pour les automobiles, sans s'en rendre
compte!
Eh bien, sur ST les programmeurs programment pour le ST (ou pour
eux!) mais trŠs rarement pour les utilisateurs...
Tout ceci ‚tant dit, nous allons aborder maintenant la ligne A, en
esp‚rant cependant que cela vous fera r‚fl‚chir lorsque vous
concevrez vos programmes!
LA LIGNE A
Doc officielle Atari, Chapitre Ligne A: Bon descriptif des
diff‚rentes fonctions, assez brut mais efficace.
Bible ST: Bon descriptif des fonctions Livre du d‚veloppeur: idem
mais en plus descriptif des donn‚es dont on peut d‚duire l'empla-
cement avec la ligne A.
Doc du GFA 3.00: Assez ‚trange. Si les fonctions ligne A du GFA
sont appel‚es de la mˆme maniŠre qu'en assembleur, le concepteur
de ce langage a r‚ussi … 'inventer' des fonctions en clamant bien
haut qu'il s'agit de fonction Ligne A !!! Peut-ˆtre pour que le
GFA soit encore moins compatible... A ce propos, il semblerait que
la ligne A ne soit plus officiellement support‚e par le TT.... A
voir...
Dans le premier kilo de m‚moire de notre machine, nous avons un
bon paquet d'adresses utilis‚es par le microprocesseur. Nous avons
pass‚ pas mal de temps … ‚plucher le principe de fonctionnement de
ce kilo, qui sert au 68000 de 'relais' afin qu'il trouve l'adresse
de la routine qu'il doit ex‚cuter pour telle ou telle raison.
J'espŠre de tout coeur que vous avez parfaitement assimil‚ ce
principe car pour la ligne A, le GEM, les interruptions etc...
c'est encore et toujours ce mˆme principe qui est appliqu‚ !
Prenez la feuille qui vous a ‚t‚ fournie avec les cours de la
s‚rie 1, et qui montre ce premier kilo. Le vecteur 10 (adresse 40
en d‚cimal et $28 en hexa.) possŠde comme 'description': ‚mulateur
ligne 1010. Convertissons 1010 en hexad‚cimal, nous obtenons....
$A ! PremiŠre constatation, si ce vecteur est dans le premier kilo
de m‚moire, c'est donc que l'‚mulateur ligne A n'est pas une
particularit‚ du ST mais bien du 68000. Ces vecteurs vont donc
nous donner accŠs … une ou des routines, en utilisant toujours le
mˆme principe:
Ordre au 68000, celui-ci analyse l'ordre, saute dans le premier
kilo de m‚moire … l'adresse correspondant … cet ordre, y trouve
l'adresse de la routine … ex‚cuter, il ne lui reste plus qu'…
sauter … celle-ci.
Comment donc appeler les routines accessibles par l'interm‚diaire
de l'‚mulateur ligne A, que font ces routines, et comment 'discu-
ter' avec elles, c'est … dire comment leur passer d'‚ventuels pa-
ramŠtres ?
Dans le cas de l'Atari ST, les routines accessibles par le biais
de l'‚mulateur ligne A sont des routines graphiques. Ces routines
sont les routines graphiques de base de notre machine. Elles sont
utilis‚es par le GEM. Leur accŠs est rustique et mal commode mais
la commodit‚ n'est pas le but recherch‚. G‚n‚ralement en assem-
bleur on recherche souvent … faire soit mˆme ses routines (c'est
toujours mieux que celles des copains) Il faut cependant noter que
dans beaucoup de cas, une bonne utilisation de la Ligne A ou du
Gem est amplement suffisante. De plus, c'est bien souvent une
bonne connaissance de ces interfaces qui vous permettra d'am‚-
liorer vos routines. Une raison suppl‚mentaire r‚side dans la
facilit‚ de mise en oeuvre et dans la facilit‚ d'am‚lioration. Il
est tout a fait possible que la soci‚t‚ pour laquelle vous avez
r‚alis‚ un soft, vous demande la version 2.00 plusieurs ann‚es
aprŠs la version 1.00. Les infƒmes bidouilles pour gagner 3 cycles
d'horloges vous semblerons alors bien moins claires qu'un appel
classique … la ligne A, peut ˆtre un peu plus lent. Mais l…
encore, il faut penser en se mettant … la place de l'utilisateur !
Ainsi SPECTRUM 512 est un excellent soft pens‚ avec un esprit
programmeur et le r‚sultat c'est que tout le monde utilise
DEGAS...
Les routines ligne A sont donc des routines graphiques de base.
Elles sont au nombre de 16, et sont num‚rot‚s de 0 … 15. Voici
leur fonctions par num‚ro:
0 = initialisation
1 = placer un pixel … une couleur donn‚e
2 = demander la couleur d'un pixel
3 = trac‚ d'une ligne quelconque
4 = trac‚ d'un ligne horizontale
5 = trac‚ d'un rectangle rempli
6 = remplissage d'une ligne d'un polygone
7 = transfert d'un bloc de bit
8 = transfert de matrice de caractŠre
9 = visualisation de la souris
10 = non-visualisation de la souris
11 = transformation de la forme de la souris
12 =effacement de sprite
13 = affichage de sprite
14 = copie de zone (FDB)
15 = remplissage de zone
Nous avons r‚pondu … la premiŠre question: "qu'est ce que ‡a
fait?" Nous pouvons passer … la suivante :"comment l'appelle-t-on
?" Un appel ligne A se fait … l'aide d'un word. Le poids faible de
ce word contient le num‚ro de la fonction, et le poids fort est
‚quivalent … $A (d'o— le nom ligne A). Ainsi pour appeler la
fonction 3, on utilisera le word $A003. Mais o— le placer? Et bien
tout simplement dans notre programme ! Pour pouvoir le noter tel
quel nous le ferons pr‚c‚der de DC.W de fa‡on … ce que DEVPACK ne
cherche pas … transformer ceci en code 68000 puisqu'aucune
mn‚monique ne correspond … ce nombre! Pour appeler la fonction 1
de la ligne A nous mettrons donc dans notre programme:
DC.W $A001
Note: si cela vous int‚resse, vous pouvez suivre les appels
ligne A de la mˆme maniŠre que les appels Trap, sous MONST, en
tout cas si vous avez une des derniŠres versions de MONST.
Question suivante: comment passer des paramŠtres. En effet si nous
voulons utiliser par exemple la fonction 2 pour connaŒtre la
couleur d'un pixel, il faudra bien fournir les coordonn‚es de
celui-ci. Nous avons vu avec Gemdos, Bios et Xbios que les
paramŠtres ‚taient pass‚s par la pile. Nous avons ‚galement
utilis‚ ce principe dans nos propres routines. Empilage, saut … la
routine (par BSR ou TRAP) puis correction de la pile. Concernant
la ligne A et le GEM, la pile n'est pas utilis‚e. En effet, la
ligne A et le GEM utilisent un systŠme de tableau. Nous avons
‚tudi‚ les tableaux et nous avons vu comment lire dans ceux-ci. Et
bien c'est un peu ce principe qui va ˆtre utilis‚. Les paramŠtres,
parfois trŠs nombreux, vont ˆtre plac‚s dans un ou plusieurs
tableaux, … des endroits pr‚cis, avant l'appel de la fonction
choisie. Celle-ci ira chercher les paramŠtres n‚cessaires et
retournera ensuite ses r‚sultats ‚galement dans des tableaux.
L'avantage du systŠme des macros devient ‚vident: si pour des
appels gemdos, bios et xbios il suffit d'empiler (le nombre de
paramŠtres n'est pas ‚norme et le principe et toujours le mˆme),
il faut en revanche une sacr‚ dose de m‚moire pour se rappeler
dans quel tableau et surtout o— dans ce tableau doivent ˆtre
d‚pos‚s les paramŠtres de chaque fonction. Malheureusement dans la
bibliothŠque de Devpack, il n'y a pas de macros pour la ligne A.
Nous allons donc d‚tailler quelques fonctions '… la main'. Etant
donn‚ que vous avez sous la main le cours sur les macros, je ne
peux que vous conseiller de r‚aliser les macros correspondantes …
ces fonctions. Nous allons tout d'abord tracer un rectangle sur
l'‚cran. Voir listing num‚ro 5.
Tout d'abord inclusion de la routine de d‚marrage des programmes,
petit message de pr‚sentation en effa‡ant l'‚cran au passage.
Ensuite initialisation de la ligne A. En retour, nous avons en A0
l'adresse du tableau que nous allons remplir avec les paramŠtres.
Ceux-ci sont assez nombreux et doivent ˆtre pass‚s … des endroits
bien pr‚cis. Certains demandent une petite explication: Le
clipping. C'est un systŠme bien utile, que nous retrouverons dans
le GEM. Par exemple nous voulons afficher sur l'‚cran une image,
mais celle-ci ne doit apparaŒtre que dans un petit rectangle. Il
va donc falloir se compliquer s‚rieusement la tache afin e de ne
pas afficher toute l'image. Au lieu de cela nous pouvons utiliser
le clipping. Cela consistera … donner les coordonn‚es du rectangle
dans lequel nous voulons que l'image apparaisse, et … dire que
c'est le rectangle de clipping. Ensuite il reste … afficher
l'image sur tout l'‚cran et elle n'apparaŒtra que dans le
rectangle, le reste de l'‚cran ‚tant 'clipp‚'. La encore, il est
bien ‚vident que cela ralenti l'affichage, nous avons en effet
affich‚ tout une image pour n'en voir qu'un bout, et de plus le
systŠme a ‚t‚ oblig‚ de tester sans arrˆt pour savoir s'il devait
nous montrer ce pixel, puis l'autre etc... Cette m‚thode est
pourtant hyper-utile et nous verrons cela de nombreuses fois.
Le type d'affichage. C'est un descripteur permettant de savoir
comment va se faire l'affichage. 0= mode remplacement, 1=mode
transparent, 2=mo deXOR, 3=transparent inverse. Essayer de faire
2e rectangle qui se recouvre et observez le r‚sultat en faisant
varier les modes.
Nous allons maintenant utiliser une autre fonction, qui demande la
couleur d'un pixel. Dans le cas du tra‡age d'un rectangle nous
avons utilis‚ la tableau dont l'adresse ‚tait en A0 pour passer
les paramŠtres. Pour la demande de couleur d'un pixel et pour le
coloriage d'un pixel, nous allons utiliser d'autres tableaux.Alors
l…, suivez bien parce que les tableaux que nous allons d‚crire
maintenant sont ‚galement utilis‚s pas le GEM? nous allons donc
faire d'une pierre deux coups !!!!!
Tout comme le GEM donc, la ligne A utilise des tableaux, destin‚s
chacun … recevoir ou … rendre des choses diff‚rentes. Le premier
tableau, c'est le tableau CONTRL (Control) Il re‡oit le num‚ro de
la fonction et quelques autres paramŠtres. Le second c'est le
tableau INT_IN. Cela signifie Integer In, c'est donc un tableau
qui va recevoir des entiers (un nombre entier c'est en Anglais un
integer) Le troisiŠme tableau c'est PTSIN (Points In). C'est un
tableau destin‚ … recevoir les coordonn‚es des points ou bien des
dimensions. Disons que ce tableau va recevoir par exemple les
coordonn‚es X et Y pour le centre d'un cercle, mais aussi son
rayon. Il rŠgne une certaine confusion dans les explications sur
ce tableau. En effet il re‡oit entre autre des coordonn‚es, qui
vont souvent par couple (X et obligatoirement Y), ce qui fait que
bien souvent on dit par exemple "il faut mettre 1 donn‚e dans
PTSIN" alors qu'en fait il faut mettre un couple de donn‚es! Le
quatriŠme tableau c'est INTOUT. C'est la mˆme chose que INT_IN
sauf que c'est en sortie, pour les r‚sultats. Vous vous en doutez
maintenant, le dernier tableau, c'est PTSOUT!!!!
Jetons maintenant un coup d'oeil sur le listing num‚ro 6.Un peu de
r‚flexion et cela ne doit pas vous poser de problŠme. Essayez
cependant de refaire ce listing avec des boucles parce qu'avec le
coloriage d'un seul pixel, c'est bien sur un peu limit‚... Juste
une chose, essayer de bien imaginer ce qui se passe avec les
tableaux Contrl, Int_in, Ptsin, Intout et Ptsout parce dans le
chapitre suivant il va y en avoir beaucoup.....
Bon maintenant que vous savez tracer un rectangle, vous pouvez
‚galement tracer des lignes, demander la couleur d'un pixel etc...
La fonction la plus d‚licate est … mon avis celle qui sert pour
l'affichage de texte. Elle permet cependant des effets assez
int‚ressants (‚criture avec diff‚rents styles).
Pour utiliser maintenant la ligne A, reportez vous aux descriptifs
donn‚s dans la Bible et essayez! 2e remarque cependant: avec le
GEM et la ligne A nous abordons en quelque sorte le concept du
multi-utilisateur/multi-machines. En effet le GEM utilise beaucoup
la ligne A et partage donc avec lui les tableaux. Or, votre
programme peut trŠs bien ˆtre en train de tracer de jolis
rectangles lorsqu'il vient … l'utilisateur l'id‚e de promener sa
souris dans le menu d‚roulant... Appel … GEM, modification des
tableaux communs au GEM et … la ligne A, et au retour adieu les
rectangles...
L… encore prudence et r‚flexion pour se mettre … la place de
l'utilisateur...
Seconde remarque, les adresses fournies par la ligne A.
Nous pouvons prendre comme exemple les fontes. O— se trouvent-
elles? Avec MONST, en se balladant en m‚moire, il sera toujours
possible de les trouver. Malheureusement elles ne sont pas au mˆme
endroit dans toutes les machines. Ce n'est pas grave, il suffit de
passer par la ligne A. En effet la fonction $A000 permet
d'initialiser mais en grande partie cela ne fait que nous fournir
des adresses. Grƒce … celles-ci nous pouvons en d‚duire de trŠs
nombreuses choses (emplacement des fontes entre autre). L… encore,
il est pr‚f‚rable de passer par DC.W $A000 puis de faire des
d‚calage pour trouver ce qui nous int‚resse. Le petit rigolo qui
se vante d'avoir trouv‚ l'adresse cach‚e qui donne les fontes se
rendra bien vite compte que cela ne marche pas tout le temps alors
qu'avec la ligne A, c'est moins frime mais c'est s–r!
Pour l'utilisation de la ligne A, le descriptif des fonctions dans
la bible est suffisant. Commencez par les rectangles, les lignes,
placez des points o— demander leur couleurs etc... Voici un
exemple qui a ‚t‚ dans les premiers que j'ai r‚alis‚ avec la ligne
A: Affichage d'un petit texte en haut … gauche (environ 5 lignes
de 20 caractŠres). A l'aide d'un boucle, on demande la couleur des
pixels, et on recolorie les pixels sur la droite de l'‚cran et de
fa‡on … ce que le texte apparaissent verticalement.
Pour ce qui est de d‚terminer l'emplacement de certaines donn‚es
grƒce … un saut dans les adresses d'initialisation ligne A, la
bible est un peu silencieuse l…-dessus alors que le Livre du
D‚veloppeur chez Micro-App est plus fourni.
Conseil de derniŠre minute: faites beaucoup d'exercices avec la
ligne A et surtout faites vous une bibliothŠque de Macro pour ses
fonctions.
Back to ASM_Tutorial