NMPROC:  VAL         "GC"            < NOM DU PROCESSEUR.
         IDP         "GC - RELEASE 01/06/1979"
         IDP         "JOHN F. COLONNA"
         EOT         #SIP DEF PROCESSEUR#
         PROG
         WORD        DUMP            < ADRESSE DE LANCEMENT DU
                                     < PROCESSEUR 'DU'.
         WORD        0               < POUR FAIRE $=$+1.
PDUMP:   EQU         $               < A NOTER : P='12 !!!!
         LRP         L
         BR          -2,L            < ENTREE DANS LE PROCESSEUR.
         EOT         #SIP DEFINITION ITEM#
         PAGE
<
<
<        L O C A L   D U   P R O C E S S E U R  :
<
<
         LOCAL
LOC:     EQU         $
<
<        B U F F E R S   E T   M E S S A G E S  :
<
BUFFER:  WORD        0               < BUFFER D'ENTREE DES COMMANDES.
MCOM:    BYTE        '6D;">"         < MESSAGE D'INVITATION A ENTER
                                     < LA COMMANDE.
MERR:    BYTE        '6D;"?"         < MESSAGE D'ERREUR.
<
<        D E M A N D E S   A   C M S 4  :
<
DEMIN:   WORD        '0101           < DEMANDE D'ENTREE COMMANDE.
         WORD        BUFFER-ZERO*2
         WORD        1
DEMOUT:  WORD        '0202           < DEMANDE DE SORTIE MESSAGE.
         WORD        MCOM-ZERO*2
         WORD        2
DEMERR:  WORD        '0202           < DEMANDE DE SORTIE ERREUR.
         WORD        MERR-ZERO*2
         WORD        2
DEMSGN:  WORD        '0402           < DEMANDE AU SGN INITIALISEE EN
                                     < GENERATION DU PROCESSEUR GC.
         WORD        BRANCH-ZERO*2
         WORD        ZERO-BRANCH+PILE-LTNI-LTNI*2
         WORD        -1
DEMMEM:  WORD        '0004           < DEMANDE D'ALLOCATION 8K MEMOIRE.
         WORD        0
         WORD        '4000           < PASSAGE A 8K MOTS.
DEMCCI:  WORD        '0001           < DEMANDE DE RETOUR AU CCI.
CCI:     EQU         DEMCCI
<
<        A D R E S S E S   D E   T A B L E S  :
<
APILE:   WORD        PILE-1          < POUR INITIALISER K.
AI11:    WORD        ZERO+PILE-LTNI+LTN-1,X
                                     < RELAI D'ACCES A L'ITEM1 EN
                                     < INDEXATION MOT PAR RAPPORT A 1.
AI1:     WORD        ZERO+PILE-LTNI+LTN,X
                                     < RELAI D'ACCES A L'ITEM1 ,
                                     < EN INDEXATION OCTET PAR
                                     < RAPPORT A 0.
AI2:     WORD        ZERO+PILE-LTNI-LTNI
                                     < @EN-TETE DE L'ITEM2.
<
<        R E L A I S   D E   R O U T I N E S  :
<
AOVL:    WORD        OVL             < CHARGEMENT DES OVERLAYS.
ASTK:    WORD        STK             < RANGEMENT D'UN CARACTERE
                                     < DANS L'ITEM1.
<
<        C O N S T A N T E S  :
<
NGE:     ASCI        "GE"            < NOM DE LA BRANCHE D'OVERLAY 'GE'.
NC8:     WORD        NBCAR*NBLIG/8   < NBRE DE MOTS DUMPABLES
                                     < DANS L'ITEM1.
NC1:     WORD        NBCAR*NBLIG/8*8-1 < NBRE DE CARACTERES ASCI
                                     < EQUIVALENTS APRES CONVERSION
                                     < BINAIRE-->ASCI MOINS 1 (POUR
                                     < INDEXER PAR RAPPORT A 0).
ALTNI:   WORD        LTNI            < LONGUEUR TOTALE D'UN ITEM.
                                     < (EN-TETE+CORPS).
         PAGE
