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