COURS210.TXT/fr: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
Line 4: | Line 4: | ||
* COURS D'ASSEMBLEUR 68000 SUR ATARI ST * |
* COURS D'ASSEMBLEUR 68000 SUR ATARI ST * |
||
* * |
* * |
||
− | * par Le |
+ | * par Le Féroce Lapin (from 44E) * |
* * |
* * |
||
− | * Seconde |
+ | * Seconde série * |
* * |
* * |
||
− | * Cours |
+ | * Cours numéro 10 * |
****************************************************************** |
****************************************************************** |
||
Avant de vous fournir la bibliographie tant attendue, je vais vous |
Avant de vous fournir la bibliographie tant attendue, je vais vous |
||
− | parler |
+ | parler très succinctement des interruptions. Le principe est nor- |
− | malement connu (sinon reportez vous au cours |
+ | 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 |
d'attention: le MFP68901. Il s'agit d'un circuit reconnu par le |
||
68000 comme ayant un niveau d'interruption de 6 (voir feuille |
68000 comme ayant un niveau d'interruption de 6 (voir feuille |
||
− | fournie avec le cours 1 et |
+ | 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 |
RUPTIONS DU 68000 ET DU 68901"). En interne ce circuit est capable |
||
− | de |
+ | de gérer 16 niveaux d'interruption, avec pour chaque niveau une |
− | adresse |
+ | adresse associée ($100-$13C pour le ST). Voici un petit bout de |
− | listing |
+ | listing destiné à vous montrer comment placer sa propre routine |
dans le Timer A. Il faut d'abord bloquer les interruptions en |
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 |
+ | routine et ensuite redescendre le niveau d'interruption à son ni- |
− | veau habituel sur le ST, c'est |
+ | 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. |
$20. |
||
Line 40: | Line 40: | ||
MOVE.L #MY_TIMEA,$134 place nouvelle routine |
MOVE.L #MY_TIMEA,$134 place nouvelle routine |
||
− | CLR.B $FFFFFA09 |
+ | CLR.B $FFFFFA09 empêche interrupt 0-7 |
CLR.B $FFFFFA15 masque interrupt 0-7 |
CLR.B $FFFFFA15 masque interrupt 0-7 |
||
MOVE.B #%00100000,$FFFA07 OK interrupt 13 (timer A) |
MOVE.B #%00100000,$FFFA07 OK interrupt 13 (timer A) |
||
MOVE.B #%00100000,$FFFA13 OK aussi pour son masque |
MOVE.B #%00100000,$FFFA13 OK aussi pour son masque |
||
− | MOVE.B #7,$FFFFFA19 |
+ | MOVE.B #7,$FFFFFA19 règle TACR |
MOVE.B #12,$FFFFFA1F et TADR (1khz) |
MOVE.B #12,$FFFFFA1F et TADR (1khz) |
||
BCLR #3,$FFFFFA17 automatic end of interupt |
BCLR #3,$FFFFFA17 automatic end of interupt |
||
Line 60: | Line 60: | ||
* Ma routine Timer A |
* Ma routine Timer A |
||
− | * Ne pas oublier de sauver les registres qui sont |
+ | * Ne pas oublier de sauver les registres qui sont utilisés |
* et de terminer par un RTE. |
* et de terminer par un RTE. |
||
Line 81: | Line 81: | ||
− | Je vais simplement vous |
+ | Je vais simplement vous décrire les registres IERA, IMRA, IPRA |
− | etc... du MFP. Pour de plus amples |
+ | etc... du MFP. Pour de plus amples détails, consultez la Bible ST, |
− | le Livre du |
+ | le Livre du Développeur ou la doc officielle ATARI (l'idéal!), le |
− | but de ces cours n' |
+ | but de ces cours n'étant pas d'être une recopie des infos que vous |
pouvez trouver autre part. |
pouvez trouver autre part. |
||
− | Tout d'abord les 16 niveaux du MFP sont |
+ | Tout d'abord les 16 niveaux du MFP sont classés en 2 groupes. Le A |
− | concerne les niveaux 15 |
+ | concerne les niveaux 15 à 8 et le B les niveaux 7 à 0. Attention, |
− | ici A et B n'ont rien |
+ | ici A et B n'ont rien à voir avec les Timers A et B!!! Pour chaque |
− | groupe (A ou B) on trouve une |
+ | groupe (A ou B) on trouve une série de registres. Dans chacun de |
− | ces registres les interruptions sont |
+ | ces registres les interruptions sont représentées par un bit. |
Voyons ces registres: |
Voyons ces registres: |
||
IERA ($FFFFFA07) et IERB ($FFFFFA09) |
IERA ($FFFFFA07) et IERB ($FFFFFA09) |
||
Interrupt Enable Register A (ou B) |
Interrupt Enable Register A (ou B) |
||
− | En |
+ | En plaçant à 0 le bit correspondant à une interruption, on |
interdit celle-ci. Elle ne sera aucunement prise en compte par le |
interdit celle-ci. Elle ne sera aucunement prise en compte par le |
||
MFP. |
MFP. |
||
Line 102: | Line 102: | ||
IPRA ($FFFFFA0B) et IPRB ($FFFFFA0D) |
IPRA ($FFFFFA0B) et IPRB ($FFFFFA0D) |
||
Interrupt Pending Register A (ou B) |
Interrupt Pending Register A (ou B) |
||
− | Lorsqu'une interruption arrive, le MFP met |
+ | Lorsqu'une interruption arrive, le MFP met à 1 le bit correspon- |
− | dant |
+ | dant à celle-ci dans IPRA (ou IPRB). Cela signale qu'une interrup- |
− | tion est en attente. En effet |
+ | 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 |
est possible qu'une interruption de haut niveau soit en cours et |
||
− | que pendant ce temps une interruption plus faible se |
+ | que pendant ce temps une interruption plus faible se déclenche. Il |
− | faut donc noter cette |
+ | faut donc noter cette volonté de se déclencher, afin qu'une fois |
fini le traitement de l'interruption prioritaire, le traitement de |
fini le traitement de l'interruption prioritaire, le traitement de |
||
la plus faible puisse s'effectuer. |
la plus faible puisse s'effectuer. |
||
− | Il est bien |
+ | 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- |
si une interruption est en attente. Il est aussi possible de met- |
||
− | tre |
+ | tre à 0 le bit d'une interruption en attente, afin que celle-ci ne |
− | se |
+ | 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 |
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 |
+ | 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 |
+ | Il est en plus possible de laisser une interruption se déclencher |
juste 'pour voir'. ceci peut se faire en la laissant valide par |
juste 'pour voir'. ceci peut se faire en la laissant valide par |
||
IERA mais en la masquant avec IMRA. |
IERA mais en la masquant avec IMRA. |
||
Line 128: | Line 128: | ||
Interrupt Mask Register A (et B) |
Interrupt Mask Register A (et B) |
||
− | Le masquage |
+ | Le masquage empêche une interruption de se déclencher bien qu'elle |
− | soit |
+ | soit autorisée par IERA ou IERB. Ceci peut permettre par exemple à |
− | une interruption de niveau 4 de ne pas |
+ | 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 |
ruption de niveau 6. Pour cela, il lui suffit de masquer celle-ci |
||
− | durant son |
+ | durant son exécution. |
Line 138: | Line 138: | ||
Vector Register |
Vector Register |
||
− | Cet octet est un peu |
+ | 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 |
+ | 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 |
quer au MFP s'il est en mode Software End of Interrupt ou en mode |
||
− | Automatic End of Interrupt (mode par |
+ | Automatic End of Interrupt (mode par défaut). Voyons les explica- |
tions avec les registres suivants: |
tions avec les registres suivants: |
||
Line 149: | Line 149: | ||
Interrupt in Service Register A (ou B) |
Interrupt in Service Register A (ou B) |
||
− | Un bit |
+ | Un bit à 1 indique que l'interruption est en cours de traitement. |
− | Si nous sommes en mode Software End of Interrupt, c'est |
+ | Si nous sommes en mode Software End of Interrupt, c'est à la fin |
de notre routine en interruption que nous devons indiquer, nous |
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 |
+ | bit correspondant à notre interruption, dans ISRA (ou ISRB). Tant |
− | que ce bit est |
+ | que ce bit est à 1, les interruptions moins prioritaires ne peu- |
− | vent pas venir nous |
+ | vent pas venir nous déranger. Par contre, dès que le traitement de |
notre interruption commence, son bit IPRA est remis automatique- |
notre interruption commence, son bit IPRA est remis automatique- |
||
− | ment |
+ | ment à 0, et pendant le traitement de cette interruption, une au- |
− | tre de |
+ | tre de même niveau peut très bien intervenir. Le bit d'IPRA sera |
− | donc remis |
+ | donc remis à 1, mais cette nouvelle interruption ne sera traitée |
− | que lorsque la |
+ | que lorsque la première aura remise le bit ISRA à 0. |
− | D'un autre |
+ | D'un autre côté, si nous sommes en mode Automatic End of Inter- |
− | rupt, |
+ | rupt, dès que notre routine s'exécute, le MFP met, bien sûr, son |
− | bit d'IPRA |
+ | bit d'IPRA à 0 (puisque l'interrupt n'est plus en attente), mais |
− | met |
+ | met également son bit ISRA à 0 ! Il est alors possible que d'au- |
− | tres interruptions plus faibles viennent interrompre la |
+ | 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 |
+ | Vous voyez qu'avec tout ceci, il est possible de jongler allègre- |
ment en envisageant les cas les plus tordus!!! Concernant les ti- |
ment en envisageant les cas les plus tordus!!! Concernant les ti- |
||
mers A, B, C et D, voici juste les adresses permettant de les |
mers A, B, C et D, voici juste les adresses permettant de les |
||
adresser, les informations fournies dans la bible ou le livre du |
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, |
+ | avides d'informations sur ce circuit, précipitez vous chez un li- |
− | braire |
+ | braire spécialisé dans la "littérature" électronique et demandez |
un ouvrage sur le MK68901. Passez aussi chez le pharmacien prendre |
un ouvrage sur le MK68901. Passez aussi chez le pharmacien prendre |
||
quelques tubes d'aspirine.... |
quelques tubes d'aspirine.... |
||
Line 181: | Line 181: | ||
Pour terminer ces cours d'assembleur, voici une petite bibliogra- |
Pour terminer ces cours d'assembleur, voici une petite bibliogra- |
||
phie afin que vous puissiez diriger vos recherches vers les sujets |
phie afin que vous puissiez diriger vos recherches vers les sujets |
||
− | qui vous |
+ | qui vous intéressent. |
Le Langage Machine sur ST (Ed. Micro App). Assez inutile comme |
Le Langage Machine sur ST (Ed. Micro App). Assez inutile comme |
||
− | bouquin! |
+ | bouquin! Très très peu d'informations, non vraiment, ce n'est pas |
un bon achat. |
un bon achat. |
||
La bible ST (Ed. Micro-App). Devenue assez introuvable, dommage! |
La bible ST (Ed. Micro-App). Devenue assez introuvable, dommage! |
||
Pas mal de bonne infos, bien suffisant dans la plupart des cas. A |
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 |
+ | Trucs et Astuces (Ed. Micro-App). A éviter absolument! Les pro- |
− | grammes |
+ | grammes réalisés en suivant ces conseils seront sûrement incompa- |
− | tibles |
+ | tibles dès qu'il y aura changement de TOS. |
− | Le Livre du |
+ | Le Livre du Développeur (Tome 1 et 2) (Ed. Micro App) Si vous |
− | n'avez pas |
+ | 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- |
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 |
zaines de pages contenant le listing du BIOS des STF et les autres |
||
− | dizaines de pages contenant le BIOS du |
+ | 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 |
remplissage: soit on a le niveau en assembleur pour y comprendre |
||
quelque chose et alors on a le niveau pour suivre le BIOS avec |
quelque chose et alors on a le niveau pour suivre le BIOS avec |
||
− | MONST, soit, de toute |
+ | 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 |
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 |
chose. Enfin, c'est mon avis, et comme, en plus, le listing n'est |
||
− | valable que pour les |
+ | 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 |
+ | avec les machines plus récentes ... |
Le livre du GEM sur Atari ST (Ed. Micro App). Si vous pensez ap- |
Le livre du GEM sur Atari ST (Ed. Micro App). Si vous pensez ap- |
||
− | prendre |
+ | prendre à programmer GEM avec ça, vous courrez à la catastrophe. |
− | Le |
+ | Le problème du GEM c'est qu'il est utilisable en assembleur à |
condition de se servir des macros, sinon c'est beaucoup trop |
condition de se servir des macros, sinon c'est beaucoup trop |
||
− | lourd. Or dans un livre |
+ | lourd. Or dans un livre commercialisé, il est impossible de se |
− | borner |
+ | 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 |
+ | totalement incompréhensible pour le débutant. Par contre, les |
− | fonctions y sont relativement bien |
+ | 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 |
simplement, regretter quelques absence comme les fonctions Escape |
||
du GEM et quelques fonctions de l'AES. A noter que ce livre est |
du GEM et quelques fonctions de l'AES. A noter que ce livre est |
||
− | repris |
+ | repris à 99% dans le Livre du Développeur. |
− | Doc GFA 3.00. |
+ | 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 |
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 |
fonctions GEMDOS, BIOS et XBIOS (il manque la fonction GEMDOS $20 |
||
− | permettant de passer en Superviseur, |
+ | permettant de passer en Superviseur, étant donné qu'elle est |
inaccessible en GFA), les codes ASCII, les codes clavier et quel- |
inaccessible en GFA), les codes ASCII, les codes clavier et quel- |
||
ques pages avant, une bonne liste des fonctions AES. Je dois |
ques pages avant, une bonne liste des fonctions AES. Je dois |
||
− | avouer que j'ai |
+ | avouer que j'ai photocopié ces quelques pages et qu'elles me ser- |
vent bien souvent: les informations sont suffisantes dans le plu- |
vent bien souvent: les informations sont suffisantes dans le plu- |
||
− | part des cas, et surtout |
+ | 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 |
+ | le cas par exemple du Livre du GEM qui ne comprend même pas d'in- |
dex des fonctions !!! |
dex des fonctions !!! |
||
− | A noter que certaines fonctions du GEM existent dans la |
+ | A noter que certaines fonctions du GEM existent dans la bibliothè- |
que interne du GFA mais ne sont pas disponibles dans celle de DEV- |
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 |
+ | PACK. C'est le cas de Form_Button et Form_Keybd. Et c'est gênant! |
− | En effet au |
+ | En effet au début Form_do n'existait pas. Les gens de Digital Re- |
− | search ont donc |
+ | search ont donc décidé de fabriquer de toutes pièces cette fonc- |
− | tion |
+ | 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- |
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. |
de formulaires que nous connaissons actuellement. |
||
− | Si vous voulez faire votre propre Form_do, plus |
+ | Si vous voulez faire votre propre Form_do, plus évolué il "suffit" |
− | de reprendre Form_Keybd et Form_button pour |
+ | de reprendre Form_Keybd et Form_button pour recréer Form_do. Mal- |
− | heureusement ces deux fonctions sont |
+ | heureusement ces deux fonctions sont tombées dans les oubliettes |
et pour les avoir pffuuuuuttt!!! |
et pour les avoir pffuuuuuttt!!! |
||
− | Vous voulez |
+ | 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 |
tout! Si vous avez bien suivi ces cours, vous savez plein de chose |
||
− | sur le GEM ( |
+ | sur le GEM (où se place l'opcode d'une fonction, où est inscrit le |
− | nombre de |
+ | 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 |
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' |
+ | suite un appui sur une touche. Tout ceci se passe sous l'interpré- |
− | teur du GFA bien |
+ | teur du GFA bien sûr! Dès que vous êtes sur l'attente d'un appui |
− | touche, vous |
+ | touche, vous déclenchez AMONST (shift+alternate+help) et hop, la |
− | grande recherche commence. Vous faites de |
+ | grande recherche commence. Vous faites de même avec Form_button, |
− | et le tour est |
+ | et le tour est joué. Courage, ce n'est pas bien dur, et cela fait |
un excellent exercice! |
un excellent exercice! |
||
Mise en oeuvre du 68000 (Ed. Sybex) Excellent bouquin, traitant du |
Mise en oeuvre du 68000 (Ed. Sybex) Excellent bouquin, traitant du |
||
− | 68000 en |
+ | 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... |
d'adressage etc... |
||
Implantation des fonctions usuelles en 68000 (Ed. Masson, par |
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 |
+ | Shizuka de m'avoir fourni la référence de cet ouvrage!!!!!) |
− | STATION INFORMATIQUE 2 rue |
+ | STATION INFORMATIQUE 2 rue Piémontési 75018 PARIS |
− | + | tél:(1)42.55.14.26 |
|
− | Excellent catalogue de Dom-Pubs. Avant de chercher |
+ | Excellent catalogue de Dom-Pubs. Avant de chercher à pirater des |
softs divers sans en avoir la doc, jetez un coup d'oeil sur leur |
softs divers sans en avoir la doc, jetez un coup d'oeil sur leur |
||
− | catalogue. De nombreuses petites choses sont |
+ | catalogue. De nombreuses petites choses sont à y découvrir (sour- |
− | ces divers en ASM, utilitaires de |
+ | ces divers en ASM, utilitaires de débuggage etc...) Si vous êtes |
− | un adepte de l' |
+ | un adepte de l'émulation Mac, dans les dom-pub de cette machine se |
− | trouve le pack Cyclan, un assembleur Mac avec son |
+ | trouve le pack Cyclan, un assembleur Mac avec son éditeur etc... |
− | Bien sympa pour |
+ | Bien sympa pour découvrir cette autre machine, équipée elle aussi |
d'un 68000. |
d'un 68000. |
||
− | Les ST Mags fourmillaient |
+ | Les ST Mags fourmillaient également de trucs divers, en tout cas |
− | surtout dans les anciens |
+ | surtout dans les anciens numéros à mon avis... |
Voici une petite liste non-limitative... |
Voici une petite liste non-limitative... |
||
− | + | Intégration d'une ressource en GFA (46) |
|
Form Exdo (46) |
Form Exdo (46) |
||
Echantillons sur ST (27,28,29,30,31,35) (En GFA avec de l'assem- |
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...) |
bleur, mais le GFA on ne le sent qu'un tout petit peu...) |
||
− | Scrolling en GFA (31 |
+ | Scrolling en GFA (31 à 45 sauf numéro 37 et 44) Même remarque que |
pour les digits!!! |
pour les digits!!! |
||
Gestion des disquettes en GFA (13,14,15,16) |
Gestion des disquettes en GFA (13,14,15,16) |
||
− | Programmer GEM (6 |
+ | Programmer GEM (6 à 30 environ) Super! Tout en C mais les appels |
− | sont les |
+ | sont les mêmes et la syntaxe identique à celle de la biblio DEV- |
− | PACK! Faites vite une recherche de vos vieux |
+ | PACK! Faites vite une recherche de vos vieux numéros de ST Mag car |
pour apprendre le GEM c'est extra!!! |
pour apprendre le GEM c'est extra!!! |
||
Animation en 3D (45,46,49) Pour le moment le dernier article n'est |
Animation en 3D (45,46,49) Pour le moment le dernier article n'est |
||
− | pas sorti... |
+ | pas sorti... Espérons que cela ne fera pas comme le listing per- |
− | mettant de booter sur une cartouche....Bien clair, sympa, |
+ | mettant de booter sur une cartouche....Bien clair, sympa, idéal |
pour commencer la 3D. |
pour commencer la 3D. |
||
− | Pour les coprocesseurs, 2 articles dans les |
+ | Pour les coprocesseurs, 2 articles dans les numéros 31 et 32. |
− | Dans le |
+ | Dans le défunt First (1ST) il y avait quelques trucs sympa sur le |
− | MIDI, le |
+ | MIDI, le décompactage des images DEGAS, la création de ram-disque |
et de spooler d'imprimante. |
et de spooler d'imprimante. |
||
Atari Mag revient en force en ce moment. |
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 |
+ | 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). |
C'est en BASIC mais la traduction est facile. (21,22). |
||
− | Etant dans la confidence, je peux vous informer |
+ | Etant dans la confidence, je peux vous informer également que dans |
− | les prochains |
+ | 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. |
d'article devrait durer pas mal de temps. |
||
− | Bon, en |
+ | Bon, en résumé, achetez tous les mois ST Mag et Atari Mag. Si be- |
− | soin est, achetez les |
+ | soin est, achetez les à plusieurs, mais faire un gros tas de tou- |
tes ces revues car c'est une mine d'information importante. Bien |
tes ces revues car c'est une mine d'information importante. Bien |
||
− | souvent les questions qui sont |
+ | souvent les questions qui sont posées sur RTEL par exemple trou- |
− | vent leur |
+ | vent leur réponse dans une lecture des vieux numéros! Quelques |
bons classeurs, des intercalaires et vous aurez une documentation |
bons classeurs, des intercalaires et vous aurez une documentation |
||
− | + | énorme pour pas très cher. |
|
Je terminerai ces cours en renouvelant l'avertissement concernant |
Je terminerai ces cours en renouvelant l'avertissement concernant |
||
− | la chasse aux listings! Il est |
+ | la chasse aux listings! Il est préférable d'avoir quelques bou- |
− | quins et des notes sur papier |
+ | 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 |
+ | quel on ne comprend pas grand chose, et qui de, toute façon, sont |
− | assez malcommodes |
+ | assez malcommodes à consulter par rapport à des informations |
− | + | écrites! |
|
− | Pour ce qui est des programmes assez gros, |
+ | Pour ce qui est des programmes assez gros, préparez quelques |
− | feuilles |
+ | feuilles à côté de vous, pour y noter les noms des routines, des |
labels, des variables etc... vous vous rendrez vite compte que la |
labels, des variables etc... vous vous rendrez vite compte que la |
||
− | principale |
+ | principale difficulté de l'assembleur réside dans le fait que les |
− | listings sont |
+ | 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 |
cer pour chercher quelque chose. Programmez proprement, soyez |
||
− | clairs et |
+ | clairs et évitez si possible les bidouilles. Commentez abondamment |
vos sources car dans 6 mois lorsqu'il faudra faire une petite mo- |
vos sources car dans 6 mois lorsqu'il faudra faire une petite mo- |
||
− | dification, vous verrez la |
+ | dification, vous verrez la différence entre les sources clairs et |
les autres! |
les autres! |
||
− | Allez, je vous quitte en |
+ | 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 |
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- |
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 |
+ | que pour l'assembleur 68000 sur ST, MAC ou AMIGA. Pour accéder à |
− | cette rubrique, tapez *MOT et ENVOI. A |
+ | cette rubrique, tapez *MOT et ENVOI. A bientôt! |
+ | |||
</pre> |
</pre> |
||
Back to [[ASM_Tutorial]] |
Back to [[ASM_Tutorial]] |
Revision as of 12:44, 24 November 2023
****************************************************************** * * * 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