COURS208.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 8 *
******************************************************************
J'espŠre que vous n'abordez pas ce cours imm‚diatement aprŠs avoir
fini de lire le pr‚c‚dent, mais, qu'au contraire, vous vous ˆtes
plong‚ dans la ligne A avec bonheur!
Nous allons maintenant aborder un sujet qui, je dois l'avouer,
m'effrayait un peu au d‚but: le GEM.
En fait, en programmation comme dans beaucoup d'autres sujets, on
se met … bosser simplement lorsqu'on y est oblig‚. Ainsi je
n'avais r‚alis‚ que de tout petits trucs avec le GEM en
assembleur, des trucs du genre ACCessoire de bureau qui permet de
mettre l'‚cran en inverse vid‚o, avec un choix dans une boŒte
d'alerte, avant de me trouver face au descriptif du soft que me
proposait une boŒte Parisienne. Je dois avouer que les premiers
jours ont ‚t‚ un peu durs, mais qu'… la longue j'ai d‚couvert que
le GEM est vraiment une chose fabuleuse, pas trŠs dur … maŒtriser
et que les possibilit‚s sont largement suffisantes pour combler de
bonheur tout programmeur digne de ce nom!!! J'espŠre donc que vous
prendrez autant de plaisir que moi … programmer sous GEM une fois
que vous aurez lu ce chapitre.
Tout d'abord les remarques qui se trouvent au d‚but du chapitre
sur la ligne A, m‚ritent d'ˆtre relus. Chercher donc de la docu-
mentation sans vous soucier du langage. Vous trouverez dans le
dernier cours de cette s‚rie une bibliographie dans laquelle j'ai
essay‚ de recenser divers articles bien sympas.
Le GEM est accessible par le TRAP #2, mais en fait grƒce … ce trap
nous avons accŠs … plusieurs parties du GEM, un peu comme si le
trap #1 d‚bouchait en mˆme temps sur GEMDOS et BIOS. Le GEM est,
en effet, compos‚ principalement de 2 parties:
l'AES et le VDI.
Les routines du VDI - VIRTUAL DEVICE INTERFACE -
s'occupent des graphismes;
tra‡age de cercles,
ellipse,
traits,
rectangles
etc ...
Par contre, l'affichage des objets typiques du GEM :
fenˆtres,
boŒtes d'alertes
est r‚alis‚ par l'AES - APPLICATION ENVIRONMENT SYSTEM - .
Au fur et … mesure que vous d‚couvrirez les fonctions VDI et AES
vous vous rendrez compte de l'interaction des 2.
Le gros avantage de ce systŠme peut s'expliquer simplement: il
semble ‚vident … tout le monde que sortir un dessin sur un ‚cran,
une disquette ou une imprimante, ce n'est pas la mˆme chose.
ERREUR! Pour le GEM c'est pareil!
En fait, on peut dire que vous avez … pr‚parer votre dessin et …
dire "je l'envoie". O—? Ah l…, c'est comme vous voulez parce que
pour le VDI
l'‚cran,
la table tra‡ante,
le disque,
l'imprimante
etc..
ne sont que des p‚riph‚riques. Il suffit de lui d‚signer le p‚ri-
ph‚rique de notre choix et il fait le boulot tout seul!!!!
Le seul problŠme:
les routines v‚ritablement ind‚pendantes des p‚riph‚riques se
trouvent dans GDOS - ce nom vous fait s–rement fr‚mir d'effroi...-
-- Plusieurs programmes en mˆme temps ?
Le principe du GEM est trŠs attirant mais doit nous amener … r‚-
fl‚chir un petit peu sur le m‚lange potentiel des donn‚es. En ef-
fet le GEM, mˆme s'il n'est pas r‚ellement multitƒche (ˆtre multi-
tƒche consiste … pouvoir faire tourner des applications exactement
en mˆme temps, ce qui est de toute fa‡on impossible avec un 68000)
le GEM donc, permet d'avoir plusieurs programmes actifs en mˆme
temps, en l'occurrence un programme principal et 6 accessoires.
Pour le GEM il n'y a fondamentalement pas de diff‚rence entre un
PRG et un ACC et, pour cette raison, dans le vocabulaire GEM on
les nomme "applications". Le GEM peut donc se retrouver avec 7 ap-
plications … g‚rer, chacune ayant potentiellement plusieurs fenˆ-
tres. On imagine facilement le bazar dans la m‚moire!!!
-- Comment le GEM s'y retrouve t-il?
Au d‚marrage d'une application, celle-ci appelle la fonction AP-
PL_INIT (Application_Init). Cette fonction pr‚vient le GEM que no-
tre application d‚sire devenir active, et le GEM r‚pond en nous
fournissant un num‚ro, l'APP_ID (Application_Identificator) qui
nous servira maintenant de r‚f‚rence. Notre application sera donc
par exemple la 3, et sera reconnue comme telle par le GEM. Atten-
tion, l'APP_ID n'est donn‚ … l'application que pour la dur‚e de
pr‚sence en m‚moire de celle-ci. Si je lance un ACC le lundi, il
peut h‚riter de l'APP_ID 4 mais si je le relance le mardi dans des
conditions diff‚rentes, il peut obtenir l'APP_ID 5. Seulement il
gardera cet APP_ID pendant toute son activit‚.
Lorsque l'on ouvre une fenˆtre, c'est le mˆme principe. Le GEM
fournit ce que l'on nomme un HANDLE, c'est … dire un num‚ro cor-
respondant … la fenˆtre. En fait le HANDLE c'est le num‚ro d'iden-
tification d'une fenˆtre mais potentiellement aussi d'un p‚riph‚-
rique.
-- Multitraitement ?
Une des parties les plus importantes du GEM concerne la gestion
des ‚v‚nements. Un ‚v‚nements c'est une action de l'utilisateur de
la machine: clic souris, appui sur une touche etc... En fait, sous
GEM les applications passent la plus grande partie de leur temps …
attendre. Imaginons un PRG avec une fenˆtre ouverte et un menu
d‚roulant, et en mˆme temps en m‚moire 3 accessoires. Je vais dans
le menu des accessoires. Le menu se d‚roule et les titres passent
en inverse vid‚o lorsque la souris passe dessus. Tout ceci est
fait par le GEM, tout seul comme un grand. Je clique sur le titre
de l'accessoire 2.
Le GEM d‚tecte le clic, sait que je suis dans les accessoires, re-
garde sur quelle entr‚e j'ai cliqu‚. Comme c'est le GEM qui a at-
tribu‚ les entr‚es aux ACC, il envoie un message … l'accessoire 2
pour lui dire "il faut que tu t'ouvres". Celui-ci s'ouvre donc, et
affiche une fenˆtre … l'‚cran. Nous avons donc 2 fenˆtres en mˆme
temps. Je clique sur celle du PRG, le GEM regarde … qui appartient
cette fenˆtre et envoi au PRG un message pour lui dire "on a acti-
v‚ ta fenˆtre num‚ro XX" etc... Nous allons donc construire dans
nos programmes sous GEM, un noyau de surveillance des actions, et
nous r‚agirons en fonction de celles-ci.
-- Pour appeler les fonctions du GEM.
Les appels se font avec des paramŠtres que nous passons dans des
tableaux. Comme nous utilisons DEVPACK, nous utiliserons sa bi-
bliothŠque. En effet, pour les appels au GEM, les paramŠtres sont
nombreux et … placer … des endroits bien pr‚cis dans les tableaux.
Pour ces raisons, les macros trouvent ici tout leur int‚rˆt. Nous
appellerons donc les fonctions du GEM avec les macros contenues
dans la bibliothŠque de DEVPACK. Cependant il convient de connaŒ-
tre ‚galement les tableaux, afin de pouvoir parfaitement compren-
dre le principe de fonctionnement.
Pour l'AES, il faut 6 tableaux:
CONTROL,
GLOBAL,
INT_IN,
INT_OUT,
ADDR_IN,
ADDR_OUT.
Pour le VDI il en faut 5:
CONTRL,
INTIN,
INTOUT,
PTSIN,
PTSOUT.
Attention … la l‚gŠre diff‚rence d'orthographe entre INT_IN et
INTIN ! Pour indiquer, lors de l'appel au GEM, l'emplacement o— il
trouvera ces tableaux, leurs adresses sont plac‚es dans 2 listes:
Une pour l'AES:
aes_params dc.l control, global, int_in, int_out,addr_in, addr_out
et une pour le VDI:
vdi_params dc.l contrl, intin, ptsin, intout, ptsout
Voici les tableaux tels qu'ils sont d‚finis dans la bibliothŠque
GEM de DEVPACK:
control ds.w 5
global ds.w 14
int_in ds.w 16
int_out ds.w 7
addr_in ds.l 3
addr_out ds.l 1
contrl ds.w 1
contrl1 ds.w 1
contrl2 ds.w 1
contrl3 ds.w 1
contrl4 ds.w 1
contrl5 ds.w 1
contrl6 ds.w 1
contrl7 ds.w 1
contrl8 ds.w 1
contrl9 ds.w 1
contrl10 ds.w 1
contrl11 ds.w 1
intin ds.w 128 min 30
intout ds.w 128 min 45
ptsin ds.w 128 min 30
ptsout ds.w 128 min 12
Vous remarquez l'‚trange mise en place du tableau CONTRL (tableau
pour le VDI). En effet il faut assez souvent passer des paramŠtres
'… la main' dans ce tableau. Avec ce systŠme, il sera possible de
r‚aliser une op‚ration du genre MOVE.W #10,CONTRL2
Attention cette num‚rotation des CONTRL correspond au nombre de
words car chacune des entr‚es est d‚finie par DS.W et non pas par
DS.B!!! Ceci s'explique par le fait que 99% des documents relatifs
au GEM sont pour le 'C' et que c'est ce type de commande qui est
faite en 'C'. Ainsi vous trouverez souvent; "mettre 10 en
contrl(2)"; il vous suffira de faire MOVE.W #10,CONTRL2 et le tour
est jou‚.
-- Pourquoi tant de tableaux? Parce que chacun de ces tableaux est
destin‚ … recevoir ou … renvoyer un certain type de donn‚es.
Voyons un descriptif rapide de ces tableaux.
Tableaux AES
** control
Destin‚ … contenir, dans l'ordre:
num‚ro de la fonction (.W),
nombre d'octets de INT_IN (.W),
nombre d'octets de INT_OUT (.W),
nombre de longs mots de ADDR_IN (.W)
nombre de longs mots de ADDR_OUT
** global
Ce tableau est un peu sp‚cial, et les explications le concernant
ne sont d'aucune utilit‚ dans le cadre de ces cours. Une fois bien
ingurgit‚ le reste, vous pourrez toujours vous pencher dessus mais
actuellement cela ne ferait que vous embrouiller! (Voir la biblio-
graphie pour en savoir plus)
** int_in
Ce tableau est destin‚ … recevoir des valeurs entiŠres (Integer
In) dont l'AES aura besoin.
Par exemple un num‚ro de fenˆtre.
** int_out
A l'inverse du pr‚c‚dent ce tableau renvoi des r‚sultats par exem-
ple si vous demander la surface disponible pour une fenˆtre, vous
aurez ici les dimensions.
** addr_in
Liste dans laquelle vous pourrez placer des adresses
** addr_out et l…, vous pourrez en lire! En fait il suffit, comme
toujours, de lire le nom du tableau pour en d‚duire ce qu'il
contient!
Tableaux VDI
** contrl
Dans contrl0 nous pla‡ons l'opcode de la fonction, c'est ainsi que
l'on appelle son num‚ro.
Dans contrl1 nous pla‡ons le nombre de donn‚es qui seront mise
dans le tableau intin
Dans contrl2 nous pla‡ons le nombre de points (donc de couples de
donn‚es) qui seront plac‚s dans le tableau ptsin
Dans contrl3 nous placerons l'identificateur de la sous-fonction.
Par exemple le tra‡age des cercles, ellipse, rectangle etc... ce
fait avec la fonction 11. Il faut donc un sous-code permettant de
d‚finir quel module dans la fonction 11 on d‚sire utiliser.
Dans contrl6 nous pla‡ons le handle du p‚riph‚rique. (voir plus
haut)
A partir de contrl7 il y a parfois des informations … passer,
suivant la fonction.
** intin et ptsin
Nous remplirons ensuite le tableau INTIN avec les paramŠtres en-
tiers demand‚s par la fonction et le tableau PTSIN avec les coor-
donn‚es demand‚es par la fonction. Une fois la fonction appel‚e,
nous r‚cupŠrerons:
en contrl2 le nombre de couples de coordonn‚es de ptsout et
en contrl4 le nombre de mots de intout.
Voici un appel au GEM. Cette fonction affiche une phrase o— l'on
veut sur l'‚cran, contrairement … Gemdos (9) qui est limit‚ sur
les lignes et les colonnes de texte. De plus cette fonction permet
d'afficher du texte avec des effets (gras, soulign‚ etc...) avec
la fonte de notre choix:
LEA MESSAGE,A1 adresse de la phrase
LEA INTIN,A0 tableau de r‚ception
MOVEQ.L #0,D2 init le compteur de lettres
ICI3 CLR.W D0
MOVE.B (A1)+,D0 pr‚lŠve en bytes
BEQ GO_ON fin du texte
ADDQ.B #1,D2 on compte les lettres
MOVE.W D0,(A0)+ transfŠre dans INTIN (en words)
BRA ICI
GO_ON MOVE.W #100,PTSIN position X
MOVE.W #150,PTSIN+2 position Y
MOVE.W D2,CONTRL3 nombre de lettres
MOVE.W #1,CONTRL1
MOVE.W CURRENT_HANDLE,CONTRL6
MOVE.W #8,CONTRL opcode
MOVE.L #VDI_PARAMS,D1
MOVE.W #$73,D0
TRAP #2
AAAAAAAAAARRRRRRGGGLLL!!!!!! C'est l'horreur n'est ce pas!
Il faut vous munir de patience et d‚cortiquer les multiples appels
au GEM.
Pour vous aider dans vos essais, vous trouverez ci-joint un dos-
sier intitul‚ GEM. Il contient le source d'un ACC qui affiche une
boŒte d'alerte, d'un PRG qui gŠre une ressource (listing issu de
WERCS) et d'un accessoire g‚rant une fenˆtre. Pour ce qui est des
‚diteurs de ressources, je travaille avec K Ressource qui est bien
sympa et qui ne plante pas, contrairement … Wercs!
Essayez de bien comprendre le principe: affichez une boŒte
d'alerte avec un seul bouton, puis avec plusieurs, faites des
petites ressources toutes simples, puis de plus en plus compli-
qu‚es etc... Le principe restera toujours le mˆme quelle que soit
la taille de votre application. Essayez de faire de petits acces-
soires du genre formateur de disquettes, avec un petit formulaire
qui demande si l'on veut formater le disque A ou le B, en simple
ou en double face etc...
A l'aide de ces exemples, vous devriez r‚ussir … vous d‚brouiller.
C'est avec ‡a que j'ai commenc‚! Jetez ‚galement un coup d'oeil
sur la bibliographie, il y a quelques trucs int‚ressants!
Back to ASM_Tutorial