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