< < < D E F I N I T I O N D U B O O T S T R A P 6 8 0 0 0 : < < < NOTATIONS : <%% '@@@'=$0100 : DESIGNE L'ADRESSE EN 'RAM', <%% '%%%'=$0296 : DESIGNE L'ADRESSE EN 'PROM'. < < ETAT EQU $3F801 < REGISTRE-OCTET D'ETAT DU CONTROLEUR < '365', PERMETTANT EN PARTICULIER DE < SAVOIR SI UNE NOUVELLE COMMANDE EST < RECEVABLE, PAR TEST DU BIT : FREE EQU 2 < BIT DU REGISTRE D'ETAT DU '365' INDI- < QUANT QU'IL PEUT RECEVOIR UNE NOUVELLE < COMMANDE... ADFOR EQU $3FA01 < REGISTRE-OCTET DONNANT : < BITS 4,3,2 : POIDS FORTS DES ADRESSES < ENVOYEES PAR LE SOLAR A < L'EXCEPTION DU POIDS LE PLUS < FORT ; < BIT 5 : SENS DE L'OPERATION : < 0 : SOLAR --> 68000, < 1 : 68000 --> SOLAR. < BIT 6 : 1=PAS DE DEMANDE DU SOLAR, < 0=DEMANDE (REMIS A 1 PAR LA < LECTURE DES DONNEES). XFWREG EQU $04 < FONCTION D'ECRITURE DES REGISTRES DE < COMMANDE, XFRREG EQU $14 < FONCTION DE LECTURE DES REGISTRES DE < COMMANDE, XFPRO EQU $06 < FONCTION DE DEFINITION D'UN SOUS- < PROGRAMME SPECIFIQUE, XFRUN EQU $05 < FONCTION DE LANCEMENT D'UN SOUS-PRO- < GRAMME SPECIFIQUE. BLOOP EQU $04 < BIT INDIQUANT UNE DEMANDE EN ATTENTE... ADFAIB EQU $3FA20 < 16 BITS DE POIDS FAIBLES DE L'ADRESSE < ENVOYEE PAR LE SOLAR. DONNEE EQU $3FA40 < REGISTRE DE DONNEES SUR 16 BITS. REGCOM EQU $30000 < CONSTANTE DE TRANSLATION D'ACCES AUX < REGISTRES DE COMMANDE DANS LA MEMOIRE < DU 68000. MASKF EQU $7C < AFIN DE CLEARER LES BITS 7, 1 ET 0 DU < REGISTRE DE FONCTION... ADPROM EQU $ < ADRESSE D'IMPLANTATION EN 'PROM' DU < BOOTSTRAP... < 'ADPROM' EST REPRESENTEE PAR '%'. < < < D O N N E E S : < < DC.B 0,0 < PATCH... %%%000 * 00 00 TINIT EQU $ < TABLE D'INITIALISATION DES REGISTRES : DC.L 0 < 'D2', %%%002 * 00 00 00 00 DC.L 0 < 'D3', %%%006 * 00 00 00 00 DC.L REGCOM < 'D4', %%%00A * 00 03 00 00 DC.L ADFOR < 'A1', %%%00E * 00 03 FA 01 DC.L ADFAIB < 'A2', %%%012 * 00 03 FA 20 DC.L DONNEE < 'A3', %%%016 * 00 03 FA 40 DC.L ETAT < 'A4', %%%01A * 00 03 F8 01 DC.L LMODUL < 'A5' %%%01E * 00 @@ @0 8C /LMODUL SUR 32 BITS. DC.L 0 < 'A6'. %%%022 * 00 00 00 00 < < < S E Q U E N C E D ' I N I T I A L I S A T I O N : < < INIT EQU $ < LEA.L TINIT,A0 < INITIALISATION DE 'A0' SUR LA LISTE < D'INITIALISATION DES AUTRES REGISTRES... %%%026 * 41 F9 00 @@ @0 02 /TINIT SUR 32 BITS. MOVEM.L (A0), < INITIALISATION DES REGISTRES D2,D3,D4, < DE DONNEES, A1,A2,A3,A4, < PUIS A5,A6 < D'ADRESSE... %%%02C * 4C D8 7E 1C < < < B O U C L E D E S Y N C H R O N I S A T I O N < S U R L E S O L A R : < < LOOP EQU $ < MOVE.B (A1),D2 < RECUPERATION DE LA FONCTION COURANTE ; < A NOTER QUE CELLE-CI PEUT ETRE INEXIS- < TANTE, OU BIEN INVALIDE (PAS DE FONC- < TION COURANTE). < A T T E N T I O N : ON NE MODIFIE AINSI < QU'UN OCTET DE 'D2' ; ON NE REINITIALISE < JAMAIS LES BITS QUI LE PRECEDE (MIS A < 00 00 00 INITIALEMENT). %%%030 * 14 11 ANDI.B #MASKF,D2 < ON NE CONSERVE QUE LES BITS UTILES AU < CAS OU DES BITS SERAIENT MONTES... %%%032 * 02 02 00 7C MOVE.L (A5,D2.L),A0 < RECUPERATION DANS 'A0' DE L'ADRESSE DE < TRAITEMENT DE LA FONCTION COURANTE < DONT LA VALEUR EST DANS 'D2' A UN DECA- < LAGE IMPLICITE PRES... %%%036 * 20 75 28 00 JMP (A0) < VERS LE TRAITEMENT DE LA FONCTION... %%%03A * 4E D0 < < < Z O N E D E P A T C H : < < DC.B 0,0 < PATCH... %%%03C * 00 00 DC.B 0,0 < PATCH... %%%03E * 00 00 < < < E C R I T U R E D E S R E G I S T R E S D E C O N T R O L E : < < EFWREG EQU $ < < < RECHERCHE DE LA PARTIE FAIBLE < DU REGISTRE A POSITIONNER : < MOVE.W (A2),D3 < ACCES AUX POIDS FAIBLES DE L'ADRESSE < DU REGISTRE, %%%040 * 36 12 MOVE.L D3,A6 < ON PROCEDE PAR L'INTERMEDIAIRE DE 'D3' < POUR POSITIONNER 'A6' CAR UN MOVE.W < AVEC COMME DESTINATION UN REGISTRE < D'ADRESSE, ETEND LE BIT DE SIGNE DES < BITS DE POIDS FAIBLES POUR POSITIONNER < LES 16 BITS DE POIDS FORTS DU REGISTRE < D'ADRESSE !!! %%%042 * 2C 43 < < BOUCLE D'ATTENTE DU '365' : < (QUELQUE SOIT LE REGISTRE < QUE L'ON VA MODIFIER, MEME < CEUX QUI N'ONT RIEN A VOIR < AVEC LE '365' -'LUT'- ON < ATTEND QU'IL SOIT EN MESURE < DE RECEVOIR UNE NOUVELLE < COMMANDE...) < LOWREG EQU $ < MOVE.B (A4),D3 < ACCES AU REGISTRE D'ETAT DU '365' : %%%044 * 16 14 BTST #FREE,D3 < ALORS PEUT-IL RECEVOIR UNE NOUVELLE < COMMANDE (SI OUI : FREE=0, ET Z=1) ??? %%%046 * 08 03 00 02 BNE LOWREG < ET BIEN NON (Z=0 : RESULTAT NON NUL...), < ON ATTEND... %%%04A * 66 F8 /LOWREG-$-2 < < ET OUI, LE '365' EST LIBRE : < MOVE.W (A3),(A6,D4) < ET ENFIN ECRITURE DE LA DONNEE ACCEDEE < PAR 'A3' DANS LE REGISTRE DONT L'ADRES- < EST DANS 'A6' TRANSLATEE DE 'D4'... %%%04C * 3D 93 48 00 BRA LOOP < VERS LA DEMANDE SUIVANTE... %%%050 * 60 DE /LOOP-$-2 SUR 8 BITS. < < < L E C T U R E D E S R E G I S T R E S D E C O N T R O L E : < < EFRREG EQU $ < < < RECHERCHE DE LA PARTIE FAIBLE < DU REGISTRE A POSITIONNER : < MOVE.W (A2),D3 < ACCES AUX POIDS FAIBLES DE L'ADRESSE < DU REGISTRE, %%%052 * 36 12 MOVE.L D3,A6 < ON PROCEDE PAR L'INTERMEDIAIRE DE 'D3' < POUR POSITIONNER 'A6' CAR UN MOVE.W < AVEC COMME DESTINATION UN REGISTRE < D'ADRESSE, ETEND LE BIT DE SIGNE DES < BITS DE POIDS FAIBLES POUR POSITIONNER < LES 16 BITS DE POIDS FORTS DU REGISTRE < D'ADRESSE !!! %%%054 * 2C 43 < < BOUCLE D'ATTENTE DU '365' : < (QUELQUE SOIT LE REGISTRE < QUE L'ON VA MODIFIER, MEME < CEUX QUI N'ONT RIEN A VOIR < AVEC LE '365' -'LUT'- ON < ATTEND QU'IL SOIT EN MESURE < DE RECEVOIR UNE NOUVELLE < COMMANDE...) < LOWREG EQU $ < MOVE.B (A4),D3 < ACCES AU REGISTRE D'ETAT DU '365' : %%%056 * 16 14 BTST #FREE,D3 < ALORS PEUT-IL RECEVOIR UNE NOUVELLE < COMMANDE (SI OUI : FREE=0, ET Z=1) ??? %%%058 * 08 03 00 02 BNE LOWREG < ET BIEN NON (Z=0 : RESULTAT NON NUL...), < ON ATTEND... %%%05C * 66 F8 /LOWREG-$-2 < < ET OUI, LE '365' EST LIBRE : < MOVE.W (A6,D4),(A3) < ET ENFIN LECTURE DE LA DONNEE DONT < L'ADRESSE EST DANS 'A6' TRANSLATEE DE < 'D4', DANS LE REGISTREE 'A3'... %%%05E * 36 B6 48 00 BRA LOOP < VERS LA DEMANDE SUIVANTE... %%%062 * 60 CC /LOOP-$-2 SUR 8 BITS. < < < Z O N E D E P A T C H : < < DC.B 0,0 < PATCH... %%%064 * 00 00 DC.B 0,0 < PATCH... %%%066 * 00 00 DC.B 0,0 < PATCH... %%%068 * 00 00 DC.B 0,0 < PATCH... %%%06A * 00 00 DC.B 0,0 < PATCH... %%%06C * 00 00 DC.B 0,0 < PATCH... %%%06E * 00 00 DC.B 0,0 < PATCH... %%%070 * 00 00 < < < I M P L A N T A T I O N D E P R O G R A M M E S < S P E C I F I Q U E S : < < EFPRO EQU $ < MOVE.W (A2),D3 < ACCES AUX POIDS FAIBLES DE L'ADRESSE, < QUI EST L'ADRESSE OU LE RANGER, %%%072 * 36 12 MOVE.L D3,A6 < INITIALISATION DE 'A6' SUR 32 BITS... %%%074 * 2C 43 MOVE.W (A3),(A6) < ACCES AU MOT COURANT DU SOUS-PROGRAMME, < ET RANGEMENT DANS LA MEMOIRE... < ET BIEN SUR DEBLOCAGE DU SOLAR... %%%076 * 3C 93 BRA LOOP < VERS LA DEMANDE SUIVANTE... %%%078 * 60 B6 /LOOP-$-2 SUR 8 BITS. < < < E X E C U T I O N D ' U N S O U S - P R O G R A M M E < S P E C I F I Q U E D ' A D R E S S E D O N N E E < P A R L E S P O I D S F A I B L E S ( A 2 ) : < < EFRUN EQU $ < MOVE.W (A2),D3 < MISE EN PLACE DE L'ADRESSE DU SOUS-PRO < GRAMME SPECIFIQUE. %%%07A * 36 12 MOVE.L D3,A6 < ET MISE DANS UN REGISTRE ADRESSE 'A6'. %%%07C * 2C 43 MOVE.W (A3),D3 < DEBLOCAGE DU SOLAR... %%%07E * 36 13 JSR (A6) < ET EXECUTION... %%%080 * 4E 96 BRA LOOP < ET ENFIN RETOUR A LA BOUCLE D'ATTENTE... %%%082 * 60 AC /LOOP-$-2 SUR 8 BITS. < < < F O N C T I O N N O N R E C O N N U E : < < EFINEX EQU $ < MOVE.W (A3),D3 < OPERATION VIDE, MAIS DEBLOQUANT LE < SOLAR... %%%084 * 36 13 BRA LOOP < ET VERS LA DEMANDE SUIVANTE... %%%086 * 60 A8 /LOOP-$-2 SUR 8 BITS. < < < P A S D E F O N C T I O N C O U R A N T E : < < EFABS EQU LOOP < (OU $ SI NECESSAIRE...) NOP < PATCH... %%%088 * 4E 71 BRA LOOP < VERS LA BOUCLE D'ATTENTE... %%%08A * 60 A4 /LOOP-$-2 SUR 8 BITS. < < < L I S T E D E S F O N C T I O N S : < < < FORMAT DES FONCTIONS : < < BIT 7 TOUJOURS 0, < BIT 6 1=PAS DE FONCTION COURANTE, < BITS 5-2 FONCTION COURANTE (SI BIT6=1), < BITS 1-0 TOUJOURS 0. < < LES CODES DE FONCTION DONNES < CI-DESSOUS SONT DONC A PRENDRE < MULTIPLIE PAR 4 (DECALAGE IM- < PLICITE...). < < LMODUL EQU $ < LISTE DES MODULES DE TRAITEMENT DES < FONCTIONS. DC.L EFINEX < FONCTION 00, %%%08C * 00 @@ @0 84 /EFINEX SUR 32 BITS. DC.L EFINEX < FONCTION 01, %%%090 * 00 @@ @0 84 /EFINEX SUR 32 BITS. DC.L EFINEX < FONCTION 02, %%%094 * 00 @@ @0 84 /EFINEX SUR 32 BITS. DC.L EFINEX < FONCTION 03, %%%098 * 00 @@ @0 84 /EFINEX SUR 32 BITS. DC.L EFWREG < FONCTION 04 ('XFWREG'), %%%09C * 00 @@ @0 40 /EFWREG SUR 32 BITS. DC.L EFRUN < FONCTION 05 ('XFRUN'), %%%0A0 * 00 @@ @0 7A /EFRUN SUR 32 BITS. DC.L EFPRO < FONCTION 06 ('XFPRO'), %%%0A4 * 00 @@ @0 72 /EFPRO SUR 32 BITS. DC.L EFINEX < FONCTION 07, %%%0A8 * 00 @@ @0 84 /EFINEX SUR 32 BITS. DC.L EFINEX < FONCTION 08, %%%0AC * 00 @@ @0 84 /EFINEX SUR 32 BITS. DC.L EFINEX < FONCTION 09, %%%0B0 * 00 @@ @0 84 /EFINEX SUR 32 BITS. DC.L EFINEX < FONCTION 0A, %%%0B4 * 00 @@ @0 84 /EFINEX SUR 32 BITS. DC.L EFINEX < FONCTION 0B, %%%0B8 * 00 @@ @0 84 /EFINEX SUR 32 BITS. DC.L EFINEX < FONCTION 0C, %%%0BC * 00 @@ @0 84 /EFINEX SUR 32 BITS. DC.L EFINEX < FONCTION 0D, %%%0C0 * 00 @@ @0 84 /EFINEX SUR 32 BITS. DC.L EFINEX < FONCTION 0E, %%%0C4 * 00 @@ @0 84 /EFINEX SUR 32 BITS. DC.L EFINEX < FONCTION 0F, %%%0C8 * 00 @@ @0 84 /EFINEX SUR 32 BITS. DC.L EFABS < FONCTION 10, %%%0CC * 00 @@ @0 30 /EFABS SUR 32 BITS. DC.L EFABS < FONCTION 11, %%%0D0 * 00 @@ @0 30 /EFABS SUR 32 BITS. DC.L EFABS < FONCTION 12, %%%0D4 * 00 @@ @0 30 /EFABS SUR 32 BITS. DC.L EFABS < FONCTION 13, %%%0D8 * 00 @@ @0 30 /EFABS SUR 32 BITS. DC.L EFRREG < FONCTION 14 ('XFRREG'), %%%0DC * 00 @@ @0 52 /EFRREG SUR 32 BITS. DC.L EFABS < FONCTION 15, %%%0E0 * 00 @@ @0 30 /EFABS SUR 32 BITS. DC.L EFABS < FONCTION 16, %%%0E4 * 00 @@ @0 30 /EFABS SUR 32 BITS. DC.L EFABS < FONCTION 17, %%%0E8 * 00 @@ @0 30 /EFABS SUR 32 BITS. DC.L EFABS < FONCTION 18, %%%0EC * 00 @@ @0 30 /EFABS SUR 32 BITS. DC.L EFABS < FONCTION 19, %%%0F0 * 00 @@ @0 30 /EFABS SUR 32 BITS. DC.L EFABS < FONCTION 1A, %%%0F4 * 00 @@ @0 30 /EFABS SUR 32 BITS. DC.L EFABS < FONCTION 1B, %%%0F8 * 00 @@ @0 30 /EFABS SUR 32 BITS. DC.L EFABS < FONCTION 1C, %%%0FC * 00 @@ @0 30 /EFABS SUR 32 BITS. DC.L EFABS < FONCTION 1D, %%%100 * 00 @@ @0 30 /EFABS SUR 32 BITS. DC.L EFABS < FONCTION 1E, %%%104 * 00 @@ @0 30 /EFABS SUR 32 BITS. DC.L EFABS < FONCTION 1F, %%%108 * 00 @@ @0 30 /EFABS SUR 32 BITS. < < < M I S E E N R A M D E L A P R O M : < < LBOOT EQU $-ADPROM < NOMBRE D'OCTETS DU BOOTSTRAP... ADRAM EQU $1000 < ADRESSE EN 'RAM' DU BOOTSTRAP. < 'ADRAM' EST REPRESENTEE PAR '@'. < < < D O N N E E S : < < TINIT0 EQU $ < LISTE D'INITIALISATION DES REGISTRES : DC.L LBOOT < 'D1', %%%10C * 00 00 01 0C /LBOOT SUR 32 BITS. DC.L ADPROM < 'A1', %%%110 * 00 %% %0 00 /ADPROM SUR 32 BITS. DC.L ADRAM < 'A2', %%%114 * 00 @@ @0 00 /ADRAM SUR 32 BITS. DC.L INIT+ADRAM-ADPROM < 'A6'. %%%118 * 00 @@ @0 26 /INIT+ADRAM-ADPROM SUR 32 BITS. < < < M O V E D U B O O T S T R A P : < < INIT0 EQU $ < POINT D'ENTREE DU MOVE DU BOOT... LEA.L TINIT0,A0 < INITIALISATION DE 'A0' SUR LA LISTE < D'INITIALISATION DES AUTRES REGISTRES... %%%11C * 41 F9 00 %% %1 0C /TINIT0 SUR 32 BITS. MOVEM.L (A0), < INITIALISATION DES REGISTRES D1, < DE DONNEES, A1,A2,A6 < PUIS D'ADRESSES... %%%122 * 4C D8 46 02 < < BOUCLE DE MOVE 'PROM' --> 'RAM' : < LOOPM EQU $ < MOVE.B (A1@+),(A2@+) < DEPLACEMENT OCTET PAR OCTET... %%%126 * 14 D9 ADDI #-1,D1 < ET ON DECOMPTE LES OCTETS... %%%128 * 06 81 FF FF FF FF BGT LOOPM < ET ON BOUCLE TANT QU'IL Y EN A... %%%12E * 6E F6 /LOOPM-$-2 SUR 8 BITS. JMP (A6) < ET 'GOTO' LA 'RAM'... %%%130 * 4E D6