COURS 7.TXT/fr: Difference between revisions
Jump to navigation
Jump to search
(Created page with "<pre> ****************************************************************** * * * COURS D'ASSE...") Â |
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) * |
* * |
* * |
||
− | * Cours |
+ | * Cours num�ro 7 * |
* * |
* * |
||
****************************************************************** |
****************************************************************** |
||
− | Nous abordons maintenant le |
+ | Nous abordons maintenant le septi�me cours de la s�rie. La totali- |
+ | t� du cours �tant en 2 s�ries (enfin � l'heure o� je tape ces li- |
||
− | t‚ du cours ‚tant en 2 s‚ries (enfin … l'heure o— je tape ces li- |
||
− | gnes c'est ce qui est |
+ | gnes c'est ce qui est pr�vu!), celui-ci est le dernier de la pre- |
− | + | mi�re! |
|
− | A la fin de celui-ci et si vous avez |
+ | A la fin de celui-ci et si vous avez tr�s attentivement et tr�s |
− | scrupuleusement suivi les 6 cours |
+ | scrupuleusement suivi les 6 cours pr�c�dents, vous devriez �tre |
capable d'afficher des images, sauver des fichiers etc... |
capable d'afficher des images, sauver des fichiers etc... |
||
− | Mais tout d'abord revenons |
+ | Mais tout d'abord revenons � notre pile et � la question du cours |
+ | pr�c�dent. Avez vous trouv� l'erreur ? |
||
− | pr‚c‚dent. Avez vous trouv‚ l'erreur ? |
||
Eh bien regardez la valeur de A7 avant d'y empiler $12345678 et |
Eh bien regardez la valeur de A7 avant d'y empiler $12345678 et |
||
− | $23456, et comparez |
+ | $23456, et comparez � la valeur � la sortie du programme. Malheur! |
− | ce n'est pas la |
+ | ce n'est pas la m�me! Normal, si nous comptons les empilages et |
+ | les d�pilages, nous nous rendons compte que nous avons empil� 8 |
||
− | les d‚pilages, nous nous rendons compte que nous avons empil‚ 8 |
||
− | octets de plus que nous n'avons |
+ | octets de plus que nous n'avons d�pil�. En effet, comme nous avons |
+ | r�cup�r� nos 2 nombres en sauvegardant au pr�alable A7 dans A0, |
||
− | r‚cup‚r‚ nos 2 nombres en sauvegardant au pr‚alable A7 dans A0, |
||
− | nous n'avons pas |
+ | nous n'avons pas touch� A7 au moment de la r�cup�ration. |
− | Heureusement d'ailleurs car le retour de la routine aurait |
+ | Heureusement d'ailleurs car le retour de la routine aurait �t� mo- |
− | + | difi�! |
|
− | Partant du principe de |
+ | Partant du principe de d�pilage dans l'ordre inverse, il nous faut |
donc corriger la pile une fois revenu de la subroutine. Comme nous |
donc corriger la pile une fois revenu de la subroutine. Comme nous |
||
+ | avons empil� en faisant -(SP) il faut ajouter pour que la pile re- |
||
− | avons empil‚ en faisant -(SP) il faut ajouter pour que la pile re- |
||
− | devienne comme avant. Ayant |
+ | devienne comme avant. Ayant empil� 2 nombres de 4 octets chacuns, |
− | nous devons ajouter 8 octets |
+ | nous devons ajouter 8 octets � l'adresse de la pile pour la corri- |
− | ger comme il faut. Nous avons |
+ | ger comme il faut. Nous avons d�j� vu comment augmenter une |
adresse, avec ADDA. |
adresse, avec ADDA. |
||
− | Il convient donc de rajouter juste |
+ | Il convient donc de rajouter juste apr�s la ligne BSR AJOUTE une |
addition sur SP, en faisant ADDA.L #8,SP (qui se lit ADD ADRESS |
addition sur SP, en faisant ADDA.L #8,SP (qui se lit ADD ADRESS |
||
LONG 8 STACK POINTER) |
LONG 8 STACK POINTER) |
||
+ | Un appel � une subroutine en lui passant des param�tres sur la |
||
− | Un appel … une subroutine en lui passant des paramŠtres sur la |
||
pile sera donc typiquement du genre: |
pile sera donc typiquement du genre: |
||
Line 53: | Line 53: | ||
ADDA.L #10,SP |
ADDA.L #10,SP |
||
− | Nous passons le word de valeur $1452 dans la pile ( |
+ | Nous passons le word de valeur $1452 dans la pile (modifi�e donc |
− | de 2 octets), le long mot de valeur $54854 dans la pile ( |
+ | de 2 octets), le long mot de valeur $54854 dans la pile (modifi�e |
− | de 4 octets), l'adresse |
+ | de 4 octets), l'adresse rep�r�e par le label TRUC dans la pile |
+ | (modifi�e de 4 octets) puis nous partons vers notre subroutine. Au |
||
− | (modifi‚e de 4 octets) puis nous partons vers notre subroutine. Au |
||
retour correction de 2+4+4=10 octets du stack pointer pour revenir |
retour correction de 2+4+4=10 octets du stack pointer pour revenir |
||
+ | � l'�tat d'origine. |
||
− | … l'‚tat d'origine. |
||
+ | La pile poss�de une petite particularit�. Nous avons vu dans les |
||
− | La pile possŠde une petite particularit‚. Nous avons vu dans les |
||
+ | cours pr�c�dents que le 68000 �tait un micro-processeur 16/32 |
||
− | cours pr‚c‚dents que le 68000 ‚tait un micro-processeur 16/32 |
||
− | bits. Il lui est |
+ | bits. Il lui est tr�s difficile d'acc�der � des adresses impaires. |
− | Or si nous |
+ | Or si nous commen�ons � empiler des octets et non plus uniquement |
− | des words ou des long words, le Stack Pointer peut |
+ | des words ou des long words, le Stack Pointer peut tr�s facilement |
pointer sur une adresse impaire, ce qui risque de planter notre |
pointer sur une adresse impaire, ce qui risque de planter notre |
||
machine. |
machine. |
||
Line 76: | Line 76: | ||
MOVE.L #$AAAAAAAA,D1 |
MOVE.L #$AAAAAAAA,D1 |
||
− | Assemblez puis passez sous MOnst et avancez pas |
+ | Assemblez puis passez sous MOnst et avancez pas � pas en observant |
bien l'adresse du SP (donc celle visible en A7). |
bien l'adresse du SP (donc celle visible en A7). |
||
Line 82: | Line 82: | ||
que nous faisons MOVE.L D0,-(SP) mais qu'il se modifie de 2 |
que nous faisons MOVE.L D0,-(SP) mais qu'il se modifie de 2 |
||
lorsque nous faisons MOVE.B D0,-(SP) alors que nous pouvions |
lorsque nous faisons MOVE.B D0,-(SP) alors que nous pouvions |
||
− | nous attendre |
+ | nous attendre � une modification de 1 ! Les erreurs provoqu�s par |
− | des adresses impaires sont donc |
+ | des adresses impaires sont donc �cart�es avec la pile . Merci |
Monsieur MOTOROLA! |
Monsieur MOTOROLA! |
||
− | (Note: ceci est une |
+ | (Note: ceci est une particularit� des registres A7 et A7'. Si nous |
+ | avions travaill� avec A3 par exemple au lieu de SP, celui-ci au- |
||
− | avions travaill‚ avec A3 par exemple au lieu de SP, celui-ci au- |
||
rait eu une adresse impaire. C'est le type d'usage qui est fait de |
rait eu une adresse impaire. C'est le type d'usage qui est fait de |
||
− | la pile qui a conduit les gens de MOTOROLA |
+ | la pile qui a conduit les gens de MOTOROLA � cr�er cette diff�- |
rence.) |
rence.) |
||
− | Abordons maintenant l'ultime chapitre de cette |
+ | Abordons maintenant l'ultime chapitre de cette premi�re s�rie: |
LES 'TRAP' |
LES 'TRAP' |
||
− | Une instruction TRAP est comparable |
+ | Une instruction TRAP est comparable � une instruction BSR. Elle |
agit comme un branchement vers une routine. Cependant, contraire- |
agit comme un branchement vers une routine. Cependant, contraire- |
||
+ | ment � l'instruction BSR qui demande � �tre compl�t�e par |
||
− | ment … l'instruction BSR qui demande … ˆtre compl‚t‚e par |
||
− | l'adresse, c'est- |
+ | l'adresse, c'est-�-dire le label permettant de trouver la routine, |
− | l'instruction TRAP se contente d'un |
+ | l'instruction TRAP se contente d'un num�ro. Ce num�ro peut varier |
+ | de 0 � 15. Lorsque le 68000 rencontre une instruction TRAP il re- |
||
− | de 0 … 15. Lorsque le 68000 rencontre une instruction TRAP il re- |
||
− | garde son |
+ | garde son num�ro et agit en cons�quence. Vous vous rappeler des |
− | tout premiers cours, dans lesquels nous avions |
+ | tout premiers cours, dans lesquels nous avions parl� du principe |
+ | utilis� par le 68000 lorsqu'il trouvait la bit T (mode trace) du |
||
− | utilis‚ par le 68000 lorsqu'il trouvait la bit T (mode trace) du |
||
− | SR (status register) |
+ | SR (status register) � 1 ? Saut dans le premier kilo de m�moire |
(table des vecteurs d'exceptions), recherche de l'adresse $24, on |
(table des vecteurs d'exceptions), recherche de l'adresse $24, on |
||
− | regarde dans le tube |
+ | regarde dans le tube � cette adresse, on y trouve un long mot, ce |
− | long mot c'est l'adresse de la routine et on fonce |
+ | long mot c'est l'adresse de la routine et on fonce � cette adresse |
+ | ex�cuter cette routine. |
||
− | ex‚cuter cette routine. |
||
Et bien regardez la feuille qui donne la liste des vecteurs d'ex- |
Et bien regardez la feuille qui donne la liste des vecteurs d'ex- |
||
− | ceptions, et jetez un coup d'oeil aux vecteurs 32 |
+ | ceptions, et jetez un coup d'oeil aux vecteurs 32 � 47. Les voil� |
nos vecteurs TRAP !!! Lorsque le 68000 rencontre par exemple |
nos vecteurs TRAP !!! Lorsque le 68000 rencontre par exemple |
||
− | l'instruction TRAP #8, il fonce |
+ | l'instruction TRAP #8, il fonce � l'adresse $0A0 pour y trouver |
− | l'adresse de la routine qu'il doit |
+ | l'adresse de la routine qu'il doit ex�cuter. |
− | A priori cela semble bien |
+ | A priori cela semble bien compliqu� pour pas grand chose! En effet |
+ | il faut pr�voir sa routine, la mettre en m�moire, puis placer son |
||
− | il faut pr‚voir sa routine, la mettre en m‚moire, puis placer son |
||
− | adresse dans le vecteur. Plus |
+ | adresse dans le vecteur. Plus compliqu� qu'un BSR, surtout que BSR |
REGLAGE_CLAVIER et plus parlant qu'un TRAP #5 ou un TRAP #12 !!! |
REGLAGE_CLAVIER et plus parlant qu'un TRAP #5 ou un TRAP #12 !!! |
||
+ | L�, nous retournons encore en arri�re (je vous avais bien dit que |
||
− | L…, nous retournons encore en arriŠre (je vous avais bien dit que |
||
+ | TOUT �tait important dans ces cours!!!!!) pour nous souvenir de la |
||
− | TOUT ‚tait important dans ces cours!!!!!) pour nous souvenir de la |
||
notion de mode Utilisateur et de mode Superviseur. Le Superviseur |
notion de mode Utilisateur et de mode Superviseur. Le Superviseur |
||
+ | acc�de � toute la m�moire et � toutes les instructions, pas l'Uti- |
||
− | accŠde … toute la m‚moire et … toutes les instructions, pas l'Uti- |
||
lisateur. |
lisateur. |
||
− | S'il s'agit d'interdire |
+ | S'il s'agit d'interdire � l'Utilisateur des instructions assem- |
− | bleur telles que RESET, notre Utilisateur ne sera pas trop |
+ | bleur telles que RESET, notre Utilisateur ne sera pas trop g�n� |
− | par contre c'est en ce qui concerne la |
+ | par contre c'est en ce qui concerne la m�moire que tout va tr�s |
+ | s�rieusement se compliquer. Voulez vous conna�tre la r�solution |
||
− | s‚rieusement se compliquer. Voulez vous connaŒtre la r‚solution |
||
− | dans laquelle se trouve votre machine ? C'est facile, c'est |
+ | dans laquelle se trouve votre machine ? C'est facile, c'est not� � |
l'adresse $FF8260. |
l'adresse $FF8260. |
||
Vous voulez changer la palette de couleur ? Rien de plus simple, |
Vous voulez changer la palette de couleur ? Rien de plus simple, |
||
+ | elle est not�e en $FF8240. Imprimer un petit texte ? A l'aise, il |
||
− | elle est not‚e en $FF8240. Imprimer un petit texte ? A l'aise, il |
||
− | suffit d'employer les registres de communications vers l' |
+ | suffit d'employer les registres de communications vers l'ext�rieur |
− | du chip son ( |
+ | du chip son (�tonnant n'est ce pas!). C'est situ� en $FF8800 et |
$FF8802. |
$FF8802. |
||
− | Pardon ??? Quoi ??? Vous |
+ | Pardon ??? Quoi ??? Vous �tes Utilisateur ??? Ah bon.... Parce que |
+ | c'est g�nant... Toutes ces adresses sont situ�es dans la zone m�- |
||
− | c'est gˆnant... Toutes ces adresses sont situ‚es dans la zone m‚- |
||
moire uniquement accessible au Superviseur..... |
moire uniquement accessible au Superviseur..... |
||
− | L'Utilisateur se trouve bien |
+ | L'Utilisateur se trouve bien coinc� et les possibilit�s s'en trou- |
+ | vent dr�lement r�duites. Heureusement, les TRAP sont l� !!! Gr�ce |
||
− | vent dr“lement r‚duites. Heureusement, les TRAP sont l… !!! Grƒce |
||
+ | � ce syst�me l'utilisateur va avoir acc�s � des zones qui lui sont |
||
− | … ce systŠme l'utilisateur va avoir accŠs … des zones qui lui sont |
||
− | normalement interdites. Pas directement, bien |
+ | normalement interdites. Pas directement, bien s�r, mais gr�ce au |
− | superviseur. Le superviseur a, en effet, |
+ | superviseur. Le superviseur a, en effet, fabriqu� des routines |
+ | qu'il a plac� en m�moire et dont les adresses sont dans les vec- |
||
− | qu'il a plac‚ en m‚moire et dont les adresses sont dans les vec- |
||
− | teurs TRAP. Ces routines sont |
+ | teurs TRAP. Ces routines sont ex�cut�s en mode superviseur et ta- |
+ | pent � tour de bras dans les zones m�moires prot�g�es. Lorsque |
||
− | pent … tour de bras dans les zones m‚moires prot‚g‚es. Lorsque |
||
l'Utilisateur veut les utiliser il les appelle par les TRAP. La |
l'Utilisateur veut les utiliser il les appelle par les TRAP. La |
||
− | protection est donc bien |
+ | protection est donc bien assur�e car l'Utilisateur ne fait que d�- |
− | clencher une routine dont |
+ | clencher une routine dont g�n�ralement il ne conna�t que les para- |
+ | m�tres � lui passer et le type de message qu'il aura en r�ponse. |
||
− | mŠtres … lui passer et le type de message qu'il aura en r‚ponse. |
||
− | C'est de cette |
+ | C'est de cette mani�re que nous pouvons acc�der au syst�me d'ex- |
ploitation de notre Atari !!! |
ploitation de notre Atari !!! |
||
− | Petit rappel: qu'est ce qu'un |
+ | Petit rappel: qu'est ce qu'un syst�me d'exploitation ? |
− | Le premier qui |
+ | Le premier qui r�pond c'est GEM se prend une paire de claques. GEM |
− | c'est l'interface utilisateur et pas le |
+ | c'est l'interface utilisateur et pas le syst�me d'exploitation. |
+ | Le syst�me d'exploitation (ou Operating System) dans notre cas |
||
− | Le systŠme d'exploitation (ou Operating System) dans notre cas |
||
− | c'est TOS. La confusion entre interface Utilisateur et |
+ | c'est TOS. La confusion entre interface Utilisateur et syst�me |
− | d'exploitation vient du fait que certains |
+ | d'exploitation vient du fait que certains syst�mes d'exploitation |
+ | int�grent �galement un interface utilisateur: c'est par exemple le |
||
− | intŠgrent ‚galement un interface utilisateur: c'est par exemple le |
||
cas sur PC avec MS DOS. |
cas sur PC avec MS DOS. |
||
+ | Le syst�me d'exploitation c'est un ensemble de routine permettant |
||
− | Le systŠme d'exploitation c'est un ensemble de routine permettant |
||
d'exploiter la machine. Ces multiples routines permettent par |
d'exploiter la machine. Ces multiples routines permettent par |
||
− | exemple d'afficher un |
+ | exemple d'afficher un caract�re � l'�cran d'ouvrir un fichier, de |
formater une piste de disquette, d'envoyer un octet sur la prise |
formater une piste de disquette, d'envoyer un octet sur la prise |
||
MIDI etc... En fait tous les 'trucs' de base, mais jamais de cho- |
MIDI etc... En fait tous les 'trucs' de base, mais jamais de cho- |
||
+ | ses compliqu�es. Une routine du syst�me d'exploitation ne permet- |
||
− | ses compliqu‚es. Une routine du systŠme d'exploitation ne permet- |
||
tra pas, par exemple, de lire le contenu d'un fichier se trouvant |
tra pas, par exemple, de lire le contenu d'un fichier se trouvant |
||
− | sur la disquette. En effet ceci demande plusieurs |
+ | sur la disquette. En effet ceci demande plusieurs op�rations avec |
+ | � chaque fois des tests: |
||
− | … chaque fois des tests: |
||
Ouverture du fichier: existe t-il, |
Ouverture du fichier: existe t-il, |
||
− | la disquette n'est elle pas |
+ | la disquette n'est elle pas ab�m�e etc... |
positionnement du pointeur dans le fichier: le positionnement |
positionnement du pointeur dans le fichier: le positionnement |
||
− | s'est il bien |
+ | s'est il bien pass�? |
− | Lecture: N'as t-on pas |
+ | Lecture: N'as t-on pas essay� de lire trop d'octets etc, etc.... |
− | Il faudra donc bien souvent plusieurs appels |
+ | Il faudra donc bien souvent plusieurs appels � des routines diff�- |
− | rentes pour |
+ | rentes pour r�aliser ce que l'on veut. |
− | Il est toujours possible de se passer du |
+ | Il est toujours possible de se passer du syst�me d'exploitation, |
+ | sp�cialement lorsque l'on programme en assembleur. En effet l'en- |
||
− | sp‚cialement lorsque l'on programme en assembleur. En effet l'en- |
||
− | semble des routines de l'OS ( |
+ | semble des routines de l'OS (abr�viation de Operating System) est |
+ | destin� � un usage commun, tout comme d'ailleurs les routines de |
||
− | destin‚ … un usage commun, tout comme d'ailleurs les routines de |
||
l'interface Utilisateur. |
l'interface Utilisateur. |
||
− | Ceci explique bien souvent la |
+ | Ceci explique bien souvent la r�-�criture de toutes petites par- |
+ | ties du syst�me afin de n'utiliser que le strict n�cessaire. La |
||
− | ties du systŠme afin de n'utiliser que le strict n‚cessaire. La |
||
routine de gestion souris du GEM par exemple doit s'occuper de la |
routine de gestion souris du GEM par exemple doit s'occuper de la |
||
souris mais aussi du clavier, du MIDI et du joystick. Pour un jeu |
souris mais aussi du clavier, du MIDI et du joystick. Pour un jeu |
||
+ | il peut �tre int�ressant de r�-�crire cette routine afin de g�rer |
||
− | il peut ˆtre int‚ressant de r‚-‚crire cette routine afin de g‚rer |
||
uniquement le joystick et donc d'avoir une routine qui 'colle' |
uniquement le joystick et donc d'avoir une routine qui 'colle' |
||
plus au besoin. |
plus au besoin. |
||
− | Nous verrons beaucoup plus tard comment regarder dans le |
+ | Nous verrons beaucoup plus tard comment regarder dans le syst�me |
− | d'exploitation afin de pouvoir par la suite |
+ | d'exploitation afin de pouvoir par la suite r�aliser soi-m�me ses |
− | routines. Avant cela, utilisons simplement ce |
+ | routines. Avant cela, utilisons simplement ce syst�me! |
− | Nous allons donc l'appeler |
+ | Nous allons donc l'appeler gr�ce aux TRAPs. |
4 traps sont accessibles 'normalement' dans le ST: |
4 traps sont accessibles 'normalement' dans le ST: |
||
Line 215: | Line 215: | ||
TRAP #2 routines du GEM |
TRAP #2 routines du GEM |
||
TRAP #13 routines du BIOS |
TRAP #13 routines du BIOS |
||
− | TRAP #14 routines du BIOS |
+ | TRAP #14 routines du BIOS �tendu (eXtended Bios donc XBIOS) |
GEMDOS =Graphic environment manager disk operating system |
GEMDOS =Graphic environment manager disk operating system |
||
− | GEM =Graphic environment manager (se |
+ | GEM =Graphic environment manager (se d�coupe par la suite en |
− | AES, VDI etc.. Un chapitre de la seconde |
+ | AES, VDI etc.. Un chapitre de la seconde s�rie y sera consacr�e) |
BIOS =Basic Input Output System |
BIOS =Basic Input Output System |
||
XBIOS =Extended Basic Input Output System |
XBIOS =Extended Basic Input Output System |
||
− | Les autres vecteurs TRAP (0, 3 |
+ | Les autres vecteurs TRAP (0, 3 � 12 et 15) sont, bien entendu, ac- |
− | tifs mais aucune routine n'y est |
+ | tifs mais aucune routine n'y est affect�e. Nous pouvons les utili- |
ser pour peu que nous y mettions avant nos routines, ce qui sera |
ser pour peu que nous y mettions avant nos routines, ce qui sera |
||
− | l'objet du premier cours de la seconde |
+ | l'objet du premier cours de la seconde s�rie. |
Nous constatons que le TRAP #1 permet d'appeler le GEMDOS. Or il |
Nous constatons que le TRAP #1 permet d'appeler le GEMDOS. Or il |
||
− | n'y a pas qu'une routine GEMDOS mais une bonne |
+ | n'y a pas qu'une routine GEMDOS mais une bonne quantit�. De plus |
− | ces routines demandent parfois des |
+ | ces routines demandent parfois des param�tres. Comment faire pour |
les transmettre ? Et bien tout simplement par la pile !!! |
les transmettre ? Et bien tout simplement par la pile !!! |
||
Line 247: | Line 247: | ||
ADDQ.L #2,SP |
ADDQ.L #2,SP |
||
− | Assemblez ce programme mais ne le |
+ | Assemblez ce programme mais ne le d�buggez pas, lancez le par |
− | Alternate+ X. Vous voyez |
+ | Alternate+ X. Vous voyez appara�tre un A sur l'�cran de votre ST. |
Appuyer sur une touche et hop vous revenez dans GENST! Analysons |
Appuyer sur une touche et hop vous revenez dans GENST! Analysons |
||
− | ce que nous avons fait car |
+ | ce que nous avons fait car l� de tr�s tr�s nombreuses choses se |
+ | sont pass�es, et avouons le, nous n'avons rien vu !!!!! |
||
− | sont pass‚es, et avouons le, nous n'avons rien vu !!!!! |
||
− | Tout d'abord nous avons |
+ | Tout d'abord nous avons appel� la fonction Cconout() du Gemdos. |
− | Nous avons |
+ | Nous avons appel� le Gemdos avec le TRAP #1, mais cette instruc- |
− | tion nous a |
+ | tion nous a envoy� vers un ensemble de routine, toutes appartenant |
− | au Gemdos. Pour indiquer |
+ | au Gemdos. Pour indiquer � cette routine principale vers quelle |
− | subroutine du Gemdos nous |
+ | subroutine du Gemdos nous d�sirons aller, nous avons pass� le nu- |
+ | m�ro de cette subroutine dans la pile. Partant toujours du prin- |
||
− | m‚ro de cette subroutine dans la pile. Partant toujours du prin- |
||
− | cipe du dernier |
+ | cipe du dernier entr� premier sorti, il est bien �vident que ce |
+ | num�ro doit se trouver empil� en dernier afin de pouvoir �tre d�- |
||
− | num‚ro doit se trouver empil‚ en dernier afin de pouvoir ˆtre d‚- |
||
+ | pil� en premier par la routine principale de Gemdos, afin qu'elle |
||
− | pil‚ en premier par la routine principale de Gemdos, afin qu'elle |
||
− | puisse s'orienter vers la sous-routine qui nous |
+ | puisse s'orienter vers la sous-routine qui nous int�resse. La |
− | fonction Cconout ayant le |
+ | fonction Cconout ayant le num�ro 2, nous avons donc fait MOVE.W |
− | #2,-(SP) .(voir plus haut pour se rappeler que 2 peut |
+ | #2,-(SP) .(voir plus haut pour se rappeler que 2 peut tr�s bien |
+ | �tre cod� sur un octet mais, comme nous travaillons vers la pile, |
||
− | ˆtre cod‚ sur un octet mais, comme nous travaillons vers la pile, |
||
− | il sera pris comme un word de toutes |
+ | il sera pris comme un word de toutes fa�ons). |
− | Maintenant le Gemdos ayant |
+ | Maintenant le Gemdos ayant trouv� 2 comme param�tre, s'oriente |
vers cette routine au nom barbare, qui a pour fonction d'afficher |
vers cette routine au nom barbare, qui a pour fonction d'afficher |
||
+ | un caract�re sur l'�cran. Une fois rendu vers cette routine, le |
||
− | un caractŠre sur l'‚cran. Une fois rendu vers cette routine, le |
||
− | Gemdos va chercher |
+ | Gemdos va chercher � savoir quel caract�re afficher. C'est pour |
− | cela que nous avons |
+ | cela que nous avons plac� le code ASCII de ce caract�re sur la |
pile avec MOVE.W #65,-(SP). |
pile avec MOVE.W #65,-(SP). |
||
− | Note: Pour l'assembleur, le code ASCII peut |
+ | Note: Pour l'assembleur, le code ASCII peut �tre remplac� par la |
− | lettre elle- |
+ | lettre elle-m�me. Nous aurions donc pu �crire MOVE.W #"A",-(SP) |
sans oublier toutefois les guillemets! |
sans oublier toutefois les guillemets! |
||
− | De retour du TRAP nous devons corriger la pile, afin d' |
+ | De retour du TRAP nous devons corriger la pile, afin d'�viter le |
+ | probl�me qui a fait l'objet du d�but de ce cours. Nous avions em- |
||
− | problŠme qui a fait l'objet du d‚but de ce cours. Nous avions em- |
||
+ | pil� un word donc 2 octets et ensuite un autre word soit au total |
||
− | pil‚ un word donc 2 octets et ensuite un autre word soit au total |
||
4 octets. Nous allons donc ajouter 4 au SP. Nous profitons ici |
4 octets. Nous allons donc ajouter 4 au SP. Nous profitons ici |
||
+ | d'une op�ration d'addition plus rapide que ADDA, ADDQ qui se lit |
||
− | d'une op‚ration d'addition plus rapide que ADDA, ADDQ qui se lit |
||
− | add quick. Cette addition est |
+ | add quick. Cette addition est autoris�e jusqu'� 8 inclus. Il n'est |
pas possible par exemple de faire ADDQ.L #12,D1 |
pas possible par exemple de faire ADDQ.L #12,D1 |
||
− | Ensuite nous |
+ | Ensuite nous recommen�ons le m�me genre de chose, avec la fonction |
− | 7 du GEMDOS ( |
+ | 7 du GEMDOS (nomm�e Crawcin)qui elle n'attend aucun param�tre, |
− | c'est pourquoi nous passons juste son |
+ | c'est pourquoi nous passons juste son num�ro sur la pile. Cette |
− | fonction attend un appui sur une touche. Ayant |
+ | fonction attend un appui sur une touche. Ayant pass� un param�tre |
sur un word, nous corrigeons au retour du TRAP la pile de 2. |
sur un word, nous corrigeons au retour du TRAP la pile de 2. |
||
Le programme se termine avec la fonction 0 du GEMDOS (Ptermo) qui |
Le programme se termine avec la fonction 0 du GEMDOS (Ptermo) qui |
||
+ | lib�re la m�moire occup�e par notre programme et le termine pour |
||
− | libŠre la m‚moire occup‚e par notre programme et le termine pour |
||
− | de bon. Cette routine n'attend pas de |
+ | de bon. Cette routine n'attend pas de param�tre, nous ne passons |
− | dans la pile que son |
+ | dans la pile que son num�ro donc correction de 2. Note: la correc- |
− | tion de pile pour la fonction Ptermo n'est |
+ | tion de pile pour la fonction Ptermo n'est l� que par souci p�da- |
− | gogique. Cette fonction terminant le programme, notre |
+ | gogique. Cette fonction terminant le programme, notre derni�re |
instruction ADDQ.L #2,SP ne sera jamais atteinte! |
instruction ADDQ.L #2,SP ne sera jamais atteinte! |
||
− | Plusieurs choses maintenant. D'abord ne soyez pas |
+ | Plusieurs choses maintenant. D'abord ne soyez pas �tonn�s des noms |
bizarres des fonctions du GEMDOS, du Bios ou du Xbios. Ce sont les |
bizarres des fonctions du GEMDOS, du Bios ou du Xbios. Ce sont les |
||
+ | v�ritables noms de ces fonctions. En assembleur nous ne les utili- |
||
− | v‚ritables noms de ces fonctions. En assembleur nous ne les utili- |
||
− | serons pas directement puisque l'appel se fait pas un |
+ | serons pas directement puisque l'appel se fait pas un num�ro, mais |
− | en C par exemple c'est ainsi que sont |
+ | en C par exemple c'est ainsi que sont appel�es ces fonctions. Dans |
− | les cours d'assembleur de ST MAG (dont les vertus |
+ | les cours d'assembleur de ST MAG (dont les vertus p�dagogiques |
sont plus que douteuses), nous pouvons lire que les noms de ces |
sont plus que douteuses), nous pouvons lire que les noms de ces |
||
− | fonctions ont |
+ | fonctions ont �t� choisis au hasard et que la fonction Malloc() |
par exemple aurait pu s'appeler Mstroumph(). C'est ridicule! |
par exemple aurait pu s'appeler Mstroumph(). C'est ridicule! |
||
− | Chacun des noms est, comme toujours en informatique, l' |
+ | Chacun des noms est, comme toujours en informatique, l'abr�viation |
− | d'un expression anglo-saxonne qui indique |
+ | d'un expression anglo-saxonne qui indique concr�tement le but ou |
la fonction. Ainsi Malloc signifie Memory Allocation, cette fonc- |
la fonction. Ainsi Malloc signifie Memory Allocation, cette fonc- |
||
− | tion du GEMDOS permet donc de |
+ | tion du GEMDOS permet donc de r�server une partie de m�moire!!! |
− | Malheureusement de nombreux ouvrages passe sur ce ' |
+ | Malheureusement de nombreux ouvrages passe sur ce 'd�tail' et ne |
− | fournissent que l' |
+ | fournissent que l'abr�viation. |
+ | Ceci n'emp�che qu'il vous faut imp�rativement une liste de toutes |
||
− | Ceci n'empˆche qu'il vous faut imp‚rativement une liste de toutes |
||
les fonctions du GEMDOS, du BIOS et du XBIOS. Ces fonctions sont |
les fonctions du GEMDOS, du BIOS et du XBIOS. Ces fonctions sont |
||
+ | d�crites dans le Livre du D�veloppeur, dans la Bible mais �gale- |
||
− | d‚crites dans le Livre du D‚veloppeur, dans la Bible mais ‚gale- |
||
− | ment dans les |
+ | ment dans les derni�res pages de la doc du GFA 3. |
Note: dans la doc du GFA, il manque la fonction GEMDOS 32 qui per- |
Note: dans la doc du GFA, il manque la fonction GEMDOS 32 qui per- |
||
− | met de passer en Superviseur. Ce mode n' |
+ | met de passer en Superviseur. Ce mode n'�tant pour le moment que |
+ | d'un int�r�t limit� pour vous, pas de panique, nous d�crirons tout |
||
− | d'un int‚rˆt limit‚ pour vous, pas de panique, nous d‚crirons tout |
||
− | cela dans la seconde |
+ | cela dans la seconde s�rie. |
Continuons pour le moment avec des petits exemples. |
Continuons pour le moment avec des petits exemples. |
||
− | Affichons une phrase sur l' |
+ | Affichons une phrase sur l'�cran � la place d'un lettre. |
Ceci va se faire avec la programme suivant: |
Ceci va se faire avec la programme suivant: |
||
MOVE.L #MESSAGE,-(SP) adresse du texte |
MOVE.L #MESSAGE,-(SP) adresse du texte |
||
− | MOVE.W #9,-(SP) |
+ | MOVE.W #9,-(SP) num�ro de la fonction |
TRAP #1 appel gemdos |
TRAP #1 appel gemdos |
||
ADDQ.L #6,SP correction pile |
ADDQ.L #6,SP correction pile |
||
Line 338: | Line 338: | ||
* attente d'un appui sur une touche |
* attente d'un appui sur une touche |
||
− | MOVE.W #7,-(SP) |
+ | MOVE.W #7,-(SP) num�ro de la fonction |
TRAP #1 appel GEMDOS |
TRAP #1 appel GEMDOS |
||
ADDQ.L #2,SP correction pile |
ADDQ.L #2,SP correction pile |
||
Line 351: | Line 351: | ||
MESSAGE DC.B "SALUT",0 |
MESSAGE DC.B "SALUT",0 |
||
+ | Une nouveaut�, le passage d'une adresse. En effet la fonction 9 du |
||
− | Une nouveaut‚, le passage d'une adresse. En effet la fonction 9 du |
||
− | gemdos demande comme |
+ | gemdos demande comme param�tre l'adresse de la cha�ne de caract�re |
+ | � afficher. Nous avons donc donn� MESSAGE, qui est le label, |
||
− | … afficher. Nous avons donc donn‚ MESSAGE, qui est le label, |
||
+ | l'�tiquette servant � rep�rer l'emplacement dans le tube o� se |
||
− | l'‚tiquette servant … rep‚rer l'emplacement dans le tube o— se |
||
− | trouve notre phrase, tout comme nous avions mis une |
+ | trouve notre phrase, tout comme nous avions mis une �tiquette |
− | AJOUTE pour |
+ | AJOUTE pour rep�rer notre subroutine, dans le cours pr�c�dent. |
− | Ce message est une suite de lettres, toutes |
+ | Ce message est une suite de lettres, toutes cod�es sur un octets. |
− | Pour cette raison nous disons que cette |
+ | Pour cette raison nous disons que cette cha�ne est une constante |
+ | constitu�e d'octet. Nous d�finissons donc une constante en octets: |
||
− | constitu‚e d'octet. Nous d‚finissons donc une constante en octets: |
||
− | Define Constant Byte, en |
+ | Define Constant Byte, en abr�g� DC.B Attention ceci n'est pas une |
instruction 68000 ! C'est simplement une notation pour l'assem- |
instruction 68000 ! C'est simplement une notation pour l'assem- |
||
bleur afin de lui dire: |
bleur afin de lui dire: |
||
− | n'essaye pas d'assembler |
+ | n'essaye pas d'assembler �a comme du code normal, ce n'est qu'une |
− | constante. De |
+ | constante. De m�me nous d�finissons une zone. |
− | La fonction 9 du GEMDOS demande |
+ | La fonction 9 du GEMDOS demande � ce que la phrase se termine par |
− | 0, ce qui explique sa |
+ | 0, ce qui explique sa pr�sence � la fin. |
+ | R�alisons maintenant un programme suivant le sch�ma suivant: |
||
− | R‚alisons maintenant un programme suivant le sch‚ma suivant: |
||
− | affichage d'un texte de |
+ | affichage d'un texte de pr�sentation en inverse vid�o; |
ce texte demande si on veut quitter ou voir un message |
ce texte demande si on veut quitter ou voir un message |
||
Line 381: | Line 381: | ||
sinon on affiche 'coucou' et on redemande etc... |
sinon on affiche 'coucou' et on redemande etc... |
||
+ | D�taillons un peu plus, en traduisant ce programme en pseudo-code. |
||
− | D‚taillons un peu plus, en traduisant ce programme en pseudo-code. |
||
− | C'est ainsi que l'on nomme la |
+ | C'est ainsi que l'on nomme la fa�on de pr�senter un d�roulement |
+ | d'op�ration en langage clair mais dont l'organisation se rapproche |
||
− | d'op‚ration en langage clair mais dont l'organisation se rapproche |
||
+ | d�j� de la programmation. |
||
− | d‚j… de la programmation. |
||
AFFICHE "QUITTER (Q) OU VOIR LE MESSAGE (V) ?" |
AFFICHE "QUITTER (Q) OU VOIR LE MESSAGE (V) ?" |
||
Line 394: | Line 394: | ||
SI REPONSE DIFFERENTE RETOURNE A AFFICHE "QUITTER..." |
SI REPONSE DIFFERENTE RETOURNE A AFFICHE "QUITTER..." |
||
+ | Par commodit�, ce listing se trouve sur une feuille s�par�e |
||
− | Par commodit‚, ce listing se trouve sur une feuille s‚par‚e |
||
− | (listing |
+ | (listing num�ro 1 / Cours num�ro 7). |
Tout d'abord affichage de la phrase qui servira de menu, avec la |
Tout d'abord affichage de la phrase qui servira de menu, avec la |
||
− | fonction Gemdos 9. Cette phrase se trouve |
+ | fonction Gemdos 9. Cette phrase se trouve � l'�tiquette MENU, al- |
− | lons la voir pour la d |
+ | lons la voir pour la d�tailler. Nous remarquons tout d'abord qu'- |
− | elle commence par 27. |
+ | elle commence par 27. Apr�s avoir regard� dans une table de code |
ASCII, nous notons qu'il s'agit du code ASCII de la touche Escape. |
ASCII, nous notons qu'il s'agit du code ASCII de la touche Escape. |
||
− | Nous cherchons donc d'abord |
+ | Nous cherchons donc d'abord � afficher Escape. Mais, comme vous le |
+ | savez s�rement, ce caract�re n'est pas imprimable! |
||
− | savez s–rement, ce caractŠre n'est pas imprimable! |
||
− | Impossible de l'afficher |
+ | Impossible de l'afficher � l'�cran! |
− | C'est tout |
+ | C'est tout � fait normal! en fait il n'est pas question ici d'af- |
+ | ficher r�ellement un caract�re, mais plut�t de faire appel � un |
||
− | ficher r‚ellement un caractŠre, mais plut“t de faire appel … un |
||
− | ensemble de routines, |
+ | ensemble de routines, r�pondant au nom de VT52. Pour appeler ces |
− | routines, il faut afficher Escape. Voyant cela le |
+ | routines, il faut afficher Escape. Voyant cela le syst�me se dit: |
− | "Tiens, on cherche |
+ | "Tiens, on cherche � afficher Escape, c'est donc en fait que l'on |
− | cherche |
+ | cherche � appeler le VT52". |
+ | L'�mulateur VT52 r�agit donc, mais que doit-il faire ? et bien |
||
− | L'‚mulateur VT52 r‚agit donc, mais que doit-il faire ? et bien |
||
pour le savoir il va regarder la lettre qui suit Escape. En l'oc- |
pour le savoir il va regarder la lettre qui suit Escape. En l'oc- |
||
currence il s'agit ici de E majuscule. Regardez dans les feuilles |
currence il s'agit ici de E majuscule. Regardez dans les feuilles |
||
+ | annexes � cette s�rie de cours, il y en a une consacr�e au VT52. |
||
− | annexes … cette s‚rie de cours, il y en a une consacr‚e au VT52. |
||
− | Nous voyons que Escape suivi de E efface l' |
+ | Nous voyons que Escape suivi de E efface l'�cran, c'est donc ce |
qui va se passer ici. |
qui va se passer ici. |
||
− | Ensuite il |
+ | Ensuite il �tait dit dans le 'cahier des charges' de notre pro- |
− | gramme, que le MENU devait |
+ | gramme, que le MENU devait �tre affich� en inverse vid�o. |
Consultons donc la feuille sur le VT52. Nous y trouvons: Escape et |
Consultons donc la feuille sur le VT52. Nous y trouvons: Escape et |
||
− | 'p' minuscule = passe en |
+ | 'p' minuscule = passe en �criture inverse vid�o. Juste ce qu'il |
nous faut! Nous remettons donc 27,"p" dans notre phrase. |
nous faut! Nous remettons donc 27,"p" dans notre phrase. |
||
Trois remarques: |
Trois remarques: |
||
− | tout d'abord il faut remettre |
+ | tout d'abord il faut remettre � chaque fois Escape. Faire |
− | 27,"E","p" aurait |
+ | 27,"E","p" aurait effac� l'�cran puis aurait affich� p. |
− | Seconde remarque, il faut bien faire la |
+ | Seconde remarque, il faut bien faire la diff�rence entre les let- |
− | tres majuscules et les lettres minuscules. Escape+E efface l' |
+ | tres majuscules et les lettres minuscules. Escape+E efface l'�cran |
mais Escape+e active le curseur!!! |
mais Escape+e active le curseur!!! |
||
+ | Troisi�me remarque, on peut repr�senter dans le listing une lettre |
||
− | TroisiŠme remarque, on peut repr‚senter dans le listing une lettre |
||
− | par son ' |
+ | par son 'caract�re' ou bien par son code ASCII. |
− | Ainsi si on veut afficher Salut, on peut |
+ | Ainsi si on veut afficher Salut, on peut �crire le listing comme |
ceci: |
ceci: |
||
TXT DC.B Salut",0 |
TXT DC.B Salut",0 |
||
ou bien comme cela: |
ou bien comme cela: |
||
TXT DC.B 83,97,108,117,116,0 |
TXT DC.B 83,97,108,117,116,0 |
||
− | Il est de |
+ | Il est de m�me possible de m�langer les donn�es en d�cimal , en |
− | binaire, en |
+ | binaire, en hexad�cimal et les codes ASCII. Par exemple ceci: |
TXT DC.B 65,$42,%1000011,"D",0 |
TXT DC.B 65,$42,%1000011,"D",0 |
||
Line 452: | Line 452: | ||
affichera ABCD si on utilise cette "phrase" avec Gemdos 9. |
affichera ABCD si on utilise cette "phrase" avec Gemdos 9. |
||
− | Ceci vous sera bien utile lorsque vous chercherez |
+ | Ceci vous sera bien utile lorsque vous chercherez � afficher des |
− | lettres difficiles |
+ | lettres difficiles � trouver sur le clavier. Pour le 'o' tr�ma, il |
est possible de faire: |
est possible de faire: |
||
TXT DC.B "A bient",147,"t les amis.",0 |
TXT DC.B "A bient",147,"t les amis.",0 |
||
+ | Note: J'esp�re que depuis le d�but, il n'y en a pas un seul � |
||
− | Note: J'espŠre que depuis le d‚but, il n'y en a pas un seul … |
||
− | avoir lu DC.B " |
+ | avoir lu DC.B "d�c�b�"!!!! Je vous rappelle que cela se lit Define |
Constant Byte. |
Constant Byte. |
||
Continuons l'exploration de notre programme. Notre phrase efface |
Continuons l'exploration de notre programme. Notre phrase efface |
||
+ | donc l'�cran puis passe en inverse vid�o. Viens ensuite le texte |
||
− | donc l'‚cran puis passe en inverse vid‚o. Viens ensuite le texte |
||
− | lui- |
+ | lui-m�me: |
QUITTER (Q) OU VOIR LE MESSAGE (V) ? |
QUITTER (Q) OU VOIR LE MESSAGE (V) ? |
||
− | Ensuite une nouvelle commande VT52 pour repasser en |
+ | Ensuite une nouvelle commande VT52 pour repasser en vid�o normale, |
puis 2 codes ASCII qui, eux non plus, ne sont pas imprimables. Ce |
puis 2 codes ASCII qui, eux non plus, ne sont pas imprimables. Ce |
||
sont les codes de retour chariot. Le curseur va donc se retrouver |
sont les codes de retour chariot. Le curseur va donc se retrouver |
||
+ | tout � gauche de l'�cran, une ligne plus bas. Enfin le 0 indiquant |
||
− | tout … gauche de l'‚cran, une ligne plus bas. Enfin le 0 indiquant |
||
la fin de la phrase. |
la fin de la phrase. |
||
− | Une fois le 'menu' |
+ | Une fois le 'menu' affich�, nous attendons un appui sur une touche |
− | avec la fonction Gemdos |
+ | avec la fonction Gemdos num�ro 7. Cette fonction renvoi dans D0 un |
+ | r�sultat. Ce r�sultat est cod� sur un long mot, comme ceci: |
||
− | r‚sultat. Ce r‚sultat est cod‚ sur un long mot, comme ceci: |
||
− | Bits 0 |
+ | Bits 0 � 7 code ASCII de la touche |
− | Bits 8 |
+ | Bits 8 � 15 mis � z�ro |
− | Bits 16 |
+ | Bits 16 � 23 code clavier |
+ | Bits 24 � 31 Indication des touches de commutation du clavier |
||
− | Bits 24 … 31 Indication des touches de commutation du clavier |
||
(shifts..) |
(shifts..) |
||
− | Dans notre cas nous ne nous |
+ | Dans notre cas nous ne nous int�resserons qu'au code ASCII de la |
+ | touche enfonc�e. Nous allons donc comparer le word de D0 avec cha- |
||
− | touche enfonc‚e. Nous allons donc comparer le word de D0 avec cha- |
||
− | cun des codes ASCII que nous attendons, c'est |
+ | cun des codes ASCII que nous attendons, c'est � dire Q, q, V et v. |
Cette comparaison va se faire avec une nouvelle instruction: |
Cette comparaison va se faire avec une nouvelle instruction: |
||
Compare (CMP). Comme nous comparons un word nous notons CMP.W, que |
Compare (CMP). Comme nous comparons un word nous notons CMP.W, que |
||
Line 492: | Line 492: | ||
pu marquer CMP.W #81,D0 puisque 81 est le code ASCII de Q). |
pu marquer CMP.W #81,D0 puisque 81 est le code ASCII de Q). |
||
− | Cette comparaison |
+ | Cette comparaison effectu�e, il faut la tester. Nous abordons ici |
+ | les possibilit�s de branchement d�pendant d'une condition, c'est- |
||
− | les possibilit‚s de branchement d‚pendant d'une condition, c'est- |
||
+ | �-dire les branchements conditionnels. |
||
− | …-dire les branchements conditionnels. |
||
Chacune de ces instructions commence par la lettre B, signifiant |
Chacune de ces instructions commence par la lettre B, signifiant |
||
− | BRANCH. En clair, ces instructions peuvent |
+ | BRANCH. En clair, ces instructions peuvent �tre lues comme: |
− | Va |
+ | Va � tel endroit si... |
Mais si quoi ??? |
Mais si quoi ??? |
||
Eh bien plusieurs conditions sont disponibles, que l'on peut re- |
Eh bien plusieurs conditions sont disponibles, que l'on peut re- |
||
− | grouper en 3 |
+ | grouper en 3 cat�gories: |
− | D'abord une |
+ | D'abord une cat�gorie qui r�agit � l'�tat d'un des bits du Status |
Register: |
Register: |
||
− | BCC Branch if carry clear (bit de retenue |
+ | BCC Branch if carry clear (bit de retenue � 0) |
− | BCS Branch if carry set (bit de retenue |
+ | BCS Branch if carry set (bit de retenue � 1) |
− | BNE Branch if not equal (bit de |
+ | BNE Branch if not equal (bit de z�ro � 0) |
− | BEQ Branch if equal (bit de |
+ | BEQ Branch if equal (bit de z�ro � 1) |
− | BVC Branch if overflow clear (bit de |
+ | BVC Branch if overflow clear (bit de d�passement � 0) |
− | BVS Branch if overflow set (bit de |
+ | BVS Branch if overflow set (bit de d�passement � 1) |
− | BPL Branch if plus (bit |
+ | BPL Branch if plus (bit n�gatif � 0) |
− | BMI Branch if minus (bit |
+ | BMI Branch if minus (bit n�gatif � 1) |
+ | Une seconde cat�gorie, r�agissant � la comparaison de nombres sans |
||
− | Une seconde cat‚gorie, r‚agissant … la comparaison de nombres sans |
||
signe. |
signe. |
||
− | BHI Branch if higher (branche si |
+ | BHI Branch if higher (branche si sup�rieur �) |
− | BLS Branch if lower or same ( |
+ | BLS Branch if lower or same (inf�rieur ou �gal) |
− | (on peut aussi remettre BEQ et BNE dans cette |
+ | (on peut aussi remettre BEQ et BNE dans cette cat�gorie) |
+ | UNe troisi�me cat�gorie, r�agissant � la comparaison de nombres |
||
− | UNe troisiŠme cat‚gorie, r‚agissant … la comparaison de nombres |
||
avec signe. |
avec signe. |
||
− | BGT Branch if greater than (si |
+ | BGT Branch if greater than (si sup�rieur �) |
− | BGE Branch if greater or equal (si |
+ | BGE Branch if greater or equal (si sup�rieur ou �gal �) |
BLT Branch if lower than (si plus petit que) |
BLT Branch if lower than (si plus petit que) |
||
− | BLE Branch if lower or equal (si plus petit ou |
+ | BLE Branch if lower or equal (si plus petit ou �gal) |
(on peut encore remettre BEQ et BNE!!!) |
(on peut encore remettre BEQ et BNE!!!) |
||
+ | Je suis profond�ment d�sol� pour les gens de MICRO-APPLICATION (Le |
||
− | Je suis profond‚ment d‚sol‚ pour les gens de MICRO-APPLICATION (Le |
||
Langage Machine sur ST, la Bible, le Livre du GEM etc...) ainsi |
Langage Machine sur ST, la Bible, le Livre du GEM etc...) ainsi |
||
− | que pour le journaliste qui |
+ | que pour le journaliste qui �crit les cours d'assembleur dans |
− | STMAG, mais les branchements BHS et BLO, |
+ | STMAG, mais les branchements BHS et BLO, malgr� le fait qu'ils |
+ | soient accept�s par de nombreux assembleurs, N'EXISTENT PAS!!!!! |
||
− | soient accept‚s par de nombreux assembleurs, N'EXISTENT PAS!!!!! |
||
− | Il est donc impossible de les trouver dans un listing |
+ | Il est donc impossible de les trouver dans un listing assembl�, |
l'assembleur les convertissant ou bien les rejetant. |
l'assembleur les convertissant ou bien les rejetant. |
||
Line 549: | Line 549: | ||
Poursuivons notre lente progression dans le listing... |
Poursuivons notre lente progression dans le listing... |
||
− | La comparaison est |
+ | La comparaison est effectu�e, testons la: |
CMP.W #"Q",D0 est-ce la lettre 'Q' ? |
CMP.W #"Q",D0 est-ce la lettre 'Q' ? |
||
BEQ QUITTER branch if equal 'quitter' |
BEQ QUITTER branch if equal 'quitter' |
||
+ | C'est � dire, si c'est �gal, sauter � l'�tiquette QUITTER. |
||
− | C'est … dire, si c'est ‚gal, sauter … l'‚tiquette QUITTER. |
||
− | Si ce n'est pas |
+ | Si ce n'est pas �gal, le programme continue comme si de rien |
+ | n'�tait, et tombe sur un nouveau test: |
||
− | n'‚tait, et tombe sur un nouveau test: |
||
CMP.W #"q",D0 est-ce q minuscule ? |
CMP.W #"q",D0 est-ce q minuscule ? |
||
BEQ QUITTER branch if equal quitter |
BEQ QUITTER branch if equal quitter |
||
− | Nous comparons ensuite |
+ | Nous comparons ensuite � 'V' majuscule et en cas d'�galit�, nous |
+ | sautons � AFFICHAGE. Viens ensuite le test avec 'v' minuscule. L�, |
||
− | sautons … AFFICHAGE. Viens ensuite le test avec 'v' minuscule. L…, |
||
− | c'est l'inverse: Si ce n'est pas |
+ | c'est l'inverse: Si ce n'est pas �gal, retour au d�but puisque |
+ | toutes les possibilit�s ont �t� vues. Par contre, si c'est 'v' qui |
||
− | toutes les possibilit‚s ont ‚t‚ vues. Par contre, si c'est 'v' qui |
||
+ | a �t� appuy�, le programme continuera sans remonter � DEBUT, et |
||
− | a ‚t‚ appuy‚, le programme continuera sans remonter … DEBUT, et |
||
− | tombera de lui |
+ | tombera de lui m�me sur AFFICHAGE. |
L'affichage se fait classiquement avec Gemdos 9. Cet affichage |
L'affichage se fait classiquement avec Gemdos 9. Cet affichage |
||
+ | termin�, il faut remonter au d�but. Ici, pas besoin de test car il |
||
− | termin‚, il faut remonter au d‚but. Ici, pas besoin de test car il |
||
faut absolument remonter. Nous utilisons donc un ordre de branche- |
faut absolument remonter. Nous utilisons donc un ordre de branche- |
||
ment sans condition (inconditionnel) qui se lit BRANCH ALWAYS |
ment sans condition (inconditionnel) qui se lit BRANCH ALWAYS |
||
− | (branchement toujours)et qui s' |
+ | (branchement toujours)et qui s'�crit BRA. |
− | En cas de choix 'Q' ou 'q', il y a saut |
+ | En cas de choix 'Q' ou 'q', il y a saut � QUITTER et donc � la |
fonction Gemdos 0 qui termine le programme. |
fonction Gemdos 0 qui termine le programme. |
||
+ | N'h�sitez pas � modifier ce programme, � essayer d'autres tests, � |
||
− | N'h‚sitez pas … modifier ce programme, … essayer d'autres tests, … |
||
jouer avec le VT52, avant de passer au suivant. |
jouer avec le VT52, avant de passer au suivant. |
||
("Quelques heures passent..." In ('Le manoir de Mortevielle') |
("Quelques heures passent..." In ('Le manoir de Mortevielle') |
||
− | acte 2 |
+ | acte 2 sc�ne III) |
− | Prenons maintenant le listing |
+ | Prenons maintenant le listing num�ro 3. Nous �tudierons le num�ro |
− | 2 en dernier |
+ | 2 en dernier � cause de sa longueur un peu sup�rieure. |
− | Le but de ce listing est de |
+ | Le but de ce listing est de r�aliser un affichage un peu compara- |
+ | ble � celui des horaires dans les gares ou les a�roports: chaque |
||
− | ble … celui des horaires dans les gares ou les a‚roports: chaque |
||
− | lettre n'est pas |
+ | lettre n'est pas affich�e d'un coup mais 'cherch�e' dans l'al- |
phabet. |
phabet. |
||
− | D'abord effacement de l' |
+ | D'abord effacement de l'�cran en affichant Escape et 'E' avec |
Gemdos 9: rien que du classique pour vous maintenant! |
Gemdos 9: rien que du classique pour vous maintenant! |
||
− | Ensuite cela se complique. Nous |
+ | Ensuite cela se complique. Nous pla�ons l'adresse de TXT_FINAL |
− | dans A6. Regardons ce qu'il y a |
+ | dans A6. Regardons ce qu'il y a � cette �tiquette 'TXT_FINAL': |
− | nous y trouvons la phrase |
+ | nous y trouvons la phrase � afficher. |
− | Observons maintenant TRES attentivement ce qui se trouve |
+ | Observons maintenant TRES attentivement ce qui se trouve � |
l'adresse TXT. Nous y voyons 27,"Y",42 . En regardant notre |
l'adresse TXT. Nous y voyons 27,"Y",42 . En regardant notre |
||
− | feuille du VT52 nous voyons que cela correspond |
+ | feuille du VT52 nous voyons que cela correspond � une fonction |
+ | pla�ant le curseur � un endroit pr�cis de l'�cran. Nous constatons |
||
− | pla‡ant le curseur … un endroit pr‚cis de l'‚cran. Nous constatons |
||
aussi 2 choses: |
aussi 2 choses: |
||
− | 1) La commande est |
+ | 1) La commande est incompl�te |
− | 2) Une phrase |
+ | 2) Une phrase affich�e par exemple avec gemdos 9, doit se terminer |
par 0, ce qui ici n'est pas le cas ! |
par 0, ce qui ici n'est pas le cas ! |
||
− | En effet, la phrase est |
+ | En effet, la phrase est incompl�te si on se contente de lire |
cette ligne. Jetons un coup d'oeil sur la ligne suivante. Nous |
cette ligne. Jetons un coup d'oeil sur la ligne suivante. Nous |
||
− | y trouvons 42, qui est peut |
+ | y trouvons 42, qui est peut �tre la suite de la commande (nous |
avons donc escape+Y+42+42), et une ligne encore plus bas nous |
avons donc escape+Y+42+42), et une ligne encore plus bas nous |
||
− | trouvons deux |
+ | trouvons deux z�ros. Nous pouvons remarquer �galement que si la |
− | phrase commence |
+ | phrase commence � l'�tiquette TXT, la seconde ligne poss�de |
+ | �galement une �tiquette ('COLONE') ainsi que la troisi�me ligne |
||
− | ‚galement une ‚tiquette ('COLONE') ainsi que la troisiŠme ligne |
||
('LETTRE'). |
('LETTRE'). |
||
− | Imaginons maintenant que nous ayons une lettre |
+ | Imaginons maintenant que nous ayons une lettre � la place du pre- |
+ | mier z�ro en face de l'�tiquette LETTRE. Si nous affichons cette |
||
− | mier z‚ro en face de l'‚tiquette LETTRE. Si nous affichons cette |
||
− | phrase nous verrons s'afficher cette lettre sur la |
+ | phrase nous verrons s'afficher cette lettre sur la 10�me colonne |
+ | de la 10�me ligne (r�visez la commande Escape+Y sur la feuille du |
||
− | de la 10Šme ligne (r‚visez la commande Escape+Y sur la feuille du |
||
VT52). |
VT52). |
||
− | Imaginons ensuite que nous ajoutions 1 au chiffre se trouvant |
+ | Imaginons ensuite que nous ajoutions 1 au chiffre se trouvant � |
+ | l'�tiquette COLONNE et que nous recommencions l'affichage. Nous |
||
− | l'‚tiquette COLONNE et que nous recommencions l'affichage. Nous |
||
− | verrions notre lettre toujours |
+ | verrions notre lettre toujours 10�me ligne, mais maintenant 11�me |
colonne! |
colonne! |
||
− | C'est ce que nous allons faire, en compliquant d'avantage. |
+ | C'est ce que nous allons faire, en compliquant d'avantage. Pla�ons |
− | le code ASCII 255 (c'est le code maximale |
+ | le code ASCII 255 (c'est le code maximale autoris� puisque les co- |
− | des ASCII sont |
+ | des ASCII sont cod�s sur un byte) � la place du premier z�ro de |
+ | l'�tiquette LETTRE. Nous faisons cela par MOVE.B #255,LETTRE. |
||
− | l'‚tiquette LETTRE. Nous faisons cela par MOVE.B #255,LETTRE. |
||
Ajoutons 1 ensuite au chiffre des colonnes avec ADD.B #1,COLONNE |
Ajoutons 1 ensuite au chiffre des colonnes avec ADD.B #1,COLONNE |
||
ensuite posons nous la question suivante: la lettre que je vais |
ensuite posons nous la question suivante: la lettre que je vais |
||
− | afficher (actuellement de code ASCII 255), est-ce la |
+ | afficher (actuellement de code ASCII 255), est-ce la m�me que |
− | celle de la phrase finale ? Pour le savoir il faut |
+ | celle de la phrase finale ? Pour le savoir il faut pr�lever cette |
− | lettre de cette phrase. Comme nous avons |
+ | lettre de cette phrase. Comme nous avons plac� l'adresse de cette |
− | phrase dans A6, nous |
+ | phrase dans A6, nous pr�levons tout en faisant avancer A6 pour |
pointer sur la seconde lettre. MOVE.B (A6)+,D6 |
pointer sur la seconde lettre. MOVE.B (A6)+,D6 |
||
− | Et si la lettre que nous venons de |
+ | Et si la lettre que nous venons de pr�lever �tait le code ASCII 0? |
− | Cela voudrais donc dire que nous sommes |
+ | Cela voudrais donc dire que nous sommes � la fin de la phrase et |
donc qu'il faut s'en aller!!! Nous comparons donc D6 qui contient |
donc qu'il faut s'en aller!!! Nous comparons donc D6 qui contient |
||
le code ASCII de la lettre, avec 0. |
le code ASCII de la lettre, avec 0. |
||
CMP.B #0,D6 |
CMP.B #0,D6 |
||
− | BEQ FIN si c'est |
+ | BEQ FIN si c'est �gal, bye bye! |
− | Ouf! Ce n'est pas la |
+ | Ouf! Ce n'est pas la derni�re lettre; nous pouvons donc afficher |
notre phrase. Cela se fait avec Gemdos 9, en lui passant l'adresse |
notre phrase. Cela se fait avec Gemdos 9, en lui passant l'adresse |
||
+ | du d�but de la phrase dans la pile. Cette adresse c'est TXT et le |
||
− | du d‚but de la phrase dans la pile. Cette adresse c'est TXT et le |
||
− | Gemdos affichera jusqu' |
+ | Gemdos affichera jusqu'� ce qu'il rencontre 0. Il affichera donc |
− | 27,"Y",42,43,255,0. Ceci |
+ | 27,"Y",42,43,255,0. Ceci �tant fait, comparons la lettre que nous |
− | venons d'afficher, et qui se trouve en face de l' |
+ | venons d'afficher, et qui se trouve en face de l'�tiquette LETTRE |
− | avec celle qui se trouve dans D6 et qui a |
+ | avec celle qui se trouve dans D6 et qui a �t� pr�lev�e dans la |
− | phrase |
+ | phrase mod�le. |
− | Si c'est la |
+ | Si c'est la m�me, nous remontons jusqu'� l'�tiquette PROCHAINE, |
− | nous changeons de colonne, nous |
+ | nous changeons de colonne, nous pr�levons la lettre suivante dans |
− | la phrase |
+ | la phrase mod�le et nous recommen�ons. Mais si ce n'est pas la |
+ | m�me lettre? |
||
− | mˆme lettre? |
||
Et bien nous diminuons de 1 le code ASCII de 'LETTRE' (SUB.B |
Et bien nous diminuons de 1 le code ASCII de 'LETTRE' (SUB.B |
||
− | #1,LETTRE) et nous |
+ | #1,LETTRE) et nous r�-affichons notre phrase qui est maintenant |
27,"Y",42,43,254,0 |
27,"Y",42,43,254,0 |
||
C'est compris ? |
C'est compris ? |
||
− | La aussi c'est une bonne |
+ | La aussi c'est une bonne �tude qui vous permettra de vous en |
sortir. |
sortir. |
||
− | N'abandonner pas ce listing en disant "oh |
+ | N'abandonner pas ce listing en disant "oh �a va j'ai � peu pr�s |
compris" |
compris" |
||
− | il faut PARFAITEMENT COMPRENDRE. N' |
+ | il faut PARFAITEMENT COMPRENDRE. N'h�sitez pas � vous servir de |
− | MONST pour aller voir |
+ | MONST pour aller voir � l'adresse de LETTRE ce qui s'y passe. Pour |
− | avoir les adresses des |
+ | avoir les adresses des �tiquettes, taper L quand vous �tes sous |
− | MONST. Il est tout |
+ | MONST. Il est tout � fait possible de demander � ce que la fen�tre |
+ | m�moire (la 3) pointe sur une partie vous montrant LETTRE et |
||
− | m‚moire (la 3) pointe sur une partie vous montrant LETTRE et |
||
− | COLONE, puis de revenir sur la |
+ | COLONE, puis de revenir sur la fen�tre 2 pour faire avancer pas � |
− | pas le programme. Ceci vous permettra de voir le contenu de la |
+ | pas le programme. Ceci vous permettra de voir le contenu de la m�- |
− | moire se modifier tout en regardant les instructions s' |
+ | moire se modifier tout en regardant les instructions s'ex�cuter. |
− | Il reste un petit point |
+ | Il reste un petit point � �claircir, concernant le mot EVEN qui |
+ | est situ� dans la section data. Nous avons d�j� compris (du moins |
||
− | est situ‚ dans la section data. Nous avons d‚j… compris (du moins |
||
+ | j'esp�re) que l'assembleur ne faisait que traduire en chiffres des |
||
− | j'espŠre) que l'assembleur ne faisait que traduire en chiffres des |
||
instructions, afin que ces ordres soient compris par la machine. |
instructions, afin que ces ordres soient compris par la machine. |
||
− | Nous avons vu |
+ | Nous avons vu �galement que le 68000 n'aimait pas les adresses im- |
paires (du moins nous ne l'avons pas encore vu, et ce n'est pas |
paires (du moins nous ne l'avons pas encore vu, et ce n'est pas |
||
− | plus mal...). Lorsque l'assembleur traduit en chiffre les |
+ | plus mal...). Lorsque l'assembleur traduit en chiffre les mn�moni- |
− | ques, il n'y a pas de souci |
+ | ques, il n'y a pas de souci � se faire, celles-ci sont toujours |
traduites en un nombre pair d'octets. |
traduites en un nombre pair d'octets. |
||
− | Malheureusement ce n'est pas |
+ | Malheureusement ce n'est pas forc�ment le cas avec les datas. En |
− | l'occurrence ici, le label CLS commence |
+ | l'occurrence ici, le label CLS commence � une adresse paire (car |
− | avant lui il n'y a que des |
+ | avant lui il n'y a que des mn�moniques) mais � l'adresse CLS on ne |
− | trouve que 3 octets. Nous en |
+ | trouve que 3 octets. Nous en d�duisons que le label TXT va se |
+ | trouver � une adresse impaire. Pour �viter cela, l'assembleur met |
||
− | trouver … une adresse impaire. Pour ‚viter cela, l'assembleur met |
||
+ | � notre disposition une instruction qui permet d'imposer une |
||
− | … notre disposition une instruction qui permet d'imposer une |
||
adresse paire pour le label suivant, EVEN signifiant pair en |
adresse paire pour le label suivant, EVEN signifiant pair en |
||
Anglais. |
Anglais. |
||
Line 703: | Line 703: | ||
l'assembleur. |
l'assembleur. |
||
+ | G�n�ralement ces ordres sont compris par beaucoup d'assembleurs |
||
− | G‚n‚ralement ces ordres sont compris par beaucoup d'assembleurs |
||
mais il existe parfois des variantes. Ainsi certains assembleurs |
mais il existe parfois des variantes. Ainsi certains assembleurs |
||
+ | demandent � avoir .DATA ou bien DATA et non pas SECTION DATA. De |
||
− | demandent … avoir .DATA ou bien DATA et non pas SECTION DATA. De |
||
+ | m�me pour certains assembleurs, les labels (�tiquettes) doivent |
||
− | mˆme pour certains assembleurs, les labels (‚tiquettes) doivent |
||
+ | �tre imp�rativement suivis de 2 points. Il faut chercher dans la |
||
− | ˆtre imp‚rativement suivis de 2 points. Il faut chercher dans la |
||
doc de son assembleur et faire avec, c'est la seule solution! |
doc de son assembleur et faire avec, c'est la seule solution! |
||
− | Notez cependant que ceci ne change en rien les |
+ | Notez cependant que ceci ne change en rien les mn�moniques! |
− | Passons maintenant au dernier listing de ce cours, le |
+ | Passons maintenant au dernier listing de ce cours, le num�ro 2. |
Ce listing affiche une image Degas dont le nom est inscrit en sec- |
Ce listing affiche une image Degas dont le nom est inscrit en sec- |
||
+ | tion data, � l'�tiquette NOM_FICHIER. Il est bien �vident que ce |
||
− | tion data, … l'‚tiquette NOM_FICHIER. Il est bien ‚vident que ce |
||
− | nom ne doit pas contenir de c |
+ | nom ne doit pas contenir de c c�dille mais plut�t une barre obli- |
+ | que invers�e, que mon imprimante a refus�e d'imprimer! |
||
− | que invers‚e, que mon imprimante a refus‚e d'imprimer! |
||
Seules 2 ou 3 petites choses vous sont inconnues. Tout d'abord |
Seules 2 ou 3 petites choses vous sont inconnues. Tout d'abord |
||
− | l'instruction TST.W (juste |
+ | l'instruction TST.W (juste apr�s l'ouverture du fichier image) |
Cette instruction se lit Test et donc ici on lit: |
Cette instruction se lit Test et donc ici on lit: |
||
Test word D0. |
Test word D0. |
||
− | Cela revient tout simplement |
+ | Cela revient tout simplement � faire CMP.W #0,D0. |
Seconde chose qui vous est encore inconnue, la SECTION BSS. |
Seconde chose qui vous est encore inconnue, la SECTION BSS. |
||
− | Nous avons vu dans les |
+ | Nous avons vu dans les pr�c�dents que les variables initialis�es |
+ | �taient mises dans une SECTION DATA. Et bien les variables non |
||
− | ‚taient mises dans une SECTION DATA. Et bien les variables non |
||
+ | initialis�es sont mises dans une section nomm�e SECTION BSS. Cette |
||
− | initialis‚es sont mises dans une section nomm‚e SECTION BSS. Cette |
||
+ | section poss�de une particularit� int�ressante: les donn�es y fi- |
||
− | section possŠde une particularit‚ int‚ressante: les donn‚es y fi- |
||
gurant ne prennent pas de place sur disque ! |
gurant ne prennent pas de place sur disque ! |
||
Ainsi si vous avez un programme de 3 kiloctets mais que dans ce |
Ainsi si vous avez un programme de 3 kiloctets mais que dans ce |
||
− | programme vous |
+ | programme vous d�sirez r�server 30 kilo pour pouvoir par la suite |
− | y charger |
+ | y charger diff�rentes choses, si vous r�servez en faisant TRUC |
DC.B 30000 votre programme, une fois sur disquette fera 33000 oc- |
DC.B 30000 votre programme, une fois sur disquette fera 33000 oc- |
||
− | tets. Par contre si vous |
+ | tets. Par contre si vous r�servez par TRUC DS.B 30000, votre pro- |
gramme n'occupera que 3 Ko sur le disque. |
gramme n'occupera que 3 Ko sur le disque. |
||
− | Ces directives |
+ | Ces directives plac�es en section BSS sont assez diff�rentes de |
− | celles |
+ | celles plac�s en section data. |
− | TRUC DC.W 16 |
+ | TRUC DC.W 16 r�serve de la place pour 1 word qui est |
− | + | initialis� avec la valeur 16. |
|
− | TRUC DS.W 16 |
+ | TRUC DS.W 16 r�serve de la place pour 16 words. |
− | Il faut bien faire attention |
+ | Il faut bien faire attention � cela, car c'est une faute d'�tour- |
− | derie peu |
+ | derie peu fr�quente mais �a arrive! |
Si on note en section BSS |
Si on note en section BSS |
||
Line 754: | Line 754: | ||
MACHIN DS.W 3 |
MACHIN DS.W 3 |
||
− | Lorsque l'on cherchera le label TRUC et que l'on |
+ | Lorsque l'on cherchera le label TRUC et que l'on �crira des don- |
+ | n�es dedans, ces donn�es ne pourront pas aller DANS truc puisque |
||
− | n‚es dedans, ces donn‚es ne pourront pas aller DANS truc puisque |
||
+ | cette �tiquette ne correspond � rien (0 word de r�serv�) et donc |
||
− | cette ‚tiquette ne correspond … rien (0 word de r‚serv‚) et donc |
||
+ | nous �crirons dans MACHIN, en �crasant par exemple ce que nous y |
||
− | nous ‚crirons dans MACHIN, en ‚crasant par exemple ce que nous y |
||
− | avions |
+ | avions plac� auparavant. |
Bon, normalement vous devez en savoir assez long pour utiliser le |
Bon, normalement vous devez en savoir assez long pour utiliser le |
||
Gemdos, le Bios et le Xbios (je vous rappelle que le Bios s'ap- |
Gemdos, le Bios et le Xbios (je vous rappelle que le Bios s'ap- |
||
− | pelle par le Trap #13, exactement de la |
+ | pelle par le Trap #13, exactement de la m�me mani�re que le Gemdos |
ou le Xbios). |
ou le Xbios). |
||
− | Vous devez donc |
+ | Vous devez donc �tre capable de r�aliser les programmes suivants: |
Demande du nom d'une image. On tape le nom au clavier, puis le |
Demande du nom d'une image. On tape le nom au clavier, puis le |
||
− | programme lit l'image sur la disquette et l'affiche. |
+ | programme lit l'image sur la disquette et l'affiche. Pr�vient et |
− | redemande un autre nom si l'image n'est pas |
+ | redemande un autre nom si l'image n'est pas trouv�e. Si on tape X, |
c'est la fin et on quitte le programme. |
c'est la fin et on quitte le programme. |
||
− | Lecture du premier secteur de la |
+ | Lecture du premier secteur de la premi�re piste de la disquette. |
− | Si le premier octet de ce secteur est |
+ | Si le premier octet de ce secteur est �gale � $61 (c'est le code |
de l'instruction BRA), faire cling cling cling en affichant le |
de l'instruction BRA), faire cling cling cling en affichant le |
||
− | code ASCII 7 (clochette), afficher "disquette |
+ | code ASCII 7 (clochette), afficher "disquette infect�e", attendre |
− | un appui sur une touche et bye bye. Si disquette non |
+ | un appui sur une touche et bye bye. Si disquette non infect�e, af- |
− | ficher "je remercie le |
+ | ficher "je remercie le F�roce Lapin pour ses excellents cours |
− | d'assembleur, super bien faits |
+ | d'assembleur, super bien faits � que d'abord c'est lui le meil- |
leur" et quitter. |
leur" et quitter. |
||
− | Vous pouvez aussi tenter la vaccination, en |
+ | Vous pouvez aussi tenter la vaccination, en effa�ant carr�ment le |
− | premier octet (mettre |
+ | premier octet (mettre � 0 par exemple). |
− | Autre exemple assez |
+ | Autre exemple assez int�ressant � programmer. Vous avez vu dans le |
− | listing 3 comment |
+ | listing 3 comment pr�lever des donn�es situ�es les unes apr�s les |
− | autres dans une |
+ | autres dans une cha�ne: D6 contient bien d'abord F puis E puis R |
− | etc... Imaginez que vous ayez 3 |
+ | etc... Imaginez que vous ayez 3 cha�nes: la premi�re contient des |
− | chiffres correspondant |
+ | chiffres correspondant � la colonne d'affichage, la seconde des |
− | chiffres correspondant |
+ | chiffres correspondant � la ligne et la troisi�me des chiffres |
− | correspondant |
+ | correspondant � la couleurs, ces 3 donn�es au format VT52. |
(regardez Escape+'Y' et Escape+'b' ou Escape+'c'). On met un re- |
(regardez Escape+'Y' et Escape+'b' ou Escape+'c'). On met un re- |
||
gistre d'adresse pour chacune de ces listes, on lit un chiffre de |
gistre d'adresse pour chacune de ces listes, on lit un chiffre de |
||
Line 798: | Line 798: | ||
(27,"Y",X1,X2,27,"b",X3,"*",0) |
(27,"Y",X1,X2,27,"b",X3,"*",0) |
||
+ | X1 �tant le chiffre pr�lev� dans la liste 1 |
||
− | X1 ‚tant le chiffre pr‚lev‚ dans la liste 1 |
||
+ | X2 �tant le chiffre pr�lev� dans la liste 2 |
||
− | X2 ‚tant le chiffre pr‚lev‚ dans la liste 2 |
||
+ | X3 �tant le chiffre pr�lev� dans la liste 3 |
||
− | X3 ‚tant le chiffre pr‚lev‚ dans la liste 3 |
||
− | On affiche donc |
+ | On affiche donc � diff�rentes positions une �toile, de couleur |
+ | diff�rente suivant les affichages. |
||
− | diff‚rente suivant les affichages. |
||
Conseil: Essayez de faire le maximum de petits programmes, afin de |
Conseil: Essayez de faire le maximum de petits programmes, afin de |
||
bien comprendre l'utilisation du VT52, du Gemdos, du Bios et du |
bien comprendre l'utilisation du VT52, du Gemdos, du Bios et du |
||
− | Xbios. Cela vous permettra |
+ | Xbios. Cela vous permettra �galement de vous habituer � commenter |
− | vos programmes, |
+ | vos programmes, � les ordonner, � chasser l'erreur sournoise. |
− | Scrutez attentivement vos programmes |
+ | Scrutez attentivement vos programmes � l'aide de MONST. Pour le |
− | moment les erreurs seront encore |
+ | moment les erreurs seront encore tr�s faciles � trouver, il est |
+ | donc imp�ratif de tr�s tr�s bien vous entra�ner!!! |
||
− | donc imp‚ratif de trŠs trŠs bien vous entraŒner!!! |
||
− | Si un de vos programmes ne tourne pas, prenez votre temps et |
+ | Si un de vos programmes ne tourne pas, prenez votre temps et r�- |
+ | fl�chissez. C'est souvent une erreur ENORME qui est juste devant |
||
− | fl‚chissez. C'est souvent une erreur ENORME qui est juste devant |
||
vous: notez sur papier les valeurs des registres, faites avancer |
vous: notez sur papier les valeurs des registres, faites avancer |
||
+ | pas � pas le programme sous MONST, repensez bien au principe de la |
||
− | pas … pas le programme sous MONST, repensez bien au principe de la |
||
− | pile avec ses avantages mais aussi ses |
+ | pile avec ses avantages mais aussi ses inconv�nients. Utilisez le |
− | principe des subroutines en y passant des |
+ | principe des subroutines en y passant des param�tres afin de tr�s |
− | bien |
+ | bien ma�triser ce principe. |
− | Vous recevrez la seconde |
+ | Vous recevrez la seconde s�rie de cours dans un mois environ. Cela |
− | vous laisse le temps de bosser. Surtout approfondissez, et |
+ | vous laisse le temps de bosser. Surtout approfondissez, et r�sis- |
+ | tez � la tentation de d�sassembler des programmes pour essayez d'y |
||
− | tez … la tentation de d‚sassembler des programmes pour essayez d'y |
||
− | comprendre quelque chose, ou |
+ | comprendre quelque chose, ou � la tentation de prendre de gros |
sources en croyant y trouver des choses fantastiques. Ce n'est pas |
sources en croyant y trouver des choses fantastiques. Ce n'est pas |
||
du tout la bonne solution, au contraire!!! |
du tout la bonne solution, au contraire!!! |
||
Line 831: | Line 831: | ||
Si vraiment vous voulez faire tout de suite un gros trucs, alors |
Si vraiment vous voulez faire tout de suite un gros trucs, alors |
||
faite un traitement de texte. Avec le VT52, le Gemdos et le Bios, |
faite un traitement de texte. Avec le VT52, le Gemdos et le Bios, |
||
+ | c'est tout � fait possible. Bien s�r, il n'y aura pas la souris et |
||
− | c'est tout … fait possible. Bien s–r, il n'y aura pas la souris et |
||
− | il faudra taper le nom du fichier au lieu de cliquer dans le |
+ | il faudra taper le nom du fichier au lieu de cliquer dans le s�- |
− | lecteur, mais imaginez la |
+ | lecteur, mais imaginez la t�te de votre voisin qui frime avec son |
scrolling en comprenant 1 instruction sur 50 quand vous lui annon- |
scrolling en comprenant 1 instruction sur 50 quand vous lui annon- |
||
cerez "Le scrolling c'est pour les petits... moi je fais un trai- |
cerez "Le scrolling c'est pour les petits... moi je fais un trai- |
||
tement de texte!! " |
tement de texte!! " |
||
− | De tout coeur, bon courage Le |
+ | De tout coeur, bon courage Le F�roce Lapin (from 44E) |
− | Sommaire provisoire de la |
+ | Sommaire provisoire de la s�rie 2 |
Reprogrammer les Traps, |
Reprogrammer les Traps, |
||
+ | D�sassemblage et commentaire d'un programme dont nous ne sommes |
||
− | D‚sassemblage et commentaire d'un programme dont nous ne sommes |
||
pas les auteurs, |
pas les auteurs, |
||
− | la |
+ | la m�moire �cran |
les animations (scrolling verticaux, horizontaux, sprites, ...), |
les animations (scrolling verticaux, horizontaux, sprites, ...), |
||
la musique (avec et sans digits, |
la musique (avec et sans digits, |
||
les sound trackers...), |
les sound trackers...), |
||
+ | cr�ation de routines n'utilisant pas le syst�me d'exploitation, |
||
− | cr‚ation de routines n'utilisant pas le systŠme d'exploitation, |
||
le GEM et les ressources etc.... |
le GEM et les ressources etc.... |
||
</pre> |
</pre> |
Revision as of 15:08, 23 November 2023
****************************************************************** * * * COURS D'ASSEMBLEUR 68000 SUR ATARI ST * * * * par Le F�roce Lapin (from 44E) * * * * Cours num�ro 7 * * * ****************************************************************** Nous abordons maintenant le septi�me cours de la s�rie. La totali- t� du cours �tant en 2 s�ries (enfin � l'heure o� je tape ces li- gnes c'est ce qui est pr�vu!), celui-ci est le dernier de la pre- mi�re! A la fin de celui-ci et si vous avez tr�s attentivement et tr�s scrupuleusement suivi les 6 cours pr�c�dents, vous devriez �tre capable d'afficher des images, sauver des fichiers etc... Mais tout d'abord revenons � notre pile et � la question du cours pr�c�dent. Avez vous trouv� l'erreur ? Eh bien regardez la valeur de A7 avant d'y empiler $12345678 et $23456, et comparez � la valeur � la sortie du programme. Malheur! ce n'est pas la m�me! Normal, si nous comptons les empilages et les d�pilages, nous nous rendons compte que nous avons empil� 8 octets de plus que nous n'avons d�pil�. En effet, comme nous avons r�cup�r� nos 2 nombres en sauvegardant au pr�alable A7 dans A0, nous n'avons pas touch� A7 au moment de la r�cup�ration. Heureusement d'ailleurs car le retour de la routine aurait �t� mo- difi�! Partant du principe de d�pilage dans l'ordre inverse, il nous faut donc corriger la pile une fois revenu de la subroutine. Comme nous avons empil� en faisant -(SP) il faut ajouter pour que la pile re- devienne comme avant. Ayant empil� 2 nombres de 4 octets chacuns, nous devons ajouter 8 octets � l'adresse de la pile pour la corri- ger comme il faut. Nous avons d�j� vu comment augmenter une adresse, avec ADDA. Il convient donc de rajouter juste apr�s la ligne BSR AJOUTE une addition sur SP, en faisant ADDA.L #8,SP (qui se lit ADD ADRESS LONG 8 STACK POINTER) Un appel � une subroutine en lui passant des param�tres sur la pile sera donc typiquement du genre: MOVE.W #$1452,-(SP) MOVE.L #$54854,-(SP) MOVE.L #TRUC,-(SP) BSR BIDOUILLE ADDA.L #10,SP Nous passons le word de valeur $1452 dans la pile (modifi�e donc de 2 octets), le long mot de valeur $54854 dans la pile (modifi�e de 4 octets), l'adresse rep�r�e par le label TRUC dans la pile (modifi�e de 4 octets) puis nous partons vers notre subroutine. Au retour correction de 2+4+4=10 octets du stack pointer pour revenir � l'�tat d'origine. La pile poss�de une petite particularit�. Nous avons vu dans les cours pr�c�dents que le 68000 �tait un micro-processeur 16/32 bits. Il lui est tr�s difficile d'acc�der � des adresses impaires. Or si nous commen�ons � empiler des octets et non plus uniquement des words ou des long words, le Stack Pointer peut tr�s facilement pointer sur une adresse impaire, ce qui risque de planter notre machine. Taper le programme suivante: MOVE.L #$12345678,D0 MOVE.L D0,-(SP) MOVE.B D0,-(SP) MOVE.L #$AAAAAAAA,D1 Assemblez puis passez sous MOnst et avancez pas � pas en observant bien l'adresse du SP (donc celle visible en A7). Nous constatons que le pointeur de pile se modifie bien de 4 lors- que nous faisons MOVE.L D0,-(SP) mais qu'il se modifie de 2 lorsque nous faisons MOVE.B D0,-(SP) alors que nous pouvions nous attendre � une modification de 1 ! Les erreurs provoqu�s par des adresses impaires sont donc �cart�es avec la pile . Merci Monsieur MOTOROLA! (Note: ceci est une particularit� des registres A7 et A7'. Si nous avions travaill� avec A3 par exemple au lieu de SP, celui-ci au- rait eu une adresse impaire. C'est le type d'usage qui est fait de la pile qui a conduit les gens de MOTOROLA � cr�er cette diff�- rence.) Abordons maintenant l'ultime chapitre de cette premi�re s�rie: LES 'TRAP' Une instruction TRAP est comparable � une instruction BSR. Elle agit comme un branchement vers une routine. Cependant, contraire- ment � l'instruction BSR qui demande � �tre compl�t�e par l'adresse, c'est-�-dire le label permettant de trouver la routine, l'instruction TRAP se contente d'un num�ro. Ce num�ro peut varier de 0 � 15. Lorsque le 68000 rencontre une instruction TRAP il re- garde son num�ro et agit en cons�quence. Vous vous rappeler des tout premiers cours, dans lesquels nous avions parl� du principe utilis� par le 68000 lorsqu'il trouvait la bit T (mode trace) du SR (status register) � 1 ? Saut dans le premier kilo de m�moire (table des vecteurs d'exceptions), recherche de l'adresse $24, on regarde dans le tube � cette adresse, on y trouve un long mot, ce long mot c'est l'adresse de la routine et on fonce � cette adresse ex�cuter cette routine. Et bien regardez la feuille qui donne la liste des vecteurs d'ex- ceptions, et jetez un coup d'oeil aux vecteurs 32 � 47. Les voil� nos vecteurs TRAP !!! Lorsque le 68000 rencontre par exemple l'instruction TRAP #8, il fonce � l'adresse $0A0 pour y trouver l'adresse de la routine qu'il doit ex�cuter. A priori cela semble bien compliqu� pour pas grand chose! En effet il faut pr�voir sa routine, la mettre en m�moire, puis placer son adresse dans le vecteur. Plus compliqu� qu'un BSR, surtout que BSR REGLAGE_CLAVIER et plus parlant qu'un TRAP #5 ou un TRAP #12 !!! L�, nous retournons encore en arri�re (je vous avais bien dit que TOUT �tait important dans ces cours!!!!!) pour nous souvenir de la notion de mode Utilisateur et de mode Superviseur. Le Superviseur acc�de � toute la m�moire et � toutes les instructions, pas l'Uti- lisateur. S'il s'agit d'interdire � l'Utilisateur des instructions assem- bleur telles que RESET, notre Utilisateur ne sera pas trop g�n� par contre c'est en ce qui concerne la m�moire que tout va tr�s s�rieusement se compliquer. Voulez vous conna�tre la r�solution dans laquelle se trouve votre machine ? C'est facile, c'est not� � l'adresse $FF8260. Vous voulez changer la palette de couleur ? Rien de plus simple, elle est not�e en $FF8240. Imprimer un petit texte ? A l'aise, il suffit d'employer les registres de communications vers l'ext�rieur du chip son (�tonnant n'est ce pas!). C'est situ� en $FF8800 et $FF8802. Pardon ??? Quoi ??? Vous �tes Utilisateur ??? Ah bon.... Parce que c'est g�nant... Toutes ces adresses sont situ�es dans la zone m�- moire uniquement accessible au Superviseur..... L'Utilisateur se trouve bien coinc� et les possibilit�s s'en trou- vent dr�lement r�duites. Heureusement, les TRAP sont l� !!! Gr�ce � ce syst�me l'utilisateur va avoir acc�s � des zones qui lui sont normalement interdites. Pas directement, bien s�r, mais gr�ce au superviseur. Le superviseur a, en effet, fabriqu� des routines qu'il a plac� en m�moire et dont les adresses sont dans les vec- teurs TRAP. Ces routines sont ex�cut�s en mode superviseur et ta- pent � tour de bras dans les zones m�moires prot�g�es. Lorsque l'Utilisateur veut les utiliser il les appelle par les TRAP. La protection est donc bien assur�e car l'Utilisateur ne fait que d�- clencher une routine dont g�n�ralement il ne conna�t que les para- m�tres � lui passer et le type de message qu'il aura en r�ponse. C'est de cette mani�re que nous pouvons acc�der au syst�me d'ex- ploitation de notre Atari !!! Petit rappel: qu'est ce qu'un syst�me d'exploitation ? Le premier qui r�pond c'est GEM se prend une paire de claques. GEM c'est l'interface utilisateur et pas le syst�me d'exploitation. Le syst�me d'exploitation (ou Operating System) dans notre cas c'est TOS. La confusion entre interface Utilisateur et syst�me d'exploitation vient du fait que certains syst�mes d'exploitation int�grent �galement un interface utilisateur: c'est par exemple le cas sur PC avec MS DOS. Le syst�me d'exploitation c'est un ensemble de routine permettant d'exploiter la machine. Ces multiples routines permettent par exemple d'afficher un caract�re � l'�cran d'ouvrir un fichier, de formater une piste de disquette, d'envoyer un octet sur la prise MIDI etc... En fait tous les 'trucs' de base, mais jamais de cho- ses compliqu�es. Une routine du syst�me d'exploitation ne permet- tra pas, par exemple, de lire le contenu d'un fichier se trouvant sur la disquette. En effet ceci demande plusieurs op�rations avec � chaque fois des tests: Ouverture du fichier: existe t-il, la disquette n'est elle pas ab�m�e etc... positionnement du pointeur dans le fichier: le positionnement s'est il bien pass�? Lecture: N'as t-on pas essay� de lire trop d'octets etc, etc.... Il faudra donc bien souvent plusieurs appels � des routines diff�- rentes pour r�aliser ce que l'on veut. Il est toujours possible de se passer du syst�me d'exploitation, sp�cialement lorsque l'on programme en assembleur. En effet l'en- semble des routines de l'OS (abr�viation de Operating System) est destin� � un usage commun, tout comme d'ailleurs les routines de l'interface Utilisateur. Ceci explique bien souvent la r�-�criture de toutes petites par- ties du syst�me afin de n'utiliser que le strict n�cessaire. La routine de gestion souris du GEM par exemple doit s'occuper de la souris mais aussi du clavier, du MIDI et du joystick. Pour un jeu il peut �tre int�ressant de r�-�crire cette routine afin de g�rer uniquement le joystick et donc d'avoir une routine qui 'colle' plus au besoin. Nous verrons beaucoup plus tard comment regarder dans le syst�me d'exploitation afin de pouvoir par la suite r�aliser soi-m�me ses routines. Avant cela, utilisons simplement ce syst�me! Nous allons donc l'appeler gr�ce aux TRAPs. 4 traps sont accessibles 'normalement' dans le ST: TRAP #1 routines du GEMDOS TRAP #2 routines du GEM TRAP #13 routines du BIOS TRAP #14 routines du BIOS �tendu (eXtended Bios donc XBIOS) GEMDOS =Graphic environment manager disk operating system GEM =Graphic environment manager (se d�coupe par la suite en AES, VDI etc.. Un chapitre de la seconde s�rie y sera consacr�e) BIOS =Basic Input Output System XBIOS =Extended Basic Input Output System Les autres vecteurs TRAP (0, 3 � 12 et 15) sont, bien entendu, ac- tifs mais aucune routine n'y est affect�e. Nous pouvons les utili- ser pour peu que nous y mettions avant nos routines, ce qui sera l'objet du premier cours de la seconde s�rie. Nous constatons que le TRAP #1 permet d'appeler le GEMDOS. Or il n'y a pas qu'une routine GEMDOS mais une bonne quantit�. De plus ces routines demandent parfois des param�tres. Comment faire pour les transmettre ? Et bien tout simplement par la pile !!! Taper le programme suivant: MOVE.W #65,-(SP) MOVE.W #2,-(SP) TRAP #1 ADDQ.L #4,SP MOVE.W #7,-(SP) TRAP #1 ADDQ.L #2,SP MOVE.W #0,-(SP) TRAP #1 ADDQ.L #2,SP Assemblez ce programme mais ne le d�buggez pas, lancez le par Alternate+ X. Vous voyez appara�tre un A sur l'�cran de votre ST. Appuyer sur une touche et hop vous revenez dans GENST! Analysons ce que nous avons fait car l� de tr�s tr�s nombreuses choses se sont pass�es, et avouons le, nous n'avons rien vu !!!!! Tout d'abord nous avons appel� la fonction Cconout() du Gemdos. Nous avons appel� le Gemdos avec le TRAP #1, mais cette instruc- tion nous a envoy� vers un ensemble de routine, toutes appartenant au Gemdos. Pour indiquer � cette routine principale vers quelle subroutine du Gemdos nous d�sirons aller, nous avons pass� le nu- m�ro de cette subroutine dans la pile. Partant toujours du prin- cipe du dernier entr� premier sorti, il est bien �vident que ce num�ro doit se trouver empil� en dernier afin de pouvoir �tre d�- pil� en premier par la routine principale de Gemdos, afin qu'elle puisse s'orienter vers la sous-routine qui nous int�resse. La fonction Cconout ayant le num�ro 2, nous avons donc fait MOVE.W #2,-(SP) .(voir plus haut pour se rappeler que 2 peut tr�s bien �tre cod� sur un octet mais, comme nous travaillons vers la pile, il sera pris comme un word de toutes fa�ons). Maintenant le Gemdos ayant trouv� 2 comme param�tre, s'oriente vers cette routine au nom barbare, qui a pour fonction d'afficher un caract�re sur l'�cran. Une fois rendu vers cette routine, le Gemdos va chercher � savoir quel caract�re afficher. C'est pour cela que nous avons plac� le code ASCII de ce caract�re sur la pile avec MOVE.W #65,-(SP). Note: Pour l'assembleur, le code ASCII peut �tre remplac� par la lettre elle-m�me. Nous aurions donc pu �crire MOVE.W #"A",-(SP) sans oublier toutefois les guillemets! De retour du TRAP nous devons corriger la pile, afin d'�viter le probl�me qui a fait l'objet du d�but de ce cours. Nous avions em- pil� un word donc 2 octets et ensuite un autre word soit au total 4 octets. Nous allons donc ajouter 4 au SP. Nous profitons ici d'une op�ration d'addition plus rapide que ADDA, ADDQ qui se lit add quick. Cette addition est autoris�e jusqu'� 8 inclus. Il n'est pas possible par exemple de faire ADDQ.L #12,D1 Ensuite nous recommen�ons le m�me genre de chose, avec la fonction 7 du GEMDOS (nomm�e Crawcin)qui elle n'attend aucun param�tre, c'est pourquoi nous passons juste son num�ro sur la pile. Cette fonction attend un appui sur une touche. Ayant pass� un param�tre sur un word, nous corrigeons au retour du TRAP la pile de 2. Le programme se termine avec la fonction 0 du GEMDOS (Ptermo) qui lib�re la m�moire occup�e par notre programme et le termine pour de bon. Cette routine n'attend pas de param�tre, nous ne passons dans la pile que son num�ro donc correction de 2. Note: la correc- tion de pile pour la fonction Ptermo n'est l� que par souci p�da- gogique. Cette fonction terminant le programme, notre derni�re instruction ADDQ.L #2,SP ne sera jamais atteinte! Plusieurs choses maintenant. D'abord ne soyez pas �tonn�s des noms bizarres des fonctions du GEMDOS, du Bios ou du Xbios. Ce sont les v�ritables noms de ces fonctions. En assembleur nous ne les utili- serons pas directement puisque l'appel se fait pas un num�ro, mais en C par exemple c'est ainsi que sont appel�es ces fonctions. Dans les cours d'assembleur de ST MAG (dont les vertus p�dagogiques sont plus que douteuses), nous pouvons lire que les noms de ces fonctions ont �t� choisis au hasard et que la fonction Malloc() par exemple aurait pu s'appeler Mstroumph(). C'est ridicule! Chacun des noms est, comme toujours en informatique, l'abr�viation d'un expression anglo-saxonne qui indique concr�tement le but ou la fonction. Ainsi Malloc signifie Memory Allocation, cette fonc- tion du GEMDOS permet donc de r�server une partie de m�moire!!! Malheureusement de nombreux ouvrages passe sur ce 'd�tail' et ne fournissent que l'abr�viation. Ceci n'emp�che qu'il vous faut imp�rativement une liste de toutes les fonctions du GEMDOS, du BIOS et du XBIOS. Ces fonctions sont d�crites dans le Livre du D�veloppeur, dans la Bible mais �gale- ment dans les derni�res pages de la doc du GFA 3. Note: dans la doc du GFA, il manque la fonction GEMDOS 32 qui per- met de passer en Superviseur. Ce mode n'�tant pour le moment que d'un int�r�t limit� pour vous, pas de panique, nous d�crirons tout cela dans la seconde s�rie. Continuons pour le moment avec des petits exemples. Affichons une phrase sur l'�cran � la place d'un lettre. Ceci va se faire avec la programme suivant: MOVE.L #MESSAGE,-(SP) adresse du texte MOVE.W #9,-(SP) num�ro de la fonction TRAP #1 appel gemdos ADDQ.L #6,SP correction pile * attente d'un appui sur une touche MOVE.W #7,-(SP) num�ro de la fonction TRAP #1 appel GEMDOS ADDQ.L #2,SP correction pile * fin du programme MOVE.W #0,-(SP) TRAP #1 SECTION DATA MESSAGE DC.B "SALUT",0 Une nouveaut�, le passage d'une adresse. En effet la fonction 9 du gemdos demande comme param�tre l'adresse de la cha�ne de caract�re � afficher. Nous avons donc donn� MESSAGE, qui est le label, l'�tiquette servant � rep�rer l'emplacement dans le tube o� se trouve notre phrase, tout comme nous avions mis une �tiquette AJOUTE pour rep�rer notre subroutine, dans le cours pr�c�dent. Ce message est une suite de lettres, toutes cod�es sur un octets. Pour cette raison nous disons que cette cha�ne est une constante constitu�e d'octet. Nous d�finissons donc une constante en octets: Define Constant Byte, en abr�g� DC.B Attention ceci n'est pas une instruction 68000 ! C'est simplement une notation pour l'assem- bleur afin de lui dire: n'essaye pas d'assembler �a comme du code normal, ce n'est qu'une constante. De m�me nous d�finissons une zone. La fonction 9 du GEMDOS demande � ce que la phrase se termine par 0, ce qui explique sa pr�sence � la fin. R�alisons maintenant un programme suivant le sch�ma suivant: affichage d'un texte de pr�sentation en inverse vid�o; ce texte demande si on veut quitter ou voir un message si on choisit quitter, bye bye sinon on affiche 'coucou' et on redemande etc... D�taillons un peu plus, en traduisant ce programme en pseudo-code. C'est ainsi que l'on nomme la fa�on de pr�senter un d�roulement d'op�ration en langage clair mais dont l'organisation se rapproche d�j� de la programmation. AFFICHE "QUITTER (Q) OU VOIR LE MESSAGE (V) ?" SI REPONSE=Q VA A QUITTER SI REPONSE=V AFFICHE "COUCOU" RETOURNE A AFFICHE "QUITTER...." SI REPONSE DIFFERENTE RETOURNE A AFFICHE "QUITTER..." Par commodit�, ce listing se trouve sur une feuille s�par�e (listing num�ro 1 / Cours num�ro 7). Tout d'abord affichage de la phrase qui servira de menu, avec la fonction Gemdos 9. Cette phrase se trouve � l'�tiquette MENU, al- lons la voir pour la d�tailler. Nous remarquons tout d'abord qu'- elle commence par 27. Apr�s avoir regard� dans une table de code ASCII, nous notons qu'il s'agit du code ASCII de la touche Escape. Nous cherchons donc d'abord � afficher Escape. Mais, comme vous le savez s�rement, ce caract�re n'est pas imprimable! Impossible de l'afficher � l'�cran! C'est tout � fait normal! en fait il n'est pas question ici d'af- ficher r�ellement un caract�re, mais plut�t de faire appel � un ensemble de routines, r�pondant au nom de VT52. Pour appeler ces routines, il faut afficher Escape. Voyant cela le syst�me se dit: "Tiens, on cherche � afficher Escape, c'est donc en fait que l'on cherche � appeler le VT52". L'�mulateur VT52 r�agit donc, mais que doit-il faire ? et bien pour le savoir il va regarder la lettre qui suit Escape. En l'oc- currence il s'agit ici de E majuscule. Regardez dans les feuilles annexes � cette s�rie de cours, il y en a une consacr�e au VT52. Nous voyons que Escape suivi de E efface l'�cran, c'est donc ce qui va se passer ici. Ensuite il �tait dit dans le 'cahier des charges' de notre pro- gramme, que le MENU devait �tre affich� en inverse vid�o. Consultons donc la feuille sur le VT52. Nous y trouvons: Escape et 'p' minuscule = passe en �criture inverse vid�o. Juste ce qu'il nous faut! Nous remettons donc 27,"p" dans notre phrase. Trois remarques: tout d'abord il faut remettre � chaque fois Escape. Faire 27,"E","p" aurait effac� l'�cran puis aurait affich� p. Seconde remarque, il faut bien faire la diff�rence entre les let- tres majuscules et les lettres minuscules. Escape+E efface l'�cran mais Escape+e active le curseur!!! Troisi�me remarque, on peut repr�senter dans le listing une lettre par son 'caract�re' ou bien par son code ASCII. Ainsi si on veut afficher Salut, on peut �crire le listing comme ceci: TXT DC.B Salut",0 ou bien comme cela: TXT DC.B 83,97,108,117,116,0 Il est de m�me possible de m�langer les donn�es en d�cimal , en binaire, en hexad�cimal et les codes ASCII. Par exemple ceci: TXT DC.B 65,$42,%1000011,"D",0 affichera ABCD si on utilise cette "phrase" avec Gemdos 9. Ceci vous sera bien utile lorsque vous chercherez � afficher des lettres difficiles � trouver sur le clavier. Pour le 'o' tr�ma, il est possible de faire: TXT DC.B "A bient",147,"t les amis.",0 Note: J'esp�re que depuis le d�but, il n'y en a pas un seul � avoir lu DC.B "d�c�b�"!!!! Je vous rappelle que cela se lit Define Constant Byte. Continuons l'exploration de notre programme. Notre phrase efface donc l'�cran puis passe en inverse vid�o. Viens ensuite le texte lui-m�me: QUITTER (Q) OU VOIR LE MESSAGE (V) ? Ensuite une nouvelle commande VT52 pour repasser en vid�o normale, puis 2 codes ASCII qui, eux non plus, ne sont pas imprimables. Ce sont les codes de retour chariot. Le curseur va donc se retrouver tout � gauche de l'�cran, une ligne plus bas. Enfin le 0 indiquant la fin de la phrase. Une fois le 'menu' affich�, nous attendons un appui sur une touche avec la fonction Gemdos num�ro 7. Cette fonction renvoi dans D0 un r�sultat. Ce r�sultat est cod� sur un long mot, comme ceci: Bits 0 � 7 code ASCII de la touche Bits 8 � 15 mis � z�ro Bits 16 � 23 code clavier Bits 24 � 31 Indication des touches de commutation du clavier (shifts..) Dans notre cas nous ne nous int�resserons qu'au code ASCII de la touche enfonc�e. Nous allons donc comparer le word de D0 avec cha- cun des codes ASCII que nous attendons, c'est � dire Q, q, V et v. Cette comparaison va se faire avec une nouvelle instruction: Compare (CMP). Comme nous comparons un word nous notons CMP.W, que nous lisons COMPARE WORD. Nous comparons Q avec D0 (nous aurions pu marquer CMP.W #81,D0 puisque 81 est le code ASCII de Q). Cette comparaison effectu�e, il faut la tester. Nous abordons ici les possibilit�s de branchement d�pendant d'une condition, c'est- �-dire les branchements conditionnels. Chacune de ces instructions commence par la lettre B, signifiant BRANCH. En clair, ces instructions peuvent �tre lues comme: Va � tel endroit si... Mais si quoi ??? Eh bien plusieurs conditions sont disponibles, que l'on peut re- grouper en 3 cat�gories: D'abord une cat�gorie qui r�agit � l'�tat d'un des bits du Status Register: BCC Branch if carry clear (bit de retenue � 0) BCS Branch if carry set (bit de retenue � 1) BNE Branch if not equal (bit de z�ro � 0) BEQ Branch if equal (bit de z�ro � 1) BVC Branch if overflow clear (bit de d�passement � 0) BVS Branch if overflow set (bit de d�passement � 1) BPL Branch if plus (bit n�gatif � 0) BMI Branch if minus (bit n�gatif � 1) Une seconde cat�gorie, r�agissant � la comparaison de nombres sans signe. BHI Branch if higher (branche si sup�rieur �) BLS Branch if lower or same (inf�rieur ou �gal) (on peut aussi remettre BEQ et BNE dans cette cat�gorie) UNe troisi�me cat�gorie, r�agissant � la comparaison de nombres avec signe. BGT Branch if greater than (si sup�rieur �) BGE Branch if greater or equal (si sup�rieur ou �gal �) BLT Branch if lower than (si plus petit que) BLE Branch if lower or equal (si plus petit ou �gal) (on peut encore remettre BEQ et BNE!!!) Je suis profond�ment d�sol� pour les gens de MICRO-APPLICATION (Le Langage Machine sur ST, la Bible, le Livre du GEM etc...) ainsi que pour le journaliste qui �crit les cours d'assembleur dans STMAG, mais les branchements BHS et BLO, malgr� le fait qu'ils soient accept�s par de nombreux assembleurs, N'EXISTENT PAS!!!!! Il est donc impossible de les trouver dans un listing assembl�, l'assembleur les convertissant ou bien les rejetant. Cet ensemble de branchement conditionnel constitue un ensemble de commande du type Bcc (branch conditionnaly) Poursuivons notre lente progression dans le listing... La comparaison est effectu�e, testons la: CMP.W #"Q",D0 est-ce la lettre 'Q' ? BEQ QUITTER branch if equal 'quitter' C'est � dire, si c'est �gal, sauter � l'�tiquette QUITTER. Si ce n'est pas �gal, le programme continue comme si de rien n'�tait, et tombe sur un nouveau test: CMP.W #"q",D0 est-ce q minuscule ? BEQ QUITTER branch if equal quitter Nous comparons ensuite � 'V' majuscule et en cas d'�galit�, nous sautons � AFFICHAGE. Viens ensuite le test avec 'v' minuscule. L�, c'est l'inverse: Si ce n'est pas �gal, retour au d�but puisque toutes les possibilit�s ont �t� vues. Par contre, si c'est 'v' qui a �t� appuy�, le programme continuera sans remonter � DEBUT, et tombera de lui m�me sur AFFICHAGE. L'affichage se fait classiquement avec Gemdos 9. Cet affichage termin�, il faut remonter au d�but. Ici, pas besoin de test car il faut absolument remonter. Nous utilisons donc un ordre de branche- ment sans condition (inconditionnel) qui se lit BRANCH ALWAYS (branchement toujours)et qui s'�crit BRA. En cas de choix 'Q' ou 'q', il y a saut � QUITTER et donc � la fonction Gemdos 0 qui termine le programme. N'h�sitez pas � modifier ce programme, � essayer d'autres tests, � jouer avec le VT52, avant de passer au suivant. ("Quelques heures passent..." In ('Le manoir de Mortevielle') acte 2 sc�ne III) Prenons maintenant le listing num�ro 3. Nous �tudierons le num�ro 2 en dernier � cause de sa longueur un peu sup�rieure. Le but de ce listing est de r�aliser un affichage un peu compara- ble � celui des horaires dans les gares ou les a�roports: chaque lettre n'est pas affich�e d'un coup mais 'cherch�e' dans l'al- phabet. D'abord effacement de l'�cran en affichant Escape et 'E' avec Gemdos 9: rien que du classique pour vous maintenant! Ensuite cela se complique. Nous pla�ons l'adresse de TXT_FINAL dans A6. Regardons ce qu'il y a � cette �tiquette 'TXT_FINAL': nous y trouvons la phrase � afficher. Observons maintenant TRES attentivement ce qui se trouve � l'adresse TXT. Nous y voyons 27,"Y",42 . En regardant notre feuille du VT52 nous voyons que cela correspond � une fonction pla�ant le curseur � un endroit pr�cis de l'�cran. Nous constatons aussi 2 choses: 1) La commande est incompl�te 2) Une phrase affich�e par exemple avec gemdos 9, doit se terminer par 0, ce qui ici n'est pas le cas ! En effet, la phrase est incompl�te si on se contente de lire cette ligne. Jetons un coup d'oeil sur la ligne suivante. Nous y trouvons 42, qui est peut �tre la suite de la commande (nous avons donc escape+Y+42+42), et une ligne encore plus bas nous trouvons deux z�ros. Nous pouvons remarquer �galement que si la phrase commence � l'�tiquette TXT, la seconde ligne poss�de �galement une �tiquette ('COLONE') ainsi que la troisi�me ligne ('LETTRE'). Imaginons maintenant que nous ayons une lettre � la place du pre- mier z�ro en face de l'�tiquette LETTRE. Si nous affichons cette phrase nous verrons s'afficher cette lettre sur la 10�me colonne de la 10�me ligne (r�visez la commande Escape+Y sur la feuille du VT52). Imaginons ensuite que nous ajoutions 1 au chiffre se trouvant � l'�tiquette COLONNE et que nous recommencions l'affichage. Nous verrions notre lettre toujours 10�me ligne, mais maintenant 11�me colonne! C'est ce que nous allons faire, en compliquant d'avantage. Pla�ons le code ASCII 255 (c'est le code maximale autoris� puisque les co- des ASCII sont cod�s sur un byte) � la place du premier z�ro de l'�tiquette LETTRE. Nous faisons cela par MOVE.B #255,LETTRE. Ajoutons 1 ensuite au chiffre des colonnes avec ADD.B #1,COLONNE ensuite posons nous la question suivante: la lettre que je vais afficher (actuellement de code ASCII 255), est-ce la m�me que celle de la phrase finale ? Pour le savoir il faut pr�lever cette lettre de cette phrase. Comme nous avons plac� l'adresse de cette phrase dans A6, nous pr�levons tout en faisant avancer A6 pour pointer sur la seconde lettre. MOVE.B (A6)+,D6 Et si la lettre que nous venons de pr�lever �tait le code ASCII 0? Cela voudrais donc dire que nous sommes � la fin de la phrase et donc qu'il faut s'en aller!!! Nous comparons donc D6 qui contient le code ASCII de la lettre, avec 0. CMP.B #0,D6 BEQ FIN si c'est �gal, bye bye! Ouf! Ce n'est pas la derni�re lettre; nous pouvons donc afficher notre phrase. Cela se fait avec Gemdos 9, en lui passant l'adresse du d�but de la phrase dans la pile. Cette adresse c'est TXT et le Gemdos affichera jusqu'� ce qu'il rencontre 0. Il affichera donc 27,"Y",42,43,255,0. Ceci �tant fait, comparons la lettre que nous venons d'afficher, et qui se trouve en face de l'�tiquette LETTRE avec celle qui se trouve dans D6 et qui a �t� pr�lev�e dans la phrase mod�le. Si c'est la m�me, nous remontons jusqu'� l'�tiquette PROCHAINE, nous changeons de colonne, nous pr�levons la lettre suivante dans la phrase mod�le et nous recommen�ons. Mais si ce n'est pas la m�me lettre? Et bien nous diminuons de 1 le code ASCII de 'LETTRE' (SUB.B #1,LETTRE) et nous r�-affichons notre phrase qui est maintenant 27,"Y",42,43,254,0 C'est compris ? La aussi c'est une bonne �tude qui vous permettra de vous en sortir. N'abandonner pas ce listing en disant "oh �a va j'ai � peu pr�s compris" il faut PARFAITEMENT COMPRENDRE. N'h�sitez pas � vous servir de MONST pour aller voir � l'adresse de LETTRE ce qui s'y passe. Pour avoir les adresses des �tiquettes, taper L quand vous �tes sous MONST. Il est tout � fait possible de demander � ce que la fen�tre m�moire (la 3) pointe sur une partie vous montrant LETTRE et COLONE, puis de revenir sur la fen�tre 2 pour faire avancer pas � pas le programme. Ceci vous permettra de voir le contenu de la m�- moire se modifier tout en regardant les instructions s'ex�cuter. Il reste un petit point � �claircir, concernant le mot EVEN qui est situ� dans la section data. Nous avons d�j� compris (du moins j'esp�re) que l'assembleur ne faisait que traduire en chiffres des instructions, afin que ces ordres soient compris par la machine. Nous avons vu �galement que le 68000 n'aimait pas les adresses im- paires (du moins nous ne l'avons pas encore vu, et ce n'est pas plus mal...). Lorsque l'assembleur traduit en chiffre les mn�moni- ques, il n'y a pas de souci � se faire, celles-ci sont toujours traduites en un nombre pair d'octets. Malheureusement ce n'est pas forc�ment le cas avec les datas. En l'occurrence ici, le label CLS commence � une adresse paire (car avant lui il n'y a que des mn�moniques) mais � l'adresse CLS on ne trouve que 3 octets. Nous en d�duisons que le label TXT va se trouver � une adresse impaire. Pour �viter cela, l'assembleur met � notre disposition une instruction qui permet d'imposer une adresse paire pour le label suivant, EVEN signifiant pair en Anglais. Note: Tout comme SECTION DATA, DC.B, DC.W ou DC.L, EVEN n'est pas une instruction du 68000. C'est un ordre qui sera compris par l'assembleur. G�n�ralement ces ordres sont compris par beaucoup d'assembleurs mais il existe parfois des variantes. Ainsi certains assembleurs demandent � avoir .DATA ou bien DATA et non pas SECTION DATA. De m�me pour certains assembleurs, les labels (�tiquettes) doivent �tre imp�rativement suivis de 2 points. Il faut chercher dans la doc de son assembleur et faire avec, c'est la seule solution! Notez cependant que ceci ne change en rien les mn�moniques! Passons maintenant au dernier listing de ce cours, le num�ro 2. Ce listing affiche une image Degas dont le nom est inscrit en sec- tion data, � l'�tiquette NOM_FICHIER. Il est bien �vident que ce nom ne doit pas contenir de c c�dille mais plut�t une barre obli- que invers�e, que mon imprimante a refus�e d'imprimer! Seules 2 ou 3 petites choses vous sont inconnues. Tout d'abord l'instruction TST.W (juste apr�s l'ouverture du fichier image) Cette instruction se lit Test et donc ici on lit: Test word D0. Cela revient tout simplement � faire CMP.W #0,D0. Seconde chose qui vous est encore inconnue, la SECTION BSS. Nous avons vu dans les pr�c�dents que les variables initialis�es �taient mises dans une SECTION DATA. Et bien les variables non initialis�es sont mises dans une section nomm�e SECTION BSS. Cette section poss�de une particularit� int�ressante: les donn�es y fi- gurant ne prennent pas de place sur disque ! Ainsi si vous avez un programme de 3 kiloctets mais que dans ce programme vous d�sirez r�server 30 kilo pour pouvoir par la suite y charger diff�rentes choses, si vous r�servez en faisant TRUC DC.B 30000 votre programme, une fois sur disquette fera 33000 oc- tets. Par contre si vous r�servez par TRUC DS.B 30000, votre pro- gramme n'occupera que 3 Ko sur le disque. Ces directives plac�es en section BSS sont assez diff�rentes de celles plac�s en section data. TRUC DC.W 16 r�serve de la place pour 1 word qui est initialis� avec la valeur 16. TRUC DS.W 16 r�serve de la place pour 16 words. Il faut bien faire attention � cela, car c'est une faute d'�tour- derie peu fr�quente mais �a arrive! Si on note en section BSS TRUC DS.W 0 MACHIN DS.W 3 Lorsque l'on cherchera le label TRUC et que l'on �crira des don- n�es dedans, ces donn�es ne pourront pas aller DANS truc puisque cette �tiquette ne correspond � rien (0 word de r�serv�) et donc nous �crirons dans MACHIN, en �crasant par exemple ce que nous y avions plac� auparavant. Bon, normalement vous devez en savoir assez long pour utiliser le Gemdos, le Bios et le Xbios (je vous rappelle que le Bios s'ap- pelle par le Trap #13, exactement de la m�me mani�re que le Gemdos ou le Xbios). Vous devez donc �tre capable de r�aliser les programmes suivants: Demande du nom d'une image. On tape le nom au clavier, puis le programme lit l'image sur la disquette et l'affiche. Pr�vient et redemande un autre nom si l'image n'est pas trouv�e. Si on tape X, c'est la fin et on quitte le programme. Lecture du premier secteur de la premi�re piste de la disquette. Si le premier octet de ce secteur est �gale � $61 (c'est le code de l'instruction BRA), faire cling cling cling en affichant le code ASCII 7 (clochette), afficher "disquette infect�e", attendre un appui sur une touche et bye bye. Si disquette non infect�e, af- ficher "je remercie le F�roce Lapin pour ses excellents cours d'assembleur, super bien faits � que d'abord c'est lui le meil- leur" et quitter. Vous pouvez aussi tenter la vaccination, en effa�ant carr�ment le premier octet (mettre � 0 par exemple). Autre exemple assez int�ressant � programmer. Vous avez vu dans le listing 3 comment pr�lever des donn�es situ�es les unes apr�s les autres dans une cha�ne: D6 contient bien d'abord F puis E puis R etc... Imaginez que vous ayez 3 cha�nes: la premi�re contient des chiffres correspondant � la colonne d'affichage, la seconde des chiffres correspondant � la ligne et la troisi�me des chiffres correspondant � la couleurs, ces 3 donn�es au format VT52. (regardez Escape+'Y' et Escape+'b' ou Escape+'c'). On met un re- gistre d'adresse pour chacune de ces listes, on lit un chiffre de chaque, on place ce chiffre dans une phrase: (27,"Y",X1,X2,27,"b",X3,"*",0) X1 �tant le chiffre pr�lev� dans la liste 1 X2 �tant le chiffre pr�lev� dans la liste 2 X3 �tant le chiffre pr�lev� dans la liste 3 On affiche donc � diff�rentes positions une �toile, de couleur diff�rente suivant les affichages. Conseil: Essayez de faire le maximum de petits programmes, afin de bien comprendre l'utilisation du VT52, du Gemdos, du Bios et du Xbios. Cela vous permettra �galement de vous habituer � commenter vos programmes, � les ordonner, � chasser l'erreur sournoise. Scrutez attentivement vos programmes � l'aide de MONST. Pour le moment les erreurs seront encore tr�s faciles � trouver, il est donc imp�ratif de tr�s tr�s bien vous entra�ner!!! Si un de vos programmes ne tourne pas, prenez votre temps et r�- fl�chissez. C'est souvent une erreur ENORME qui est juste devant vous: notez sur papier les valeurs des registres, faites avancer pas � pas le programme sous MONST, repensez bien au principe de la pile avec ses avantages mais aussi ses inconv�nients. Utilisez le principe des subroutines en y passant des param�tres afin de tr�s bien ma�triser ce principe. Vous recevrez la seconde s�rie de cours dans un mois environ. Cela vous laisse le temps de bosser. Surtout approfondissez, et r�sis- tez � la tentation de d�sassembler des programmes pour essayez d'y comprendre quelque chose, ou � la tentation de prendre de gros sources en croyant y trouver des choses fantastiques. Ce n'est pas du tout la bonne solution, au contraire!!! Si vraiment vous voulez faire tout de suite un gros trucs, alors faite un traitement de texte. Avec le VT52, le Gemdos et le Bios, c'est tout � fait possible. Bien s�r, il n'y aura pas la souris et il faudra taper le nom du fichier au lieu de cliquer dans le s�- lecteur, mais imaginez la t�te de votre voisin qui frime avec son scrolling en comprenant 1 instruction sur 50 quand vous lui annon- cerez "Le scrolling c'est pour les petits... moi je fais un trai- tement de texte!! " De tout coeur, bon courage Le F�roce Lapin (from 44E) Sommaire provisoire de la s�rie 2 Reprogrammer les Traps, D�sassemblage et commentaire d'un programme dont nous ne sommes pas les auteurs, la m�moire �cran les animations (scrolling verticaux, horizontaux, sprites, ...), la musique (avec et sans digits, les sound trackers...), cr�ation de routines n'utilisant pas le syst�me d'exploitation, le GEM et les ressources etc....
Back to ASM_Tutorial