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