<
<
<        D U M P E R   D E   P R O G R A M M E S
<                    G R A P H I Q U E S  :
<
<
<        FONCTION :
<                      LES PROGRAMMES GRAPHIQUES SOUMIS
<                    A '3D' SONT ECRIS EN LANGAGE MACHINE ;
<                    CE SYSTEME PERMET DE CONVERTIR LE
<                    LANGAGE MACHINE BINAIRE (1 MOT) ,
<                    UN LANGAGE MACHINE ASCI (1 MOT=8
<                    CARACTERES ASCI) EDTITABLES PAR 'ED'.
<                      LE FORMAT DE LA CONVERSION EST LE
<                    SUIVANT :
<                    <1 MOT BINAIRE>::=<4 CARACTERES ASCI HEXA-
<                    DECIMAUX><4 CARACTERES 'SPACE'>.
<                      DE PLUS CE SYSTEME PERMET LA CONVERSION
<                    INVERSE : DU LANGAGE ASCI , EN
<                    LANGAGE BINAIRE . LE PROGRAMME GRAPHIQUE
<                    EST LIMITE EN CONSEQUENCES A UN
<                    QUART DE L'ITEM1 (POUR PERMTTRE
<                    L'EXPANSION ASCI).
<
<
         PROG
<
<        E N T R Y   P R O C E S S E U R  :
<
         WORD        LOC+'80         < VALEUR INITIALE DE LA BASE L.
         WORD        BRANCH          < VALEUR INITIALE DE LA BASE W.
DUMP:    EQU         $
         LRP         K
         ADRI        -1,K
         PLR         L,W             < INITIALISATION DE L & W.
         LB          APILE
         LR          B,K             < INITIALISATION DE K.
<
<
<        I N T I A L I S A T I O N   D U   D U M P  :
<
<
         LAI         6
         STBY        DEMSGN          < LA DEMANDE AU SGN EST MISE
                                     < EN MODE 'LOAD SOUS :SYS'.
         LA          NGE
         STA         0,W             < PREPARATION DU NOM DE LA
                                     < BRANCHE D'OVERLAY A APPELER
                                     < A LA SORTIE.
<
<
<        I N T E R R O G A T I O N
<        L ' U T I L I S A T E U R  :
<
<
E5:      EQU         $
         LAD         DEMOUT
         SVC         0               < ENVOI D'UN MESSAGE D'2NVITATION.
         LAD         DEMIN
         SVC         0               < ENTREE DE LA REPONSE.
<
< ANALYSE DE LA REPONSE (1 CARACTERE) :
<
         LBY         BUFFER
<
<        LISTE DES REPONSES AUTORISEES :
<                    G : APPEL DU COMPILATEUR (' S' + ' L') ,
<                    D : CONVERSION BINAIRE-->ASCI ,
<                    U : CONVERSION ASCI-->BINAIRE (2NVERSE) ,
<                    C : RETOUR AU CCI ,
<                    F : RETOUR IMMEDIAT A 'GE'.
<                    EOT/RC : RETOUR IMMEDAIT A GE.
<
         CPI         "G"             < EST-CE LE COMPILATEUR ???
         JE          COMPIL          < OUI.
         CPI         "D"             < EST-CE UN DUMP EN ASCI ????
         JE          ASCI            < OUI.
         CPI         "U"             < EST-CE LE DUMP BINAIRE (INVERSE) ???
         JE          BINARY          < OUI.
         CPI         "C"             < EST-CE UN RETOUR AU CCI ???
         JE          E50             < OUI.
         CPI         "F"             < EST-CE UN RETOUR A 'GE' ???
         JE          E6              < OUI , RETOUR A 'G)' IMMEDIAT ...
         CPI         '04             < EST-CE 'EOT' ????
         JE          E6              < OUI , RETOUR A 'GE'.
         CPI         '0D             < EST-CE LE R/C ????
         JNE         E5              < NON , ON RE-INTERROGE L'
                                     < UTILISATEUR.
