COURS208.TXT/fr: Difference between revisions

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

Revision as of 15:07, 23 November 2023

   ******************************************************************
   *                                                                *
   *             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