<
<
< 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
Copyright © Jean-François COLONNA, 2022-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2022-2024.