<
<        R E T O U R   A   ' G E '  :
<
E6:      EQU         $
         LAD         DEMSGN          < A=@DEMSGN ; W=@BRANCH.
         BSR         AOVL            < TENTATIVE DE CHARGEMENT DE 'GE'.
<
< TRAITEMENT DES ERREURS DE CHARGEMENT :
<
         WORD        '1E16           < RETOUR DIRECT AU CCI.
         JMP         $-1             < ET DEFINITIF....
<
< TRAITEMENT DES ERREURS :
<
E31:     EQU         $
         LAD         DEMERR
         SVC         0               < ENVOI D'UN MESSAGE D'ERREUR.
         JMP         E6              < VERS LE RETOUR A 'GE'.
<
<        R E T O U R   A U   C C I  :
<
E50:     EQU         $
         LAD         DEMCCI
         SVC         0               < RETOUR AU CCI.
         JMP         E5              < RE-INTERROGATION DE L'UTILI-
                                     < SATEUR AU CAS OU ON RECOIT !GO.
         PAGE
<
<
<        R A N G E M E N T   C A R A C T E R E  :
<
<
<        FONCTION :
<                      CETTE ROUTINE RANGE UN CARACTERE
<                    ASCI DANS L'ITEM1.
<
<
<        ARGUMENTS :
<                    A=CARACTERE ASCI ,
<                    Y=INDEX OU LE RANGER DANS ITEM1.
<
<
<        RESULTAT :
<                    Y<--(Y)-1.
<
<
STK:     EQU         $
         XR          X,Y             < SAVE X , ET X=INDEX DE
                                     < RANGEMENT DU CARACTERE ARGUMENT.
         STBY        &AI1            < RANGEMENT DANS ITEM1.
         ADRI        -1,X            < DECREMENTATION DU REGISTRE 'Y'
                                     < ARGUMENT.
         XR          X,Y             < RESTAURE X & Y.
         RSR                         < ET C'EST TOUT ....
         PAGE
<
<        C O N V E R S I O N   B I N A I R E   ---> A S C I  :
<                    D A N S   I T E M 1
<
<
<        FONCTION :
<                      CE MODULE CONVERTIT LE LANGAGE
<                    MACHINE BINAIRE EN LANGAGE MACHINE
<                    ASCI A RAISON DE 8 CARACTERES ASCI
<                    POUR UN MOT MACHINE (4 CHIFFRE
<                    HEXA+4 SPACE).
<
<
ASCI:    EQU         $
<
< CHECK TYPE DE L'ITEM :
<
         LXI         IINDIC-LTN*2
         LBY         &AI1            < A=TYPE DE L'ITEM1.
         CPI         "P"             < EST-CE BIEN 'PROGRAMME' ???
         JNE         E31             < ERREUR , REFUS DE DUMP.
<
< BOUCLE DE CONVERSION DES MOTS MACHINE :
<
         LY          NC1             < Y=INDEX CARACTERE PAR RAPPORT
                                     < A 0.
         LX          NC8             < X=INDEX MOT PAR RAPPORT A 1.
E10:     EQU         $
         LB          &AI11           < B=1 MOT A CONVERTIR EN ASCI.
         PSR         X               < SAVE L'INDEX MOT.
<
< BOUCLE D'INSERTION DE 4 'SPACE' :
<
         LXI         4               < NBRE DE 'SPACE' A INSERER.
         LAI         '20             < A='SPACE'.
E11:     EQU         $
         BSR         ASTK            < INSERTION DES 4 'SPACE'.
         JDX         E11
<
< BOUCLE DE CONVERSION DU MOT (B) :
<
         LXI         4               < NBRE DE CHIFFRES HEXA A GENERER.
E12:     EQU         $
         LAI         0               < RAZ A A CHAQUE TOUR.
         SCRD        4
         SCLS        4               < RECUPERATION DANS A CADRE A
                                     < DROITE D'UN CHIFFRE HEXA.
         CPI         9               < DISCRIMINATION CHIFFRE/LETTRE ???
         JLE         E13             < CAS DES CHIFFRES (0-9).
         ADRI        '41-'39-1,A     < CAS DES LETTRES (A-F).
