<        S I S   C M S 5   15
         PAGE
         PAGE
<
<
<        D C T   D U   N I V E A U   1  :
<
<
         CALL        #SISP CMS5 DOL1#
DCTBOT:  DZS         XLPSTS
       #@ASCI        " BOT"          < #SISP CMS5 ASCI#
         PAGE
<
<
<        T A I L L E   R E E L L E   D E   L A   P A R T I E
<        E N   M E M O I R E   B A S S E   D U   S Y S T E M E  :
<
<
TOP:     EQU         $+YY7           < CETTE ADRESSE EST CALCULEE DE
                                     < FACON A POUVOIR L'ARRONDIR AU
                                     < MULTIPLE DE YY7 IMMEDIATEMENT
                                     < INFERIEUR A L'INITIALISATION
                                     < DU SYSTEME (POUR LA MISE A
                                     < JOUR DE LA TABLE D'ALLOCATION
                                     < MEMOIRE).
         PAGE
<
<
<        ' D C T '   D ' I N I T I A L I S A T I O N   D E   ' C M S 5 '  :
<
<
         LOCAL
DCTINI:  EQU         $
PSTINI:  WORD        K;K;K;K;COM+DEPCS;DCTINI;HORINI;PILINI;SYSINI;SMST;SO;SE
       #@ASCI        " INI"          < #SISP CMS5 ASCI#
<
< ALLOCATION MEMOIRE REELLE :
<
ATOP:    WORD        TOP-E           < ADRESSE MAX +1 OCCUPEE PAR CMS5,
                                     < CALCULEE DE FACON A TOMBER A UNE
                                     < FRONTIERE DE BUFFER AU SYSINI.
XWOR%1:  VAL         MEMORY/YY7*UMEM < NOMBRE TOTAL DE BUFFERS CONTENUS DANS LA
                                     < MEMOIRE BASSE.
XWOR%2:  VAL         YY7=K
XWOR%2:  VAL         -XWOR%2
XWOR%3:  VAL         TOP-E-ZERO>XWOR%2
                                     < NOMBRE DE BUFFERS BLOQUES PAR LE SYSTEME
                                     < LUI-MEME (MEMOIRE DEBANALISEE, 'DCT',
                                     < GRAMMAIRE DU 'CCI',...).
XWOR%4:  VAL         XWOR%1-XWOR%3   < NOMBRE MAXIMAL ET THEORIQUE DE BUFFERS
                                     < DISPONIBLES EN MEMOIRE BASSE.
XWOR%5:  VAL         L2K*NL2KB       < LONGUEUR PAR DEFAUT EN MOTS DES BLOCS DE
                                     < 2K RESERVES A L'ALLOCATION DES BUFFERS.
         NTRN
XWOR%6:  VAL         TOP-E-ZERO+XWOR%5+L2K-E/L2K*L2K
         TRN
