PAGE
IGE:     VAL         1               < IGE>0 : LE PROCESSEUR LOAD EST
                                     < GENERE POUR ETRE EXECUTE
                                     < SOUS LE SYSTEME 'GE'.
IGE:     VAL         0               < ASSEMBLAGE DU LOADER POUR
                                     < LA VERSION 'PROCESSEUR DE
                                     < BASE DE CMS4'.
         IF          IGE,,,X100
         IDP         "LOAD - RELEASE 16/12/1974"
X100:    VAL         0

         IF          IGE,X100,X100,
         IDP         " L - RELEASE 27/12/1974"
X100:    VAL         0
         IDP         "JOHN F. COLONNA"
<
<
<        C H A R G E U R   T R A N S L A T E U R   L O A D  :
<
<
<        PHILOSOPHIE :
<                      LOAD EST EN FAIT IRLD REBAPTISE PAR
<                    LE CLIENT (ET OUI ENCORE) ....
<                    ET MODIFIE LEGEREMENT (AVANT DE LE
<                    REFAIRE .....
<                      2 VERSIONS SONT ASSEMBLABLES
<                    SUIVANT LA VALEUR DU PARAMETRE
<                    D'ASSEMBLAGE 'IGE' :
<                    1- UN PROCESSEUR DE BASE DE CMS4 ,
<                    POUR IGE<=0 : LOAD.
<                    2- UNE BRANCHE DE L'OVERLAY DE 'GE' ,
<                    POUR IGE>0 : L.
<                      LE PROGRAMME GENERE SE TROUVE
<                    DANS L'ITEM2.
         PAGE
<
<
<        B U F F E R S  :
<
<
         TABLE
ZERO:    EQU         $               < ZERO TRANSLATABLE DU PROGRAMME.
         IF          IGE,,,X100
SPROG:   VAL         'DF0
X100:    VAL         0
         IF          IGE,X100,X100,
SPROG:   VAL         '100            < UNE TRANSLATION AUSSI FAIBLE
                                     < PERMET DE CHARGER CE PROCESSEUR
                                     < AVEC LE !LOAD EXISTANT.
X100:    VAL         0
<
< INTERFACE AVEC UCPRS-CMS4 :
<
         IF          IGE,,,X100
         DZS         'C
         ASCI        "LOAD"
X100:    VAL         0
         IF          IGE,X100,X100,
         DZS         7               < ZONE DES ARGUMENTS DE 'GE'.
<
<
<        C H A R G E M E N T   D E S   O V E R L A Y S  :
<
<
         PROG
OVL:     EQU         $
<        ON A ICI :
<                    A=@DEMSGN ,
<                    W=@BRANCH.
         SVC         0               < ENVOI DE LA DEMANDE AU SGN.
         JNE         Z1              < CAS DES ERREURS DE CHARGEMENT.
         BR          5,W             < SI OK , ON PASSE LA MAIN A
                                     < LA BRANCHE CHARGEE.
Z1:      EQU         $
         RSR                         < RETOUR POUR ERREUR.
<
<
<        E N - T E T E   D U   P R O C E S S E U R  :
<
<
         TABLE
BRANCH:  EQU         $
         ASCI        " L    "        < NOM DU PROCESSEUR ' L'.
X100:    VAL         0
         BYTE        '04;'D0
         WORD        '1FE0           < TAILLE OCTET QUI LUI EST
                                     < NECESSAIRE A PRIORI , ET CECI
                                     < QUELQUE SOIT LA TAILLE DU
                                     < PROGRAMME A CHARGER.
         WORD        LOAD            < ADRESSE DE LANCEMENT  DE LOAD.
         PROG
         WORD        0               < POUR FAIRE $=$+1.
PLOAD:   EQU         $
         LRP         L
         BR          -2,L            < ENTRY DANS LE PROCESSEUR.
<
< SUITE DE LA ZONE RESERVEE POUR
< IMPLANTER LE PROGRAMME A CHARGER :
<
         DZS         SPROG
         PAGE
         IF          IGE,X100,X100,
<
<
<        C O N S T A N T E S   D E   L ' I T E M  :
<
<
LTN:     VAL         '52             < LONGUEUR DE L'EN-TETE ITEM.
LTNI:    VAL         '561            < LONGUEUR TOTALE (EN-TETE+CORPS).
LRITEM:  VAL         4               < INDEX MOT DE LA LONGUEUR
                                     < REELLE DU CORPS DE L'ITEM.
IINDIC:  VAL         5               < INDEX MOT DU TYPE DE L'ITEM.
                                     < 'P' POUR LES PROGRAMMES.
PILE:    VAL         'FF0-6          < PILE DU SYSTEME 'GE'.
NBCAR:   VAL         74              < NBRE DE CARACTERES/LIGNE.
NBLIG:   VAL         35              < NBRE DE LIGNES/PAGE.
X100:    VAL         0
         PAGE
<
<
<        C O M M O N   :
<
<
         COMMON
TOUDEB:  EQU         $
<
< BUFFERS DE TRAVAIL DU LOADER :
<
BUFFER:  DZS         40              < BUFFER D'ENTREE.
BUFBIN:  DZS         41              < BUFFER D'ENTREE DU BINAIRE.
                                     < (+1 A CAUSE DE L'INTERFACE SGF).
INDEX:   WORD        80              < INDEX BUFFER BINAIRE.
KSTORE:  DZS         20
CHKSUM:  DZS         1               < CHECKSUM.
ABSMOD:  WORD        -1
ADSTOC:  DZS         2               < QUADRUPLET 'AU FRAIS'.
         IF          IGE,,,X100
CTRANS:  DZS         1               < CONSTANTE DE TRANSLATION.
MAXMEM:  WORD        SPROG           < ADRESSE MAX ACCESSIBLE PAR
                                     < LE PROGRAMME QUE L'ON CHARGE.
X100:    VAL         0
         IF          IGE,X100,X100,
AI2:     WORD        ZERO+PILE-LTNI-LTNI+LTN+1,X
                                     < RELAI INDEXE D'ACCES A L'ITEM2.
                                     < (+1 AFIN DE RESERVER LE MOT0
                                     < POUR L'ADRESSE DE DEPART).
AI20:    WORD        ZERO+PILE-LTNI-LTNI+LTN,X
                                     < ACCES A L'ITEM2 A PARTIR DE 0.
CTRANS:  WORD        ZERO+PILE-LTNI-LTNI+LTN+1
                                     < CETTE CONSTANTE DE TRANSLATION
                                     < PERMET D'IMPLEMENTER LE PRO-
                                     < GRAMME CHARGE DANS ITEM2.
MAXMEM:  WORD        ZERO+PILE-LTNI+LTN
                                     < POUR NE PAS DEPASSER L'ITEM1.
NCP:     WORD        NBCAR*NBLIG     < LONGUEUR A DONNER AUX ITEM
                                     < DE TYPE 'P'.
X100:    VAL         0
PAFINI:  DZS         1               < RELAI POUR LES SUITES DE
                                     < COMMANDES.
ADLANC:  DZS         1               <A DRESSE DE LANCEMENT DU PROGRAMME
                                     < CHARGE.
FINMOD:  DZS         1               < INDICATEUR DE FIN DE MODULE.
PREM2:   DZS         1               < PREM DU PROGRAMME.
CPTLOD:  DZS         1               < COMPTEUR DE REPEAT LOAD.
         IF          IGE,,,X100
OPNBO:   WORD        '0305           < OPEN-OLD ENREGISTREMENT.
         WORD        1               < CLEF=1.0.
         WORD        0
X100:    VAL         0
CCI:     WORD        1               < RETOUR AU CCI SI ERREUR.
         IF          IGE,X100,X100,
DEMMEM:  WORD        '0004           < DEMANDE D'ALLOCATION MEMOIRE.
         WORD        0
         WORD        '2000           < POUR REVENIR A 4K MOTS.
DEMSGN:  WORD        '0402           < DEMANDE D'ACCES AU SGN INITIALI-
                                     < SEE EN 'STORE'.
         WORD        BRANCH-ZERO*2
         WORD        ZERO-BRANCH+PILE-LTNI-LTNI*2
         WORD        -1
X100:    VAL         0
         IF          IGE,,,X100
IOCBIN:  WORD        '0308           < LECTURE MODE SAVE.
         WORD        BUFBIN-ZERO*2
         WORD        82              < (+2 RESERVES POUR LE SGF).
X100:    VAL         0
IOCBPC:  WORD        '0202           < ENTREE COMMANDE.
         WORD        BUFFER-ZERO*2
         WORD        0
IOCBL:   WORD        '0202           < SORTIE LISTING.
         WORD        BUFFER-ZERO*2
         WORD        0
RETURN:  WORD        '0D00
PTRBUF:  WORD        81              < INDEX BUFFER CARACTERE.
RELBUF:  WORD        BUFBIN+1,X      < RELAI BUFFER BINAIRE BIT INDEX.
         IF          IGE,X100,X100,
ZBO:     VAL         '1000           < @DU 1ER OCTET DE BINAIRE A
                                     < CHAGER ; RAPPELONS QUE CELUI-CI
                                     < (LE BINAIRE EVIDEMMENT...) SE
                                     < TROUVE SITUE EN TETE DES 4K
                                     < SUIVANTS.
ABO:     WORD        ZBO             < RELAI COURANT VERS LE 'FICHIER'
                                     < BINAIRE.
APILE:   WORD        PILE-1          < PILE UTILISEE LORS DU CHARGEMENT
                                     < DES BRANCHES D'OVERLAY.
AOVL:    WORD        OVL             < CHARGEMENT DES OVERLAYS.
RAGE:    WORD        AGE             < RETOUR A LA BRANCHE 'GE'.
ALTNI:   WORD        LTNI            < LONGUEUR TOTALE D'1N ITEM.
NGE:     ASCI        "GE"            < NOM DE LA BRANCHE 'GE'.
X100:    VAL         0
BUFFX:   WORD        BUFFER,X        < RELAI BUFFER COMMANDE BIT INDEX.
TESTRC:  WORD        RCTEST          < ROUTINE DE TEST 'ENTREE R/C'.
REPON:   WORD        ANSWER          < ENTREE SUR NVP=IN.
RCLF:    WORD        '0D0A
ERREUR:  ASCI        "ERU "
START:   ASCI        "RUN "
SORMES:  WORD        ENTMOT          < SP DE SORTIE QUESTIONS.
MERCLF:  WORD        MSGRC           < SP DE SORTIE DE RC-LF.
MESER:   WORD        MSGERR          < SP DE SORTIE ERREURS.
LITQ:    WORD        SPLITQ          < SP DE LECTURE 1 QUADRUPLET.
AUFRAI:  WORD        ADSTOC+2,X      < QUADRUPLET 'AU FRAIS'.
TABCDE:  WORD        TABAIG,X
TABAIG:  WORD        DEBUT;SUITE;LANCT;REPEAT;CHECK;COMENT
         WORD        PACDE;TRANSL;REMADR;DEPADR;LECTUR;NSECT;ENT;REMJMP
RANGB:   WORD        VERIFW          < SP RANGE B EN VERIFIANT.
TRIMPW:  WORD        WCIMP           < MODIFIE IMPLANTATION DE W.
TRENTE:  WORD        '3030
NEWCHG:  WORD        RELANS          < RELANCE DU MODULE.
TRINFB:  WORD        BTRANS          < TRANSLATE INFO B.
AREMA2:  WORD        REMAD2
ADEPA2:  WORD        DEPAD2
DIX:     WORD        10
NB7FFF:  WORD        '7FFF           < POUR FIN DE CHAINE.
ADRFAT:  WORD        RFATAL
ADLECT:  WORD        LECTUR
ASECT2:  WORD        SECT2
ARJMP2:  WORD        REMJM2          < RELAI SUITE REF. AVANT RELATIVE.
SORCAR:  WORD        PRECAR          < SORTIE DE 3 CARACTERES.
SORADR:  WORD        ECRADR          < SORTIE ADRESSE.
SORHEX:  WORD        BUFFER+3,X      < POUR ADRESSE RELATIVE.
BLQ:     ASCI        " '"
         PAGE
         PROG
         IF          IGE,X100,X100,
<
<
<        M O D U L E   D E   R E T O U R   A   G E  :
<
<
<        FONCTION :
<                      CE MODULE PERMET DE RETOURNER
<                    A LA BRANCHE 'GE' EN AYANT AU
<                    PREALABLE RESTAURER L'ITEM1 , ET
<                    RENDU AU SYSTEME LES 4K SUPPLE-
<                    MENTAIRES ALLOUES AVANT L'ASSEMBLAGE.
<
<
AGE:     EQU         $
<
< RESTAURATION DE L'ITEM1 :
<
         LA          MAXMEM
         ADRI        -LTN,A          < A=@EN-TETE DE L'ITEM1.
         LR          A,B             < B=RECEPTEUR=ITEM1.
         SBT         3               < TRANSLATION DU CONTENU DE A
                                     < DE 4K MOTS : A=EMETTEUR.
         LX          ALTNI           < X=NBRE DE MOTS A DEPLACER.
         MOVE                        < RESTAURE L'ITEM1.
<
< RESTAURATION DE L'EN-TETE DE L'ITEM2 :
<
         ADRI        -LTN,A          < A=EMETTEUR=@ZONE DE SAUVEGARDE
                                     < DE L'EN-TETE DE L'ITEM2.
         LB          CTRANS          < B=@MOT0 DU CORPS DE L'ITEM2.
         ADRI        -LTN,B          < B=RECEPTEUR=@EN-TETE ITEM2.
         LXI         LTN             < X=NBRE DE MOTS D'UNE EN-TETE.
         MOVE                        < RESTAURATION DE L'EN-TETE ITEM2.
<
< MISE EN PLACE DU TYPE ET DE LA
< LONGUEUR DE L'ITEM2 :
<
         LXI         IINDIC-LTN*2
         LAI         "P"             < TYPE 'PROGRAMME'.
         STBY        &AI20
         LXI         LRITEM-LTN      < INDEX LONGUEUR DU CORPS ITEM.
         LA          NCP             < LA LONGUEUR ATTRIBUEE AU
                                     < CORPS DE L'ITEM PROGRAMME
                                     < EST LA LONGUEUR MAXIMALE.
         STA         &AI20
<
< RELEASE DE L'ESPACE MEMOIRE :
<
         LAD         DEMMEM
         SVC         0               < PASSAGE DE 8K A 4K MOTS.
<
< RETOUR A 'GE' :
<
         LAI         BRANCH-ZERO
         LR          A,W             < W=@BRANCH.
         LAI         6
         STBY        DEMSGN          < DEMSGN EST MISE EN MODE 'LOAD
                                     < SOUS :SYS'.
         LA          NGE
         STA         0,W             < MISE DU NOM DE 'GE' EN TETE DE
                                     < LA BRANCHE.
         LA          APILE
         LR          A,K             < MISE EN PLACE D'UNE PILE QUE
                                     < LE CHARGEMENT DES OVERLAYS NE
                                     < PERRTURBE PAS.
         LAD         DEMSGN
         BSR         AOVL            < ESSAI DE CHARGEMENT DE
                                     < L'OVERLAY 'GE' : A=@DEMSGN ,
                                     < W=@BRANCH.
         LAD         CCI
         SVC         0               < RETOUR AU CCI DEFINITIF EN CAS
         JMP         $-1             < D'ERREURS DE CHARGEMENT.
X100:    VAL         0
         PAGE
<
<
<        C H A R G E U R   T R A N S L A T E U R  :
<
<
         WORD        TOUDEB+128      < INITIALISATION DE LA BASE C.
LOAD:    EQU         $
         LRP         C
         LA          -1,C
         LR          A,C
         LAD         KSTORE-1
         LR          A,K             < INITIALISATION DE K.
         IF          IGE,,,X100
         LAD         OPNBO
         SVC         0               < OUVERTURE DU FICHIER BINAIRE
                                     < DANS LE MODE OPEN-OLD-ENREGIS-
                                     < TREMENT.
         JE          RELANS          < GO ON SI OPEN OK.
X100:    VAL         0
         IF          IGE,X100,X100,
         JMP         RELANS          < ET C'EST PARTI.
X100:    VAL         0
<
< SORTIE EN ERREUR DU LOAD :
<
         IF          IGE,,,X100
HORTEN:  EQU         $
         LAD         CCI
         SVC         0               < RETOUR AU CCI.
X100:    VAL         0
         IF          IGE,X100,X100,
HORTEN:  EQU         AGE             < LORS DES ERREURS FATALES , ON
                                     < FAIT UN RETOUR CORRECT A 'GE'.
X100:    VAL         0
RFATAL:  EQU         $
         XR          A,K             < REINITIALISATION DE K.
         LAD         KSTORE-1
         XR          A,K
         BSR         MESER
         JMP         HORTEN
<
< CHARGEMENT :
<
RELANS:  EQU         $
         BSR         MERCLF          < ENVOI DE RC-LF.
FEUVER:  EQU         $
         BSR         LITQ            < LECTURE 1ER QUADRUPLET.
         CPI         'A3             < MODULE TRANSLATABLE ????
         JNE         ANALIZ          < ABS=VRAI=-1 , CIMP=0.
         IC          ABSMOD          < ABSMOD=0.
         IF          IGE,,,X100
         LYI         0               < @IMPLANTATION=0 (DANS L'ESPACE
                                     < RELATIF DE L'ESCLAVE).
         STZ         CTRANS          < ESCLAVE.
X100:    VAL         0
SLAVE:   EQU         $
         IF          IGE,,,X100
         LR          Y,W             < INIT. W A 0.
X100:    VAL         0
         IF          IGE,X100,X100,
         LA          CTRANS
         LR          A,W             < L'ADRESSE D'2MPLANTATION UTILISEE
                                     < EST CELLE DE L'2TEM2.
X100:    VAL         0
<
<
<        L E C T U R E   D E S   Q U A D R U P L E T S  :
<
<
LECTUR:  EQU         $
         BSR         LITQ
ANALIZ:  EQU         $
         ANDI        3               < ANALYSE DES COMMANDES.
         JAE         ABSOL
         CPI         2               < COMMANDE TRANSLATABLE.
         JNE         ERCMDE
         CPZ         ABSMOD
         JL          PATRAN
         LBY         ADSTOC
         ANDI        '1C
         ADRI        '18,A
NUMCDE:  EQU         $
         SLRS        2               < NUMERO DE COMMANDE DANS X.
         LR          A,X
         BR          &TABCDE         < AIGUILLAGE SPECIFIQUE VERS LA
                                     < COMMANDE.
ABSOL:   EQU         $
         LBY         ADSTOC          < CAS DES COMMANDES ABSOLUES.
         ANDI        '1C
         CPI         '14
         JLE         NUMCDE
ERCMDE:  EQU         $
         LAI         '12
         BR          ADRFAT
PATRAN:  EQU         $
         LAI         '13
         BR          ADRFAT
<
<
<        ' C H A R G E R   E N '  :
<
<
DEBUT:   EQU         $
         BSR         TRIMPW
         JMP         MODPRM
<
<
<        C H A R G E R   A   L A   S U I T E  :
<
<
SUITE:   EQU         $
         BSR         RANGB           < RANGEMENT A LA SUITE DE
                                     < L'INFORMATION CONTENUE DANS B.
         ADRI        1,W
         LR          W,A
MODPRM:  EQU         $
         LR          A,Y
         SB          PREM2           < MODIF DE PREM2.
         JC          $+2
         STY         PREM2
         DC          CPTLOD
         JG          SUITE           < DECREMENTATTION DU COMPTEUR DE
                                     < REPEAT LOAD.
         STZ         CPTLOD
         JMP         LECTUR
<
<
<        A D R E S S E   D E   L A N C E M E N T  :
<
<
LANCT:   EQU         $
         LR          B,A             < MEMORISATON DE L'ADRESSE DE
                                     < DE LANCEMENT.
PALANC:  EQU         $
         IF          IGE,,,X100
         STA         ADLANC
X100:    VAL         0
         IF          IGE,X100,X100,
         RBT         0               < BIZARE !!! NON ????
         AD          CTRANS          < TRANSLATION DE L'ADRESSE DE
                                     < DEPART DANS L'ITEM2.
         DC          CTRANS          < PASSAGE SUR LE MOT0 DE ITEM2.
         STA         &CTRANS         < SOUS GE , L'ADRESSE DE LANCEMENT
                                     < EST TRANSMISE DANS LE MOT0 DE
                                     < L'ITEM2.
X100:    VAL         0
         IC          FINMOD          < FIN DE MODULE=VRAI.
         JMP         LECTUR
<
<
<        R E P E A T   L O A D  :
<
<
REPEAT:  EQU         $
         STB         CPTLOD
         BR          ADLECT
CHECK:   EQU         $
         LA          CHKSUM
         CPR         B,A             < VERIFICATION DU CHECKSUM.
         JNE         FAUSUM
         CPZ         FINMOD          < FIN DE MODULE ???
         JE          FINBAN
         LA          ADLANC
         JAGE        $+2
RELANC:  EQU         $
         BR          NEWCHG          < FIN DE MODULE SANS LANCEMENT.
         LAD         START           < SORTIE ADRESSE DE LANCEMENT.
         BSR         SORMES
         LA          ADLANC
         BSR         SORADR
         IF          IGE,,,X100
         LA          OPNBO
         ORI         2
         STA         OPNBO           < MISE EN MODE CLOSE-SAVE DE
                                     < LA DEMANDE 'OPNBO'.
         LAD         OPNBO
         SVC         0               < FERMETURE EN SAVE DE
                                     < L'ENTEGISTREMENT.
         BR          ADLANC          < BRANCHEMENT AU PROGRAMME
                                     < QUE L'ON VIENT DE CHARGER.
X100:    VAL         0
         IF          IGE,X100,X100,
         BR          RAGE            < EN FIN DE CHARGEMENT , ON FAIT UN
                                     < RETOUR A 'GE'.
X100:    VAL         0
<
<
<        F I N   D E   B A N D E  :
<
<
FINBAN:  EQU         $
         LAI         81
         STA         PTRBUF
         BSR         REPON           < FIN DE BANDE.
         CPI         'D
         JNE         FINBAN
         STZ         CHKSUM
         BR          ADLECT
<
<
<        E R R E U R   D E   C H E C K S U M  :
<
<
FAUSUM:  EQU         $
         LAI         '16             < ERREUR DE CHECKSUM.
         BR          ADRFAT
<
<
<        C O M M E N T A I R E  :
<
<
COMENT:  EQU         $
         BSR         SORCAR
         BR          ADLECT
<
<
<        S U I T E   D E   C O M M A N D E  :
<
<
PACDE:   EQU         $
         BR          PAFINI
<
<
<        C H A R G E R   A   L A   S U I T E
<        E N   T R A N S L A T A N T  :
<
<
TRANSL:  EQU         $
         BSR         TRINFB
         JMP         SUITE
<
<
<        R E M O N T E R   U N E   C H A I N E   D ' @  :
<
<
REMADR:  EQU         $
         PSR         W
         BSR         TRINFB
         LR          B,W
         LA          AREMA2
STAPAF:  EQU         $
         STA         PAFINI
         BR          ADLECT
<
< SUITE DE COMMANDE CHAINE :
<
REMAD2:  EQU         $
         BSR         TRINFB
         IF          IGE,,,X100
         LA          CTRANS
         ADR         A,W
X100:    VAL         0
         LA          0,W
         JAL         BIT01           < SAVE BIT INDEX.
         RBT         16
         JMP         $+3
BIT01:   EQU         $
         SBT         16
         RBT         0
         STB         0,W
         CP          NB7FFF          < FIN DE CHAINE ???
         JE          PLRW
         LR          A,W
         JMP         REMAD2+1
<
< DEPLACEDEPLACEMENT SUR ADRESSE D
<
DEPADR:  EQU         $
         PSR         W
         BSR         TRIMPW
         LA          ADEPA2
         JMP         STAPAF
<
< SUITE DE COMMANDE DEPLACEMENT :
<
DEPAD2:  EQU         $
         LA          0,W
         LR          A,Y
         RBT         0
         ADR         A,B
         JV          MUCHB
         CPR         Y,A
         JE          $+2
         SBT         16              < SAVE BIT INDEX.
         STB         0,W
PLRW:    EQU         $
         PLR         W
         BR          ADLECT
<
<
<        N O M   D E   S E C T I O N  :
<
<
NSECT:   EQU         $
         BSR         MERCLF
         BSR         SORCAR
         LA          ASECT2
         JMP         STAPAF
<
< SUITE DE COMMANDE DE SECTION :
<
SECT2:   EQU         $
         BSR         SORCAR
         LR          W,A
         IF          IGE,,,X100
         AD          CTRANS
X100:    VAL         0
         BSR         SORADR
         BR          ADLECT
<
<
<        C O M M A N D E   ' E N T '  :
<
<
ENT:     EQU         $
         LA          ADLECT
         JMP         STAPAF
<
<
<        R E F E R E N C E   E N   A V A N T   R E L A T I V E  :
<
<
REMJMP:  EQU         $
         PSR         W
         BSR         TRIMPW          < W=@1ER MAILLON.
         LA          ARJMP2
         JMP         STAPAF
<
< SUITE DE REFERNCE AVNT RELATICVE :
<
REMJM2:  EQU         $
         LR          W,Y
         BSR         TRIMPW          < A=W=ADR. REF. EN AVANT.
         XR          Y,W             < W=@1ER MAILLON.
CHAINE:  EQU         $
         LR          Y,A             < Y=A=REF. EN AVANT.
         SBR         W,A
         LB          0,W             < B=MAILLON.
         SCRD        8               < FABRICATION DU MOT DEFINITIF.
         SWBR        B,B
         STB         0,W
         SWBR        A,A             < A=ADRESSE RELATIVE DU MAILLON
                                     < SUIVANT.
         SBR         A,W             < CALCUL ADR. MAILLON SUIVANT.
         JANE        CHAINE
         JMP         PLRW
MUCHW:   EQU         $
         LAI         '14             < W SUPERIEUR A 32 K (TRIMPW
                                     < ET RANGB).
         BR          ADRFAT
MUCHB:   EQU         $
         LAI         '17             < B SUPERIEUR A 32K (TRINFB ET
                                     < DEPAD).
         BR          ADRFAT
         PAGE
<
<
<        L E C T U R E   U N   Q U A D R U P L E T  :
<
<
<        NOTA :
<                      LE BINAIRE EST LU PAR LE SGF
<                    POUR 'LOAD' , ET RECUPERE DANS LES 4
<                    DERNIERS K DE LA MEMOIRE POUR ' L'.
<
<
SPLITQ:  EQU         $
         LYI         0
         LXI         -4
         PSR         B,X,Y
         LAI         80
         CP          INDEX
         JNE         PAVID
         IF          IGE,,,X100
         LAD         IOCBIN
         SVC         0
         JNE         NOPAIR          < ERREUR DANS LE SGF !!!!
X100:    VAL         0
         IF          IGE,X100,X100,
<
< RECUPERATION D'UN BLOC BINAIRE DANS LES
< 4 DERNIERS K DE LA MEMOIRE :
<
         LB          RELBUF
         RBT         0+16            < B=RECEPTEUR=BUFFER BINAIRE.
         LA          ABO             < A=EMETTEUR=ZONE DE STOCKAGE
                                     < DU BINAIRE RESULTANT DE
                                     < L'ASSEMBLEUR SYMBOL.
         LXI         '50/2           < X=NBRE DE MOTS A DEPLACER.
         MOVE                        < ON PROCEDE COMME SI UNE LECTURE
                                     < SGF AVAIT EU LIEU.
         ADRI        '50/2,A         < PROGRESSION DE LA ZONE DE
         STA         ABO             < STOCKAGE DU BINAIRE.
X100:    VAL         0
         STZ         INDEX
PAVID:   EQU         $
         LX          INDEX
         LBY         &RELBUF
         IC          INDEX
         PLR         B,X,Y
         STBY        &AUFRAI
         CPZR        Y
         JNE         STOCK
         ANDI        '60
         CPI         '20
         JNE         SPLITQ+2
         ADRI        1,Y
STOCK:   EQU         $
         JIX         SPLITQ+2
         LBY         ADSTOC
         CPI         '30
         JE          PACHEK
         LA          CHKSUM
         AD          ADSTOC          < CALCUL DU CHECKSUM.
         ADCR        A
         AD          ADSTOC+1
         ADCR        A
         STA         CHKSUM
PACHEK:  EQU         $
         LXI         -3
         LBY         &AUFRAI         < A=COMMANDE , B=INFO.
         SLRD        6
         JIX         $-2
         LBY         ADSTOC
         RSR
NOPAIR:  EQU         $               < ERREUR DE PARITE 11.
         LAI         '11
         BR          ADRFAT
         PAGE
<
<
<        R A N G E M E N T   D E   B  :
<
<
VERIFW:  EQU         $
         LR          W,A
         JAL         MUCHW
         CP          MAXMEM
         JG          ERROR
         STB         0,W             < CHARGEMENT DE 0,W PAR B.
         RSR
ERROR:   EQU         $
         LAI         '15             < ERREUR DE PROTECTION.
         BR          ADRFAT
<
<
<        M O D I F I C A T I O N   D E   L ' I M P L A N T A T I O N  :
<
<
WCIMP:   EQU         $
         LR          B,A
         JAL         MUCHW
         AD          CTRANS          < C'EST MIEUX COMME CA ....
         JV          MUCHW
         LR          A,W             < SI W>32K : ERREUR FATALE.
         RSR
<
<
<        T R A N S L A T I O N   D E   ( B )  :
<
<
BTRANS:  EQU         $
         LR          B,A
         RBT         0
         AD          CTRANS
         JV          MUCHB
         XR          A,B
         JAGE        $+2
         SBT         16              < SAUVEGARDE BIT INDEX.
         RSR
         PAGE
<
<
<        S O R T I E   D E   ( A )  :
<
<
ECRADR:  EQU         $
         SLRD        16
         LXI         -4
CARSUI:  EQU         $
         SLLD        4
         ADRI        '30,A
         CPI         '39
         JLE         $+2
         ADRI        7,A
         STBY        &SORHEX         < RANGEMENT DAN SLE BUFFER OUT.
         LAI         0
         JIX         CARSUI
         STZ         &SORHEX
         LA          BLQ
         STA         BUFFER
         JMP         SORTI6
<
<
<        S O R T I E   D E   3   C A R A C T E R E S  :
<
<
PRECAR:  EQU         $
         LA          ADSTOC
         LB          ADSTOC+1
         SLLD        8
         STA         BUFFER
         STB         BUFFER+1
         JMP         SORTI3
<
<
<
SORTI6:  LXI         6
         JMP         $+2
SORTI3:  LXI         3
         STX         IOCBL+2
         LXI         0               < X=0  LOG LISTING
         JMP         APIOCS
MSGRC:   LXI         2               < SORTIE DE RC-LF
         STX         IOCBL+2
         LXI         0
         JMP         RETLF
MSGERR:  LXI         8               < SORTIE D'UN MESSAGE
         STX         IOCBL+2
         LXI         1               < X=1 ERROR LISTING
         SLRD        4
         SLLS        4               < D'ERREUR AVEC NUMERO
         SLLD        4
         AD          TRENTE
         STA         BUFFER+3
         LAD         ERREUR
         JMP         INBUF4
ENTMOT:  LXI         6
         STX         IOCBL+2
         LXI         0               < X=0 LOG LISTING
INBUF4:  XR          A,W
         LB          0,W
         STB         BUFFER+1
         LB          1,W
         STB         BUFFER+2
         XR          A,W
RETLF:   LA          RCLF
         STA         BUFFER
APIOCS:  EQU         $
         LAD         IOCBL
         SVC         0
         RSR
<
<
<
<     T E S T   D U    R.C.    E N    F I N   D E   C O L O N N E
<
<
RCTEST:  PSR         A
         BSR         REPON
         CPI         'D
         PLR         A
         RSR
<
<
<     E N T R E E   D E   C A R A C T E R E   D ' U N E   C O M M A N D E
<
<
ANSWER:  PSR         B,X,Y
BLANC:   LAI         81
         CP          PTRBUF
         JNE         PLEIN
         LAD         IOCBPC
         SVC         0
         STZ         PTRBUF
PLEIN:   LX          PTRBUF
         LBY         &BUFFX
         IC          PTRBUF
         ANDI        '7F
         CPI         '20
         JE          BLANC
         PLR         B,X,Y           < RESTAURE B,X,Y APRES SVC TAPS ?????????
FVERIF:  RSR
<
<
<
<
<
TOP:     EQU         $
         IF          IGE,X100,X100,
<
<
<        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        < ERREUR D'ASSEMBLAGE SI
                                     < MAUVAISE IMPLANTATION.
         DZS         X10+1           < CLEAR PAR PRUDENCE.
X100:    VAL         0
         PAGE
         IF          IGE,X100,X100,
<
<
<        G E N E R A T I O N   D E   ' L '  :
<
<
         LOCAL
LOC:     EQU         $
MOK:     BYTE        '6D;"O"
         ASCI        "K!"            < MESSAGE DE FIN DE GENERATION.
DEMOUT:  WORD        '0202           < DEMANDE DE SORTIE DU MESSAGE OK.
         WORD        MOK-ZERO*2
         WORD        4
<
< INITIALISATION DE LA GENERATION :
<
         PROG
         WORD        TOUDEB+128      < VALEUR INITIALE DE LA BASE C.
         WORD        LOC+128         < VALEUR INITIALE DE LA BASE L.
GENERE:  EQU         $
         LRP         K
         ADRI        -1,K
         PLR         C,L             < INITIALISATION DE C ET DE L.
         LAD         KSTORE
         LR          A,K             < INITIALISATION DE K.
<
< TENTATIVE DE GENERATION :
<
GEN1:    EQU         $
         LAD         DEMSGN
         SVC         0               < APPEL DU SGN.
         JNE         GEN2            < CAS DES ERREURS DE GENERATION.
<
< FIN DE GENERATION :
<
         LAD         DEMOUT
         SVC         0               < ENVOI DU MESSAGE 'OK!'.
GEN3:    EQU         $
         LAD         CCI
         SVC         0               < RETOUR DEFINITIF AU CCI.
         JMP         GEN3
<
< TRAITEMENT DES ERREURS DE GENERATION :
< (L'ASSIGNATION AU SGN EST MANQUANTE).
<
GEN2:    EQU         $
         LAD         CCI
         SVC         0               < RETOUR TEMPORAIRE AU CCI.
         JMP         GEN1            < VERS UNE NOUVELLE TENTATIVE.
X100:    VAL         0
         END
         END         GENERE



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.