COURS208.TXT/fr: Difference between revisions
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 |
+ | * par Le F�roce Lapin (from 44E) * |
* * |
* * |
||
− | * Seconde |
+ | * Seconde s�rie * |
* * |
* * |
||
− | * Cours |
+ | * 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 |
+ | 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 |
+ | 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 |
+ | 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 |
+ | 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' |
+ | 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 |
+ | Tout d'abord les remarques qui se trouvent au d�but du chapitre |
− | sur la ligne A, |
+ | 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 |
+ | 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 |
+ | Le GEM est accessible par le TRAP #2, mais en fait gr�ce � ce trap |
− | nous avons |
+ | 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, |
+ | 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�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 |
+ | 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 |
+ | 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". |
+ | 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 |
+ | la table tra�ante, |
le disque, |
le disque, |
||
l'imprimante |
l'imprimante |
||
etc.. |
etc.. |
||
− | ne sont que des |
+ | 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 |
+ | Le seul probl�me: |
− | les routines |
+ | les routines v�ritablement ind�pendantes des p�riph�riques se |
− | trouvent dans GDOS - ce nom vous fait |
+ | trouvent dans GDOS - ce nom vous fait s�rement fr�mir d'effroi...- |
− | -- Plusieurs programmes en |
+ | -- Plusieurs programmes en m�me temps ? |
− | Le principe du GEM est |
+ | 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 |
+ | 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 |
+ | 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 |
+ | 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 |
+ | PL_INIT (Application_Init). Cette fonction pr�vient le GEM que no- |
− | tre application |
+ | tre application d�sire devenir active, et le GEM r�pond en nous |
− | fournissant un |
+ | fournissant un num�ro, l'APP_ID (Application_Identificator) qui |
− | nous servira maintenant de |
+ | 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 |
+ | 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 |
+ | conditions diff�rentes, il peut obtenir l'APP_ID 5. Seulement il |
− | gardera cet APP_ID pendant toute son |
+ | gardera cet APP_ID pendant toute son activit�. |
− | Lorsque l'on ouvre une |
+ | 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 |
+ | 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 |
+ | 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 |
+ | le menu des accessoires. Le menu se d�roule et les titres passent |
− | en inverse |
+ | 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 |
+ | 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 |
+ | 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 |
+ | 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 |
+ | 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 |
+ | INTIN ! Pour indiquer, lors de l'appel au GEM, l'emplacement o� il |
− | trouvera ces tableaux, leurs adresses sont |
+ | 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 |
+ | 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 |
+ | 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 |
+ | Attention cette num�rotation des CONTRL correspond au nombre de |
− | words car chacune des |
+ | 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 |
+ | 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 |
+ | Ce tableau est un peu sp�cial, et les explications le concernant |
− | ne sont d'aucune |
+ | 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 |
+ | 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 |
+ | Par exemple un num�ro de fen�tre. |
** int_out |
** int_out |
||
− | A l'inverse du |
+ | A l'inverse du pr�c�dent ce tableau renvoi des r�sultats par exem- |
− | ple si vous demander la surface disponible pour une |
+ | 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 |
+ | ** addr_out et l�, vous pourrez en lire! En fait il suffit, comme |
− | toujours, de lire le nom du tableau pour en |
+ | 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 |
+ | Dans contrl0 nous pla�ons l'opcode de la fonction, c'est ainsi que |
− | l'on appelle son |
+ | l'on appelle son num�ro. |
− | Dans contrl1 nous |
+ | Dans contrl1 nous pla�ons le nombre de donn�es qui seront mise |
dans le tableau intin |
dans le tableau intin |
||
− | Dans contrl2 nous |
+ | 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 |
+ | 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 |
+ | 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 |
+ | 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 |
+ | nous r�cup�rerons: |
− | en contrl2 le nombre de couples de |
+ | 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 |
+ | 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, |
+ | 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 |
+ | 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 |
+ | 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)+ |
+ | 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 |
+ | 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 |
+ | 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 |
+ | 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 |
+ | 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 |
+ | 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