XWOR%7:  VAL         XWOR%6/L2K      < NOMBRE DE BLOCS DE 2K DANS LESQUELS ON
                                     < PEUT ALLOUER DES BUFFERS (Y COMPRIS
                                     < CEUX QUI NE SONT PAS DISPONIBLES PUIS-
                                     < QU'OCCUPER PAR LE BAS DU SYSTEME...).
XWOR%8:  VAL         K               < INITIALISATION DU CUMUL...
XWOR%2:  VAL         COSBT?L=FMASK(K=FCINST
                                     < POUR FORCER LE BIT DE GAUCHE...
XWOR%9:  VAL         -BIT            < ET POUR DECALER A DROITE D'UN BIT...
         DO          XWOR%7
XWOR%8:  VAL         XWOR%8>XWOR%9?XWOR%2
XXLBM:   EQU         ZERO+XWOR%8     < GENERATION DE LA LISTE DES BLOCS DE 2K
                                     < RESERVES AUX BUFFERS (Y COMPRIS CEUX
                                     < DEJA BLOQUES PAR LE BAS DU SYSTEME...).
XWOR%8:  VAL         XWOR%8)MMOT     < ET ON COMPLEMENTE...
         IF          OPMEM4?XWOR%8-OPMEM4,,XEIF%,
         IF          ATTENTION : LE COMPLEMENT DE 'XXLBM' DOIT ETRE
         IF          INCLUS DANS 'OPMEM4' POUR QUE L'ALLOCATTION MEMOIRE
         IF          FONCTIONNE CORRECTEMENT !!!
XEIF%:   VAL         ENDIF
XXLNBM:  EQU         ZERO+XWOR%8     < GENERATION DE LA LISTE DES BLOCS DE 2K
                                     < INACCESSIBLES A L'ALLOCATION DES BUFFERS
                                     < ET CECI POUR EVITER DES INTERBLOCAGES...
<
< INITIALISATION DE LA RACINE DE L'ARBRE DU SYSTEME :
<
ACALLW:  WORD        CALLW           < APPEL DE CHAND AVEC SIMULATION
                                     < D'ATTENTE DE FIN DE SERVICE.
<*******************************************************************************
ACSYS:   BYTE        SPLUS;XK1;XK2;XK3;XK4;EON;EON;K
XWOR%1:  VAL         '000000000@@=FCSIGN-SIGNP
<*******************************************************************************
LACSYS:: VAL         $-ACSYS*NOCMO+XWOR%1
         IF          LACSYS-XXSGN4,,XEIF%,
         IF          ATTENTION : L'INSERTION DE L'<ACN> 'SYS' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
<*******************************************************************************
ACSEC:   BYTE        SPLUS;XKSECE;XK2;XK3;XK4;EON;EON;K
XWOR%1:  VAL         '000000000@@=FCSIGN-SIGNP
<*******************************************************************************
LACSEC:: VAL         $-ACSEC*NOCMO+XWOR%1
         IF          LACSEC-XXSGN4,,XEIF%,
         IF          ATTENTION : L'INSERTION DE L'<ACN> 'SECRET' EST MAUVAISE !!
XEIF%:   VAL         ENDIF
<*******************************************************************************
ACEAO:   BYTE        SPLUS;KDP;KE;KA;KO;EON;EON;K
XWOR%1:  VAL         '000000000@@=FCSIGN-SIGNP
<*******************************************************************************
LACEAO:: VAL         $-ACEAO*NOCMO+XWOR%1
         IF          LACEAO-XXSGN4,,XEIF%,
         IF          ATTENTION : L'INSERTION DE L'<ACN> 'EAO' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
<*******************************************************************************
ACUSE:   BYTE        SPLUS;KDP;KU;KS;KE;EON;EON;K
XWOR%1:  VAL         '000000000@@=FCSIGN-SIGNP
<*******************************************************************************
LACUSE:: VAL         $-ACUSE*NOCMO+XWOR%1
         IF          LACUSE-XXSGN4,,XEIF%,
         IF          ATTENTION : L'INSERTION DE L'<ACN> 'USE' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
<*******************************************************************************
ACJFC:   BYTE        SPLUS;XXK1;XXK2;XXK3;XXK4;EON;EON;K
XWOR%1:  VAL         '000000000@@=FCSIGN-SIGNP
<*******************************************************************************
LACJFC:: VAL         $-ACJFC*NOCMO+XWOR%1
         IF          LACJFC-XXSGN4,,XEIF%,
         IF          ATTENTION : L'INSERTION DE L'<ACN> 'JFC' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
<*******************************************************************************
ACSIM:   BYTE        SPLUS;XXXK1;XXXK2;XXXK3;XXXK4;EON;EON;K
XWOR%1:  VAL         '000000000@@=FCSIGN-SIGNP
<*******************************************************************************
LACSIM:: VAL         $-ACSIM*NOCMO+XWOR%1
         IF          LACSIM-XXSGN4,,XEIF%,
         IF          ATTENTION : L'INSERTION DE L'<ACN> 'SIM' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
DEMSYS:  BYTE        NSPTRI;K        < INSERTION DE L'ACN DU SYSTEME.
         WORD        FGID            < FONCTION INSERT/DELETE.
         WORD        ACSYS-ZERO*NOCMO < :SYS
         WORD        XXSGN4          < 7 CARACTERES +:SYS<EON><EON>.
         DZS         LDEM0+DEMSYS-$
DEMSEC:  BYTE        NSPTRI;K        < INSERTION DE L'ACN DU SECTEME.
         WORD        FGID            < FONCTION INSERT/DELETE.
         WORD        ACSEC-ZERO*NOCMO < <SPACE>SYS
         WORD        XXSGN4          < 7 CARACTERES +<SPACE>SYS<EON><EON>.
         DZS         LDEM0+DEMSEC-$
DEMEAO:  BYTE        NSPTRI;K        < INSERTION DE L'ACN DE SODOME.
         WORD        FGID            < FONCTION INSERT/DELETE.
         WORD        ACEAO-ZERO*NOCMO < :EAO
         WORD        XXSGN4          < 7 CARACTERES +:EAO<EON><EON>.
         DZS         LDEM0+DEMEAO-$
DEMUSE:  BYTE        NSPTRI;K        < INSERTION DE L'ACN DE TRAVAIL.
         WORD        FGID            < FONCTION INSERT/DELETE.
         WORD        ACUSE-ZERO*NOCMO < :USE.
         WORD        XXSGN4          < 7 CARACTERES +:USE<EON><EON>.
         DZS         LDEM0+DEMUSE-$
DEMJFC:  BYTE        NSPTRI;K        < INSERTION DE MON <ACN>...
         WORD        FGID            < FONCTION INSERT/DELETE.
         WORD        ACJFC-ZERO*NOCMO < :JFC.
         WORD        XXSGN4          < 7 CARACTERES +:JFC<EON><EON>.
         DZS         LDEM0+DEMJFC-$
DEMSIM:  BYTE        NSPTRI;K        < INSERTION DE L'ACN DE SIMULATION.
         WORD        FGID            < FONCTION INSERT/DELETE.
         WORD        ACSIM-ZERO*NOCMO
         WORD        XXSGN4          < 7 CARACTERES +:SIM<EON><EON>.
         DZS         LDEM0+DEMSIM-$
         NLS
<
< POUR MODIFIER EVENTUELLEMENT L'ACCES
< AU TOM ED ESSAP DE ":SYS" :
<
AAN335:  WORD        AN335           < NOEUD D'ACCES AU TOM ED ESSAP,
AN337X:  WORD        N337X           < NOEUD DE MEMORISATION DE L'APPEL SOUS
                                     < LE NUMERO DE COMPTE ":SYS", QUI PRECEDE
                                     < L'INTERROGATION GENERALE...
         LST
<
< DONNEES DE RESTAURATION DU SYSTEME :
<
DCOPY1:  BYTE        NSPDKF;XDSYM?XTYPAD < DEMANDE DE RESTAURATION :
         WORD        FGR             < LECTURE.
         WORD        BCOPY
         WORD        LCOPY2
         WORD        SCOPY1          < PREMIERE ZONE DE 'COPY'.
         DZS         LDEM0+DCOPY1-$
DCOPYV:  BYTE        NSPDKF;XDSYM?XTYPAD < DEMANDE DE VALIDATION :
         WORD        FGR             < LECTURE.
         WORD        BCOPY
         WORD        LCOPY2
         WORD        SCOPY2          < DEUXIEME ZONE DE 'COPY'.
         DZS         LDEM0+DCOPYV-$
ACKCOP:  WORD        CKCOP           < VALIDATION DU CHECKSUM DE LA COPY.
<
< DONNEES DE RATTRAPAGE DE FICHIERS
< RESTES OUVERTS LORS DE L'ARRET
< DU SYSTEME PRECEDENT (IL S'AGIT
< ALORS D'UN PLANTAGE...) :
<
DRFILE:  BYTE        NSPDKB;XDSYM    < ACCES A UN SECTEUR OU A UN Q-SECTEUR :
         WORD        K               < FONCTION (LECTURE/ECRITURE),
         WORD        BRFIL2          < ADRESSE OCTET DU BUFFER,
         WORD        YY8             < LONGUEUR OCTETS (YY8 OU YY8Q SUIVANT...),
         WORD        NILS            < ADRESSE DU SECTEUR...
         DZS         LDEM0+DRFILE-$
ABRFIL:  WORD        BRFIL           < RELAI D'ACCES AU PREMIER MOT DU BUFFER,
ABRFIM:  WORD        BRFIL+DEPILE    < RELAI D'ACCES AU MOT SUIVANT (ON UTILISE
                                     < 'DEPILE', CAR EN EFFET LORS DE 'CLOSK'
                                     < LE BUFFER EST LA PILE COURANTE ET EST
                                     < INITIALISE PAR DES 'PSR'...).
<
< RELAIS DIVERS :
<
<*******************************************************************************
AGIDLE:  WORD        GIDLE
FC7FFF:  WORD        '0000000@@@@    < AFIN DE CONNAITRE LA VALEUR QUI SERA
                                     < GENERE PAR L'ASSEMBLEUR POUR LES DEBUTS
                                     < DE LISTE DES BLOCS "ROM"-"RAM"...
<*******************************************************************************
<
< DONNEES DE GENERATION DE LA TABLE "PRIME"
< DE VIRTUALISATION DE 'DKM' :
<
BTVDKM:  WORD        TVDKM,X         < ACCES A LA TABLE DE VIRTUALISATION
                                     < DU DISQUE 'DKM'...
<
< DONNEES NECESSAIRES A LA TENTATIVE DE
< RESTITUTION DES SECTEURS HS DE 'DKM' :
<
BINIRL:  WORD        NILS            < ADRESSE DU SECTEUR 'DKM' COURANT.
IKQSHS:  WORD        KQSHS           < RELAI VERS LE COMPTEUR DES SECTEURS HS.
DINIRL:  BYTE        NSPREL;K        < DEMANDE DE RELEASE DES SECTEURS 'HS'.
         WORD        K
         WORD        BINIRL          < ADRESSE MOT DU BUFFER DE L'ADRESSE...
         WORD        W               < ON LES REND UN A UN...
         DZS         LDEM0+DINIRL-$
PQSHSP:  DZS         XQSHS           < PILE DESTINEE A DUPLIQUER 'PQSHS'.
<
< DONNEES DE GENERATION SYSTEMATIQUE DU NOYAU DE BOOTSTRAP :
<
DEMBOT:  BYTE        NSPDKF;XDSYM?XTYPAD
         WORD        FGW             < GENERATION=ECRITURE...
         WORD        DBN00
         WORD        LDBN02
         WORD        XSBOOT          < IMPLANTATION DU BOOTSTRAP...
         DZS         LDEM0+DEMBOT-$
         IF          XSBOOT-K,,XEIF%,
         IF          ATTENTION : CA VA MERDER !!!
XEIF%:   VAL         ENDIF
         PAGE
<
<
<        B U F F E R   D E   R A T T R A P A G E
<        D E S   F I C H I E R S   O U V E R T S  :
<
<
BRFIL:   EQU         $
XWOR%2:  VAL         BRFIL-ZERO*NOCMO
BRFIL2:  EQU         ZERO+XWOR%2     < POUR UNE REFERENCE EN AVANT...
         DZS         YY7Q            < (MAIS ON N'EN UTILISE QUE 'YY7' LORSQU'ON
                                     < LIT LES MORCEAUX DE LISTE DE CLEFS...)
         PAGE
<
<
<        I N I T I A L I S A T I O N  :
<
<
<        FONCTION :
<                      CETTE TACHE TRES SPECIALE EST
<                    ARMEE PAR LE BOOTSTRAP. ELLE INI-
<                    TIALISE EN GENERAL LES TABLES DU
<                    SYSTEME A PARTIR D'UNE COPY, PUIS
<                    INITIALISE L'HORLOGE ET L'IDLE...
<                      DE PLUS EN FONCTION DE L'ETAT
<                    REEL DES DISQUES DU SYSTEME, IL
<                    MET A JOUR LEUR ALLOCATION, ET
<                    PREPARE LA SIMULATION DES DISQUES
<                    ABSENTS (OU HS)...
<
<
<        FONCTION DES CLEFS DU PUPITRE :
<                    CLEF14=0 : NE PAS INITIALISER LA RACINE
<                               DE L'ARBRE DU SYSTEME.
<                    CLEF15=1 : NE PAS INITIALISER L'ARBRE
<                               DU SYSTEME (RACINE), ET
<                               DE PLUS RAZER TOSA1 ET TOSA2.
<                    CLEF2 DOIT TOUJOURS ETRE A 1 ('DKM' PRESENT),
<                    CLEF3=1 : 'DKF' PRESENT,
<                          0 : 'DKF' ABSENT SERA SIMULE SUR 'DKM'.
<
<        SOIT :
<                    10 = ENTRY NEW SYSTEM,
<                    11 = ENTRY OLD SYSTEM.
<
<
<        A T T E N T I O N  :
<                      SI LES CLEFS SONT TOUTES RENTREES A
<                    '0000, LE SYSTEME INITIALISE AUTOMA-
<                    TIQUEMENT 'ETASYS' ET 'MEMV' AVEC LES
<                    VALEURS LES PLUS PROBABLES...
<
<
         PROG
         USE         L,DCTINI
         USE         W,DEM0
SYSINI:  EQU         $
<
<
<        G E N E R A T I O N   D E S   C H E C K - S U M S
<        D E S   B L O C S   " R O M " - " R A M "  :
<
<
         PSR         L               < SAUVEGARDE DE LA BASE 'L' DU 'SYSINI'...
         LR          L,Y             < ET MISE DANS 'Y' POUR PERMETTRE L'ACCES
                                     < AU LIMITEUR DE FIN 'FC7FFF'...
         LRM         W
         WORD        CHAIN1          < (W)=ADRESSE DU PREMIER BLOC.
GIDLY1:  EQU         $
         LAI         K               < (A)=CUMUL DU CHECK-SUM,
         LR          W,L             < (L)=SAUVEGARDE DU BLOC COURANT,
         LB          CHAINA,W        < (B)=ADRESSE DU BLOC PRECEDENT.
GIDLY2:  EQU         $
         EOR         O,W             < CALCUL DU CHEK-SUM DU BLOC "RAM",
         ADRI        -D,W            < PASSAGE AU MOT PRECEDENT,
         CPR         B,W             < TOMBE-T'ON SUR LE BLOC PRECEDENT ???
         JNE         GIDLY2          < NON...
         STA         CHAINX,L        < OUI, ON MEMORISE LE CHECK-SUM DU BLOC
                                     < COURANT...
         LA          CHAINA,W        < AFIN DE SAUTER LE BLOC "RAM" QUI DOIT
                                     < PRECEDER...
         LR          W,L             < ET SAUVEGARDE DU 'W' ANTERIEUR...
         LR          A,W             < (W)=AINSI, 'W' BASE LE BLOC "ROM" PRE-
                                     <     CEDENT, S'IL EXISTE...
         XR          Y,L             < RETABLISSEMENT TEMPORAIRE DE 'L'...
         CP          FC7FFF          < EST-ON ARRIVE EN DEBUT DE CHAINE ???
         XR          Y,L
         JNE         GIDLY1          < NON, ALLONS CALCULER LA CHECK-SUM
                                     < DU BLOC "ROM" COURANT,
         LA          INFINI          < OUI :
         STA         CHAINA,L        < ON CHANGE L'INDICATEUR DE FIN DE CHAINE,
                                     < AFIN D'ETRE HOMOGENE...
         PLR         L               < ET RESTAURE 'L'...
<
<
<        I N I T I A L I S A T I O N   ' E T A S Y S '   E T   ' M E M V '  :
<
<
SYSINJ:  EQU         $
         LX          ETASYS          < SAUVEGARDE DANS X DE 'ETASYS', AU CAS
                                     < OU LA SEQUENCE DE BALAYAGE DE LA MEMOIRE
                                     < AURAIT DETECTEE L'ABSENCE DE LA MEMOIRE
                                     < DE LA TELEVISION NUMERIQUE...
         BSR         ASMPUI          < LECTURE DU PUPITRE DANS 'A'
                                     < DE ETAT DU PUPITRE DANS 'B'
                                     < ET CARY=INFORMATION VALIDE (1).
         JNC         SYSINJ          < INFORMATION NON VALIDE, RELECTURE
         STA         ETASYS          < SAUVEGARDE DES CLEFS (MODALITES DE
                                     < L'INITIALISATION) DANS ETASYS.
         JANE        Z998XX          < PUPITRE DIFFERENT DE '0000...
XWOR%1:  VAL         NSPDKU-NSPDK?COSBT=FMASK(K=FCINST
XWOR%1:  VAL         NSPDKM-NSPDK?COSBT=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         NSPDKF-NSPDK?COSBT=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         XXRACK?TVEXIS=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         CORBT?BRCDKF=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         CORBT?OTODLN=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         CORBT?OTOCFM=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         CORBT?OTOCOP=FMASK(K?XWOR%1=FCINST
XWOR%2:  VAL         MKCOP=K
XWOR%3:  VAL         BIT>XWOR%2-N)MFFFF
XWOR%4:  VAL         MKCOP)MFFFF(XWOR%3
XWOR%5:  VAL         XWOR%4=K
XWOR%6:  VAL         NBITMO-XWOR%5
XWOR%6:  VAL         -XWOR%6
XWOR%7:  VAL         Q8000>XWOR%6(MKCOP < CADRAGE DE 'Q8000' SUIVANT 'MKCOP'.
XWOR%1:  VAL         XWOR%1?XWOR%7   < CONSTANTE DE COPY...
XWOR%1:  VAL         COSBT?XETAIR=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?XETAIA=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?RECON=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?QSHS=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         CORBT?BTRYDK=FMASK(K?XWOR%1=FCINST
                                     < VALEUR INITIALE DE 'ETASYS'.
XWOR%2:  VAL         COSBT?MEMVO=FMASK(K=FCINST
XWOR%2:  VAL         COSBT?MEMVN=FMASK(K?XWOR%2=FCINST
XWOR%2:  VAL         COSBT?MEMVF=FMASK(K?XWOR%2=FCINST
XWOR%2:  VAL         CORBT?XSYNC0=FMASK(K?XWOR%2=FCINST
XWOR%2:  VAL         CORBT?MEMXXX=FMASK(K?XWOR%2=FCINST
XWOR%2:  VAL         CORBT?XXXJFC=FMASK(K?XWOR%2=FCINST
XWOR%2:  VAL         CORBT?XBTOVI=FMASK(K?XWOR%2=FCINST
XWOR%2:  VAL         CORBT?YBTOVI=FMASK(K?XWOR%2=FCINST
                                     < VALEUR INITIALE DE 'MEMV'.
         LRM         A,B
ITASYS:  EQU         $
         WORD        XWOR%1          < FUTUR 'ETASYS',
         BYTE        XMAXIO+I;XWOR%2 < FUTUR 'MEMV'.
         STB         MEMV            < MISE EN PLACE DE 'MEMV'...
         LR          X,B             < (B)='ETASYS' AVANT SA GENERATION,
         TBT         NBITMO+TVEXIS   < LA MEMOIRE DE LA TELEVISION EST-ELLE LA ?
         JC          Z998YX          < OUI, APPAREMMENT...
         RBT         TVEXIS          < NON, ON SUPPRIME 'TVEXIS' DANS
                                     < 'ETASYS' DEFINITIF...
Z998YX:  EQU         $
         STA         ETASYS          < MISE EN PLACE DE 'ETASYS'...
         JMP         Z998XY          < ET VERS LE RECOVERY...
Z998XX:  EQU         $
         TBT         NSPDKM-NSPDK    < A-T'ON INDIQUE 'DKM' ???
         JNC         SYSINJ          < NON, ON REDEMANDE...
         BSR         ASMPUO          < AFFICHE
Z998X:   EQU         $
         BSR         ASMPUI          < D'ACCORD?
                                     < CARY=INFORMATION VALIDE (1).
         JNC         Z998X
         JANE        SYSINJ          < NON
Z998XY:  EQU         $
<
<
<        E S P A C E   M E M O I R E   R E E L  :
<
<
         LA          ATOP            < (A)=NBRE DE MOTS +1 OCCUPES PAR
                                     <     SYSTEME, ET ARRONDI AU MULTIPLE
                                     <     DE YY7 IMMEDIATEMENT SUPERIEUR.
         SLRS        YY7=K           < (A)=NBRE DE BUFFERS DE YY7 MOTS
                                     <     OCCUPES PAR LE SYSTEME, ET DONC
                                     <     A RETIRER A L'ALLOCATION MEMOIRE.
         LR          A,X
         LYI         FONRB0          < FONCTION RESET BIT A 0.
         LAD         ATOM            < RELAI VERS LA TABLE D'ALLOCATION
                                     < MEMOIRE A ADRESSAGE MOT.
E727:    EQU         $
         ADRI        -I,X
         CPZR        X
         JL          E726            < OK, FINI...
         BSR         ATMOBT          < LES BUFFERS OCCUPES PAR LE
                                     < SYSTEME SONT RECUPERES 1 A 1.
         JMP         E727            < AU SUIVANT.
<
< VALIDATION DES ESPACES MEMOIRE :
< CES VALIDATIONS APPARTIENNENT
< NORMALEMENT A 'SVCMEM', MAIS
< MALHEUREUSEMENT 'XXLBM' Y EST
< ENCORE INCONNU...)
<
XWOR%6:  VAL         LK*NOCMO=K      < LK*NOCMO EST LA TAILLE OCTET MINIMALE
                                     < DISPONIBLE POUR L'UTILISATEUR.
XWOR%3:  VAL         UMEM2K*LK*NOCMO=K
XWOR%3:  VAL         -XWOR%3         < POUR UN DECALAGE A DROITE...
XWOR%4:  VAL         MXMEME>XWOR%3   < NOMBRE MAX DE UMEM2K-BLOCS ALLOUABLES
                                     < A UN UTILISATEUR...
XWOR%1:  VAL         XXLBM-ZERO
XWOR%1:  VAL         XWOR%1)MMOT     < LISTE DES UMEM2K-BLOCS ALLOUABLES,
XWOR%5:  VAL         K               < ET INITIALISATION DE LEUR CUMUL.
XWOR%2:  VAL         BIT>NBITCX-BIT  < MASQUE D'UN CHIFFRE HEXA-DECIMAL.
         DO          NBITMO
XWOR%1:  VAL XWOR%1=K=FCPUSH-NBITMO+B)MMOT+N(XWOR%2+CORBT=FMASK+XWOR%1=FCINST
         DO          NBITMO
XWOR%5:  VAL         K=FCPULL-NBITMO=FCSIGN+XWOR%5
XWOR%5:  VAL         -XWOR%5
         IF          XWOR%5-XWOR%4,,,XEIF%
         IF          ATTENTION : LE PLUS GRAND ESPACE POSSIBLE DES
         IF          UTILISATEURS NE POURRA JAMAIS ETRE ALLOUE !!!
XEIF%:   VAL         ENDIF
XWOR%7:  VAL         COSCLS+NBITMO-B-XWOR%6=FMASK(K?MXMEME=FCINST
XWOR%8:  VAL         OPMEM4
XWOR%9:  VAL         BIT>NBITCX-BIT  < MASQUE D'UN CHIFFRE HEXA-DECIMAL.
         DO          NBITMO
XWOR%8:  VAL XWOR%8=K=FCPUSH-NBITMO+B)MMOT+N(XWOR%9+CORBT=FMASK+XWOR%8=FCINST
XWOR%8:  VAL         K               < INITIALISATION DU COMPTAGE...
         DO          NBITMO
XWOR%8:  VAL         K=FCPULL-NBITMO=FCSIGN+XWOR%8
XWOR%8:  VAL         -XWOR%8         < NOMBRE DE BITS A 1 DANS 'OPMEM4'...
         IF          XWOR%7-XWOR%8,XEIF%,XEIF%,
         IF          ATTENTION : LA LISTE DES BLOCS DE 2K UTILISEE
         IF          PAR 'AL4'/'RL4' N'EST PAS COMPATIBLE AVEC LES
         IF          DEMANDES POTENTIELLES DES UTILISATEURS !!!
XEIF%:   VAL         ENDIF
         IF          XWOR%5-XWOR%8,XEIF%,XEIF%,
         IF          ATTENTION : 'OPMEM4' NE SUFFIT PAS POUR CORRESPONDRE
         IF          AVEC LES BLOCS DE 2K ALLOUABLES !!!
XEIF%:   VAL         ENDIF
<*******************************************************************************
E727X1:  CPI         XWOR%7          < POUR VALIDER LE 'COESC' DE 'SVCMEM'...
XWOR%7:  VAL         '0000000@@@@    < RECUPERATION DU CODE GENERE...
<*******************************************************************************
CPIMEM:  EQU         ZERO+XWOR%7     < DEFINITION D'UNE INSTRUCTION EN AVANT
                                     < POUR LE 'SVCMEM'...
         $EQU        E727X1          < ET ANNULATION DU CODE GENERE...
<
< FIN DU CALCUL DE L'ESPACE MEMOIRE REEL :
<
E726:    EQU         $
<
<
<        L A N C E M E N T   D U   S Y S T E M E  :
<
<
SYSRUN:  EQU         $
<
< ARMEMENT DE LA TACHE SOFT INEXISTANTE :
<
         ARM         NSNSP0+NSPTSI   < HDLTSI SE MET EN ATTENTE D'UN
                                     < APPEL DE TACHE SOFT INEXISTANTE.
<
< ARMEMENT DU RUNNER DES ESCLAVES :
<
         ARM         NSNSP0+NSPRUN
<
< ARMEMENT DE LA TACHE DE TRAITEMENT DES SVC ESCLAVES :
<
         ARM         NSNSP0+NSPSVC
<
< ARMEMENT DE END-JOB :
<
         ARM         NSNSP0+NSPEJ
<
< ARMEMENT DU RELEASEUR DES CLEFS D'UN FICHIER DELETE :
<
         ARM         NSNSP0+NSPRCF   < LA TACHE HDLRCF PREND LA MAIN,
                                     < MAIS NE VA PAS TARDER A LA
                                     < RENDRE, CAR IL N'Y A ENCORE
                                     < AUCUN FICHIER A DELETER.
<
< TRANSFERT DE LA ZONE DE SIMULATION DE 'DKF'
< SUR 'DKM' AU MILIEU DE 'DKM' :
< NOTA : CECI EST FAIT SYSTEMATIQUEMENT
< AFIN QUE SI L'ON DESIRE RELIRE LA COPY
< LES ADRESSES SOIENT BONNES ( A MOINS
< QUE DES MODIFICATIONS SOIENT A APPORTER
< A LA TABLE DE VIRTUALISATION DE 'DKM'
< PAR LE 'BSR ASYSER'...
<
XWOR%1:  VAL         IJIJDX          < NUMERO DU 'GB0',
XWOR%2:  VAL         NBGB-XWOR%1/XXXMOY
                                     < NUMERO APPROXIMATIF DU 'GB' CENTRAL,
XWOR%3:  VAL         NBSPGB*QUANTA   < NOMBRE DE SECTEURS PHYSIQUES PAR 'GB',
XWOR%4:  VAL         XDKMSP*XDKMPC*CAXCYL
                                     < NOMBRE DE SECTEURS PHYSIQUES PAR
                                     < GROUPE DE CYLINDRES.
         NTRN
XWOR%5:  VAL         XWOR%3+XWOR%4-E/XWOR%4
         TRN
                                     < NOMBRE PAR EXCES DE GROUPES DE CYLINDRES
                                     < PAR 'GB'.
XWOR%6:  VAL         XWOR%1-IJIJDX*XWOR%5
XWOR%7:  VAL         XWOR%2-IJIJDX*XWOR%5
         LXI         XWOR%5          < (X)=NOMBRE D'ECHANGES A FAIRE,
         LYI         XWOR%6          < (Y)=INDEX DU 'GB0',
         LBI         XWOR%7          < (B)=INDEX DU 'GB' CENTRAL.
GIDLF1:  EQU         $
         XR          X,Y
         LBY         &BTVDKM         < ACCES A UN GROUPE DU 'GB0',
         XR          X,B
         LR          A,W             < (W)=SAUVEGARDE D'UN GROUPE DU 'GB0',
         LBY         &BTVDKM         < ACCES A UN GROUPE DU 'GB' CENTRAL,
         XR          A,W
         STBY        &BTVDKM         < ET ECHANGE,
         LR          W,A             < (A)=GROUPE DU 'GB' CENTRAL,
         ADRI        I,X
         XR          X,B
         STBY        &BTVDKM         < GENERATION D'UN GROUPE DE 'GB0'.
         ADRI        I,X
         XR          X,Y
         JDX         GIDLF1          < AU GROUPE SUIVANT...
         NLS
<
< INVERSION DE LA TABLE DE
< VIRTUALISATION DE 'DKM'
< AFIN D'EMPECHER UNE RE-
< LECTURE STRUCTUREE (C'EST-A
< DIRE EN UTILISANT LES CHAINAGES
< LOGIQUES COMME DES ADRESSES
< PHYSIQUES :
<
         LXI         GAXCYL          < (X)=NOMBRE DE BLOCS DE VIRTUALISATION,
GIDM1:   EQU         $
         ADRI        -I,X            < AU BLOC PRECEDENT,
         LBY         &BTVDKM         < (A)=BLOC COURANT,
         PSR         A               < QUE L'ON EMPILE DANS UN SENS...
         CPZR        X
         JG          GIDM1           < AU PRECEDENT...
         LXI         GAXCYL          < (X)=NOMBRE DE BLOCS DE VIRTUALISATION,
GIDM2:   EQU         $
         ADRI        -I,X            < AU BLOC PRECEDENT,
         PLR         A               < ET ON DEPILE A L'ENVERS,
         STBY        &BTVDKM         < ET ON INVERSE DONC 'TVDKM'...
         CPZR        X
         JG          GIDM2           < AU PRECEDENT...
         LST
<
< PATCH MANUEL DE 'TVDKM' :
<
         BSR         ASYSER          < POUR PATCHER EVENTUELLEMENT LA
                                     < TABLE DE VIRTUALISATION DE 'DKM'...
<
<
<        I N I T I A L I S A T I O N   D E   L ' A R B R E  :
<
<
         LA          ETASYS          < RECUPERATION DES L'ETAT DU
                                     < SYSTEME, CORRESPONDANT EN
                                     < PARTIE AUX CLEFS LUES AU
                                     < PUPITRE.
         TBT         XETAIR          < FAUT-IL INITIALISER LA RACINE
                                     < DU SYSTEME ???
         JNC         GIDLE           < NON, RIEN DU TOUT...
         TBT         XETAIA          < FAUT-IL INITIALISER L'ARBRE
         JC          NTRINI          < NON PAS DE RACINE, ET DE PLUS,
                                     < ALLONS FAIRE LA REINITIALISATION...
         JMP         $               < ON N'EST JAMAIS ASSEZ PRUDENT...
                                     < GRACE A CE 'JMP''$', ON PEUT ENCORE
                                     < CHANGER D'AVIS, ET RECHARGER LE SYS-
                                     < TEME AVEC LA COPY ANTERIEURE EN LE
                                     < RE-BOOTSTRAPANT...
         NLS
<
< DANS LE CAS D'UNE INITIALISATION
< GENERALE, ON VA AUTORISER L'ACCES
< A ":SYS" SANS TOM ED ESSAP POUR
< LE PREMIER LOGIN, AFIN DE PERMETTRE
< LE DEMARRAGE SI JE NE SUIS PAS LA...
<
         LA          AN337X
         STA         &AAN335         < ET VOILA LE TRAVAIL ??!?!?!
         LST
<
< INITIALISATION DE LA RACINE PAR (:SYS,:EAO,:USE,:JFC) :
<
         LAD         DEMSYS
         LR          A,W
         BSR         ACALLW          < INSERTION DE L'ACN DU SYSTEME.
         ADRI        DEMSEC-DEMSYS,W
         BSR         ACALLW          < INSERTION DE L'ACN SECRET (!!!).
         ADRI        DEMEAO-DEMSEC,W
         BSR         ACALLW          < INSERTION DE L'ACN DE 'SMC'...
         ADRI        DEMUSE-DEMEAO,W
         BSR         ACALLW          < INSERTION D'UN ACN DE TRAVAIL.
         ADRI        DEMJFC-DEMUSE,W
         BSR         ACALLW          < INSERTION DE MON <ACN>...
         ADRI        DEMSIM-DEMJFC,W
         BSR         ACALLW          < INSERTION DE L'ACN DE SIMULATION.
<
<
<        I N I T I A L I S A T I O N   D E   L A
<        T E L E V I S I O N   N U M E R I Q U E  :
<
<
<        NOTA :
<                      BIEN QUE CELA SOIT FAIT DANS LE
<                    RESTART, ON LE FAIT DE NOUVEAU AUSSI,
<                    EN EFFET :
<                    1 - DANS LE RESTART, LA REINITIALISATION
<                    SERA UTILE A LA SUITE D'UN DEFAUT SECTEUR;
<                    2 - DANS LE SYSINI, C'EST A LA SUITE
<                    D'UN RECHARGEMENT DU SYSTEME; IL FAUT DONC
<                    ATTENDRE QUE LA COPIE AIT ETE RESTAUREE...
<
<
GIDLE:   EQU         $
         LRM         A,B
         WORD        GOCOL           < (A)=ADRESSE DU MODULE D'INITIALISATION,
         WORD        RETCOM          < (B)=ADRESSE DE RETOUR DU MODULE...
         PSR         A
         RSR                         < 'GOTO' VERS 'GOCOL' POUR FAIRE COMME
                                     < DANS LE 'RESTART'...
RETCOM:  EQU         $
         BSR         ASYSER          < E N T R E E   D E   L A   D A T E   E T
                                     < D ' E V E N T U E L S   P A T C H E S...
<
< COMPTABILISATION, ET VALIDATION
< DE L'ESPACE DISQUE DISPONIBLE :
<
         LBI         K               < (B)=VALEUR INITIALE DU CUMUL,
         LXI         NBGB            < (X)=INDEX COURANT DES 'GB'.
GIDLE3:  EQU         $
         LA          &ANSLGB         < (A)=OCCUPATION DU 'GB'(X),
         JALE        GIDLE4          < IL EST VIDE (A=K), OU BIEN INACCESSIBLE
                                     < (XXINGB=1) A L'ALLOCATION.
         IF          XXINGB-BITSIG,,XEIF%,
         IF          ATTENTION : LE TEST PRECEDENT EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         ADR         A,B             < CUMUL DU 'GB' COURANT S'IL EST UTILISABLE
GIDLE4:  EQU         $
         JDX         GIDLE3          < AU 'GB' PRECEDENT...
         LR          B,A             < (A)=NOMBRE DE Q-SECTEURS DISPONIBLES
                                     <     REELLEMENT POUR L'ALLOCATION,
         JAE         $               < 2 POSSIBILITES :
                                     < 1- L'ESPACE DISQUE EST ENTIEREMENT
                                     <    ALLOUE,
                                     < 2- LE CUMUL NE TIENT PAS SUR 16 BITS,
                                     <    VOIR ALORS "MANUELLEMENT" LA
                                     <    TABLE 'NSLGB'...
         CP          NSL             < EST-IL EGAL AU NOMBRE DE Q-SECTEURS
                                     < THEORIQUEMENT LIBRES ???
         JNE         $               < NON : CE N'EST PAS FORCEMENT UNE ERREUR
                                     < DU SYSTEME, EN EFFET ON A PU RENTRER
                                     < DES PATCHES INHIBANT DES 'GB' POUR
                                     < SIMULER 'DKU' SUR 'DKM' PAR EXEMPLE...
         STA         NSL             < (A)=NOMBRE DE Q-SECTEURS REELLEMENT
                                     <     DISPONIBLES.
<
< MISE A JOUR DE LA TABLE DE VIRTUALISATION
< DE 'DKM' POUR LE BOOTSTRAP 'DKM' :
<
         LRM         A,B,X
         WORD        TVDKM           < (A)=EMETTEUR : TABLE DE VIRTUALISATION
                                     <     DE 'HDLDKM' QUI VIENT D'ETRE EVENTUEL
                                     <     LEMENT REINITIALISE PAR LA COPY..
         WORD        TVDKMP          < (B)=RECEPTEUR DANS LE BOOTSTRAP 'DKM',
         NTRN
         WORD        GAXCYL+NOCMO-E/NOCMO
         TRN
                                     < (X)=NOMBRE DE MOTS A DEPLACER...
         MOVE                        < ET VOILA...
<
< GENERATION SYSTEMATIQUE DU BOOTSTRAP :
<
         LRM         W
         WORD        DEMBOT          < (W)=ADRESSE DE LA DEMANDE DE GENERATION
                                     <     DU NOYAU DE BOOT-STRAP,
         BSR         ACALLW          < QUE L'ON ENVOIE, AVEC ATTENTE...
<
< INITIALISATION DE L'HORLOGE : ON LE FAIT
< APRES L'INITIALISATION DU SYSTEME, AFIN
< DE NE PAS MODIFIER EVENTUELLEMENT LA ZONE
< DE COPY DU SYSTEME...
<
         LRM         W
         WORD        HORINI          < (W)=ADRESSE D'INITIALISATION,
         BSR         ACHAND          < QUE L'ON ENVOIE A L'HORLOGE...
<
< ARMEMENT DU HANDLER MULTIPLEXEUR :
<
         ARM         NSNSP0+NSPMUL
                                     < CET ARMEMENT EST PLACE APRES
                                     < L'ENTREE DES NUMEROS DE COMPTE
                                     < AFIN D'EVITER DES PROBLEMES AU
                                     < NIVEAU DE L'ACCES A LA DCT DE
                                     < GESTION DE L'ABRE DU SYSTEME !!!
<
<
<        A R M E M E N T   D E   L ' I D L E  :
<
<
         LRM         W
         WORD        BCOPY
         STZ         SYNCOP,W        < DEVERROUILLAGE DU BUFFER DE COPY A
                                     < L'USAGE DU PROCESSEUR ESCLAVE...
         ARM         NSNSP0+NSPIDL   < LA TACHE IDLE PREND LA MAIN.
                                     < PRIORITES ).
         JMP         $               < JE VOUDRAIS BIEN SAVOIR QUAND EST-CE QUE
                                     < L'ON PASSERA ICI ?!???!!??!...
<
<
<        R E I N I T I A L I S A T I O N   D U   S Y S T E M E  :
<
<
NTRINI:  EQU         $
         LAD         DCOPY1
GIDLEB:  EQU         $               < POINT D'ITERATION DANS LE CAS D'UN
                                     < CHECKSUM MAUVAIS SUR UNE COPY.
         LR          A,W             < (W)=ADRESSE DE LA DEMANDE DE LECTURE 'DKF
         BSR         ACALLW          < ENVOI DE LA DEMANDE DE LECTURE AVEC
                                     < ATTENTE ACTIVE DE FIN DE SERVICE...
         PSR         L
         LXI         NSPSAV
         BSR         ACADCT          < RENVOIE : (L)=ADRESSE DE LA LISTE DES
                                     < RESTAURATIONS.
         LR          L,W             < (W)=ADRESSE DE LA LISTE DES RESTAURATIONS
         PLR         L
         LRM         Y
         WORD        BCOPY           < (Y)=ADRESSE DU BUFFER.
         PSR         Y,W             < SAUVEGARDE DE L'ADRESSE DU BUFFER DE
                                     < 'COPY' ('Y') ET DE L'ADRESSE DE LA
                                     < LISTE DES RESTAURATIONS ('W').
NTRINJ:  EQU         $
         LA          XCOPAD,W        < (A)=ADRESSE DE L'ELEMENT COURANT.
         JAE         GIDLE1          < C'EST LA FIN DE LISTE...
         LR          A,B             < (B)=ADRESSE DE L'ELEMENT COURANT.
         LR          Y,A             < (A)=ADRESSE COURANTE DU BUFFER.
         LX          XCOPLO,W        < (X)=NOMBRE DE MOTS A RESTAURER.
         CPZR        X               < EST-CE UNE INFORMATION A VALIDER ???
         JGE         GIDLE7          < OUI, (X)>=K...
         NGR         X,X             < NON, (X)<0...
GIDLE7:  EQU         $
         ADR         X,Y             < PREPARATION DE L'ADRESSE BUFFER SUIVANTE.
         MOVE                        < RESTAURATION...
         ADRI        XLCOPY,W        < PASSAGE A L'ELEMENT SUIVANT...
         JMP         NTRINJ
<
<
<        T E S T   D ' U N   M A U V A I S   A R R E T
<        D U   S Y S T E M E   P R E C E D E N T  :
<
<
GIDLE1:  EQU         $
<
< VALIDATION DU CHEKSUM DE LA COPY :
<
         BSR         ACKCOP          < CALCUL ET VALIDATION DU CHECKSUM...
         JE          GIDLEA          < OK, LE CHECKSUM EST OK... MAIS ATTENTION,
                                     < IL SE PEUT QUE CE SOIT LA DEUXIEME
                                     < COPY 'DCOPYV' QUE L'ON VIENNE DE VALIDER,
                                     < AUQUEL CAS LE TEST DE COHERENCE QUI
                                     < VA SUIVRE EST FORCEMENT POSITIF, PUIS-
                                     < QU'ON VA COMPARER LA DEUXIME COPY
                                     < AVEC ELLE-MEME !!!
         JMP         $               < AVERTISSEMENT D'UNE MAUVAISE COPY !!!
         PLR         Y,W             < RATTRAPAGE DE LA PILE...
         LAD         DCOPYV          < POUR LIRE LA DEUXIEME COPY...
         JMP         GIDLEB          < VERS LA RESTAURATION A PARTIR DE
                                     < DEUXIEME COPY...
GIDLEA:  EQU         $
<
< VALIDATION MOT A MOT DE LA 'COPY' : CETTE
< RESTAURATION EST FAITE MOT A MOT, ET NON
< PAS GLOBALEMEMT, A L'AIDE D'UN DEUXIEME
< BUFFER 'BCOPY', AFIN DE SAVOIR FACILEMENT
< OU SE SITUENT LES DIFFERENCES :
< (NOTA : RAPPELONS QU'IL EST POSSIBLE
< QUE L'ON SOIT EN TRAIN DE COMPARER
< LA DEUXIEME COPY AVEC ELLE-MEME...)
<
         LAD         DCOPYV
         LR          A,W             < (W)=ADRESSE DE LA DEMANDE DE VALIDATION,
         BSR         ACALLW          < ENVOI DE LA DEMANDE DE VALIDATION, AVEC
                                     < ATTENTE ACTIVE DE FIN DE SERVICE.
         BSR         ACKCOP          < CALCUL DU CHEKSUM, ET VALIDATION...
         JNE         $               < AVERTISSEMENT D'UNE MAUVAISE COPY !!!
         PLR         Y,W             < RESTAURE :
                                     < (Y)=ADRESSE DU BUFFER DE VALIDATION,
                                     < (W)=ADRESSE DE LA LISTE DES ELEMENTS.
         PSR         L
NTRINK:  EQU         $
         LA          XCOPAD,W        < (A)=ADRESSE DE L'ELEMENT COURANT,
         JAE         GIDLE5          < C'EST FINI...
         LR          A,L             < (L)=ADRESSE DE L'ELEMENT COURANT,
         LX          XCOPLO,W        < (X)=NOMBRE DE MOTS LE COMPOSANTS.
         CPZR        X               < EST-CE UNE INFORMATION A VALIDER ???
         JGE         NTRINM          < OUI, (X)>=K...
         SBR         X,Y             < OUI, (X)<0, DANS CES CONDITIONS, ON NE
                                     < VALIDE PAS, ET ON FAIT PROGRESSER 'Y'
                                     < SUR LE BLOC SUIVANT DE VALIDATION...
         JMP         GIDLE8          < A LA VALIDATION SUIVANTE...
NTRINM:  EQU         $
NTRINL:  EQU         $
         XR          Y,L
         LA          O,L             < (A)=VALEUR DE VALIDATION (DEUXIEME
                                     <     ZONE DE 'COPY'),
         XR          Y,L
         CP          O,L             < EST-ELLE EGALE A LA VALEUR RESTAUREE
                                     < (DEUXIEME ZONE DE 'COPY') ???
         JNE         $               < NON, INCOHERENCE, EN TOUT CAS :
                                     < (W)=ADRESSE DU DESCRIPTEUR DE L'ELEMENT
                                     <     EN CAUSE,
                                     < (L)=BASE LE MOT COURANT DE L'ELEMENT
                                     <     COURANT,
                                     < (A)=VALEUR DE VALIDATION DE CE DERNIER...
         JMP         GIDLE6          < EN GENERAL...
         STA         O,L             < MAIS DE TEMPS EN TEMPS, ON CORRIGE
                                     < LA RESTAURATION...
GIDLE6:  EQU         $
         ADRI        P,L             < PASSAGE AU MOT SUIVANT DE L'ELEMENT
                                     < COURANT ('W'),
         ADRI        P,Y             < PASSAGE AU MOT SUIVANT DE VALIDATION...
         JDX         NTRINL          < AU MOT SUIVANT S'IL EXISTE...
GIDLE8:  EQU         $
         ADRI        XLCOPY,W        < NON, PASSONS A L'ELEMENT
         JMP         NTRINK          < SUIVANT ('W'), S'IL EXISTE...
GIDLE5:  EQU         $
         PLR         L
<
< TEST DE FICHIERS 'SGF' OUVERTS :
<
         LRM         X,W
         WORD        UDE*NMDE        < (X)=NOMBRE DE MOTS OCCUPES PAR LES
                                     <     DESCRIPTEURS D'ENREGISTREMENT 'SGF'.
         WORD        TDE             < (W)=ADRESSE DE CES DESCRIPTEURS...
         LAI         K               < CLEAR DU CUMUL...
GIDLE2:  EQU         $
         OR          O,W             < AFIN DE SAVOIR SI AU MOINS UN MOT
                                     < EST NON NUL...
         ADRI        P,W             < AU MOT SUIVANT,
         JDX         GIDLE2          < S'IL EXISTE...
         JANE        $               < ON SE BLOQUE SI (A)#0 : EN EFFET, CELA
                                     < SIGNIFIE QUE LE SYSTEME PRECEDENT A
                                     < ETE ARRETE ALORS QUE DES ENREGISTREMENTS
                                     < ETAIENT OUVERTS ; IL CONVIENT DONC DE
                                     < NOTER ICI (SUR UN MORCEAU DE PAPIER)
                                     < LES NOMS INTERNES DES FICHIERS EN CAUSE,
                                     < AINSI QUE LES TETES ET QUEUES DES
                                     < ENREGISTREMENTS POUR ESSAYER DE REPARER
                                     < MANUELLEMENT LES DOMMAGES...
         JAE         GIDLF7          < OK, TOUS LES FICHIERS SONT FERMES...
<
< TENTATIVE DE RECUPERATION DES
< FICHIERS MALHEUREUSEMENT OUVERTS :
<
         LRM         X,Y,W
         WORD        NMDE            < (X)=NOMBRE DE DESCRIPTEURS D'ENREGIS-
                                     <     TREMENT,
         WORD        DRFILE          < (Y)=ADRESSE DE LA DEMANDE D'ACCES A LA
                                     <     MEMOIRE VIRTUELLE,
         WORD        TDE             < (W)=ADRESSE DU PREMIER DESCRIPTEUR
                                     <     D'ENREGISTREMENT.
GIDLF9:  EQU         $
         PSR         X               < SAVE LE DECOMPTAGE DES DESCRIPTEURS
                                     < D'ENREGISTREMENT...
         LAI         K               < CLEAR LE REGSITRE 'A',
         DO          UDE
         OR          K=FCDO,W        < LE DESCRIPTEUR (W) EST-IL OCCUPE ???
         JAE         GIDLF2          < NON, AU SUIVANT...
<
< VALIDATION DU DESCRIPTEUR :
<
         CPZ         DEMO0,W         < TETE DE L'ENREGISTREMENT :
         JE          $               < PUIS ALLER EN 'GIDLF2'...
         CPZ         DEMO1,W         < QUEUE DE L'ENREGISTREMENT :
         JE          $               < PUIS ALLER EN 'GIDLF2'...
         CPZ         DENI,W          < NOM INTERNE DU FICHIER :
         JLE         $               < PUIS ALLER EN 'GIDLF2'...
         CPZ         DEMO2,W         < MAIS EN FAIT, EST-CE UN FICHIER 'OLD'
                                     < OU 'NEW' ???
         JE          GIDLF2          < LES FICHIERS 'NEW' SONT MALHEUREUSEMENT
                                     < IRRECUPERABLES !!!
<
< CAS OU ON A DECOUVERT UN DESCRIPTEUR
< OCCUPE CORRESPONDANT A UN FICHIER OCCUPE :
<
         LAI         FGR             < (A)=FONCTION DE LECTURE,
         LB          DEMO2,W         < (B)=ADRESSE DU SECTEUR DE LA LISTE DES
                                     <     CLEFS CONTENANT LA CLEF COURANTE.
         XR          Y,W             < (Y)=ADRESSE DU DESCRIPTEUR COURANT,
                                     < (W)=ADRESSE DE LA DEMANDE D'ACCES 'DKB'.
         STA         ARGDEM+OPDEM    < MISE DE LA DEMANDE D'ACCES A 'DKB' EN
         STB         ARGDEM+ASDEM    < LECTURE DU SECTEUR (DEMO2).
         BSR         ACALLW          < ENVOI DE LA DEMANDE, ET ATTENTE...
         LR          W,X             < SAVE L'ADRESSE DE LA DEMANDE :
                                     < (X)=ADRESSE DE LA DEMANDE A 'DKB'.
         LRM         W
         WORD        BRFIL+XXSFL     < (W)=ADRESSE DU PREMIER DESCRIPTEUR DE
                                     <     CLEF DU SECTEUR (DEMO2).
GIDLF3:  EQU         $
         LA          XXKE1,W         < ACCES A LA 'PEK' :
         JAE         GIDLF4          < CAS DE LA PREMIERE CLEF ("BIDON") D'UNE
                                     < LISTE SEQUENTIELLE...
         TBT         BXKE0           < CETTE CLEF EST-ELLE LIBRE ???
         JC          GIDLF4          < OUI, A LA SUIVANTE...
         TBT         BXKE1           < EST-ELLE EN DEBORDEMENT ???
         JC          GIDLF4          < OUI, A LA SUIVANTE...
         LA          XXKE2,W         < ACCES A LA 'PDK' :
         TBT         BXKE4           < CETTE CLEF EST-ELLE "IN-USE" ???
         JNC         GIDLF4          < NON, ELLE EST "IDLE", A LA SUIVANTE...
<
< CAS OU ON A TROUVE LA CLEF "IN USE" :
<
         RBT         BXKE4           < ON LA MET "IDLE"...
         STA         XXKE2,W
         XR          Y,W             < (Y)=ADRESSE DU DESCRIPTEUR DE LA CLEF
                                     <     COURANTE DANS LA LISTE DE CLEFS,
                                     < (W)=ADRESSE DU DESCRIPTEUR DE L'EN-
                                     <     REGISTREMENT ASSOCIE.
         LA          DEMO0,W         < (A)=ADRESSE DU PREMIER SECTEUR DE
                                     <     L'ENREGISTREMENT,
         LB          DEMO1,W         < (B)=ADRESSE DU DERNIER...
         XR          Y,W             < (Y)=ADRESSE DU DESCRIPTEUR D'ENREGISTRE-
                                     <     MENT,
                                     < (W)=ADRESSE DU DESCRIPTEUR DE LA CLEF.
         STA         XXKE3,W         < MISE A JOUR DE LA TETE DE L'ENREGISTRE-
         STB         XXKE4,W         < MENT ET DE SA QUEUE...
         LR          X,W             < RESTAURE :
                                     < (W)=ADRESSE DE LA DEMANDE D'ACCES 'DKB' :

         LAI         FGW
         STA         ARGDEM+OPDEM    < QUE L'ON MET EN ECRITURE,
         BSR         ACALLW          < ET ON REECRIT LE SECTEUR COURANT DE LA
                                     < LISTE DES CLEFS DE CE FICHIER.
         LR          B,A             < (A)=ADRESSE DU DERNIER SECTEUR DE
                                     <     L'ENREGISTREMENT :
         CP          INFINI          < EXISTE-T'IL ???
         JE          GIDLF8          < NON, RIEN A FAIRE...
         STA         ARGDEM+ASDEM    < OUI, IL FAUT VERIFIER LA FIN DE CHAINE :
         LRM         A
         WORD        YY8Q
         STA         ARGDEM+CODEM    < ON VA MANIPULER 'YY8Q' OCTETS,
         LAI         FGR
         STA         ARGDEM+OPDEM    < EN LES LISANT...
         BSR         ACALLW          < LECTURE DU SECTEUR (B) AVEC ATTENTE...
         LA          INFINI
         STA         &ABRFIL         < ON MET L'INDICATEUR 'INFINI' DE FIN
                                     < DE CHAINE,
         LAI         KEOF            < ET L'INDICATEUR 'KEOF'...
         STA         &ABRFIM
         STBY        &ABRFIM         < 2 FOIS...
         LAI         FGW
         STA         ARGDEM+OPDEM    < MISE DE LA DEMANDE EN ECRITURE,
         BSR         ACALLW          < QUE L'ON ENVOIE... AVEC ATTENTE...
         LRM         A
         WORD        YY8
         STA         ARGDEM+CODEM    < ET ON RESTAURE 'YY8'...
GIDLF8:  EQU         $
<
< FERMETURE DU FICHIER :
<
         XR          Y,W             < (W)=ADRESSE DU DESCRIPTEUR D'ENREGIS-
                                     <     TREMENT,
                                     < (Y)=ADRESSE DE LA DEMANDE 'DKB'...
         LX          DENI,W          < (X)=NOM INTERNE DU FICHIER...
         CPZR        X               < VALIDATION ???
         JLE         $               < E R R E U R   S Y S T E M E...
         LAI         MCFS
         BSR         AMTEDF          < DEMANDE DE FERMETURE EN MODE 'SAVE' DE
                                     < CE FICHIER.
         JMP         GIDLF5          < ET VERS LE PASSAGE AU FICHIER SUIVANT...
<
< PASSAGE A LA CLEF SUIVANTE :
<
GIDLF4:  EQU         $
         LA          XXKE1,W         < (A)='PEK' DE LA CLEF :
         TBT         BXKE2           < EST-CE LA DERNIERE ???
         JC          GIDLF6          < OUI ?!???!?
         ADRI        LXKE,W          < PASSE AU DESCRIPTEUR SUIVANT...
         JMP         GIDLF3
<
< CAS OU L'ON N'A TROUVE AUCUNE
< CLEF "IN USE" :
<
GIDLF6:  EQU         $
         JMP         $               < E R R E U R   S Y S T E M E...
         LR          X,W             < RESTAURE : (W)=ADRESSE DE LA DEMANDE
                                     < D'ACCES A 'DKB', ET
         XR          Y,W             < (Y)=ADRESSE DE LA DEMANDE 'DKB',
                                     < (W)=ADRESSE DU DESCRIPTEUR D'ENREGIS-
                                     <     TREMENT COURANT.
<
< PASSAGE AU DESCRIPTEUR D'ENREGISTREMENT SUIVANT :
<
GIDLF5:  EQU         $
GIDLF2:  EQU         $
         ADRI        UDE,W           < PASSAGE AU DESCRIPTEUR SUIVANT,
         PLR         X               < RESTAURE LE DECOMPTAGE DES DESCRIPTEURS
                                     < D'ENREGISTREMENT...
         JDX         GIDLF9          < S'IL EXISTE...
GIDLF7:  EQU         $
<
< TENTATIVE DE RECUPERATION DES
< SECTEURS HS DE 'DKM' ; MAIS
< ATTENTION, CELA N'EST FAIT
< QUE SI LES FONCTIONS DANGE-
< REUSES SONT AUTORISEES :
<
         LA          MEMV
         TBT         MEMXXX          < LES FONCTIONS DANGEREUSES SONT-ELLES
                                     < AUTORISEES ???
         JNC         GIDLX5          < NON, ON NE TENTE RIEN, CELA EVITERA DE
                                     < FAIRE DU BRUIT (AVEC LES 'RETURNS TO
                                     < ZERO TRACK') !!!
         LRM         A,B,X
         WORD        PQSHS           < (A)=ADRESSE DE LA PILE REELLE,
         WORD        PQSHSP          < (B)=ADRESSE DE SA COPIE,
         WORD        XQSHS           < (X)=NOMBRE DE MOTS A DUPLIQUER.
         MOVE                        < COPIE PQSHS --> PQSHSP.
         STZ         &IKQSHS         < A PRIORI, PLUS DE SECTEURS HS,
         LRM         A,X,Y,W
         BYTE        LQSHS;K         < (A)=POINTEUR DE PILE INITIAL,
         WORD        XQSHS           < (X)=NOMBRE DE MOTS A RAZER...
         WORD        PQSHSP          < (Y)=ADRESSE DE LA COPIE DE LA PILE,
         WORD        PQSHS+XQSHS     < (W)=ADRESSE COURANTE DANS 'PQSHS'.
GIDLX1:  EQU         $
         ADRI        -P,W            < PASSAGE AU MOT PRECEDENT,
         STZ         O,W             < ET ON LE RAZE...
         JDX         GIDLX1
         STA         O,W             < INITIALISATION DU POINTEUR DE PILE.
         LAD         DINIRL
         LR          A,W             < (W)=ADRESSE DE LA DEMANDE DE 'REL'...
GIDLX2:  EQU         $
         PULL                        < RECUPERATION DU SECTEUR COURANT (A).
         JV          GIDLX3          < 'PQSHSP' EST VIDE, C'EST FINI...
         STA         BINIRL          < (A)=ADRESSE DU SECTEUR COURANT,
         BSR         ACHAND          < ON ESSAYE DE LE RENDRE...
GIDLX4:  EQU         $
         LA          WEIO
         ANDI        MBETA
         JAE         GIDLX4          < ON ATTEND LA FIN DE RELEASE...
                                     < ON NE PEUT UTILISER 'CALLW' CAR IL TESTE
                                     < 'ETADEM' !!!
         JMP         GIDLX2          < AU SUIVANT...
GIDLX3:  EQU         $
GIDLX5:  EQU         $
         BR          AGIDLE          < ET PUIS, ON CONTINUE...
         PAGE
<
<
<        V E R I F I C A T I O N   D U   C H E C K S U M
<                    D E   L A   C O P Y  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME EST CHARGE DE
<                    CALCULER LE CHECKSUM DE LA COPY
<                    COURANTE ET DE DIRE S'IL EST BON...
<
<
<        RESULTAT :
<                    LES INDICATEURS POUR UN TEST EN RETOUR.
<
<
CKCOP:   EQU         $
         PSR         X,W             < PAR PRUDENCE...
         LRM         X,W
         WORD        LCOPY1-D        < (X)=NOMBRE DE MOTS SUR LESQUELS PORTENT
                                     < LE CALCUL DE CHECKSUM,
         WORD        BCOPY           < (W)=ADRESSE DU BUFFER DE COPY.
         LAI         K               < (A)=CUMUL DU CHEKSUM...
CKCOP1:  EQU         $
         EOR         O,W             < CUMUL DU CHECKSUM,
         ADRI        D,W             < AU MOT SUIVANT,
         JDX         CKCOP1          < S'IL EXISTE...
         CP          O,W             < ALORS CE CHEKSUM, IL EST BON ???
         PLR         X,W
         RSR                         < ET VOILA LE TRAVAIL...
         PAGE
<
<
<        A P P E L   C H A N D   A V E C
<        S I M U L A T I O N   D ' A T T E N T E
<        D E   F I N   D E   S E R V I C E  :
<
<
<        FONCTION :
<                      CETTE ROUTINE PERMET D'APPELER CHAND,
<                    ET ENSUITE DE SIMULER L'ATTENTE DE FIN
<                    DE SERVICE :
<                    EN EFFET :
<                    1- D'UNE PART INI NE PEUT LANCER
<                    SUMULTANEMENT PLUSIEURS DEMANDES SUR
<                    LA MEME DCT CAR ON AURAIT ALORS DES
<                    PROBLEMES DE PHASES CRITIQUES SUR LA
<                    DCT DEMANDEES QUI NE POURRAIENT
<                    S'EXCLURE PAR SPHEX, CAR LES SPHEX N'ONT
<                    PAS DE FILES D'ATTENTE SUFFISAMMENT
<                    LONGUES POUR CONTENIR INI ;
<                    2- D'AUTRE PART, INI NE PEUT EXECUTER
<                    L'INSTRUCTION WAIT, CAR IL N'Y
<                    A PAS ENCORE DE TACHE IDLE, QU'ON NE
<                    PEUT ENCORE ARMER, SOUS PEINE
<                    DE PERDE LA MAIN !!!
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DE LA DEMANDE A TRANSMETTRE A CHAND.
<
<
CALLW:   EQU         $
<
< ENVOI DE LA DEMANDE :
<
         BSR         ACHAND          < ENVOI DE LA DEMANDE (W).
<
< BOUCLE D'ATTENTE DE FIN DE SERVICE :
<
Z1400:   EQU         $
         LA          WEIO            < (A)=WEIO(DEMANDE(W)).
         ANDI        MBETA           < (A)=BETA(WEIO).
         JAE         Z1400           < TANT QUE BETA(WEIO) EST NUL
                                     < (REMIS A 0 PAR CHAND), C'EST
                                     < QUE LE SERVICE N'EST PAS RENDU ;
                                     < EN CONSEQUENCES, ON BOUCLE...
         CPZ         ARGDEM+ETADEM   < ALORS COMMENT CELA S'EST-IL PASSE ???
         JE          Z1400X          < TRES BIEN...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      CONTINUER EN PAS A PAS, ET FAIRE TRES
<                    ATTENTION EN PARTICULIER S'IL S'AGIT DE
<                    LA LECTURE DU BLOC DE COPY !!!
<
Z1400X:  EQU         $
         RSR                         < ON REND LA MAIN, LORSQUE
                                     < BETA(WEIO)=1>0 : SERVICE
                                     < RENDU (MIS A 1 PAR HANDLR).
         PAGE
<
<
<        P I L E   D ' I N I T I A L I S A T I O N  :
<
<
PILINI:  EQU         $-DEPILE
XWPILE:  VAL         LPILEH+GAXCYL+2 < (+GAXCYL POUR PERMETTRE L'INVERSION
                                     < DE LA TABLE 'TVDKM'...)
         CALL        #SISP CMS5 GENPIL2#
         PAGE
<
<
<        B O O T S T R A P S   D E   C M S 5  :
<
<
XWOR%1:  VAL         $-ZERO          < $ COURANT
         IF          XWOR%1-DOLA2,XEIF%2,,
         CALL        #SISP CMS5 DOL1# < POUR CONNAITRE DOLAR1...
         CALL        #SISP CMS5 DOL2# < POUR CONNAITRE DOLAR2...
XEIF%2:  VAL         ENDIF
         IF          XWOR%1-DOLA2,,XEIF%2,XEIF%2
         CALL        #SISP CMS5 DOL2# < POUR CONNAITRE DOLAR2...
         CALL        #SISP CMS5 DOL1# < POUR CONNAITRE DOLAR1...
         DZS         DOLA2-DOLAR1    < NETTOYAGE DE L'ESPACE LIBRE...
                                     < (MAIS ATTENTION, LE 'SYSINI' LUI N'EST
                                     < PAS REMIS A '0000...)
         $EQU        ZERO+DOLA2-Z    < POUR REVENIR EN MEMOIRE BASSE...
XEIF%2:  VAL         ENDIF
         NTRN
BLONG1:: VAL         DOLAR1-DOLA1+YM7/YY7*YY7 < LONGUEUR DU DEBUT DE 'CMS5'.
BLONG2:: VAL         DOLAR2-DOLA2+YM7/YY7*YY7 < LONGUEUR DE LA FIN DE 'CMS5',
                                              < NON COMPRIS LES BOOT-STRAPS...
         TRN
BLONGS:: VAL         BLONG1+BLONG2   < LONGUEUR TOTALE DE 'CMS5' :
                                     < C'EST TOUJOURS UTILE DE LA CONNAITRE
         PAGE
<
<
<        I M P L A N T A T I O N   F I X E   D E S   B O O T S T R A P S  :
<
<
XZBOOT:: VAL         'FD00           < ADRESSE ABSOLUE A LAQUELLE ON VA
                                     < IMPLEMENTER LES BOOT-STRAPS.
XWOR%2:  VAL         -S              < POUR FAIRE UN DECALAGE A DROITE.
XWOR%3:  VAL         XZBOOT>XWOR%2   < ADRESSE DOUBLE-MPOT DES BOOT-STRAPS.
XWOR%4:  VAL         DOLAR2+2>XWOR%2 < ADRESSE DOUBLE-MOT DOLAR2 COURANT.
         IF          XWOR%4-XWOR%3,XEIF%,,
         IF          A T T E N T I O N  : LA VALEUR DU
         IF          DOLAR2 EXCEDE CELLE PREVUE POUR
         IF          L'ADRESSE DES BOOT-STRAPS !!!
XEIF%:   VAL         ENDIF
DOLAR4:: VAL         DOLAR1          < SAUVEGARDE DU 'DOLAR1' FINAL...
         CALL        #SISP CMS5 DOL2#
XZFREE:: VAL         XZBOOT-DOLAR2   < ESPACE HAUT ENCORE DISPONIBLE...
DOLA3::  VAL         XX64K-Z*LK-Z+LK < DERNIERE ADRESSE MEMOIRE DISPONIBLE.
         DZS         XZFREE          < NETTOYAGE D'UN RESIDU D'ESPACE HAUT.
XX16K::  VAL         8               < LONGUEUR D'UN ECHANGE...
                                     < ATTENTION A CETTE TRAITRISE (LE 16 QUI
                                     < DEVIENT 8...).
         IF          XX16KK-XX16K,,,XEIF%
         IF          ATTENTION : LE BOOTSTRAPPING VA MAL SE PASSER !!!
XEIF%:   VAL         ENDIF
         PAGE
<
<
<        L O C A L   D E S   B O O T S T R A P S  :
<
<
         CALL        #SISP CMS5 CHECK#
         LOCAL
BLOCAL:  EQU         $               < LOCAL DU BOOTSTRAP
<
<
<        B O O T S T R A P   ' D K F '  :
<
<
<
< ADRESSE DU COUPLEUR 'DKF' :
<
ACDKB::  VAL         ACDKF           < ADRESSE COUPLEUR DU DISQUE UTILISE PAR
                                     < LE BOOTSTRAP 'FHD'.
BSIOEA:  WORD        ACDKB?FPHETA    < OPERANDE SIO ENTREE ETAT A.
BSIOEB:  WORD        ACDKB?FPHETB    < OPERANDE SIO ENTREE ETAT B.
BSIOCD:  WORD        ACDKB?FPHCMD    < OPERANDE SIO SORTIE COMMANDE.
BSIOSA:  WORD        ACDKB?FPHCME    < OPERANDE SIO SORTIE ADRESSE SECTEUR.
BSIOSC:  WORD        ACDKB?FPHSAD    < OPERANDE SIO SORTIE COMPTE DE SECTEURS.
<
< 'CCB' DU 'DKF' :
<
BCCB0:   WORD        K               < MOT0.
XXDK50:: VAL         K               < JEU DE REGISTRES 'HDC' POUR 'DKF',
XXDK51:: VAL         XXDK50+I        < JEU DE REGISTRES 'HDC' POUR 'DKM'.
         BYTE        CCBHDC?XSNDKF;XXDK50 < MOT1.
BCCB2:   WORD        NIL             < MOT2 : ADRESSE-MOT DU BUFFER.
BCCB3:   WORD        XX16K*LK        < MOT3 : LONGUEUR-MOT DU BUFFER.
BCCB4:   WORD        ACDKB?FPHIN     < MOT4 : OPERANDE DE 'SIO' D'ENTREE INFO.
<
< ADRESSE DES SOUS-PROGRAMMES :
<
BABECH:  WORD        BECHAN          < RELAI D'ACCES AU MODULE D'ECHANGE.
BABIPI:  WORD        BIPI            < RELAI D'ACCES AU MODULE D'ENVOI 'IPI'.
XWOR%1:  VAL         LK/YY7          < NOMBRE DE SECTEURS PAR K.
BADERS:  WORD        XX64K*XWOR%1+LOCSYS-Z
                                     < ADRESSE SECTEUR DU DERNIER
                                     < SECTEUR ECHANGE ; CETTE ADRESSE EST
                                     < UTILISEE POUR FAIRE UN CONTROLE
                                     < EN FIN DE BOOTSTRAP FHD.
BASSY:   WORD        LOCSYS          < ADRESSE SECTEUR DU SYSTEME, MAIS
                                     < A T T E N T I O N  : ELLE N'A RIEN A VOIR
                                     < AVEC 'SECTSY'.
BC0800:  WORD        MIPM            < POUR MASK/DEMASK 'IPI' DANS 'ST'...
<
<
<        B O O T S T R A P   ' D K M '  :
<
<
< ADRESSE DU COUPLEUR 'DKM' :
<
BACDKM:: VAL         ACDKM           < ADRESSE COUPLEUR DU DISQUE AMOVIBLE
                                     < UTILISE PAR LE BOOTSTRAP 'DKM'.
BMSEA:   WORD        BACDKM?FPHETA   < OPERANDE SIO ENTREE ETAT A.
BMSEB:   WORD        BACDKM?FPHETB   < OPERANDE SIO ENTREE ETAT B.
BMSSA:   WORD        BACDKM?FPHCME   < OPERANDE SIO SORTIE ADRESSE.
BMSCD:   WORD        BACDKM?FPHCMD   < OPERANDE SIO SORTIE COMMANDE.
BMPUP:   WORD        ACPUP?FPHOUT    < VISUALISATION AU PUPITRE...
<
< 'CCB' DE 'DKM' :
<
BMCCB0:  WORD        COSBT?CCBDKM=FMASK(K=FCINST < MOT0 :
                                     < BIT 6=DK TETES MOBILES.
         BYTE        CCBHDC?XSNDKM;XXDK51 < MOT1 :
                                     < BITS 0-1=MODE HDC.
                                     < BITS 2-7=NIVEAU IT NORMALE.
                                     < BITS 11-15=NUMERO DU JEU DE
                                     <            REGISTRES CANAL UTILISES.
BMCCB2:  WORD        NIL             < MOT2 : ADRESSE-MOT DU BUFFER.
BMCCB3:  WORD        NILK            < MOT3 : LONGUEUR-MOT DU BUFFER.
BMCCB4:  WORD        BACDKM?FPHIN    < MOT4 : OPERANDE DE 'SIO' D'ECHANGE.
BMCCB5:  WORD        NILK            < MOT5 : 'HEADER 1' DU PREMIER SECTEUR
                                     <        A ECHANGER.
<
< ADRESSE DES SOUS-PROGRAMMES :
<
BABMEC:  WORD        BMECH           < RELAI D'ACCES AU MODULE D'ECHANGE.
<
< IMPLANTATION DU SYSTEME SUR DISQUE :
<
BMASSY:  WORD        LOCSYS          < ADRESSE A PRIORI D'IMPLANTATION
                                     < DU SYSTEME SUR 'DKM'. CETTE ADRESSE
                                     < EST PATCHABLE PAR L'UTILISATEUR.
<
< DEFINITION DE 'DKM' :
<
BMNSPP:  WORD        XDKMSP          < NOMBRE DE SECTEURS PAR PISTE.
BMNPPC:  WORD        XDKMPC          < NOMBRE DE PISTES PAR CYLINDRE.
BMSECT:  WORD        NILK            < NUMERO DE SECTEUR.
BMPIST:  WORD        NILK            < NUMERO DE PISTE.
BMCYL:   WORD        NILK            < NUMERO DE CYLINDRE.
BMCNT:   WORD        YY7             < COMPTE DE MOTS D'UN ECHANGE.
BMNECH:  WORD        LK/YY7*XX64K    < NOMBRE D'ECHANGES NECESSAIRES.
<
<
<        B O O T S T R A P   ' C R 1 '  :
<
<
< ADRESSE DU COUPLEUR 'CR1' :
<
ACCRB::  VAL         ACCR1           < ADRESSE COUPLEUR DU LECTEUR DE CARTES
                                     < UTILISE PAR LE BOOTSTRAP CARTES.
BCETA:   WORD        ACCRB?FPHETA    < OPERANDE SIO ENTREE MOT D'ETAT.
BCCDE:   WORD        ACCRB?FPHCMD    < OPERANDE SIO SORTIE COMMANDE.
BCDATA:  WORD        ACCRB?FPHIN     < OPERANDE SIO DATA IN.
<
< ADRESSE DE SOUS-PROGRAMMES :
<
BCASP1:  WORD        BCSP1           < RELAI D'ACCES AU MODULE 'SP1'.
BCASP2:  WORD        BCSP2           < RELAI D'ACCES AU MODULE 'SP2'.
<
< DEFINITION DE 'DKF' :
<
XXDK70:: VAL         'FFFF           < SECTEUR INEXISTANT DE 'DKF'...
BCADRS:  WORD        XXDK70          < INITIALISATION DE L'ADRESSE SECTEUR
                                     < SUR UN SECTEUR INEXISTANT, AFIN DE
                                     < FORCER SA DEFINITION...
<
< 'CCB' DE 'DKF' :
<
BCCB0C:  WORD        K               < MOT0.
         BYTE        CCBHDC?XSNDKF;XXDK50 <MOT1.
         WORD        BBUFS           < MOT2 : ADRESSE-MOT DU BUFFER.
         WORD        YY7             < MOT3 : LONGUEUR-MOT DU BUFFER.
         WORD        ACDKB?FPHOUT    < MOT4 : OPERANDE 'SIO' D'ENTREE.
         PAGE
         PROG
         CALL        #SISP CMS5 CHECK#
<
<
<        E N V O I   D E S   ' I P I '  :
<
<                    OU :
<
<        M O I ,   J E   F A I S   ' I P I '   O U   O N
<                    M E   D I T   D E   F A I R E ...
<
<
<        FONCTION :
<                      CE PETIT SOUS-PROGRAMME
<                    EST CHARGE D'EMETTRE LES
<                    'IPI' DES BOOT-STRAPS SUR
<                    LE PROCESSEUR QUI FAIT LE
<                    BOOTSTRAPPING...
<
<
<        ARGUMENTS:
<                    (A)=ADRESSE DU CCB.
<                    (C)=ADRESSE DE LA 'BOX'.
<
<
<        A T T E N T I O N  :
<                      DETRUIT LE REGISTRE 'A' !!!
<
<
BIPI:    EQU         $
<
< MISE EN PLACE DU 'CCB' :
<
         STA         O,C             < STOCKAGE ADRESSE CCB DANS 'BOX'
<
< AVERTISSEMENT DE L''IOP' :
<
         IPI
<
< ET ATTENTE DE FIN DE
< PRISE EN COMPTE :
<
         LA          BC0800          < POUR DEMASK DES 'IPI'
         RST                         < DEMASK 'IPI'.
BIPI1:   EQU         $
         CPZ         O,C             < TEST 'BOX'=K.
         JNE         BIPI1           < ATTENTE.
         LA          BC0800          < POUR MASK 'IPI'.
         SST                         < MASK 'IPI'.
         RSR
XXBOOT:: VAL         DEPBAS          < DEPLACEMENT DES BASES L..
         PAGE
<
<
<        B O O T S T R A P   ' D K F '  :
<
<
<        FONCTION :
<                      IL S'AGIT DU BOOTSTRAP
<                    DE BASE DE 'CMS5', PUISQUE
<                    C'EST CELUI QUI PERMET DE
<                    CHARGER LE SYSTEME A PARTIR
<                    DU DISQUE FIXE 'FHD'.
<                      ON DISPOSE DE 2 MODES D'UTILISATION
<                    DE CE BOOTSTRAP DISQUE :
<
<                    1- M O D E  ' R E A D ' :
<
<                       POINT D'ENTREE:  ' B T F H D R '
<
<                    2- M O D E  ' W R I T E ' :
<
<                       POINT D'ENTREE:  ' B T F H D W '
<
<
<        NOTA:
<                      CE BOOTSTRAP ECHANGE TOUJOURS 64 K MOTS.
<
<
<        A T T E N T I O N  :
<                      L'ADRESSE SECTEUR DU SYSTEME EST 'LOCSYS'.
<                    ELLE N'A PLUS RIEN A VOIR AVEC LA CONTANTE
<                    'SECTSY'; CETTE DERNIERE DOIT ETRE MAINTENUE
<                    A SA VALEUR ACTUELLE, DONT DEPENDENT LES
<                    IMPLANTATIONS DES SWAPPINGS ET PROCESSEURS DE BASE.
<
<
<        ON DOIT AVOIR A L'ENTREE DU BOOTSTRAP:
<
<                    I O M  =  I P M  = 1   ( FAIRE 'INI' )
<
<
XXBOOR:: VAL         K               < MODE 'READ'.
XXBOOW:: VAL         XXBOOR)BIT      < MODE 'WRITE'.
<
< POINT D'ENTREE 'LECTURE' :
<
BTFHDR:  EQU         $               <<<<< POINT D'ENTREE MODE:
                                     <<<<< R E A D
         LBI         XXBOOR          < (B)=0 : MODE   R E A D ,
         JMP         BOTFHD          < ALLONS-Y...
<
< POINT D'ENTREE 'ECRITURE' :
<
BTFHDW:  EQU         $               <<<<< POINT D'ENTREE MODE:
                                     <<<<< W R I T E
         LBI         XXBOOW          < (B)=1 : MODE   W R I T E.
<
< POINT COMMUN 'LECTURE'/'ECRITURE' :
<
BOTFHD:  EQU         $
<
< INITIALISATIONS :
<
         LRM         C,L,W,K
         WORD        BOXIPI          < (C)=ADRESSE DE 'BOX',
         WORD        BLOCAL+XXBOOT   < (L)=ADRESSE DU LOCAL DES BOOTSTRAPS,
         WORD        ABOX            < (W)=ADRESSE DE L'ADRESSE DE 'BOX',
         WORD        XXKBOT          < (K)=ADRESSE DE LA PILE DES BOOTSTRAPS.
         LR          C,A
         STA         O,W             < GENERATION DU RELAI DES BOITES...
         RDSI
         ANDI        MNUBUS?MNUPRO   < (A)=NUMERO DU PROCESSEUR,
         ADR         A,C
<
< BOUCLE D'ECHANGES :
<
         LXI         XX64K/XX16K     < (X)=NOMBRE D'ECHANGES A REALISER.
BTFHD2:  EQU         $
         LRM         A,Y,W
BTFHLA:  EQU         $               < ADRESSE DU 'LAI'...
<*******************************************************************************
         LAI         MOMSTR?MOMINT
XWOR%1:  VAL         '0000000@@@@    < CODE DU 'LAI'...
<*******************************************************************************
         $EQU        BTFHLA
         WORD        XWOR%1          < "LAI MOMSTR?MOMINT",
         WORD        ACDKB?FPHIN     < OPERANDE DE 'SIO' D'ENTREE INFORMATION,
         WORD        BECH2           < ADRESSE DU  "LAI...".
         IF          XXBOOR-K,,XEIF%,
         IF          ATTENTION : CE QUI SUIT EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         CPZR        B               < QUEL EST LE SENS DE L'ECHANGE ???
         JE          BTFHD1          < UNE ENTREE...
         SBT         COMRW           < UNE SORTIE, ON MODIFIE LE "LAI...",
         ADRI        FPHOUT-FPHIN,Y  < ET ON PASSE EN 'SIO' DE SORTIE...
BTFHD1:  EQU         $
         STA         O,W             < MISE EN PLACE DU "LAI...",
         STY         BCCB4           < ET DE L'OPERANDE DE 'SIO' DANS 'CCB4'...
         LRM         A
         WORD        XX16K*LK
         STA         BCCB3           < RESTAURATION A PRIORI DE 'BCCB3' A
                                     < CAUSE DE L'ENTREE DU COMPTE-RENDU...
         LAI         XX64K/XX16K
         SBR         X,A             < (A)=NUMERO DE L'ECHANGE COURANT (0-3).
         PSR         B
         MP          BCCB3           < (NUMERO D'ECHANGE)*(COMPTE DE MOTS), QUE
         STB         BCCB2           < L'ON MET EN ADRESSE DE BUFFER...
         LR          B,A
         PLR         B
         SLRS        YY7=K
         AD          BASSY           < (A)=ADRESSE DU PREMIER SECTEUR,
         BSR         BABECH          < ET ECHANGE...
         JDX         BTFHD2          < AU BLOC SUIVANT...
<
< POUR EVITER LA MONTEE D'UNE IT EXCEPTION LORS D'UN DEMASQUAGE
< ULTERIEUR, ON LIT LES MOTS D'ETAT ET ON FAIT UN 'RESET'
< AU PASSAGE ON CONTROLE L'ADRESSE DU DERNIER SECTEUR ECHANGE :
<
         SIO         BSIOEB          < ENTREE DU MOT D'ETAT 'B',
         LR          A,B             < (B)=MOT D'ETAT 'B',
         SIO         BSIOEA          < (A)=MOT D'ETAT 'A'.
         PSR         A
         LAI         MOMINI
         SIO         BSIOCD          < 'SIO' DE COMMANDE 'RESET'...
         PLR         A               < (A,B)=MOTS D'ETAT 'A' ET 'B'...
XXDK60:: VAL         5               < DECALAGE DE RECUPERATION DU NUMERO
                                     < DE SECTEUR DANS LE MOT D'ETAT.
         SLRS        XXDK60
         ANDI        BIT>XXDK60-BIT
         XR          A,B             < B(BITS 11-15)=NUMERO DE SECTEUR,
         ANDI        MOCD
         SLLS        XXDK60          < A(BITS 3-10)=NUMERO DE PISTE,
         ORR         B,A             < A(BITS 3-15)=ADRESSE SECTEUR,
                                     < DU DERNIER SECTEUR ECHANGE
         CP          BADERS          < VERIFICATION...
         JNE         $               < E R R E U R   S Y S T E M E ...
         LAI         K
         SBT         STOP
         SST                         < ON ARRETE LE SYSTEME, C'EST FINI...
BTFHD3:  EQU         $
         HALT
         JMP         BTFHD3
<
<
<        S O U S - P R O G R A M M E   D ' E C H A N G E
<        E L E M E N T A I R E   D E   ' D K F '  :
<
<
<        ARGUMENT :
<                    (A)=ADRESSE DU PREMIER SECTEUR A ECHANGER.
<
<
BECHAN:  EQU         $
         PLR         Y               < SAUVEGARDE DANS 'Y' DE L'ADRESSE
                                     < DE RETOUR: LA PILE PEUT EN EFFET
                                     < ETRE PERDUE EN COURS D'ECHANGE !!!
         PSR         A               < SAUVEGARDE DE L'ADRESSE SECTEUR...
BECH4:   EQU         $
         SIO         BSIOEA          < (A)=MOT D'ETAT 'A',
         TBT         ETAOPE          < 'DKF' EST-IL PRET ???
         JNC         BECH4           < SI NON, ATTENDRE...
<
< ENVOI DES ARGUMENTS :
<
         PLR         A               < RECUPERATION ADRESSE SECTEUR, ET
         SIO         BSIOSA          < SORTIE DE L'ADRESSE SECTEUR (A)...
         LA          BCCB3           < (A)=COMPTE DE MOTS,
         ADRI        YM7,A
         ANDI        YM7)MFFFF       < (A)=NOMBRE DE SECTEURS NECESSAIRES,
         SIO         BSIOSC          < SORTIE COMPTE DE SECTEURS SUR LES
                                     < BITS 1-8.
         LAD         BCCB0           < (A)=ADRESSE DU 'CCB',
         BSR         BABIPI          < ET ENVOI A L''IOP'...
BECH2:   LAI         MOMSTR+MOMINT   < I N S T R U C T I O N   V A R I A B L E.
         SIO         BSIOCD          < LANCEMENT DE L'ECHANGE AVEC LES
                                     < INTERRUPTIONS VALIDEES...
         LR          X,A             < SAUVEGARDE DE 'X',
         HALT                        < TEMPORISATION COURTE...
         HALT                        < TEMPORISATION LONGUE ((X)=0)...
         LR          A,X             < RECUPERATION DE 'X'.
<
< ENTREE DU COMPTE-RENDU (CE QUI
< PERMET ENTRE AUTRES CHOSES,
< L'ENTREE DU DERNIER MOT...) :
<
         LA          BCCB0
         SBT         BCCBCR          < MISE EN MODE COMPTE-RENDU
         STA         BCCB0           < DU 'CCB',
         LAD         BCCB0           < (A)=ADRESSE DU 'CCB',
         BSR         BABIPI          < QUE L'ON ENVOIE POUR OBTENIR LE COMPTE-
                                     < RENDU DE FIN D'ECHANGE, ET SURTOUT ECHAN-
                                     < GER LE DERNIER MOT (!???!???!).
         LA          BCCB3           < (A)=NOMBRE DE MOTS RESIDUELS,
         JANE        $               < BERKKKK !???!!!?!
         LA          BCCB0
         RBT         BCCBCR
         STA         BCCB0           < ET ENFIN, ON REMET LE 'CCB' EN MODE
                                     < ENTREE-SORTIE...
<
< RETOUR :
<
         PSR         Y               < RESTAURATION DE L'ADRESSE DE RETOUR,
         RSR                         < ET RETOUR...
         PAGE
<
<
<        B O O T S T R A P   D K M  :
<
<
<        FONCTION :
<                      CE BOOTSTRAP A LES MEMES
<                    FONCTIONNALITES QUE CELUI
<                    DE 'DKF', SI CE N'EST QU'IL
<                    GERE LE DISQUE 'DKM'.
<                      ON DISPOSE DE 2 MODES D'UTILISATION
<                    DE CE BOOTSTRAP DISQUE :
<
<                    1- M O D E  ' R E A D ' :
<
<                       POINT D'ENTREE:  ' B T D K M R '
<
<                    2- M O D E  ' W R I T E ' :
<
<                       POINT D'ENTREE:  ' B T D K M W '
<
<
<        NOTA:
<                      CE BOOTSTRAP ECHANGE TOUJOURS 64 K MOTS.
<
<
<        A T T E N T I O N  :
<                      L'ADRESSE SECTEUR DU SYSTEME EST PRISE PAR
<                    CE BOOTSTRAP DANS LE MOT 'BMASSY' DU LOCAL 'BLOCAL'.
<                    ET NON PAS DANS LE MOT 'BASSYS' !
<
<
<        ON DOIT AVOIR A L'ENTREE DU BOOTSTRAP:
<
<                    I O M  =  I P M  = 1   ( FAIRE 'INI' )
<
<
<
< POINT D'ENTREE 'LECTURE' :
<
BTDKMR:  EQU         $               <<<<< POINT D'ENTREE MODE:
                                     <<<<< R E A D
         LBI         XXBOOR          < (B)=K : MODE   R E A D ,
         JMP         BOTDKM          < ALLONS-Y...
<
< POINT D'ENTREE 'ECRITURE' :
<
BTDKMW:  EQU         $               <<<<< POINT D'ENTREE MODE:
                                     <<<<< W R I T E
         LBI         XXBOOW          < (B)=1 : MODE   W R I T E.
<
< POINT COMMUN LECTURE/ECRITURE :
<
BOTDKM:  EQU         $
<
< INITIALISATIONS :
<
         LRM         C,L,W,K
         WORD        BOXIPI          < (C)=ADRESSE DE 'BOX',
         WORD        BLOCAL+XXBOOT   < (L)=BASE DU LOCAL DES BOOTSTRAPS,
         WORD        ABOX            < (W)=ADRESSE DE L'ADRESSE DE 'BOX',
         WORD        XXKBOT          < (K)=PILE DES BOOTSTRAPS.
         LR          C,A
         STA         O,W             < MISE EN PLACE DU RELAI DES 'BOX'.
         LR          B,W             < (W)=0 : MODE 'READ',
                                     < (W)#0 : MODE 'WRITE'.
         RDSI
         ANDI        MNUBUS?MNUPRO   < 'A'=NUMERO DU PROCESSEUR.
         ADR         A,C             < D'OU L'ADRESSE DE 'BOX'...
<
< BOUCLE D'ECHANGE :
<
         LX          BMNECH          < (X)=NOMBRE D'ECHANGES NECESSAIRES.
BTDKM2:  EQU         $
         LA          BMNECH          < (A)=NOMBRE D'ECHANGES.
         SBR         X,A             < (A)=NUMERO DE L'ECHANGE COURANT (0 A N).
         MP          BMCNT           < (NUMERO D'ECHANGE)*(COMPTE DE MOTS),
         STB         BMCCB2          < D'OU L'ADRESSE MEMOIRE COURANTE...
         LR          B,A             < (A)=ADRESSE MEMOIRE COURANTE,
         SIO         BMPUP           < QUE L'ON VISUALISE AU PUPITRE...
         LA          BMCNT           < COMPTE DE MOTS.
         STA         BMCCB3          < COMPTE DE MOTS A ECHANGER.
         LR          B,A
         SLRS        YY7=K           < (A)=ADRESSE RELATIVE SECTEUR COURANT.
         AD          BMASSY          < (A)=ADRESSE SECTEUR COURANT.
         BSR         BABMEC          < ECHANGE DU SECTEUR COURANT (YY7 MOTS)...
         JDX         BTDKM2          < VERS L'ECHANGE SUIVANT...
<
< POUR EVITER LA MONTEE EVENTUELLE D'UNE INTERRUPTION
< LORS D'UN DEMASQUAGE ULTERIEUR, ON LIT LES MOTS D'ETAT A ET B
< ET ON FAIT UN 'RESET' DE 'DKM' :
<
         SIO         BMSEA           < ENTREE DU MOT D'ETAT 'A',
         SIO         BMSEB           < ENTREE DU MOT D'ETAT 'B',
         LAI         MOMINI
         SIO         BMSCD           < ET ENVOI D'UNE COMMANDE DE 'RESET'...
<
< FIN NORMALE :
<
         LAI         K
         SBT         STOP
         SST                         < ET ON ARRETE LE SYSTEME...
BTDKM7:  EQU         $
         HALT
         JMP         BTDKM7
<
<
<        E C H A N G E   D ' U N   S E C T E U R   ' D K M '  :
<
<
<        ARGUMENTS :
<                    (A)=ADRESSE DU SECTEUR COURANT,
<                    (W)=0 : LECTURE,
<                       #0 : ECRITURE.
<
<
BMECH:   EQU         $
         PSR         A               < SAUVEGARDE ADRESSE SECTEUR (INITIALE OU
                                     < DE REPRISE SUR FIN DE CYLINDRE).
<
< TEST DE L'ETAT DE 'DKM' :
<
BME1:    EQU         $
         SIO         BMSEA           < (A)=MOT D'ETAT 'A',
         TBT         ETAOPE          < 'DKM' EST-IL PRET ???
         JC          BME2            < OUI, OK...
         LAI         MOMINI          < NON,
         SIO         BMSCD           < ON ENVOIE UNE FONCTION DE 'RESET'...
         JMP         BME1            < ET ON BOUCLE.
<
< CALCUL DE L'ADRESSE PHYSIQUE :
<
BME2:    EQU         $
         LAI         K
         PLR         B               < (B)=ADRESSE SECTEUR (ANCIEN (A)).
         DV          BMNSPP
         JV          $               < E R R E U R   S Y S T E M E ...
         STB         BMSECT          < NUMERO DE SECTEUR.
         LR          A,B
         LAI         K
         DV          BMNPPC
         JV          $               < E R R E U R   S Y S T E M E ...
         STB         BMPIST          < NUMERO DE PISTE.
         STA         BMCYL           < NUMERO DE CYLINDRE.
<
< SELECTION DE L'UNITE ET POIDS
< 1, 2 ET 3 DE L'ADRESSE DE TETE :
<
         LA          BMPIST          < NUMERO DE PISTE (OU TETE).
         RBT         NBITMO-XXDK10
         SLLS        NBITMO-XXDK12-XXDK10
         SLRS        NBITMO-XXDK12-XXDK10-XXDK11 < POIDS 1 A 3 DE L'ADRESSE TETE
         SBT         XXDK13          < MISE EN PLACE DU NUMERO D'UNITE,
         SIO         BMSSA           < ET SORTIE ADRESSE...
         LAI         XXDK30
         SIO         BMSCD           < ET ENVOI DE LA FONCTION "UNIT SELECT"...
<
< POSITIONNEMENT DES TETES :
<
         LBI         K
         JMP         BME10           < VERS LA DEVIRTUALISATION...
                                     < ON FAIT AINSI UN 'JMP' ET NON PAS UNE
                                     < INSERTION DE CODE AFIN DE NE PAS CHANGER
                                     < LE DEBUT DU CODE DES BOOTSTRAPS !!!
BME11:   EQU         $
         SLLS        XXDK14
         LR          A,Y
         LA          BMPIST          < NUMERO DE PISTE.
         ANDI        XXDK20          < SELECTION BITS DE POIDS 0 ET 4
         SLRD        XXDK10          < DE L'ADRESSE TETE.
         SLLS        NBITMO-XXDK12-XXDK10-XXDK15-XXDK10
         SLLD        XXDK15+XXDK10
         ORR         Y,A
         SIO         BMSSA           < ET SORTIE D'ADRESSE...
         AD          BMSECT          < (A)='HEADER 1' DU PREMIER SECTEUR A
                                     < ECHANGER,
         STA         BMCCB5          < QUE L'ON MET DANS LE MOT5 DU 'CCB',
         LAI         XXDK31
         SIO         BMSCD           < ET ENVOI DU 'SEEK'...
         PSR         X               < SAUVEGARDE DE 'X'.
         HALT                        < ATTENDONS QUE LES TETES...
         HALT                        < ...SOIENT POSITIONNEES.
         JMP         $+1             < PATCH EVENTUEL.
         PLR         X               < RESTAURATION DE 'X'.
<
< FIN DE GENERATION DU 'CCB', ET
< LANCEMENT DE L'ECHANGE :
<
         LA          BMCCB0
         RBT         BCCBCR
         STA         BMCCB0          < RAZ DU MODE COMPTE-RENDU A PRIORI...
         LRM         A
         WORD        BACDKM?FPHIN    < (A)=MODE 'SIO''IN' A PRIORI...
         IF          XXBOOR-K,,XEIF%,
         IF          ATTENTION : CE QUI SUIT EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         CPZR        W               < ALORS QUEL EST LE SENS DE L'ECHANGE ???
         JE          BME5            < ENTREE, (A) EST BON...
         ADRI        FPHOUT-FPHIN,A  < SORTIE...
BME5:    EQU         $
         STA         BMCCB4          < MISE DU MOT4 DU 'CCB' DANS LE BON MODE...
         LAD         BMCCB0          < (A)=ADRESSE DU 'CCB',
         BSR         BABIPI          < ET ENVOI DU 'CCB' A L''IOP'...
         PLR         Y               < SAUVEGARDE DE L'ADRESSE DE RETOUR
                                     < CAR L'ECHANGE PEUT DETRUIRE LA PILE !!!
         LAI         XXDK32
         SIO         BMSCD           < ET LANCEMENT DE L'ECHANGE...
         LR          X,A             < SAUVEGARDE DE 'X'.
         HALT                        < ATTENTE DE LA FIN...
         HALT                        < ...D'ECHANGE.
         LR          A,X             < RECUPERATION DE 'X'.
         PSR         Y               < ET ON RE-EMPILE L'ADRESSE DE RETOUR.
<
< TEST DU MOT D'ETAT :
<
         SIO         BMSEA           < (A)=MOT D'ETAT 'A' :
         JAGE        BME3            < OK, ALLONS AU COMPTE RENDU...
<
< CAS D'UNE ERREUR :
<
         TBT         ETACAD          < ERREUR DE CADENCE ???
         JC          $               < E R R E U R   S Y S T E M E ...
         TBT         ETAPAR          < ERREUR DE CHECKSUM ???
         JC          $               < E R R E U R   S Y S T E M E ...
         TBT         ETAVIO          < TENTATIVE DE VIOL ???
         JC          $               < E R R E U R   S Y S T E M E ...
         TBT         ETADOG          < CHIEN DE GARDE ???
         JC          $               < E R R E U R   S Y S T E M E ...
         TBT         ETAOPE          < 'DKM' EST-IL PRET ???
         JNC         $               < E R R E U R   S Y S T E M E ...
         TBT         ETABRK          < EST-ON SUR UNE FIN DE CYLINDRE ???
         JNC         $               < E R R E U R   S Y S T E M E ...
<
< COMPTE-RENDU D'ECHANGE :
<
BME3:    EQU         $
         LA          BMCCB0
         SBT         BCCBCR
         STA         BMCCB0          < MISE DU 'CCB' EN MODE "COMPTE-RENDU"...
         LAD         BMCCB0          < (A)=ADRESSE DU 'CCB',
         BSR         BABIPI          < ET DEMANDE DE COMPTE-RENDU A L''IOP'...
         LA          BMCCB3          < (A)=COMPTE-RENDU :
         JANE        $               < E R R E U R   S Y S T E M E ...
         RSR
<
< DEVIRTUALISATION DES GROUPES DE CYLINDRES :
<
BME10:   EQU         $
         LA          BMCYL           < (A)=NUMERO DE CYLINDRE.
         PSR         W
XWOR%1:  VAL         CAXCYL=K
XWOR%2:  VAL         NOCMO=K
         SLRD        XWOR%1+XWOR%2   < DECONCATENATION :
                                     < (A) ET LE BIT0(B) = NUMERO DE GROUPE...
         LRM         W
         WORD        TVDKMP          < W BASE LA TABLE "PRIME" DE 'DKM'...
         ADR         A,W             < (W)=ADRESSE DU MOT CONTENANT LE GROUPE
                                     <     RECHERCHE...
         LA          O,W             < ACCES,
         TBT         NBITMO-B+XWOR%2 < EST-CE L'OCTET DROIT OU GAUCHE ???
         JC          BME12           < DROIT : OCTET IMPAIR,
         SWBR        A,A             < GAUCHE : OCTET PAIR, ON LE MET A DROITE.
BME12:   EQU         $
         ANDI        MOCD            < (A)=NUMERO DE GROUPE REEL,
         SLLD        XWOR%2
         SLRS        XWOR%2          < ON EFFACE LE BIT DE DISCRIMINATION
                                     < OCTET DROITE/GAUCHE...
         SLLD        XWOR%1          < ET ON RECONCATENE...
         PLR         W
         JMP         BME11           < ET VOILA...
         PAGE
<
<
<        B O O T S T R A P   C A R T E S
<
<
<        FONCTION :
<                      CE BOOTSTRAP CHARGE LE SYSTEME A PARTIR DE
<                    CARTES TRAITEES PAR GROUPE DE 4, UN GROUPE DE CARTES
<                    CONTENANT YY7 MOTS=YY8 OCTETS, AVEC 1 OCTET PAR COLONNE.
<                    IL Y A:
<                    - SUR LA 1ERE CARTE : 79 COLONNES UTILES
<                    - SUR LA 2EME CARTE : 79 COLONNES UTILES
<                    - SUR LA 3EME CARTE : 79 COLONNES UTILES
<                    - SUR LA 4EME CARTE : 19 COLONNES UTILES
<                                    SOIT AU TOTAL 'YY8' OCTETS...
<                      DES QUE 'YY' MOTS SONT LUS, IL SONT ECRITS
<                    SUR DISQUE 'FJD', A PARTIR D'UNE ADRESSE SECTEUR
<                    'BCADRS' A INITIALISER PAR L'UTILISATEUR
<
<
<        A T T E N T I O N  :
<                      A L'ENTREE IL FAUT:  I O M = I P M = 1  (FAIRE 'INI')
<                    IL FAUT DE PLUS INITIALISER BCADRS L'ADRESSE
<                    SECTEUR INITIALE POUR LE CHARGEMENT SUR DISQUE
<
<
BOTCRT:  EQU         $               < POINT D'ENTREE DU BOOTSRAP CARTES
         CALL        #SISP CMS5 W ZERO#
                                     < (W)=BASE LA MEMOIRE DEBANALISEE.
         LRM         A
         WORD        BOXIPI
         STA         ABOX-ZERO,W
         LRM         Y,C,L,K         < INITIALISATIONS :
         WORD        K               < (Y)=REGISTRE DE TRAVAIL,
         WORD        W               < (C)=NUMERO DE LA CARTE EN COURS :
                                     <     VARIE DE 1 A 63 PUIS DE 0 A 63
         WORD        BLOCAL+XXBOOT   < (L)=LOCAL DU BOOTSTRAP,
         WORD        XXKBOT          < (K)=PILE DES BOOTSTRAPS.
<
<        NOTA:
<                      LE BIT15 DU REGISTRE 'IM'
<                    EST UTILISE COMME INDICATEUR
<                    DES OCTETS LUS :
<                    - BIT15=0 : ON A LU 1 OCTET,
<                    - BIT15=1 : ON A LU 2 OCTETS, IL FAUT
<                                STOCKER LE MOT EN MEMOIRE.
<
         LBI         K
         XIMR        B               < INITIALISATION 'IM' (1 OCTET)...
BCART0:  EQU         $               < TRAITEMENT D'UN GROUPE DE 4 CARTES.
                                     < QUAND ON LIT UNE CARTE PAR 'BCSP1',
                                     < ON SAIT SI C'EST UNE CARTE 19/79
                                     < COLONNES EN FONCTION DE 'C' :
                                     < 19 COLONNES SI (C) EST MULTIPLE DE 4,
                                     < 79 COLONNES SINON.
         LRM         W
         WORD        BBUFS           < (W)=ADRESSE MEMOIRE DU BUFFER.
XXLCCI:: VAL         LCCI-Z          < ON IGNORERA LA DERNIERE COLONNE...
XWOR%1:  VAL         XXLCCI          < ON N'UTILISE PAS LA DERNIERE COLONNE.
         NTRN
         DO          YY8+XWOR%1-E/XWOR%1
         BSR         BCASP1          < LECTURE DE LA CARTE COURANTE (19 OU 79).
         TRN
<
< ECRITURE SUR 'DKF' DU SECTEUR
< QUE L'ON VIENT D'ASSEMBLER :
<
         LAI         MOMINI
         SIO         BSIOCD          < ENVOI DE LA FONCTION DE "RESET"...
BCARTX:  EQU         $
         SIO         BSIOEA          < (A)=MOT D'ETAT 'A' :
         TBT         ETAOPE          < 'DKF' EST-IL PRET ???
         JNC         BCARTX          < NON, ON ATTEND QU'IL LE SOIT...
<
< PREPARATION DES ARGUMENTS :
<
         LA          BCADRS
         SIO         BSIOSA          < SORTIE DE L'ADRESSE SECTEUR...
         LAI         YY7             < A(BIT1 A 8)=COMPTE DE SECTEURS,
         SIO         BSIOSC          < SORTIE DU COMPTE DE SECTEURS...
         LRM         W
         WORD        BOXIPI
         RDSI
         ANDI        MNUBUS?MNUPRO   < (A)=NUMERO DU PROCESSEUR,
         ADR         A,W             < (W)=RELAI D'ACCES A 'BOX' POUR L''IOP'...
         IF          MNUBUS?MNUPRO=K-K,,XEIF%,
         IF          ATTENTION : LE CALCUL PRECEDENT EST FAUX !!!
XEIF%:   VAL         ENDIF
<
< ECHANGE PROPREMENT DIT :
<
         LAD         BCCB0C          < (A)=ADRESSE DU 'CCB',
         XR          C,W             < POUR 'BIPI'...
         BSR         BABIPI          < ENVOI DU 'CCB' A L''IOP'...
         XR          C,W             < RESTAURATION DE 'C' ET 'W'.
         LAI         MOMRW?MOMSTR?MOMINT
         SIO         BSIOCD          < LANCEMENT DE L'ECRITURE, AVEC LES
                                     < INTERRUPTIONS VALIDEES.
         LXI         K
         HALT                        < ET ATTENTE DE FIN D'OPERATION...
         IC          BCADRS          < ADRESSE DU SECTEUR SUIVANT,
         JMP         BCART0          < ET PASSAGE A LA CARTE SUIVANTE...
<
<
<        S O U S - P R O G R A M M E   D E   L E C T U R E
<                    D ' U N E   C A R T E  :
<
<
BCSP1:   EQU         $
         SIO         BCETA           < (A)=MOT D'ETAT :
         TBT         ETAOPE          < LE LECTEUR EST-IL PRET ???
         JC          BCSP11          < OUI, OK...
         LAI         MOMINI          < NON,
         SIO         BCCDE           < ON FAIT UN 'RESET',
         JMP         BCSP1           < ET ON RETESTE...
<
< LE LECTEUR EST PRET,
< LANCONS L'ECHANGE :
<
BCSP11:  EQU         $
         LAI         MOMSTR
         SIO         BCCDE           < LANCEMENT DE LA LECTURE AVEC LES
                                     < INTERRUPTIONS NON VALIDEES...
<
< BOUCLE DE LECTURE COLONNE PAR COLONNE :
<
         LXI         LCCI            < (X)=NOMBRE DE COLONNES A LIRE.
BCSP31:  EQU         $
         BSR         BCASP2          < LECTURE ET TRAITEMENT D'UNE COLONNE,
         JDX         BCSP31          < ET PASSAGE A LA COLONNE SUIVANTE...
<
< FIN DE LA LECTURE DE LA CARTE :
<
         LAI         MOMFBK
         SIO         BCCDE           < ENVOI DE LA COMMANDE "FIN DE BLOC"...
         LR          C,A
         ADRI        I,A             < ET INCREMENTER LE NUMERO DE CARTE...
XWORK1:  VAL         64              < POUR LE COMPTAGE DES CARTES...
         ANDI        XWORK1-N        < MODULO 64...
         LR          A,C
         RSR
<
<
<        S O U S - P R O G R A M M E   D E   L E C T U R E
<                    D ' U N E   C O L O N N E  :
<
<
BCSP2:   EQU         $
         SIO         BCETA           < (A)=MOT D'ETAT :
         TBT         ETANXT          < Y-A-T'IL UNE 'DATA VALID' ???
         JNC         BCSP2           < NON, ON L'ATTEND...
<
< LECTURE D'UNE COLONNE :
<
         SIO         BCDATA          < OUI : BITS 4-15(A)=COLONNE LUE,
         LR          A,B             < (A)=(B)=COLONNE LUE.
         JAE         BCARTF          < COLONNE NULLE : C'EST LA FIN...
         LAI         LCCI+E
         SBR         X,A             < (A)=1 A 79=NUMERO DE COLONNE EN COURS,
         CPI         XWORK1-N
         JG          BCSP21          < PAS DE NUMEROTATION SUR CETTE COLONNE...
         CPZR        C               < EST-CE UNE CARTE DE NUMERO 0 ???
         JE          BCSP21          < PAS DE NUMEROTATION SUR CETTE COLONNE...
                                     < (EN FAIT SUR AUCUNE COL. DE CETTE CARTE)
         CPR         A,C             < TEST DU NUMERO DE LA CARTE EN COURS :
         JNE         BCSP21          < PAS DE NUMEROTATION SUR CETTE COLONNE...
XWORK2:  VAL         NBITMO-XXCRNL   < LIGNE DE COMPTAGE DES CARTES.
         IBT         NBITMO+XWORK2   < IL DOIT Y AVOIR NUMEROTATION SUR CETTE
                                     < COLONNE : ON INVERSE LE BIT ET ON VA LE
                                     < TESTER A 0...
BCSP21:  EQU         $               < ICI ON DOIT TOUJOURS AVOIR:
         TBT         NBITMO+XWORK2   < LIGNE 12 DE COLONNE LUE=0 :
         JC          $               < ERREUR DE NUMEROTATION :
                                     < ON A TROUVE 0 (OU 1) AU LIEU
                                     < DE 1 (OU 0) !!!
         PSR         A
         LR          C,A
XWOR%1:  VAL         BIT>2           < LES CARTES VONT PAR PAQUETS DE 4...
         ANDI        XWOR%1-N
         CPI         K
         PLR         A
         JNE         BCSP22          < SI C N'EST PAS MULTIPLE DE 4, C'EST UNE
                                     < CARTE 79 COLONNES ; ON PREND DONC LA COLO
                                     < EN COURS...
XWOR%2:  VAL         XXLCCI          < ON N'UTILISE PAS LA DERNIERE COLONNE.
         NTRN
XWOR%3:  VAL         YY8/XWOR%2      < NOMBRE DE CARTES PLEINES.
         TRN
XWOR%1:  VAL         XWOR%2*XWOR%3
XWOR%1:  VAL         YY8-XWOR%1      < NOMBRE D'OCTETS RESIDUELS...
         CPI         XWOR%1          < CARTE 79 COLONNES,
         JG          BCSP23          < ON NE PREND QUE LES 19 PREMIERES...
<
< EXPLOITATION DE LA COLONNE LUE :
<
BCSP22:  EQU         $
         CPI         LCCI            < EST-CE LA DERNIERE COLONNE ???
         JE          BCSP23          < OUI, C'EST FINI...
         LR          B,A             < NON, (A)=(B)=COLONNE LUE (BITS 4-15) :
XWOR%7:  VAL         2               < ???!?!
         SLRS        XWOR%7          < CADRAGE A DROITE DE L'OCTET,
         ANDI        MOCD            < ET NETTOYAGE...
         SWBR        Y
         ORR         A,Y             < (Y)=OCTET LU...
         XIMR        B
         TBT         NBITAB-B        < AVONS-NOUS 2 OCTETS ???
         IBT         NBITAB-B
         XIMR        B
         JNC         BCSP23          < NON, ON SORT...
         STY         O,W             < OUI, ON STOCKE LE MOT COURANT A L'ADRESSE
                                     < COURANTE (W),
         ADRI        D,W             < QUE L'ON FAIT PROGRESSER...
         LYI         K               < ET REINITIALISATION DE 'Y'...
<
< ET RETOUR :
<
BCSP23:  EQU         $
         RSR
<
< FIN D'ECRITURE SUR 'DKF',
< ON VA FAIRE EN SORTE QU'
< AUCUNE INTERRUPTION NE
< MONTE APRES DEMASQUAGE :
<
BCARTF:  EQU         $
         SIO         BSIOEA          < EN LISANT LE MOT D'ETAT 'A',
         LAI         MOMINI          < ET
         SIO         BSIOCD          < EN ENVOYANT UN "RESET"...
         LAI         XXDK70          < ET ON MET UNE ADRESSE DE
         STA         BCADRS          < SECTEUR INEXISTANT POUR EVITER
                                     < D'EVENTUELLES ERREURS.
         JMP         $               < FIN DE CHARGEMENT...
         PAGE
<
<
<        N O Y A U   D E   B O O T S T R A P
<
<
<        FONCTION :
<                      CE BOOTSTRAP CHARGE EN MEMOIRE DU CODE BINAIRE
<                    A PARTIR DE CARTES ; IL PRESENTE LA PARTICULA-
<                    RITE D'ETRE BOOTSTRAPPABLE PAR LA TOUCHE 'LOAD',
<                    A PARTIR DE 'DKM' COMME 'DKF'... ENFIN, IL
<                    POSITIONNE LE MOT 'INI' AVANT DE LIRE LE
<                    DECK DE CARTES ; CE POSITIONNEMENT A LIEU
<                    SUR LE BOOTSTRAP 'DKF' OU 'DKM' SUIVANT LA
<                    POSITION DU COMMUTATEUR PUPITRE...
<
<
<        FORMAT DES CARTES :
<
<                    - 'BNNMPC' MOTS PAR CARTES.
<                    - UN OCTET PAR COLONNE.
<                    - FORMAT BINAIRE, COLONNES 0 A 7.
<                    - LA FIN DES DONNEES EST INDIQUEE PAR
<                      BIT 12 DE LA COLONNE A 1.
<
<
<        ARGUMENTS :
<                    - PLACER DANS 'W' L'ADRESSE MEMOIRE
<                      A LAQUELLE ON VEUT FAIRE LE CHARGEMENT.
<                    - METTRE LE LECTEUR SOUS TENSION.
<                    - FAIRE 'INI'.
<
<
<        POINT D'ENTREE :
<                      'BN00'.
<
<
WZBOOT:: VAL         XZBOOT          < DEBUT DE CHARGEEMNT PREVU POUR LE
                                     < DECK DE CARTES...
DBN00:   LRP         A               < ATTENTION : CE MODULE EST CHARGE
                                     < AILLEURS PAR 'LOAD'...
                                     < (A)=ADRESSE DE CHARGEMENT.
         LRM         B,X,Y,W,K
         WORD        DBN00           < (B)=ADRESSE D'EXECUTION DE CE MODULE,
         WORD        LDBN00          < (X)=LONGUEUR DU MODULE,
         WORD        BN00            < (Y)=ADRESSE DU NOYAU DE BOOTSTRAP,
         WORD        WZBOOT          < (W)=ADRESSE PREVUE DU DECK DE CARTES.
         WORD        XXKBOT          < POUR FAIRE LE 'PSR'/'RSR'...
         CPR         A,B             < EST-ON BIEN IMPLANTE ???
         JE          XBN00           < OUI...
         MOVE                        < NON, ON SE TRANSLATE...
XBN00:   EQU         $
         PSR         Y               < FUTUR ADRESSE DE BRANCHEMENT...
         RDSI
         ANDI        MSBOOT
XWOR%1:  VAL         MSBOOT=K
         SLRS        XWOR%1          < (A)=SELECTION DU SELECTEUR DE BOOSTRAP :
XXBDKM:: VAL         XXBMHD          < SUR LE DISQUE AMOVIBLE,
XXBDKF:: VAL         XXBFHD          < SUR LE DISQUE FIXE...
         LRM         X,Y,L
         WORD        BTFHDR          < CAS DU DISQUE FIXE,
         WORD        BTDKMR          < CAS DU DIQSUE AMOVIBLE,
         WORD        INICMS          < ADRESSE DU MOT 'INI'...
         CPI         XXBDKF          < DISQUE FIXE ???
         JE          XBN01           < OUI, OK...
         CPI         XXBDKM          < DISQUE AMOVIBLE ???
         JNE         $               < NON, ON SE BLOQUE...
         XR          X,Y             < OUI...
XBN01:   EQU         $
         STX         O,L             < MISE EN PLACE DU BOOTSTRAP DISQUE
                                     < CHOISI AU SELECTEUR...
         LAI         K
         SBT         STOP
         SST                         < DEMANDE D'ARRET DU PROCESSEUR...
         LXI         K
         HALT                        < ET ATTENTE DE
         HALT                        < DE L'ARRET EFFECTIF...
         RSR                         < 'GOTO BN00' SI ACTION SUR 'RUN'...
<
<
<        N O Y A U   P R O P R E M E N T   D I T  :
<
<
         LOCAL
BNLOC:   EQU         $               < LOCAL DU "NOYAU" DES BOOTSTRAPS.
                                     < (D'OU LE PREFIXE 'BN' UTILISE.)
BNAC::   VAL         ACCR1           < ADRESSE COUPLEUR DU LECTEUR UTILISE.
BNNMPC:: VAL         LCCI/NOCMO      < NOMBRE DE MOTS PAR CARTE A RAISON
                                     < D'UN OCTET PAR COLONNE.
BNETA:   WORD        BNAC?FPHETA     < OPERANDE SIO ENTREE ETAT.
BNCDE:   WORD        BNAC?FPHCMD     < OPERANDE SIO SORTIE COMMANDE.
BNDATA:  WORD        BNAC?FPHIN      < OPERANDE SIO ENTREE INFORMATION.
         PROG
BN00:    EQU         $               <<<<< POINT D'ENTREE DU NOYAU.
         LRM         Y,C,L
         WORD        K               < (Y)=BASCULE PERMETTANT DE SAVOIR SI
                                     <     L'ON A UN MOT COMPLET.
         WORD        W               < (C)=1, POUR FAIRE BASCULER 'Y'.
         WORD        BNLOC+XXBOOT    < (L)=BASE DU LOCAL DES BOOTSTRAPS.
<
<LECTURE D'UNE CARTE :
<
BN01:    EQU         $               < LECTURE CARTE.
         SIO         BNETA           < (A)=MOT D'ETAT :
         TBT         ETAOPE          < LE LECTEUR EST-IL PRET ???
         JNC         BN01            < NON, ON ATTEND...
         LAI         MOMSTR          < OUI :
         SIO         BNCDE           < LANCEMENT DE LA LECTURE D'UNE CARTE...
<
< LECTURE MOT A MOT :
<
         LXI         BNNMPC          < INIT COUNT AVEC LE NOMBRE
                                     < DE MOTS PAR CARTE.
BN02:    EQU         $
         SIO         BNETA           < (A)=MOT D'ETAT :
         TBT         ETANXT          < Y-A-T'IL UNE INFORMATION VALIDE ???
         JNC         BN02            < NON, ON L'ATTEND...
<
< LECTURE COLONNE PAR COLONNE :
<
         SIO         BNDATA          < (A)=INFORMATION LUE :
XWOR%1:  VAL         '0A00           < LE PREMIER BIT A 1 DE 'XWOR%1' INDIQUE
                                     < LA POSITION DE LA LIGNE 12 DE LA CARTE
                                     < DANS LE MOT MACHINE, ALORS QUE LE
                                     < DEUXIEME, INDIQUE LE BIT0 DE L'OCTET
                                     < QUE L'ON INTRODUIT...
XWOR%2:  VAL         CODBT=FMASK(K?XWOR%1=FCINST)XWOR%1
                                     < RECHERCHE DE LA LIGNE 12.
XWOR%3:  VAL         CORBT?XWOR%2=FMASK(K?XWOR%1=FCINST
XWOR%4:  VAL         CODBT=FMASK(K?XWOR%3=FCINST)XWOR%3
                                     < RECHERCHE DU BIT0 DE L'OCTET.
         TBT         XWOR%2          < FIN DES DONNEES ?
         JC          $               < OUI, ON SE BLOQUE...
         SLLS        XWOR%4          < CADRAGE A GAUCHE DANS 'A' DE
                                     < L'OCTET COURANT.
         SCLD        NBITOC          < STOCKAGE OCTET DANS 'B'.
<
< BOUCLAGE UN MOT=DEUX COLONNES :
<
         EORR        C,Y             < BASCULEMENT DE 'Y'.
         CPZR        Y               < A-T-ON UN OCTET OU UN MOT ?
         JNE         BN02            < ON N'A QU'UN OCTET.
         STB         O,W             < ON A UN MOT QU'ON STOCKE A L'ADRESSE
                                     < COURANTE (W),
         ADRI        D,W             < QUE L'ON FAIT ENSUITE PROGRESSER...
         JDX         BN02            < ET PASSAGE A L'OCTET SUIVANT...
<
< FIN DE CARTE :
<
         LAI         MOMFBK
         SIO         BNCDE           < ENVOI DE LA COMMANDE "FIN DE BLOC"...
         JMP         BN01            < CARTE SUIVANTE SVP.
         WORD        XXCMS5          < NUMERO DU RELEASE DE 'CMS5'...
                                     < (AINSI, ON SAIT QUEL NOYAU DE BOOT-STRAP
                                     < ON VIENT DE CHARGER...)
XWOR%1:  VAL         $-DBN00         < LONGUEUR EN MOTS DU MODULE,
XWOR%2:  VAL         XWOR%1*NOCMO    < LONGUEUR EN OCTETS DU MODULE.
LDBN00:  EQU         ZERO+XWOR%1     < LONGUEUR EN MOTS DU MODULE,
         IF          XWOR%1-XLBOOT,XEIF%,XEIF%,
         IF          ATTENTION : LA LONGUEUR DU BOOTSTRAP REEL, OU
         IF          BIEN SA LONGUEUR MAXIMALE PRESUMEE SONT MAUVAISES !!!
XEIF%:   VAL         ENDIF
LDBN02:  EQU         ZERO+XWOR%2     < LONGUEUR EN OCTETS DU MODULE.
XWOR%3:  VAL         NUQFM/NBSPGB    < NOMBRE DE 'GB' BLOQUES PAR LA SIMU-
                                     < LATION DE 'DKF' SUR 'DKM',
XWOR%4:  VAL         XWOR%3*YY7      < SOIT EN  MOTS...
         IF          XWOR%1-XWOR%4,XEIF%,,
         IF          ATTENTION : LE BOOTSTRAP EST TROP LONG !!!
XEIF%:   VAL         ENDIF
         PAGE
<
<
<        C H O S E S   D E V A N T   S E   T R O U V E R
<        T O U T   E N   H A U T   D E   L A   M E M O I R E  :
<
<
         CALL        #SISP CMS5 CHECK#
<
<
<        V I R T U A L I S A T I O N  " P R I M E "
<                    D E   ' D K M '  :
<
<
         NTRN
XWOR%1:  VAL         GAXCYL+NOCMO-E/NOCMO
         TRN
XWOR%2:  VAL         DOLA3-XWOR%1
         IF          XWOR%1-YY7,XEIF%,,
         IF          ATTENTION : LA TABLE "PRIME" DE VIRTUALISATION
         IF          DE 'DKM' DOIT EVIDEMMENT APPARTENIR AU DERNIER
         IF          BLOC DE MEMOIRE ECHANGE !!!
XEIF%:   VAL         ENDIF
TVDKMP:  EQU         ZERO+XWOR%2     < IMPLANTATION DE LA TABLE DE VIRTUALISA-
                                     < TION PRIME DE 'DKM'...
TVDKMR:  EQU         TVDKMP          < A CAUSE DES REFERENCES EN AVANT...
<
<
<        P I L E S   D E S   B O O T S T R A P S  :
<
<
XLKBOT:: VAL         '10             < LONGUEUR ARBITRAIRE DE LA PILE
                                     < COMMUNE A TOUS LES BOOTSTRAPS...
XXKBOT:  EQU         TVDKMP-XLKBOT-DEPILE
         PAGE
<
<
<        V A L I D A T I O N   D E   L ' A L L O C A T I O N
<        M E M O I R E   D E S   U T I L I S A T E U R S  :
<
<
XWOR%1:  VAL         DOLA2-D         < POUR AVOIR UN NOMBRE POSITIF...
         IF          DOLAR4-K,,,XEIF%
         IF          BIZARRE !!!
XEIF%:   VAL         ENDIF
XWOR%5:  VAL         NOCMO=K
XWOR%5:  VAL         -XWOR%5
XWOR%2:  VAL         MXMEME>XWOR%5   < TAILLE EN MOTS DU PLUS GRAND ESPACE
                                     < MEMOIRE ALLOUABLE A UN UTILISATEUR...
MARGEB:: VAL         7               < MAJORATION ARBITRAIRE EN NOMBRE DE
                                     < BUFFERS (NECESSAIRES POUR LES 'DCTESC',
                                     < ET AUTRES...).
XWOR%2:  VAL         MARGEB*YY7+XWOR%2
         IF          XWOR%1-DOLAR4-XWOR%2,,,XEIF%
         IF          ATTENTION : IL N'Y A PAS ASSEZ DE PLACE
         IF          POUR LES UTILISATEURS !!!
XEIF%:   VAL         ENDIF
         PAGE
<
<
<        G E N E R A T I O N   D E   L ' A R M E M E N T
<        D U   S Y S I N I   D A N S   L E   B O O T S T R A P  :
<
<
XINI:    EQU         ZERO+NSNSP0+NSPINI  < CETTE CONSTANTE EST GENEREE
                                         < SOUS FORME 'EQU' ET NON
                                         < PAS 'VAL' CAR IL S'AGIT
                                         < D'UNE REFERENCE EN AVANT.
         PAGE
<        CALL        #SISP CMS5 BOOT VISU#
         PAGE
<
<
<        P I L E S   D U   D E F A U T   S E C T E U R
<                    E T   D U   R E S T A R T  :
<
<
PLTH10:  EQU         $-DEPILE        < PILE DU DEFAUT SECTEUR (ASCTUCE..?!??!).
XWPILE:  VAL         16              < ON FAIT COMME CA, POUR SAVOIR CE
                                     < QU'IL UTILISE REELLEMENT...
         CALL        #SISP CMS5 GENPIL2#
PILRES:  EQU         $-DEPILE        < PILE DU RESTART.
XWPILE:  VAL         32              < (MEME REMARQUE...)
         CALL        #SISP CMS5 GENPIL2#
         PAGE
<
<
<        P R O C E S S E U R S   L I E S   A   C M S 4  :
<
<
<        NOTA :
<                      UN CERTAINS NBRE DE PROCESSEURS DU
<                    SYSTEME EXECUTENT DES ROUTINES EN
<                    MODE MAITRE ET SONT DE CE FAIT LIES
<                    A LA VERSION COURANTE DE CMS5
<                    (DEPLACEMENTS PAR RAPPORT A LA BASE
<                    'C' DE CMS5, 'NSP' DES HANDLERS, FORMAT
<                    GENERAL ET PARTICULIERS DE 'DCT',...).
<                      CES PROCESSEURS LIES A CMS5 SONT :
<
<                                    !GE SOUS CCI,
<                                    !I SOUS CCI,
<                                    MASK SOUS !CALL,
<                                    TASK SOUS !CALL,
<                                    ETC,...
<
<
         PAGE
<
<
<        A D R E S S E S   A   C O N N A I T R E  :
<
<
         WORD        ZSYSER          < BOUCLAGE SUR SYSER AVEC INTERRUPTIONS
                                     < MASQUEES.
         WORD        YSYSER          < 'SYSER' N'UTILISANT PAS LA 'SYSER'
                                     < NORMALE, LORSQUE 'SMIT' TROUVE IPM#IOM.
         WORD        SYSEP2          < ADRESSE DE BOUCLAGE DES 'SYSERS' SUR
                                     < LE PROCESSEUR ESCLAVE...
         WORD        PSTH00          < ADRESSE DE LA 'PSTH00'.
         WORD        PILTH0+DEPILE   < ADRESSE DE LA PILE DE 'TH0'.
         WORD        ZRECOV          < BOUCLAGE SUR SYSER AVEC INTERRUPTIONS
                                     < NON MASQUEES.
         WORD        SYSCBM          < SYSER DE DEFAUT SUR LE 'CBM' DE 'TV'...
         WORD        SYSCBN          < SYSER DE DEFAUT PERSISTANT ET RECAL-
                                     < CITRANT SUR LE 'CBM' DE 'TV'...
         WORD        DEFCBM          < DEFAUT SUR LE 'CBM' DE 'TV' LORS DU
                                     < PREMIER TOUR DE BALAYAGE DE LA MEMOIRE
                                     < AU RESTART DU SYSTEME.
         WORD        DEFCBN          < IDEM A 'DEFCBM' AU DEUXIEME TOUR...
         WORD        SYSCBJ          < SYSER DE DEFAUT SUR LE 'CBJ' DE 'TV'...
         WORD        SYSCBK          < SYSER DE DEFAUT PERSISTANT ET RECAL-
                                     < CITRANT SUR LE 'CBJ' DE 'TV'...
         WORD        ZDKM            < ADRESSE DE LA SYSER SUR DEMANDEUR
                                     < AU 'DKM' NON RECONNU.
         WORD        ZZDKM           < SYSER DE COMPTE DE MOTS RESIDUELS NON
                                     < NON NUL SUR 'DKM'/'DKU', ALORS QU'UNE
                                     < FIN DE CYLINDRE N'EST PAS ATTENDUE.
         WORD        ZZZDKM          < SYSER DE COMPTE DE MOTS DEJA ECHANGES
                                     < NON MULTIPLE D'UN SECTEUR LORS D'UNE
                                     < INTERRUPTION DE FIN DE CYLINDRE SUR
                                     < 'DKM'/'DKU'.
         WORD        BTFHDR          < POINT D'ENTREE DU BOOT-STRAP 'DKF'
                                     < EN MODE 'RECHARGEMENT DU SYSTEME'.
         WORD        BXTIME          < ZONE DE LA VALIDATION DE LA DATE DANS
                                     < LE BUFFER 'BCOPY',
         WORD        LTIME           < ZONE DE LA DATE COURANTE ; AVEC CES 2
                                     < INFORMATIONS, ON PEUT CLASSER LES 2
                                     < COPIES EN BASCULE...
         WORD        ITASYS          < ADRESSE DE LA VALEUR D'INITIALISATION
                                     < DE 'ETASYS'...
         WORD        XZFREE          < NOMBRE DE MOTS DISPONIBLES EN MEMOIRE
                                     < HAUTE DU SYSTEME (DOL2) AVANT LES
                                     < BOOTSTRAPS ; POUR AUGMENTER CETTE
                                     < VALEUR, IL SUFFIT DE REDUIRE LE
                                     < NOMBRE DE PAGES DE LA MEMOIRE VIRTUELLE
                                     < 'DKB' DE 'DKM'...
         WORD        EDLLP5          < ADRESSE DE BOUCLAGE SUR UN DEFAUT DE
                                     < L'IMPRIMANTE ; AU CAS OU LE DEFAUT
                                     < SERAIT PERMANENT, IL FAUT FAIRE UN
                                     < POINT D'ARRET A CETTE ADRESSE, ET FAIRE
                                     < +1 SUR LE REGISTRE 'P'...
         WORD        HDLCRH          < IDEM SUR LES LECTEURS DE CARTES...
         WORD        HDLCUC          < IDEM SUR LE 'CU2' EN MODE CANAL...
         WORD        HDLCUG          < BOUCLAGE SUR UN MAUVAIS MOT D'ETAT
                                     < POUR LE 'CU2' EN MODE CANAL...
         WORD        DKMBL1          < NOMBRE DE BLOCS A ENTRELACER LORS DES
                                     < TRANSFERTS 'DKU' --> 'MEMTV',
         WORD        DKMBL2          < LONGUEUR DE CES MEMES BLOCS.
         WORD        LINHIB+IJIJDX   < ET ADRESSE DE LA LISTE CORRESPONDANTE
                                     < D'INHIBITION/AUTORISATION DES BLOCS,
                                     < SACHANT QUE CETTE LISTE EST A L'ENVERS...
         WORD        AMEMQ           < ADRESSE DE L'ADRESSE EN DADR-MOTS DE LA
                                     < ZONE 'TBMEMQ' MOTS DE LONG COPIEE EN PER-
                                     < MANENCE PAR 'IDLE' EN MEMOIRE BASSE,
                                     < ET PERMETTANT DONC UNE VISUALISATION
                                     < PAR "!ACTIVITE...".
         WORD        BMEMQ           < ADRESSE EN MEMOIRE BASSE DU BUFFER DE
                                     < COPIE UTILISE PAR 'IDLE' :
                                     < BMEMQ <-- (AMEMQ)...
         WORD        CHEKPA          < AFIN DE POUVOIR SUPRIMER LA 'SYSER' QUI
                                     < APPARAIT LORSQUE LES CHECK-SUMS "ROM"-
                                     < "RAM" SONT MAUVAIS ; EN EFFET, SI L'ON
                                     < FAIT DES PATCHES DU SYSTEME, LES CHECK-
                                     < SUMS CALCULES AU 'SYSINI' DEVIENNENT
                                     < INCOHERENTS...
         WORD        AFRCHK          < DONNE EN ARGUMENT D'UNE OPERATION DE
                                     < DECALAGE, LE LOGARITHME EN BASE 2 DE
                                     < LA FREQUENCE DES TESTS "ROM"/"RAM"
                                     < EXPRIMEE EN 2*65535 MICRO-SECONDES...
         WORD        CPIB0           < TEST QUE L'ON PEUT MODIFIER (EN DIMI-
                                     < NUANT LE PARAMETRE 'NPREB0') AFIN DE
                                     < DEBLOQUER DES INTERBLOCAGES SUR ATTENTE
                                     < DE BUFFERS...
         NLS
         WORD        GABUZO
         LST
         PAGE
<
<
<        B U F F E R   D ' E C H A N G E   ' C R 1 '  -->  ' D K F '  :
<
<
BBUFS:   EQU         $
<
<        NOTA :
<                      'BBUFS' NECESSITE 'YY7'
<                    MOTS CE QUI CORRESPOND A
<                    LA TAILLE D'UN SECTEUR DE
<                    'DKF'...
<
XWOR%1:  VAL         ZERO+DOLA3-$
         IF          XWOR%1-YY7,,,XEIF%
         IF          ATTENTION : IL N'Y A PAS ASSEZ
         IF          DE PLACE POUR 'BBUFS' !!!
XEIF%:   VAL         ENDIF
<
<
<        G E S T I O N   D E S   C H A I N A G E S
<        D E S   B L O C S   " R O M " - " R A M "  :
<
<
         IF          ICHAIN-EXIST,,XEIF%
         IF          ATTENTION : LE NOMBRE DE #SISP CMS5 CHECK#
         IF          DOIT ETRE PAIR, TEMOIGANT AINSI PARTIELLE-
         IF          MENT QUE L'ON COMMENCE ET FINIT PAR <ROM> !!!
XEIF%:   VAL         ENDIF
         WORD        CHAINK          < AFIN DE RECUPERER LE DEBUT DU CHAINAGE...
XWOR%1:  VAL         '0000000@@@@
CHAIN1:  EQU         ZERO+XWOR%1     < POUR LE TEST DES CHECK-SUMS,
CHAIN2:  EQU         ZERO+XWOR%1     < ET POUR LEUR GENERATION...
CHAINK: @
XWOR%1:  VAL         KOLF=FMASK+KOLTES=FVAL
XWOR%1:  VAL         KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2:  VAL         KOLTED=FMASK+KOL0=FVAL
XWOR%2:  VAL         KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3:  VAL         XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE 'CHAINK'...
XWOR%4:  VAL         K
XWOR%4:  VAL         MSYMBI=FMASK+KOL0=FVAL?XWOR%4
XWOR%4:  VAL         MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
XWOR%5:  VAL         XWOR%4=FCSYMT   < ACCES A L'ETAT DU SYMBOLE 'CHAINK'...
XWOR%6:  VAL         MSYMBC=K
XWOR%6:  VAL         NBITMO-B-XWOR%6
XWOR%5:  VAL         CORBT?XWOR%6=FMASK(K?XWOR%5=FCINST
                                     < CLEAR DU BIT 'MSYMBC' DANS L'ETAT...
XWOR%6:  VAL         MSYMBN=K
XWOR%6:  VAL         NBITMO-B-XWOR%6
XWOR%5:  VAL         CORBT?XWOR%6=FMASK(K?XWOR%5=FCINST
                                     < CLEAR DU BIT 'MSYMBN' DANS L'ETAT...
XWOR%9:  VAL         XWOR%5?MSYMBM=FMASK+XWOR%5=FVAL(K?XWOR%4=FCSYMM
<
<
<        F I N   D E   C M S 5  :
<
<
         IF          XWOR%1-YY7+Z,XEIF%,XEIF%,
         DZS         XWOR%1-YY7+Z    < NETTOYAGE DE LA MEMOIRE HAUTE...
                                     < (-YY7+Z A CAUSE DE 'LKSYS'...)
XEIF%:   VAL         ENDIF
         $EQU        ZERO
         PAGE
<
<
<        T A B L E   D E S   S Y M B O L E S  :
<
<



Copyright (c) Jean-François Colonna, 2011-2019.
Copyright (c) CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2011-2019.