Home
COURS D`ASM 68000
Contents
1. kkxkxkxkkxkxkxkxkkkxkxkxkkkkkkkkkkxkkkkkkxkkkkxkxkkkkkkxkkk xkxkkkkkkxkkk kk xkxkkk kk kkxkxkkxkxk Ce chapitre a t rajout alors que j tais en train de r diger le 6 me cours Il m a sembl en effet int ressant de vous fournir des d tails suppl mentaires sur le 68000 Ces informations concernent le brochage de ce micro processeur et peuvent sembler superflues Elles permettent cependant une bien meilleure compr hension des divers ph nom nes Ne vous inqui tez pas si certains termes vous paraissent difficilement compr hensi bles car nous ferons assez souvent appel ce document dans les cours suivants ce qui nous permettra d obtenir des explications au fur et mesure des besoins Le 68000 est compos d une toute petite plaque de silicium laquelle sont connect s des fils eux m mes termin s par de petites broches les pattes C est le nombre de broches qui conditionne la taille du bo tier et non la taille de la pastille de silicium beaucoup plus petite Le bo tier du 68000 fait environ 8 2 cm de long sur 2 3 cm de large et comporte 64 broches que nous allons d crire sommaire ment Par simple souci p dagogique l ordre d explication ne suit pas l ordre num rique Pour chaque broche vous trouverez son nom tel qu il est donn dans les ouvrages sur le 68000 ce m me nom en clair puis la des cription de la broche VCC Voltage constant current Voltage en courant
2. 0101CCCC11001rrr 0 1000rrrilleeeeee 2 DIVU e Dn W 0 23456789AB 2 EOR Dn e BWL 0 2345678 2 EORI e BWL B 2 6 EORI CCR B B 0000101000111100 4 EORI SR p W B 0000101001111100 4 EXG R R L 01 2 EXT Dn WL 2 JMP e 2 JSR e 2 LEA e An L 2 56789A 2 LINK An 1 4 LSw S Dn BWL 0 B 2 LSw e W 2 MOVE e e BWL 2 MOVE CCR e W 2 MOVE e CCR W 0 23456789AB 2 MOVE e SR p W 0 23456789AB 2 MOVE SR e W 2 MOVE USP An p L 1 2 MOVEA e an WL 0123456789AB 2 MOVEC Rc R p L 4 MOVEM RL e WL 01 4 MOVEM e RL WL 23 56789A 4 MOVEP Dn D WL 0 0000sssmmm001ddd 4 MOVEQ Dn L B 00 0111ddd0 4 4 4 444 4 2 MOVES S e p BWL 01 4 MULS e Dn W 0 23456789AB 2 MULU e Dn W 0 23456789AB 2 NBCD e B 2 NEG e BWL 0 0 2345678 0 2345678 01 2 56789A 2 56789A 1 2345678 0123456789AB 0 2345678 0 2345678 0 2345678 1 01 2 45678 01 2345678 0 2345678 0 2345678 LEKE Xk OS 00 x00 SKXKKKXX SKXKKKXXe 00 LL XkKkXO x LXKKXKX 1000rrr01leeeeee 1011rrr100eeeeee 0000101011eeeeee 1100rrrimmmmmrrr 0100100mmm000rrr 0100111011eeeeee 0100111010eeeeee 0100rrrllleeeeee 0100111001010rrr 1110cccwl1i01rrr 1110001wi1eeeeee 00 001ldeadeaseasea LKXKKXKXX LKXKKKXX 0100001011eeeeee
3. mulu 70 or b 4 8 Or w E 4 8 or l 6 amp 12 sub b z 4 8 sub w 8 4 8 sub 1l 6 amp 6 6 12 rajouter le temps de calcul de l adresse effective amp raouter 2 p riodes d horloge pour les modes an dn et imm diat dur e max op dn op an op m addi b 8 12 addi w 8 12 addi l 16 5 20 addq b 4 8 addq w 4 8 8 addq 1 8 8 12 andi b 8 12 andi w 8 5 12 andi l 16 20 cmpi b 8 8 cmpi w 8 8 cmpi l 14 12 eori b 8 12 eori w 8 12 eori l 16 E 20 moveq 4 s z ori b 8 12 32 28 30 24 ori w ori l subi subi subi subq subq subq eza OH 0 clr b clr w clr 1 nbcd neg b neg w neg l negx b negx w negx l not not not scc scc tas tst b tst w tst l cc 22 H rajouter rajouter le 0 e2 o Ah MH H eD temps de calcul registre EE bo Bsoors oo nm 8 A 12 20 12 a 12 20 8 8 8 8 12 de l adresse effective m moire 8 8 12 8 8 8 12 8 8 12 8 8 12 8 8 10 4 4 4 le temps de calcul de l adresse effective registres memoire asr b amp asl b 6 2n asr w amp asl w 6 2n 8 asr l amp asl l 8 2n 1sr b amp 1ls1l b 6 2n 1sr w amp 1lsl w 6 2n 8 lsr l amp 1ls1l 1l 8 2n ror b amp rol b 6 2n ror wW amp rol w 6 2n 8 ror l amp rol l 8 2n roxr b amp roxl b 6 2n roxr w amp roxl w 6 2n 8 roxr l amp roxl l 8 2n
4. 5 cr e une inutilis le jeu de la cha ne d page de basel commandes environnement l Le nom du fichier charger ou ex cuter ptrl et la cha ne du jeu de commandes ptr2 sont des chemins termin s par 0 La cha ne d environnement ptr3 est soit NULL 0L soit un pointeur sur une structure de cha ne de la forme cha ne1 0 cha ne2 0 etc cha ne3 0 o La cha ne d environnement peut tre n importe quel num ro de cha ne finie par un 0 suivie par une cha ne nulle un simple 0 Le programme h rite d une copie de la cha ne d environnement parente si ptr3 est NULL Le mode 0 charge et ex cute chargera le fichier sp cifi composera sa page de base et l ex cutera La valeur retourn e par Pexec sera le code de sortie du processus enfant voir PtermoO et Pterm Le mode 3 charge sans ex cuter chargera le fichier sp cifi composera la page de base et retournera un pointeur sur cette page de base Le programme n est pas ex cut Le mode 4 ex cute seulement re oit un pointeur sur une page de base Le programme commence son ex cution au d but de la zone de texte comme sp cifi dans la page de base Le mode 5 cr ation d une page de base allouera le plus grand bloc libre de m moire et cr era la plus grande partie de sa page de base Quelques entr es comme la taille des zones de texte donn es initialis es donn es non initialis es et l
5. 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
6. 09 Cconws Ecrit une cha ne sur la sortie standard void Cconws cha ne char cha ne crit une cha ne d butant cha ne et finissant par 0 sur la sortie standard Ken nn mn nn ne eue nf aA ai aa aas iaa a aA A a aea a a a a e a E a a a 0A Cconrs Lit une cha ne sur l entr e standard void Cconrs buf char buf Lit une cha ne sur l entr e standard Les caract res de contr le habituels sont interpr t s J Fin de ligne SH Efface le dernier caract re SU AX Efface la ligne enti re R Recopie la ligne SC Fini le programme Le premier caract re de buf contient le nombre maximum d octets lire taille du tampon moins deux En sortie le deuxi me octet contient le nombre de caract res lus La cha ne se trouve entre buf 2 et buf 2 bufl 1 Il n est pas garanti que la cha ne se finisse par 0 REMARQUE Plante sur les fins de fichiers Le E E Y E E EEE E ENE EE E S S TE E O E E NEES EEN 0B Cconis Teste l tat de l entr e standard WORD Cconis Retourne FFFF si un caract re est disponible sur l entr e standard 0000 sinon mm E E O SE E P 0E Dsetdrv Fixe le lecteur de disque par d faut LONG Dsetdrv drv WORD drv Fixe le disque drv par d faut Les disques sont rang s de 0 15 A P Retourne dans D0 L la carte des disques actifs bit 0 A bit 1 B etc Un disque actif est un disque partir duquel un catalogue a
7. Nous allons donc utiliser ce type de transfert pour sauvegarder DO Mais r fl chissons encore un peu MOVE L D0 SP va bien placer le contenu du long mot D0 dans le tube mais si nous voulons pla cer une autre valeur sur la pile celle ci va craser notre pre mi re valeur car avec MOVE L D0 SP l adresse indiqu par SP donc A7 ne va pas tre modifi e ce qui devrait tre le cas Nous allons donc r aliser le transfert diff remment en fait nous allons encore am liorer notre vocabulaire puisque nous allons parler maintenant de type ou de mode d adressage Nous allons faire MOVE L D0 SP C est le mode d adressage avec pr d cr mentation Derri re ce vo cabulaire pompeux se cache toute une suite d v nements En une seul instruction nous diminuons l adresse du pointeur de pile de 4 puisque dans notre exemple nous voulions transf rer un long mot donc 4 octets et nous pla ons en m moire cette adresse le long mot DO Pour r cup rer D0 c est dire d piler il faudra faire MOVE L D0 SP Comme nous avions d cr ment le pointeur de pile pour ensuite d poser D0 cette adresse nous r cup rons donc D0 sans oublier en suite de modifier le pointeur de pile dans l autre sens pour qu il retrouve son ancienne position Notons que dans le cas pr sent et si nous nous contentons de r fl chir tr s sommairement il aurait t possible de sauver D0 par MOVE L D0 SP et de le r cup
8. l endroit m me qui l a appel Eh bien le 68000 va justement utiliser la pile pour noter ce lieu de retour Cette pile a bien sur une adresse o se trouve t elle not e En A7 Et oui ce registre un peu sp cial correspond la pile Mais A7 alors Et bien c est aussi une pile mais r serv e au mode Superviseur Ainsi si nous faisions tourner conjointement 2 programmes l un en mode utilisateur et l autre en superviseur chacun aurait sa pile Avant d ex cuter la ligne BSR AJOUTE observons attentivement les registres d adresses et les registres de donn es Nous avons vu que les registres qu ils soient de donn es ou d adresse peuvent contenir des nombres cod s sur 32 bits Nous avons vu aussi qu il existait 2 sortes de nombres pour la machine ceux se trouvant l int rieur du tube et ceux ce trouvant l ext rieur CONTRE ce tube et indiquant une sorte de distance par rapport au d but de celui ci Ce second type de nombre est appel adresse Or il est tout fait possible de stocker un nombre repr sentant une adresse dans un registre de donn es D0 D7 Imaginons maintenant que nous devions stocker le score d un joueur dans le jeu que nous programmons Ce score va par exemple tre plac dans la m moire dans le tube l adresse 80792 Mais que se passera t il si nous transf rons cette adresse pour l utiliser gr ce Al par exemple et bien Al va prendre la valeur 80792 C est bien joli mais
9. 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
10. BWL 0123456789AB 2345678 k kxx 1101rrroooeeeeee 2 ADDA e An WL 0123456789AB 1 1101rrroooeeeeee 2 ADDI e BWL B 0 2345678 k xXx x 0000011011eeeeee 2 6 ADDQ e BWL B 012345678 XXkX 0101 011eeeeee 2 ADDX S Dn V BWL 0 4 0 4 ERKAK 1101ddd11100msss 2 AND e Dn BWL 0 23456789AB 0 2345678 00 1100rrroooeeeeee 2 ANDI e BWL B 0 2345678 00 0000001011eeeeee 2 6 ANDI CCR B B SXKKKYK 0000001000111100 4 ANDI SR p W B LAKKKYX 0000001001111100 4 ASw S Dn BWL 0 B 0 2 kkxx 1110cccwl1100rrr 2 ASw e W 2345678 x 1110000wlleeeeee 2 Bcc label BW anae 0110CCCCDDDDDDDD 2 4 BCHG S e B L 0 B 0 2345678 0000rrri0leeeeee 2 6 BCLR S e B L 0 B 0 2345678 LESIE 0000rrril0eeeeee 2 4 BRA label BW TERRES 01100000DDDDDDDD 2 4 BSET S e B L 0 B 0 2345678 S sk 0000rrrilleeeeee 2 4 BSR label BW Ses 01100001DDDDDDDD 2 4 BTST s e B L 0 B 0 23456789AB 0000rrri00eeeeee 2 4 CHK e Dn W 2 CLR e BWL 2 CMP e Dn BWL 2 CMPA e An WL 2 CMPI e BWL 2 6 CMPM S D BWL 1011ddd111001sss 2 DBcc Dn 1bl1 W 4 DIVS e Dn W retour au VOLUME 1 0 23456789AB 0 0 2345678 0123456789AB 0 0123456789AB 1 0 2345678 0 23456789AB 0 UUU 0100rrr110eeeeee 0100 0100001011eeeeee k x 1011rrroooeeeeee kkx 1011rrroooeeeeee B x 0000110011eeeeee KXKXkKX
11. rajouter le temps de calcul de l adresse effective n est le nombre de rotations ou de d calages successifs dynamique dynamique statique statique registre mmemoire registre memoire bchg b 8 12 bchg 1 8 12 5 bclr b 8 12 bcilr l 10 14 8 12 8 12 bset bset btst btst eor Hyo rajouter le temps de calcul de l adresse effective dur e max branchement pas de effectu branchement 10 8 10 12 10 E 10 bsr 18 bsr 18 dbcc cc 1 12 dbcc cc 0 10 14 bec bcc bra bra u rnrunr ran an an an 16 an d8 an xi abs w abs l d16 pc d8 pc xi jmp 8 10 14 10 12 10 14 jsr 16 18 22 18 20 18 22 lea 4 8 12 8 12 8 12 pea 12 16 20 16 20 16 20 movem w 12 4n 12 4n 16 4n 18 4n 16 4n 20 4n 16 4n 18 4n m gt r movem l 12 8n 12 8n 18 8n m gt r movem w 8 4n T 8 4n 12 4n 14 4n 12 4n 16 4n 16 8n 18 8n 16 8n 20 8n 16 8n r gt m movem l 8 8n E 8 8n 12 8n 14 8n 12 8n 16 8n r gt m n est le nombre de transferts de registra effectuer op dn dn op m m addx b 4 18 addx w 4 18 addx l 8 30 cmpm b 12 cmpm w 12 cmpm 1l 20 subx b 4 18 subx w 4 18 subx l 8 30 abcd 6 18 sbcd 6 18 68000 68000 r gt m m gt r movep w 16 16 movep l 24 24 68000 68000 registre m moire andi to ccr 20 andi to sr 20 chk sans trap 10 eori to ccr 20 5 eori to sr 20 E exg 6 z ext 4 link 16
12. 8 8 20 an 10 10 22 d16 an 12 12 24 d8 an xi 14 14 26 abs w 12 12 24 abs 1 16 16 28 d16 pc 12 12 24 d8 pc x1 14 14 26 imm 8 8 20 move l dn an abs w abs l dn 4 4 20 an 4 4 20 an 12 12 28 an 12 12 28 an 14 14 30 d16 an 16 16 32 d8 an xi 18 18 34 abs w 16 16 12 14 12 16 14 an 12 12 14 16 18 16 20 16 18 12 an 12 12 20 20 22 24 26 24 an 12 12 14 16 18 16 20 16 18 12 an 12 12 20 20 22 24 26 24 an 12 12 14 16 18 16 20 16 18 12 an 12 12 20 20 22 24 26 24 d16 an 12 12 16 16 18 20 22 20 24 20 22 16 d16 an 16 16 24 24 26 28 30 28 d8 an xi 14 12 14 12 18 16 18 16 20 18 22 20 24 22 22 20 26 24 22 20 24 22 18 16 d8 an xi 18 16 18 16 26 24 26 24 28 26 30 28 32 30 30 28 32 abs l 20 20 28 28 28 32 34 36 d16 pc 16 16 24 24 24 28 30 32 d8 pc xl 18 18 26 26 26 30 32 34 imm 12 12 20 20 20 24 26 28 op ea an op ea dn op dn m add b 4 8 add w 8 4 8 add 1 6 amp 6 6 12 and b 4 8 and w 4 8 and 1l 6 amp 12 cmp b x 4 cmp w 6 4 cmp 1l 6 6 E divs 158 divu 140 eor D 4 8 eor w 4 8 eor l 8 12 muls 70
13. DO apr s retrait de 3B vaut 0 qui est donc pair Appuyez sur F3 m me chose car D0 vaut 2 Par contre un appui sur F2 se solde par 3 bombes et le retour DEVPACK D buggons donc notre pro gramme alternate D et descendons jusqu la ligne MOVE W O A0 D0 W D1 Pla ons cette ligne en haut de la fen tre 1 et tapons control B Un breakpoint s y met Lan ons avec control R et tapons sur la touche F2 Breakpoint nous revoici sous MONST En regardant la valeur de A0 nous connaissons l adresse de notre tableau adresse paire en l occurrence Par contre si vous avez appuyez sur F2 vous devez avoir 1 comme valeur de D0 donc une valeur impaire Avancez d un pas sur MOVE W O AO0 D0 W D1 l aide Control z Erreur d adresse Il ne vous reste plus qu quitter par Control C Bon nous avons vu comment pr lever un word ou un byte dans un tableau Avec un tout petit peu d intelligence vous devez tre capable de pr lever un long mot au lieu de faire un MULU par 2 on en fait un par 4 Prenons un peu de recul et rappelons nous des cours pr c dents nous y avons tudi le principe de ce tube de cette m moire que nous commen ons utiliser abondamment Si vous avez un peu de m moire justement vous devez vous rappeler d une remarque faite au tout d but disant qu il fallait bien se m fier de confondre contenu du tube et adresse de ce contenu Il est en effet tout fait possible d avoir IMAGE incbin A MAISON PI1 PT
14. t fait REMARQUE Le GEMDOS ne supporte que 16 disques bits 0 15 Les syst mes ult rieurs en supporteront 32 Re en te 10 Cconos Teste l tat de la sortie standard WORD Cconos Renvoie FFFF si la console est pr te recevoir un caract re 0000 si la console n est PAS pr te pa Er EE E EE EE E A E ETSE E E E E E E E ns A E A N E E N E E EO E O E E E 11 Cprnos Teste l tat de la sortie standard PRN WORD Cprnos Retourne FFFF si PRN est pr t recevoir un caract re 0000 sinon A ai a i E a R a ja e A a d e a aa a aG a N a A a R a a O a E a a A a A a a a A j a a a a a A D A A R O S a a l k a e a 12 Cauxis Teste l tat de l entr e standard AUX WORD Cauxis Retourne FFFF si un caract re est disponible sur l entr e AUX identificateur 1 0000 sinon M E A APEE EE E EE S E EEEE E EEE E E EEE EE S 13 Cauxos Teste l tat de la sortie standard AUX WORD Cauxos Renvoie FFFF si AUX identificateur 1 est pr t recevoir un caract re 0000 sinon Ke en em 19 Dgetdrv Recherche le lecteur de disque par d faut WORD Dgetdrv Retourne le num ro du lecteur courant compris entre 0 et 15 1A Fsetdta Fixe l adresse du DTA Disk Transfer Adress void Fsetdta adr char adr Fixe l adresse du DTA adr Le tampon de stockage des donn es sur un fichier DTA ne sert que pour les fonctions Fsfirst et Fsnext D er mn D E EE D E AE E E d fe 20 Super Cha
15. 0100010011eeeeee 0100011011eeeeee 0100000011eeeeee 010011100110wrrr 00l11rrr001eeeeee 010011100111101w Rrrrcocococococo 0100100011eeeeee 0100110011eeeeee 0000111011eeeeee Rrrrw00000000000 00 x00 SXUEU LKKXKXXX 1100rrr11leeeeee 1100rrr011eeeeee 0100100000eeeeee 0100010011eeeeee NEGX e BWL 0 2345678 kkkx x 0100000011eeeeee 2 NOP See 0100111001110001 2 NOT e BWL 0 2345678 00 0100011011eeeeee 2 OR e Dn BWL 0 23456789AB 0 2345678 00 1000rrroooeeeeee 2 ORI e BWL B 0 2345678 00 0000000011eeeeee 2 6 ORI CCR B B LXXKXKXX 0000000000111100 4 ORI SR p W B LXXKXKXEX 0000000001111100 4 PEA e L 2 56789A 0100100001eeeeee 2 RESET P 0100111001110000 2 ROw S D BWL 0 B 0 0 1110cccwllillrrr 2 ROw e W 2345678 0 1110011wl1eeeeee 2 ROwX S D BWL 0 B 0 kk0 1110cccwllil0rrr 2 ROwX e W 2345678 k kx0 1110010wileeeeee 2 RTD W B 0100111001110100 4 RTE p TEREKE 0100111001110011 2 RTR TREES 0100111001110111 2 RTS 5 0100111001110101 2 SBCD S D v B 0 4 0 4 UXU 1000rrr10000mrrr Scc e B 0 2345678 0101CCCClleeeeee 2 STOP p W B L KKKYX 0100111001110010 4 SUB e Dn BWL 0123456789AB 2345678 XXkx 1001rrroo0oeeeeee 2 SUBA e An WL 0123456789AB 1 1001rrroooeeeeee 2
16. 7 transfert d un bloc de bit 8 transfert de matrice de caract re 9 visualisation de la souris 10 non visualisation de la souris 11 transformation de la forme de la souris 12 lt effacement de sprite 13 affichage de sprite 14 copie de zone FDB 15 remplissage de zone Nous avons r pondu la premi re question qu est ce que a fait Nous pouvons passer la suivante comment l appelle t on Un appel ligne A se fait l aide d un word Le poids faible de ce word contient le num ro de la fonction et le poids fort est quivalent A d o le nom ligne A Ainsi pour appeler la fonction 3 on utilisera le word A003 Mais o le placer Et bien tout simplement dans notre programme Pour pouvoir le noter tel quel nous le ferons pr c der de DC W de fa on ce que DEVPACK ne cherche pas transformer ceci en code 68000 puisqu aucune mn monique ne correspond ce nombre Pour appeler la fonction 1 de la ligne A nous mettrons donc dans notre programme DC W A001 Note si cela vous int resse vous pouvez suivre les appels ligne A de la m me mani re que les appels Trap sous MONST en tout cas si vous avez une des derni res versions de MONST Question suivante comment passer des param tres En effet si nous voulons utiliser par exemple la fonction 2 pour conna tre la couleur d un pixel il faudra bien fournir les coordonn es de celui ci Nous avons vu avec Gemdos Bios et Xbios que
17. 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 7 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 pou
18. 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
19. Lorsque Xbios 3 aura donn l adresse de l cran pla cez la fen tre 3 sur cette adresse puis continuez faire avancer pas pas le programme pour voir la recopie se faire De temps en temps tapez sur la touche V afin de voir l cran au lieu de MONST vous pourrez ainsi suivre l affichage en direct Autre petit exercice Le ST poss de la particularit d avoir en quelque sorte 2 crans l cran sur lequel on travaille Xbios 2 et celui que l on voit Xbios 3 Dans la plupart des cas il s agit du m me mais il est tout fait possible de les placer des endroits diff rents de la m moire et ainsi de pr parer un affichage dans xbios2 tout en montrant Xbios3 Il sera ainsi possible d afficher rapidement Xbios2 en le transf rant dans Xbios3 et ainsi de faire des animations rapides Essayez donc de changer un peu le listing et de mettre MOVE W 2 SP la place de 3 pour la recherche de l cran D buggez le programme et constatez Mais ceci nous loigne un peu du sujet qui tait l inclusion Pour r aliser ceci nous avons juste fourni un label de rep rage qui est ici IMAGE puis l instruction INCBIN suivi du chemin pour trouver cette image Dans l exemple c est une image PI3 mais rien ne vous emp che de mettre une image PI2 ou PI1 Nous aurions tr s bien pu mettre 2 images l une la suite de l autre sans mettre de label pour rep rer la seconde Pour pointer dessus sachant qu une image DEGAS fait 3206
20. SUBI e BWL B 0 2345678 kkkx x 0000010011eeeeee 2 6 SUBQ e BWL B 012345678 xx x 0101 1lleeeeee 2 SUBX S D v BWL 0 4 0 4 EEKE RS 1001ddd11100msss 2 SWAP Dn W 0 00 0100100001000rrr 2 TAS e B 0 2345678 00 0100101011eeeeee 2 TRAP B 010011100100 4 2 TRAPV H Sreres 0100111001110110 2 TST e BWL 0 2345678 00 0100101011eeeeee 2 UNLK An 1 0100111001011rrr 2 RE Quand on travaille avec An seules les op rations en word ou en long word sont possibles Mode 0O data 1l m moire ou 01000 Dn 01001 An 10001 1es 2 s Source d Destination p privil gi e o Op mode B W L v Equal addressing modes 000 001 010 Dn e gt Dn Operands may be swapped 100 101 110 e Dn gt e l Taille 00 B 01 W 10 L e Effective address Donn e imm diate c Count or register w Direction 0 droit 1 gauche LA D Q Count what 0 imm 1 register Condition D placement R Type de registre 0 data U Undefined value 1 adresse 11 01 B 11 W 10 L Addr mode Mode Reg C Bin s u flags C Bin s u flags p 0 Dn 000 n CC 0100 s C LS 0011 u c z 1 An 001 n CS 0101 s c LT 1101 s n V N v 2 An 010 n EQ 0111 u Z MI 1011 s n 3 An 011 n F 0001 u 0 NE 0110 u Z 4 An 100 n GE 1100 s n v N V PL 1010 s N 5 d An 101 n GT 1110 s n v Z N V Z T 0000 u 1 6 d An Xi 110 n HI 0010 s C Zz VC 1000 u V 7 Ab
21. TRAP 14 Xbios ADDQ L 6 SP MOVE W DO A4 sauvegarde de la couleur DBF D4 ICI et on passe la suivante MOVEM L SP D0 D4 A0 A4 RTS ANC_PAL DC L 0 0 0 0 0 0 0 0 REMET_PALETTE MOVEM L D0 D4 A0 A4 SP LEA ANC_PAL A4 ptn sur le lieu de sauvegarde MOVE W 15 D4 16 couleurs ICI MOVE W A4 SP demande de couleurs MOVE W D4 SP num ro de la couleur MOVE W 7 SP Setcolor TRAP 14 Xbios ADDQ L 6 SP DBF D4 ICI et on passe la suivante MOVEM L SP D0 D4 A0 A4 RTS Voici donc 2 routines Tout d abord sachant qu un appel Xbios ne sauve pas les registres D0 D3 et A0 A3 nous utilisons D4 et A4 pour le compteur de couleur et l adresse de sauvegarde ce qui explique aussi la sauvegarde sur la pile au d but des deux routines La premi re sauvegarde la palette et la met l adresse ANC_PAL Nous constatons que cette adresse se trouve entre les 2 routines En effet plusieurs solutions s offrent nous D abord la plus conomique en taille c est de mettre cette r servation pour la palette dans la section BSS de notre programme en faisant ANC_PAL DS W 16 Nous avons d j vu que la section BSS n occupait pas de place sur la disquette Cependant nous avons r alis ces routines avec en t te l id e de les inclure afin de gagner en facilit de programmation En pla ant cette r servation entre les routines elle fera partie int grante du fichier Il n est cependant pas possible de la mettre en DS nous somme
22. car un chiffre peut prendre 10 va leurs de 0 9 En binaire bi deux car chaque chiffre ne peut prendre que 2 va leurs 0 ou 1 L informatique est un domaine Anglo saxon Un chiffre binaire en Anglais a se dit binary digit On garde la premi re lettre et les 2 derni res et on dit qu un chiffe binaire c est un BIT 11 Un bit peut donc tre 0 ou 1 C est la plus petite unit in formatique car le correspondant qui nous envoyons des messages c est en fait un ordinateur Au lieu d allumer des lampes nous mettons du courant sur un fil ou non Un ordinateur 8 bits donc 8 fil sur lesquels on met ou non du courant Pour envoyer des messages nous allons donc pr parer des lampes avec des petits interrupteurs puis quand nos lampes seront pr tes on actionnera l interrupteur principal pour envoyer le cou rant et donc allumer d un coup les lampes pr vues Nous allons donc par l interm diaire de nos lampes envoyer des messages au coeur de la machine dans le cas du ST c est un micro processeur 68000 de chez MOTOROLA qui a t fabriqu pour r pon dre d une certaine mani re aux diff rents messages On pr pare donc nos lampes puis on allume Nous nous avons 16 lampes En effet le 68000 Motorola est un micro processeur 16 bits Voici donc un programme c est dire une succession d ordres tel qu il est au niveau mise ou non de courant sur les 16 fils Tout gauche c est la valeur du fil 16 e
23. from 44E Seconde s rie Cours num ro 10 kkkxkxkxkkxkxkxkxkkkkkkxkxkxkkkkk kxkxkxkkxkkxkxkxkxk kxkxkxkxkkxkxkkkkkkk xkkkxkkkkxk kkkk kkkxkkk kxxkxxkx 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 SFFFFFAO7 ANC_IERA sauve les MOVE B SFFFFFAO9 ANC_IERB valeurs du MOVE B SFFFFFA13 ANC_IMRA MFP 68901 MOVE B FFFFFA15 ANC_IMRB
24. m moire qui est plac la place du trap 13 Bios A chaque fois qu il y a un appel au Bios c est donc notre routine qui est d clench e Etant donn que les appels se font avec empilage des param tres il est tout fait possible de savoir quelle fonction du Bios on veut appeler Il est alors possible de r agir diff remment pour certaines fonctions Cela permet par exemple de tester des appuis sur Alternate touches de fonction et dans ce cas d aller crire des phrases dans le buffer clavier ceci afin de g n rer des macros Note Un trap ne peut faire appel des traps plac s au dessous de lui Ainsi dans un trap 1 il est tout fait possible d appeler un trap 13 mais l inverse n est pas possible Exemple curieux et int ressant MOVE W A SP MOVE W 2 SP TRAP 1 ADDQ L 4 SP MOVE W 0 SP TRAP 1 Ce court programme ne doit pas poser de probl me Nous affichons A puis nous quittons Assemblez le puis passez sous MONST Appuyez sur Control P Vous choisissez alors les pr f rences de MONST Parmi celles ci il y a follow traps c est dire suivre les TRAPs qui par d faut est sur NO Tapez Y pour YES Une fois les pr f rences d finies faites avancer votre programme pas pas avec control Z A la diff rence des autres fois lorsque vous arrivez sur le TRAP vous voyez ce qui se passe Ne vous tonnez pas cela va tre assez long car il se passe beaucoup de chose pour afficher u
25. move to ccr 12 12 amp move to sr 12 12 amp move from sr 6 8 amp move usp 4 nop 4 ori to ccr 20 ori to sr 20 reset 132 rte 20 rtr 20 rts 16 stop 4 swap 4 trapv sans trap 4 z unlk 12 amp rajouter le temps de calcul de l adresse effective 68000 erreur adresse 50 erreur de bus 50 instruction chk 44 instruction illegal 34 interruption 44 violation de privil ge 34 trace 34 trap 38 trapvs 34 rajouter 1 temps de calcul de l adresse effective dur e max 4 p riodes d horloge incluses pour le cycle d interruption 00 01 02 03 04 05 06 07 08 09 0A 0B 0E 10 11 12 13 19 1A 20 2A 2B 2C 2D 2F 30 31 36 39 3A 3B 3C 3D 3E 3F 40 41 42 43 45 46 47 48 49 S4A 4B 4C 4E S4F 56 57 PtermO Cconin Cconout Cauxin Cauxout Cprnout Crawio Crawcin Cnecin Cconws Cconrs Cconis Dsetdrv Cconos Cprnos Cauxis Cauxos Dgetdrv Fsetdta super Tgetdate Tsetdate Tgettime Tsettime Fgetdta Sversion Ptermres Dfree Dcreate Ddelete Dsetpath Fcreate Fopen Fclose Fread Fwrite Fdelete Fseek Fattrib Fdup Fforce Dgetpath Malloc Mfree Mshrink Pexec Pterm Fsfirst Fnext Frename Fdatime COURS D ASM 68000 par le F roce Lapin retour au VOLUME 1 Fin de processus Lit un caract re sur l entr e standard crit un caract re sur la sortie standard Lit un caract re sur l entr e stand
26. nous venons de bloquer d interdire les interruptions 4 Cette fonction r alise 2 choses Tout d abord l affichage du texte situ l adresse MESSAGE C est en effet la fonction Cconws du gemdos Mais cette fonction r alise aussi autre chose une joyeuse erreur car en passant l adresse puis le num ro de la fonction nous avons modifi la pile de 6 bytes un long word pour l adresse et un word pour le num ro de fonction or nous ne corrigeons que de 4 D apr s vos r ponses vous pouvez continuer ou alors recommencer la s rie 1 avec un peu moins d empressement Il faut TOUT comprendre c est a le secret Si vous avez commis quelques erreurs et que voulez cependant attaquer directement la seconde s rie ne soyez pas tonn d abandonner l assembleur dans quelques mois d courag par des montagnes de listings auxquels vous ne comprendrez rien Bon courage COURS D ASM 68000 par le F roce Lapin retour au VOLUME 2 kkxkxkxkkxkxkxkxkkkkxkxkkkkkxkkkkxkxkkkkkkxkkkkxkkkkkkxkxkkk kxkxkkkkkkxkxkk kkkkkk kkkxkxkkxkxk COURS D ASSEMBLEUR 68000 SUR ATARI ST par Le F roce Lapin from 44E Seconde s rie Cours num ro 2 kkkkkkxkxkxkxkkkxkxkkkkkkxkkkxkxkkkkkxkxkkkkkxkkkk kxkkkkkxkxkkkkk kkxkxkk kkkxkkk kk kkkxkkxkxk Nous voici donc repartis pour de nouvelles aventures Ce second cours aura pour sujet les TRAP et plus pr cis ment comment les programme
27. 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
28. plut t que d avoir beaucoup d instructions le microprocesseur perdant sans doute du temps chercher celle qu on lui a demand de faire ou bien des instructions complexes Travail faire relire tout a au moins 2 fois puis se reposer l esprit avant de lire la suite CONSEIL ne commencez pas la suite tout de suite Avalez parfaitement TOUT ce qui est marqu car la compr hension du moindre d tail vous servira Une lampe ce n est pas grand chose mais une de grill e et vous comprendrez la merde que a am ne L c est pareil La plus petite chose incomprise et vous n allez rien comprendre la suite Par contre si tout est compris la suite sera aussi facile et surtout aussi logique COURS D ASM 68000 par le F roce Lapin retour au VOLUME 1 kkxkxkxkkkxkxkxkxkkxkxkxkkkkkxkxkkkxkxkkkkkxkxkkkxkxkxkkkkxkxkxkkk xkxkkkkkxkxkkk kk kkxkkk kkk kxkxkkxkxk COURS D ASSEMBLEUR 68000 SUR ATARI ST x par Le F roce Lapin from 44E x Cours num ro 3 kkkkxkxkxkxkxkkxk xkkkxkxkkxkxkkxkxkkkxkkkxkkkkkkkkkk kk kkkxkkkxkxk kxkxk xkkkxk xkkkxkkk kkkk kxkkxkx k Si vous avez correctement tudi les deux premi res le ons vous devez normalement avoir un peu plus d ordre qu au d part et le binaire et l hexad cimal ne doivent plus avoir de secret pour vous Avant de commencer je dois vous rappeler quelque chose d essen tiel Il est tentant de r fl chir en chiffre alors que
29. sur un word 16 bits et qui comme son nom l indique nous renseigne sur l tat du micro processeur Il est l exemple frappant de ce que nous avons vu dans l introduc tion du cours 3 savoir qu il est bien dangereux de traiter un ensemble de bits comme un simple chiffre plus ou moins grand Voyons la d composition du Status Register num ro des bits 15 0 appellation Ton 8 cs 2 Il TO 5 AN 2 VC Tout d abord il faut savoir que certains bits du SR ne sont pas utilis s Ils sont ici symbolis s par un point chacun Commen ons par la description des bits de droite en commen ant par le 0 Le bit C C signifie Carry donc retenue en Fran ais Ce bit est mis 1 lorsqu il y a une retenue dans le bit le plus lev donc de poids le plus fort de l op rande objet dans une op ration arithm tique Le bit V V signifie oVerflow donc d passement en Fran ais Imaginons une addition de 2 nombres positifs lorsque le r sultat va d border les limites du registres on obtiendra en fait un nombre n gatif compl mente 2 En effet le fait de mettre le bit de poids le plus fort 1 indique que le nombre est n gatif Comme ce n est pas dans le cas pr sent le r sultat recherch on est pr venu du d passement par le fait que le bit V est mis 1 Il indique galement lors de divisions que le quotient est plus grand qu un word ou bien que nous avons un dividende trop gr
30. taille de l op ration Si l op ration porte sur un mot tous les autres op randes subissent une extension de signe sur 32 bits avant que l op ration ne soit effectu e D finitions extraites du document r f EF68000 circuit int gr s MOS THOMSON EFCIS 45 avenue de l Europe 78140 Velizy Dans ces d finitions nous remarquons un nouveau terme op rande C est le terme qui d signe la valeur utilis e dans l op ration Ainsi dans MOVE W D0 D1 l op rande source c est le word de poids faible de DO alors que l op rande destination c est le word de poids faible de D1 Nous savons maintenant ce qu est le PC un registre de donn es un registre d adresse nous avons un peu id e de ce que nous montre les fen tre de MONST continuons donc d cortiquer ce fabuleux outil Pour observer la fen tre de MONST si vous n avez pas assembl de programme impossible d utiliser Alternate D Il vous sera r pondu qu il n y a pas de programme en m moire Tapez donc Alternate M vous voyez MONST appara tre mais vous demandant quel fichier charger Tapez ESC et nous voici tranquille pour une observation Nous voyons bien dans la fen tre du haut nos registres de donn es et droite nos registres d adresse Sous les registres de donn es SR puis PC Le PC program counter nous savons ce que c est mais le SR LE STATUS REGISTER Le SR prononcer Status Register ce qui veut dire en Fran ais registre d tat est un registre cod
31. A0 mais n importe quel au tre registre aurait tout aussi bien convenu Commen ons donc par sauver nos 3 registres Cela pourrait se faire par MOVE L D0 SP MOVE L D1 SP MOVE L A0 SP Note je rappelle que cela se lit move long Mais le 68000 poss de une instruction tr s utile dans un pareil cas qui permet de transf rer plusieurs registres d un coup Nous allons donc faire MOVEM L D0 D1 A0 SP Ce qui se lit move multiple registers Si nous devions transf rer de D0 D5 nous aurions fait MOVEM L DO D5 SP et pour transf rer tous les registres d un seul coup MOVEM L D0 D7 a0 A6 SP Compris Sauvons maintenant l adresse de la pile dans A0 Comme c est l adresse qu il faut sauver et non pas le contenu cela se fait par MOVE L A7 A0 transfert du registre A7 vers A0 Maintenant nous allons r cup rer les 2 nombres que nous avions em pil avant l instruction BSR Imaginons ce qui s est pass A ce propos je vous conseille TRES fortement de vous aider d un papier et d un crayon N h sitez pas crire sur ces cours Ce sont les v tres et je ne les r clamerai pas Faire un petit dessin ou de placer des pi ces sur votre bureau pour vous aider comprendre est une excellente chose Bien sou vent les manipulations de m moire ont tendance devenir abstrai tes et un petit dessin arrange bien des choses Nous avons d cal de 4 octets le STACK POINTER puis nous y avons d pos 1
32. AO j obtiendrai la seconde version Essayez Note LEA MOVE W MOVE L MOVE L LEA MOVE W MOVE L MOVE L MOVE W MOVE W VARIANTE MULU W avec le programme ci apr s ce programme n a pas de fin donc quitter avec Control C en le suivant sous MONST VARIANTE A0 D240 AO SC2FC0003 AO 04410006 AO VARIANTE AO C2C0 AO 04410008 AO 06400004 AO 23 D0 25 D1 D0 D1 passez sous En pointant sur SUB W 8 D1 ADD W 4 D0 MOVE W D1 D5 END Remarques Il est tout fait possible d envisager plus de 2 ver sions d une m me partie de programme Si les tailles de ces diff rentes versions diff rent ce n est pas grave car il est toujours possible de combler avec des NOP Les applications de ce genre de ruse peuvent tre assez nombreuses raccourcissement de program mes rapidit une routine devant tre appel e 15000 fois aura tout int r t tre modifi e avant au lieu d y incorporer des tests par exemple modifications al atoires des routines de pro tection un coup j en mets une en place la prochaine fois j en mettrai une autre Faites cependant bien attention car une erreur d un chiffre et le nouveau code mis en place ne voudra plus rien dire du tout Faites galement attention vos commentaires car l ils deviennent hyper importants tant donn que le listing que vous avez sous COURS D ASM 68000 par le F roce Lapin retou
33. 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
34. E E E E E E EE SECTION DATA MESSAGE_ERREUR DC B D sol erreur avec 13 10 DC B le fichier NOM_FICHIER DC B A IMAGE PI1 0 SECTION BSS BUFFER_PAL DS W 16 RESOLUTION DS W 1 COURS D ASM 68000 par le F roce Lapin retour au VOLUME 1 kkxkxkxkxkxkxkkxkkkkxk xkxkxkxkxkxkxkkkxkxkkkxkxkxkxkxkkkxkxkxk xk xkkxkxkkk xk xkkkkk kxkxkkkk kxk kxkkxkkx kxk COURS D ASSEMBLEUR 68000 SUR ATARI ST par Le F roce Lapin from 44E Listing num ro 3 Cours num ro 7 kkxkxkxkxkxkxkxkkkkxkxkxkkxkkkkxkkkkkkkkkxkkkkkkkkxkkkxkxkkkxkkkkxkk xkxkkkkkxk xkkkxk CRC ERROR t Le fichier d o est tir ce listing tait corrompu sur mes vieilles disquettes je n ai donc pas pu le convertir Si vous l avez en entier merci de me l envoyer COURS D ASM 68000 par le F roce Lapin retour au VOLUME 1 SHIZUKA a le plaisir de vous pr senter cette table des cycles du 68000 r alis e en deux portions de soir es avec les aides appr ciables de craft2 stedi disque dur ouaaaah la vitesse guide des instructions du 68000 vol 2 de NACHTMANN chez PUBLITRONIC merci de diffuser cette table sans modifier l en t te calcul de l adresse effective b w 1 dn 0 an 0 an 4 an 4 an 6 d16 an 8 d8 an xi 10 abs w 8 abs 1 12 d16 pc 8 12 d8 pc x1 10 imm 4 move b et move w dn an abs w abs 1l dn 4 4 16 an 4 4 16 an 8 8 20 an
35. END_PRG SECTION DATA MESSAGE DC B PREMIERE PHRASE 0 MESSAGEZ2 DC B 13 10 ET LA SECONDE I 0 Tapez ce programme puis assemblez le et lancez le Ensuite d bugger le et vous verrez que les appels de macro ont t remplac s par les textes de ces macros Pour le moment nous n avons vu qu une macro avec 1 passage de param tre Le nombre de ces param tres passables une macro est variable et d pend de l assembleur Ainsi dans DEVPACK il est possible de passer jusqu 36 param tres qui seront rep r s par des chiffres 0 9 puis par des lettres A Z ou a z Il est galement possible d appeler une macro partir d une autre macro Ceci tant il existe de tr s nombreux inconv nients utiliser les macros Certains programmeurs en raffolent j avoue que ce n est pas mon cas En effet l norme avantage de l assembleur r side dans le petit nombre d instructions et donc du petit nombre de termes retenir d s que l on commence faire prolif rer les macros on se trouve coinc entre 2 feux soit donner des noms simples et se m langer entre eux soit donner des noms rallonge et se tromper souvent dans leur orthographe Certains poussent m me la plaisanterie jusqu r aliser des macros pour les appels du GEMDOS BIOS ou XBIOS en appelant les macros par le nom des fonctions ou par le num ro Je ne trouve pas cette solution particuli rement valable car les noms des fonctions du syst me d exploit
36. Les sources assembleur sont bien souvent tr s longs et m me si cela fait perdre quelques lignes espacer les modules permet de s y retrouver plus faci lement Assemblons puis d buggons Avan ons pas pas avec Control Z Les 3 premi res lignes nous sont famili res mais pas la quatri me Celle ci se lit BRANCH SUB ROUTINE AJOUTE c est dire branche ment une subroutine nomm e AJOUTE Pour pr ciser vers quelle su broutine on d sire se diriger son tiquette est pr cis e Ici en l occurrence c est AJOUTE mais le nom importe peu Il est tout a fait possible de mettre des noms assez longs et je ne peux que vous conseiller d viter dans vos listings les noms du genre X Y Z ou encore AX1 etc qui sont quand m me moins explicites que DEBUT_IMAGE NEW_PALETTE ou bien END_GAME Maintenant soyez tr s attentifs la lecture de cette instruction de nombreuses choses vont se passer L ordre demande donc au 68000 de poursuivre la lecture de ses instructions dans un sous programme dont le d but se situe dans le tube en face de l ti quette AJOUTE Cependant il s agit bien ici d un sous programme Ceci suppose qu une fois termin le 68000 remontera pour ex cuter la ligne qui suit BSR AJOUTE en l occurrence MOVE L 0 D0 Ques tion comment le 68000 saura t il o remonter En effet le propre d une subroutine est de pouvoir tre appel e plusieurs fois et de plusieurs endroits diff rents et de pouvoir chaque fois revenir
37. MOVE B SFFFFFA17 ANC_VR MOVE L 134 ANC_TIMEA sauve Timer A MOVE L MY_TIMEA 134 place nouvelle routine CLR B SFFFFFAO9 emp che interrupt 0 7 CLR B SFFFFFAIS 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 EEFFFFA17 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 L BCLR 5 ISRA suivant VR MOVEM L sp d0 a6 RTE RE 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 m ANC_IMRB DS B 1 z ANC_VR DS B 1 7 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 MF
38. SP TRAP 1 ADDQ L 4 SP RTS Note PTN_TAB ne nous sert plus et de m me le LEA tableau du d but Assemblez avec NONE en DEBUG INFO puis passez sous MONST faites avancer pas pas et regardez la ligne MOVEA L TABLEAU AO se modifier Expliquons bien clairement ce qui se passe Nous pla ons TABLEAU en A0 puis nous pr levons le word Admettons tout d abord qu il ne s agisse pas de FFFF nous sautons donc ICI Il faut donc ajouter 2 pour augmenter l adresse et pointer la prochaine fois sur la seconde lettre du tableau Nous avons vu qu en tant cod e la ligne MOVEA L etc tient sur 3 words donc 6 bytes L ajout de 2 doit donc porter sur le 3 me word Le d but de ce word c est le byte 4 Pour cette raison nous donnons comme des tination de l addition AFFICHE 4 Si nous avions pr lev FFFF il aurait fallu r initialiser notre ligne MOVEA L avec MOVE L TABLEAU AFFICHE 2 Pourquoi 2 Parce que l adresse de tableau est un long mot et que dans le codage de l instruction cela commence sur le second word Il faut donc sauter un seul word c est dire 2 bytes Dans le m me ordre de chose il est tout fait possible de modi fier plus profond ment un programme En voici un exemple flagrant voir listing num ro 4 Sachant que l instruction RTS Return from subroutine est cod e avec 4E75 et que l instruction NOP No operation est cod e par 4E71 en pla ant un NOP ou un RTS on change en fait la fin
39. 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 q
40. aussi appel pointeur de pile Comme toujours nous utiliserons le vocabulaire anglo saxon et nous dirons Stack Pointer en abr g SP Pour cette raison et parce que l usage en est ainsi nous remplacerons d sormais A7 par SP qui ne se lit pas ss p mais bien STACK POINTER Imaginons que nous voulions sauvegarder D0 l entr e de la su broutine Il ne faudra pas oublier de le r cup rer la sortie D pla ons donc le contenu de DO vers la pile Essayons MOVE L DO SP et r fl chissons Ceci va mettre le contenu de DO dans A7 malheureusement ce n est pas ce que nous voulons faire En effet nous d sirons mettre le contenu de D0 DANS le tube l endroit indiqu par A7 donc SP Ceci va se faire avec MOVE L D0 SP les parenth ses indiquant que la source de l op ration c est l int rieur du tube Effacez le programme actuel et tapez le suivant MOVE L 12345678 D0 MOVE L DO AO MOVE W DO A1 Assemblez puis comme d habitude d buggez D0 prend la valeur 12345678 puis DO est transf r dans sa totalit cause du L qui indique que l op ration se passe sur un mot long l adresse qui est not e dans A0 ensuite le poids faible de D0 est transf r dans le tube l adresse not e en Al Pour le v rifier vous pouvez activer la fen tre 3 et demander placer l adresse not e dans A0 en haut de cette fen tre et vous constaterez qu effecti vement la valeur de D0 se trouve bien dans le tube
41. bien sou vent il serait pr f rable de se souvenir qu un chiffre n est qu une suite de bits Ainsi imaginons un jeu dans lequel vous de vez coder des donn es relatives des personnages En lisant ces donn es vous saurez de quel personnage il s agit et combien il lui reste de point de vie Admettons qu il y ait 4 personnages Combien faut il de bits pour compter de 0 3 c est dire pour avoir 4 possibilit s seulement 2 bits Mes personnages peuvent avoir au maximum 63 points de vie de 0 63 car 0 ils sont morts il me faut donc 6 bits pour coder cette vitalit Je peux donc avoir sur un seul byte octet 2 choses totalement diff rent es avec les bits 0 et 1 le bit de droite c est le bit 0 le bit le plus gauche pour un byte est donc le 7 je code le type de mon personnage et avec les bits 2 7 sa vitalit Ainsi le chiffre 210 en lui m me ne veut rien dire C est le fait de le mettre en binaire 11010010 et de penser en regroupement de bits qui va le rendre plus clair S parons les 2 bits de droite 10 ce qui fait 3 en d cimal je suis donc en pr sence d un person nage de type 3 Pr levons maintenant les 6 bits de gauche 110100 et conver tissons Nous obtenons 52 Nous sommes donc en pr sence d un personnage de type 3 avec 52 points de vitalit Ceci devant maintenant tre clair passons une explication succinte concernant la m moire avant d aborder notre premier pro gramme STRUCT
42. c est donc pour le 68000 une suite de lectures du contenu du tube Il va y trouver des chiffres qu il va interpr ter comme des ordres revoir le cours 2 Gr ce ces ordres nous al lons lui dire par exemple de continuer la lecture un autre en droit de ce tube de revenir en arri re de pr lever le contenu du tube et d aller le d poser autre part toujours dans ce m me tube bien s r etc Pour savoir quel endroit le 68000 est en train de lire les ordres qu il ex cute il y a un compteur Comme ce compteur sert pour le programme il est appel Program Counter en abr g PC Le 68000 a un PC sur 24 bits c est dire qu il peut prendre des valeurs comprises entre 0 et 16777215 Comme chaque valeur du PC correspond une adresse et qu en face de cette adresse donc dans le tube on ne peut mettre qu un octet une machine quip e d un 68000 peut donc travailler avec 16777215 octets ce qui fait 16 M ga A titre indicatif le 80286 de chez Intel qui quipe les gros compatibles PC ne comporte qu un PC sur 20 bits ce qui restreint son espace 1 m ga A noter que la m moire est destin e recevoir des octets mais que ce que repr sente ces octets texte programme image n a strictement aucune importance PREMIER PROGRAMME Nous allons tout de suite illustrer notre propos Nous lan ons donc GENST Ceux qui ont un cran couleur devront le lancer en moyenne r solution c est pr f rable pour un meilleur co
43. capable de comprendre ce qu elles font Le nombre d instructions est faible mais chacune d elle r alise une op ration bien pr cise qu il convient de conna tre dans ses moindres d tails Il ne suffit pas de savoir que ROR r alise une rotation vers la droite il faut galement savoir que le bit ject d un cot est remis de l autre et qu en plus il est recopi dans le bit C du SR Il faut re marquer aussi que ROR 4 D0 est accept mais pas ROR 9 D0 Dans ce cas il faut faire 2 ROR ou MOVE W 9 D1 puis ROR D1 D0 C est ce genre de petits trucs qui vous bloqueront plus tard si vous n avez pas pass quelques heures les d cortiquer LES INCLUSIONS DE FICHIERS L un des plus gros probl me de l ASSEMBLEUR se situe au niveau de la taille des listings Si en BASIC une ligne suffit pour une op ration parfois tr s complexe nous avons vu qu en ASSEMBLEUR ce n tait pas le cas Par contre nous avons vu galement que l criture en ASSEMBLEUR consistait taper le bon nombre d ins truction machine alors que le compilateur du BASIC du C ou du PASCAL se d brouille faire une traduction qui marche et qui n est donc pas forc ment la plus conomique au niveau taille et ou au niveau vitesse En contre partie nos sources ASSEMBLEUR font tr s rapidement des pages et des pages l o un programmeur travaillant avec un lan gage volu n aurait que quelques dizaines de lignes Il existe cependant quelques m thodes permet
44. ce qui nous int resse ce n est pas a Ce que nous voulons modifier v rifier etc c est ce qu il y a DANS le tube cette adresse Et bien notre d bugger anticipe un peu cette demande En effet partant du principe que les nombres stock s en D0 D7 ou A0 A6 peu vent repr senter des valeurs d adresses il indique c t des re gistres ce qu il y a dans le tube l adresse indiqu e dans le registre En ce qui concerne les registres de donn es MONST affiche leur droite la valeur de 8 octets se trouvant dans le tube l adresse indiqu e dans le registre Pour les registres d adresse ce sont 10 octets qui sont indiqu s Vous remarquez certainement qu en face du registre D0 qui doit contenir 12345678 si vous avez fait correctement avancer le programme MONST n a affich que des toiles C est normal car le nombre 12345678 correspond un em placement m moire qui se serait accessible qu avec 305 m ga de m moire MONST indique donc qu il ne peut pas atteindre cette zone m moire en affichant des toiles Regardons maintenant D1 et AO Les nombres situ s leur droite montrent la m me chose ce qui est normal puisque les 2 registres D1 et A0 sont remplis avec le m me nombre On dit qu ils pointent sur l adresse S SBD88 Allons voir en m moire histoire de v rifier l affichage Activez la fen tre 3 avec Alternate 3 Celle ci nous affiche le contenu de la m moire mais nous sommes loin de BD88 De
45. chose qui est plus proche du syst me de liste que de celui de tableau mais qui est aussi bien utile Nous avons tudi ici des possibilit s manant toujours d une m me vidence les donn es qui nous servent pointer dans le tableau se suivent Malheureusement dans de nombreux cas celles ci ne se suivent pas Voici donc une autre m thode Imaginons le cas d un diteur de texte avec plusieurs actions possibles effacer le texte sauver le texte l imprimer charger craser scroller etc appel es par des combinaisons de touches Pour tre la norme Wordstart c est la norme clavier utilis e par Devack ALT W imprimer par exemple j ai d abord relev avec un tout petit programme les codes renvoy s par les combinaisons de touches Ensuite j ai r alis une liste de ces codes liste en word car les codes ASCII ne suffisent plus dans le cas de combinaisons de touches il est possible bien s r de construire la combinaison touche enfonc e touche de control TAB_CODE dc w 1519 1615 1312 2e03 S FFFF Ensuite j ai r alis une liste avec les adresses de mes routines Comme au d part je n en avais aucune de faite j en ai r alis une bidon nomm e JRTS et qui ne fait qu RTS TAB_ROUTINE dc l JRTS JRTS JRTS JRTS Ensuite j ai fait une boucle pour lire TAB_CODE en comparant chaque fois la valeur trouv e dans le tableau avec celle de la touche En m me temps je parcours TAB_ROUTINE afin
46. compte Or nous voyons bien galement qu il n est pas possible de d finir un niveau minimum de 8 par exemple et donc qu il sera impossible d emp cher une interruption de niveau 7 Ce niveau est donc dit non masquable Les interruptions de niveau 7 sont donc appel es NMI c est dire non maskable interrupt A noter qu il n est pas possible d op rer une s lection pr cise et par exemple d autoriser les interruptions de niveaux 4 5 et 7 et pas celles de niveau 6 Si les bits sont 100 les interruptions de niveau 4 5 6 et 7 seront autoris es Vous pouvez jeter nou veau un coup d oeil sur le cours annexe A Vous retrouverez bien sur le 68000 les broches I2 Il et I0 Une remarque cependant ces broches sont actives l tat bas c est dire qu elle indique quelque chose lorsqu il n y a pas de courant l inverse des au tres broches Par contre leur repr sentation au sein du Status Register se fait dans le bon sens Nous sommes maintenant amen s nous poser une question similaire celle que nous nous sommes pos e lors de l tude du mode Trace Le 68000 re oit une demande d interruption Il compare le niveau de celle ci la limite fix e par les bits I du Status Register Si l interruption est acceptable il sauve le Status Register et met en place dans les bits I le niveau de l interruption qu il va ex cuter afin de ne pas tre g n par une autre demande plus fai ble Il stoppe alors l ex cution d
47. continue C est la broche d alimentation du 68000 5 volts GND ground C est la masse du 68000 CLK Clock Horloge Entr e du signal d horloge Note On appel BUS un ensemble de conducteurs en quelques sorte un paquet de fils v hiculant le m me type d information Al A23 Address Adresse Ces broches constituent le bus d adresse Il ne faut pas confondre ces A avec les registres d adresses AO A7 que nous tudions dans les autres cours En effet chacun des A des registres d adresses est cod sur 32 bits alors qu ici chacun ne travaille que sur 1 bit Nous sommes bien ici en pr sence d une boite avec des fils sur lesquels il y a ou non du courant revoir cours 2 On pourrait s attendre trouver une broche 0 mais celle ci est remplac e par 2 broches compl tant le bus d adresse UDS Upper Data Strobe Echantillonnage haut LDS Lower Data Strobe Echantillonnage bas A l aide des broches A1 A23 on obtient une adresse tandis que les broches UDS et LDS indique au micro processeur si cette adresse il doit acc der l octet haut l octet bas ou au word complet Chaque broche A1 A23 ne pouvant prendre que 2 valeurs 0 ou 1 nous nous retrouvons dans le m me cas que nos lampes du cours 2 Nous avions remarqu que le nombre de possibilit tait li au nombre de lampes par la relation possibilit 2 la puissance nombre de lampe Si nous rempla ons lampe par broche nous obtenons comme nombre de possibili
48. 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 SFFFFFAOF 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
49. de la routine NOP ne fait rien du tout C est une op ration qui est bi don dans le sens o rien ne change mais cette instruction consomme un peu de temps Elle nous servira donc pour r aliser des petites attentes bien utile pour des effets graphiques par exem ple Suivez bien le d roulement de ce programme sous MONST afin de voir les modifications se faire Un cas plus complexe MOVE W 23 D0 MOVE W 25 D1 VARIANTE ADD W D0 D1 MULU W 3 D1 SUB W 6 D1 MOVE W Apr s MONST et jetez assemblage un coup D1 D5 de ce petit morceau de programme d oeil la fen tre 3 VARIANTE et en regardant les adresses en face des instructions en d duit que ADD W D0 D1 est converti en D240 MULU W 3 D1 est converti en C2FC 0003 SUB W 6 D1 est converti en 0441 0006 Si nous prenons maintenant MOVE W 23 D0 MOVE W 25 D1 VARIANTE MULU W D0 D1 SUB W 8 D1 ADD W 4 D0 MOVE W D1 D5 Nous assemblons passons sous MONST MULU W D0 D1 est converti en C2C0 SUB W 8 D1 est converti en 0441 0008 ADD W 4 D0 est converti en 0640 0004 Donc si LEA MOVE W MOVE L MOVE L J obtiendrai la ADD W MULU W SUB W dans un programme utilisant cette routine je fais VARIANTE A0 D240 AO C2FCO0003 AO 04410006 AO premi re version D0 D1 3 D1 6 D1 alors que si je fais LEA MOVE W MOVE L MOVE L VARIANTE AO C2C0 AO 04410008 AO 06400004
50. en AO MOVE L 16 A0 DO r cup re 23456 et le met en DO MOVE L 20 A0 D1 r cup re 12345678 en D1 ADD L D0 D1 addition MOVE L D1 D7 transfert du r sultat MOVEM L SP D0 D1 A0 r cup ration RTS et retour Note ce programme n ayant pas de fin normale lorsque vous serez rendu au retour de la subroutine c est dire apr s la ligne MOVE L D7 D0 quittez le avec Control cC Assemblez et suivez bien TOUT le d roulement Bien s r il aurait t possible de faire cela tout diff remment Par exemple nous aurions pu viter de travailler avec A0 En effet 16 A0 et 20 A0 ne modifiant pas A0 il aurait t plus simple de faire 16 A7 et Z20 A7 au lieu de recopier d abord A7 en A0 De m me il aurait t possible de transf rer 23456 directement en D7 et 12345678 en D1 puis de faire ADD L D1 D7 afin d viter la sauvegarde de DO qui aurait t inutilis e et le transfert D1 vers D7 qui n aurait alors pas eu lieu d tre De m me nous au rions pu retourner le r sultat par la pile au lieu de le faire par D7 Beaucoup de variantes possibles n est ce pas Pour terminer un petit exercice Relancer ce petit programme et analysez PARFAITEMENT TOUT ce qui s y passe Quelque chose ne va pas Je vous aide en disant qu il s agit bien s r de la pile Cherchez et essayez de trouver comment faire pour arranger a La r ponse sera au d but du prochain cours mais essayez d imaginer que c est votre programme et qu il ne m
51. ex cuter pour telle ou telle raison J esp re de tout coeur que vous avez parfaitement assimil ce principe car pour la ligne A le GEM les interruptions etc c est encore et toujours ce m me principe qui est appliqu Prenez la feuille qui vous a t fournie avec les cours de la s rie 1 et qui montre ce premier kilo Le vecteur 10 adresse 40 en d cimal et 28 en hexa poss de comme description mulateur ligne 1010 Convertissons 1010 en hexad cimal nous obtenons A Premi re constatation si ce vecteur est dans le premier kilo de m moire c est donc que l mulateur ligne A n est pas une particularit du ST mais bien du 68000 Ces vecteurs vont donc nous donner acc s une ou des routines en utilisant toujours le m me principe Ordre au 68000 celui ci analyse l ordre saute dans le premier kilo de m moire l adresse correspondant cet ordre y trouve l adresse de la routine ex cuter il ne lui reste plus qu sauter celle ci Comment donc appeler les routines accessibles par l interm diaire de l mulateur ligne A que font ces routines et comment discu ter avec elles c est dire comment leur passer d ventuels pa ram tres Dans le cas de l Atari ST les routines accessibles par le biais de l mulateur ligne A sont des routines graphiques Ces routines sont les routines graphiques de base de notre machine Elles sont utilis es par le GEM Leur acc s est rustique et mal c
52. faut assez souvent passer des param tres la main dans ce tableau Avec ce syst me il sera possible de r aliser une op ration du genre MOVE W 10 CONTRL2 Attention cette num rotation des CONTRL correspond au nombre de words car chacune des entr es est d finie par DS W et non pas par DS B Ceci s explique par le fait que 99 des documents relatifs au GEM sont pour le C et que c est ce type de commande qui est faite en TOt Ainsi vous trouverez souvent mettre 10 en contrl 2 il vous suffira de faire MOVE W 10 CONTRL2 et le tour est jou Pourquoi tant de tableaux Parce que chacun de ces tableaux est destin recevoir ou renvoyer un certain type de donn es Voyons un descriptif rapide de ces tableaux Tableaux AES control Destin contenir dans l ordre num ro de la fonction W nombre d octets de INT_IN W nombre d octets de INT_OUT W nombre de longs mots de ADDR_IN W nombre de longs mots de ADDR_OUT global Ce tableau est un peu sp cial et les explications le concernant ne sont d aucune utilit dans le cadre de ces cours Une fois bien ingurgit le reste vous pourrez toujours vous pencher dessus mais actuellement cela ne ferait que vous embrouiller Voir la biblio graphie pour en savoir plus xx int_in Ce tableau est destin recevoir des valeurs enti res Integer In dont l AES aura besoin Par exemple un num ro de fen tre int_out A l inverse du
53. 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 u
54. l affichage des objets typiques du GEM fen tres bo tes d alertes est r alis par Ll AES APPLICATION ENVIRONMENT SYSTEM Au fur et mesure que vous d couvrirez les fonctions VDI et AES vous vous rendrez compte de l interaction des 2 Le gros avantage de ce syst me peut s expliquer simplement il semble vident tout le monde que sortir un dessin sur un cran une disquette ou une imprimante ce n est pas la m me chose ERREUR Pour le GEM c est pareil En fait on peut dire que vous avez pr parer votre dessin et dire je l envoie O Ah l c est comme vous voulez parce que pour le VDI l cran la table tra ante le disque l imprimante etc ne sont que des p riph riques Il suffit de lui d signer le p ri ph rique de notre choix et il fait le boulot tout seul 1 Le seul probl me les routines v ritablement ind pendantes des p riph riques se trouvent dans GDOS ce nom vous fait s rement fr mir d effroi Plusieurs programmes en m me temps Le principe du GEM est tr s attirant mais doit nous amener r fl chir un petit peu sur le m lange potentiel des donn es En ef fet le GEM m me s il n est pas r ellement multit che tre multi t che consiste pouvoir faire tourner des applications exactement en m me temps ce qui est de toute fa on impossible avec un 68000 le GEM donc permet d avoir plusieurs programmes actifs en m me temps en l occurrence
55. la pile dans la section BSS par ceci DS L 256 PILE DS L 1 J en vois qui sont surpris par cette r servation Dans les exemples fournis avec DEVPACK il est marqu stack go backwards que je traduis librement par moi j avance la pile recule comment veux tu Un peu de s rieux Nous avons vu que l utilisation de la pile se faisait en d cr mentant celle ci move w 12 sp par exemple Il faut donc r server de la place AVANT l tiquette Pour cette raison nous notons le label et au dessus la taille r ellement r serv e pour la pile Quelle taille choisir Cela d pend de vous Si votre programme est plein de subroutines s appelant mutuellement et sauvant tous les registres chaque fois il faut pr voir assez gros Tapez le programme suivant Il est vident que vous devez avoir tap au pr alable la routine de d marrage de programmes qui est un peu plus haut dans ce cours Elle est ici incluse au d but Pas de branchement y faire Si une fois assembl vous d buggez ce programme vous verrez au d but la routine de start Dor navant cette routine sera toujours pr sente au d but de nos programmes mais ne sera jamais int gralement recopi e un INCLUDE est bien plus commode Note Il semble que DEVAPCK se m lange parfois les pinceaux lorsque les inclusions sont nombreuses et font appel des fichiers contenus dans des dossiers De m me il existe des probl mes avec les inclusions sur disque B lor
56. les diff rences entre ces types de poches NOTE le ph nom ne de courant pas courant et le m me pour TOUS les ordinateurs actuels Le nombre de poche est propre au 68000 MOTOROLA Il y a donc le m me nombre de poches sur un Amiga ou un Mac Intosh puisqu ils ont eux aussi un 68000 Motorala Sur un PC ou un CPC les caract ristiques nombre de lampes allumables simultan ment nombre de poches sont diff rents mais le principe est le m me C est allum OU c est teint Modifions notre texte qui devient donc d place dans ta poche DO ce que tu trouveras l adresse 6000 ajoute ce que tu as dans ta poche DO ce que tu trouveras l adresse 6002 mets le r sultat de l op ration l adresse 6004 La machine est tr s limit e puisque par conception le r sultat de l op ration de la 3 me ligne ira lui m me dans D0 crasant donc ce qui s y trouve Pour garder la valeur qui s y trouvait il faudrait au pr alable la recopier par exemple dans la poche D1 D placer se dit en Anglais MOVE Ajoute se dit en Anglais ADD Notre programme devient donc MOVE ce qu il y a en 6000 dans DO ADD ce qu il y a en 6002 DO MOVE ce qu il y a maintenant dans DO 6004 C est dire MOVE 6000 D0 ADD 6002 D0 MOVE D0 6004 Nous venons d crire en clair un programme en langage machine La diff rence fondamentale avec un programme dans n importe quel autre langage c est que l chaq
57. marche avec n importe quelle source lumi neuse qui l avantage d tre simple manipuler Vous la trou verez un prix variant de 199 Frs magasin NASA 240 Frs Camif ou la Fnac C est une d pense qui n est pas trop lev e et qui s av rera tr s vite rentable METHODE DE PENS E D UN ORDINATEUR En France nous roulons droite C est simple entr dans les moeurs et tout le monde s en sort bien Imaginons la conduite en Angleterre Pour un Fran ais il existe en fait 3 solutions 1 On ne lui dit rien sur ce type de conduite C est avantageux dans le sens ou notre conducteur part tout de suite sur la route mais bien s r le premier carrefour risque de lui tre fatal 2 On lui r apprend conduire de Z C est long on a l impression de perdre son temps mais on li mite presque totalement les risques d accidents 3 On dit simplement au conducteur Attention ici on roule gauche Celui ci sait conduire droite en le pr venant il fera at tention et s en sortira Avantage c est rapide inconv nient un simple rel chement et c est l accident Programmer c est comme vouloir conduire gauche Il suffit de penser mais pas de penser comme nous mais comme la machine Conscient de votre volont d aller vite c est la m thode 3 que nous allons utiliser mais attention au rel chement Un dernier conseil avant de vous laisser aborder le premier cours proprement parler l assembleur
58. nombreux et placer des endroits bien pr cis dans les tableaux Pour ces raisons les macros trouvent ici tout leur int r t Nous appellerons donc les fonctions du GEM avec les macros contenues dans la biblioth que de DEVPACK Cependant il convient de conna tre galement les tableaux afin de pouvoir parfaitement compren dre le principe de fonctionnement Pour l AES il faut 6 tableaux CONTROL GLOBAL INT_IN INT_OUT ADDR_IN ADDR_OUT Pour le VDI il en faut 5 CONTRL INTIN INTOUT PTSIN PTSOUT Attention la l g re diff rence d orthographe entre INT_IN et INTIN Pour indiquer lors de l appel au GEM l emplacement o il trouvera ces tableaux leurs adresses sont plac es dans 2 listes Une pour l AES aes_params dc l control global int_in int_out addr_in addr_out et une pour le VDI vdi _params dc l contrl intin ptsin intout ptsout Voici les tableaux tels qu ils sont d finis dans la biblioth que GEM de DEVPACK control ds w 5 global ds w 14 int_in ds w 16 int_out ds w 7 addr_in ds l 3 addr_out ds l1l 1 contrl ds w 1 contrll ds w 1 contrl2 ds w 1 contr1l3 ds w 1 contrl4 ds w 1 contrls5 ds w 1 contr1l6 ds w 1 contrl7 ds w 1 contrl8 ds w 1 contr1l9 ds w 1 contr1l10 ds w 1 contrl11 ds w 1 intin ds w 128 min 30 intout ds w 128 min 45 ptsin ds w 128 min 30 ptsout ds w 128 min 12 Vous remarquez l trange mise en place du tableau CONTRL tableau pour le VDI En effet il
59. peut tre laiss e de cot Dans notre exemple nous avons utilis des words dans notre tableau Il aurait tout fait t possible d utiliser des bytes Modifiez un peu le programme supprimer la ligne avec MULU et modifiez les datas Au lieu de mettre DC W l adresse TABLEAU mettez DC B Pour terminer puisque notre tableau est maintenant en bytes et non plus en words il faut modifier l adressage permettant de piocher dedans Au lieu de MOVE W O A0 D0 W D1 il faut mettre maintenant MOVE B O A0 D0 W D1 Attention cependant car nous avions parl de l impossibilit de se servir des adresses impaires Pourtant dans ce dernier cas comme notre tableau est en bytes si DO vaut 3 nous nous retrou vons avec une adresse impaire et pourtant a marche En effet cela marche parce que nous pr levons un byte En fait le 68000 peut tr s bien pr lever un byte une adresse impaire en revanche ce qu il ne peut pas faire c est pr lever une donn e plus grande word ou long qui commence sur une adresse impaire et qui donc chevauche les emplacements normaux Modifions encore une fois le programme Remettez le tableau en word et remettez l adressage en word MOVE W O A0 D0 W D1 L erreur va donc venir du fait que nous avons oubli le MULU et donc que notre compteur va tre parfois impaire alors que notre tableau et notre mode d adressage demande un compteur paire Assemblez et lancez Appuyez sur F1 tout ce passe bien Normal
60. 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
61. plus que tout autre langage et assimilable une construction en Lego Une norme construction en Lego n est pourtant qu un assemblage de petites briques Assembler 2 briques et passer 1 ou 2 heures pour tudier cet assemblage peut para tre inutile Pourtant c est ce que nous allons faire il y a peu de choses apprendre mais elles sont tr s importantes On ne le r p tera jamais assez ce ne sera pas quand notre ch teau de Lego d un m tre cinquante commencera s crouler qu il faudra se dire merde mes 2 petites briques du d but taient peut tre mal fix es car ce moment l alors qu une machine accepterait de tout reprendre d s le d but il y a 99 de chances pour que votre exp rience en ASM s arr te l ce qui serait dommage De m me je vous d conseille fortement la chasse aux listings Cette pratique est tr s courante entre autre sur RTEL et n am ne g n ralement que des ennuis Il est de TRES LOIN pr f rable de passer pour un con parce qu on ne sait pas faire un scrolling plu t t que de frimer alors qu on a juste recopi un source que nous a donn un copain A ce petit jeu l il y a des gagnants en basic en C ou en Pascal mais jamais en assembleur car lorsque vous com mencerez vouloir coller des sources entre eux et que a ne mar chera pas vous serez TOTALEMENT incapable de comprendre pourquoi et il sera trop tard pour apprendre et vous abandonnerez Et ne dites pas non regarder plut t 6 m
62. pr c dent ce tableau renvoi des r sultats par exem ple si vous demander la surface disponible pour une fen tre vous aurez ici les dimensions addr_in Liste dans laquelle vous pourrez placer des adresses addr_out et l vous pourrez en lire En fait il suffit comme toujours de lire le nom du tableau pour en d duire ce qu il contient Tableaux VDI contrl Dans contrl0 nous pla ons l opcode de la fonction c est ainsi que l on appelle son num ro Dans contrll nous pla ons le nombre de donn es qui seront mise dans le tableau intin Dans contrl2 nous pla ons le nombre de points donc de couples de donn es qui seront plac s dans le tableau ptsin Dans contrl3 nous placerons l identificateur de la sous fonction Par exemple le tra age des cercles ellipse rectangle etc ce fait avec la fonction 11 Il faut donc un sous code permettant de d finir quel module dans la fonction 11 on d sire utiliser Dans contrl6 nous pla ons le handle du p riph rique voir plus haut A partir de contrl7 il y a parfois des informations passer suivant la fonction xx intin et ptsin Nous remplirons ensuite le tableau INTIN avec les param tres en tiers demand s par la fonction et le tableau PTSIN avec les coor donn es demand es par la fonction Une fois la fonction appel e nous r cup rerons en contr1l2 le nombre de couples de coordonn es de ptsout et en contrl4 le nombre de mots de intout Voici un appe
63. rer par MOVE L SP D0 C est compter sans le fait que la pile est un r servoir commun beaucoup de choses Il faut donc de pr f rence jouer chaque fois le jeu d un empilage correct et r fl chi mais aussi d un d pilage collant parfaitement avec l em pilage pr c dent V rifions tout cela avec l exemple suivant MOVE L 12345678 D0 valeur dans DO MOVE W AAAA D1 valeur dans D1 MOVE L D0 SP sauve D0 L sur la pile MOVE W D1 SP idem D1 mais en word MOVE L 0 D0 remet DO 0 MOVE W 0 D1 et D1 aussi MOVE W D1 SP r cup re D1 word MOVE L D0 SP puis DO Assemblez puis faites d filer ce programme pas pas sous MONST Notez plusieurs choses tout d abord des commentaires ont t ajout s au source Il suffit que ceux ci soient s par s des op randes pour que l assembleur sache qu il s agit de commentaires Si vous d sirez taper une ligne de commentaires c est dire que sur celle ci il n y aura rien d autre que ce commentaire vous devez le faire pr c der du caract re toile ou d un point virgule Seconde chose nous avions empil D0 puis D1 ensuite nous avons d pil D1 puis D0 Il faut en effet bien faire attention l ordre et aux tailles de ce que nous empilons afin de pouvoir d piler les m mes tailles dans l ordre inverse de l empilage Voici un dernier exemple MOVE L 12345678 D0 BSR AJOUTE saut vers subroutine MOVE L D0 D1 transfert AJOUTE MOVE L D0 SP sauve d0 1 s
64. s ici2 bsr truc2 bra d but ici2 etc la taille aurait t sup rieure surtout que dans l exem ple il n y a que 4 codes Imaginez avec une trentaine L autre avantage concerne la mise au point du programme En effet rien n emp che de pr voir plein de routines mais de simplement mettre l adresse d un RTS et progressivement de construire ces routines Rien n emp chera pour autant le programme de marcher De m me le syst me du flag de fin FFFF permet de rajouter tr s facilement des codes et donc des routines Voila pour les listes et tableaux les applications sont innom brables et permettent souvent en peu de lignes des tests des recherches des calculs des conversions ou des branchements r alisables autrement mais au prix de difficult s immenses Voici des id es d applications codage de texte utilisation du code ASCII pour pointer dans un tableau donnant la valeur substituer animation tableau parcouru s quentiellement donnant les adresses des images afficher gestion de touches gestion de souris tableau avec les coordonn es des zones cran menu d roulant etc COURS D ASM 68000 par le F roce Lapin retour au VOLUME 2 kkxkxkxkkkxkxkxkkkkxkxkkxkkkkxkkkkxkkkkkxkkkkkkxkkkk kxkkkkkxkxkkkkkkkkk kk kkxkkk kk kkxkxkkxkxk COURS D ASSEMBLEUR 68000 SUR ATARI ST par Le F roce Lapin from 44E Seconde s rie Cours num ro 6 kkkxkkkkxkx
65. scan code 3B F2 gt 3C F3 gt 3D t s jusqu F10 gt 44 Les scan codes se suivant nous testons donc notre r sultat par rapport au scan code de F1 si c est inf rieur ce n est donc pas valable de m me par rapport au scan code de F10 si c est sup rieur ce n est pas valable non plus Ces tests tant faits nous sommes donc en pr sence d un scan code situ entre 3B et 44 ces 2 nombres compris 3B cela fait 59 en d cimal Pour avoir 65 code ASCII de A il suffit d ajouter 6 C est que nous faisons ensuite Nous obtenons donc le code ASCII de A B C etc suivant la touche de fonction qui a t enfonc e Il ne reste plus qu afficher cette lettre Imaginons maintenant que nous voulions afficher touche F1 lorsque nous appuyons sur cette touche touche F2 EC mes Plusieurs solutions s offrent nous En voici une premi re qui me vient l esprit et que je vais juste vous d voiler car elle n a pas de rapport avec les tableaux Pour ne pas compliquer nous n afficherons pas touche F10 en fait nous ne prendrons en compte que les touches F1 F9 Souvenez vous d un des listing de la s rie 1 Celui qui affichait une phrase en faisant appara tre les lettres comme sur les affichages des gares ou des a roports Reprenez donc un peu ce listing c tait le num ro 3 et souvenez vous de ce qui se passait pour la phrase situ e l adresse TXT Nous affichions cette phrase mais auparavant elle tait modifi
66. seconde ligne cette m me ligne est maintenant indi qu e par le PC et notre registre D0 contient maintenant la valeur 12345678 MONST indique tous les chiffres en hexad cimal vous commencez comprendre l int r t de la calculatrice Continuons en refaisant Control Z C est maintenant la ligne 3 de notre programme qui est indiqu e par le PC tandis que D1 s est trouv rempli par 00001012 Continuons avec Control Z L addition entre D0 et D1 s est effec tu e Comme nous l avions vu dans le cours 2 les possibilit s sont minimes car le r sultat a cras l ancienne valeur de D1 Pour r aliser D0 D1 D2 il aurait d abord fallu transf rer D1 dans D2 puis faire ADD L D0 D2 Dans notre cas D1 contient maintenant la valeur 1234668A Notre programme n ayant pas v ritablement de fin quittons le artificiellement en tapant Control C SECOND PROGRAMME Effacer le premier programme alternate C et tapez le suivant MOVE L 12345678 D0 MOVE W D0 D1 MOVE B D1 D2 Nous avons vu dans Monst que D0 D7 taient des registres assez grands Nous avons r ussi mettre 12345678 dans D0 ce qui donne quand m me 305419896 en d cimal En effet le 68000 est un micro processeur 16 32 bits ce qui fait que ces registres ne sont pas cod s sur 16 bits mais sur 32 32 bits cela fait un long mot Long Word Dans notre premier programme nous voulions que l instruction MOVE agisse sur tout le registre donc sur un long mot c est pour cel
67. simplement dit ses employeurs Vos clients ce ne sont pas les automobiles ce sont les automobilistes Evident sauf qu l poque la Shell vendait pour les automobiles sans s en rendre compte Eh bien sur ST les programmeurs programment pour le ST ou pour eux mais tr s rarement pour les utilisateurs Tout ceci tant dit nous allons aborder maintenant la ligne A en esp rant cependant que cela vous fera r fl chir lorsque vous concevrez vos programmes LA LIGNE A Doc officielle Atari Chapitre Ligne A Bon descriptif des diff rentes fonctions assez brut mais efficace Bible ST Bon descriptif des fonctions Livre du d veloppeur idem mais en plus descriptif des donn es dont on peut d duire l empla cement avec la ligne A Doc du GFA 3 00 Assez trange Si les fonctions ligne A du GFA sont appel es de la m me mani re qu en assembleur le concepteur de ce langage a r ussi inventer des fonctions en clamant bien haut qu il s agit de fonction Ligne A Peut tre pour que le GFA soit encore moins compatible A ce propos il semblerait que la ligne A ne soit plus officiellement support e par le TT A voir Dans le premier kilo de m moire de notre machine nous avons un bon paquet d adresses utilis es par le microprocesseur Nous avons pass pas mal de temps plucher le principe de fonctionnement de ce kilo qui sert au 68000 de relais afin qu il trouve l adresse de la routine qu il doit
68. 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 routi
69. un programme principal et 6 accessoires Pour le GEM il n y a fondamentalement pas de diff rence entre un PRG et un ACC et pour cette raison dans le vocabulaire GEM on les nomme applications Le GEM peut donc se retrouver avec 7 ap plications g rer chacune ayant potentiellement plusieurs fen tres On imagine facilement le bazar dans la m moire Comment le GEM s y retrouve t il Au d marrage d une application celle ci appelle la fonction AP PL_INIT Application_Init Cette fonction pr vient le GEM que no tre application d sire devenir active et le GEM r pond en nous fournissant un num ro l APP_ID Application_Identificator qui nous servira maintenant de r f rence Notre application sera donc par exemple la 3 et sera reconnue comme telle par le GEM Atten tion l APP_ID n est donn l application que pour la dur e de pr sence en m moire de celle ci Si je lance un ACC le lundi il peut h riter de l APP_ID 4 mais si je le relance le mardi dans des conditions diff rentes il peut obtenir l APP_ID 5 Seulement il gardera cet APP_ID pendant toute son activit Lorsque l on ouvre une fen tre c est le m me principe Le GEM fournit ce que l on nomme un HANDLE c est dire un num ro cor respondant la fen tre En fait le HANDLE c est le num ro d iden tification d une fen tre mais potentiellement aussi d un p riph rique Multitraitement Une des parties les plus importantes du G
70. vos bases sont bien solides et que nous allons pouvoir allez beaucoup plus vite La premi re s rie tait destin e vous apprendre le m canisme de fonctionnement du 68000 et du ST au niveau de son syst me d exploitation la seconde s rie ne sera qu un ensemble de ficelles de clefs d acc s divers choses Si vous avez PARFAITEMENT tudi s la premi re s rie vous pourrez tirer doucement sur ces ficelles afin de faire venir vous les informations Si par contre vous pensez avoir compris la premi re s rie mais que vous n tes pas certain de tout avoir compris il est encore temps de la relire car d ici quelques pages vous allez commencer vous sentir perdu ce qui serait bien dommage Pour v rifier un tout petit peu vos connaissances voici quelques questions toutes b tes 1 MOVE L 12345678 A0 puis MOVE W 1234 A0 Qu obtient on dans A0 2 MOVE L 12345678 A0 puis MOVE B 12 A0 Qu obtient on dans A0 3 Pouvez vous expliquer concr tement ce qui se passe lorsque je fais MOVE W 2700 SR 4 MOVE L MESSAGE SP Que r alise cette fonction MOVE W 9 SP TRAP 1 ADDQ L 4 SP Avant de vous donner les r ponses voici la liste non d finitive de ce qui sera trait dans cette seconde s rie de cours Les traps comment les reprogrammer la Ligne A le GEM les tableaux les programmes auto modifiables les macros les inclusions de fichiers etc A chaque fois le travail consistera vous in
71. 2345678 Mais dans quel sens avons nous d cal ce SP Vers le d but de la m moire vers l adresse 0 de notre tube puis que nous avons fait SP Le pointeur de pile remonte donc le long du tube Nous avons ensuite recommenc la m me chose pour y d poser 23456 Ensuite BSR donc m me chose mais r alis automa tiquement par le 68000 afin d y d poser l adresse de retour 4 oc tets Est ce tout Non car une fois rendu dans la subroutine nous avons d pos sur la pile les registres D0 D1 et A0 Le transfert ayant t effectu sur le format long mot MOVEM L nous avons transf r 3 fois 4 octets soit 12 octets bytes Notre copie de A7 qui est en A0 ne pointe donc pas sur nos 2 nom bres mais beaucoup plus loin Le nombre que nous avons plac en second sur la pile est donc 16 vers le d but du tube faites le calcul 1BSR 12 bytes de sauvegarde cela fait bien 16 bytes et le nombre plac en premier sur la pile suit son copain et se trouve donc 20 bytes d ici en vertu toujours du principe de la pile le dernier entr c est le premier sorti Nous pouvons donc dire que 23456 est A0 d cal de 16 et que 12345678 est A0 d cal de 20 Pour r cup rer ces 2 nombres plusieurs actions sont possibles 1 ajouter 16 l adresse de A0 puis r cup rer Une addition d adresse se fait par ADDA add adress Nous faisons donc ADDA L 16 A0 AO pointe donc maintenant sur 23456 r cup rons donc ce nomb
72. 5 Tout d abord inclusion de la routine de d marrage des programmes petit message de pr sentation en effa ant l cran au passage Ensuite initialisation de la ligne A En retour nous avons en AO l adresse du tableau que nous allons remplir avec les param tres Ceux ci sont assez nombreux et doivent tre pass s des endroits bien pr cis Certains demandent une petite explication Le clipping C est un syst me bien utile que nous retrouverons dans le GEM Par exemple nous voulons afficher sur l cran une image mais celle ci ne doit appara tre que dans un petit rectangle Il va donc falloir se compliquer s rieusement la tache afin e de ne pas afficher toute l image Au lieu de cela nous pouvons utiliser le clipping Cela consistera donner les coordonn es du rectangle dans lequel nous voulons que l image apparaisse et dire que c est le rectangle de clipping Ensuite il reste afficher l image sur tout l cran et elle n appara tra que dans le rectangle le reste de l cran tant clipp La encore il est bien vident que cela ralenti l affichage nous avons en effet affich tout une image pour n en voir qu un bout et de plus le syst me a t oblig de tester sans arr t pour savoir s il devait nous montrer ce pixel puis l autre etc Cette m thode est pourtant hyper utile et nous verrons cela de nombreuses fois Le type d affichage C est un descripteur permettant de savoir comment va se faire l affichage 0
73. 6 octets nous aurions fait LEA IMAGE A6 ADDA L 32066 A6 Je rappelle que cela se lit load effective address IMAGE dans A6 add address long Petit exercice faire un programme qui tourne en moyenne r so lution passe en basse affiche une image basse r solution attend un appui sur une touche puis repasse en moyenne Sachant utiliser les fonctions Xbios et les boucles vous devriez tre capable de faire une routine de sauvegarde de la palette et une autre de restitution de celle ci Il est tout fait possible d inclure ainsi des fichiers tr s divers Il existe pourtant plusieurs probl mes Tout d abord la taille du programme r sultant En effet notre image DEGAS de part sa taille a grossi notre programme de 32Ko Bien s r il y a maintenant l avantage de pouvoir emp cher les bidouilleurs de venir y mettre leur pieds Encore qu une image DEGAS fait toujours la m me taille mais il est possible d inclure une image compact e en mettant bien s r une routine de d compactage dans notre programme Autre probl me le temps En effet si l affichage lui m me est plus rapide du fait qu il n y a pas aller chercher l image sur la disquette puisque cette image est d j en m moire avec le programme c est l assemblage que a p dale Il faut donc pas ser par des m canismes de travail bien ordonn s Mettre en place un disque virtuel de pr f rence r sistant au Reset recopier les images dedans et ensuite commenc
74. COURS D ASM 68000 par le F roce Lapin retour au VOLUME 1 kkxkxkxkkkxkxkxkkkxkxkxkkxkkkkkkkkxkkkkkkxkkkkxkkkkk kkkxkkk xkxkkkkkkxkxkk kk xkkkk kkkxkxkkxkxk COURS D ASSEMBLEUR 68000 SUR ATARI ST par Le F roce Lapin from 44E Cours num ro 1 Li kkkxkxkxkxkxkkkxkkkkkkxkkkkkkkkkkkkk xkxkkk xkkkkkkxkkkkxkkkxkkkkkk xkk kkk xkkk xkkkkxkx k Ce cours d assembleur pourra sembler r duit de par sa taille Il ne l est cependant pas par son contenu L assembleur est le lan gage le plus simple qui soit pourvu qu il soit expliqu simple ment ce qui n est malheureusement pas souvent le cas C est un peu le pari de ces cours vous apprendre ce qu est l assembleur en une quinzaine pas plus De toutes fa ons part grossir la sauce avec du bla bla inutile je ne vois pas tr s bien comment faire pour que les cours durent plus de 15 jours Evidement vous com prenez bien que les cours payants ont eux tout fait int r t faire durer le plaisir et vous faire croire que c est tr s tr s dur comprendre et qu il va falloir au moins 2568478 le ons si vous voulez vous en sortir Ce cours est destin au d butant il est compos de plusieurs par ties relativement courtes mais dans lesquelles TOUT EST IMPORTANT PRESENTATION ET AVERTISSEMENT Pour programmer en ASM plusieurs habitudes sont n cessaires Au tant les prendre d s le d but car tr s vite ce qui apparais
75. E W A0 D0 CMP W SFFFF DO BNE ICI LEA TABLEAU AO MOVE L A0 PTN_TAB BRA AFFICHE ICI MOVE L A0 PTN_TAB MOVE W D0 SP MOVE W 2 SP TRAP 1 ADDQ L 4 SP RTS De plus il faut rajouter apr s le INCLUDE donc avant le label d but LEA TABLEAU AO MOVE L A0 PTN_TAB et en section BSS PTN_TAB DS L 1 Un peu d analyse apr s ces changements Tout d abord nous consta tons avec bonheur que a marche Au d but nous mettons en place un pointeur LEA TABLEAU AO met l adresse du tableau en A0 MOVE L A0 PTN_TAB et la sauve dans PTN_TAB Nous avons donc maintenant dans le tube en face de l tiquette PTN_TAB un long mot ce long mot tant l adresse du d but du ta bleau Ensuite dans la routine nous pr levons cette adresse Ici une petite remarque s impose car la confusion est fr quente Si nous avons IMAGE INCBIN A MAISON PI1 et que nous voulons travailler avec cette image nous ferons LEA IMAGE AO AO pointera alors sur l image Par contre si nous avons PTN_IMAG DC L IMAGE C est dire une tiquette pour un long mot se trouvant tre l adresse de l image en faisant LEA PTN_IMAGE A0 nous ne r cup rons pas en AO l adresse de l image mais en fait l adresse de l adresse de l image Pour r cup rer directement un pointeur sur l image il faut faire MOVEA L PTN_IMAGE A0 Cependant pour r cup rer l adresse du tableau il aurait galement t possible de faire MOVEA L TABLEAU A
76. EM concerne la gestion des v nements Un v nements c est une action de l utilisateur de la machine clic souris appui sur une touche etc En fait sous GEM les applications passent la plus grande partie de leur temps attendre Imaginons un PRG avec une fen tre ouverte et un menu d roulant et en m me temps en m moire 3 accessoires Je vais dans le menu des accessoires Le menu se d roule et les titres passent en inverse vid o lorsque la souris passe dessus Tout ceci est fait par le GEM tout seul comme un grand Je clique sur le titre de l accessoire 2 Le GEM d tecte le clic sait que je suis dans les accessoires re garde sur quelle entr e j ai cliqu Comme c est le GEM qui a at tribu les entr es aux ACC il envoie un message l accessoire 2 pour lui dire il faut que tu t ouvres Celui ci s ouvre donc et affiche une fen tre l cran Nous avons donc 2 fen tres en m me temps Je clique sur celle du PRG le GEM regarde qui appartient cette fen tre et envoi au PRG un message pour lui dire on a acti v ta fen tre num ro XX etc Nous allons donc construire dans nos programmes sous GEM un noyau de surveillance des actions et nous r agirons en fonction de celles ci Pour appeler les fonctions du GEM Les appels se font avec des param tres que nous passons dans des tableaux Comme nous utilisons DEVPACK nous utiliserons sa bi blioth que En effet pour les appels au GEM les param tres sont
77. MBLEUR 68000 SUR ATARI ST gi par Le F roce Lapin from 44E a Cours num ro 4 kkkkxkxkxkxkxkxkxkxkxkxkxkxkkkkkkxkxkkxkkkxkkxkkkkkkkkxk xkk xkkxkkxk kxkkxkkkxk xkkk kkkk kkkk kxkkxkxx k Nous allons aborder maintenant les registres d adresse Tout comme les registres de donn es ces registres sont cod s sur 32 bits un long mot Donc priori aucune diff rence puisque le micro pro cesseur ne conna t que des chiffres que ceux ci repr sentent des donn es ou des adresses peu lui importe C est vrai en grande partie et d ailleurs sur certains micro processeurs il n y a qu un ou deux registres qui peuvent contenir indiff remment adresse ou donn es Voyons gr ce un exemple les diff rences en ce qui concerne le 68000 MOTOROLA Tapons donc le programme suivant apr s avoir bien s r effac l ancien et assemblons MOVE L 12345678 D0 MOVE B AA DO0 MOVE L 12345678 A0 MOVE B AA A0 MOVE L 12345678 A1 MOVE B A1 D1 L assembleur note 2 erreurs et nous les annonce par invalid size at line 4 et la m me chose pour line 6 Puisque c est la taille et non l op ration elle m me qui semble poser probl me nous en d duisons que le MOVE vers ou partir d un registre d adresse n est pas possible sur un byte Rectifions donc la ligne 4 et la ligne 6 en rempla ant les MOVE B par des MOVE W et r assemblons Note Lorsque l assembleur note une erreur il donne la ligne
78. N_IMAGE DC L IMAGE A l adresse IMAGE nous trouvons dans le tube l image elle m me mais l adresse PTN_IMAGE nous trouvons un long mot qui se trouve tre l adresse de l image Avec un peu d imagination nous pouvons donc imaginer un tableau compos de long mot ces longs mots tant des adresses d images de textes mais aussi pourquoi pas de routines Voici le squelette d un programme r alisant une telle chose Au d part m me chose que pr c demment attente d un appui touche v rification de la validit de la touche on trafique pour avoir un code du type 0 1 2 3 4 puis on le mulu par 4 puisque notre tableau va tre compos de long mot LEA TABLEAU AO MOVE L O A0 D0 W AO0 JSR A0 BRA DEBUT et on recommence Nous faisons un JSR jump subroutine au lieu d un BSR Pourquoi essayez et regardez l annexe sur les instructions pour voir les diff rences entre les 2 instructions Mais de quoi est compos notre tableau eh bien par exemple TABLEAU DC L TOUT_VERT DC L TOUT_BLEU DC L QUITTER DC L DRING DC L COUCOU etc Toutes ces entr es tant les adresses des routines Par exemple COUCOU move l message sp move w 9 sp trap 1 addq 1l 6 sp rts La routine TOUT_VERT met toute la palette en vert etc Il est de m me possible de mettre en tableau des adresses de phrases et de passer l adresse pioch e une routine qui affiche avec gemdos 9 par exemple Une derni re
79. O Ceci dit continuons notre exploration Dans PTN_TAB nous avons donc l adresse du d but du tableau Attente d un appui touche hop on saute dans la routine Transfert l adresse contenue dans PTN_TAB dans A0 puis on pr l ve le word contenu dans le tube cette adresse et on le met en D0 Comme nous avons r alis cette op ration avec AO AO point donc maintenant sur le prochain word du tableau Testons si le word pr lev est S SFFFF ce qui in diquerait la fin du tableau Si ce n est pas le cas on saute ICI et on sauve la nouvelle valeur de A0 dans PTN_TAB Si le word pr lev est SFFFF on recharge PTN_TAB avec l adresse du haut du tableau et c est reparti comme en 14 Ce syst me de pointeur tr s fr quemment utilis est simple d em ploi et bien commode Voyons cependant une autre m thode plus tordue Supprimons tout d abord la routine AFFICHE et rempla ons la par la suivante AFFICHE MOVEA L TABLEAU AO MOVE W A0 D0 MOVE W D0 SP MOVE W 2 SP TRAP 1 ADDO L 4 SP RTS R assemblons et lan ons Il est bien vident que cela ne marche plus puisqu chaque appel de la routine nous rechargeons A0 avec l adresse du TABLEAU donc le word pr lev sera toujours le pre mier du tableau Passons sous MONST avec Alt D Descendons sur le label AFFICHE Nous trouvons en face MOVEA L TABLEAU AO etc Quittons avec control C puis r assemblons mais attention avant de cliquer sur assembler jeto
80. O oO m r serv r serv donn es superviseur programme superviseur reconnaissance d interruption hhhHHho hRhhooh oror Vous trouverez de nombreuses autres informations sur le 68000 dans les ouvrages tels que Mise en oeuvre du 68000 aux ditions Sybex ou dans les ouvrages parus aux ditions Radio Ces informa tions m me si elles ne paraissent pas primordiales permettent de mieux comprendre le mode de fonctionnement de la machine ce qui ne peut apporter que des avantages COURS D ASM 68000 par le F roce Lapin retour au VOLUME 1 kkkxkxkxkxkxkkkxkkkkkkxkkkkkkkxkkkkkkkxkkk xkkkxkkkxkkkkxkkk xkkkkkkxk kk kkk xk kkk kxkkkxkxkxkx COURS D ASSEMBLEUR 68000 SUR ATARI ST par Le F roce Lapin from 44E i Listing num ro 1 Cours num ro 7 K kkxkxkxkxkxkxkxkxkxkkxkkkkxkxkxkkxkkkkxkkkkk xkkkkxkkkk xkxkxkkxkkk kk xkxkkk kk xkkk kxk kxkkk kk xkkkk kxxkxkxkxk DEBUT MOVE L MENU SP passe adresse phrase MOVE W 9 SP num ro fonction TRAP 1 appel Gemdos ADDQ L 6 SP correction pile attente appui touche MOVE W 7 SP fonction num ro 7 TRAP 1 du gemdos ADDQ L 2 SP correction pile test du r sultat CMP W Q D0 q majuscule BEQ QUITTER oui bye bye CMP W q DO0 q minuscule BEQ QUITTER oui bye bye CMP W V DO v majuscule BEQ AFFICHAGE oui gt affiche le message CMP W v DO V minuscule BNE DEBUT non On a donc une autre
81. P D3 SP 2 SP d cale partir du d but de fichier handle du fichier nbr d octets sauter MOVE W TRAP ADDA L TST W BLT Puis chargement MOVE L MOVE L MOVE W MOVE W TRAP ADDA L TST W BLT On place maintenant cette palette avec MOVE L MOVE W TRAP ADDQ L On referme le MOVE W MOVE W TRAP ADDQ L BRA 66 SP 1 10 SP DO ERREUR BUFFER_PAL SP 32 SP D3 SP 63 SP 1 12 SP DO ERREUR BUFFER_PAL SP 6 SP 14 6 SP fichier D3 SP 62 SP 1 4 SP FIN En cas d erreur on vient ici ERREUR MOVE L MOVE W TRAP ADDQ L FIN MOVE W TRAP ADDQ L CMP W BEQ Puisqu on est MOVE W MOVE L MOVE L MOVE W TRAP ADDA L Puis on quitte en MESSAGE_ERREUR SP 9 SP 1 6 SP 7 SP 1 2 SP 0 RESOLUTION NOT_MOYENNE fonction Fseek du GEMDOS test DO adresse destination nbr octets lire handle du fichier fonction Fread du GEMDOS Xbios 6 adresse palette noire fonction SetPalette du XBIOS handle fonction Fclose du GEMDOS et on se sauve pr vient attend un appui touche basse on reforce en moyenne r solution 1 SP 1 SP 1 SP 5 SP 14 12 SP moyenne r solution adresse cran inchang e adresse cran inchang e fonction Setscreen du XBIOS correction NOT_MOYENNE MOVE W 0 SP TRAP 1 e E ms en nm on le A E
82. P 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 FFFFFAO0D 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
83. TION TRAP 1 34 136 088 SD VECTEUR D INSTRUCTION TRAP 2 35 140 08c SD VECTEUR D INSTRUCTION TRAP 3 36 144 090 SD VECTEUR D INSTRUCTION TRAP 4 37 148 094 SD VECTEUR D INSTRUCTION TRAP 5 38 152 098 SD VECTEUR D INSTRUCTION TRAP 6 39 156 09C SD VECTEUR D INSTRUCTION TRAP 7 40 160 0240 SD VECTEUR D INSTRUCTION TRAP 8 41 164 044 SD VECTEUR D INSTRUCTION TRAP 9 42 168 0A8 SD VECTEUR D INSTRUCTION TRAP 10 43 172 OAC SD VECTEUR D INSTRUCTION TRAP 11 44 176 0BO SD VECTEUR D INSTRUCTION TRAP 12 45 180 0B4 SD VECTEUR D INSTRUCTION TRAP 13 46 184 0B8 SD VECTEUR D INSTRUCTION TRAP 14 47 188 OBC SD VECTEUR D INSTRUCTION TRAP 15 48 63 192 0C0O SD non attribu s r serv s 64 255 256 100 SD VECTEURS D INTERRUPTIONS UTILISATEURS SD zone de donn es superviseur SP zone de programme superviseur Les vecteurs de num ros 12 23 et de 48 des extensions futures 63 sont r serv s pour Aucun p riph rique ne doit y tre affect Note concernant le MFP circuit g n rant une grande partie des interruptions dans le ST celui ci utilise bien videmment des vecteurs d interruptions utilisateurs En effet lorsqu ici on parle d utilisateur ce n est pas de vous qu il s agit mais des gens qui utilise le 68000 pour fabriquer leurs machines c est dire les gens d ATARI de COMMODORE ou d APPLE COURS D ASM 68000 par le F roce Lapin retour au VOLUME 1 kkxkxkxkxkxkxkxkxkxkkxkxkxkkxkxkxkxxkxxkxk L EMULATEUR VT52 kkkxkxkxk
84. URE DE LA MEMOIRE La m moire c est un tube tr s fin et tr s long Il nous faut distinguer 2 choses 1 Ce qu il y a dans le tube 2 La distance par rapport au d but du tube ATTENTION cette notion doit tre parfaitement comprise car elle est perp tuellement source d erreur Gr ce la distance nous pourrons retrouver facilement ce que nous avons mis dans le tube Cette distance est appel adresse Le tube a un diam tre de 1 byte octet Lorsque je vais parler de l adresse 6F00 28416 en d cimal c est un emplacement A cet emplacement je peux mettre un byte Si la donn e que je veux met tre tiens sur un word donc 2 bytes car 1 word c est bien 2 bytes accol s cette donn e occupera l adresse 6F00 et l adresse 6F01 Imaginons que je charge une image 32000 octets partir de l adresse 12C52 Je vais donc boucler 32000 fois pour d poser mon image en augmentant chaque fois mon adresse Imaginons maintenant que je veuille noter cette adresse Je vais par exemple la noter l adresse 6F00 Donc si je me prom ne le long du tube jusqu l adresse 6F00 et que je regarde ce niveau l dans le tube j y vois le chiffre 12C52 cod sur un long mot les adresses sont cod s sur des longs mots Ce chiffre occupe donc 4 emplacements de tube correspondant 6F00 6F01 6F02 6F03 Or que repr sente ce chiffre Une adresse celle de mon image J esp re que c est bien clair Un programme
85. URS D ASSEMBLEUR 68000 SUR ATARI ST par Le F roce Lapin from 44E Seconde s rie num ro 5 Cours 7 Listing B START S MOVE L MESSAGE SP coucou et efface cran MOVE W 9 SP TRAP 1 ADDQ L 6 SP DC W A000 initialisation ligne A MOVE W 1 24 A0 couleur du premier plan CLR W 26 A0 couleur du second MOVE W 2 36 A0 type d affichage MOVE W 50 38 A0 X1 MOVE W 50 40 A0 Y1 MOVE W 200 42 A0 X2 MOVE W 300 44 A0 Y2 MOVE L MOTIF 46 A0 adresse du motif MOVE W 3 50 A0 nombre de mots du motif 1 CLR W 54 AO pas de clipping DC W A005 appel la fonction MOVE W 7 SP attente appui touche TRAP 1 ADDQ L 4 SP MOVE W 0 SP et bye bye TRAP 1 E A ESEE N EEA EE SECTION DATA 27 E Tracage de rectangle avec ligne A 0 MESSAGE DC B EVEN Motif en W Je l ai crit en binaire pour mieux voir le dessin MOTIF DC W DC W DC W DC W 1100110011001100 1100110011001100 0011001100110011 0011001100110011 SECTION BSS DS L PILE DS L END 100 1 kkkxkxkxkxkxkxkxkxkxkkkkkxkkkkkkk xkkkkkk xk xkxkxk xkxkxkxkkxkxkkkkxkkk xkkkxkkkxk xk xkk xk kxkk xkkkxk kxkkxk kxkxkx xx k COURS D ASSEMBLEUR 68000 SUR ATARI ST par Le F roce Lapin from 44E Seconde s rie Listing num ro 6 Cours 7 kkkxkxkxkxkxkxkxkxkkkkkkxkxkkkkxkxkxkkkkxkk xkxkk xkxkxkxkxkk xk xkxkxkxkkk xkkkkkk xk kk kk xkkkxk kk kkkkxkk kxkkxk
86. a que nous avions pr cis L apr s le move NOTE Le vocabulaire est tr s important et demande un petit effort au d but Ainsi MOVE L ne veut rien dire Il convient de lire ce mn monique c est ainsi que sont appel les instructions assem bleurs MOVE LONG D ailleurs l appellation mn monique qui a rapport avec la m moire qui sert aider la m moire est rap procher de mn motechnique capable d aider la m moire par des moyens d association mentale qui facilitent l acquisition et la restitution des souvenirs CF dictionnaire Le Robert Autant donc lire les instructions en Anglais ce qui facilitera grandement la compr hension Puisque notre registre DO comme les autres d ailleurs et cod sur un long mot il contient donc 2 words c te c te Pour les distinguer nous appellerons celui de gauche word de poids fort et celui de droite word de poids faible Chacun de ces words est lui m me compos de 2 bytes celui de gauche tant de poids fort et celui de droite de poids faible De poids faible car les change ment qu il peut apporter la totalit du nombre sont faible alors que les donn es de gauche donc de poids fort y apportent des va riations importantes Assemblons notre programme et d buggons Ex cutons la premi re ligne Le r sultat est le m me que pour le premier programme le PC indique la seconde ligne tandis que D0 re u la valeur 12345678 Maintenant ex cutons la seconde ligne Que d
87. a routine qui affiche un ca ract re puis revient Voici un premier essai INCLUDE B START S DEBUT MOVE W 7 SP TRAP 1 ADDQ L 2 SP CMP W DO BEQ FIN BSR AFFICHE BRA DEBUT FIN MOVE W 0 SP TRAP 1 EVE a EEE REP SRE RE QUE RE SEE RE ES AFFICHE LEA TABLEAU A6 adresse du tableau MOVE W A6 D0 pr l ve le word MOVE W D0 SP le passe sur la pile MOVE W 2 SP pour l afficher TRAP 1 ADDQ L 4 SP RTS puis on remonte Re E E E EA E E E E E E E EN E SECTION DATA TABLEAU DC W 65 66 67 68 69 70 FFFF SECTION BSS DS L 100 PILE DS L 1 END Assemblez et lancez le programme Constatation chaque appui sur une touche on obtient un A mais pas les autres lettres Evidemment puisqu chaque fois que nous sautons dans notre su broutine AFFICHE celle ci recharge l adresse du tableau Le ca ract re pr lev est donc toujours le premier Pour viter cela il faut donc cr er un pointeur qui avancera dans ce tableau Dans no tre exemple il suffisait en fait de placer le LEA TABLEAU A6 au d but du programme A6 n tant modifi par personne cela aurait fonctionn jusqu au 7 me appui sur une touche A6 pointant alors hors du tableau De plus nous sommes ici pour apprendre et nous envisageons donc le cas o en dehors de la routine tous les registres sont modifi s Impossible donc de garder A6 comme poin teur Voici donc la routine AFFICHE modifi e AFFICHE MOVEA L PTN_TAB A0 MOV
88. 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 cont
89. acter 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 COURS D ASM 68000 par le F roce Lapin retour au VOLUME 2 KKKKKKKKKKKKKKKKKXKKKKKKKKKKKKKKKKRKKKKKKKKRERRRERRERRREKKREKRERKERKKKKEXEXX XX COURS D ASSEMBLEUR 68000 SUR ATARI ST par Le F roce Lapin from 44E Seconde s rie Listing num ro 1 Cours 3 kkxkkxkkkxkxkxkxkkkkxkkkxkxkkkxkkkkxkkkkkkkxkkkkkkkxkxkkkkxkkkxkkkkxkk xk xkxkkxk xkkkk kxkxkxk Affichage d une image incluse dans le programme LEA ADDA L MOVE L MOVE W TRAP ADDQ L MOVE W TRAP ADDQ L MOVE L ADDA L MOVE W MOVE L DBF COPIE MOVE W TRAP ADDQ L MOVE W TRAP IMAGE INCBIN IMAGE A6 2 A6 A6 SP 6 SP 14 6 SP 3 SP 14 2 SP D0 A5 32 A6 7999 D0 A6 A5 D0 COPIE 7 SP 1 2 SP 0 SP 1 A TRUC PI1 adresse image saute l en t te DEGAS on est donc sur les couleurs mise en place par XBIOS 6 cherche l adresse de l cran la sauve en A5 saute les couleurs 16 words init le compteur transf re image vers l cran attend un appui sur une touche et bye bye l image COURS D ASM 68000 par le F roce Lapin retour au VOLUME 2 kkkkxkxkkxkkxkxkkkxkkxkkkkkxkxkkxk xkkxkxkxkkxkkkkkkkxkkkk xkkkkkk
90. and Le bit Z Z signifie Z ro Il n indique pas que le r sultat est gal 0 mais plut t que le r sultat est pass de l autre cot de 0 En effet ce bit est 1 lorsqu apr s une op ration le bit de poids le plus fort du r sultat est mis 1 ce qui signifie que nous sommes en pr sence d un nombre n gatif en compl ment 2 Le bit N N signifie Negate signifie que nous sommes en pr sence d un nombre n gatif Le bit X X signifie eXtend donc extension C est un bit bien sp cial qui se comporte un peu comme une retenue Les instructions qui utilisent ce bit le pr cisent dans leur nom Par exemple ADDX qui se lit add with extend est une op ration d addition prenant en compte ce bit X Ce bit X est g n ralement le reflet du bit C mais contrairement celui ci certaines instructions ne le mo difient pas Lorsque nous tudierons de plus pr s les instructions du 68000 le fait que l instruction affecte ou non tel ou tel bit sera parfois tr s important Le bit T T signifie Trace donc suivre en Fran ais Lorsque ce bit est 1 le 68000 se trouve en mode Trace Alors l soyez bien attentif ce qui va suivre est primordial pour la suite des cours Le mode Trace est un mode de mise au point pour les programmes Et oui c est carr ment DANS le microprocesseur qu une telle commande est ins r e A chaque fois que le 68000 ex cute une instruction il va voir dans quel tat se trouve le bit T S il tro
91. ans GEM et pr parons nous faire un effort GEM nous le rend bien En dernier lieu je dirais que ces cours sont destin s faire de vous des programmeurs et pas des bidouilleurs Vous devez donc avoir connaissances des possibilit s de la ligne A et de celles du GEM Ne pensez pas cependant trouver dans ces cours la totalit des commandes GEM Ces cours sont destin s levez un coin du voile et si possible vous donnez de quoi continuer vos recherches En tout cas je peux vous assurer que la ligne A et le GEM ne sont pas plus dur qu autre choses D ailleurs y a t il quelques chose de dur en assembleur Il y a galement un avantage non n gligeable concernant la ligne A et surtout GEM Jusqu maintenant nous avons utilis des instructions assembleur 68000 et il semblait vident que dans un ouvrage sur le PASCAL le BASIC GFA ou le C nous aurions eu du mal trouver des pr cisions sur l instruction MOVEM L par exemple Concernant la ligne A mais surtout GEM nous allons utiliser principalement des macros vous voyez pourquoi ce sujet a t abord avant Or ces macros ont chacune un nom et ce nom est un nom GEM et non pas relatif tel ou tel assembleur Ainsi ouvrir une fen tre pour la faire appara tre sur l cran se fera avec une macro nomm e WIND_OPEN L avantage c est que cette fonction GEM est utilis e en Pascal en C etc Pour cette raison vous pouvez chercher de la documen tation sur GEM quelq
92. ant la couleurs ces 3 donn es au format VT52 regardez Escape Y et Escape b ou Escape t 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 x 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
93. arche pas et cherchez Bon le cours sur la pile se termine ici Ce fut un peu long mais je pense pas trop compliqu Relisez le car la pile est un truc d licat dont nous allons nous servir TRES abondamment dans le pro chain cours Si vous avez peu pr s tout compris jusqu ici il est encore temps de rattraper le temps perdu et de tout reprendre au d but car il faut avoir PARFAITEMENT tout compris et pas peu pr s Afin de vous remonter le moral je vous signale que vous tes pres que la moiti du cours COURS D ASM 68000 par le F roce Lapin retour au VOLUME 1 kkxkxkxkxkkxkxkxkkkxkxkxkkxkkkxkxkkkxkxkkkkk kxkxkkk xkxkxkkkk xk xkxkkk xkxkkkkkxkxkkk kk xkxkxkk kkk xkxkkxkxk COURS D ASSEMBLEUR 68000 SUR ATARI ST Es x par Le F roce Lapin from 44E x Cours num ro 7 kkkxkxkxkkxkxkxkxkxkxkkkxkxkkxkxkkkxkkkxkkkxkkkkxk kxkkk xkkxk xkkkxkkkxk xkkkkkkxk kxk kkkkkk xk kxkk kxk xkxkx k 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 v
94. ard AUX crit un caract re sur la sortie standard AUX crit un caract re sur la sortie standard PRN Lecture criture brute sur l entr e sortie standard Lecture brute sur l entr e standard Lit un caract re sur l entr e standard sans cho crit une cha ne sur la sortie standard Lit une cha ne format e sur l entr e standard Teste l tat de l entr e standard Fixe le lecteur de disque par d faut Teste l tat de la sortie standard Teste l tat du p riph rique standard PRN Teste l tat du standard AUX en entr e Teste l tat du standard AUX en sortie Demande le disque par d faut Fixe l adresse du DTA Disk Transfer Adress Entre Sort Demande du mode superviseur Demande la date Fixe la date Demande l heure Fixe l heure Demande l adresse du DTA Disk Transfer Adress Demande le num ro de version du GEMDOS Finit un programme qui reste r sident Demande d informations sur un disque Cr ation d un sous r pertoire Efface un sous r pertoire Fixe le catalogue courant Cr ation d un fichier Ouvre un fichier Ferme un fichier Lit un fichier crit un fichier Efface un fichier Positionnement dans un fichier Retourne fixe les attributs de fichier Recopie un identificateur de fichier standard Force un identificateur de fichier Demande le r pertoire courant Demande d allocation m moire Lib re de la m moire R tr cit un bloc de m moire allou e Charge Ex cute un programme Termine un pr
95. ation ne sont pas tr s causant une macro nomm e setprt ou cprnos De plus il faut bien reconna tre que les appels au BIOS XBIOS GEMDOS se font tous de la m me mani re et qu il n est pas difficile de s en rappeler Nous verrons cependant que l utili sation des macros dans le cas de la line_A ou du GEM est une ex cellente solution A ce sujet l assembleur MAD_MAC est r put pour son norme bibli oth que de macros Malheureusement il subsiste un doute concer nant sa disponibilit Le club STATION Informatique affirme que c est un DOMa ine PUBlique alors qu Atari le fournit avec le pack de d veloppement De toutes fa ons le club Station le fournissait sans sa biblioth que de macros ce qui en r duit consi d rablement l int r t Pour finir avec les macros sachez qu il est bien videmment possible de se d finir une biblioth que de macros puis de l inclure avec INCLUDE au d but de votre programme C est ce que nous ferons avec le GEM entre autre Exemple d exercice r aliser une macro que vous nommerez par exemple PRINT_AT et que vous appellerez ainsi PRINT_AT 12 14 MESSAGE Les 2 chiffres d signant l emplacement auquel vous voulez que le texte soit affich Une remarque il serait tout fait possible de ne pas mettre le mais ce moment l il faudrait le mettre dans la macro Par exemple print macro 1 move w 1 move w 2 trap 1 addq l 4 sp endm Pour afficher le cara
96. au premier champ ditable du formu laire Il serait possible d ajouter UNDO R crire une gestion totale de formulaire en prenant comme base de d part un article de ST Mag qui faisait a en GFA par exemple n est pas tr s dur Ce qui est sympa galement c est de rajouter un petit carr en haut droite afin de d placer le formulaire Pour toutes ces options vous pouvez bien s r faire a votre propre sauce mais les raccourcis clavier dont je parle sont d j un peu utilis s Autant continuer afin que le syst me se g n ralise plut t que de chercher se distinguer par des trucs mal commodes Je terminerai ce chapitre sur le GEM en vous invitant d couvrir le Protocole de Communication GEM Pour y avoir acc s d compactez le fichier PROTOCOL AR avec ARCHIVE PRG Vous placez ce fichier en ram_disque par exemple D Vous pr parez une disquette vierge vous lancez Archive vous choisissez Unpack avec D PROTOCOL AR et comme destination A et vous attendez Il y a tous les sources la biblio la doc les exemples etc Tous vos softs doivent tre compatibles avec ce syst me s ils veu lent tre dans le coup C est facile et cela permet des d lires assez fabuleux COURS D ASM 68000 par le F roce Lapin retour au VOLUME 2 kkkxkxkxkxkxkxkkxkkkkkkkxkkkkkkxkkkkxkkxkkkxk xkkk xk kxkkxkkkxkkkkxkkkk kkk xk kk kk xkkkkxkkkkxkxk kx k COURS D ASSEMBLEUR 68000 SUR ATARI ST par Le F roce Lapin
97. bre comme registre couleur d criture Escape c plus un nombre Idem mais pour la couleur de fond Escape d Vide l cran jusqu l emplacement du curseur Escape e Active le curseur Escape f D sactive le curseur Escape j Sauvegarde la position du curseur Escape k Remet le curseur la position sauv e avec Escape j Escape 1 Efface la ligne dans laquelle se trouve le curseur Escape o Efface la ligne jusqu l emplacement du curseur Escape p Active l criture en inversion vid o Escape q D sactive l criture en inversion vid o Escape v Active le d bordement de ligne automatique Escape w D sactive le d bordement de ligne automatique Note Faire bien attention aux commandes certaines utilisent des lettres majuscules d autres des minuscules COURS D ASM 68000 par le F roce Lapin retour au VOLUME 2 kkxkxkkkxkxkxkxkkkkkxkkkkxkxkxkkkkkkkkkxkxkkkkkxkxkkkkxkkkkk kxk kxkkkkk kkxkk xkk kkxkxkkkkxxkxk COURS D ASSEMBLEUR 68000 SUR ATARI ST par Le F roce Lapin from 44E Seconde s rie Cours num ro 1 KKKKKKKKKKKKRKKXKKXRKRXKRRKRKRKXKRRRKKXKRRXKKRKKRXKRRRRKXKRRRKRRRRXKEXKXEXX XX EX k XX Voici la seconde s rie de cours sur l assembleur 68000 sur Atari Ce cours fait suite la premi re s rie J esp re pour vous que cette premi re s rie a t parfaitement comprise et que RIEN n a t laiss de cot Partant de ce principe nous pouvons dire que
98. c la ligne A Affichage d un petit texte en haut gauche environ 5 lignes de 20 caract res A l aide d un boucle on demande la couleur des pixels et on recolorie les pixels sur la droite de l cran et de fa on ce que le texte apparaissent verticalement Pour ce qui est de d terminer l emplacement de certaines donn es gr ce un saut dans les adresses d initialisation ligne A la bible est un peu silencieuse l dessus alors que le Livre du D veloppeur chez Micro App est plus fourni Conseil de derni re minute faites beaucoup d exercices avec la ligne A et surtout faites vous une biblioth que de Macro pour ses fonctions COURS D ASM 68000 par le F roce Lapin retour au VOLUME 2 kkkxkxkxkxkxkxkkxkxkkkkkxkkkkkkkkkkkkkkkxkkkkkkkxkkkkkkkkkkkxkkkkkkkkk kk xkxkkkkxkxxk COURS D ASSEMBLEUR 68000 SUR ATARI ST par Le F roce Lapin from 44E Seconde s rie Cours num ro 8 kkkkxkxkxkxkxkxkxkxkkkxk kxkkxkxkxkxkkkkxkkkk xkkxkkkxkkkkk kxkkk xk kk xk kxkkxk xkkxk xk xkkk xkkxk kkkk kxkkxkxkxk J esp re que vous n abordez pas ce cours imm diatement apr s avoir fini de lire le pr c dent mais qu au contraire vous vous tes plong dans la ligne A avec bonheur Nous allons maintenant aborder un sujet qui je dois l avouer m effrayait un peu au d but le GEM En fait en programmation comme dans beaucoup d autres sujets on se met bosser simple
99. ch 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 11 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 D0O 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 classique
100. ct re A de code ASCII 65 il faudrait alors faire PRINT 65 COURS D ASM 68000 par le F roce Lapin retour au VOLUME 2 kkkxkxkxkxkxkxkxkxkkkkkkxkxkkkkkk kxkkkkxkk xkxkkk xkxkxkxkxkxk xk xkkxkxkxkk xkkkk xkk xk kk kkkkkk xkkk kkxxkx x k COURS D ASSEMBLEUR 68000 SUR ATARI ST par Le F roce Lapin from 44E Seconde s rie Cours num ro 5 kkxkxkxkxkkxkxkxkxkxkxkkkkxkkkxkkkxkkkxkkkkkkkkxkkkkkk xkkkkkkkxkkkkkkkk kkk kxkkk xk xkkxk xkxk kxxk Apr s ce cours sur les macros nous allons passer l usage des tableaux en assembleur J esp re qu apr s chaque cours vous effectuez vous m me des recherches et des exercices et que vous ne vous pr cipitez pas tout de suite sur le cours suivant M me si les cours vous semblent maintenant courts par rapport ceux de la premi re s rie il n en soul vent pas moins le voile sur de nombreux sujets Vous avez maintenant le niveau pour les approfondir et j esp re que vous le faites LES TABLEAUX L usage des tableaux n est pas tr s r pandu en assembleur au niveau des programmeurs d butants En effet le syst me peut sembler assez p rilleux manipuler mais s av re par contre tr s puissant et tr s commode Tout comme le principe de la pile celui des tableaux est simple mais demande beaucoup de logique pour pouvoir fonctionner convenablement Prenons tout d abord un exemple simple nous allons appuyer sur les touches de fon
101. ctions F1 jusqu F10 et chaque fois nous allons afficher une lettre Commen ons par un exemple sans tableau Voir le listing num ro 2 Au d part INCLUDE de la routine de d marrage de programme tudi e au d but de la seconde s rie Pr sentation avec un petit message puis attente d un appui sur une touche Comme nous voulons tester les touches de fonctions et que celles ci n ont pas de code ASCII nous profitons du fait que la fonction Gemdos 7 retourne dans le poids faible de D0 le code ASCII mais aussi dans le poids fort le scan code Il n y a d ailleurs pas que a de retourn car si vous consultez la bible ST ou simplement la description des fonctions dans les derni res pages de la doc du GFA 3 00 vous y apprenez que Gemdos 7 renvoi dans les bits 0 7 le code ASCI 16 23 le code clavier et 24 31 l tat des touches de commutations du clavier Petit rappel sur les codes ASCII et les scan code Les codes ASCII American Standard Code for Information Interchange sont des codes sur 7 bits qui suivent l ordre alphab tique Ce standard est aussi appelle Code t l graphique international num ro 5 Le 8 me bit est un bit de parit c est dire qu il ne sert qu la v rification de la bonne transmission du code De part le fait que ce syst me est Am ricain le codage ASCII ne prend pas en compte les accents ni les caract res du type c c dille Cependant notre ordinateur n ayant pas besoin de ce huiti me bit pour v ri
102. d chose notre disposition Ben si y a l alphabet On va donc crire 10 avec A 11 avec B 12 avec C 13 D 14 E et 15 avec F Il y a donc 16 chiffres dans notre nouveau syst me de 0 F D c signifiant 10 et Hex signifiant 6 un hexagone donc Hex D c 16 D cimal qui a 10 chiffres 0 9 hexad ci mal qui en 16 Notre programme devient donc en hexad cimal 3038 6000 D078 6002 31C0 6004 Plus clair mais c est pas encore a NOTE pour diff rencier un nombre binaire d un nombre d cimal ou d un hexad cimal par convention un nombre binaire sera pr c d de un nombre hexad cimal de et il n y aura rien devant un nombre d cimal 11 ne vaut donc pas 11 en d cimal mais 17 R fl chissons un peu Nous avons en fait crit Va chercher ce qu il y a l adresse 6000 ajoute y ce qu il y a l adresse 6002 met le r sultat l adresse 6004 Le microprocesseur peut bien s r piocher dans les milliers de ca ses m moire qu il y a dans la machine mais en plus il en a sur lui des petites poches en quelque sorte dans lesquelles il stocke temporairement des trucs dont il aura besoin rapidement Il a 17 poches 8 dans lesquelles il peut mettre des donn es et 9 dans lesquelles il peut mettre des adresses Donn e DATA et adresse ADRESS ces poches seront donc rep r es par D0 D1 D2 D7 et par A0 Al A7 et A7 nous verrons plus tard pourquoi c est pas A8 et
103. diquer comment faire et vous fournir une liste d articles d ouvrages plus ou moins pr cis dans ce domaine Il m a sembl en effet ridicule de tartiner par exemple 50 pages sur le GEM alors que cela n est pas susceptible d int resser tout le monde Par contre il m a sembl normal de d grossir ce sujet et de fournir toutes les pi ces n cessaires ou du moins les pi ces dont j ai connaissance afin que ceux d entre vous qui d sirent r aliser des applications de haut niveau puissent le faire Il leur faudra bosser mais en assembleur il est courant de passer beaucoup de temps simplement chercher de la documentation Je vous fournis donc la liste de celle ci vous de voir si vous en avez besoin A titre indicatif la doc que j utilise pour GEM se nomme PRO GEM fait environ 200 pages et est toute en Anglais Vous vous rendez donc bien compte que faire un cours complet sur GEM grossirait de mani re stupide ce cours d assembleur 1 C est ce m me principe qui sera utilis pour les diff rents sujets abord s dans cette seconde s rie Vous trouverez d ailleurs 2 livrets le premier comprenant les cours eux m mes le second comportant de courts listings sur les diff rents sujets Attention ces listings sont pour la plupart inutilisables sans avoir lu au pr alable le cours correspondant Pour finir je vous donnerai le m me conseil que pour la premi re s rie prenez votre temps relisez bien chaque chapitre fait
104. donc contraint de la mettre en DC Le danger serait que notre programme essaye de lire cette partie Faire un BSR ANC_PAL par exemple serait fatal mais nous sommes assez s rieux pour ne pas le faire donc pas de probl me Une fois tap ce petit listing sauvez le par exemple sous le nom SAUV_PAL S Ensuite modifiez le programme du listing 1 celui que nous venons de voir avec l image incluse Juste apr s la fin du programme par MOVE W 0 SP TRAP 1 donc juste avant l inclusion de l image mettez INCLUDE A SAUV_PAL S Ne mettez pas d tiquette sur le bord gauche puisque la premi re tiquette c est SAUVE PALETTE et qu elle est dans notre routine Ensuite au tout d but du programme mettez BSR SAUVE _ PALETTE et la fin juste avant de quitter mettez BSR REMET_PALETTE Au niveau taille votre listing est donc simplement augment de 3 lignes BSR SAUVE _ PALETTE BSR REMET_PALETTE et INCLUDE A SAUV_PAL S et pourtant ce sont 24 lignes qui sont ajout es Nous sommes donc en train de nous cr er une biblioth que C est une tr s grande partie du travail du programmeur en assembleur car de nombreuses choses reviennent souvent initialisation par sauve garde de la palette passage en basse r solution et passage en Su perviseur restitution en faisant l inverse d compactage des images etc De m me si vous tes en train de r aliser un gros programme en cours de d veloppement ce sont des pages enti res qui
105. e l adresse colonne et l adresse lettre Dans la cas pr sent il suffit de faire peu pr s la m me chose Pr parons une phrase ainsi TXT DC B TOUCHE F NUMERO DC B h 13 10 0 A chaque appui sur une touche de fonction nous retirons 10 en d cimal au scan code et nous mettons le r sultat l adresse NUMERO Ainsi le scan code de la touche F1 3B donc 59 en d cimal deviendra 49 qui est le code ASCII de la lettre LS Nous verrons donc s afficher TOUCHE F1l R alisez ce programme avant de passer la suite cela vous fera un excellent exercice 1 1 Passons maintenant au tableau en modifiant un peu l affichage Un appui sur affichera F1 F2 F2 F4 F5 F6 F7 F8 F9 F10 DOHGKH TIENNE Premi re constatation si les scan code des touches se suivent toujours on peut dire que le lien logique entre les lettres affich es est un peu l ger Prenez le listing num ro 3 et commen ons l tudier Tout le d but jusqu au commentaire d touche est valable est strictement identique au listing pr c dent Ensuite nous attaquons la partie utilisant le tableau L adresse de celui ci est pass e en A0 Load Effective Adress ensuite on retire 3B DO afin que celui ci ait une valeur de 0 9 Le tableau que nous utilisons est compos de Words Or un word c est 2 bytes et la m moire est compos de bytes Pour se d placer dans un tableau en word alors que notre unit c est le byte il faut d
106. e ERROR si le format de la date est incorrect REMARQUES Le GEMDOS n est pas difficile sur la date par exemple le 31 F vrier ne lui d pla t pas Le GEMDOS ne pr vient PAS le BIOS que la date a chang e 2C Tgettime Demande l heure WORD Tgettime Retourne l heure courante dans le format DOS Do er n 1110540 heure minute seconde 0 23 0 59 0 28 lee sn fans hrs fees RETOUR Les bits 0 4 contiennent les secondes divis es par 2 0 28 5 10 contiennent les minutes 0 59 11 15 contiennent les heures 0 23 NS ns a aa ia aip eah aia aa a A a A a a a aa a a A a a A a E a a a a a a a a i E pp a A ig a A a i a i a N a A a a 2D Tsettime Fixe l heure WORD Tsettime heure WORD heure Fixe heure comme heure courante dans le format d crit dans Tgettime RETOUR 0 si le format de l heure fournie est valide ERROR si le format de l heure n est pas valide REMARQUE Le GEMDOS ne pr vient pas le BIOS que l heure a chang Re mm me men ET a ai a 2F Fgetdta Demande l adresse du DTA Disk Transfer Address LONG Fgetdta Retourne l adresse courante du tampon de stockage des donn es sur un fichier DTA employ e par les fonctions Fsfirst et Fsnext 30 Sversion Demande le num ro de version du GEMDOS WORD Sversion Retourne le num ro de version du GEMDOS en format invers L octet le plus significatif contient la partie basse du num ro l octet le moins significati
107. 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
108. e Al et de D1 Nous constatons par la suite que seul le word de poids faible de Al vient craser celui de D1 NOTE AA est bien en chiffre en hexad cimal Si vous pensiez qu il s agissait de simples lettres de l alphabet dormez 1 ou 2 jours et reprenez le cours la premi re le on De tout ceci nous d duisons 2 d finitions REGISTRES DE DONN ES Chaque registre de donn es a une longueur de 32 bits Les op randes sous forme d octet occupent les 8 bits de poids faible les op randes sous forme de mot les 16 bits de poids faible et les op randes longs la totalit des 32 bits Le bit de poids le plus faible est adress comme bit 0 le bit de poids le plus fort est adress comme bit 31 Lorsqu un registre de donn es est utilis soit comme op rande source soit comme op rande destination seule la partie appro pri e de poids faible est chang e La partie restante de poids fort n est ni utilis e ni modifi e REGISTRES D ADRESSE Chaque registre a une longueur de 32 bits et contient une adresse sur 32 bits Les registres d adresse n acceptent pas une op rande dont la taille est l octet Par cons quent lorsqu un registre d adresse est utilis comme op rande source soit le mot de poids faible soit l op rande long dans sa totalit est utilis en fonction de la taille de l op ration Lorsqu un registre d adresse est utilis comme destination d op rande le registre entier est concern ind pendamment de la
109. e cr ation d un fichier 41 Fdelete Efface un fichier 45 Fdup Recopie un identificateur de fichier standard 46 Fforce Force un identificateur de fichier 2F Fgetdta Demande l adresse du DTA Disk Transfer Adress 3D Fopen Ouvre un fichier 3F Fread Lit un fichier 56 Frename Renomme un fichier 42 Fseek Positionnement dans un fichier 1A Fsetdta Fixe l adresse du DTA Disk Transfer Adress 4E Fsfirst Recherche la premi re occurrence d un fichier S4F Fnext Recherche l occurrence suivante 40 Fwrite crit dans un fichier 48 Malloc Demande d allocation m moire 49 Mfree Lib re de la m moire 4A Mshrink R tr cit un bloc de m moire allou e 4B Pexec Charge Ex cute un programme 4c Pterm Termine un programme 00 PtermoO Termine un programme code de retour 0 31 Ptermres Termine un programme qui reste r sident 20 Super Entre Sort Demande du mode superviseur 30 Sversion Demande le num ro de version du GEMDOS 2A Tgetdate Demande la date 2C Tgettime Demande l heure 2B Tsetdate Fixe la date 2D Tsettime Fixe l heure Mn SE 2 00 Pterm0 Finit un programme void PtermoO Termine un processus fermant tous les fichiers qu il a ouvert et lib rant la m moire qu il a allou e Retourne 0000 comme code de sortie au programme parent 01 Cconin Lit un caract re sur l entr e standard LONG Cconin Lit un caract re sur l entr e standard identificateur 0 Si l entr e standard est la conso
110. e que l on appelle un lamer dans les d mos celui qui recopie mais ne comprend rien Si par contre vous voulez savoir alors accrochez vous car les in fos sont rares mais quel plaisir lorsqu apr s plusieurs nuits blanches vous verrez appara tre votre premier scrolling dont vous pourrez dire c est moa qui l ai fait et l ce sera vrai Dans ce cours nous tudierons le 68000 mais galement les particu larit s du ST les interruptions par le MFP68901 le son digit ou non les manipulations graphiques l interface graphique Ligne A et enfin un gros morceau souvent critiqu mais toujours utilis le GEM Bon courage COURS D ASM 68000 par le F roce Lapin retour au VOLUME 1 kkkxkxkxkxkxkkkxkkkkkkxkxkkkkkkxkkkkxkkxkkxkk xkxkxkxkkkxkxkkxkkkk xkkkkkk xk kkkkk kkk kkkkkxxkx kx k COURS D ASSEMBLEUR 68000 SUR ATARI ST par Le F roce Lapin from 44E X Cours num ro 2 x kkkkkkkxkxkxkkxkkkkkkxkkxkkkxkkkkkkxkkkkkkkkkk xkxkxkkkkxkxkkkkkkxkk xkkkxkxkkkkxkxkxk LES CHIFFRES MAGIQUES Voyons d abord d une fa on simple comment marche un ordinateur en nous pla ant dans la situation suivante nous devons fournir des messages une personne dont nous sommes s par s par exemple message de nuit entre des gens loign s Nous avons une lampe de poche que nous pouvons donc allumer ou teindre c est tout Nous pouvons donc donner 2 messages 1 la lampe est te
111. e son programme principal pour se d tourner vers la routine Une fois celle ci termin e il re vient au programme principal C est bien joli mais o a t il trouv la routine en interruption Et bien simplement en utili sant le m me principe que pour le mode Trace Nous avons vu que lorsque le bit T tait en place le 68000 allait voir l adresse 24 et qu il y trouvait un long mot ce long mot tant l adresse de la routine Pour les interruptions le principe est le m me si c est une interruption de niveau 4 c est l adresse 70 que le 68000 trouvera un long mot ce long mot comme dans le cas du mode Trace tant l adresse de la routine ex cuter Si l interruption est de niveau 1 c est le long mot situ l adresse 64 etc Il est bien vident que c est au programmeur de placer ces long mots ces adresses On pr pare une routine on cherche son adresse de d part puis on note celle ci l endroit pr cis o l on sait que le 68000 viendra la chercher Toutes ces adresses tant situ es dans le premier kilo de m moire de notre machine tudions de plus pr s ces 1024 octets Vous trouverez un tableau repr sentant ce kilo en annexe Pour le mo ment nous n allons faire qu y rep rer les quelques l ments que nous avons d j tudi s Toutes ces adresses ont des num ros d or dres et cause de leur fonction propre ne faire que communiquer l adresse d une routine on les appelle vecteurs Nous retrouv
112. e vers le bas En effet d apr s la taille du listing et celle de la fen tre vous ne devez pas voir BIDULE Descendez donc de 7 lignes Normalement la premi re ligne de la fen tre doit maintenant tre BSR MACHIN avec la petite fl che en face indiquant que c est cette instruction qui va tre ex cut e En bas de la fen tre vous devez voir BIDULE avec en face DC W AAAA puisque c est ce que nous y avons d pos En dessous des ORI B 0 D0 En effet nous sommes dans une fen tre qui cherche nous montrer le d sassemblage de ce qu il y a dans le tube Or cette endroit il y a 0 dans le tube et cela correspond ORI B 0 d0 ce qui explique ces instructions Mais ces ORI B correspondent quoi o sont ils situ s eh bien il sont dans notre pile puisque celle ci est constitu e d un bloc de 124 octets entre BIDULE et PILE Alors maintenant scrutez tr s attentivement BIDULE et avancez le programme d un pas Nous voici maintenant sur la ligne MOVEM L de la subroutine MACHIN Ex cutons cette ligne Stupeur BIDULE est cras de m me que le RTS de la subroutine MACHIN qui est juste au dessus Et maintenant si nous continuons apr s le second MOVEM le 68000 ne va pas tomber sur le RTS puisque celui ci vient d tre cras et notre programme va planter Pourquoi eh bien parce que nous avons essay d empiler 128 octets MOVEM de trucmuche 15 registres donc 15 4 60 octets idem pour le MOVEM de machin auquel il faut ajo
113. ec un autre touche ne g n re aucun ca ract re Cependant 6 raccourcis claviers utilisent Control Ils sont issus du MAC et ont tendance se g n raliser Ces raccourcis sont utilis s dans les formulaires avec champs ditables entre autres choses afin de faire du couper coller entre ces champs CONTROL X pour couper place en buffer en l effa ant au pr alable SHIFT CONTROL X pour couper mettre la suite dans le buffer CONTROL C et Comme avec X sauf que dans le cas de X le SHIFT CONTRL C champ ditable est effac alors qu avec C il conserve son contenu CONTROL V colle le contenu du buffer en effa ant au pr alable le champ ditable SHIFT CONTROL V idem mais sans effacement du champ ditable Une autre remarque concernant les formulaires avec plusieurs en tr es ditables j ai remarqu que par habitude l utilisateur tapait RETURN quand il avait fini de remplir un champ et que souvent le bouton ANNULER est mis en d faut l appui sur RETURN donc fait sortir du formulaire J ai donc d cid de supprimer les boutons d faut lorsqu il y a des entr es ditables et de g rer diff remment RETURN qui permet alors de passer au champ ditable suivant comme TAB J ai galement rajout quelques autres touches Alors qu avec TAB il est possible de passer d un champ ditable au suivant j ai ajout Shift TAB pour remonter au champ ditable pr c dent CLR HOME permettant de revenir
114. emment cela d pend des machines Dans mon cas lorsque le 68000 trouve le bit T 1 il fonce donc ex cuter la routine qui se trouve en 00027086 Je vais donc modifier cette adresse Appuyons sur Alternate E pour passer en mode dition Le curseur est plac sur le premier nibble de l adresse Tapez par exemple 11112222 ou n importe quel autre chiffre Repassez maintenant dans la fen tre 1 en tapant Alternate 1 Maintenant r fl chissons Nous allons refaire Control Z Le 68000 va foncer en 24 va maintenant y trouver 11112222 et va foncer cette adresse pour y ex cuter ce qu il va y trouver c est dire n importe quoi Il y a tr s peu de chance pour qu il r ussisse y lire des choses coh rentes et vous indiquera une erreur Allez y n ayez pas peur vous ne risquez pas de casser votre machine Hop Control Z et suivant les cas vous obtenez divers messages Illegal exception Bus Error etc Quittez en faisant Control C ou bien en dernier ressort faites un RESET J esp re que ce principe est TRES TRES BIEN COMPRIS Si cela vous semble peu pr s clair relisez tout car la suite va tr s souvent faire r f rence ce principe d adresse dans le premier kilo contenant l adresse d une routine La prochaine fois nous finirons d tudier le Status Register en attendant je vais me prendre une petite vodka bien fra che A la v tre COURS D ASM 68000 par le F roce Lapin retour au VOLUME 1 kkxkxkx
115. er travailler Vous comprendrez bien vite pourquoi les possesseurs de 520 ont tout int r t les faire gonfler un m ga minimum et pourquoi un lecteur externe ou mieux un disque dur devient vite indispensable Apr s avoir vu le m canisme d inclusion de fichiers nous allons nous int resser maintenant aux inclusions de listings Il est en effet possible de prendre un bout de listing de le sauver sur disquette et de demander l assembleur de l inclure lors de l as semblage L aussi perte de temps l assemblage mais gain de temps tr s appr ciable lors de la cr ation de programme Par exemple votre routine de sauvegarde de palette faites avec soin elle marche bien et en fait vous en avez besoin dans tous vos programmes Il faut donc chaque fois la retaper et surtout consommer quelques dizaines de lignes avec cette routine Perte de temps possibilit d erreur de frappe et allongement bien inutile du listing Lorsque vous commencerez circuler dans 10 ou 20 pages de sources la recherche d une variable vous com mencerez comprendre de quoi je parle en sachant en plus que 20 pages c est un tout petit source assembleur Voyons concr tement un exemple avec la sauvegarde de palette SAUVE _PALETTE MOVEM L DO D4 A0 A4 SP LEA ANC_PAL A4 ptn sur le lieu de sauvegarde MOVE W 15 D4 16 couleurs ICI MOVE W 1 SP demande de couleurs MOVE W D4 SP num ro de la couleur MOVE W 7 SP Setcolor
116. erni re ligne Transfert du word de poids faible de D0 qui maintenant est 1234 et plus 5678 vers le word de poids faible de D2 Nous avons vu que D0 contenait en fait 2 donn es et que ces don n es taient totalement ind pendantes Ceci permet une grande sou plesse de travail mais demande aussi une grande rigueur car si au lieu de faire MOVE W D0 D1 j avais juste commis une faute de frappe en tapant MOVE L D0 D1 j crasais le word de poids fort de D1 et apr s je me serais tonn de trouver 1234 dans D1 l en droit o je devrais encore trouver AAAA Nous voyons tout de suite les normes avantages de ce syst me Nous n avons notre disposition que 8 poches de donn es D0 D7 mais si nous ne voulons garder que des words nous pouvons en mettre 2 par poche c est dire 16 en tout De m me si notre codage ne se fait que sur des bytes c est 32 bytes que nous pou vons garder 4 par poche Cela peut para tre assez vident mais par exemple sur l Archim de ce n est pas possible Sur cette ma chine un registre contient un long word ou rien RESUM DE VOCABULAIRE MOVE L move long MOVE W move word MOVE B move byte CONSEILS Prenez votre temps relisez tranquillement ce cours et les pr c dents Vous voyez ce n est pas bien dur l assembleur COURS D ASM 68000 par le F roce Lapin retour au VOLUME 1 KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKRKRRKRERRRRERRERRRKRKKKRKKRKKKKRRKXKKKKXKEXKXXX X COURS D ASSE
117. es des petits programmes en utilisant ce que vous venez d apprendre R sultat du concours Si vous avez faux un seul truc je vous conseille vivement de reprendre le premier cours 1 On obtient 00001234 dans A0 Ceux qui ont r pondu qu on obtenait 12341234 ont tout faux En effet on aurait obtenu 12341234 si l op ration avait eu lieu sur un registre de donn es Sur un registre d adresse pris en op rande destination il y a extension sur le poids fort L y en a d j 50 qui reprennent la 2 On n obtient rien du tout parce qu on ne peut pas assembler On ne peut travailler avec un registre d adresse comme op rande destination que sur le format word ou long word mais pas sur le format byte 3 2700 cela donne en binaire 0010011100000000 Si on plaque ce nombre sur le Status Register ceux qui croyaient que SR c tait la pile et qui on donc confondu avec SP doivent imp rativement recommencer la s rie 1 en entier ils sont juste pr ts pour ne rien comprendre la suite on se rend compte que les bits mis 1 dans ce nombre correspondent aux bits S I2 I1 et I0 Comme on ne peut taper dans le SR qu en mode superviseur on en d duit qu une telle op ration ne peut se faire que dans ce mode Notre MOVE conserve donc le bit superviseur dans l tat 1 puis force les bits d crivant le niveau d interruption 1 Le niveau d interruption minimal pris en cours est donc le niveau 7 qui est le niveau maximum En r sum
118. es abr viations en informa tique sont des abr viations de mots ou d expressions anglaises Les lire la Fran aise impose d apprendre par coeur leur signifi cation En les lisant telles qu elles DOIVENT tre lues en Anglais ces expressions donnent d elles m mes leur d finition Un des exemples est T qui est lu syst matiquement T dollar Or n est pas dans le cas pr sent l abr viation de dollar mais celle de string T doit donc se lire ET SE DIRE T string String signifiant cha ne en Anglais T est donc une cha ne de carac t re Evident alors que lire T dollar ne signifie absolument rien Le seul int r t c est que a fait marrer Douglas le joyeux bri tannique qui programme avec moi Une unit binaire se dit donc BIT binary digit 4 unit s forment un NIBBLE 8 unit s forment un octet que nous appellerons par son nom an glais c est dire BYTE 16 unit s forment un mot WORD 32 unit s forment un mot long LONG WORD Revenons donc notre conversion en groupant nos 16 lampes donc notre WORD en groupes de 4 donc en NIBBLE 0011 0000 0011 1000 Ces 4 nibbles forment notre premier word Comptons dons les valeur possibles pour un seul nibble tat du nibble 0000 valeur 0 0001 valeur 1 0010 valeur 2 0011 valeur 3 0100 valeur 4 0101 valeur 5 etc 1010 valeur 10 STOP a va plus 10 c est 1 et 0 or on les a d j uti lis s Ben oui mais part 0 1 2 3 4 5 6 17 8 9 on n a pas gran
119. es routines permettent l affichage des registres MONST regarde l adresse laquelle commencent ces routines note cette adresse puis va la mettre l adresse 24 Ce long mot est donc plac l adresse 24 25 26 et 27 puisque nous savons que le diam tre du tube m moire n est que d un octet byte Lorsque le microprocesseur trouve le bit T 1 il va l adresse 24 il y pr l ve un long mot qui se trouve tre l adresse des routines de MONST et il fonce cette adresse ok Nous allons maintenant r aliser un petit programme et nous allons planter votre ATARI Tapez ce qui suit MOVE W 1234 D1 MOVE W 6789 D2 MOVE W 1122 D3 Assemblez puis taper Alternate D pour passer sous MONST Faites une fois Control Z Le bit T du Status register est mis 1 indi quant que nous sommes en mode Trace Comme nous avons ex cut une instruction D1 se trouve rempli avec 1234 Appuyons maintenant sur Alternate 3 Nous venons d activer la fen tre de droite la num ro 3 Appuyons sur Alternate A Une demande s affiche nous devons indiquer quelle adresse sera la premi re visible dans la fen tre Il faut taper cette adresse en hexad cimal Nous tapons donc 24 pas de avant MONST sait de lui m me que nous parlons en hexa Nous voyons s afficher l adresse 24 en haut de la fen tre et en face un chiffre qui est l adresse de notre routine de MONST Pour moi c est 00027086 mais comme je l ai dit pr c d
120. 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
121. est en fait s par en 2 octets L oc tet de poids fort bit 8 15 est appel octet superviseur alors que l octet de poids faible est l octet utilisateur En mode utilisateur on ne peut crire que dans l octet utilisateur alors qu en mode superviseur nous avons acc s au word dans sa to talit L octet utilisateur contenant les bits de conditions bits XN Z V C on l appelle galement registre des codes conditions Condi tion Code Register ou CCR Les bits I2 Il et IO Interrupt Mask Ces 3 bits servent repr senter les masques d interruption Mais voyons tout d abord ce qu est une interruption Nous avons tudi pr c demment le fonctionnement li au bit T trace Lorsque ce bit est positionn le programme principal est interrompu au pro fit d une routine sp ciale C est en quelque sorte le principe de l interruption Une routine en interruption c est un bout de programme diff rent du programme principal A intervalles r guliers ou cause d un l ment ext rieur le 68000 va interrompre c est bien le mot le programme principal pour aller ex cuter cette routine Lorsque celle ci sera termin e il y aura retour au programme principal L exemple le plus simple est celui du t l phone Je travaille mon bureau c est le programme principal lorsque le t l phone sonne Je d tecte l interruption j arr te mon travail et je d croche ex cution de l interruption La conversation termin e
122. et que votre ouvrage sera uti lis par des utilisateurs R fl chissons un peu qu est ce que l utilisateur recherche dans un programme de dessin 1 avoir une sauvegarde de fichier compress avec un algorithme sp cial qui compresse plus que les copains 2 avoir la possibilit de r cup rer le plus facilement possible ces dessins dans d autres softs Il para t vident que c est la seconde solution qui est la bonne Pourtant nous assistons une prolif ration de formats de fi chiers tous plus d biles les uns que les autres Ah bien s r le fichier compress avec le logiciel de dessin Bidulmuche est plus petit que le fichier issu de Degas mais il n est reconnu par per sonne Pourquoi chercher pater la galerie avec des nouveaux formats Pourquoi ne pas charger et sauver en PI1 PI2 PI3 PC1 PC2 PC3 et c est tout 7 Premi re r gle il faut donc penser l utilisateur et ne pas chercher de trucs tordus Le premier menu c est celui du copyright le second celui des fichiers avec tout en bas l option Quitter Quelle merde de devoir chercher l option Quitter tout au bout d un menu parce que le programmeur a voulu se distinguer De plus par convention les entr es de menus qui d bouchent sur un dialogue seront suivis de 3 points Pensez aux grands crans et au TT Lorsque vous tapez dans des adresses syst me document es pr voyez un adressage sur 32 bits Par exemple FF8800 marchera sur ST mais plantera su
123. ettes mais par le simple fait que le range ment apr s le lavage se fait par empilage et que mettre la table se fait par d pilage vous mangez en fait toujours dans les m mes assiettes d o l int r t de bien faire la vaisselle Cette structure de pile est appel e structure LIFO c est dire Last In First Out en Fran ais dernier entr premier sorti Cette structure est diff rente d une autre structure fr quemment rencontr e en informatique celle de la file appel e aussi struc ture FIFO First In First Out la file tant similaire une file d attente devant un guichet le premier dans la file sera le premier parti Mais concr tement quoi sert la pile Nous allons le voir avec un exemple Tapez le programme suivant MOVE L 12345678 D0 MOVE L BD88 D1 MOVE L BD88 A0 BSR AJOUTE MOVE L 0 D0 MOVE L D2 D0 AJOUTE MOVE L 11112222 D2 ADD L D1 D2 RTS Premi re remarque ce programme diff re des pr c dents par le fait que nous utilisons une tiquette un label qui se nomme AJOUTE Ce mot AJOUTE doit se trouver tout gauche contre le bord de la fen tre de l diteur Ce n est pas quelque chose placer DANS le tube mais bien une marque A COTE du tube Autre remarque les listings en assembleur contrairement aux lis tings dans les autres langages sont assez libres au niveau pr sen tation Il est tout a fait possible de passer des lignes ce qui est fait ici pour s parer les 2 parties
124. eur adresse de base NE SONT PAS install es Le programme appelant en a la charge Un programme enfant h rite des descripteurs de fichiers standards de son parent Il emploie en fait un appel de Fdup et de Fforce sur les identificateurs 0 5 Puisque les ressources syst me sont allou s lors de la cr ation de la page de base le processus engendr DOIT se terminer en les lib rant Ceci est particuli rement important lors de l emploi d overlays voir le livre de cuisine de Pexec pour plus de d tails sur Pexec AC Pterm Termine un programme void Pterm retcode WORD retcode Termine le programme courant ferme tous les fichiers ouverts et lib re la m moire allou e Retourne retcode au processus parent 4E Fsfirst Recherche la premi re occurence d un fichier WORD Fsfirst fspec attribs char fspec WORD attribs Recherche la premi re occurence du fichier fspec Le sp cifi cateur de fichier peut contenir des caract res sp ciaux ou x1 dans le nom de fichier mais pas dans le chemin de sp ci fication attribs contr le le type de fichier qu sera retourn par Fsfirst Son format a t d crit dans la documentation sur Fattrib Si attribs est z ro les fichiers normaux seront seuls recherch s aucun nom de volume fichier cach sous r pertoire ou fichier syst me ne sera retourn Si attribs est positionn sur les fichiers cach s ou sur les fichiers syst
125. eut tre dans un autre r pertoire Le premier param tre doit tre 0 mot RETOUR 0 si OK EACCDN si le nouveau nom existe d j EPTHNF si l ancien nom n a pas t trouv ENSAME si l identificateur de disque A B n est pas le m me pour les deux noms Ke en ee ne nn nn ne a E E E 57 Fdatime Fixe ou demande le moment de cr ation d un fichier void Fdatime idfich pttemp drap WORD idfich LONG pttemp WORD drap Le fichier est reconnu par son identificateur idfich pttemp pointe sur deux mots contenant l heure et la date en format DOS l heure se trouve dans le premier mot la date dans le second Si drap est 1 la date et l heure sont plac es dans le fichier partir de pttemp Si drap est 0 la date et l heure sont lues et plac es dans pttemp COURS D ASM 68000 par le F roce Lapin retour au VOLUME 1 XXXXX X X TABLEAU DES VECTEURS D INTERRUPTION DU 68000 ET DU 68901 KKKKXXXX Note sur le ST les interruptions de niveaux 1 3 et 5 ne sont pas c bl es une broche du 68000 n est pas connect e Les vecteurs li s au MFP 68901 sont plac s dans la zone des vecteurs d interruptions utilisateurs Toutes les interruptions venant du MFP sont prises en compte par le 68000 comme tant de niveau 6 L ordre de priorit interne au MFP va de 15 priorit maxi 0 priorit mini Cet ordre est galement celui des bits dans tous registres du MFP et assure donc une corres
126. f la partie haute REMARQUES La version du GEMDOS sur disquette du 29 5 85 et la premi re version en ROM du 20 11 85 ont 1300 comme num ro Les num ros de version du GEMDOS et du TOS ne sont PAS les m mes cf LE MANUEL DE REFERENCE DU BIOS DU ST pour le num ro de version du TOS 31 Ptermres Finit un programme qui reste r sident void Permres nbrest coderet LONG nbrest WORD coderet Finit le programme courant en conservant une part de sa m moire nbrest le est nombre d octets appartenant au programme qui doivent tre gard s comprenant et commen ant la page de base coderet est le code de sortie qui est retourn au programme parent La m moire que le programme a allou e en plus de sa zone TPA N EST PAS lib r e Il est impossible de rappeler le programme termin par Ptermres REMARQUE Les fichiers ouverts sont ferm s lors de la fin de processus E ia aas paa ER CREER a aS a Fa EP ER EE RO PRO PER EE PE EE OR EE a i EE EE PR 36 Dfree Demande l espace libre sur un disque void Dfree buf nbdisq LONG buf WORD nbdisq Demande des informations sur le disque nbdisq et les place dans quatre longs_mots commen ant buf buf 0 nombre de blocs libres sur le disque D D ones cale de eos ac laine ete da at tac eee Ca na lens dec Dean JE ESEE a E A T EE REMARQUE Incroyablement lent sur un disque dur 5 10 secondes 39 Dcreate Cr ation d un sous_r pertoire de disq
127. fier les transmissions celui ci est utilis pour augmenter le nombre de combinaison possible Retour au cours 2 de la s rie 1 sur les chiffres magiques avec 7 bits nous pouvons compter de 0 127 un bit de plus nous permet de compter de 0 255 Consulter un tableau des codes ASCII bible livre du d veloppeur doc GFA etc et vous vous rendrez compte que tous les signes bizarres sont cod s sur 8bits et ont donc des codes sup rieurs 127 Cependant les codes ASCII ne suffisent pas Imaginez que je tape sur la touche A de mon clavier En code ASCII je vais recevoir 65 Mais si un Anglais tape sur la m me touche pour lui ce sera un Q et il recevra le code ASCII 81 Le code ASCII ne d pend donc pas de la touche m caniquement parlant mais plut t de la lettre de cette touche Il existe un autre codage qui lui correspond aux touches d un point de vue m canique C est ce que l on appelle le scan code Pour le scan code une touche poss de un num ro totalement ind pendant de la lettre qui sera affect e cette touche Ainsi la touche de votre clavier renvoi le scan code 10 et il en est de m me pour tous les ST du monde que cette touche soit marqu e A ou M Q C est l emplacement sur le clavier qui compte Nous testons donc le scan code de la touche sur laquelle nous avons appuy Si c est Escape nous sortons du programme Autrement nous allons tester s il s agit d une touche de fonction La touche F1 a pour
128. hier Un num ro d erreur n gatif 40 Fwrite criture sur un fichier LONG Fwrite idfich nbre buffer WORD idfich LONG nbre char buffer crit nbre octets de la m moire partir de l adresse buffer dans le fichier ayant comme identificateur idfich RETOUR Le nombre d octets r ellement crits en cas de succ s Un num ro d erreur n gatif autrement 41 Fdelete Effacement d un fichier WORD Fdelete nomfich char nomfich Efface le fichier ayant comme nom nomfich RETOUR 0 en cas de succ s Un num ro d erreur n gatif autrement RS ES SE nn a aa i 42 Fseek Positionne le pointeur de fichier LONG Fseek offset idfich mode LONG offset WORD idfich WORD mode Positionne le pointeur dans le fichier d fini par l identificateur idfich offset est un nombre sign une valeur positive d place le pointeur vers la fin du fichier une valeur n gative vers le d but Le mode de positionnement peut tre partir du d but du fichier 1 partir de la position courante 2 partir de la fin du fichier PE RP SR RE RETOUR La position courante dans le fichier Un num ro d erreur n gatif si erreur 43 Fattrib Fixe ou demande les attributs d un fichier WORD Fattrib nmfich drap attribs char nmfich WORD drap WORD attribs nmfich pointe sur un chemin termin par 0 Si drap a la valeur 1 les attributs de fichier attribs sont fix s pas de valeur de ret
129. i A vous de travailler Une seule pr caution prendre Une subroutine n a besoin que de l adresse de retour et donc n empile que cela Un TRAP par contre du fait qu il passe en Superviseur sauve galement le Status Register Il ne faut donc pas oublier de le prendre en compte pour calculer le saut qui vous permettra de r cup rer vos param tres pass s sur la pile L adresse de retour est bien s r cod e sur 4 bytes et le Status Register sur 2 Il y a donc empilage de 6 bytes par le TRAP qui les d pile automatiquement au retour afin de retrouver d o il vient et afin galement de remettre comme avant le Status Register Il ne faudra pas non plus oublier de corriger la pile au retour Comme d habitude prenez votre temps et faites de nombreux petits essais afin de parfaitement comprendre la syst me Regardez galement attentivement la fonction du Bios qui nous a servi mettre en place nos deux routines Si au lieu de lui fournir la nouvelle adresse pour le vecteur nous lui passons 1 cette fonction nous retourne dans D0 L l adresse actuelle correspondant ce vecteur Rien ne nous emp che donc de demander l adresse utilis e par le TRAP 1 Gemdos de transf rer cette adresse dans le trap 0 par exemple et de mettre notre propre routine dans le TRAP 1 Cela peut aussi vous servir pour d tourner le TRAP Par exemple pour g n rer automatiquement des macros Il est possible d imaginer ainsi un programme r sident en
130. in de tracer de jolis rectangles lorsqu il vient l utilisateur l id e de promener sa souris dans le menu d roulant Appel GEM modification des tableaux communs au GEM et la ligne A et au retour adieu les rectangles L encore prudence et r flexion pour se mettre la place de l utilisateur Seconde remarque les adresses fournies par la ligne A Nous pouvons prendre comme exemple les fontes O se trouvent elles Avec MONST en se balladant en m moire il sera toujours possible de les trouver Malheureusement elles ne sont pas au m me endroit dans toutes les machines Ce n est pas grave il suffit de passer par la ligne A En effet la fonction A000 permet d initialiser mais en grande partie cela ne fait que nous fournir des adresses Gr ce celles ci nous pouvons en d duire de tr s nombreuses choses emplacement des fontes entre autre L encore il est pr f rable de passer par DC W A000 puis de faire des d calage pour trouver ce qui nous int resse Le petit rigolo qui se vante d avoir trouv l adresse cach e qui donne les fontes se rendra bien vite compte que cela ne marche pas tout le temps alors qu avec la ligne A c est moins frime mais c est s r Pour l utilisation de la ligne A le descriptif des fonctions dans la bible est suffisant Commencez par les rectangles les lignes placez des points o demander leur couleurs etc Voici un exemple qui a t dans les premiers que j ai r alis ave
131. inte par ex tout va bien 2 la lampe est allum e par ex vla les flics Approfondissons les 2 tats de la lampe Allum e Eteinte qui revient du courant pas de courant ou Du courant OUI NON Valeur du courant 1 0 Les tests seront donc not s par 0 ou 1 suivant l allumage ou non de la lampe Comme nous sommes riches nous achetons une 2 me lampe Nous avons donc 4 possibilit s de message LAMPE 1 LAMPE2 teinte teinte allum e teinte teinte allum e allum e allum e En comptant avec 3 4 5 6 lampes nous nous rendons compte qu il est possible de trouver une relation simple entre le nombre de lampes et le nombre de possibilit s Nombre de possibilit s 2 la puissance nombre de lampes Nous obtenons donc le tableau suivant Les remarques sont justes l pour mettre la puce l oreille Lampes Possibilit s Remarques 1 2 2 4 3 8 Il y a des ordinateurs 8 bits 4 16 et des 16 bits 5 32 Le ST est un 16 32 bits 6 64 Amstrad CPC 64 7 128 ou Commodore 128 8 256 En informatique le codage des caract res lettres chiffres gr ce au code ASCII permet d avoir 256 caract res 9 512 Un 520 a 512 Ko de m moire et Amstrad vend un PC1 512 10 1024 La taille m moire de mon 1040 11 2048 Celle du m ga 2 de mon fr re 12 4096 Celle d un m ga 4 Aussi le nbr de couleurs affichables avec un Amiga etc 16 65536 Dans le GFA un tableau ne peut avoir plus de 65536 l me
132. it elle MOVE W D0 D1 C est dire d placer le contenu de D0 pour le mettre dans D1 Mais attention le d placement doit se faire sur un word pr cis par W apr s le move Cela se lit MOVE WORD Or les op rations se font toujours sur le poids faible Le MOVE va donc pr lever le word de poids faible de D0 pour le mettre dans le word de poids faible de D1 Celui ci va donc recevoir 5678 Continuons en ex cutant la troisi me ligne Celle ci demande MOVE B D1 D2 move byte d1 d2 Donc transfert du byte de poids faible de D1 vers le byte de poids faible de D2 Regarder bien les registres et les valeurs qu ils re oivent Quittez maintenant le programme avec CONTROL C TROISIEME PROGRAMME MOVE L 12345678 D0 MOVE L AAAAAAAA D1 MOVE W D0 D1 SWAP DO MOVE W D0 D2 On efface le programme pr c dent on tape celui ci on assemble puis on d bugue L ex cution de la premi re et de la seconde ligne ne doivent plus poser de probl me Nous devons obtenir D0 12345678 D1 AAAAAAAA Ex cutons maintenant la troisi me ligne Il y a bien transfert du word de poids faible de D0 vers le word de poids faible de D1 Nous constatons que le word de poids fort de D1 N EST PAS AFFECTE par ce transfert et qu il reste tout fait ind pendant du word de poids faible 4 me ligne Ce mn monique SWAP To swap changer va changer les 16 bits de poids faible avec les 16 bits de poids fort D0 va donc devenir 56781234 D
133. je raccroche et je retourne mon occupation premi re Maintenant plus compliqu Interruption de mon travail principal Je d croche mais en cours de conversation on sonne la porte L intervient le principe de la priorit d interruption Si la porte d entr e une priorit sup rieure celle du t l phone j interrompt la conversation t l phonique pour aller ouvrir Il y a interruption de l interruption Une fois claqu la porte au 124 me marchand de balayettes de la journ e je reprends le t l phone je finis la conversation je raccroche puis je me remets ma t che principale Par contre si l interruption porte d entr e a une priorit inf rieure celle du t l phone j attendrai d avoir fini avec ce lui ci avant d aller ouvrir Les 3 bits 12 Il et IO Interrupt mask permettent de d finir le niveau mini d interruption qui sera pris en cours Comme on ne poss de que 3 bits on ne peut d finir que 7 niveau de 1 7 on ne parle pas ici du niveau 0 car c est le niveau de travail nor mal de la machine Si le niveau est 0 c est qu il n y a pas d interruption Ainsi si nous avons 011 pour ces 3 bits nous obtenons 3 comme niveau mini Les interruptions de niveaux 1 et 2 ne seront donc pas prises en compte Puisque le niveau indiqu par les 3 bits sera accept comme niveau d interruption nous en d duisons que si les bits sont 111 seuls les interruptions de ni veau 7 seront prises en
134. kkk kkxkk kxkkxk xx Automodification de programme INCLUDE B START S routine de d marrage MOVE L MESSAGE1 SP on pr sente MOVE W 9 SP le programme TRAP 1 ADDQ L 6 SP DEBUT MOVE W 7 SP attend un appui touche TRAP 1 ADDQ L 2 SP CMP W DO espace BEQ FIN oui donc bye bye MOVE W 4E71 VARIANTE place un NOP par d faut CMP W A DO appui sur A BNE ICI non BSR ROUTINE oui donc sub routine longue BRA DEBUT et on recommence ICI MOVE W 4E75 VARIANTE place un RTS la place BSR ROUTINE du NOP et va sub routine BRA DEBUT puis recommence FIN MOVE W 0 SP TRAP 1 RE SE SE eme ROUTINE MOVE L MESSAGE2 SP MOVE W 9 SP TRAP 1 ADDQ L 6 SP VARIANTE NOP MOVE L MESSAGE3 SP MOVE W 9 SP TRAP 1 ADDQ L 6 SP RTS SE aay ains a a iaa aaa a 2 ee ee om om me ut co ou ue om us ee on AaS SECTION DATA 27 E A pour un grand message 13 10 espace pour sortir autre touche 13 10 pour un message plus court 13 10 0 MESSAGE1 DC B DC B DC B EVEN MESSAGE2 DC B EVEN MESSAGE3 DC B EVEN 13 10 Voila le petit message 0 Oups non c est le long 0 SECTION BSS DS L DS L END PILE 100 1 COURS D ASM 68000 par le F roce Lapin retour au VOLUME 2 ER SE INCLUDE kkkkkxkxkxkxkxkkxkxkxkkxkkkkxkkkxkxkkkkkxkxkkkxkxkxkkkkxkkkkk xkxkkkkk xkxkkk kk xkxkkk kkk xkxkkkkxkxkxk CO
135. kkkkkkkkkkkk xkkxkkkkxkxkxk xkkkxk xkkkkxkk kkkkkkxkxk LA PILE Nous avons d j utilis la notion de tube en ce qui concerne la m moire Nous pouvons y stocker diff rentes choses et si nous nous rappelons l adresse nous pouvons revenir plus tard cet endroit pour y r cup rer ce que nous y avions d pos Essayez avec ce petit programme MOVE L 12345678 D0 MOVE L D0 493E0 MOVE L 0 D0 MOVE L 493E0 D0 Assemblez puis passez sous MONST Avancez en pas pas D0 est d abord rempli avec 12345678 puis le contenu de D0 est transf r l adresse 493E0 Notez bien qu il n y a pas de devant 493E0 afin d indiquer qu il s agit bien d une adresse Cette ligne tant ex cut e activez la fen tre 3 Alternate 3 et placez le d but de celle ci sur l adresse 493E0 Alternate A puis tapez 493E0 Vous voyez bien 12345678 cet endroit dans le tube Si j ai choisit cette adresse c est parce qu elle se situe 300 Kilo du d but de la m moire Elle est donc accessible m me sur un 520 et elle est suffisamment loign e pour ne pas se trouver dans GENST ou MONST En effet il n y a qu un tube m moire Nous sommes donc en train d crire dans la m moire alors qu une partie de celle ci est occup e par GENST et MONST Ecrire l int rieur des zones oc cup es par ces programmes est possible ce qui entra nera tr s certainement quelques plantages de ceux ci Continuons en pas pas nous mettons D0 0
136. kkxk xk xkkkxkk xk kxkkxk xkk kxk kxkxkxk COURS D ASSEMBLEUR 68000 SUR ATARI ST par Le F roce Lapin from 44E Seconde s rie Listing num ro 2 Cours 5 kkkkxkxkxkkxkkkxkxkkxkkkkkkkkkkkkkxkxkkkkkkkkkkxkkkk kkkkkkk xkxkxkkkk kk xkkkkkxkxkxkxk INCLUDE D START S MOVE L MESSAGE SP message de pr sentation MOVE W 9 SP TRAP 1 ADDQ L 6 SP TOUCHE MOVE W 7 SP attente appui sur une touche TRAP 1 ADDQ L 2 SP SWAP DO pour avoir le scan code CMP W 1 D0 escape BEQ FIN oui donc bye bye CMP W 3B D0 par rapport F1 BCS TOUCHE en dessous donc pas valable CMP W 44 D0 par rapport F10 BHI TOUCHE en dessus donc pas valable La touche est valable ADD W 6 D0 pour avoir asci de A B C MOVE W D0 SP affiche MOVE W 2 SP TRAP 1 ADDQ L 4 SP BRA TOUCHE et on recommence FIN CLR W SP TRAP 1 SECTION DATA MESSAGE DC B 27 E TAPEZ SUR UNE TOUCHE DE FONCTION 13 10 DC B ESCAPE POUR SORTIR 13 10 0 SECTION BSS DS L 256 PILE DS L 1 END COURS D ASM 68000 par le F roce Lapin retour au VOLUME 2 kkxkxkxkkkxkxkxkkkkxkkkxkkkxkxkkkkkkkkkxkxkkkkk xkkkkxkkxkkkkxk kxkxkkkkkxkkkkkxkkkk kk kkkkkk xxkxxkxk COURS D ASSEMBLEUR 68000 SUR ATARI ST par Le F roce Lapin from 44E Seconde s rie Listing num ro 3 Cours 3 kkkkxkxkxkxkxkxkxkxkkxkxkxkkxkkkxkxkkxkkkkkkkxkkkkkkkkkkkkk
137. kkxkxkxkxkkkkxkxkkkkkkkkkkxkkkkkkxkkkxkxkxkkkkkkxkkk kxkxkkkkk kkxkkk kk xkxkkk kk kkxkxkkxkxk COURS D ASSEMBLEUR 68000 SUR ATARI ST k par Le F roce Lapin from 44E Cours num ro 5 kkkxkxkxkxkxkkkxkkkkkkxkkkkkkkkkkkkk xkxkkk xkkkkkkxkkkkxkkkkkkkkkxkk kkk xk kkk xkkkxkxkx k Suite de l tude du Status register les interruptions Etant donn que nous avons parfaitement compris ce qui se passait dans le cas o le 68000 trouvait le bit T du Status Register 1 c est dire tout le syst me d adresse fixe laquelle on trouve l adresse de la routine nous allons pouvoir continuer et en fait finir la description des autres bits de ce Status Register Le bit S Superviseur Le 68000 peut voluer dans 2 modes le mode Superviseur et le mode Utilisateur Dans le mode superviseur nous avons acc s TOUTES les instructions du 68000 et TOUTE la m moire alors qu en mode utilisateur certaines instructions ne peuvent tre em ploy es et l acc s certaines parties de la m moire est in terdit Effectivement cela peut sembler au premier abord surprenant Vous avez achet une machine c est quand m me pour pouvoir l uti liser dans sa totalit L encore nous tombons dans le pi ge qui consiste m langer ATARI ST et 68000 MOTOROLA Gr ce l norme puissance de ce micro processeur il est tout fait possible d envisager un travail multi utilisateur Gonflon
138. kxkkkkkkkkxkkkkkxkxkkkkkxkxkkkxkkxkkkk kxkkkkk xkxkkkkkkxkxkk xkkkkk kk kk xkxkkxkxk LES AUTO MODIFICATIONS Autre chose simple utiliser et qui facilite beaucoup la program mation les programmes auto modifiables Comme tous les sujets abord s jusqu ici celui n est pas compliqu mais demande un peu d attention Je dois cependant avouer que le premi re fois que j ai rencontr une telle chose dans un listing de nombreuses heu res m ont t n cessaires avant de comprendre La principale dif ficult r sidant non pas dans la compr hension du sujet lui m me mais plut t dans le choix de la m thode d explication j esp re que celle ci vous donnera satisfaction Il est tout fait possible d imaginer une addition avec des va riables Par exemple A 1 B 2 pour une op ration du genre A B C Nous imaginons galement sans mal que les valeurs de A et B puis sent changer en cours de programme pour devenir par exemple A 2 et B 3 ce qui laisse notre op ration A B C toujours aussi valable Mais comment faire pour que cette op ration A B C devienne tout coup A B C ou encore A B C L se fait toute la diff rence entre un langage volu et l assem bleur Nous avons vu dans les premiers cours que l assembleur ne faisait que traduire en chiffres les instructions A la diff rence des compilateurs qui arrangent les instructions l assembleur ne r alise qu une traduction instruction par inst
139. l au GEM Cette fonction affiche une phrase o l on veut sur l cran contrairement Gemdos 9 qui est limit sur les lignes et les colonnes de texte De plus cette fonction permet d afficher du texte avec des effets gras soulign etc avec la fonte de notre choix LEA MESSAGE Al adresse de la phrase LEA INTIN AO tableau de r ception MOVEQ L 0 D2 init le compteur de lettres ICI3 CLR W DO MOVE B Al D0 pr l ve en bytes BEQ GO_ON fin du texte ADDO B 1 D2 on compte les lettres MOVE W DO AO transf re dans INTIN en words BRA ICI GO_ON MOVE W 100 PTSIN position X MOVE W 150 PTSIN 2 position Y MOVE W D2 CONTRL3 nombre de lettres MOVE W 1 CONTRLI MOVE W CURRENT_HANDLE CONTRLE MOVE W 8 CONTRL opcode MOVE L VDI_PARAMS D1 MOVE W 73 D0 TRAP 2 AAAAAAAAAARRRRRRGGGLLL C est l horreur n est ce pas Il faut vous munir de patience et d cortiquer les multiples appels au GEM Pour vous aider dans vos essais vous trouverez ci joint un dos sier intitul GEM Il contient le source d un ACC qui affiche une bo te d alerte d un PRG qui g re une ressource listing issu de WERCS et d un accessoire g rant une fen tre Pour ce qui est des diteurs de ressources je travaille avec K Ressource qui est bien sympa et qui ne plante pas contrairement Wercs Essayez de bien comprendre le principe affichez une bo te d alerte avec un seul bouton puis avec plusieurs faites des petites ressource
140. 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 COURS D ASM 68000 par le F roce Lapin retour au VOLUME 1 kkxkxkxkkkxkxkxkxkkkxkxkkkkkkkkkkxkkkkkkkkkxkxkxkkkkkkxkkk xkxkkkkkkxkxkk kk xkxkkkkkxkxkkxkxk COURS SUPLEMENTAIRE r f A par Le F roce Lapin from 44E
141. le le long_mot retourn dans DO contient le code ASCII et le code clavier de la touche appuy e code de scrutation 31 24 23 16 15 8 7 0 Re eue AAE ee CA code de 00 ou bits scrutationl 00 caract re de shift ou 00 ASCII an fe js jee Les touches de fonction F1 F10 HELP UNDO etc retournent le code ASCII 00 avec le code clavier appropri cf le manuel sur le clavier intelligent pour la valeur des codes clavier Le ST BIOS place l tat des touches sp ciales dans les bits 24 31 voir le Guide du programmeur du BIOS pour plus de d tails ERREURS Ne retourne aucune indication de fin de fichier Ne reconna t pas Control _C Impossible de savoir si l entr e est un p riph rique carac t res ou un fichier Il devrait exister un moyen de taper les 256 codes possibles partir du clavier ANE mati Traan om ee ee am om de mme ee de lt ee do em ut FO a Daai Nala Aar ea a da G aai fai biy a a E APRA GE A a aaay Aala E aa A OA a A 02 Cconout Ecrit un caract re sur la sortie standard void Cconout c WORD c crit le caract re c sur la sortie standard identificateur 0 Les huit bits les plus significatifs de c sont r serv s et doivent tre z ro Les tabulations ne sont pas interpr t es ER RCE PRE RP EE E 03 Cauxin Lit un caract re sur l entr e standard AUX WORD Cauxin Lit un caract re partir de l identificateu
142. le sur ce qu est la programmation Raymond Loewy 1893 1986 que l on peut consid rer comme le p re du design industriel a eu beaucoup de r flexions sur ce qu il faut donner au consommateur Dans notre langage nous parlons d utilisateur de softs mais c est en fait de la m me personne qu il s agit Comparons un soft Mac et un soft ST L cran est allum le soft est charg et la seule chose que nous faisons c est promener notre oeil sur les ic nes et la souris dans la barre de menu Difficile de juger des qualit s respectives des 2 softs sans aller plus loin Pourtant la simple disposition des entr es dans les menus le positionnement des ic nes le faible nombre de celles ci mais en m me temps leur impression de clart donne dans 99 des cas l avantage au Mac Intosh Sur le ST les menus d gueulent de partout surtout dans les softs r cents et les ic nes recouvrent un bureau qui n en demande pas tant Ceci est rapprocher d une r flexion de Raymond Loewy que je vous demande de m diter Un v hicule a rodynamique bien dessin donne une impression de vitesse m me quand il est arr t Inutile donc d en rajouter la pelle les 14524874 fonctions du softs ST sont simplement des d lires de programmeurs alors que les 20 fonctions du softs Mac ont t pens es pour l utilisateur Lorsque Raymond Loewy a t demand pour faire le nouveau logo de la soci t Shell ainsi que tout le design des stations services il a
143. les param tres taient pass s par la pile Nous avons galement utilis ce principe dans nos propres routines Empilage saut la routine par BSR ou TRAP puis correction de la pile Concernant la ligne A et le GEM la pile n est pas utilis e En effet la ligne A et le GEM utilisent un syst me de tableau Nous avons tudi les tableaux et nous avons vu comment lire dans ceux ci Et bien c est un peu ce principe qui va tre utilis Les param tres parfois tr s nombreux vont tre plac s dans un ou plusieurs tableaux des endroits pr cis avant l appel de la fonction choisie Celle ci ira chercher les param tres n cessaires et retournera ensuite ses r sultats galement dans des tableaux L avantage du syst me des macros devient vident si pour des appels gemdos bios et xbios il suffit d empiler le nombre de param tres n est pas norme et le principe et toujours le m me il faut en revanche une sacr dose de m moire pour se rappeler dans quel tableau et surtout o dans ce tableau doivent tre d pos s les param tres de chaque fonction Malheureusement dans la biblioth que de Devpack il n y a pas de macros pour la ligne A Nous allons donc d tailler quelques fonctions la main Etant donn que vous avez sous la main le cours sur les macros je ne peux que vous conseiller de r aliser les macros correspondantes ces fonctions Nous allons tout d abord tracer un rectangle sur l cran Voir listing num ro
144. lettre comme r ponse Ce n est pas valable donc on recommence au d but AFFICHAGE MOVE L MESSAGE SP adresse de coucou MOVE W 9 SP num ro fonction TRAP 1 appel Gemdos ADDQ L 6 SP correction pile On attend un appui sur une touche pour contempler MOVE W 7 SP TRAP 1 ADDQ L 2 SP BRA QUITTER MOVE TRAP SECTION DATA MENU DC B DC B DC B EVEN MESSAGE DC B DEBUT retour au d but W 0 SP 1 27 E 27 FD QUITTER Q OU VOIR LE MESSAGE V 27 q 13 10 0 Coucou 0 COURS D ASM 68000 kkxkxkxkxkxkxkxkxkkkxk kxkxxkxk KKKKKKKKKKKKKXXXX par le F roce Lapin retour au VOLUME 1 kkxkxkxkxkxkkxkkkxkxkxkkkkxkkkkxkkxkkkkkxkxkkkkkxkkxkk kkxkxkkk kk kkkkkk kxxkxxkxk COURS D ASSEMBLEUR 68000 SUR ATARI ST par Le F roce Lapin from 44E Listing num ro 2 Cours num ro 7 kkkkxkxkkxkkkxkxkkkkxkkkkkxkxkkxkxkxkkxk xkkkkkxk xkkk xkkk xk xkkkkkxkxkkxkx kxk Test r solution car si on est en haute et que l on essaye de passer en bas MOVE W TRAP ADDQ L CMP W BEQ Puisqu on est se paf RESET K 4 SP num ro fonction Getrez 14 appel Xbios 2 SP correction pile 2 D0 haute CHARGE oui donc on charge tout de suite pas en haute on force en basse r solution on note d abord en mettant 1 un drapeau de signalement MOVE W MOVE W MOVE L MOVE L MOVE W TRAP ADDA L 1 RESOLUTION 0 SP basse r solution 1 SP ad
145. 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 DO un r sultat Ce r sultat est cod sur un long mot comme ceci 0 7 code ASCII de la touche Bits 8 15 mis z ro 16 23 code clavier Bits 24 31 Indication des touches de commutation du clavier 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 comparo
146. 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 Malloci 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
147. mandons donc que cette adresse soit celle du haut de la fen tre 3 avec Alternate A Tapons cette adresse BD88 La fen tre 3 se r affiche avec en haut l adresse BD88 Dans la colonne de droite nous voyons le contenu de la m moire dont nous avions d j un aper u avec l affichage droite de D1 et de A0 C est clair R activons la fen tre 1 alternate 1l Normalement la petite fl che doit toujours se trouvez en face du BSR AJOUTE Noter le chiffre se trouvant dans le registre A7 donc l adresse de la pile et observer bien les chiffres droite de ce registre tout en faisant Control z Les chiffres ont chang D abord le registre A7 ne contient plus le m me nombre Celui qui s y trouve actuellement est en effet plus petit que le pr c dent Notons que cette diff rence est de 4 L adresse de la pile a donc t d cr ment e de 4 De plus des chiffres ont t plac s dans la pile on les voit droite du registre A7 Or regardez bien le nombre qui est gauche de l instruction MOVE L 0 D0 de notre programme c est dire l adresse laquelle devra revenir le 68000 une fois la subroutine termin e c est bien ce nombre qui a t plac dans la pile IL y a donc empilage de l adresse de retour ce qui explique galement le changement d adresse de la pile de 4 En effet une adresse est cod e sur 4 octets Note tant donn que nous parlons de pile on dit plus souvent que les donn es sont mises sur la pile et
148. 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 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
149. ment 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 con
150. ment lorsqu on y est oblig Ainsi je n avais r alis que de tout petits trucs avec le GEM en assembleur des trucs du genre ACCessoire de bureau qui permet de mettre l cran en inverse vid o avec un choix dans une bo te d alerte avant de me trouver face au descriptif du soft que me proposait une bo te Parisienne Je dois avouer que les premiers jours ont t un peu durs mais qu la longue j ai d couvert que le GEM est vraiment une chose fabuleuse pas tr s dur ma triser et que les possibilit s sont largement suffisantes pour combler de bonheur tout programmeur digne de ce nom J esp re donc que vous prendrez autant de plaisir que moi programmer sous GEM une fois que vous aurez lu ce chapitre Tout d abord les remarques qui se trouvent au d but du chapitre sur la ligne A m ritent d tre relus Chercher donc de la docu mentation sans vous soucier du langage Vous trouverez dans le dernier cours de cette s rie une bibliographie dans laquelle j ai essay de recenser divers articles bien sympas Le GEM est accessible par le TRAP 2 mais en fait gr ce ce trap nous avons acc s plusieurs parties du GEM un peu comme si le trap 1 d bouchait en m me temps sur GEMDOS et BIOS Le GEM est en effet compos principalement de 2 parties l AES et le VDI Les routines du VDI VIRTUAL DEVICE INTERFACE s occupent des graphismes tra age de cercles ellipse traits rectangles etc Par contre
151. mes alors ceux_ci seront pris en compte pour la recherche Si attribs est posi tionn pour trouver un nom de volume alors seuls les noms de volu me seront recherch s Lorsqu un fichier est trouv une structure de 44 octets est crite l emplacement point par le DTA offset taille contenus honar Smar Ane A a see O0 20 r serv s 21 octet bits d attributs 22 mot heure de cr ation 24 mot date de cr ation 26 long taille du fichier 30 14 octets nom et extension du fichier Le nom de fichier et son extension se terminent par 0 et ne contiennent pas d espaces RETOUR 0 si le fichier a t trouv EFILNF si le fichier n a pas t trouv ou le num ro d erreur appropri Lee mm i neS E gt 4F Fsnext Recherche des occurences suivantes WORD Fsnext Recherche les occurences suivantes d un fichier La premi re occurence devra tre recherch e par Fsfirst Les octets de 0 20 doivent rester inchang s depuis l appel de Fsfirst ou depuis le dernier appel de Fsnext RETOUR 0 si le fichier a t trouv ENMFIL s il n y a plus de fichiers trouv s ou le num ro d erreur appropri RS a a E a a aa ai ai a A aa E E aa a a a a a a A a a 56 Frename Renomme un fichier WORD Frename 0 ancnom nouvnom WORD 0 char ancnom char nouvnom Renomme un fichier ancnom en nouvnom Le nouveau nom ne doit pas d j exister mais p
152. mode remplacement 1 mode transparent 2 mo deXOR 3 transparent inverse Essayer de faire 2e rectangle qui se recouvre et observez le r sultat en faisant varier les modes Nous allons maintenant utiliser une autre fonction qui demande la couleur d un pixel Dans le cas du tra age d un rectangle nous avons utilis la tableau dont l adresse tait en A0 pour passer les param tres Pour la demande de couleur d un pixel et pour le coloriage d un pixel nous allons utiliser d autres tableaux Alors l suivez bien parce que les tableaux que nous allons d crire maintenant sont galement utilis s pas le GEM nous allons donc faire d une pierre deux coups Tout comme le GEM donc la ligne A utilise des tableaux destin s chacun recevoir ou rendre des choses diff rentes Le premier tableau c est le tableau CONTRL Control Il re oit le num ro de la fonction et quelques autres param tres Le second c est le tableau INT_IN Cela signifie Integer In c est donc un tableau qui va recevoir des entiers un nombre entier c est en Anglais un integer Le troisi me tableau c est PTSIN Points In C est un tableau destin recevoir les coordonn es des points ou bien des dimensions Disons que ce tableau va recevoir par exemple les coordonn es X et Y pour le centre d un cercle mais aussi son rayon Il r gne une certaine confusion dans les explications sur ce tableau En effet il re oit entre autre des coordonn es qui vont souven
153. moins souvent dans la pile Continuons notre programme avec Control Z Nous sommes maintenant dans la sous routine Arr tez juste avant RTS C est cette ins truction qui va nous faire remonter Elle se lit RETURN FROM SUB ROUTINE Observons A7 sa valeur mais aussi le contenu du tube cette adresse et faisons un pas Control Z L adresse de retour a t d pil e A7 a repris son ancienne adresse et nous pointons mainte nant sur MOVE L 0 D0 Quittez ce programme avec Control C effacez le et tapez celui ci MOVE L 12345678 D0 MOVE L AAAAAAAA DI1 BSR AJOUTE MOVE W D2 D3 AJOUTE MOVE W SEEEE D1 MOVE W 1111 D2 ADD W D1 D2 RTS Assemblez puis d buggez Avancez pas pas D0 prend la valeur 12345678 D1 la valeur AAAAAAAA puis nous partons vers la subrou tine AJOUTE Malheureusement celle ci utilise D1 et au retour nous constatons que celui ci ne contient plus AAAAAAAA En effet le branchement une subroutine ne sauve rien d autre que l adresse de retour et en assembleur les variables locales et autres bidouilles de langa ges volu s n existent pas C est donc nous de sauver les regis tres et c est ce que nous allons faire maintenant Note le registre A7 contenant l adresse du sommet de la pile cette adresse variant bien s r avec l empilage et le d pilage on peut consid rer cette adresse comme un doigt indiquant perp tuellement le sommet de la pile Pour cette raison le registre A7 est
154. n caract re l cran Le plus tonnant va tre l appel au trap 13 Eh oui pour afficher un Une autre exp rience tout aussi int ressante MOVE W A SP MOVE W 2 SP MOVE W 3 SP TRAP 13 ADDO L 6 SP MOVE W 0 SP TRAP 1 Affichage de A mais cette fois avec la fonction Bconout du Bios Assemblez puis passez sous MONST avec un suivi des traps Lorsque vous arrivez dans le Bios donc apr s le passage sur l instruction TRAP 13 faites avancer pas pas le programme mais de temps en temps taper sur la lettre V Cela vous permet de voir l cran Pour revenir sous MONST tapez n importe quelle touche Avancer encore de quelques instructions puis retaper V etc Au bout d un moment vous verrez appara tre la lettre A R fl chissez la notion d cran graphique et la notion de fon tes et vous comprendrez sans mal ce qui se passe Surprenant non Quelques petites choses encore suivez les traps du Bios Xbios GemDos et regardez ce qui se passe au d but Vous vous rendrez compte qu il y a sauvegarde des registres sur la pile Seulement il n y a pas sauvegarde de TOUS les registres Seuls D3 D7 A3 A6 sont sauv s et donc le contenu de D2 est potentiellement crasa ble par un appel au syst me d exploitation La prudence est donc conseill e En suivant galement les TRAPs vous apercevrez USP Cela signifie User Stack Pointer c est ainsi que l on d signe la pile utilisateur Voil normalemen
155. ncipe de traitement que l erreur bus ou le mode Trace vecteur adresse etc Nous verrons plus tard qu il nous sera possible d acc der des adresse impaires mais avec des pr cautions Instructions ill gales Nous avons vu que le travail de l as sembleur consistait simplement transformer en chiffres ligne par ligne notre programme Cependant si nous mettons en m moire une image celle ci sera galement plac e dans le tube m moire sous forme de chiffres La diff rence c est que ces chiffres l ne veulent rien dire pour le 68000 en tant qu instruction Si nous ordonnons au 68000 d aller cette adresse celle de l image il essayera de d crypter ces chiffres comme des instruc tions ce qui d clenchera une erreur instruction ill gale Violation de privil ge Nous avons vu que le 68000 pouvait vo luer en mode utilisateur ou en mode superviseur On dit que l tat superviseur est l tat privil gi ou tat de plus haut privil ge Tenter d acc der en mode utilisateur une zone m moire r serv e au mode superviseur ou bien tenter d ex cuter une instruction privil gi e donc utilisable uniquement en supervi seur provoquera une erreur violation de privil ge Conna tre ces diff rents types d erreurs est tr s important En effet la phase de mise au point est g n ralement longue en assem bleur surtout au d but De tr s nombreuses erreurs peuvent surve nir dont la cause est parfois juste s
156. ne 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 1 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 ap
157. nfort de travail M me si vous avez un 520 choisissez dans les pr f rences de GENST dans le menu Options un chargement automatique de MONST Load MONST YES mettez un Tab Setting de 11 et auto indent sur YES Si MONST est d j charg son option dans le menu program doit tre disponible sinon elle est en gris Si c est le cas apr s avoir sauv les pr f rences quitter GENST et relancez le Maintenant nous allons r aliser le programme suivant Met le chiffre 12345678 dans le registre DO Met le chiffre 00001012 dans le registre D1 Additionne le registre D0 avec le registre D1 Tout d abord il faut savoir que ces ordres seront mis dans le tube et qu il nous faudra parfois rep rer ces endroits Pour cela nous utiliserons des tiquettes que nous poserons c t du tube Ces tiquettes ou Label en Anglais sont inscrire tout gauche dans notre listing alors que les instructions ce qui est mettre DANS le tube seront inscrites apr s un espace ou mieux pour la lisibilit apr s une tabulation Ainsi notre programme devient MOVE L 12345678 D0 MOVE L 00001012 D1 ADD L D0 D1 Remarquer le signe avant les chiffres Le signe indique que ces chiffres sont inscrits en hexad cimal Le signe indique que c est la valeur 12345678 que nous voulons mettre dans DO Si nous avions fait MOVE L 12345678 D0 c est la valeur se trouvant l adresse 12345678 que nous aurions mis en DO Po
158. nge teste le mode Utilisateur ou Superviseur LONG Super pile WORD pile pile est gal 1L FFFFFFFF la fonction retourne 0000 si le processeur est en mode Utilisateur 0001 s il est en mode Superviseur pile est diff rent de 1L si le processeur est en mode Utilisateur la fonction revient avec le processeur en mode Superviseur Si pile est NUL 00000000 la pile superviseur sera la m me que la pile Utilisateur avant l appel Sinon la pile Superviseur sera plac e pile Si le processeur tait en mode Superviseur il se retrouve en mode Utilisateur au retour de la fonction pile devra tre la valeur de la pile utilisateur qui a t retourn e par le premier appel de la fonction ATTENTION La pile Superviseur originale doit tre replac e avant la fin du programme sinon le syst me plantera la sortie du programme 2A Tgetdate Demande la date WORD Tgetdate Retourne la date en format DOS Se 2 gg nr EAA CE ee 0 Ann e depuis 1980 mois jour Of 2 119 Lores 12 154537 kaea a a a E Mo js ee RETOUR les bits 0 4 contiennent le jour allant de 1 31 les bits 5 8 contiennent le mois allant de 1 12 les bits 9 15 contiennent l ann e partir de 1980 allant de 0 119 E ANPE EN de 2B Tsetdate Fixe la date WORD Tsetdate date WORD date Fixe date comme date courante dans le format d crit dans Tgetdate RETOUR 0 si la date est valid
159. ns 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 1 BCS Branch if carry set bit de retenue 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 Bran
160. ns un coup d oeil sur les options Nous avons par d faut DEBUG INFO indiquant Extend Cela signifie que les noms des labels vont tre incorpor s dans le programme Cela nous permet de retrouver les noms de ces labels lorsque nous sommes sous MONST Choisissons l option NONE pour DEBUG INFO as semblons et repassons sous MONST Surprise les noms des labels ont disparu et sont remplac s par des chiffres C est logique puisque de toute fa on l assembleur traduit notre source en chiffres Cherchons notre routine AFFI CHAGE C est un peu plus dur puisque son tiquette n est plus vi sible Pour se rep rer on peut chercher au d but apr s le start CMP W 20 D0 qui est la comparaison avec la touche espace apr s l appui touche Ensuite un BEQ vers la fin et le BSR vers notre routine Relevons l adresse situ e en face du BSR et allons y La premi re ligne de notre routine c est MOVEA L S SXXXXXXX AO XXXXXXX tant l adresse du tableau Je rappelle que sur un 68000 le pro gramme peut se trouver n importe o en m moire cette adresse sera donc diff rente suivant les machines Pour ma part c est 924C6 J active la fen tre 3 avec Alt 3 puis avec alt ta je demande la fen tre de se positionner sur cette adresse MONST m affiche au centre les codes ASCII des lettres de mon tableau 41 42 etc et droite ces lettres en texte En avan ant dans cette routine d affichage je vais donc mettre pour moi 924C6 en A0 cette adres
161. nt un chiffre qui nous est fourni par un appui sur une touche Seulement on doit pr lever des choses diff rentes si la touche est appuy e alors que SHIFT est enfonc e Il est alors possible de se dire si shift n est pas enfonc alors se sont les premiers l ments du tableau qui seront pris en compte mais avec shift ce seront les l ments de la fin On pourra alors faire MOVE W 0O A0 D0 W D1 ou bien si shift est appuy MOVE W 18 A0 D0 W D1 Ceci revient prendre le D0 i me word de A0 en commen ant compter 18 bytes du d but de AO Il faut cependant se m fier de plusieurs choses concernant les tableaux Tout d abord bien faire attention au type de donn es du tableau afin de bien modifier le compteur en cons quence Ensuite bien faire attention au fait que le premier l ment c est l l ment 0 et non pas le 1 Nous avions d j vu dans les tous premiers cours de la s rie 1 les probl mes pouvant survenir lorsque l on compte en oubliant parfois le 0 Ce probl me est d autant plus g nant avec les tableaux que si au lieu de retirer 3B dans mon exemple pour avoir un chiffre de 0 9 je n avais retir que 3A et ainsi obtenu 1 10 mon programme aurait parfaitement fonctionn Il aurait simplement affich n importe quoi la suite d un appui sur F10 Or si vous avez un tableau de 200 l ments que vous appelez avec les touches les touches shifts control etc la v rification touche par touche sera
162. nts Si mes 4 lampes sont teintes 0000 je suis donc la possibilit 0 Si elles sont allum es 1111 je suis donc la 15 car de 0 15 a fait bien 16 donc 0000 gt 0 et 1111 gt 15 J ai donc un bouquin de 16 pages donnant les possibilit s des 16 allumages possibles et mon correspondant a le m me Comment faire pour lui envoyer le message de la page 13 Le chiffre le plus petit tant droite on note les chiffre dans l ordre centaines dizaines unit s pla ons les lampes Lampe num ro 4 3 2 1 a je n ai qu une lampe la 1 elle est allum e donc j obtiens la valeur 1 je ne peut obtenir que 0 ou 1 b j ai 2 lampes 1 et 2 allum es toutes les deux j obtiens la 4 me possibilit J ai donc la valeur 3 puisque je compte les valeurs 0 1 2 et 3 ce qui en fait bien 4 Puisque la lampe 1 vaut au maximum la valeur 1 j en d duis que la lampe 2 vaut elle seule au maximum la valeur 2 En effet lampe 1 allum e gt valeur 1 Lampe 2 allum e gt valeur 2 Donc les 2 allum es ensemble gt valeur 3 4 possibilit s La lampe 2 peut donc donner une augmentation de 0 ou de 2 Lampe num ro 4 3 2 1 augmentation 8 4 2 1 Pour envoyer le message 13 il faut donc allumer la lampe 4 valeur de 8 la lampe 3 valeur de 4 et la 1 valeur de 1 Lampe 4 3 2 1 Etat de la lampe 1 1 0 1 Valeur 8 4 0 1 13 Nous sommes donc en train de compter en binaire En d cimal d c signifie 10
163. o se situe celle ci Dans cette num rotation les lignes vides sont compt es Ainsi si vous aviez pass une ligne apr s MOVE L 12345678 D0 les erreurs auraient t annonc es ligne 5 et 7 Cela fait d j une diff rence puisque si vous regardez bien le programme nous voulions r aliser une op ration avec DO Le remplir au maximum de sa taille puis v rifier que le MOVE de la ligne 2 n affecterait que le byte de poids faible puis r aliser la m me op ration sur AO Impossible priori Tant pis suite notre modification l op ration se d roulera donc sur un word au lieu d un byte D buggons notre programme Premi re constatation l assembleur voyant que les op rations ont lieu avec des registres d adresse et non pas des registres de donn es a automatiquement modifi les MOVE vers A0 et Al pour les transformer en MOVEA ce qui se lit MOVE ADDRESS Ex cutons le programme pas pas D0 prend la valeur 12345678 puis seul son byte de poids faible est modifi D0 prenant alors la valeur 123456AA Ensuite A0 prend la valeur 12345678 Apr s la ligne suivante l op ration affectant le word nous devrions avoir 123400AA Et bien pas du tout Nous obtenons 000000AA Nous venons donc de voir qu un registre d adresse est totalement influenc donc sur un long mot lorsqu il est la destination de l op ration Qu en est il donc lorsqu il en est la source Continuons donc notre programme avec le remplissage d
164. ogramme Recherche la premi re occurrence d un fichier Recherche l occurrence suivante Renomme un fichier Demande ou fixe la date de cr ation d un fichier 03 Cauxin Lit un caract re sur l entr e standard AUX 12 Cauxis Teste l tat du standard AUX en entr e 13 Cauxos Teste l tat du standard AUX en sortie 04 Cauxout crit un caract re sur la sortie standard AUX 01 Cconin Lit un caract re sur l entr e standard 0B Cconis Teste l tat de l entr e standard 10 Cconos Teste l tat de la sortie standard 02 Cconout crit un caract re sur la sortie standard 0A Cconrs Lit une cha ne format e sur l entr e standard 09 Cconws crit une cha ne sur la sortie standard 08 Cnecin Lit un caract re sur l entr e standard sans cho 11 Cprnos Teste l tat du p riph rique standard PRN 05 Cprnout crit un caract re sur la sortie standard PRN 07 Crawcin Lecture brute sur l entr e standard 06 Crawio Lecture criture brute sur l entr e sortie standard 39 Dcreate Cr ation d un sous r pertoire 3A Ddelete Efface un sous r pertoire 36 Dfree Demande d informations sur un disque 19 Dgetdrv Demande le disque par d faut 47 Dgetpath Demande le r pertoire courant 0E Dsetdrv Fixe le lecteur de disque par d faut 3B Dsetpath Fixe le catalogue courant 43 Fattrib Retourne fixe les attributs de fichier 3E Fclose Ferme un fichier 3C Fcreate Cr ation d un fichier 57 Fdatime Demande ou fixe la date d
165. oire 04 fichier syst me 08 fichier contenant un nom de volume sur 11 bits RETOUR Un nombre positif l identificateur ou ERROR ou le num ro d erreur appropri REMARQUES Si le bit de lecture seule est positionn un identificateur d criture seule est retourn et de plus cet identificateur ne permet pas d crire Th oriquement un seul num ro de volume est permis sur un r pertoire racine Le GEMDOS n impose rien de tel ce qui peut causer quelque confusion RS E E E E E E EE ENE E Y E E 3D Fopen Ouverture d un fichier WORD Fopen nmfich mode char nmfich WORD mode Ouvre le fichier nmfich en mode mode et retourne son identifi cateur non standard Le mode d ouverture peut tre lecture seule criture seule lecture et criture RETOUR Un nombre positif l identificateur Un num ro d erreur n gatif 3E Fclose Fermeture d un fichier WORD Fclose idfich WORD idfich Ferme le fichier dont l identificateur est idfich RETOUR 0 en cas de succ s ERROR ou un num ro d erreur appropri en cas d chec RE G a a a E a a a a g fa a a D a a e a Ea a N a a a e a e a l a N e 3F Fread Lecture sur un fichier LONG Fread idfich nbre buffer WORD idfich LONG nbre char buffer Lit nbre octets dans le fichier d identificateur idfich et les place en m moire partir de l adresse buffer RETOUR Le nombre d octets r ellement lus ou 0 si code de fin de fic
166. ois en arri re sur RTEL et sou venez vous de ceux qui faisaient alors de l ASM ils ont presque tous abandonn s N oubliez pas non plus une diff rence fondamen tale entre un langage quelqu il soit et l assembleur Il faut en viron 6 mois pour apprendre le C ou le Pascal Ensuite le temps sera pass produire de bons algorithmes et taper les pro grammes En assembleur il en est tout autrement En un mois maximum le 68000 ne devrait plus avoir de secret pour vous par contre tout le temps qui suivra devra tre consacr faire des recherches plus ou moins videntes sur des trucs r aliser plus vite avec plus de couleurs etc Un programmeur en BASIC ou en C recherche des sources pour travailler Pas un programmeur en assembleur Le programmeur en assembleur VA FAIRE les routines Typiquement on va demander un programmeur en C de faire un programme et le pro grammeur en C va demander au programmeur en assembleur de r aliser la ou les routines soi disant infaisables Et bien sur pour ces routines pas de sources de distribu es Ce que nous appren drons donc ici c est programmer comme des vrais A chercher comprendre afin de pouvoir par la suite chercher tout seul Si vous vous attendez trouver dans ce cours des sources entiers de scrolling de lectures de digits ou de gestion de souris sans le GEM vous faites fausse route Retourner au basic que vous n auriez jamais d quitter Vous resterez a tout jamais c
167. ommode mais la commodit n est pas le but recherch G n ralement en assem bleur on recherche souvent faire soit m me ses routines c est toujours mieux que celles des copains Il faut cependant noter que dans beaucoup de cas une bonne utilisation de la Ligne A ou du Gem est amplement suffisante De plus c est bien souvent une bonne connaissance de ces interfaces qui vous permettra d am liorer vos routines Une raison suppl mentaire r side dans la facilit de mise en oeuvre et dans la facilit d am lioration Il est tout a fait possible que la soci t pour laquelle vous avez r alis un soft vous demande la version 2 00 plusieurs ann es apr s la version 1 00 Les inf mes bidouilles pour gagner 3 cycles d horloges vous semblerons alors bien moins claires qu un appel classique la ligne A peut tre un peu plus lent Mais l encore il faut penser en se mettant la place de l utilisateur Ainsi SPECTRUM 512 est un excellent soft pens avec un esprit programmeur et le r sultat c est que tout le monde utilise DEGAS Les routines ligne A sont donc des routines graphiques de base Elles sont au nombre de 16 et sont num rot s de 0 15 Voici leur fonctions par num ro 0 initialisation 1 placer un pixel une couleur donn e 2 demander la couleur d un pixel 3 trac d une ligne quelconque 4 trac d un ligne horizontale 5 trac d un rectangle rempli 6 remplissage d une ligne d un polygone
168. onc se d placer de 2 en 2 Il ne faut donc pas que notre compteur qui est ici DO prenne une valeur du type 0 1 2 3 4 etc mais plut t une valeur telle que 0 2 4 6 8 Puisqu la suite de nos op rations nous avons D0 avec une valeur du type 0 1 2 3 4 il faut maintenant le multiplier par 2 Cela se fait par l op ration MULU qui se lit Multiply Unsigned En effet c est une multiplication non sign e c est dire qu elle ne prend pas en compte le signe de ce qui est multipli contrairement l op ration MULS Multiply signed Maintenant observons bien cette instruction MOVE W O A0 D0 W DO Il s agit d un MOVE donc d un d placement Il se fait sur un word puisque nous avons W Ce MOVE va prendre le D0 i me word de AO pour le mettre dans D1 Ainsi si nous appuyons sur F3 nous obtenons 3D Nous retirons 3B et nous obtenons 2 nous multiplions par 2 et donc D0 vaut maintenant 4 Nous allons donc pointer sur le 4 me byte de A0 et pr lever un word partir de cet endroit Le d placement est en effet toujours compt avec un nombre de bytes que le tableau soit en byte en word ou en long C est un peu comme si vous vous d placiez dans une rue avec des petites maisons des moyennes ou des grandes le d placement se comptera toujours en m tres Mais que signifie le 0 devant la parenth se Et bien c est la valeur d un d placement fixe ajouter Prenons un exemple Nous avons un tableau dans lequel on tape suiva
169. ons bien en 24 le vecteur 9 correspondant au mode Trace de 64 7C les vecteurs correspondants aux interruptions de niveau 1 7 Le niveau 0 tant le niveau normal de travail n a pas de vecteur Nous pouvons d j expliquer d autres vecteurs Ainsi le num ro 5 adresse 14 c est le vecteur de division par 0 Le 68000 ne peut pas faire de division par 0 Lorsque le programme essaye il se produit la m me chose que pour le mode Trace Ayant d tect une division par 0 le 68000 fonce l adresse 14 y trouve une adresse de routine et va ex cuter celle ci Dans la plupart des cas cette routine va afficher quelques bombes l cran et tout bloquer Rien ne vous emp che cependant de pr parer votre propre routine et de mettre son adresse en 14 Ainsi dans un programme de math beurkk cette routine peut afficher division par 0 im possible Si l utilisateur tente une telle division inutile de faire des tests pour le pr venir de cette impossibilit le 68000 s en chargera tout seul Les autres vecteurs Erreur bus Nous avons vu pr c demment que le 68000 utilise ce que nous appelons un bus pour recevoir ou transmettre des donn es Si une erreur survient sur celui ci il y a saut a l adresse 8 pour trouver l adresse de la routine qui sera alors ex cut e Erreur d adresse Le 68000 ne peut acc der qu des adresses paires S il tente d acc der une adresse impaire il se produit une erreur d adresse m me pri
170. our Si drap est 0 ils sont retourn s Les bits d attributs sont masque description Fesses ESS SES a a a a 01 fichier lecture seule 02 fichier transparent au r pertoire 04 fichier syst me 08 fichier contenant un nom de volume 11 octets 10 fichier sous r pertoire 20 fichier crit puis referm REMARQUE Le bit d archivage 20 ne semble pas marcher comme pr vu 45 Fdup Duplique un identificateur de fichier WORD Fdup idfich WORD idfich L identificateur idfich doit tre un identificateur standard 0 5 Fdup retourne un identificateur non standard sup rieur ou gal 6 qui pointe le m me fichier RETOUR Un identificateur ou EIHNDL idfich n est pas un identificateur standard ENHNDL Plus d identificateur non standard W i a AE SV EE CREER RE A a A 46 Fforce Force un identificateur de fichier Fforce stdh nonstdh WORD stdh WORD nonstdh Force l identificateur standard stdh pointer le m me fichier ou p riph rique que l identificateur non standard nonstdh RETOUR 0 si OK EIHNDL identificateur invalide 47 Dgetpath Demande le r pertoire courant void Dgetpath buf driveno char buf WORD driveno Le r pertoire courant pour le lecteur driveno est recopi dans buf Le num ro de lecteur commence 1 pour le lecteur A 2 pour le B etc 0 sp cifiant le disque par d faut REMARQUE La taille maximum d
171. ous notre nez Le type m me de l erreur si celle ci est bien comprise peut souvent suffire orienter les recherches plus pr cis ment et ainsi raccourcir le temps p nible de recherche du grain de sable qui bloque tout Tous les vecteurs constituant le premier kilo de m moire ayant pour but de d router le programme principal vers une routine ex ceptionnelle sont appel s vecteurs d exceptions Les vecteurs restants seront tudi s dans les s ries suivantes au fur et mesure des besoins Chaque chose en son temps Pour aujourd hui nous nous arr terons l Ce fut court mais le prochain chapitre sera consacr la pile et sera bien gros La pile est un probl me aussi simple que les autres qui demande simplement de l attention Apr s avoir tudi ce qu est la pile il ne nous restera plus qu un demi cours avant d aborder nos pre miers gros programmes Courage mais surtout prenez votre temps Relisez les cours pr c dent m me si tout vous para t compris Plus nous avancerons plus le nombre de petites choses augmentera et moins il y aura de place pour la plus petite incompr hension COURS D ASM 68000 par le F roce Lapin retour au VOLUME 1 KKKKKKKKKKKKKKKKKXKKKKKKKKKKKKKKKKRKKKKKKKKKRRKRRERRERRRERKKRERRERKKERKKKKEXEXX XX COURS D ASSEMBLEUR 68000 SUR ATARI ST il par Le F roce Lapin from 44E ij Cours num ro 6 kkxkkxkxkxkxkxkkxkxkkxkxkxkkkkkkkkkkk
172. ous 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 AO 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
173. peler 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 v
174. peuvent tre incluses diminuant d autant la taille du listing et y permettant des d placements nettement plus ais s Voyons tout de suite un autre bloc qui devra maintenant faire partie de notre biblioth que Jusqu pr sent nous avons tap pas mal de petits programmes sans nous soucier de la place m moire Il est temps d y penser afin de commencer prendre conscience du fait qu il faut programmer proprement Imaginons que notre programme soit en m moire mais qu en m me temps il y ait d autres programmes dans cette m moire Il est bien vident que chacun ne doit s approprier que la place m moire dont il a besoin afin d en laisser le plus possible pour ces voisins Pour cela il faut savoir que lors de l assemblage sous forme de fichier ex cutable il y a g n ration d une en t te Gr ce cette en t te au lan cement de notre programme il va y avoir cr ation de ce qu on ap pelle la page de base En voici un descriptif Si vous d sirez obtenir un maximum de renseignements sur les en t tes de programme ou les pages de base reportez vous aux chapitres correspondants dans la Bible ou le Livre du D veloppeur Excellent chapitre sur ce sujet dans la doc officielle ATARI document sur la structure des programmes Page de base Adresse Description 00 Adresse de d but de cette page de base 04 Adresse de fin de la m moire libre 08 Adresse du d but de la section TEXTE 0C Taille de la section TEXTE 10 Adre
175. pondance simple retenir entre position des bits servant r gler une interruption et niveau de priorit de celle ci 7 7C NMI Reset 6 78 MFP 68901 5 74 4 70 VBL retour d image 3 6C 2 68 HBL retour de ligne 1 64 RS N a A E EENE IN a A EEE NE EEEE a EE E PE EE N M EE SN Et a E E EAE E EENES a en E E E E a E E R 15 13C D tection de moniteur monochrome 14 138 Indicateur de sonnerie RS232 13 134 Timer A disponible 12 130 Tampon de r ception RS232 plein x 11 12C Erreur de r ception RS232 10 128 Tampon d mission RS232 vide i k 9 124 Erreur d mission RS232 K 8 120 Timer B Compteur interrup horizontales x 7 11C Contr leur de disque et de DMA 6 118 ACIA 6850 MIDI et Clavier 5 114 Timer C Horloge syst me 200 Hz 4 110 Timer D Horloge de cadencement RS232 3 10C Contr leur vid o fin d op ration 2 108 CTS de l E S s rie 1 104 DCD de l E S s rie 0 100 Ligne BUSY de l interface parall le a Se PE nn tn Aaaa a an aa COURS D ASM 68000 par le F roce Lapin Mnemonic S Size Source Destination Flags Instr format STL AN RS a a BWL 0123456789AB 0123456789AB XNZVC BBBB RE ABCD S D v B 0 4 0 4 U U 11004dd10000msss 2 ADD S Dn
176. ppeler une subroutine destin e additionner 2 nombres et retourner le r sultat dans D7 Il faudra donc utili ser 2 registres par exemple D0 et D1 pour travailler dans notre routine et donc les sauvegarder l entr e de celle ci Voici le d but du programme MOVE L 11111111 D0 MOVE L 22222222 D1 MOVE L 33333333 D2 MOVE L 44444444 D3 MOVE L 55555555 D4 MOVE L 66666666 D5 MOVE L 77777777 D6 Les 7 premiers registres sont remplis avec des valeurs bidons juste pour nous permettre de v rifier leurs ventuelles modifica tions Maintenant il faut placer les 2 nombres que nous d sirions addi tionner dans un endroit tel qu ils pourront tre r cup r s par la routine d addition Pla ons donc ces 2 nombres sur la pile MOVE L 12345678 SP MOVE L 00023456 SP BSR AJOUTE et en route R digeons maintenant notre subroutine afin de suivre l ordre de travail du 68000 De quoi aurons nous besoin dans cette routine De DO et de D1 qui vont recevoir les nombres empil s et qui vont nous servir au calcul Il va nous falloir galement un regis tre d adresse En effet lorsque nous allons d piler nous allons modifier le pointeur de pile or nous venons d effectuer un BSR le 68000 a donc empil l adresse de retour sur la pile et modifier celle ci va compromettre le retour Nous allons donc copier l adresse de la pile dans A0 et utiliser cette copie Note j ai d cid d utiliser D0 D1 et
177. puis le contenu de l adresse 493E0 sans est remis dans DO La pile c est une partie de ce tube mais que nous allons g rer d une mani re un peu diff rente En effet au lieu de placer les donn es dans le tube et de noter leurs adresses nous allons cette fois ci les empiler et pour les r cup rer les d piler L avantage c est le gain de temps pas la peine de se demander quelle adresse on a stock les donn es et un gain de place si c est pour stocker temporairement des donn es inutile de conserver une portion de tube juste pour a Par contre l inconv nient c est que la gestion doit tre rigou reuse Imaginons que j empile un premier chiffre puis 10 autres par dessus Ensuite je d pile mais erreur de ma part je ne d pile que 9 chiffres Quand je d pilerai une fois de plus croyant retrouver le premier chiffre empil je r cup rerai en fait le premier de la s rie de 10 Nous en concluons 2 choses d abord que la pile est un moyen sim ple pour sauvegarder des donn es mais ensuite que c est une source de d sagr ment potentiel tel que certains programmeurs h site s en servir C est g n ralement cause d un manque de ri gueur ce qui je l esp re ne vous arrivera pas Une autre remarque le dernier l ment plac sur la pile sera tou jours le premier en sortir C est bien le m me principe que ce lui d une pile d assiettes Regardez chez vous il y a s rement une norme pile d assi
178. qu au moment o je lis le 3 me l ment de TAB_CODE je sois en face du 3 me l ment de TAB_ROUTINE Voici le module D7 contient le word correspondant la touche ou la combinaison de touche LEA TAB_CODE A0 LEA TAB_ROUTINE A1 ICI MOVE W A0 DO CMP W FFFF DO0 BEQ DEBUT MOVE L Al A2 CMP W D0 D7 BNE ICI JSR A2 BRA DEBUT L adresse de la liste des codes est mise en A0 et celle des adresses de routines en Al On pr l ve un word de code C est FFFF si c est le cas c est donc que nous sommes en fin de liste donc on se sauve puisque la touche choisit n est pas valable Sinon on pr l ve l adresse dans le tableau des adresses de routines Le code du tableau est il le m me que celui de la touche Non on boucle notez ici le point devant le label Cela indique que le label est local L assembleur le rapportera au label le plus proche portant ce nom Il est ainsi possible d avoir plusieurs label ICI dans un programme ou tout autre nom pourvu qu il soit pr c d d un point Dans le cas de petites boucles par exemple cela vite de chercher des noms de labels tordus Puisque le code est identique celui de la touche on saute vers la routine et au retour on recommence Les avantages de cette m thode sont multiples Tout d abord la petite taille de la routine de test s il avait fallu r aliser des tests du genre cmp w 1519 d7 bne s icil bsr truc bra d but icil cmp w 1615 d7 bne
179. r 1 le port s rie AUX normalement REMARQUE Le contr le de flux de la sortie RS232 ne marche pas avec cette fonction Les programmes devraient utiliser l appel de p riph rique de caract re BIOS afin d viter de perdre des caract res re us Ko nt ne NS pE te GE te dm oh el ne Sn E E 04 Cauxout crit un caract re sur la sortie standard AUX void Cauxout c WORD c RE RA E E A AAIE E AANS A SE A ER EE PA EE E S A AAE E P E E A EN A E E S A EEE AE EA 05 Cprnout crit un caract re sur la sortie standard PRN void Cprnout c WORD c crit c sur l identificateur 2 le port imprimante PRN norma lement Les huits bits hauts de c sont r serv s et doivent tre z ro Les tabulations ne sont pas interpr t es Ke Se me ee Se D nt ne een en rm Ta aa 06 Crawio Lecture criture brute sur l entr e sortie standard LONG Crawio w WORD w REMARQUES Par le fait m me de sa conception cette fonction ne peut crire ff sur la sortie standard 00 ne peut tre diff renci d une fin de fichier 07 Crawcin Entr e brute sur l entr e standard LONG Crawcin REMARQUE Pas d indication de fin de fichier RS es 08 Cnecin Lit un caract re sur l entr e standard sans cho LONG Cnecin Lit un caract re sur l entr e standard Si le p riph rique d entr e est CON aucun cho n est fait Les caract res de contr le sont interpr t s RS T E EE EEEE ENE E EEN E E E E EREE EN E E E A
180. r TT C est en effet une adresse invalide si on cherche s en servir en 32 bits avec le 68030 Il faut donc utiliser SFFFF8800 qui mar chera sur toutes les machines Ne testez pas la r solution avec Xbios4 C est p rilleux car en cas de grand cran vous recevrez n importe quoi Pour l ouverture maxi d un fen tre demandez au GEM la taille de la station de tra vail voir le source avec la fen tre Une copie de blocs faire Utilisez la fonction Vro_cpy mais si c est une copie avec l cran il y a une solution simple vous serez obliger de fabri quer une structure FDB Form Definition Block C est une struc ture qui indique la largeur de la surface de travail sa longueur le nombre de plans etc Au lieu de demander au GEM toutes les donn es remplissez la de 0 et le GEM saura de lui m me que vous voulez parler de l cran et se d brouillera tout seul Pour vos accessoires testez vos ressources en basse r solution Un accessoire comme son nom l indique doit tre accessoire c est dire fonctionner sans g ner le reste de la machine Pe tite taille un accessoire de formatage de 100Ko hum 1 Un seul fichier ressource Cela implique de ne pas utiliser de dessins et de construire sa ressource avec l option SNAP active dans K_Ressource Cette option permet d avoir les boutons bien plac s quelle que soit la r solution d utilisation de la res source Si possible placez la ressource l int rieur de l acces
181. r au VOLUME 2 KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKRKKKRKKRRRRERRERRRERKKRERKRERKRKKKKEXEXXX X COURS D ASSEMBLEUR 68000 SUR ATARI ST par Le F roce Lapin from 44E Seconde s rie Cours num ro 7 kkkkxkxkxkxkxkxkxk xkxkxkxk xkkxkxkxkxkxkkkxkkkkxkkxkkkxkkkk xk xkkkkk xkxkkxk xkkk kxk xkkxk xkkxkkkk kxkkxk kxxkxk Inutile de vous complimenter inutilement mais si vous avez suivi bien tranquillement les cours depuis le d but si vous avez pris soin de vous exercer avec des petites applications vous devez d j avoir un niveau correct en assembleur N oubliez donc pas les commandements principaux bien commenter les programmes r fl chir simplement utiliser papier et crayon etc Plus vous avancerez et plus vos listings seront longs et plus une programmation propre sera indispensable De m me cherchez par vous m me avant de poser d s questions cela vitera bien souvent de demander n importe quoi Dans ce cours ainsi que dans les 2 suivants nous aborderons2 sujets tabous la Ligne A et le GEM Concernant ces 2 sujets les critiques vont bon train la ligne A c est pas commode c est nul et le GEM pouah Apr s pas mal de temps pass discuter et couter les opinions de plusieurs personnes je suis arriv la conclusion suivante Tout d abord les critiqueurs sont rarement les programmeurs Ligne A ou GEM Ensuite imaginons un cours instant notre ST s
182. r 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 Escapete 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
183. r soit m me Nous avions vu dans la premi re s rie que les traps taient un excellent moyen d acc der au syst me d ex ploitation et plus g n ralement d acc der des espaces prot g s uniquement accessible en mode Superviseur Nous avions gale ment tudi le passage des param tres par la pile ce qui nous avait servi pour r aliser des subroutines avec param tres Le premier exemple va consister changer la couleur du fond de l cran avec une routine fabrication maison qui sera appel e par un trap D abord la routine Etant donn qu un trap est toujours ex cut en Superviseur nous n h sitons pas utiliser les adresses syst me La palette de couleurs du ST est situ e l adresse FF8240 Chaque couleur tant cod e sur un mot la couleur 0 est en FF8240 la couleur 1 en FF8242 etc Nous allons faire 2 routines Une qui mettra le fond en rouge l autre qui mettra le fond en vert Les voici ROUGE MOVE W 700 FF8240 RTE VERT MOVE W 070 FF8240 RTE Une tiquette permet de les rep rer ROUGE et VERT Les couleurs tant cod es en RVB rouge vert bleu On trouve aussi RGB qui est la traduction anglaise red green blue et les niveaux varient de 0 7 Nous remarquons que les routines ne se terminent pas par RTS mais par RTE Cela signifie Return from exception Il s agit bien en effet d un retour d exception et non pas du retour d une subroutine classique Petit rappel RTE se lit ret
184. re et profitons du mode d adressage pour avancer l adresse indiqu e dans AO et ainsi tout de suite tre pr t pour r cup rer l autre nombre MOVE L A0 DO L adresse ayant t augment e nous pouvons donc r cup rer la suite MOVE L A0 D1 2 Autre m thode utilisant un autre mode d adressage La m thode pr c dente pr sente un inconv nient apr s le ADDA AO est modifi et si nous voulions garder cette adresse il aurait fallu le sauvegarder Ou bien nous aurions pu ajouter le d calage A0 r cup rer les donn es et ensuite retirer le d calage A0 pour qu il retrouve sont tat de d part Autre m thode donc indiquer dans l adressage le d calage appli quer Cela se fait par MOVE L 16 A0 DO MOVE L 20 A0 D1 Cela permet de pointer sur le 16 me octet partir de l adresse donn e par A0 et ensuite de pointer sur le 20 me par rapport AO Dans les 2 cas A0 n est pas modifi Voil le listing complet de cet exemple MOVE L 11111111 D0 initialisation de DO MOVE L 22222222 D1 idem MOVE L 33333333 D2 idem MOVE L 44444444 D3 idem MOVE L 55555555 D4 idem MOVE L 66666666 D5 idem MOVE L 77777777 D6 idem MOVE L 12345678 SP passage nombre 1 dans la pile MOVE L 00023456 SP passage nombre 2 dans la pile BSR AJOUTE et en route MOVE L D7 D0 transfert du r sultat pour voir notre subroutine UTE MOVEM L D0O D1 A0 SP sauvegarde MOVE L A7 A0 copie de SP
185. resse cran inchang e 1 SP adresse cran inchang e 5 SP fonction Setscreen 14 du X bios 12 SP correction Ouverture du fichier image CHARGE MOVE W MOVE OL MOVE W TRAP ADDQ L DO contient le TST W BLT 0 SP NOM_FICHIER SP 61 SP 1 8 SP ouverture en lecture adr nom du fichier fonction Fopen du GEMDOS correction pile Handle ou bien un num ro d erreur n gatif DO ERREUR On sauve le handle du fichier MOVE W D0 D3 compare 0 inf rieur donc erreur Saute les 34 octets du d but de fichier DEGAS 2 octets d en t te 32 de couleurs MOVE W MOVE W MOVE L MOVE W TRAP ADDA L TST W BLT 0 SP D3 SP 34 SP 66 SP 1 10 SP DO ERREUR D termine l adresse de l cran MOVE W TRAP ADDQ L MOVE L Charge l image MOVE L MOVE L MOVE W MOVE W TRAP ADDA L TST W BLT 2 SP 14 2 SP D0 A5 d cale partir du d but de fichier handle du fichier nbr d octets sauter fonction Fseek du GEMDOS test DO fonction Physbase du xbios correction pile sauve l adresse directement dans l cran A5 SP 32000 SP D3 SP 63 SP 1 12 SP DO ERREUR adresse destination nbr octets lire handle du fichier fonction Fread du GEMDOS Chargement de la palette dans notre buffer palette D abord repositionner le pointeur fichier MOVE W MOVE W MOVE L 0 S
186. ruction Nous nous retrouvons donc avec une suite de chiffres ces chiffres tant dans le tube Tout comme nous avons crit dans le tube pour modifier des valeurs donn es des variables il est donc tout a fait possible d crire dans le tube pour modifier les chiffres qui sont en fait des instructions Il est vident que la prudence s impose car les chiffres que nous allons crire doivent tre reconnus par le 68000 comme une nouvelle instruction et non pas comme n importe quoi ce qui conduirait une erreur Voyons concr tement un exemple simple Nous avons une liste de lettres co d e en word et nous voulons afficher ces lettres les unes apr s les autres Voici un programme r alisant cette op ration INCLUDE B START S LEA TABLEAU A6 dans A6 car GEMDOS n y touche pas DEBUT MOVE W A6 D0 pr l ve le word CMP W SFFFF DO c est le flag de fin BEQ FIN oui bye bye MOVE W D0 SP non donc le passe sur la pile MOVE W 2 SP pour l afficher TRAP 1 ADDQ L 4 SP MOVE W 7 SP attend un appui touche TRAP 1 ADDQ L 2 SP BRA DEBUT et on recommence FIN MOVE W 0 SP TRAP 1 E aa sr G en SECTION DATA TABLEAU DC W 65 66 67 68 69 70 FFFF SECTION BSS DS L 100 PILE DS L 1 END Imaginons maintenant que cet affichage soit dans une subroutine et que nous voulions afficher une lettre chaque appel de cette subroutine On attend un appui sur une touche si c est espace alors on s en va sinon on saute l
187. s Sinon il s agit plus d emb tements qu autre chose 1 1 M me si certains puristes pr f rent linker j dite j assemble je quitte je linke je lance a plante je d bugge j dite etc je pr f re quant moi la m thode de l include Elle permet ventuellement d avoir acc s directement au source Par exemple si votre routine de sauvegarde palette plante placer le curseur de GENST sur la ligne INCLUDE A SAUV_PAL S puis choisissez l option Insert File dans le menu fichier Votre routine est maintenant sous vos yeux Une fois que ce bloc est au point d limitez le avec F1 et F2 puis sauver le avec F3 hop le tour est jou Fin du cours sur les inclusions Commencez fabriquez votre biblioth que et n h sitez pas en faire des copies de s curit et m fiez vous des virus Sur cette disquette il y a IMUN PRG Vous le mettez en dossier Auto sur votre disquette de boot et il v rifi toutes les disquettes que vous introduisez dans le lecteur COURS D ASM 68000 par le F roce Lapin retour au VOLUME 2 kkxkxkxkkkxkxkxkkkkxkxkkxkkkkkkkkxkkkkk kxkkkkkkxkkkk kxkkkkkxkxkkkkk kkkxkk kkkxkkk kk kkxkxkkxkxk COURS D ASSEMBLEUR 68000 SUR ATARI ST par Le F roce Lapin from 44E Seconde s rie Cours num ro 4 KKKKKKKKKKKKRKKKXRRKKXKKXKRRKRKRKRRRXRRKKRRKRRRKRXRRKRKRKRKRRXRKXKRKXRXKKRKERXREXX EX k XX Apr s avoir vu le principe des incl
188. s W 111 000 LE 1111 s z n V N v VS 1001 u v 8 Abs L 111 001 9 d PC 111 010 WHERE X NOT x A d PC Xi 111 011 B Imm 111 100 COURS D ASM 68000 par le F roce Lapin retour au VOLUME 1 x xxx AFFECTATIONS DES VECTEURS D EXCEPTION DU 68000 MOTOROLA kk xx kxk Dans l ordre Num ro du vecteur adresse en d cimal adresse en hexad cimal descriptif de la zone affectation 000 SP RESET INITIALISATION SSP 4 004 SP RESET INITIALISATION PC 8 008 SD ERREUR BUS 12 00C SD ERREUR D ADRESSE 16 010 SD INSTRUCTION ILLEGALE 20 014 SD DIVISION PAR ZERO 24 018 SD INSTRUCTION CHK 28 01C SD INSTRUCTION TRAPV 32 020 SD VIOLATION DE PRIVILEGE oo uyon RAUN 9 36 024 SD TRACE 10 40 028 SD EMULATEUR LIGNE 1010 11 44 02C SD EMULATEUR LIGNE 1111 12 48 030 SD non attribu r serv 13 52 034 SD non attribu r serv 14 56 038 SD non attribu r serv 15 60 03C SD non init vecteur 16 23 64 04C SD non attribu r serv 95 05F 24 96 060 SD INTERRUPTION PARASITE 25 100 064 SD AUTO VECTEUR D INTERRUPTION NIVEAU 1 26 104 068 SD AUTO VECTEUR D INTERRUPTION NIVEAU 2 27 108 06C SD AUTO VECTEUR D INTERRUPTION NIVEAU 3 28 112 070 SD AUTO VECTEUR D INTERRUPTION NIVEAU 4 29 116 074 SD AUTO VECTEUR D INTERRUPTION NIVEAU 5 30 120 078 SD AUTO VECTEUR D INTERRUPTION NIVEAU 6 31 124 07C SD AUTO VECTEUR D INTERRUPTION NIVEAU 7 32 128 080 SD VECTEUR D INSTRUCTION TRAP 0 33 132 084 SD VECTEUR D INSTRUC
189. s notre ST 8 Mega octets quipons le d un norme disque dur et connectons le plusieurs terminaux Nous avons donc plu sieurs claviers plusieurs crans mais en revanche un seul mi cro processeur celui de l unit centrale dont le nom prend ici toute sa valeur et une seule m moire dans laquelle tout le monde pioche tours de bras L la diff renciation Superviseur Utili sateur prend son sens Le Superviseur c est le propri taire de l unit centrale les personnes utilisant les terminaux n tant que des utilisateurs Le fait de ne leur autoriser qu une partie des instructions et de la m moire a pour but d viter les planta ges car si dans le cas d une mono utilisation un plantage total de la machine est toujours g nant dans le cas d une multi utili sation cela rel ve de la catastrophe car on ne plante plus le travail d une seule personnes mais de plusieurs Le bit S du Status Register s il est 0 indique que nous sommes en mode Utilisateur A 1 il indique que nous sommes en Super viseur Tout comme MONST indiquait l tat Trace en indiquant T c t du SR il indique U ou S suivant le mode dans lequel nous nous trouvons Jetons un coup d oeil en arri re sur le chapitre d crivant le bro chage du 68000 cours suppl mentaire A Nous retrouvons cette distinction au niveau des broches FC0 FC1 FC2 Avant d tudier les 3 bits restant du SR I2 Il IO il faut sa voir que le Status Register
190. s toutes simples puis de plus en plus compli qu es etc Le principe restera toujours le m me quelle que soit la taille de votre application Essayez de faire de petits acces soires du genre formateur de disquettes avec un petit formulaire qui demande si l on veut formater le disque A ou le B en simple ou en double face etc A l aide de ces exemples vous devriez r ussir vous d brouiller C est avec a que j ai commenc Jetez galement un coup d oeil sur la bibliographie il y a quelques trucs int ressants COURS D ASM 68000 par le F roce Lapin retour au VOLUME 2 KKKKKKKKKKKKKKKKKXKKKXKXKKKKKRKKKRKRERKRKERRERRKRERRERRERRERRERERRRRRRRRRRRKXKKKXEXX XX XX COURS D ASSEMBLEUR 68000 SUR ATARI ST par Le F roce Lapin from 44E Seconde s rie Cours num ro 9 kkxkxkxkkkxkxkxkkkkxkxkkkkxkxkxkkkkxkkkkkxkxkkkkkxkxkkkkxkxkkkxkkkkkkkxkxkkkkkxkxkkkkxkxkxk Ce petit cours va tre un peu sp cial car il va fournir des indi cations sur la fa on de r aliser des programmes GEM qui fonction nent correctement Il y a en effet quelques trucs respecter Sur MAC les pro grammeurs ont leur disposition des bouquins traitant de l ergo nomie des logiciels Qu est ce que c est Et bien c est simple ment un ensemble de r gles respecter afin que l utilisateur ne soit pas perdu d un programme l autre Il faut en effet bien se souvenir que vous tes programmeur
191. sait comme de petits probl mes peut tourner la catastrophe Tout d abord avoir de l ordre au niveau disquette Les sauvegardes sont tr s nombreuses et c est vite la pagaille Travailler avec soins commentaires clairs et pr cis sur les listings viter les soit disant trucs qu on ne comprendra plus au bout de 3 jours mettez quelques lignes explicatives au d but du listing Au niveau outil je conseille DEVPAC pour sa facilit d emploi et sa doc qui bien qu en Anglais et suffisamment claire pour que l on y retrouve facilement les informations Si vous avez un 1040 ou plus n h sitez pas demander au niveau des pr f rences de GENST un chargement automatique de MONST le d bugger Pour ce qui est des livres de chevet et de travail il faut bien sur faire la diff rence entre 2 types d ouvrages ceux relatifs au 68000 Motorola et ceux relatifs l1 ATARI Il faut ABSOLUMENT un ouvrage de chaque Attention pour celui relatif au 68000 il ne doit pas s agir d un ouvrage de vulgarisation mais d un ouvrage technique qui vous semblera certainement incompr hensible au d but Par exemple documentation du fabricant de microprocesseur MOTO ROLA ou THOMSON pour la France Cherchez du c t des vendeurs de composants lectroniques plut t que dans les magasins de micro ordinateurs En d sespoir orientez vous vers Mise en oeuvre du 68000 aux ditions SYBEX Une remarque qui devra IMPERATIVEMENT guider
192. se tant celle pointant sur le A du tableau Ce qui m int resserait c est que la prochaine fois cela me permette de pointer sur le B Pour cela il faudrait avoir MOVEA L 924C6 A0 pour le A et ensuite MOVEA L 924C8 A0 pour le B Les lettres tant sous forme de word dans mon tableau il faut une avance de 2 Retournons dans la fen tre 2 en face de ce MOVEA L regardons l adresse laquelle il se trouve colonne de gauche notons cette adresse et notons galement l adresse de l instruction sui vante MOVE W A0 D0 Activons la fen tre 3 et pla ons nous l adresse du MOVEA L Dans mon cas et puisque j avais MOVEA L 924C6 A0 je trouve 207C 0009 24C6 J en d duis que ces 3 words constituent la repr sentation de mon instruction MOVEA L puisque l adresse du word suivant correspond celle de l instruction suivante Or je retrouve dans ce codage l adresse de mon tableau Avec un peu d imagination je con ois ais ment qu il est possible d crire directement dans le tube et par exemple de modifier le word qui a pour valeur actuelle 24C6 Si je lui ajoute 2 mon instruction deviendra 207C 0009 24C8 ce qui reviendra MOVEA L 924C8 A0 et qui me fera pointer sur le Voici donc la version auto modifiable de la routine AFFICHE AFFICHE MOVEA L TABLEAU AO MOVE W A0 DO CMP W FFFF DO0 BNE ICI MOVE L TABLEAU AFFICHE 2 BRA AFFICHE ICI ADD W 2 AFFICHE 4 MOVE W D0 SP MOVE W 2
193. sembleur a simplement converti ligne par ligne notre programme en chiffres Normalement dans la fen tre 2 vous devez voir notre programme avec en face de la premi re instruction une petite fl che Regardez l adresse de cette instruction c est dire le chiffre de gauche qui indique a quel endroit dans le tube se trouve cet ordre Avec un 1040 sous TOS 1 4 cela tourne autour de 61BF0 NOTE Le 68000 permet un programme de se placer n importe o Sur certains micro processeurs les programmes doivent imp rati vement tous se placer au m me endroit Pour nous ce n est pas le cas ce qui explique que si mon programme est en 61BF0 il n en est pas forcement de m me pour vous c est normal Regardez maintenant la fen tre 3 et cherchez y la m me adresse que celle que vous avez lue dans la fen tre 2 en face de notre pre mi re ligne de programme Normalement si vous n avez touch rien cette adresse doit normalement tre la premi re Vous devez y voir 203C12345678 C est ainsi que le micro proces seur re oit MOVE L 12345678 D0 1 1 Retournons sur la fen tre 2 Notons l adresse de la seconde ligne de notre programme et soustrayons ce chiffre l adresse de la premi re ligne Nous obtenons 6 Nous en d duisons donc que MOVE L 12345678 D0 occupe 6 octets en m moire Faisons maintenant avancer notre programme Pour cela maintenez enfonc CONTROL et appuyez une fois sur Z La petite fl che a saut sur la
194. soire en la relogeant voir listing de relocation ci joint cela vite d avoir plusieurs fichiers manier quand on d place les ac cessoires N h sitez pas mettre des raccourcis clavier dans vos ressources Si vous utilisez K Ressources vous verrez qu il y a un acc s des bits inutilis s pour les objets En effet si l on prend par exemple les bits d finissant les flags de l objet on se rend compte que seul les bits 0 8 sont utilis s Or le codage est fait sur un word il nous reste donc 7 bits de libres Ces bits sont laiss s au programmeur pour y stocker ce qu il veut A titre indicatif voici ce que j y mets Extended_type scan code de la touche de raccourci pour cet objet Extended_flag Touche s devant tre enfonc e simultan ment pour rendre ce raccourci valide Bit 15 gt Alternate Bit 14 gt Control Bit 13 gt Shift gauche Bit 12 gt Shift droit Bit 11 et 10 gt position du soulignement 0 pas de soulignement 1 on souligne la premi re lettre etc Extended_state Indication de la musique sur un octet associ la s lection de cet objet 0 pas de musique 1 clochette 2 63 digits 64 127 Xbios 32 128 190 son au format Gist 191 255 musique format Mad Max ou Musexx Tout ceci me permet d avoir des raccourcis clavier inscrits DANS la ressource ce qui permet des modifications ultra rapide Pour les raccourcis il faut utiliser de pr f rence la touche Alter nate car son utilisation av
195. sque celui ci est pris comme lecteur A dans lequel on met le disque B je n ai par contre pas rencontr de probl me avec mon lecteur externe INCLUDE A START S MOVE W AAAA BIDULE BSR TRUCMUCHE MOVE W BIDULE D6 MOVE W 0 SP TRAP 1 Ea E E E E E E E E E E E E E E E A E E E TRUCMUCHE MOVEM L DO D7 A0 A6 SP BSR MACHIN MOVEM L SP D0 D7 A0 A6 RTS MACHIN MOVEM L D0 D7 A0 A6 SP MOVE L 12345678 D0 MOVEM L SP D0 D7 A0 A6 RTS SECTION BSS BIDULE DS W 1 DS B 124 PILE DS L 1 END Ce programme est bien sur bidon J esp re cependant que vous l avez scrupuleusement tap Lancez le paf 4 bombes 111 Observons le la loupe afin de comprendre pourquoi Le start est bien mis en place et lorsque nous d buggons il est effectu sans incident On place ensuite AAAA dans la variable BIDULE Activons la fen tre 3 et pointons sur BIDULE il suffit pour cela de faire Alternate A et de taper le nom du label en majuscule donc ici BIDULE Avan ons pas pas nous voyons bien BIDULE recevoir AAAA Continuons avancer nous sautons dans TRUCMUCHE avec au passage sauvegarde dans la pile de l adresse de retour ce propos vous pouvez faire pointer la fen tre 3 sur PILE et regarder au dessus l empilage des donn es Ensuite nous allons sauter dans MACHIN mais l stop Suivez attentivement les explications Juste avant d ex cuter le BSR MACHIN faites scrol ler la fen tre 1 avec la touche fl ch
196. sse de d but de la section DATA 14 Taille de la section DATA 18 Adresse de d but de la section BSS 1C Taille de la section BSS Nous allons donc piocher ces informations et en d duire la taille qui devrait suffire pour notre programme Connai issant l emplacement de la zone d implantation du programme nous utiliserons la fonction 74 du GEMDOS fonction Mshrink qui permet en donnant la taille d sir e et l adresse de fin de r tr cir une zone m moire En effet au lancement notre programme a pris toute la place disponible nous devons donc la r tr cir Notre programme a galement besoin d une pile Au lieu de prendre celle qui est d j en place nous allons lui substituer la notre dont nous pourrons r gler la taille loisir ROUTINE DE DEMARRAGE DES PROGRAMMES MOVE L A7 A5 pr l ve ptn de pile pour prendre les param tres LEA L PILE A7 impose notre pile MOVE L 4 A5 A5 adresse de la page de base de l ancienne pile MOVE L 12 A5 D0 taille de la section texte ADD L 20 A5 D0 taille section data ADD L 28 A5 D0 taille section bss ADD L 100 D0 longueur de la page de base 256 bytes Appel la fonction MShrink du GEMDOS Memory Shrink MOVE L D0 SP MOVE L A5 SP MOVE W 0 SP MOVE W 74 SP M_shrink TRAP 1 LEA 12 A7 A7 Voil apr s cette op ration notre programme n utilise plus que la place m moire dont il a besoin Il ne faut pas oublier de d finir
197. statons 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 suivan
198. t droite celle du 1 0 pas de courant sur le fil 1 du courant Le microprocesseur est entour de multiples tiroirs les cases m moire et parmi les or dres qu il sait ex cuter il y a va chercher ce qu il y a dans tel tiroir ou bien va mettre a dans tel tiroir Chaque tiroir est rep r par une adresse comme chaque maison c est dire par un num ro Nous allons dire au microprocesseur va chercher ce qu il y a au num ro 24576 ajoutes y ce qu il y a au num ro 24578 et mets le r sultat au num ro 24580 On pourrait remplacer au num ro par l adresse Allumons donc les 16 lampes en cons quences cela donne 0011000000111000 0110000000000000 1101000001111000 0110000000000010 0011000111000000 0110000000000100 Une seule biarque s impose c est la merde totale Comment faire pour s y retrouver avec un programme comme a si on oublie d al lumer une seule lampe a ne marche plus et pour rep rer l erreur dans un listing pareil bonjour la merde On a donc la possibilit de marquer a non pas en binaire mais en d cimal Malheureusement la conversion n est pas commode et de toute fa on on obtient quand m me des grands chiffres visuelle ment car leur taille en tant que nombre ne change pas bien s r Ainsi la 3 me ligne donne 53368 On va donc convertir autrement en s parant notre chiffres binaire en groupe de 4 bits REMARQUE DE VOCABULAIRE Nous ne parlerons qu Anglais Toutes l
199. t s 2 puissance 23 c est dire 8388608 Nous pouvons donc avoir acc s 8388608 adresses chacune contenant non pas un octet mais un word puisque le micro processeur op re ensuite la s lection en consultant ses broches UDS et LDS Nous pouvons donc atteindre 8388608 words c est dire 16777216 octets ce qui fait bien les 16 m gas dont nous parlons dans les autres cours Le Bus de Donn es M me remarques que pr c demment Ici nous avons 16 broches DO D15 qui bien s r ne peuvent prendre que 2 va leurs savoir 0 ou 1 Le bus de donn es est donc sur 16 bits il est donc capable de v hiculer des bytes octets ou des words mots Il est possible de lire mais aussi d crire sur ce bus Il est donc accessible dans les deux sens on dit qu il est bi direc tionnel Le Bus de Control Cet ensemble de broches fournit des informa tions compl mentaires AS Adresse Strobe Echantillonnage d adresse Cette broche valide l adresse se trouvant sur le bus d adresse En clair elle indique que tout est OK R W Read write Lire crire Le bus de donn e tant accessible en lecture et en criture cette broche indique lequel des 2 tats est actif UDS LDS Ces 2 broches font parties du Bus de Control mais nous les avons d j d crites un peu plus haut DTACK Data Transfert Acknowledge R c piss de transfert de donn es lndique que le transfert des donn es est r alis Le Bus de Control comporte galement d au
200. t les traps n ont plus de secret pour vous Vous devez savoir leur passer des param tres les reprogrammer etc Vous devez m me vous rendre compte qu en suivant les fonctions du syst me d exploitation on doit pouvoir d couvrir comment se font telle et telle choses et ainsi pouvoir r crire des morceaux de routines COURS D ASM 68000 par le F roce Lapin retour au VOLUME 2 kkkxkxkxkxkxkxkxkxkxkkkkkxkkxkkkkkxkxkkxkkkkkkkxkkkkkkkkkkkkkkk xkxkkkxkk xkxkxkkk xkkkk kxkxkxk COURS D ASSEMBLEUR 68000 SUR ATARI ST par Le F roce Lapin from 44E Seconde s rie x Cours num ro 3 kkkkxkxkkkxkxkxkkkkkkkkxkkkkkkkkkkkkkxkkkkkkkkkkkkkkkkkxkkkkkkkkkkk kkkkkxkxk Avant de continuer tudier ces cours je pense qu il est grand temps pour vous d tudier toutes les instructions du 68000 Vous avez d j suffisamment de bases pour r aliser de petits programmes et surtout vous devez vous tre habitu avec le syst me qui consiste taper seulement 2 ou 3 lignes de programmes puis visualiser leur fonction avec MONST Prenez donc l ouvrage sur le 68000 que vous avez normalement ac quis et faites le tour de toutes les instructions avec cette m thode Observez bien les r sultats des op rations de d calages ASL ASR etc Il ne s agit pas ici de les conna tre par coeur mais au moins de savoir qu elles existent pour pouvoir le cas ch ant les retrouver facilement et surtout d tre
201. t par couple X et obligatoirement Y ce qui fait que bien souvent on dit par exemple il faut mettre 1 donn e dans PTSIN alors qu en fait il faut mettre un couple de donn es Le quatri me tableau c est INTOUT C est la m me chose que INT_IN sauf que c est en sortie pour les r sultats Vous vous en doutez maintenant le dernier tableau c est PTSOUT Jetons maintenant un coup d oeil sur le listing num ro 6 Un peu de r flexion et cela ne doit pas vous poser de probl me Essayez cependant de refaire ce listing avec des boucles parce qu avec le coloriage d un seul pixel c est bien sur un peu limit Juste une chose essayer de bien imaginer ce qui se passe avec les tableaux Contrl Int_in Ptsin Intout et Ptsout parce dans le chapitre suivant il va y en avoir beaucoup Bon maintenant que vous savez tracer un rectangle vous pouvez galement tracer des lignes demander la couleur d un pixel etc La fonction la plus d licate est mon avis celle qui sert pour l affichage de texte Elle permet cependant des effets assez int ressants criture avec diff rents styles Pour utiliser maintenant la ligne A reportez vous aux descriptifs donn s dans la Bible et essayez 2e remarque cependant avec le GEM et la ligne A nous abordons en quelque sorte le concept du multi utilisateur multi machines En effet le GEM utilise beaucoup la ligne A et partage donc avec lui les tableaux Or votre programme peut tr s bien tre en tra
202. tant non pas d viter ces multiples pages mais de r duire sensiblement la taille du listing sur lequel nous travaillons Deux directives vont principalement nous servir Attention ce ne sont pas des instructions ASSEMBLEUR mais des ordres interpr t s par l ASSEMBLEUR Ce sont donc dans notre cas des instructions Devpack et non pas des instructions 68000 La premi re INCBIN permet d incorporer dans le programme un fichier binaire Un fichier binaire cela peut tre une image de la digit des sprites etc ou bien un morceau de programme qui a t assembl sous forme de fichier binaire Voici un exemple avec une image listing 1 s rie 2 Tout d abord nous transf rons l adresse de l image en A6 nous sautons l en t te de celle ci pour pointer sur les couleurs qui sont mises en place avec Xbios 6 nous cherchons ensuite l adres se de l cran avec la fonction Xbios 3 puis apr s avoir saut la palette de couleurs de notre image nous transf rons cette image sur l cran Un cran fait 32000 octets Si nous transf rons long mot par long mot nous ne devons transf rer que 32000 divis par 4 c est dire 8000 long mots Comme nous utilisons une boucle DBF qui compte jusqu 0 compris la boucle s arr te quand le compteur atteint 1 il faut donc initialiser le compteur 7999 Ensuite attente d appui sur une touche et bye bye Petit exercice ducatif Une fois ce programme assembl suivez le sous MONST
203. te 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
204. tiliser 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 correspond
205. tres commandes permettant une bonne r partition des bus suivant la demande BR Bus Request demande de bus Indique qu un autre circuit demande se rendre ma tre du bus BG Bus Grant Signale que le bus va tre lib r BGACK Bus Grant Acknowledge Indique qu un autre circuit a pris la commande du bus Commande d interruptions IPL Interrupt Pending Level 3 broches de ce type IPLO0 IPL1 et IPL2 Ces broches contrairement aux autres sont actives lorsqu elles sont 0 Nous retrouverons plus tard l tat de ces broches dans le chapitre traitant de la seconde partie du SR et des interrupt chapitre 4 Commande du syst me BERR Bus error Erreur de bus Signale une erreur dans le cycle en cours d ex cution RESET Sert initialiser le 68000 Cependant lorsqu un programme ex cute l instruction RESET cette broche peut passer l tat bas 0 afin qu il y ait r initia lisation des circuits externes sans toucher au 68000 HALT Tout comme la broche RESET celle ci est disponible en entr e ou en sortie Lorsqu on l attaque en entr e le 68000 termine son cycle de bus en cours puis se bloque En sortie cette broche indique une double faute intervenue sur un bus Seul RESET peut alors d bloquer le processeur Etat du processeur 3 broches FC2 FC1 et FC0 indique dans quel tat se trouve le 68000 FC2 FC1 FCO Type de cycle 0 0 0 r serv non utilis donn es utilisateurs 0 1 0 programme utilisateur o
206. 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 DO Cela revient tout simplement faire CMP W 0 D0 Seconde chose qui vous est encore
207. u 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 no
208. ue C WORD Dcreate chemin char chemin Chemin pointe sur une cha ne termin e par 0 sp cifiant le chemin du nouveau r pertoire RETOUR 0 en cas de succ s ERROR ou le num ro d erreur appropri en cas d chec 3A Ddelete Efface un sous_r pertoire WORD Ddelete chemin char chemin Efface un r pertoire qui doit tre vide il peut toutefois comporter les fichiers sp ciaux et chemin pointe sur une cha ne termin e par z ro sp cifiant le chemin du r pertoire effacer RETOUR 0 en cas de succ s ERROR ou le num ro d erreur appropri en cas d chec 3B Dsetpath Fixe le r pertoire courant WORD Dsetpath chemin char chemin Fixe chemin une cha ne termin e par 0 comme r pertoire courant Si le chemin commence par une lettre identificatrice de disque suivie de deux points le r pertoire courant est plac sur le lecteur sp cifi Le syst me conserve un r pertoire courant pour chaque lecteur RETOUR 0 en cas de succ s ERROR ou le num ro d erreur appropri en cas d echec St 3C Fcreate Cr ation d un fichier WORD Fcreate nomfich attribs char nomfich WORD attribs Cr e un fichier nomfich et retourne son identificateur non standard d criture seule Le mot d attributs est stock dans le r pertoire les bits d attributs sont masque description PEER A a 01 fichier cr en lecture seule 02 fichier transparent au r pert
209. ue 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 talternatethelp et hop la grande recherche commence Vous faites de m
210. ue ligne ne correspond qu UNE SEULE op ration du microprocesseur alors que PRINT BONJOUR va lui en faire faire beaucoup IL est vident que notre BASIC n tant qu un traducteur m canique sa traduction a toutes les chances d tre approximative et bien qu elle soit efficace elle utilise beaucoup plus d instructions pour le microprocesseur qu il n en faut r ellement Il faut bien aussi avoir une pens e mue pour les premiers pro grammeurs du 68000 qui ont d abord fait un programme avec des 1 et des 0 programme qui ne faisait que traduire des chiffres hexad cimaux en binaires avant de les transmettre la machine Il ont ensuite r alis en hexad cimal des programmes traduisant des ins tructions du genre MOVE ADD etc en binaire Il suffisait ensuite de regrouper plusieurs instructions de ce type sous une autre appellation incomprise directement par la ma chine et de faire les traducteurs correspondants et cr er ainsi les langages volu s PASCAL C BASIC Nous allons donc nous int resser la programmation ou plut t la transmission d ordre au 68000 Motorola Combien d ordres peut il ex cuter Uniquement 56 avec des variantes quand m me mais a fait pas beaucoup Des recherches un niveau bien trop haut pour nous on en effet montr es qu il tait plus rapide d avoir peu d instructions faisant peu de chose chacune et donc ex cuta bles rapidement les unes apr s les autres
211. ue soit le langage utilis dans cette documentation Dans 99 des cas ce sera le C Pour ma part mes connaissances en C sont r duites et pourtant une grande partie des documents GEM avec lesquels je travaille fait r f rence ce langage Surtout ne vous contentez pas des ouvrages traitant du GEM en assembleur car vous serez bien vite d go t Idem pour la ligne A les param tres n cessaires ne d pendent pas du langage Un autre avantage tr s important surtout pour le GEM concerne les formats de donn es Ayant la chance de pouvoir travailler sur des Macs de nombreuses choses y rendent la manipulation des pro grammes plus ais e que sur ST Par exemple on charge un logiciel de dessin on fait un petit gribouillis ensuite on charge n importe quel traitement de texte et hop on y colle notre gribouillis Sur ST il y a 99 de chance que le format de l un ne soit pas reconnu par l autre Si on jette un coup d oeil vers le monde PC on se rend compte qu il n existe pas de format normalis pour ce type de machine et que c est l anarchie ce niveau De tels formats normalis s existent sur Mac ils sont respect s et les rares softs ne se pliant pas cette norme sont vou s un formatage rapide de la disquette Le comble c est que sur ST de telles normes de formats existent mais elles ne sont pas respect es En fait l utilisation de la ligne A et surtout celle du GEM doivent nous amener une r flexion plus globa
212. un programme tout fait ordinaire qui a t charg en m moire partir de la disquette et qui peut tre plac n importe o dans cette m moire Une premi re solution consisterait toujours placer ce programme au m me endroit MOTOROLA aurait ainsi pu concevoir le 68000 en pr cisant Les programmes de mise au point qui seront appel s gr ce la mise 1 du bit T devront commencer l adresse 5000 Simple mais tr s g nant car il devient pratiquement impossible de faire r sider plusieurs programmes en m moire simultan ment sans courir le risque qu ils se marchent sur les pieds Il y a pourtant une autre solution un peu plus tordue mais en re vanche beaucoup plus souple qui consiste charger le programme de mise au point n importe o en m moire de noter l adresse la quelle il se trouve et de noter cette adresse un endroit pr cis Lorsque le 68000 trouvera le bit T 1 il foncera cet en droit pr vu l avance par MOTOROLA il y trouvera non pas la routine mais un long mot adresse de cette routine laquelle il n aura plus qu se rendre Cet endroit pr cis o sera stock l adresse de la routine ex cuter lorsque le bit T sera trouv 1 c est un endroit qui se situe dans le premier kilo de m moire donc dans les 1024 premiers bytes En l occurrence pour le mode trace il s agit de l adresse 24 R sumons MONST se charge en m moire C est un programme complet dont certain
213. un chemin n est pas limit e par le sys t me C est l application de fournir assez de place pour le tampon 128 octets semblent suffisants pour 8 ou 9 sous r per toires RE em tn en Eu ln se no em E ee em em md al E E E E E 48 Malloc Demande d allocation m moire LONG Malloc taille LONG taille Si taille est 1L FFFFFFFF la fonction retourne la taille du plus grand bloc libre du syst me Autrement si taille est diff rent de 1L la fonction essaie d allouer taille octets pour le programme en cours La fonction retourne un pointeur sur le d but du bloc allou si tout s est bien pass ou NULL s il n exis tait pas de bloc assez grand pour satisfaire la requ te REMARQUE Un programme ne peut avoir un instant donn plus de 20 blocs allou s par Malloc D passer cette limite peut d semparer le GEMDOS Il est cependant possible de faire le nombre de Malloc que l on veut condition de les faire suivre par l appel de la fonction Mfree 20 tant le nombre maximum de fragments qu un programme peut g n rer 49 Mfree Lib ration de m moire WORD Mfree adbloc LONG adbloc Lib re le bloc m moire commen ant adbloc Le bloc doit tre un de ceux allou s par Malloci RETOUR 0 si la lib ration s est bien Effectu e ERROR ou le num ro d erreur appropri sinon 4A Mshrink R tr cit la taille d un bloc allou WORD Mshrink 0 bloc nouvtail WORD 0 LONG bloc LONG no
214. ur la pile MOVE W 8 D0 MOVE W 4 D1 ADD W D0 D1 MOVE L SP D0 RTS Assemblez puis suivez le d roulement sous MONST en tudiant bien le d roulement Vous voyez bien que le BSR sauve l adresse de re tour sur la pile puis que D0 et mis par dessus pour tre ensuite r cup r Ensuite c est l adresse de retour qui est reprise et le programme remonte Maintenant provoquons une erreur une toute petite erreur mais qui sera fatale notre programme Au lieu de r cup rer D0 par un MOVE L SP D0 commettons une faute de frappe et tapons la place MOVE W SP D0 Assemblez et suivez pas pas Au moment de la sauvegarde de DO ce sont bien 4 octets qui vont tre plac s sur la pile modifiant celle ci d autant Malheureusement la r cup ration ne va re mo difier cette pile que de 2 octets Au moment o l instruction RTS va essayer de r cup rer l adresse de retour le pointeur de pile sera faux de 2 octets par rapport l endroit o se trouve r elle ment cette adresse de retour et celui ci va se faire une adresse fausse En conclusion prudence et rigueur Nous venons donc de voir que la pile tait utilis e par le 68000 pour certaines instructions et qu elle tait bien commode comme sauvegarde Il est aussi possible de l utiliser pour transmettre des donn es c est ce que nous allons voir pour conclure ce chapitre Probl me Notre programme principal utilise les registres A0 A6 et D0 D6 Il va a
215. urn from exception Je vous rappelle qu il faut TOUT lire en Anglais et pas se contenter de lire l abr viation dont la signification est souvent assez vasive Voici le programme en entier MOVE L MESSAGE SP toujours sympa de se pr senter MOVE W 9 SP TRAP 1 appel GEMDOS ADDQ L 6 SP Fixer les vecteur d exception MOVE L ROUGE SP adresse routine MOVE W 35 SP num ro de vecteur du trap 3 MOVE W 5 SP fonction Setexec TRAP 13 du bios ADDQ L 8 SP MOVE L VERT SP adresse routine MOVE W 36 SP num ro de vecteur du trap 4 MOVE W 5 SP fonction Setexec TRAP 13 du bios ADDQ L 8 SP Les routines sont donc maintenant accessibles par le trap 3 et par le trap 4 BSR TOUCHE TRAP 3 BSR TOUCHE TRAP 4 BSR TOUCHE TRAP 3 BSR TOUCHE MOVE W 0 SP TRAP 1 LR EC RE ER ER ER CRE PE RE ER E EE ROUGE MOVE W 700 FF8240 RTE VERT MOVE W 070 FF8240 RTE oo E E NE E ee ed ut TOUCHE MOVE W 7 SP TRAP 1 ADDQ L 2 SP RTS NE En ne a a a aj h a a a aa aa a a Da O aa AS aal a SECTION DATA MESSAGE DC B 27 E LES TRAPS 0 Facile n est ce pas Et bien maintenant que vous savez mettre vos propres routines en TRAP et que vous savez galement passer des param tres une sub routine il ne vous reste plus qu faire la m me chose J estime que vous tes assez grand pour le faire tout seul et c est pour cette raison que nous n allons pas le faire ic
216. urquoi y a t il L apr s les MOVE et le ADD Nous verrons cela dans quelques minutes Pour le moment assemblons en maintenant appuy ALTERNATE puis en appuyant sur A Normalement tout s est bien pass ou alors c est que vous n avez pas scrupuleusement recopi ce programme Maintenant d buggons notre programme en maintenant appuy ALTERNATE et en appuyant sur D Hop nous nous retrouvons dans MONST qui tant appel partir de GENST a automatiquement charg notre programme Jetons tout d abord un coup d oeil ce ramassis de chiffre En haut nous retrouvons nos registres de donn es D0 D7 ainsi que nos registres d adresses A0 A7 avec en prime A7 Sous les re gistres de donn es nous voyons SR et en dessous PC Nous pouvons remarquer que PC nous montre une adresse et la premi re ligne de notre programme Le PC indique donc ce qui va tre ex cut La fen tre du dessous num ro 2 montre notre programme Sur la gauche de cette fen tre nous voyons les adresses Symboliquement nous pouvons dire que la partie droite de cette fen tre montre nos instructions dans le tube et que les chiffres de gauche nous indi que l endroit l adresse par rapport au d but du tube La fen tre de droite la 3 donne en fait la m me chose que la 2 mais avec la vision du 68000 Nous avions vu dans le cours 2 que pour la machine notre suite d ordres n tait qu une suite de chiffres Lorsque nous avons assembl l as
217. us 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
218. us en voyez tout de suite l inconv nient des macros d finies avec Profimat sont inutilisables sous DEVPACK etc Voyons la d finitions sous DEVPACK ceux ne poss dant pas cet assembleur ou d sirant d finir des macros avec un autre assembleur devront se reporter au mode d emploi Le principe reste cependant le m me PRINT MACRO ADR_TXT MOVE L 1 SP MOVE W 9 SP TRAP 1 ADDQ L 6 SP ENDM Voil notre macro d finie Tout d abord son nom est plac tout gauche Ensuite on place la liste des param tres qu elle doit recevoir apr s le mot MACRO Dans le cas pr sent je l ai appel e ADR_TXT Pour la macro le fait que ce nom soit le premier apr s le mot MACRO fait qu il est le num ro 1 Il sera donc d sign par 1 Ensuite vient le corps de mon programme qui utilise 1 comme si c tait l adresse de ma phrase La d finition de la macro est termin e par ENDM END MACRO La d finition de la macro est plac e au d but du programme Parce que cette d finition contient MACRO et ENDM l assembleur sait tr s bien qu il ne faut pas l assembler Par contre lorsqu il rencontrera PRINT MESSAGE il saura qu il s agit d une macro et ira recopier cette macro la place de PRINT Voici un exemple recopier ici la d finition de la macro print VOID_INP2 MACRO MOVE W 7 SP TRAP 1 ADDQ L 2 SP ENDM END_PRG MACRO MOVE W 0 SP TRAP 1 ENDM PRINT MESSAGE VOID_INP2 PRINT MESSAGE2 VOID_INP2
219. usions nous allons nous pencher sur celui des MACROS Ce cheminement peut vous para tre trange dans la mesure o nous n abordons pas tout de suite la ligne _A par ex C est tout simplement parce que ces notions vont tre abondamment reprises dans les chapitres suivants que je me suis d cid les aborder maintenant Pour expliquer ce qu est une MACRO nous allons partir d un exemple simple celui de l affichage de BONJOUR l cran Nous avons d j vu depuis bien longtemps comment le faire avec la fonction Gemdos num ro 9 MOVE L MESSAGE SP MOVE W 9 SP TRAP 1 ADDQ L 6 SP MESSAGE DC B BONJOUR 0 Le probl me si on peut appeler a un probl me c est qu il faut taper 4 lignes d instructions pour r aliser l op ration Nous allons donc cr er une grosse instruction qui va les englober toutes les 4 Micro voulant dire petit et macro voulant dire gros nous d signerons cette grosse instruction par le nom de macro instruction ou plus couramment macro Il va donc falloir d finir en premier lieu la macro Dans cette exemple nous l appellerons PRINT original non Il faudra lui passer comme param tre l adresse de notre phrase afficher Comment d finir cette macro L se pose un probl me impossible r soudre la m thode de d finition d une macro d pend de l assembleur En effet les signes et conventions qui permettent de d finir une macro sont propres votre assembleur Vo
220. uter l adresse de retour pour trucmuche et celle de machin total 128 octets alors que nous n avions pr vu qu une pile de 124 octets Pour que ce programme marche sans probl me il faut donc mettre au minimum une pile de 128 octets Faites tr s attention a car si nous avions mis une pile de 124 octets le programme ne se serait pas plant car il n y aurait pas eu crasement du RTS mais il y aurait eu crasement de BIDULE et je suis certain que vous auriez cherch bien longtemps en vous disant mais qu est ce qui peut bien craser BIDULE surtout que cet crasement survient un moment o justement on n utilise pas BIDULE Gardez donc toujours pr sent l esprit le principe du tube m moire sans oublier qu il est plein d instructions de contenus de variables et que rien n emp che de les craser Encore une petite remarque sur le Start Il est tout fait possible de tester D0 en retour du Mshrink Si celui ci est n gatif c est qu il y a eu erreur Si vous savez que syst mati quement vous mettez le label BYE _ BYE en face du GEMDOS 0 qui ter mine votre programme vous pouvez rajouter la fin du start TST W DO BMI BYE_BYE Une derni re pr cision sur les inclusions Il existe d autres moyens de r aliser de telles choses par exemple d assembler les morceaux puis de les lier avec un LINKER Cette solution est int ressante lorsque les programmes commencent prendre des pro portions gigantesque
221. uve ce bit 0 il passe la prochaine instruction Par contre si ce bit est 1 le 68000 laisse de c t temporairement le programme principal pour se d tourner vers une routine un bout de pro gramme qui affichera par exemple la valeur de tous les registres DO D7 et A0 A7 Imaginons qu il faille appuyer sur une touche pour sortir de cette routine Nous avons donc tout le temps de consulter ces valeurs Nous appuyons sur une touche fin de notre routine le 68000 retourne donc au programme principal ex cute l instruction suivante teste le bit T le trouve nou veau 1 se branche donc sur notre routine etc Nous avons donc un mode pas pas Or vous avez d j utilis cette parti cularit en visualisant le d roulement des instructions avec MONST Tapez le programme suivant MOVE W 23 D0 MOVE W 15 D1 Assemblez et faites Alternate D pour passer sous MONST Appuyez une fois sur Control Z et observez le Status Register MONST a affich T indiquant ainsi que ce bit est 1 Nous sommes donc bien en mode Trace Quittez le programme par Control C Nous arrivons maintenant nous poser une question Le 68000 a trouv le bit T 1 D accord il sait o est son Status register et il sait que le bit T c est le 15 me Mais apr s Le 68000 s est d tourn vers une routine qui dans le cas pr sent se trouve tre une partie de MONST Mais comment a t il trouv cette routine MONST est en effet
222. uvtail R tr cit la taille d un bloc m moire allou bloc pointe sur la page de base d un programme ou sur un bloc de m moire allou par Malloc nouvtail est la nouvelle taille du bloc Le premier argument du bloc doit tre un mot nul RETOUR 0 si l ajustement de taille t r ussi EIMBA si l adresse du bloc m moire tait invalide EGSBF si la nouvelle taille demand e tait Erron e REMARQUE un bloc ne peut tre que r tr ci la nouvelle taille du bloc doit forc ment tre inf rieure la pr c dente N D T Le compilateur C Alcyon rajoute lors de la compilation le premier param tre d appel 0 Il ne faut donc pas le mettre dans l appel de la fonction si l on se sert de ce compilateur Appel de la fonction avec le C Alcyon Mshrink bloc nouvtail Re EEE E A E N A I E EE E EE E E P E E E E E E 4B Pexec Charge Ex cute un programme WORD Pexec mode ptrl ptr2 ptr3 WORD mode char ptrl char ptr2 char ptr3 Cette fonction permet diff rentes utilisations selon le drapeau mode ptrli ptr2 ptr3 L FESSES RE RaT F SEE 0 charge et le fichier le jeu de la cha ne d ex cute ex cuter commandes environnement le e eia a EE rar E 3 charge le fichier le jeu de la cha ne d sans lancer charger commandes environnement JARs PRE ESS LES 4 ex cute l adr de la inutilis inutilis uniquement page de base l
223. votre choix Le vocabulaire informatique est compos en tr s grande partie d abr viations Or ce sont des abr viations de termes anglais Il est donc imp ratif que l ouvrage sur le 68000 donne la signifi cation de chacune des abr viations signification en Anglais et traduction en Fran ais Attention de tr s nombreux ouvrages ne donnent que la traduction or autant il est difficile de se souve nir de la signification de termes tels que DATCK BG BGACK MMU ou MFP autant leurs fonctions et clairs et surtout facilement m morisable si on conna t la signification de ces abr viations dans la langue original la traduction coulant de source Pour l ouvrage relatif au ST le must consiste se procurer chez ATARI la DOCumentation officielle pour les D veloppeurs Sinon la Bible ou le Livre du d veloppeur chez Micro Application m me s il y subsiste quelques erreurs est un excellent palliatif A part cela n achetez aucun autre ouvrage le livre du GEM Graphismes en ASM cours d ASM etc ne seront que des gouffres pour votre porte monnaie et ne vous apporteront rien Si apr s ces achats il vous reste quelque argent je ne peux que vous conseiller tr s fortement l achat d une calculatrice poss dant les op rations logiques AND OR XOR et les conversions entre bases utilis es en informatique binaire hexad cimal Je vous conseille la Texas Instrument TI134 C est une calculatrice solaire mais qui
224. xkkkk xkkk kxk kkkxk kkkxkk kkk xkkkkkxkxxkxk INCLUDE B START S MOVE L MESSAGE SP message de pr sentation MOVE W 9 SP TRAP 1 ADDQ L 6 SP TOUCHE MOVE W 7 SP attente appui sur une touche TRAP 1 ADDQ L 2 SP SWAP DO pour avoir le scan code CMP W 1 D0 escape BEQ FIN oui donc bye bye CMP W 3B D0 par rapport F1 BLO TOUCHE en dessous donc pas valable CMP W 44 D0 par rapport F10 BHI TOUCHE en dessus donc pas valable La touche est valable LEA TABLEAU AO SUB W 3B D0 pour avoir un chiffre de 0 9 x MULU W 2 D0 ATTENTION pourquoi l toile d but MOVE W O A0 D0 W D1 MOVE W D1 SP MOVE W 2 SP TRAP 1 ADDQ L 6 SP BRA TOUCHE FIN CLR W SP TRAP 1 Rs ne ne ga aag a ak aip a Saa on a a oem a mt 4e A ah ah G ai ja a a m ne SECTION DATA MESSAGE DC B 27 E TAPEZ SUR UNE TOUCHE DE FONCTION 13 10 DC B ESCAPE POUR SORTIR 13 10 0 EVEN TABLEAU DC W MAMIE NTM RENTE ETY TTU Te TETT OM TD SECTION BSS DS L 256 PILE DS L 1 END COURS D ASM 68000 par le F roce Lapin retour au VOLUME 2 kkxkxkxkkkxkxkxkkkkxkkkxkkxkkxkkkkkkkkk xkxkkkkkxkxkkkxkxkkkkkxkxkxkkkkkxkkxkkkxkxkkkk kkkkkk kxxkxxkxk x COURS D ASSEMBLEUR 68000 SUR ATARI ST x par Le F roce Lapin from 44E Seconde s rie Listing num ro 4 Cours 6 kkkxkxkxkxkxkxkkxkkkkkkxkxkkkkkkxkkkkkkxkxkkxk xkxkxk xkxkkxk xkkxkkkkxkkkkkkxkkk xkkkk k
225. xkxkxkkxkxkxkkxkkxkkxkkxxk kxxk Les commandes du VT52 sont appel es en affichant le code de la touche Escape code ASCII 27 en d cimal suivi d un ou plusieurs param tres Exemple d utilisation avec l affichage d une ligne par GEMDOS 9 fonction Cconws MOVE L MESSAGE SP MOVE W 9 SP TRAP 1 ADDQ L 6 SP MESSAGE DC B 27 E 27 p 27 Y 42 42 Salut 27 q 0 Efface l cran passe l criture en inverse vid o place le curseur sur la ligne 10 colonne 10 affiche Salut et repasse en vid o normale Escape A Curseur vers le haut s arr te sur le bord sup rieur Escape B Curseur vers le bas s arr te sur le bord inf rieur Escape C Curseur vers la droite s arr te sur le bord droit Escape D Curseur vers la gauche s arr te sur le bord gauche Escape E Efface l cran Escape H Place le curseur dans le coin sup rieur gauche Escape I Curseur vers le haut scrolling sur le bord sup rieur Escape J Vide l cran partir de la position du curseur Escape K Efface la ligne partir de la position du curseur Escape L Ins re une ligne vide partir de la position du curseur Escape M Efface une ligne dans l emplacement du curseur le reste est ramen vers le haut Escape Y suivi de 2 nombres Place le curseur une certaine position Le premier nombre indique la ligne le second la colonne Attention il faut ajouter 32 ces nombres pour la commande Escape b plus un nombre de 0 15 Choisit ce nom
226. xx INCLUDE B START S MOVE L MESSAGE SP coucou et efface cran MOVE W 9 SP TRAP 1 ADDQ L 6 SP DC W A000 initialisation ligne A A l aide de A0 retour de la fonction A000 nous obtenons l adresse des diff rents tableaux 4 A0 donne l adresse du tableau Contrl 8 A0 donne l adresse du tableau Int_in 12 A0 donne l adresse du tableau Ptsin 16 A0 donne l adresse du tableau Intout 20 A0 donne l adresse du tableau Ptsout MOVE L 8 AO0 A3 sauve adresse de Int_in MOVE L 12 A0 A4 sauve adresse de Ptsin On passe les coordonn es du point dont on veut la couleur On passe bien sur ces coordonn es dans Ptsin MOVE W 100 A4 MOVE W 122 2 A4 DC W A002 demande couleur d un pixel La fonction A002 renvoie la couleur du pixel en D0 on recolorie un autre pixel avec la couleur du premier MOVE W 100 A4 MOVE W 123 A4 MOVE W DO A3 couleur bien s r dans INT_IN DC W A001 coloriage d un pixel MOVE W 7 SP attente appui touche TRAP 1 ADDQ L 4 SP MOVE W 0 SP et bye bye TRAP 1 HNE mati Pan Em mm mm en ee ee me meme mem mt mn P SECTION DATA MESSAGE DC B Coloriage de pixel avec ligne A 0 SECTION BSS DS L 100 PILE DS L 1 END
Download Pdf Manuals
Related Search
Related Contents
Anleitung für Benutzer XX.Y Dynamic 20 User's Manual NEC PX-61XR3A User's Manual Kodak C360 Digital Camera User Manual Vizio/3 Murale Verre Clean air CD/DVD Player Basic& Comfortable Kohler COMMAND20=25HP User's Manual Copyright © All rights reserved.
Failed to retrieve file