E13:     EQU         $
         ADRI        '30,A           < CONVERSION ASCI.
         BSR         ASTK            < ET INSERTION DANS L'ITEM1.
         JDX         E12             < CHIFFRE SUIVANT DANS LE MOT
                                     < COURANT.
E40:     EQU         $               < ENTRY POUR LANGAGE MACHINE
                                     < ASCI ERRONE : ON ANNULE TOUTE
                                     < LA CONVERSION DEJA OPEREE.
         PLR         X               < RESTAURE L'INDEX MOT.
         JDX         E10             < ACCES AU MOT SUIVANT A CONVERTIR.
<
< MISE EN PLACE DU TYPE 'T' (TEXTE) :
<
         LXI         IINDIC-LTN*2    < INDEX OCTET DU TYPE DE L'ITEM.
         LAI         "T"             < TYPE 'TEXTE' POUR ASSUER
                                     < LA COMPATIBLITE AVEC 'ED'.
         STBY        &AI1
         JMP         E6              < RETOUR A 'GE' APRES LA
                                     < CONVERSION.
         PAGE
<
<
<        C O N V E R S I O N   A S C I   --->   B I N A I R E  :
<                    D A N S   I T E M 1
<
<
<        FONCTION :
<                      CE MODULE REGENERE LE LANGAGE
<                    MACHINE BINAIRE A PARTIR DU LANGAGE
<                    MACHINE ASCI.
<
<
BINARY:  EQU         $
<
< CHECK LE TYPE DE L'ITEM :
<
         LXI         IINDIC-LTN*2
         LBY         &AI1            < A=TYPE DE L'ITEM1.
         CPI         "T"             < EST-CE BIEN LE TYPE 'TEXTE' ???
         JNE         E31             < NON ERREUR , LE DUMP INVERSE
                                     < EST REFUSE.
<
< BOUCLE DE REGENERATION DES MOTS :
<
         LXI         1               < INDEX MOT.
         LYI         0               < INDEX CARACTERE.
E20:     EQU         $
         PSR         X               < SAVE L'2NDEX MOT.
<
< BOUCLE DE RECUPERATION 1 MOT :
<
         LXI         4               < NBRE DE CHIFFRES HEXA POUR
                                     < RECONSTITUER UN MOT MACHINE.
E21:     EQU         $
         XR          X,Y
         LBY         &AI1            < ACCES AUN CHIFFRE HEXA DANS
                                     < L'ITEM1.
         ADRI        1,X             < PROGRESSION DE L'INDEX
                                     < CARACTERES.
         XR          X,Y
         ADRI        -'30,A          < REGENERATION HEXADECIMALE.
         JAL         E30             < ERREUR : ITEM1 NE CONTIENT PAS
                                     < PAS DE LANGAGE MACHINE ...
         CPI         9               < EST-CE UN CHIFFRE ???
         JLE         E22             < OUI.
         ADRI        -'41+'39+1,A    < CAS DES LETTRES PRESUMEES (A-F).
         CPI         'A              < VALIDATION ???
         JL          E30             < ERREUR : MAUVAIS LANGAGE ...
         CPI         'F              < VALIDATION ???
         JG          E30             < ERREUR : MAUVAIS LANAGE ....
E22:     EQU         $
         SCRS        4
         SCLD        4               < RECONSTITUTION DANS LE REGISTRE
                                     < B DU MOT COURANT.
         JDX         E21             < CHIFFRE HEXA SUIVANT ....
         PLR         X               < RESTAURE L'INDEX MOT.
         STB         &AI11           < RANGEMENT DU MOT QUE L'ON
                                     < VIENT DE CONVERTIR.
         ADRI        4,Y             < ON DEPASSE LES '4 SPACE.
         ADRI        1,X             < PROGRESSION DE L'INDEX MOT.
         LR          X,A
         CP          NC8             < EST-ON AU BOUT DE L'ITEM1 ????
         JLE         E20             < NON , ALLONS RECONSTITUER
                                     < LE MOT SUIVANT.
