COURS210.TXT/fr
****************************************************************** * * * COURS D'ASSEMBLEUR 68000 SUR ATARI ST * * * * par Le F�roce Lapin (from 44E) * * * * Seconde s�rie * * * * Cours num�ro 10 * ****************************************************************** Avant de vous fournir la bibliographie tant attendue, je vais vous parler tr�s succinctement des interruptions. Le principe est nor- malement connu (sinon reportez vous au cours num�ro 5 de la pre- mi�re s�rie!). Il y a pourtant un sujet qui m�rite un peu plus d'attention: le MFP68901. Il s'agit d'un circuit reconnu par le 68000 comme ayant un niveau d'interruption de 6 (voir feuille fournie avec le cours 1 et intitul�e "TABLEAU DES VECTEURS D'INTER RUPTIONS DU 68000 ET DU 68901"). En interne ce circuit est capable de g�rer 16 niveaux d'interruption, avec pour chaque niveau une adresse associ�e ($100-$13C pour le ST). Voici un petit bout de listing destin� � vous montrer comment placer sa propre routine dans le Timer A. Il faut d'abord bloquer les interruptions en pla�ant le SR � $2700, sauver les registres du MFP, placer sa routine et ensuite redescendre le niveau d'interruption � son ni- veau habituel sur le ST, c'est � dire $2300. Ceci se fait bien �videmment en mode Superviseur, mode auquel on acc�de avec Gemdos $20. * Pour mettre en place.... MOVE.W #$2700,SR it interdites MOVE.B $FFFFFA07,ANC_IERA sauve les MOVE.B $FFFFFA09,ANC_IERB valeurs du MOVE.B $FFFFFA13,ANC_IMRA MFP 68901 MOVE.B $FFFFFA15,ANC_IMRB MOVE.B $FFFFFA17,ANC_VR MOVE.L $134,ANC_TIMEA sauve Timer A MOVE.L #MY_TIMEA,$134 place nouvelle routine CLR.B $FFFFFA09 emp�che interrupt 0-7 CLR.B $FFFFFA15 masque interrupt 0-7 MOVE.B #%00100000,$FFFA07 OK interrupt 13 (timer A) MOVE.B #%00100000,$FFFA13 OK aussi pour son masque MOVE.B #7,$FFFFFA19 r�gle TACR MOVE.B #12,$FFFFFA1F et TADR (1khz) BCLR #3,$FFFFFA17 automatic end of interupt MOVE.W #$2300,SR autorise interruptions * Et maintenant, lorsque nous quittons le programme... MOVE.W #$2700,SR it interdites MOVE.B ANC_IERA,$FFFFFA07 restitution MOVE.B ANC_IERB,$FFFFFA09 MOVE.B ANC_IMRA,$FFFFFA13 MOVE.B ANC_IMRB,$FFFFFA15 MOVE.B ANC_VR,$FFFFFA17 MOVE.L ANC_TIMEA,$134 MOVE.W #$2300,SR autorise les interruptions * Ma routine Timer A * Ne pas oublier de sauver les registres qui sont utilis�s * et de terminer par un RTE. MY_TIMEA: movem.l d0-a6,-(sp) ' ' ' BCLR #5,ISRA suivant VR !!! MOVEM.L sp)+,d0-a6 RTE *----------------------------------------------------------* SECTION BSS ANC_TIMEA DS.L 1 ANC_IERA DS.B 1 sauvegarde pour le MFP ANC_IERB DS.B 1 " ANC_IMRA DS.B 1 " ANC_IMRB DS.B 1 " ANC_VR DS.B 1 " Je vais simplement vous d�crire les registres IERA, IMRA, IPRA etc... du MFP. Pour de plus amples d�tails, consultez la Bible ST, le Livre du D�veloppeur ou la doc officielle ATARI (l'id�al!), le but de ces cours n'�tant pas d'�tre une recopie des infos que vous pouvez trouver autre part. Tout d'abord les 16 niveaux du MFP sont class�s en 2 groupes. Le A concerne les niveaux 15 � 8 et le B les niveaux 7 � 0. Attention, ici A et B n'ont rien � voir avec les Timers A et B!!! Pour chaque groupe (A ou B) on trouve une s�rie de registres. Dans chacun de ces registres les interruptions sont repr�sent�es par un bit. Voyons ces registres: IERA ($FFFFFA07) et IERB ($FFFFFA09) Interrupt Enable Register A (ou B) En pla�ant � 0 le bit correspondant � une interruption, on interdit celle-ci. Elle ne sera aucunement prise en compte par le MFP. IPRA ($FFFFFA0B) et IPRB ($FFFFFA0D) Interrupt Pending Register A (ou B) Lorsqu'une interruption arrive, le MFP met � 1 le bit correspon- dant � celle-ci dans IPRA (ou IPRB). Cela signale qu'une interrup- tion est en attente. En effet � cause du syst�me de priorit�, il est possible qu'une interruption de haut niveau soit en cours et que pendant ce temps une interruption plus faible se d�clenche. Il faut donc noter cette volont� de se d�clencher, afin qu'une fois fini le traitement de l'interruption prioritaire, le traitement de la plus faible puisse s'effectuer. Il est bien s�r possible de lire IPRA et IPRB afin de d�terminer si une interruption est en attente. Il est aussi possible de met- tre � 0 le bit d'une interruption en attente, afin que celle-ci ne se d�clenche pas. Par contre, le fait de mettre un bit � 1 dans ce registre n'a aucun effet. On se rend ainsi compte que les possiblit�s deviennent d�j� assez nombreuses. Une interruption peut ainsi en scruter une autre de fa�on � obtenir un cycle irr�gulier d'interruption. Il est en plus possible de laisser une interruption se d�clencher juste 'pour voir'. ceci peut se faire en la laissant valide par IERA mais en la masquant avec IMRA. IMRA ($FFFFFA13) et IMRB ($FFFFFA15) Interrupt Mask Register A (et B) Le masquage emp�che une interruption de se d�clencher bien qu'elle soit autoris�e par IERA ou IERB. Ceci peut permettre par exemple � une interruption de niveau 4 de ne pas �tre g�n�e par une inter- ruption de niveau 6. Pour cela, il lui suffit de masquer celle-ci durant son ex�cution. VR ($FFFFFA17) Vector Register Cet octet est un peu sp�cial. Dans notre cas seul le bit 3 nous int�resse, les autres servant au MFP � coder le num�ro de vecteur qui correspond � la source d'interruption. Le bit 3 sert � indi- quer au MFP s'il est en mode Software End of Interrupt ou en mode Automatic End of Interrupt (mode par d�faut). Voyons les explica- tions avec les registres suivants: ISRA ($FFFFFA0F) et ISRB ($FFFFFA11) Interrupt in Service Register A (ou B) Un bit � 1 indique que l'interruption est en cours de traitement. Si nous sommes en mode Software End of Interrupt, c'est � la fin de notre routine en interruption que nous devons indiquer, nous m�me que notre routine est finie. Pour cela il faut mettre � 0 le bit correspondant � notre interruption, dans ISRA (ou ISRB). Tant que ce bit est � 1, les interruptions moins prioritaires ne peu- vent pas venir nous d�ranger. Par contre, d�s que le traitement de notre interruption commence, son bit IPRA est remis automatique- ment � 0, et pendant le traitement de cette interruption, une au- tre de m�me niveau peut tr�s bien intervenir. Le bit d'IPRA sera donc remis � 1, mais cette nouvelle interruption ne sera trait�e que lorsque la premi�re aura remise le bit ISRA � 0. D'un autre c�t�, si nous sommes en mode Automatic End of Inter- rupt, d�s que notre routine s'ex�cute, le MFP met, bien s�r, son bit d'IPRA � 0 (puisque l'interrupt n'est plus en attente), mais met �galement son bit ISRA � 0 ! Il est alors possible que d'au- tres interruptions plus faibles viennent interrompre la premi�re, m�me si elle n'est pas termin�e. Vous voyez qu'avec tout ceci, il est possible de jongler all�gre- ment en envisageant les cas les plus tordus!!! Concernant les ti- mers A, B, C et D, voici juste les adresses permettant de les adresser, les informations fournies dans la bible ou le livre du d�veloppeur �tant largement suffisante. Si par hasard vous �tiez avides d'informations sur ce circuit, pr�cipitez vous chez un li- braire sp�cialis� dans la "litt�rature" �lectronique et demandez un ouvrage sur le MK68901. Passez aussi chez le pharmacien prendre quelques tubes d'aspirine.... Pour terminer ces cours d'assembleur, voici une petite bibliogra- phie afin que vous puissiez diriger vos recherches vers les sujets qui vous int�ressent. Le Langage Machine sur ST (Ed. Micro App). Assez inutile comme bouquin! Tr�s tr�s peu d'informations, non vraiment, ce n'est pas un bon achat. La bible ST (Ed. Micro-App). Devenue assez introuvable, dommage! Pas mal de bonne infos, bien suffisant dans la plupart des cas. A �t� remplac� par le Livre du D�veloppeur. Trucs et Astuces (Ed. Micro-App). A �viter absolument! Les pro- grammes r�alis�s en suivant ces conseils seront s�rement incompa- tibles d�s qu'il y aura changement de TOS. Le Livre du D�veloppeur (Tome 1 et 2) (Ed. Micro App) Si vous n'avez pas acc�s � la doc. pour les d�veloppeurs ayant l'agr�ment Atari, c'est le bouquin qu'il vous faut. On peut regretter les di- zaines de pages contenant le listing du BIOS des STF et les autres dizaines de pages contenant le BIOS du M�ga ST. Cela fait un peu remplissage: soit on a le niveau en assembleur pour y comprendre quelque chose et alors on a le niveau pour suivre le BIOS avec MONST, soit, de toute fa�on, on n'y comprend rien et ce n'est pas parce qu'on a le listing sous les yeux que cela va changer quelque chose. Enfin, c'est mon avis, et comme, en plus, le listing n'est valable que pour les mod�les cit�s, si vous vous y fiez pour "d�couvrir" de nouvelles adresses vous risquez fort d'�tre surpris avec les machines plus r�centes ... Le livre du GEM sur Atari ST (Ed. Micro App). Si vous pensez ap- prendre � programmer GEM avec �a, vous courrez � la catastrophe. Le probl�me du GEM c'est qu'il est utilisable en assembleur � condition de se servir des macros, sinon c'est beaucoup trop lourd. Or dans un livre commercialis�, il est impossible de se borner � un seul assembleur. Ceci fait que les auteurs ont tout d�cortiqu� avec les appels directs au TRAP #2, et que cela devient totalement incompr�hensible pour le d�butant. Par contre, les fonctions y sont relativement bien d�taill�es, et, si vous savez d�j� ce que vous cherchez, ce livre sera un bon outil. On peut, simplement, regretter quelques absence comme les fonctions Escape du GEM et quelques fonctions de l'AES. A noter que ce livre est repris � 99% dans le Livre du D�veloppeur. Doc GFA 3.00. L�, c'est le bon truc! En effet dans les derni�res pages de la doc de ce BASIC, vous trouverez la liste de toutes les fonctions GEMDOS, BIOS et XBIOS (il manque la fonction GEMDOS $20 permettant de passer en Superviseur, �tant donn� qu'elle est inaccessible en GFA), les codes ASCII, les codes clavier et quel- ques pages avant, une bonne liste des fonctions AES. Je dois avouer que j'ai photocopi� ces quelques pages et qu'elles me ser- vent bien souvent: les informations sont suffisantes dans le plu- part des cas, et surtout tr�s faciles � trouver, ce qui n'est pas le cas par exemple du Livre du GEM qui ne comprend m�me pas d'in- dex des fonctions !!! A noter que certaines fonctions du GEM existent dans la biblioth�- que interne du GFA mais ne sont pas disponibles dans celle de DEV- PACK. C'est le cas de Form_Button et Form_Keybd. Et c'est g�nant! En effet au d�but Form_do n'existait pas. Les gens de Digital Re- search ont donc d�cid� de fabriquer de toutes pi�ces cette fonc- tion � partir de Form_Keybd et Fomr_button, et ont diffus� le source en C. Au bout d'un moment, les programmeurs n'ont plus uti- lis� que Form_Do et nous sommes tomb�s dans la routine de gestion de formulaires que nous connaissons actuellement. Si vous voulez faire votre propre Form_do, plus �volu� il "suffit" de reprendre Form_Keybd et Form_button pour recr�er Form_do. Mal- heureusement ces deux fonctions sont tomb�es dans les oubliettes et pour les avoir pffuuuuuttt!!! Vous voulez conna�tre leur opcode et les param�tres ? Facile comme tout! Si vous avez bien suivi ces cours, vous savez plein de chose sur le GEM (o� se place l'opcode d'une fonction, o� est inscrit le nombre de param�tres etc... et bien vous lancez AMonst, puis vous faites un petit bout de GFA qui appelle Form_keybd en affichant au pr�alable sur l'�cran l'adresse du tableau AES, et qui attend en- suite un appui sur une touche. Tout ceci se passe sous l'interpr�- teur du GFA bien s�r! D�s que vous �tes sur l'attente d'un appui touche, vous d�clenchez AMONST (shift+alternate+help) et hop, la grande recherche commence. Vous faites de m�me avec Form_button, et le tour est jou�. Courage, ce n'est pas bien dur, et cela fait un excellent exercice! Mise en oeuvre du 68000 (Ed. Sybex) Excellent bouquin, traitant du 68000 en g�n�ral. Ne vous attendez pas � y trouver des adresses syst�me pour votre ST. On parle, ici, cycles d'horloges, modes d'adressage etc... Implantation des fonctions usuelles en 68000 (Ed. Masson, par Fran�ois BRET). Comment faire des sinus, des cosinus, des trans- form�es de Fourier etc.. . N'est pas vendu avec l'aspirine ni le caf�, mais s'av�re indispensable, si vous vous attaquez aux pro- bl�mes de trigo en ASM. Seulement 191Frs, une mis�re! (Merci � Shizuka de m'avoir fourni la r�f�rence de cet ouvrage!!!!!) STATION INFORMATIQUE 2 rue Pi�mont�si 75018 PARIS t�l:(1)42.55.14.26 Excellent catalogue de Dom-Pubs. Avant de chercher � pirater des softs divers sans en avoir la doc, jetez un coup d'oeil sur leur catalogue. De nombreuses petites choses sont � y d�couvrir (sour- ces divers en ASM, utilitaires de d�buggage etc...) Si vous �tes un adepte de l'�mulation Mac, dans les dom-pub de cette machine se trouve le pack Cyclan, un assembleur Mac avec son �diteur etc... Bien sympa pour d�couvrir cette autre machine, �quip�e elle aussi d'un 68000. Les ST Mags fourmillaient �galement de trucs divers, en tout cas surtout dans les anciens num�ros � mon avis... Voici une petite liste non-limitative... Int�gration d'une ressource en GFA (46) Form Exdo (46) Echantillons sur ST (27,28,29,30,31,35) (En GFA avec de l'assem- bleur, mais le GFA on ne le sent qu'un tout petit peu...) Scrolling en GFA (31 � 45 sauf num�ro 37 et 44) M�me remarque que pour les digits!!! Gestion des disquettes en GFA (13,14,15,16) Programmer GEM (6 � 30 environ) Super! Tout en C mais les appels sont les m�mes et la syntaxe identique � celle de la biblio DEV- PACK! Faites vite une recherche de vos vieux num�ros de ST Mag car pour apprendre le GEM c'est extra!!! Animation en 3D (45,46,49) Pour le moment le dernier article n'est pas sorti... Esp�rons que cela ne fera pas comme le listing per- mettant de booter sur une cartouche....Bien clair, sympa, id�al pour commencer la 3D. Pour les coprocesseurs, 2 articles dans les num�ros 31 et 32. Dans le d�funt First (1ST) il y avait quelques trucs sympa sur le MIDI, le d�compactage des images DEGAS, la cr�ation de ram-disque et de spooler d'imprimante. Atari Mag revient en force en ce moment. Tr�s bon articles sur la programmation graphique du STE. Cela per- met de se faire une id�e sur le BLITTER, les 4096 couleurs etc... C'est en BASIC mais la traduction est facile. (21,22). Etant dans la confidence, je peux vous informer �galement que dans les prochains num�ros d'Atari Mag vous trouverez des articles sur diff�rents sujets avec sources en ASM et en GFA et que ce type d'article devrait durer pas mal de temps. Bon, en r�sum�, achetez tous les mois ST Mag et Atari Mag. Si be- soin est, achetez les � plusieurs, mais faire un gros tas de tou- tes ces revues car c'est une mine d'information importante. Bien souvent les questions qui sont pos�es sur RTEL par exemple trou- vent leur r�ponse dans une lecture des vieux num�ros! Quelques bons classeurs, des intercalaires et vous aurez une documentation �norme pour pas tr�s cher. Je terminerai ces cours en renouvelant l'avertissement concernant la chasse aux listings! Il est pr�f�rable d'avoir quelques bou- quins et des notes sur papier plut�t que 10 m�gas de sources au- quel on ne comprend pas grand chose, et qui de, toute fa�on, sont assez malcommodes � consulter par rapport � des informations �crites! Pour ce qui est des programmes assez gros, pr�parez quelques feuilles � c�t� de vous, pour y noter les noms des routines, des labels, des variables etc... vous vous rendrez vite compte que la principale difficult� de l'assembleur r�side dans le fait que les listings sont tr�s tr�s longs et qu'il est difficile de s'y d�pla- cer pour chercher quelque chose. Programmez proprement, soyez clairs et �vitez si possible les bidouilles. Commentez abondamment vos sources car dans 6 mois lorsqu'il faudra faire une petite mo- dification, vous verrez la diff�rence entre les sources clairs et les autres! Allez, je vous quitte en esp�rant que ces cours vous auront int�- ress�s et qu'ils vous auront donn� go�t � l'assembleur! N'oubliez pas que vous pouvez toujours me contacter sur le 3614 RTEL1 (ou RTEL2) en bal FEROCE LAPIN, et qu'il y a sur ce serveur une rubri- que pour l'assembleur 68000 sur ST, MAC ou AMIGA. Pour acc�der � cette rubrique, tapez *MOT et ENVOI. A bient�t!
Back to ASM_Tutorial