<
< RESTAURATION DU TYPE 'P' (PRPROGRAMME) :
<
         LXI         IINDIC-LTN*2
         LAI         "P"             < TYPE 'PROGRAMME'.
         STBY        &AI1            < L'2TEM1 PREND LE TYPE 'P'.
         JMP         E6              < EN FIN DE CONVERSION , ON
                                     < RETOURNE A 'GE'.
<
< TRAITEMENT DES LANGAGES MACINES ASCI
< ERRONES : IL FAUT ANNULER TOUTE LA CONVERSION
< ASCI-->BINAIRE DEJA OPEREE ; POUR CELA ,
< ON VA REUTILISER LE MODULE 'ASCI' :
<
E30:     EQU         $
         LAI         -8
         ANDR        A,Y             < ON REMET Y A UNE FRONTIERE DE
                                     < 'MOT ASCI' DU LANGAGE MACHINE.
         ADRI        -1,Y            < PASSAGE SUR LE DERNIERE CARACTERE
                                     < DU MOT PRECEDENT (EVENTUEL).
         LAD         DEMERR
         SVC         0               < ENVOI D'UN MESSAGE D'ERREUR.
         JMP         E40             < VERS LA CONVERSION INVERSE.
         PAGE
<
<
<        C O M P I L A T E U R   G  :
<
<
<        FONCTION :
<                      CE MODULE FAIT D'ABORD UNE DEMANDE
<                    D'ALLOCATION 8K MOTS MEMOIRE , PUIS
<                    SAUVEGARDE L'ITEM1 EN BOUT DES 8K ,
<                    ET ENFIN APPELLE LA 1ERE BRANCHE DE
<                    L'OVERLAY (' S').
<                      LE TEXTE SOURCE EST DANS L'ITEM1.
<                    ET L'EN-TETE DE L'ITEM2 DANS LES
<                    MOTS QUI PRECEDENT L'ITEM1 TRANSLATE.
<
<
COMPIL:  EQU         $
         LAD         DEMMEM
         SVC         0               < PASSAGE DE 4K A 8K MOTS.
<
< SAUVEGADRE DE L'ITEM1 :
<
         LA          AI1
         RBT         0               < A=@DU CORPS DE L'ITEM1.
         ADRI        -LTN,A          < A=EMETTEUR=@EN-TETE ITEM1.
         LR          A,B
         SBT         16+3            < B=RECEPTEUR=@EN-TETE DE L'ITEM1
                                     < TRANSLATE DE 4K MOTS.
         LX          ALTNI           < X=NBRE DE MOTS A DEPLACER.
         MOVE                        < SAUVEGARDE DE L'ITEM1.
<
< SAUVEGARDE DE L'EN-TETE DE L'ITEM2 :
<
         ADRI        -LTN,B          < B=RECEPTEUR ..
         LA          AI2             < A=EMETTEUR=@EN-TETE DE L'ITEM2.
         LXI         LTN             < X=NBRE DE MOTS DE L'EN-TETE.
         MOVE                        < SAUVEGARDE EN-TETE ITEM2.
<
< APPEL DE L'ASSEMBLEUR ' S' :
<
         LAI         "S"
         SBT         2               < A=' S'=NOM DE LA BRANCHE.
         STA         0,W             < MISE EN PLACE DU NOM DE LA
                                     < BRANCHE A APPELER.
         LAD         DEMSGN
         BSR         AOVL            < ESSAI DE CHARGEMENT DE ' S' ,
                                     < AVEC : A=@DEMSGN , W=@BRANCH.
<
< CAS DES RETOURS EN ERREUR DU SGN :
<
         LAD         CCI
         SVC         0               < ON FAIT ALORS UN RETOUR
         JMP         $-1             < DEFINITIF AU CCI.
<
<
<        V A L I D A T I O N   I M P L A N T A T I O N  :
<
<
X12:     EQU         ZERO+PILE-LTNI-LTNI
X10:     VAL         X12-$
ZEROV:   EQU         ZERO+X10
         DZS         X10+1
         EOT         #SIP GEN PROCESSEUR#



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.