<        S I S   C M S 5   2
         PAGE
         CALL        #SISP CMS5 CHECK#
         PAGE
<
<
<        R E L E A S E   S E M A P H O R E  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME EFFECTUE
<                    L'OPERATION 'RLSE' D'UN SEMA-
<                    PHORE, ET CE DE DEUX FACONS
<                    DIFFERENTES SUIVANT :
<
<                    1 - SI LES INTERRUPTIONS SONT
<                    DEMASQUEES (IOM=IPM=0), ALORS
<                    ON EXECUTE L'INSTRUCTION 'RLSE'
<                    DE LA MICRO-MACHINE.
<
<                    2 - SI LES INTERRUPTIONS SONT
<                    MASQUEES, ALORS ON EST OBLIGE
<                    D'EMULER L'INSTRUCTION 'RLSE',
<                    CAR EN EFFET, SINON, EXECUTEE
<                    TELLE QUELLE, ELLE DEMASQUERAIT
<                    LES INTERRUPTIONS...
<
<
<        ARGUMENTS:
<                    (A)=ADRESSE DU SEMAPHORE.
<
<
<        RESULTATS:
<                    EQUIVAUT DANS TOUS LES CAS
<                    A L'EXECUTION DE L'INSTRUC-
<                    TION 'RLSE' A CECI PRES :
<                    LORSQUE LES INTERRUPTIONS
<                    SONT MASQUEES, L'OCTET 0 DU
<                    COMPTEUR RESTE INCHANGE.
<
<
<        A T T E N T I O N  :
<                    CE SOUS-PROGRAMME DETRUIT 'A' !!!
<
<
RLSE:    EQU         $
         USE         W,SEMBET
         PSR         B,X,Y,W         < SAUVEGARDES...
         LR          A,W             < (W)=ADRESSE SEMAPHORE...
<
< TEST DES INTERRUPTIONS :
<
         BSR         ASMIT           < ETAT DE MASQUAGE DES INTERRUPTIONS :
                                     < RENVOIE DANS 'A' : 'IOM' ET 'IPM'.
                                     < NOTA : SI IOM#IMP, 'SMIT' FAIT
                                     < UNE SYSER...
         JANE        RLSE2           < IOM=IPM=1 : INTERRUPTIONS MASQUEES...
<
< CAS DES INTERRUPTIONS
< NON MASQUEES :
<
         RLSE        SEMBET          < PUISQUE IOM=IPM=K, UTILISONS
                                     < L'INSTRUCTION, TOUT BETEMENT...
         JMP         RLSE9           < ET C'EST TOUT...
<
< CAS DES INTERRUPTIONS
< MASQUEES :
<
RLSE2:   EQU         $               < IPM=IOM=1, FAIRE LE RLSE
                                     < "A LA MAIN" POUR NE PAS DEMAS-
                                     < QUER LES INTERRUPTIONS...
         LA          SEMBET          < CHARGEMENT DU SEMAPHORE :
         SCLD        XMBETA          < B (BITS8-15)=OCTET0(SEM),
         SARS        XMBETA          < (A)=OCTET1(SEM), SIGNE ETENDU.
         CPI         MAXBET          < VALIDATION DU COMPTEUR :
         JL          RLSE3           < OK...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      LE MIEUX PARAIT DE FAIRE 'JMP RLSE9'...
<
RLSE3:   EQU         $
         ADRI        I,A             < PROGRESSION DU COMPTEUR,
         LR          A,Y             < (Y)=COMPTEUR(SEM),
         SLLS        XMBETA
         SCRD        XMBETA          < (A)=NOUVELLE VALEUR DU SEMAPHORE,
         STA         SEMBET          < ET MISE A JOUR DE CELUI-CI...
         CPZR        Y               < COMPTEUR(SEM) > 0 ???
         JG          RLSE9           < OUI, COMPTEUR(SEM) > 0,
                                     < NE RIEN FAIRE DE PLUS CAR
                                     < AUCUNE TACHE N'EST EN ATTENTE...
<
< CAS OU AU MOINS UNE
< TACHE EST EN ATTENTE :
<
RLSE8:   EQU         $               < ICI, IL FAUT METTRE A 0 LE
                                     < 1ER BIT A 1 DANS FILE(SEM)
                                     < ET METTRE A 1 LE BIT CORRES-
                                     < PONDANT DE ESTF :
         LAD         SEMWQ           < (A)=ADRESSE DE LA LISTE DES TACHES,
         LXI         NTS0            < (X)=RANG DU PREMIER BIT A TESTER,
         LYI         LSEM*NBITMO     < (Y)=RANG DU PREMIER BIT A NE PLUS
                                     <     TESTER.
         DRBM
         JNC         RLSE1           < ON A TROUVE UN BIT A 1 DANS
                                     < LA FILE(SEM), OK...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE COMMENT LA FILE PEUT
<                    ETRE VIDE, ALORS QUE LE COMPTEUR
<                    N'EST PAS POSITIF !!!
<
         JMP         RLSE9
RLSE1:   EQU         $               < ICI, (X)=RANG DU BIT A METTRE
                                     <          A 1 DANS 'ESTF',
         LAI         ESTF-ZERO       < (A)=ADRESSE DE LA FILE 'ESTF',
         SBTM        NTS0,X          < SET BIT DE RANG (X) DE 'ESTF'...
<
< ET SORTIE :
<
RLSE9:   EQU         $
         PLR         B,X,Y,W         < RESTAURATIONS
         RSR
         PAGE
<
<
<        A D R E S S E   D ' U N   ' I C '  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME PERMET
<                    DE CONNAITRE L'ADRESSE (B)
<                    DE L''IC' ASSOCIE A LA TACHE
<                    HARDWARE DONT LE NUMERO EST
<                    DONNE DANS 'A'.
<
<        ARGUMENT:
<                    (A)=NIVEAU DE LA TACHE HARDWARE.
<
<        RESULTAT:
<                    (B)=ADRESSE DE L''IC' DE LA TACHE HARDWARE.
<
<
SMIC:    EQU         $
         PSR         A,X             < SAUVEGARDES...
         MP          LIC             < (A)=NIVEAU HARD*LONGUEUR 'IC',
         LR          B,X             < (X)=INDEX IC(I),
         LB          &AXIC           < (B)=ADRESSE 'IC',
                                     < NOTA : ON PEUT LE FAIRE, CAR (AXIC)
                                     < =AXIC OU AUTREMENT DIT, LE 1ER MOT
                                     < D'UN 'IC' POINTE SUR L''IC' LUI-MEME...
         PLR         A,X             < RESTAURATIONS...
         RSR
         PAGE
<
<
<        T E S T   D E S   I N T E R R U P T I O N S  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME PERMET DE
<                    SAVOIR SI LES INTERRUPTIONS
<                    (D'ENTREES-SORTIES, DE DEFAUT
<                    SECTEUR ET INTER-PROCESSEURS)
<                    SONT MASQUEES.
<
<
<        RESULTAT :
<                    (A)=K : LES INTERRUPTIONS NE SONT PAS MASQUEES,
<                       #0 : ELLES SONT MASQUEES ('A' CONTIENT EN
<                            FAIT ALORS LES BITS 'IPM' ET 'IOM').
<
<
SMIT:    EQU         $
         PSR         B
         CALL        #SISP CMS5 RST#
         LRM         B
         WORD        MIPM?MIOM       < MASQUE DE TEST DES BITS DE MASQUAGE
                                     < DES INTERRUPTIONS ('IPM' ET 'IOM').
         ANDR        B,A             < AFIN DE NE CONSERVER QUE LES BITS
                                     < DE MASQUES DES INTERRUPTIONS A
                                     < L'INTERIEUR DU REGISTRE 'ST'.
         JAE         SMIT1           < (A)=K : LES INTERRUPTIONS NE
                                     < SONT PAS MASQUEES.
         CPR         A,B             < ELLES SONT MASQUEES, MAIS LE SONT-ELLES
                                     < TOUTES ('IPM' ET 'IOM') ???
         JE          SMIT1           < OUI, (A)#0...
<
<        S Y S E R  : ON A 'IPM'#'IOM' !!!
<
<                    (A)=BITS 'IPM' ET 'IOM' DU REGISTRE 'ST'.
<
SMIT2:   EQU         $
         BSR         ATDEFS          < ON NE PEUT FAIRE APPEL A 'SYSER',
                                     < CAR LUI-MEME FAIT APPEL A 'SMIT'...
YSYSER:  EQU         $               < ADRESSE DE BOUCLAGE DE CETTE FAUSSE
                                     < E R R E U R   S Y S T E M E ...
         JMP         SMIT2           < ET ON SE BLOQUE...
<
< RETOUR FACILE :
<
SMIT1:   EQU         $
         PLR         B
         RSR
         PAGE
<
<
<        M A S Q U A G E / D E M A S Q U A G E
<                    G E N E R A L
<        D E S   I N T E R R U P T I O N S  :
<
<
<        FONCTION :
<                      LE SYSTEME DISPOSE DE 2 S/P
<                    LUI PERMETTANT DES DEMANDES
<                    IMBRIQUEES DE MASQUAGE/DEMASQUAGE
<                    SUIVANT LES 2 SCHEMAS INDIQUEES
<                    CI-DESSOUS :
<
<                      (MASK                           DEMASK)
<                           (MASK               DEMASK)
<                                (MASK...DEMASK)
<
<                    OU PAR EXEMPLE :
<
<                      (MASK                     ACQ)
<                           (MASK               )
<                                (MASK...DEMASK)
<                    (L'INSTRUCTION 'ACQ' DEMASQUANT TOUTES
<                     LES INTERRUPTIONS...)
<
<
<        INTERRUPTIBILITE :
<                      EVIDEMMENT, TANT QUE LE MASQUAGE DU
<                    PROCESSEUR N'EST PAS EFFECTIF (ALORS
<                    QUE L'ETAT COURANT EST TEL QUE IPM=IOM=K)
<                    UNE OU PLUSIEURS INTERRUPTIONS PEUVENT
<                    VENIR INTERROMPRE LA SEQUENCE DE
<                    MASQUAGE; EN FAIT IL N'Y A PAS D'ALEA
<                    'SMASK' ETANT TRANSFERE DANS LE REGISTRE
<                    'Y', ET DONC PARTICIPANT AINSI AUX
<                    CHANGEMENTS DE CONTEXTES. LE SEUL RISQUE
<                    APPARAIT LORSQUE IPM#IOM; SI UNE INTER-
<                    RUPTION APPARAIT ENTRE CE TEST ET LA
<                    SYSER ON RISQUE :
<                      - SOIT DE FAIRE 2 SYSERS DE MEME CAUSE
<                    LORSQUE L'INTERRUPTION FAIT ELLE-MEME
<                    UN APPEL MASQUAGE,
<                      - SOIT DE FAIRE LA SYSER AVEC IPM=IOM=K,
<                    PARCE QUE L'INTERRUPTION PAR UN 'ACQ'
<                    AURA FAIT IPM=IOM=K...
<
<
<        NOTA :
<                      CETTE SEQUENCE AYANT ETE EMPRUNTEE A 'CMS4-MP',
<                    IL NE FAUT PAS S'ETONNER QUE L'ON Y PARLE DE
<                    "PROCESSEUR COURANT" ALORS QUE CMS5 EST MONO-
<                    PROCESSEUR...
<
<
<        M A S Q U A G E   G E N E R A L  :
<
<
SMMK:    EQU         $
         PSR         A,Y
         LY          SMASK           < ACCES A L'ETAT DE MASQUAGE
                                     < SUPPOSE COURANT DU PROCESSEUR
                                     < (A CAUSE DES DEMASQUAGES IMPLI-
                                     < CITES REALISES PAR LES INSTRUCTIONS
                                     < PASSANT DANS LE MICRO-SCHEDULER :
                                     < ACQ, WAIT, ACT, ACTD,...)
<
< TEST DE L'ETAT COURANT DU PROCESSEUR :
<
         CALL        #SISP CMS5 SST#
         TBT         IPM             < INTERRUPTIONS INTER-PROCESSEURS
                                     < MASQUEES ???
         JC          SMMK1           < ON SUPPOSE QUE LE PROCESSEUR
                                     < COURANT EST DEJA MASQUE...
         TBT         IOM             < INTERRUPTIONS D'ENTREES-SORTIES
                                     < ET DE DEFAUT SECTEUR MASQUEES ???
         JC          SMMK2           < S Y S E R  : IPM=K ET IOM=1 !!!
         LYI         SMASK0          < LE PROCESSEUR COURANT N'ETAIT PAS
                                     < MASQUE : ON VA REINITIALISER SON
                                     < ETAT DE MASQUAGE...
         JMP         SMMK3           < VERS LE MASQUAGE EFFECTIF.
SMMK1:   EQU         $
         TBT         IOM             < INTERRUPTIONS D'ENTREES-SORTIES
                                     < ET DE DEFAUT SECTEUR MASQUEES ???
         JNC         SMMK2           < S Y S E R  : IPM=1 ET IOM=K !!!
SMMK3:   EQU         $
         ADRI        I,Y             < MISE A JOUR DE L'ETAT DE MASQUAGE
                                     < PAR COMPTAGE DES IMBRICATIONS.
         JCV         SMMK2           < S Y S E R  : ETAT DE MASQUAGE
                                     < IMPOSSIBLE !!!
<
< MASQUAGE EFFECTIF DU PROCESSEUR :
< (CE MASQUAGE EFFECTIF EST FAIT
< MEME SI IPM ET IOM SONT DEJA A 1)
<
         LRM         A
         WORD        MIPM?MIOM
         SST                         < MASQUAGE DES INTERRUPTIONS INTER-
                                     < PROCESSEURS (IPM) ET D'ENTREES-
                                     < SORTIES/DEFAUT SECTEUR (IOM).
         STY         SMASK           < MEMORISATION DE L'ETAT DE MASQUAGE
                                     < DU PROCESSEUR.
         PLR         A,Y
         RSR
<
<        S Y S E R  : LORS DU DEMASQUAGE D'UN PROCESSEUR :
<
<                    1- IPM#IOM : VOIR LE CONTENU DE 'A',
<                    2- DEBORDEMENT OU REPORT SUR 'SMASK' : ON
<                    TROUVERA DANS LE REGISTRE 'A' : IPM=IOM.
<
SMMK2:   EQU         $
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
         JMP         SMMK3           < ET ON RESSORT PAR LE MASQUAGE
                                     < GENERAL DU PROCESSEUR.
<
<
<        D E M A S Q U A G E   G E N E R A L  :
<
<
SMDK:    EQU         $
         PSR         A
<
< TEST DE L'ETAT COURANT DU PROCESSEUR :
<
         CALL        #SISP CMS5 RST#
         TBT         IPM
         JNC         SMDK2           < S Y S E R  : LES INTERRUPTIONS
                                     < INTER-PROCESSEURS NE SONT PAS
                                     < MASQUEES !!!
         TBT         IOM
         JNC         SMDK2           < S Y S E R  : LES INTERRUPTIONS
                                     < D'ENTREES-SORTIES/DEFAUT SECTEUR
                                     < NE SONT PAS MASQUEES !!!
         DC          SMASK           < DECOMPTAGE DES IMBRICATIONS DE
                                     < MASQUAGE.
                                     < (NOTA : CE 'DC' EST FAISABLE
                                     < DIRECTEMENT SUR 'SMASK', CAR
                                     < EN EFFET LES INTERRUPTIONS
                                     < SONT MASQUEES : IPM=IOM=1,
                                     < IL N'Y A DONC PAS DE PROBLEMES
                                     < D'INTERRUPTIBILITE...)
         JG          SMDK1           < SMASK>0 : LE PROCESSEUR N'EST PAS
                                     < ENCORE SORTI DE LA PHASE MASQUEE
                                     < COURANTE, IL Y RESTE DONC...
         JL          SMDK2           < S Y S E R  : SMASK<0; ON A ALORS
                                     < LE 'CARY' A 1.
<
< DEMASQUAGE REEL DU PROCESSEUR :
<
SMDK3:   EQU         $
         PSR         A,B,X
         IC          KTDEFS          < INHIBITION DES TESTS DE 'TDEFS'
                                     < (CETTE INHIBITION DES DEFAUTS SECTEUR
                                     < EN ATTENTE EST PLACEE ICI CAR 'SMASK'
                                     < VIENT DE PASSER A 0, MAIS LES INTER-
                                     < RUPTIONS NE SONT PAS EFFECTIVEMENT
                                     < DEMASQUEES ; ON RISQUE DONC UNE SYSER
                                     < AU 'RESTART'...)
         BSR         ASMWHO          < QUI EST LA ???
         DC          KTDEFS          < AUTORISATION DES TESTS DE 'TDEFS'
         CPI         TYPTH           < EST-CE UN TACHE HARD?
         JNE         SMDK4           < OK, CE N'EST PAS UNE TACHE 'HARDWARE'...
<
<        S Y S E R  : UNE TACHE 'HARDWARE' VEUT DEMASQUER SES
<                     INTERRUPTIONS !!!
<
<                    (A)='TYPTH',
<                    (B)=NUMERO DE LA TACHE 'HARDWARE'.
<
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
         PLR         A,B,X
         JMP         SMDK1           < PUIS, ON IGNORE LE DEMASQUAGE...
SMDK4:   EQU         $
         PLR         A,B,X
         LRM         A
         WORD        MIPM?MIOM
         RST                         < DEMASQUAGE DES INTERRUPTIONS
                                     < INTER-PROCESSEURS (IPM) ET D'ENTREES-
                                     < SORTIES/DEFAUT SECTEUR (IOM).
         EIT                         < ET OUI, IL FAUT QUAND MEME EXECUTER
                                     < L'INSTRUCTION 'EIT' DE DEMASQUAGE
                                     < DU BIT 'IOM' CAR L'INSTRUCTION 'EIT'
                                     < PERMET DE TESTER LES INTERRUPTIONS
                                     < EN ATTENTE DEPUIS LE MASQUAGE,...
                                     < BRAVO LA 'SEMS' !!!
         ACQ                         < A T T E N T I O N  : UNE TACHE 'HARD-
                                     < WARE' NE DEMASQUE JAMAIS SES INTER-
                                     < RUPTIONS EXPLICITEMENT ; EN CONSEQUENCES
                                     < UNE TACHE 'HARDWARE' NE FERA JAMAIS CET
                                     < 'ACQ' ; A QUOI SERT-IL ??? LORSQUE LES
                                     < INTERRUPTIONS SONT MASQUEES, ON NE PEUT
                                     < TOUCHER AUX DONNEES DU 'MICRO-SCHEDULER'
                                     < QUE PAR PROGRAMME, ET NON EN UTILISANT
                                     < LES INSTRUCTIONS DE SON OPTION ; LORSQUE
                                     < LES INTERRUPTIONS SE DEMASQUENT, IL FAUT
                                     < FAIRE PRENDRE EN COMPTE CES MODIFICATIONS
                                     < EN FORCANT UN PASSAGE DANS LE 'MICRO-
                                     < SCHEDULER' PAR CET 'ACQ'...
SMDK1:   EQU         $
         PLR         A
         RSR
<
<        S Y S E R  : LORS DU DEMASQUAGE GENERAL :
<
<                    1- IPM#IOM : LE 'CARY' VAUT ALORS 0,
<                    2- SMASK<0 : LE 'CARY' VAUT ALORS 1.
<
SMDK2:   EQU         $
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
         JMP         SMDK3           < ET ON RESSORT PAR UN DEMASQUAGE
                                     < GENERAL.
         PAGE
<
<
<        A D R E S S E   D ' U N E   ' P S T H '  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME RENVOIE
<                    L'ADRESSE DE LA 'PSTH' D'UNE
<                    TACHE HARDWARE DONT LE NIVEAU
<                    EST DONNE.
<
<        ARGUMENT:
<                    (A)=NIVEAU DE LA TACHE HARDWARE.
<
<        RESULTAT
<                    (B)=ADRESSE DE LA 'PSTH' ASSOCIEE.
<
<
SMTH:    EQU         $
         PSR         X               < SAUVEGADE...
         LR          A,B             < (A)=(B)=NIVEAU HARDWARE,
         SLLS        LPSTH=K         < (A)=NIVEAU HARD*LPSTH,
         LR          A,X             < (X)=INDEX PSTH(I),
         LAD         &AXPSTH         < (A)=ADRESSE PSTH(I),
         XR          A,B             < (A)=NIVEAU HARDWARE,
                                     < (B)=ADRESSE PSTH(I).
         PLR         X               < RESTAURATION...
         RSR
         PAGE
<
<
<        I D E N T I F I C A T I O N   D U
<            D E M A N D E U R  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME PERMET DE
<                    CONNAITRE LE DEMANDEUR ET
<                    DE DISCRIMINER LES 'TACHES
<                    SOFTWARES' DES 'TACHES
<                    HARDWARES'...
<                      ON NOTERA A CE PROPOS QUE 'CMS5'
<                    ASSIMILE LE DEFAUT SECTEUR A UNE
<                    'TACHE HARDWARE'...
<
<
<        A T T E N T I O N  :
<                      POUR DONNER UN RESULTAT CORRECT (DANS
<                    LA TACHE DEFAUT SECTEUR S'IL Y EST APPELE),
<                    CE SOUS-PROGRAMME DOIT ETRE UTILISE APRES
<                    LA MISE A JOUR DE 'ICSAV' INDIQUANT QUE
<                    LA SAUVEGARDE DES REGISTRES DE LA TACHE
<                    INTERROMPUE A ETE FAITE !!!
<
<
<        RESULTAT :
<                    (A)=TYPE DISCRIMINANT UNE 'TACHE
<                        SOFTWARE' ('TYPTS') D'UNE
<                        'TACHE HARDWARE' ('TYPTH'),
<                    (B)=NUMERO DE 'TACHE HARDWARE' SI
<                        'TYPTH', OU 'NSP' SI 'TYPTS'.
<
<
SMWHO:   EQU         $
         PSR         X               < SAUVEGARDE DE 'X'...
         CALL        #SISP CMS5 RST#
         TBT         WARNG           < Y-A-T'IL UN DEFAUT SECTEUR ???
         JNC         SMWHO2          < NON...
<
< CAS OU IL Y A UN DEFAUT SECTEUR,
< MAIS IL FAUT D'ABORD SAVOIR S'IL
< EST ACTIF OU EN ATTENTE :
<
         PSR         W               < SAUVEGARDE DE 'W'...
         LAI         NUMDEF          < (A)=NUMERO DE LA TACHE 'DEFSEC',
         BSR         ASMIC           < RENVOIE (B)=ADRESSE 'IC' DE LA
                                     < TACHE 'HARD' DONT LE NUMERO
                                     < EST DANS 'A'...
         LR          B,W
         USE         W,PSTH          < POUR BASER L''IC' DU 'DEFSEC'...
         CPZ         ICSAV           < INDICATEUR DE SAUVEGARDE DE
                                     < LA TACHE 'DEFSEC' ELLE-MEME...
         PLR         W               < RESTAURATION DE 'W'...
         JE          SMWHO2          < ET BIEN, ON N'EST PAS DANS LA
                                     < TACHE DEFAUT SECTEUR, BIEN QUE
                                     < CE DERNIER SOIT EN ATTENTE ; CELA
                                     < SIGNIFIE QUE LES INTERRUPTIONS
                                     < SONT MASQUEES !!!
<
<        C A S   D U   ' D E F A U T   S E C T E U R '  :
<
         LAI         TYPTH           < (A)='TYPTH' MALGRE TOUT...
         LBI         NUMDEF          < (B)=NUMERO DE LA 'TACHE DEFAUT
                                     <     SECTEUR'.
         JMP         SMWHO1          < ET C'EST TOUT...
<
<        ' T H '   O U   ' T S '  :
<
SMWHO2:  EQU         $
         RDHV                        < POUR DISCRIMINER LES 'TH' DES 'TS',
                                     < IL SUFFIT DE LIRE LE REGISTRE 'HV'
                                     < DONNANT LES 'TACHES HARDWARES'
                                     < EN COURS.
         LBI         K               < CLEAR DU REGISTRE 'B', AFIN QUE
                                     < L'INSTRUCTION 'DBT' FONCTIONNE BIEN...
         DBT                         < RECHERCHE D'UNE 'TACHE HARDWARE' ACTIVE
                                     < (LA PLUS PRIORITAIRE).
         JC          SMWHO3          < 'CARY'=1 : IL N'Y A PAS DE 'TACHES
                                     < HARDWARES' ACTIVES...
<
<        C A S   D ' U N E   ' T A C H E   H A R D W A R E '  :
<
         LAI         TYPTH           < (A)='TYPTH'.
         LR          X,B             < LE 'DBT' A MIS LE NUMERO DE CETTE
                                     < 'TACHE HARDWARE' DANS 'X', ON LE
                                     < REMET DANS 'B'.
         JMP         SMWHO1          < ET C'EST TOUT...
<
<        C A S   D ' U N E   ' T A C H E   S O F T W A R E '  :
<
SMWHO3:  EQU         $
         LB          &ANS            < (B)='NIVEAU SOFTWARE' DE CETTE 'TACHE
                                     <     SOFTWARE' DONNE PAR LE MOT 'NS'
                                     <     DE LA MEMOIRE DEBANALISEE.
         ADRI        -NSNSP0,B       < TRANSLATION DU 'NS' POUR OBTENIR
                                     < LE 'NSP'
         LAI         TYPTS           < PUIS (A)=TYPTS...
<
<        R E T O U R   A U   D E M A N D E U R  :
<
SMWHO1:  EQU         $
         PLR         X               < RESTAURATION DE 'X'...
         RSR
         PAGE
<
<
<        L E C T U R E   E T   A F F I C H A G E   P U P I T R E
<
<
SIOPUI:  WORD        ACPUP?FPHIN     < OPERANDE 'SIO' ENTREE INFORMATION,
SIOPUE:  WORD        ACPUP?FPHETA    < OPERANDE 'SIO' ENTREE ETAT,
SIOPUO:  WORD        ACPUP?FPHOUT    < OPERANDE 'SIO' SORTIE INFORMATION,
SIOPUC:  WORD        ACPUP?FPHCME    < OPERANDE SIO SORTIE VOYANTS SELECTION.
<
<
<        FONCTION :
<                      CE S/P LIT DANS 'A' LE MOT ENTRE AU PUPITRE
<                    ET PLACE DANS 'B' LE MOT D'ETAT DU PUPITRE. LE
<                    PROGRAMME APPELANT DEVRA TESTER LE CONTENU DE
<                    'B' POUR SAVOIR S'IL DOIT OU NON PRENDRE EN
<                    COMPTE LE CONTENU DE 'A', ENFIN, IL
<                    POSITIONNE LE CARRY 'C' PAR UN 'TBT'
<                    SUR LE BIT INFORMATION VALIDE, SOIT
<                    LE BIT 'ETAPIV' DE 'B'...
<
<
SMPUI:   EQU         $
         BSR         ATDEFS          < AU CAS OU L'APPELANT FERAIT UN BOUCLAGE
                                     < SUR CE SOUS-PROGRAMME, EN ATTENDANT
                                     < DES INFORMATIONS VALIDES...
         PSR         L               < SAUVEGARDE...
         LRM         L
         WORD        SIOPUI          < (L)=ADRESSE DE L'OPERANDE D'ENTREE
                                     <     D'INFORMATION.
         SIO         SIOPUI-SIOPUI,L < LECTURE DANS 'A' DU PUPITRE,
         LR          A,B
         SIO         SIOPUE-SIOPUI,L < LECTURE DANS 'A' DU MOT D'ETAT,
         XR          A,B             < (A)=MOT LU,
                                     < (B)=MOT D'ETAT PUPITRE.
         PLR         L               < RESTAURATION...
         TBT         NBITMO+PUPLOC   < LE PUPITRE EST-IL LOCKE ???
         JC          SMPUI1          < NON, OK...
         RBT         NBITMO+ETAPIV   < OUI, ON FAIT COMME S'IL N'Y AVAIT PAS
                                     < D'INFORMATION VALIDE...
SMPUI1:  EQU         $
         TBT         NBITMO+PUSTEP   < Y-A-T'IL EU ACTION SUR 'STEP' ???
         JC          SMPUI2          < OUI, OK...
         RBT         NBITMO+ETAPIV   < NON, ON FAIT COMME S'IL N'Y AVAIT
                                     < PAS D'INFORMATION VALIDE...
SMPUI2:  EQU         $
         TBT         NBITMO+ETAPIV   < POUR PERMETTRE UN TEST AU RETOUR
                                     < SUR "INFORMATION VALIDE"...
         RSR
<
<
<        V I S U A L I A T I O N   P U P I T R E  :
<
<
<        FONCTION :
<                      CE S/P VISUALISE AU PUPITRE LE CONTENU
<                    DU REGISTRE 'A', SANS ATTENDRE LA FIN DE TRANSFERT
<                    DU REGISTRE 'DATA OUT' AU VOYANTS DU PUPITRE...
<
<
SMPUO:   EQU         $
         PSR         L
         LRM         L
         WORD        SIOPUO          < (L)=ADRESSE DE L'OPERANDE DE SORTIE.
         SIO         SIOPUO-SIOPUO,L < ET AFFICHAGE DE L'INFORMATION (A)...
         PLR         L
         RSR
         PAGE
<
<
<        S Y S E R   -   T R A I T E M E N T   D E S   E R R E U R S  :
<
<
<        FONCTION:
<                      CE S/P EST APPELE LORSQU'EST RENCONTREE
<                    UNE ERREUR SYSTEME. IL REGARDE SI L'ON EST EN
<                    PHASE MASQUEE OU NON, ET AGIT COMME SUIT :
<                                    - SI L'ON EST EN PHASE MASQUEE,
<                                    IL BOUCLE SUR UN APPEL A TDEFS OU
<                                    BIEN A SMPUI SUIVANT LA VALEUR 0/1
<                                    DE 'RECON' DANS 'ETASYS'.
<                                    - SI L'ON N'EST PAS EN PHASE MASQUEE,
<                                    IL FAIT 'ACTD'...
<
<
SYSER:   EQU         $
XKREG:   VAL         K               < INITIALISATION DU CUMUL DES REGISTRES.
       #@PSR         A,B,L           < #SISP CMS5 KREG#
XWOR%1:  VAL         -XKREG          < NOMBRE DE REGISTRES EMPILES.
         LR          K,L             < 'L' BASE LA PILE 'K'...
         LA          -XWOR%1,L       < (A)=VALEUR DU REGISTRE 'P' DE 'SYSER'.
         LRM         L
         WORD        SIOPUC          < (L)=BASE DES ARGUMENTS DU PUPITRE.
         SIO         SIOPUC-SIOPUC,L < VISUALISATION DU REGISTRE 'P' DE
                                     < 'SYSER' SUR LES VOYANTS 'SELECTION'.
         BSR         ASMIT           < TEST MASQUAGE DES INTERRUPTIONS :
         JANE        SYSER1          < PHASE MASQUEE...
<
<        P H A S E   N O N   M A S Q U E E  :
<
         ACTD
         JMP         SYSER2
SYSER1:  EQU         $
<
<        P H A S E   M A S Q U E E  :
<
         LA          ETASYS
         TBT         RECON           < QUEL EST LE TYPE DE BLOCAGE DE 'TH0' ???
         JNC         SYSER3          < BLOCAGE AVEC DEBLOCAGE MANUEL...
SYSER4:  EQU         $               < BLOCAGE AVEC DEBLOCAGE 'CLEAR'+'MEM'...
         BSR         ASMPUI          < ET BIEN LISONS LE PUPITRE...
         JNC         SYSER4          < RIEN DE BIEN INTERESSANT...
         JMP         SYSER2          < ET OUI, C'EST FINI...
SYSER3:  EQU         $               < BLOCAGE AVEC DEBLOCAGE MANUEL...
         BSR         ATDEFS
ZSYSER:  EQU         $               < ADRESSE DE BOUCLAGE SUR SYSER
                                     < AVEC INTERRUPTIONS MASQUEES.
         JMP         SYSER3
<
< ET RETOUR :
<
SYSER2:  EQU         $
         LAI         K
         SIO         SIOPUC-SIOPUC,L < NETTOYONS LES VOYANTS 'SELECTION'...
         PLR         A,B,L
         RSR
         PAGE
<
<
<        D E T E C T I O N   D E S   D E F A U T S
<        S E C T E U R   E N   A T T E N T E  :
<
<
<        FONCTION :
<                      LE DEFAUT SECTEUR EST MALHEUREU-
<                    SEMENT MASQUE PAR LE BIT 'IOM' ;
<                    EN CONSEQUENCE, PUISQUE LE SYSTEME
<                    CONTIENT DE TRES NOMBREUSES PHASES
<                    MASQUEES DE DUREE INDETERMINEE, IL
<                    FAUT POUVOIR AU COURS DE CES MASQUAGES
<                    DETECTER LES DEFAUTS SECTEURS EN
<                    ATTENTE, ET FAIRE QUELQUE CHOSE,
<                    CAR SI RIEN N'EST FAIT :
<                    1 - LE DEFAUT SECTEUR NE SERA PAS
<                    TRAITE, ET LE 'RESTART' NE POURRA SE
<                    FAIRE,
<                    2 - LA MACHINE N'ETANT PAS MISE
<                    EN 'HALT' AU MOMENT DE LA DISPARITION
<                    EFFECTIVE DU COURANT, LA MEMOIRE EXECUTERA
<                    DES CYCLES COMPLETEMENT FARFELUS
<                    LA RENDANT NON INTEGRE !!!
<
<                      AUSSI, CE PETIT SOUS-PROGRAMME
<                    MIRACLE SERA APPELE PARTOUT OU DES
<                    PHASES MASQUEES LONGUES SONT A
<                    PREVOIR (PAR EXEMPLE TEST DE VER-
<                    ROUILLAGES...). S'IL DETECTE UN DEFAUT SECTEUR
<                    EN ATTENTE, IL IDENTIFIERA L'APPELANT :
<                    1 - S'IL S'AGIT DE LA TACHE 'DEFAUT
<                    SECTEUR ELLE-MEME, IL N'Y A RIEN A
<                    FAIRE,
<                    2 - S'IL S'AGIT D'UNE 'TACHE SOFTWARE',
<                    ON DEMASQUE LE DEFAUT SECTEUR, QUI VA
<                    DONC PASSER ; VU QU'IL S'AGIT D'UN CHAN-
<                    GEMENT DE CONTEXTE ENTRE UNE 'TACHE
<                    SOFTWARE' ET UNE 'TACHE HARDWARE' (LE
<                    'DEFAUT SECTEUR'), LA REPRISE ('RESTART')
<                    SE FERA BIEN : LA 'PSTS' SERA REGENEREE.
<                    3 - S'IL S'AGIT D'UNE 'TACHE HARDWARE',
<                    LE PROBLEME EST PLUS CORSE ; IL FAUT
<                    D'ABORD SAUVEGARDER LES REGISTRES
<                    'A', 'B', 'X', 'Y', 'L', 'W', 'SLO'
<                    ET 'SLE' DANS LA PILE, ET LES REGISTRES
<                    'C', 'K', 'P' ET 'S' DANS UNE FAUSSE
<                    'PSTH' ; IL FAUT ENSUITE RESTAURER
<                    LES REGISTRES DE LA TACHE INTERROMPUE
<                    PAR CETTE 'TACHE HARDWARE' PUIS
<                    FAIRE COMME SI ELLE S'ETAIT TERMINEE
<                    NORMALEMENT ('ACQ') ; C'EST A CE MOMENT
<                    LA QUE PASSERA LE DEFAUT SECTEUR, ET ON
<                    SERA AINSI RAMENE A L'INTERRUPTION
<                    D'UNE 'TACHE HARDWARE' ALORS QU'ELLE
<                    N'A ENCORE RIEN FAIT (JUSTE A SON
<                    POINT D'ENTREE) ; UNE TELLE 'TACHE
<                    HARDWARE' PEUT ENSUITE VOIR SA 'PSTH'
<                    REINITIALISEE BRUTALEMENT SANS
<                    PROBLEME... LORS DU 'RESTART' SI ON
<                    DETECTE UNE 'TACHE HARDWARE' INTERROMPUE
<                    PAR CE SOUS-PROGRAMME, ET BIEN ON
<                    REINITIALISE SA 'PSTH' AVEC LA
<                    FAUSSE 'PSTH' GENEREE AU MOMENT DU
<                    DEFAUT SECTEUR...
<
<
<        ETAT DES INTERRUPTIONS :
<                      ON NOTERA AVEC PROFIT QUE SI
<                    'TDEFS' ENTREPREND QUELQUE CHOSE
<                    LORSQU'IL A DETECTE UN DEFAUT SECTEUR,
<                    C'EST QUE LES INTERRUPTIONS ETAIENT
<                    MASQUEES, CAR SINON, ET BIEN LE PAUVRE,
<                    IL N'AURAIT RIEN VU...
<                      DANS CES CONDITIONS, IL N'Y A PAS POUR
<                    'TDEFS' DE PROBLEMES DE REENTRANCE
<                    LORSQU'IL TRAVAILLE, MAIS UNIQUEMENT
<                    DES PROBLEMES DE RECURSIVITE (EN
<                    PARTICULIER S'IL EST APPELE PAR
<                    LE RECEPTEUR DES 'SVC' MAITRES, CAR
<                    LUI MEME FAIT DES 'SVC') ; CE PROBLEME
<                    EST RESOLU A L'AIDE D'UN COMPTEUR
<                    QUI N'A DONC PAS BESOIN D'ETRE "REEN-
<                    TRANT" ET QUI PERMET DE COMPTER LES
<                    IMBRICATIONS D'APPEL...
<
<
<        NOTA :
<                      CE PROGRAMME EST EMPRUNTE A 'CMS4-MP'
<                    ET CERTAINS COMMENTAIRES PEUVENT PARAITRE
<                    DE CE FAIT ERRONES (ADRESSE DE 'IC' TRANSLATEE
<                    DE 'DEPLH'... PAR EXEMPLE).

<
TDEFS:   EQU         $
         PSR         A
         CALL        #SISP CMS5 RST#
         TBT         WARNG           < Y-A-T'IL UN DEFAUT SECTEUR
                                     < EN ATTENTE ???
         JNC         TDEFS1          < NON, DONC RIEN A FAIRE...
<
< APPAREMMENT, ON A TROUVE LE BIT 'WARNG'
< A '1' DANS LE REGISTRE 'A' MAIS CELA NE
< PROUVE PAS QU'IL SOIT TOUJOURS A '1' DANS
< LE REGISTRE 'ST' ; EN EFFET, SI LES INTER-
< RUPTIONS NE SONT PAS MASQUEES, UN DEFAUT
< SECTEUR A PU PASSER ENTRE LA LECTURE
< DE 'ST', ET LE TEST DE 'WARNG' ; EN
< CONSEQUENCES, 'TDEFS' NE DOIT ETRE
< FAIT QUE SI LES INTERRUPTIONS SONT
< MASQUEES ; SI ELLES NE SONT PAS, LE
< DEFAUT SECTEUR PASSERA TOUT SEUL...
<
< LES INTERRUPTIONS SONT-ELLES MASQUEES ???
< (ON NE PEUT UTILISER 'NSMIT', CAR LES
< 'SVC' MAITRES REFERENCENT 'TDEFS', ET ON
< N'A PAS ENCORE ELIMINER LES APPELS
< RECURSIFS...)
<
         PSR         B
XMASK:   VAL         MIPM?MIOM       < GENERATION D'UN MASQUE DE TEST DES
                                     < BITS 'IPM' ET 'IOM'.
         LRM         B
         WORD        XMASK           < (B)='XMASK'.
         ANDR        B,A             < (A)=K SI LES INTERRUPTIONS NE SONT
                                     <     PAS MASQUEES...
         PLR         B               < RESTAURATION DES CONDITIONS DE RETOUR.
         JAE         TDEFS1          < LES INTERRUPTIONS N'ETANT PAS MASQUEES,
                                     < IL EST INUTILE DE FAIRE 'TDEFS'...
<
< LORSQUE LES INTERRUPTIONS SONT MASQUEES :
<
<
< ELIMINATION DES APPELS RECURSIFS :
<
         IC          KTDEFS          < INHIBITION DES TESTS DE 'TDEFS' PAR
                                     < COMPTAGE DES ENTREES EMBOITEES DANS
                                     < 'TDEFS' ET TRAITANT UN DEFAUT SECTEUR ;
                                     < RAPPELONS QU'IL N'Y A PAS DE PROBLEMES
                                     < DE REENTRANCE CAR ON EST SUR QUE LES
                                     < INTERRUPTIONS SONT MASQUEES...
         JG          TDEFS7          < ELIMINATION DE TOUS LES APPELS,
                                     < SAUF LE PREMIER ('KTDEFS'=K) BIEN
                                     < ENTENDU !!!
<
< CAS OU UN DEFAUT SECTEUR EST DETECTE :
< EST-IL ACTIF OU BIEN EN ATTENTE ???
<
         PSR         B,X
         BSR         ASMWHO          < QUI EST LA ??? QUI A APPELE
                                     < CE SOUS-PROGRAMME.
                                     < ON TROUVE DANS :
                                     < 'A' : LE TYPE 'TYPTH'/'TYPTS',
                                     < 'B' : L'IDENTIFICATEUR ('NSP' OU
                                     <       NUMERO DE 'TACHE HARDWARE').
         JAE         TDEFS2          < CAS DES TACHES SOFTWARES...
<
<        C A S   D E S   ' T A C H E S   H A R D W A R E S '  :
<
         XR          A,B             < POUR TESTER L'IDENTIFICATEUR.
         CPI         NUMDEF
         JE          TDEFS3          < ET OUI, C'EST LE DEFAUT SECTEUR,
                                     < IL FAUT LE LAISSER SE DEROULER
                                     < NORMALEMENT...
<
< CAS DES 'TACHES HARDWARES' DE 'TH0' A 'TH0+NMTH-1' :
<
         XR          A,B
         STA         TYPDEF          < SAUVEGARDE DU TYPE 'TYPTH',
         STB         IDEDEF          < ET DE L'IDENTIFICATEUR...
         LA          SMASK           < SAUVEGARDE DE L'ETAT D'IMBRI-
         STA         MKDEF           < CATION DES INTERRUPTIONS.
                                     < A T T E N T I O N  :
                                     < (A)='SMASK' !!!
                                     < AINSI ON EMPILE LE 'SMASK' ACTIF
                                     < AU MOMENT DU DEFAUT SECTEUR...
         PSR         A,B,X,Y         < SAUVEGARDE DES REGISTRES N'APPARTE-
         PSR         C,L,W           < AUX CONTEXTES PARTIELS AINSI QUE 'C'.
         CALL        #SISP CMS5 PSRSLO#
                                     < LECTURE DES REGISTRES (SLO,SLE),
                                     < ET EMPILEMENT DE SAUVEGARDE...
         LRM         W
         WORD        FPSTH           < 'W' VA BASER UNE FAUSSE 'PSTH'
                                     < DESTINEE A UNE SAUVEGARDE DU
                                     < CONTEXTE PARTIEL DE LA TACHE.
         USE         W,PSTH
<
<        A T T E N T I O N  :
<                      LA BASE 'C' A ETE EMPILEE, ET CE QUE
<                    L'ON VA METTRE DANS LE MOT 'HC' DE LA
<                    'PSTH' EST EN FAIT LE REGISTRE 'L' QUI
<                    CONTIENT L'ADRESSE DE 'IC'
<
<                    (ET CECI POUR EVITER DES ALEAS DUS
<                    AU DEFAUT SECTEUR...)
<
         LR          K,A
         STA         HK              < SAUVEGARDE DU REGISTRE 'K'.
         LRM         A
         WORD        TDEFS5
         STA         HP              < SAUVEGARDE DU REGISTRE 'P' A
                                     < UTILISER LORS DE LA REAPPARITION
                                     < DU SECTEUR.
         LAI         K               < CLEAR DU REGISTRE A AFIN DE LIRE
         RST                         < LE REGISTRE ST DANS A PAR RST
         STA         HS              < SAUVEGARDE DU REGISTRE 'S' COMPLET...
<
< SAUVEGARDE DU CHAMP 'MALARM' DES 'PSTH' :
<
         LA          IDEDEF          < (A)=NUMERO DE LA 'TACHE HARDWARE'.
         SLLS        LPSTH=K         < (A)=NUMERO TH * LPSTH.
         ADRI        HS-PSTH,A       < (A)=INDEX D'ACCES AU MOT HS DE
                                     <     LA "BONNE" PSTH
         LR          A,X             < QU'ON PLACE DANS 'X'...
         LA          &AXPSTH         < (A)=MOT 'HS' DE LA 'PSTH',
         ANDI        MALARM          < RECUPERATION DU CHAMP 'MALARM'
         STA         ALADEF          < QUE L'ON SAUVEGARDE, CE QUI EST
                                     < BIEN UTILE SI L'ON EST DANS LA
                                     < 'TACHE HARDWARE' 0...
<
< SIMULONS UNE FAUSSE FIN DE 'TACHE HARDWARE' :
<
         LA          IDEDEF          < (A)=NUMERO DE LA 'TACHE HARDWARE' EN
                                     <     COURS.
         BSR         ASMIC           < RENVOIE : (B)=ADRESSE DU 'IC' DE
                                     < CETTE TACHE.
         STB         HC              < LE MOT 'HC' VA MEMORISER LA
                                     < BASE 'L', SOIT L'ADRESSE DE 'IC'
                                     < TRANSLATEE DE 'DEPLH' (OU 'DEPCH').
         LR          B,L             < (L)=ADRESSE DU 'IC' DE LA TACHE QUE
                                     < L'ON DESIRE INTERROMPRE.
         USE         W,DEM0
         USE         L,PSTH          < PUISQUE 'IC' ET 'PSTH' UTILISENT
                                     < LA MEME 'DSEC'...
         LA          HK              < (A)=VALEUR INITIALE DU REGISTRE 'K'
                                     <     DE LA 'TACHE HARDWARE' A INTER-
                                     <     ROMPRE.
         WORD        AREGTH          < AFIN DE METTRE 'K' A LA VALEUR QU'IL
                                     < AVAIT APRES LA SAUVEGARDE COMPLEMENTAIRE
                                     < DES REGISTRES DE LA TACHE INTERROMPUE.
         LR          A,K             < 'K' PREND LA VALEUR QU'IL DOIT
                                     < AVOIR A L'ENTREE DE 'SISP CMS5 THDEB'.
<
< ET MAINTENANT NOUS POUVONS ENTREPRENDRE EN TOUTE
< TRANQUILLITE D'ESPRIT UN FAUX EPILOGUE DE VRAIE
< TACHE HARD, NON-PARAMETRE (ATTENTION AUX MODIFS !!)
< TERMINE PAR UN ACQ TRES ATTENDU PAR TOUT LE
< MONDE LIBRE, SURTOUT PAR DEFSEC QUI TREPIGNE D'IMPATIENCE...
<
XKREG:   VAL         K               < INITIALISATION DU CUMUL DES REGISTRES.
       #@PLR         L               < #SISP CMS5 KREG# ADRESSE 'IC'...
       #@PLR         A,B             < #SISP CMS5 KREG#
THDSL1:: VAL         -XKREG          < POUR CALCULER 'THDSLO' PLUS LOIN...
         WOE                         < MISE EN PLACE DE (SLO,SLE) DE LA TACHE
                                     < INTERROMPUE...
         STZ         ICSAV           < INDICATEUR DE SAUVEGARDE...
         LR          L,C             < EN PREVISION DE L'ACQ...
       #@PLR         L,W             < #SISP CMS5 KREG#
       #@PLR         A,B,X,Y         < #SISP CMS5 KREG#
LREGTH:: VAL         -XKREG          < NOMBRE DE REGISTRES DEPILES.
<*******************************************************************************
BREGTH:  ADRI        LREGTH,A        < GENERATION D'UNE INSTRUCTION "EN AVANT".
XWOR%1:  VAL         '0000000@@@@    < RECUPERATION DU CODE GENERE.
<*******************************************************************************
AREGTH:  EQU         ZERO+XWOR%1     < CODE GENERE DEFINI "EN AVANT"...
         $EQU        BREGTH          < ANNULATION DU CODE GENERE.
         ACQ                         < DESARMEMENT,
                                     < LE DEFAUT SECTEUR PASSE DONC ICI !!!
<
< POINT DE RETOUR DE LA 'TACHE HARDWARE'
< INTERROMPUE : ON SUPPOSE EVIDEMMENT QUE
< 'C', 'K', 'P' ET 'S' ONT LA VALEUR
< QU'ILS AVAIENT DANS LA FAUSSE 'PSTH' :
<
TDEFS5:  EQU         $
         CALL        #SISP CMS5 FTHDEB# < COMME SON NOM L'INDIQUE,
                                     < C'EST UN FAUX PROLOGUE DE
                                     < TACHE HARD (ON NE GENERE PAS
                                     < EN EFFET LE FAMEUX THXX:  EQU  $
                                     < QUI DEROUTERAIT QUELQUE PEU
                                     < L'ASSEMBLEUR...
<
<        UTILISATION DES BASES :
<                    (C)=COM+DEPCS
<                    (L)=ICXX
<
<
< RESTAURATION DU CHAMP 'MALARM' DES 'PSTH' :
<
         LA          ICNUM           < (A)=NUMERO DE LA 'TACHE HARDWARE'.
         SLLS        LPSTH=K         < (A)=INDEX DE LA "BONNE" PSTH
         ADRI        HS-PSTH,A       < POUR ACCES AU MOT 'HS',
         LR          A,X
         LB          &AXPSTH         < CHARGEMENT DU MOT 'HS'.
         LAI         K               < RECUPERATION DE LA VALEUR DU CHAMP
         XM          ALADEF          < 'MALARM' ET REINITIALISATION ;
                                     < ON NOTERA, QUE SI JE NE ME SUIS
                                     < PAS TROMPE, LES INTERRUPTIONS SONT
                                     < MASQUEES DEPUIS LE DEBUT DU 'RESTART',
                                     < ET QU'IL N'Y A DONC PAS DE PROBLEMES
                                     < QUAND A LA VALEUR DE 'ALADEF' PUISQUE
                                     < LE DEFAUT SECTEUR EST MASQUE...
         ANDI        MALARM          < PAR PURE PRUDENCE...
         ORR         B,A             < POUR AVOIR LE 'ST' COMPLET
         STA         &AXPSTH         < RESTAURATION DU CHAMP 'MALARM'
                                     < DE LA 'PSTH' COURANTE.
<
< DEPLACEMENT DES REGISTRES DE LA 'TACHE
< SOFTWARE' INTERROMPUE PAR CETTE 'TACHE
< HARDWARE' AFIN D'EFFECTUER ULTERIEURE-
< MENT UNE SORTIE NORMALE DE CETTE 'TACHE
< HARDWARE' ; N'OUBLIONS PAS QUE L'ON EST
< ICI DANS 'TDEFS'...
<
         LR          K,A             < 'A' CONTIENT L'ADRESSE DU MOT CON-
                                     < TENANT LE DERNIER REGISTRE EMPILE.
         ADRI        -LREGTH+Z,A
                                     < (A)=ADRESSE EMETTEUR=ADRESSE DU MOT
                                     <     CONTENANT LE PREMIER REGISTRE
                                     <     EMPILE PAR 'SI CMS5 THDEB'
         USE         L,PSTH          < BASE 'IC'
         LB          HK              < (B)=VALEUR INITIALE DU REGISTRE 'K'
                                     < 'K' DE LA TACHE 'HARDWARE'
         ADRI        DEPILE,B        < (B)=ADRESSE RECEPTEUR=ADRESSE DU
                                     <     MOT CONTENANT NORMALEMENT LE
                                     <     PREMIER MOT EMPILE PAR
                                     <     'SI CMS5 THDEB'.
         LXI         LREGTH          < (X)=NOMBRE DE REGISTRES EMPILES.
         MOVE                        < REGENERATION DU DEBUT DE LA
                                     < PILE DE LA 'TACHE HARDWARE' AFIN
                                     < QUE SA SORTIE NORMALE SE FASSE
                                     < BIEN...
         ADRI        -LREGTH,K       < ANNULATION DES EMPILEMENTS FAITS.
<
< RESTAURATION DE LA 'TACHE HARDWARE' TELLE
< QU'ELLE ETAIT AU MOMENT DU DEFAUT SECTEUR :
<
                                     < DEPILEMENT DE RESTAURATION ET
         CALL        #SISP CMS5 PLRSLO#
                                     < REECRITURE DES REGISTRES (SLO,SLE)...
         PLR         C,L,W           < PUIS ON RESTAURE LA VALEUR DES REGISTRES
         PLR         A,B,X,Y         < N'APPARTENANT PAS AU CONTEXTE PARTIEL.
                                     < AINSI QUE LA BASE 'C'...
                                     < A T T E N T I O N  :
                                     < (A)='SMASK' : ON DEPILE AINSI LE
                                     <     'SMASK' ACTIF AU MOMENT DU DEFAUT
                                     <     SECTEUR.
         STA         SMASK           < ON TRICHE UN PEU, N'EST-IL PAS ?!?!!??
         JMP         TDEFS4          < ET C'EST PRESQUE FINI...
<
<        C A S   D E S   ' T A C H E S   S O F T W A R E S '  :
<
TDEFS2:  EQU         $
         STA         TYPDEF          < SAUVEGARDE DU TYPE 'TYPTS', AINSI
         STB         IDEDEF          < QUE L'IDENTIFICATEUR DE LA TACHE ('TN').
         LA          SMASK           < SAUVEGARDE DE L'ETAT DES IMBRICATIONS
         STA         MKDEF           < DE MASQUAGE DES INTERRUPTIONS.
         LAI         K
         SBT         IOM
         RST                         < DEMASQUAGE DES INTERRUPTIONS D'ENTREES-
                                     < SORTIES ET DEFAUT SECTEUR ; AINSI, LE
                                     < DEFAUT SECTEUR VA PASSER ICI, ET LUI
                                     < SEUL PUISQU'IL EST LE PLUS PRIORITAIRE.
<
< POINT DE RETOUR COMMUN AUX
< 'TACHES' 'HARDWARES' ET 'SOFTWARES' :
<
TDEFS4:  EQU         $
         BSR         ASMIT           < LES INTERRUPTIONS SONT-ELLE MASQUEES ?
                                     < RAPPELONS QUE C'EST LE 'RESTART' QUI
                                     < DECIDE DE LAISSER LES INTERRUPTIONS
                                     < MASQUEES, OU BIEN DE LES DEMASQUER...
         JANE        TDEFS3          < OK, ELLES SONT MASQUEES...
<
<        S Y S E R  : LES INTERRUPTIONS NE SONT PAS MASQUEES,
<                     ALORS QU'ETANT INTERROMPU DANS 'TDEFS',
<                     C'EST QUE LES INTERRUPTIONS ETAIENT MASQUEES !!!
<
<                    NS=NIVEAU DE LA TACHE 'SOFTWARE' SI ON
<                       EST BIEN DANS UNE TACHE 'SOFTWARE'...
<                    LE REGISTRE 'HV' DISCRIMINE LES TACHES
<                    'HARDWARES' DES TACHES 'SOFTWARES'.
<
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      LE MIEUX PARAIT DE FAIRE UN MASQUAGE
<                    DE 'IOM' ET 'IPM'...
<
TDEFS3:  EQU         $
         PLR         B,X
TDEFS7:  EQU         $
         DC          KTDEFS          < AUTORISATION DES TESTS DE TDEFS
                                     < DECOMPTAGE DES APPELS EMBOITES...
TDEFS1:  EQU         $
         PLR         A
         RSR                         < OUF...
<
<
<        F A U S S E   ' P S T H '  :
<
<
         CALL        #SISP CMS5 CHECK#
FPSTH:   EQU         $
         DZS         LPSTH
         CALL        #SISP CMS5 CHECK#
         PAGE
<
<
<        T A C H E   D E F A U T   S E C T E U R  :
<
<
<        FONCTION :
<                      LA TACHE 'DEFAUT SECTEUR' EST DESTINEE
<                    A TRAITER L'APPARITION DES DEFAUTS D'ALI-
<                    MENTATION SECTEUR.
<                      CE TRAITEMENT EST RENDU FORT COMPLEXE
<                    PAR LA NOTION DE 'CONTEXTE PARTIEL' ; EN
<                    EFFET, SI LES CHANGEMENTS DE CONTEXTES
<                    RELATIFS AUX INTERRUPTIONS SE FAISAIENT
<                    COMME LES CHANGEMENTS DE CONTEXTE DES
<                    'TACHES SOFTWARES' LES 'PSTS' ET LES
<                    'PSTH' AURAIENT UN CONTENU INTEGRE ;
<                    MALHEUREUSEMENT CE N'EST PAS LE CAS.
<                      DONC, LORSQUE LE DEFAUT SECTEUR APPA-
<                    RAIT, IL S'AGIT DE :
<                      RECONSTITUER LA 'PSTS' DE LA 'TACHE
<                    SOFTWARE' DONT LE 'NIVEAU' EST CONTENU
<                    DANS 'NS' (ET DIEU SAIT QUE CELA N'EST
<                    PAS FACILE),
<
<                      CETTE TACHE EST EMPRUNTEE A 'CMS4-MP', EN
<                    MOINS ELEGANT... MOINS ELEGANT...
<                      PAR CONSEQUENT, CERTAINS COMMENTAIRES
<                    POURRONT IRRITER LE PROFANE...
<
<
CCBDEF:  WORD        COSBT?CCBDF=FMASK(K=FCINST
                                     < CCB SPECIAL DE TRANSMISSION D'UN
                                     < DEFAUT SECTEUR A UN IOP...
XWKNIV:  VAL         NUMDEF          < PARAMETRE POUR 'SI CMS5 THDEB'
         CALL        #SISP CMS5 THDEB# < PROLOGUE TACHE HARD
<
<
<        I N I T I A L I S A T I O N S  :
<
<
         LA          DEFOK           < ACCES AU 'DEFOK' COURANT,
         JAE         DEFS13          < OK, IL EST NUL...
         JAL         DEFS11          < ET BIEN NON, IL Y A DEJA DES ANOMALIES,
         NGR         A,A             < ON INVERSE 'DEFOK' AFIN DE LE RENDRE
                                     < NEGATIF, INDIQUANT AINSI UNE ANOMALIE...
DEFS11:  EQU         $
         ADRI        -I,A            < ON COMPTE EN NEGATIF LES ANOMALIES,
         STA         DEFOK           < DANS 'DEFOK'...
         LXI         K               < (X)=INFINI DES 'HALT',
DEFS12:  EQU         $
         HALT                        < ET ON BLOQUE L'UNITE CENTRALE,
         JMP         DEFS12          < CE 'JMP' NE SERVIRA JAMAIS ??!??!?!
DEFS13:  EQU         $
         IC          DEFOK           < 'DEFOK'=I,  MEMORISE AINSI QU'UN DEFAUT
                                     < SECTEUR COMMENCE A ETRE TRAITE, POUR
                                     < AVERTIR L'EVENTUEL PROCESSEUR ESCLAVE.
         LR          L,Y             < SAUVEGARDE DANS Y DE L'ADRESSE DE
                                     < 'IC' DU DEFAUT SECTEUR
<
< ARRET D'UN IOP EVENTUEL :
<
         CALL        #SISP CMS5 W ZERO#
                                     < A PRIORI, 'W'='ZERO'...
         IF          BOXIPI-ZERO,XEIF%,,XEIF%
         IF          ATTENTION : CA VA MERDER !!!
XEIF%:   VAL         ENDIF
         LXI         PROIOP
         LA          &SYSPRO         < (A)=NUMERO D'IOP, SI EXISTE...
         JAL         ZZ001           < ET BIEN NON, PAS D'IOP...
         LXI         PROMST
         CP          &SYSPRO         < LE MAITRE SERAIT-IL L'IOP ???
         JE          ZZ001           < OUI, RIEN A FAIRE, LE MAITRE ETANT
                                     < AUSSI L'IOP, IL CONNAIT LE DEFAUT
                                     < SECTEUR...
         LXI         PROESC
         CP          &SYSPRO         < L'ESCLAVE SERAIT-IL L'IOP ???
         JE          ZZ001           < OUI, RIEN A FAIRE, IL GERE LUI-MEME
                                     < SES DEFAUTS SECTEURS...
         LRM         B,W
         WORD        CCBDEF          < (B)=ADRESSE DU CCB DE DEFAUT SECTEUR.
         WORD        BOXIPI          < (W)=ADRESSE DES BOITES AUX LETTRES.
         ADR         A,W             < (W)=ADRESSE BOITE AUX LETTRES IOP.
         LA          O,W             < (A)=SAUVEGARDE DE LA BOITE AUX LETTRES
                                     <     DE L'IOP AVANT..., EN NOTANT QUE
                                     <     (W) N'EST PLUS NUL...
         STB         O,W             < MISE EN PLACE DU CCB DE DEFAUT SECTEUR,
         IPI                         < ET AVERTISSEMENT IOP...
ZZ001:   EQU         $
         PSR         A,W             < SI UN IOP A ETE ARRETE DANS SON ELAN,
                                     < ON EMPILE L'ADRESSE DE SA BOITE AUX
                                     < LETTRES ET SON CONTENU ; CETTE ADRESSE
                                     < 'W' EST NULLE DANS LE CAS CONTRAIRE...
<
<
<        I D E N T I F I C A T I O N   D E   L A   ' T A C H E
<        S O F T W A R E '   L A   P L U S   P R I O R I T A I R E  :
<
<
         LX          &ANS            < (X)=NIVEAU SOFTWARE DE LA TACHE ACTIVE
                                     < OU DU MOINS INTEROMPUE SOIT PAR
                                     < UNE 'TACHE HARDWARE', SOIT PAR LA
                                     < TACHE 'DEFAUT SECTEUR' ELLE-MEME...
         ADRI        -NSNSP0,X       < (X)=NSP TACHE SOFT DESIGNEE PAR 'NS'
         LA          &ADCTSY         < ON RECUPERE L'ADRESSE DCT DE
                                     < CETTE TACHE
         LR          A,W             < (W)=ADRESSE DE LA 'PSTS' DE LA
                                     <     'TACHE SOFTWARE' QUE L'ON VA
                                     <     RECONSTRUIRE
<
<
<        E T A T   D E S   I N T E R R U P T I O N S  :
<
<
         RDHV                        < MISE DANS LE REGISTRE 'A' DE LA LISTE
                                     < DES INTERRUPTIONS EN COURS DE TRAITE-
                                     < MENT, C'EST-A-DIRE, LA LISTE DES 'TACHES
                                     < HARDWARES' COMMENCEES ET NON ENCORE
                                     < ACHEVEES.
         STA         SAVHV           < SAUVEGARDE EN MEMOIRE DU REGISTRE 'HV'
                                     < AFIN D'ASSURER ULTERIEUREMENT UN BON
                                     < REDEMARRAGE DU SYSTEME.
         IF          TH0-K,,XEIF%,
         IF          A T T E N T I O N  : 'TH0', POUR ETRE CONFORME
         IF          AUX CONVENTIONS DE LA MICRO-MACHINE DOIT ETRE NUL !!!
XEIF%:   VAL         ENDIF
         LXI         NUMDEF          < ON SUPPOSE AINSI A PRIORI QU'IL N'Y
                                     < A PAS DE 'TACHES HARDWARES' INTERROM-
                                     < PUES PAR LE 'DEFAUT SECTEUR'.
         LBI         K               < ON CLEAR LE REGISTRE 'B', AFIN QUE
                                     < L'INSTRUCTION 'DBT' DONNE BIEN LES
                                     < NUMEROS DE 'TACHES HARDWARES' QUI
                                     < EXISTENT !!!
DEFS02:  EQU         $
         DBT                         < RECHERCHE DE LA 'TACHE HARDWARE'
                                     < COURANTE LA PLUS PRIORITAIRE (A
                                     < L'EXCEPTION DU 'DEFAUT SECTEUR').
         JC          DEFS01          < ON NE L'A PAS TROUVE, ON A DONC DANS
                                     < LE REGISTRE 'X' LE NUMERO DE LA 'TACHE
                                     < HARDWARE' LA MOINS PRIORITAIRE, QUI
                                     < PEUT ETRE 'NUMDEF' DANS LE CAS OU LE
                                     < REGISTRE 'HV' EST NUL...
         RBT         TH0,X           < DANS LE CAS OU CETTE 'TACHE HARDWARE'
                                     < EXISTE, ON LA SUPPRIME DE LA LISTE
                                     < AFIN DE PASSER A UNE 'TACHE HARDWARE'
                                     < MOINS PRIORITAIRE, AFIN DE TROUVER
                                     < LA TACHE LA MOINS PRIORITAIRE...
         JMP         DEFS02
DEFS01:  EQU         $
         LR          X,A             < ON TROUVE DANS 'X' (ET DANS 'A')
                                     < LE NUMERO DE LA 'TACHE HARDWARE'
                                     < LA MOINS PRIORITAIRE (ELLE PEUT
                                     < ETRE 'DEFSEC' ELLE-MEME...)
         BSR         ASMTH           < RENVOIE DANS LE REGISTRE 'B'
                                     < L'ADRESSE DE LA 'PSTH' DONT (A)
                                     < EST LE NUMERO.
         LR          B,L             < LA BASE 'L' VA ETRE UTILISEE
                                     < POUR BASER LA 'PSTH' ACTIVE
                                     < LA MOINS PRIORITAIRE.
         USE         W,PSTS          < 'W' BASE LA 'PSTS' INTERROMPUE
                                     < QUE L'ON CHERCHE A RECONSTITUER.
         USE         L,PSTH          < 'L' BASE LA 'PSTH' LA MOINS
                                     < PRIORITAIRE; CETTE 'PSTH' CON-
                                     < TIENT LES REGISTRES 'C', 'K'
                                     < ET 'P' (ET PEUT ETRE 'S') DE LA
                                     < 'PSTS' BASEE PAR 'W'.
<
<
<        R E S T A U R A T I O N   D E S   R E G I S T R E S
<                    ' C ' ,   ' K '   E T   ' P '  :
<
<
         LA          HC
         STA         SC              < RESTAURATION DU REGISTRE 'C'
                                     < DE LA 'PSTS'.
         LA          HK
         STA         SK              < RESTAURATION DU REGISTRE 'K'
                                     < DE LA 'PSTS'.
         LA          HP
         STA         SP              < RESTAURATION DU REGISTRE 'P'
                                     < DE LA 'PSTS'.
<
<
<        R E C H E R C H E   D U   R E G I S T R E   ' S '  :
<
<
         LAI         K               < CLEAR DU REGISTRE A AFIN DE LIRE
         RST                         < LE REGISTRE ST DANS A PAR RST
         TBT         SCHED           < TEST DU BIT 'SCHED'...
         JC          DEFS03          < 'SCHED'=1 : LA 'TACHE SOFTWARE'
                                     < DONT ON A L'ADRESSE DE 'PSTS' DANS
                                     < 'W' A ETE INTERROMPUE DANS LE
                                     < MICRO-SCHEDULER...
<
< LA 'TACHE SOFTWARE' A ETE INTERROMPUE "NORMALEMENT" :
<
         LA          HS
         STA         SS              < RESTAURATION DU REGISTRE 'S'
                                     < DE LA 'PSTS'.
         JMP         DEFS04          < VERS LA RECHERCHE DES REGISTRES
                                     <'SLO' ET 'SLE'...
<
< LA 'TACHE SOFTWARE' A ETE INTERROMPUE DANS
< LE MICRO-SCHEDULER :
<
DEFS03:  EQU         $
         LA          HS              < ACCES AU REGISTRE 'S' DE LA 'TACHE
                                     < HARDWARE' LA MOINS PRIORITAIRE,
         TBT         SAUV            < TEST DU BIT 'SAUV'...
         JNC         DEFS05          < 'SAUV'=K : IL Y A EU UN CHANGEMENT
                                     < DE CONTEXTE POUR LA 'TACHE SOFTWARE'
                                     < QUE L'ON A TROUVE DANS 'NS'; SA
                                     < 'PSTS' EST DONC BONNE...
         LA          &ASCHED         < 'SAUV'=1 : LE REGISTRE 'S' DE LA
                                     < 'TACHE SOFTWARE' EST DANS LA
                                     < MEMOIRE DE TRAVAIL 'WSCHED' DU
                                     < MICRO-SCHEDULER EN MEMOIRE DEBANA-
                                     < LISEE.
         STA         SS              < RESTAURATION DU REGISTRE 'S'
                                     < DE LA 'PSTS'.
<
<
<        R E S T A U R A T I O N   D E S   R E G I S T R E S
<                    ' S L O '   E T   ' S L E '  :
<
<
DEFS04:  EQU         $
         LR          Y,L             < (L)=ADRESSE DE 'IC' DU 'DEFAUT SECTEUR'
                                     <     EN EFFET, ETANT DONNE QUE
                                     <     LA SAUVEGARDE DES REGISTRES
                                     <     'SLO' ET 'SLE' DANS LES 'TACHES
                                     <     HARDWARES' SUIT LE MASQUAGE DU
                                     <     PROCESSEUR, ON EST SUR QUE LA
                                     <     TACHE 'DEFAUT SECTEUR' A SAUVEGARDE
                                     <     DANS SA PILE LES REGISTRES 'SLO'
                                     <     ET 'SLE' DE LA 'TACHE SOFTWARE'
                                     <     INTERROMPUE...
         LA          HK              < (A)=VALEUR INITIALE DU REGISTRE 'K'
                                     <     DE LA TACHE 'DEFAUT SECTEUR'.
THDSLO:: VAL         LREGTH-THDSL1+DEPILE
                                     < AFIN D'ALLER CHERCHER LES
                                     < REGISTRES 'SLO' ET 'SLE' DANS LA
                                     < PILE DU 'DEFAUT SECTEUR' (NOTONS
                                     < D'AILLEURS QU'UNE "PILE" EST BIEN UTILE
                                     < LORSQUE LE COURANT DISPARAIT,...
                                     < OUAF..OUAF ?!!?!!!?!?).
         LR          A,L             < LE REGISTRE 'L' BASE LA PILE (-DEPILE)
                                     < DU DEFAUT SECTEUR.
         LA          SSLO-SSLO+THDSLO,L
         STA         SSLO            < RESTAURATION DU REGISTRE 'SLO'
                                     < DE LA 'PSTS'.
         LA          SSLE-SSLO+THDSLO,L
         STA         SSLE            < RESTAURATION DU REGISTRE 'SLE'
                                     < DE LA 'PSTS'.
<
<
<        R E S T A U R A T I O N   D E S   R E G I S T R E S
<        ' A ' ,   ' B ' ,   ' X ' ,   ' Y ' ,   ' L '   E T   ' W '  :
<
<
         LAI         NUMDEF-Z        < (A)=NUMERO DE LA DERNIERE 'TACHE
                                     <     HARDWARE' D'INTERRUPTION; CE QUI
                                     <     FAIT QUE LA SUITE DES OPERATIONS
                                     <     EST FAITE A PRIORITE CROISSANTE
                                     <     DES NIVEAUX D'INTERRUPTION...
DEFS06:  EQU         $
         LX          SAVHV
         XR          A,X             < (A)=ETAT DU REGISTRE DES 'TACHES
                                     <     HARDWARES' ACTIVES AU MOMENT DU
                                     <     DEFAUT SECTEUR, ET
                                     < (X)=NUMERO DE LA 'TACHE HARDWARE'
                                     <     COURANTE.
         TBT         TH0,X           < LA TACHE COURANTE ETAIT-ELLE ACTIVE ???
         XR          A,X             < RESTAURATION DES REGISTRES.
         JNC         DEFS10          < NON, DONC INUTILE D'ALLER VOIR SI
                                     < ELLE A PU SAUVEGARDER LES REGISTRES
                                     < QUE L'ON RECHERCHE...
         BSR         ASMIC           < RENVOIE :
                                     < (B)=ADRESSE DE L''IC' DE LA 'TACHE
                                     <     HARDWARE DONT LE NUMERO EST DANS 'A'.
         LR          B,L             < (L)=ADRESSE DU 'IC' COURANT.
         USE         L,PSTH          < PUISQUE 'IC' ET 'PSTH' UTILISENT
                                     < LA MEME 'DSEC' (QUE D'ABREVIATIONS!)
         LR          A,B             < SAVE LE NUMERO DE 'TACHE HARDWARE'
                                     < COURANT DANS LE REGISTRE 'B'.
<
< RECHERCHE DE LA 'TACHE HARDWARE' LA MOINS PRIORITAIRE
< DONT 'ICSAV' SOIT DIFFERENT DE 'CICSAV' ; CELA
< SIGNIFIERA ALORS QU'ELLE A DANS SA PILE LES 6
< REGISTRES RECHERCHES :
<
         LA          ICSAV
         JANE        DEFS07          < OK,ON A TROUVE LA TACHE HARDWARE
                                     < DONT LA PILE CONTIENT LES REGISTRES
                                     < CHERCHES...
         LR          B,A             < ET NON, RESTAURE (A)=NUMERO DE 'TACHE
                                     < HARDWARE' COURANT,
DEFS10:  EQU         $
         ADRI        -P,A            < ET PASSAGE A LA PRECEDENTE...
         JAGE        DEFS06          < VERS LE TEST DE LA TACHE HARDWARE
                                     < DE PRIORITE IMMEDIATEMENT SUPERIEURE.
<
< LORSQU'ON N'A PU TROUVER AUCUNE 'TACHE HARDWARE'
< AYANT PU SAUVEGARDER LES REGISTRES CHERCHES,
< ON SAIT ALORS QUE CES DERNIERS SONT DANS LA
< PILE DU DEFAUT SECTEUR :
<
         LR          Y,L             < ON MET DANS 'L' L'ADRESSE DE 'IC'
                                     < DU DEFAUT SECTEUR...
<
< RECUPERATION DES REGISTRES 'A', 'B', 'X', 'Y',
< 'L' ET 'W' DANS LA PILE REFERENCEE PAR LE 'IC'
< DONT L'ADRESSE EST DANS LE REGISTRE 'L' :
<
DEFS07:  EQU         $
         LA          HK              < (A)=VALEUR INITIALE DU REGISTRE 'K'
                                     <     DE LA 'TACHE HARDWARE' DONT LA
                                     <     PILE CONTIENT LES REGISTRES...
         LR          A,L             < 'L' VA BASER CETTE PILE (-DEPILE).
J:       VAL         K               < INITIALISATION...
         LA          DEPILE+J,L
J:       VAL         J+I
         STA         SA              < RESTAURATION DU REGISTRE 'A'
                                     < DE LA 'PSTS'.
         LA          DEPILE+J,L
J:       VAL         J+I
         STA         SB              < RESTAURATION DU REGISTRE 'B'
                                     < DE LA 'PSTS'.
         LA          DEPILE+J,L
J:       VAL         J+I
         STA         SX              < RESTAURATION DU REGISTRE 'X'
                                     < DE LA 'PSTS'.
         LA          DEPILE+J,L
J:       VAL         J+I
         STA         SY              < RESTAURATION DU REGISTRE 'Y'
                                     < DE LA 'PSTS'.
         LA          DEPILE+J,L
J:       VAL         J+I
         STA         SL              < RESTAURATION DU REGISTRE 'L'
                                     < DE LA 'PSTS'.
         LA          DEPILE+J,L
J:       VAL         J+I
         STA         SW              < RESTAURATION DU REGISTRE 'W'
                                     < DE LA 'PSTS'.
DEFS05:  EQU         $
<
<
<        F I N   D U   D E F A U T   S E C T E U R
<               E T   A T T E N T E  :
<
<
         PLR         A,W
         CPZR        W               < UN 'IOP' AT'IL ETE ARRETE ???
         JE          DEFS08          < NON...
         STA         O,W             < OUI, ON RESTAURE LE CONTENU DE SA BOITE
                                     < AUX LETTRES EN ESPERANT QU'IL A EU LE
                                     < TEMPS DE PRENDRE EN COMPTE LE 'CCB'
                                     < SPECIAL DEFAUT SECTEUR...
DEFS08:  EQU         $
         IC          DEFOK           < 'DEFOK'=I+I,
                                     < INDIQUE QUE TOUT A ETE FAIT !!!
DEFS09:  EQU         $
         LXI         K               < CHARGEMENT DU REGISTRE 'X' AVEC
                                     < L'"INFINI" DE LA MACHINE ; AINSI
                                     < LE 'HALT' VA METTRE LA MACHINE
                                     < EN ATTENTE POUR 65536*2 MICRO-
                                     < SECONDES, ET AINSI ON EST SUR QUE
                                     < LE SECTEUR DISPARAITRA PENDANT SON
                                     < EXECUTION...
         HALT                        < ET ON ATTEND QUE TOUT DISPARAISSE...
         JMP         DEFS09          < AU CAS OU ON ATTENDRAIT LONGTEMPS...
                                     < MAIS A T T E N T I O N  CE 'JMP' PEUT
                                     < CREER S'IL ETAIT EXECUTE DES CYCLES
                                     < MEMOIRE PARASITE, MAIS ON EST SUR
                                     < D'APRES LA DUREE DU 'HALT' QU'IL NE
                                     < SERA JAMAIS EXECUTE...
         PAGE
<
<
<        R E D E M A R R A G E   D U   S Y S T E M E  :
<
<
<        FONCTION :
<                      CE MODULE 'RESTAR' EST UTILISE
<                    A L'INITIALISATION ('INI') DU
<                    SYSTEME, AINSI QU'A LA REAPPARI-
<                    TION DU SECTEUR ELECTRIQUE APRES
<                    UN DEFAUT SECTEUR ('DEFSEC').
<                      ON NOTERA QUE L'ON A ICI :
<                    IOM=1 (DANS 'ST'),
<                    IPM=1 (DANS 'ST'),
<                    LCM=1 (DANS 'ST'), ET ENFIN
<                    LE REGISTRE 'IM' EST REMIS A 0 (TOUS LES
<                    NIVEAUX D'INTERRUPTIONS SONT DEMASQUES).
<                      LA PREMIERE CHSOE IMPORTANTE QUE
<                    FASSE 'RESTAR' EST DE REGENERER
<                    LES 'PSTH' AU CAS OU IL S'AGIRAIT
<                    D'UNE REAPPARITION DU SECTEUR
<                    ELECTRIQUE.
<
<
<        SENSIBILITE AU DEFAUT SECTEUR :
<                      LE 'RESTART' A LIEU AVEC 'IOM'='IPM'=1,
<                    AINSI QUE LES A POSITIONNE LA MICRO-MACHINE.
<                    EN CONSEQUENCES TOUTES LES OPERATIONS SEN-
<                    SIBLES AU DEFAUT SECTEUR (REINITIALISATION
<                    DES 'PSTH',...) DOIVENT ETRE FAITES AVANT
<                    DE DEMASQUER LES INTERRUPTIONS...
<
<
<        NOTA :
<                      CE PROGRAMME EST EMPRUNTE A 'CMS4-MP'
<                    TOUS LE COMMENTAIRES N'ONT PAS ETE ADAPTES
<
<
<        Q U E   F A I R E   S I   L E   D E F A U T   S E C T E U R
<        N ' A   P A S   E T E   P R I S   E N   C O M P T E
<        S U I T E   A   U N E   P A N N E   H A R D W A R E  :
<
<
<        REALISER LES ACTIONS SUIVANTES :
<
<                    1  - RELANCER 'PROMST' ; CELUI-CI
<                    SE PLANTERA A LA PREMIERE ENTREE-
<                    SORTIE UTILISANT LES CANAUX, LE
<                    PLANTAGE A LIEU SUR LA 'SYSER' DE
<                    TEST DE 'TIME-OUT' (BOUCLE D'ADRES-
<                    SE 'ZIPI4').
<
<                    2  - BLOQUER 'PROMST' EN REMPLACANT
<                    L'INSTRUCTION 'BLOCK3' QUI SUIT LA 'SYSER'
<                    PAR UN 'JMP $', PUIS EN FAISANT 'STEP-
<                    STEP' AU PUPITRE.
<
<                    3  - RECONSTITUER LA PILE 'PILPS1'
<                    DE 'PROESC' TELLE QU'ELLE EST A
<                    L'INITIALISATION DU SYSTEME (EN
<                    PARTICULIER 'PRESC2', ET 'COM'
<                    ONT DISPARUS...).
<
<                    4  - BLOQUER 'PROMST' EN REMPLACANT
<                    L'INSTRUCTION 'BLOCK1' D'ANNULATION DU
<                    MODE 'DEBUG' QUI SUIT 'PQDEF8' PAR
<                    UN 'JMP $', PUIS EN METTANT 'PROMST'
<                    EN 'RUN'.
<
<                    5  - VERIFIER QUE TOUT PARAIT CORRECT...
<
<                    6  - DEBLOQUER 'PROMST' ET 'PROESC'
<                    EN ANNULANT LES 'JMP $' DE BLOQUAGE
<                    SITUES EN 'BLOCK3' ET 'BLOCK1'...
<
<                    7  - LE SYSTEME DOIT ETRE REPARTI,
<                    MAIS LES VISUS DEMEURENT INACCES-
<                    SIBLES CAR LEURS COUPLEURS SONT
<                    DEPROGRAMMES...
<
<                    8  - BLOQUER 'PROMST' EN 'BLOCK2'
<                    EN METTANT UN 'JMP $' ; NE PAS OUBLIER
<                    DE NOTER PRECISEMMENT L'ENSEMBLE DES
<                    REGISTRES DE L''IDLE'...
<
<                    9  - APRES AVOIR MASQUEES TOUTES LES INTER-
<                    RUPTIONS DANS 'ST', FAIRE POUR CHAQUE
<                    VISU DU SYSTEME :
<                                    P <-- 'INICV',
<                                    L <-- 'DCTVIS' COURANTE,
<                    ET EXECUTER EN PAS A PAS LES DEUX
<                    INSTRUCTIONS DE 'INICV' QUI REINI-
<                    TIALISE CHAQUE VOIE.
<
<                    10 - ENFIN, RESTAURER LES REGISTRES
<                    DE 'PROMST' TELS QU'ILS ONT ETE NOTES
<                    AU POINT "8", PUIS ANNULER LE BLOQUAGE
<                    'BLOCK2', ET C'EST REPARTI...
<
<                    11 - ON CONSEILLE ALORS D'ARRETER
<                    TOUS LES UTILISATEURS PROPREMENT
<                    PAR "!F", ET DE RECHARGER ENSUITE
<                    CALMEMENT LE SYSTEME...
<
<
<        F A U S S E   P S T H 0   D E   M I S E   S U R
<        L E   N I V E A U   0   D E   L ' E S C L A V E  :
<
<
PRTH0:   EQU         $
         WORD        COM+DEPCH       < REGISTRE 'C'.
         WORD        PILRES          < REGISTRE 'K'.
         WORD        RESPR1          < REGISTRE 'P'.
         WORD        SMST            < REGISTRE 'S'.
<
<
<        I N I T I A L I S A T I O N S  :
<
<
RESTAR:  EQU         $
         LAI         MMOT
         XIMR        A               < ON MASQUE TOUS LES NIVEAUX DANS 'IM' ;
                                     < EN EFFET, 'IM' NE PARTICIPE PAS AUX
                                     < CHANGEMENTS DE CONTEXTE, ET DE PLUS,
                                     < S'IL N'Y A PAS DE PROCESSEUR ESCLAVE,
                                     < ET MEME S'IL Y EN A UN, ON VA MODIFIER
                                     < LE RELAI DES 'PSTH' NE PERMETTANT AUCUNE
                                     < INTERRUPTIONS PARASITES (QUI PEUVENT
                                     < PASSER, PAR EXEMPLE SI L'ESCLAVE N'EXISTE
                                     < PAS AU RETOUR DE L'ACTD DE NETTOYAGE
                                     < DE LA MEMOIRE)...
         LRM         A,C,W,K
         WORD        PSTH00          < A : POUR REINITIALISER LE RELAI
                                     < DES 'PSTH'.
         WORD        COM+DEPCH       < VALEUR INITIALE DE LA BASE 'C'.
         WORD        ZERO            < 'W' BASE LA MEMOIRE DEBANALISEE.
         WORD        PILRES          < VALEUR INITIALE DU REGISTRE 'K'.
         STA         ALPSTH-ZERO,W   < REINITIALISATION A PRIORI DU RELAI
                                     < DES 'PSTH'...
         RDSI                        < LECTURE DE L'IDENTIFICATION...
         ANDI        MNUBUS?MNUPRO   < (A)=NUMERO DU PROCESSEUR COURANT.
         LXI         PROESC
         CP          &SYSPRO         < EST-ON SUR UN ESCLAVE ???
         JNE         RESTMA          < NON...
<
<
<        R E S T A R T   D ' U N   E S C L A V E  :
<
<
RESTES:  EQU         $               < ENTRY DU MAITRE LORSQUE L'ESCLAVE
                                     < N'EXISTE PAS, ET QU'IL FAUT QUAND
                                     < MEME ALLER NETTOYER LA MEMOIRE
                                     < HAUTE...
         LA          DEFOK           < COMMENT CELA S'EST-IL PASSE ???
         CPI         DEFOK0          < 'DEFOK' DOIT VALOIR I+I...
         JNE         RESTES          < ET BIEN NON, ON BOUCLE; LES RAISONS EN
                                     < SONT PEUT-ETRE, UN 'INI' AU PUPITRE,
                                     < DES DEFAUTS SECTEURS DANS LE 'RESTART',
                                     < OU AUTRE CHOSE...
         LRM         A,B,X,Y,L
         WORD        COM+DEPCH       < A : POUR INITIALISER C(PRTH0),
         WORD        PILRES          < K : POUR INITIALISER K(PRTH0),
         WORD        RESPR1          < X : POUR INITIALISER P(PRTH0),
         WORD        SMST            < Y : POUR INITIALISER S(PRTH0),
         WORD        PRTH0           < 'L' VA BASER LA FAUSSE 'PSTH0'...
         USE         L,PSTH
         STA         HC              < INITIALISATION
         STB         HK              < DE LA FAUSSE
         STX         HP              < 'PSTH0' POUR PLACER
         STY         HS              < L'ESCLAVE SUR LE NIVEAU 0...
         LRM         A,L
         WORD        PRTH0           < (A)=ADRESSE DE LA FAUSSE 'PSTH0'.
         WORD        DCTPP1          < (L)=ADRESSE DE LA DCT DE DIALOGUE
                                     <     MAITRE --> ESCLAVE.
                                     <     A NOTER QUE POUR DES RAISONS D'ASSEM-
                                     <     BLAGE, ET D'EDITION DE LIENS, ON
                                     <     N'UTILISE PAR 'DCTPR1', MAIS UN SYM-
                                     <     BOLE QUI LUI EST EQUIVALENT...
         STA         ALPSTH-ZERO,W   < MISE EN PLACE DE LA FAUSSE 'PSTH0'...
<
<
<        A T T E N T I O N  :
<                      LA PILE 'PILRES' ETANT UTILISEE ICI,
<                    ET AU DEBUT DE LA FAUSSE 'TH0' NE PEUT
<                    ETRE UTILISEE POUR SAUVEGARDER DES
<                    REGISTRES !!!
<
<
         ACTD                        < ET AINSI, LE PROCESSEUR ESCLAVE SE
                                     < RETROUVE SUR LE NIVEAU 'TH0', ET
                                     < DEVIENT ININTERRUPTIBLE...
XWOR%1:  VAL         COSBT?LCM=FMASK(K?MIPM?MIOM=FCINST
         LRM         A
         WORD        XWOR%1
         SST                         < REMASQUONS TOUTES LES INTERRUPTIONS ;
                                     < NOTONS QUE L'ON NE RISQUE RIEN, CAR
                                     < EN EFFET 'IM' MASQUE TOUS LES NIVEAUX
                                     < D'INTERRUPTION...
         LRM         A               < RETOUR MAITRE, LORSQUE L'ESCLAVE
         WORD        PSTH00          < N'EXISTE PAS...
         STA         ALPSTH-ZERO,W   < RESTAURATION DU RELAI DES 'PSTH',
         JMP         RESTMB          < ET VERS LA SUITE DE LA RESTAURATION...
<
<
<        R E S T A R T   D U   M A I T R E  :
<
<
RESTMA:  EQU         $
         LXI         PROMST
         CP          &SYSPRO         < MAIS, EST-ON BIEN SUR LE MAITRE ???
         JE          RESTMD          < OUI...
<
< NON, MAIS OU EST-ON ALORS ???
< (PEUT-ETRE SUR LE PROCESSEUR
< ESCLAVE QUI AURA ETE DECLARE
< INEXISTANT...)
<
         LAI         K
         SBT         STOP
         SST                         < ON L'ARRETE...
RESTME:  EQU         $
         HALT
         JMP         RESTME          < ON ATTEND L'ARRET EFFECTIF...
<
< CAS DU VRAI MAITRE :
<
RESTMD:  EQU         $
<
< ELECTION DE LA TACHE 'SOFTWARE' QUI
< VA ETRE RELANCEE : ON PEUT SE DEMANDER
< POURQUOI NE PAS UTILISER 'NS' : LA
< RAISON EST TOUTE BETE (COMME TOUT CE
< QUE FAIT LA 'SEMS'...) : LES INSTRUCTIONS
< DU MICRO-SCHEDULER SONT INTERRUPTIBLES
< PAR LES INTERRUPTIONS 'IPI' ET D'ENTREES-
< SORTIES, QUI PAR CE BIAIS PEUVENT
< DEROULER DU MICRO-CODE TESTANT LE
< DEFAUT SECTEUR QUI PEUT ALORS PASSER,
< L'INSTRUCTION 'MICRO-SCHEDULER' N'ETANT
< PAS ACHEVEE, ET PAR EXEMPLE, LE MOT 'NS'
< N'EST PAS ENCORE MIS A JOUR ; AINSI UN
< 'WAIT' METTANT UNE TACHE EN ATTENTE
< ('ESTF'(J)=K) PEUT ETRE TOUJOURS
< MEMORISEE DANS 'NS' AU MOMENT DU
< RESTART, ET DONC SE VOIR RELANCER !!!
<
         LA          &ANS
         CPI         NSPESC+NSNSP0   < LE 'NS' EST-IL UN FAUX 'NS' CORRES-
                                     < PONDANT AU CAS OU 'TH0' FAIT UN
                                     < 'DOWN' POUR DESCENDRE (???) UN ESCLAVE
                                     < EN MEMOIRE BASSE ???
         JGE         REST13          < OUI, ON DOIT DONC LE CONSERVER !!!
         LXI         NMTS/NBITMO     < (X)=LONGUEUR DES TROIS FILES DE
                                     <     BITS 'ASTF', 'ESTF' ET 'RSTF'.
         LBI         K               < AFIN D'ASSURER UN FONCTIONNEMENT
                                     < CORRECT DE L'INSTRUCTION 'DBT'.
REST10:  EQU         $
         LA          ASTF-ZERO,W     < ACCES AU MOT COURANT DE 'ASTF',
         AND         ESTF-ZERO,W     < AUQUEL ON AJOUTE 'ESTF',
         AND         RSTF-ZERO,W     < ET 'RSTF'...
         LR          X,Y             < SAUVEGARDE DU DECOMPTE COURANT
                                     < DANS LE REGISTRE 'Y'.
         DBT                         < RECHERCHE DE LA PREMIERE TACHE
                                     < PRETE :
                                     < 'C'=K : LE BIT DE RANG 'X' A ETE
                                     < TROUVE A '1'...
         JNC         REST11          < CA Y EST, ON A TROUVE UNE TACHE...
         ADRI        P,W             < ET NON, TANT PIS ON PASSE A LA
                                     < SUITE DES TROIS LISTES DE BITS...
         LR          Y,X             < RESTAURATION DU DECOMPTE.
         JDX         REST10          < AUX TROIS MOTS SUIVANTS...
<
<        S Y S E R  : AUCUNE TACHE N'EST ELIGIBLE !!!
<
         BSR         ASYSER
         LA          &ANS            < ON FAIT COMME SI CE NUMERO ETAIT
                                     < DEJA DANS 'NS', ET ETAIT BON...
         JMP         REST13          < VERS LA RELANCE...
REST11:  EQU         $
         LR          W,A             < (A)=DEPLACEMENT EN MOTS DANS 'ASTF',
         SBR         A,W             < ET RESTAURE : (W)='ZERO'...
         SLLS        NBITMO=K        < (A)=DEPLACEMENT EN BITS DANS 'ASTF'.
         ADR         X,A             < (A)=NUMERO DE LA TACHE 'SOFTWARE' ELUE,
         STA         &ANS            < QUE L'ON MET DANS 'NS'...
REST13:  EQU         $
<
< BON, MAINTENANT QU'ON CONNAIT
< LE 'NS' SUR LE MAITRE, Y-A-T'IL
< UN ESCLAVE OU PAS ???
<
         LXI         PROESC
         CPZ         &SYSPRO         < L'ESCLAVE EXISTE-T'IL ???
         JGE         RESTMC          < OUI, DONC ON RESTE DANS LA SEQUENCE
                                     < NORMALE DU MAITRE...
         LAI         NSPDKS          < NON,
         STA         ANSPS           < DONC, IL EST IMPOSSIBLE DE FAIRE LE
                                     < SWAPPING SUR 'PR1', ON PREND LE DISQUE
                                     < FIXE...
         JMP         RESTES          < MAIS IL FAUT MALGRE TOUT ALLER
                                     < NETTOYER LA MEMOIRE HAUTE...
RESTMC:  EQU         $
         HALT                        < ON MINIMISE LES ACCES MEMOIRE DU MAITRE ;
                                     < NOTONS QUE LA PREMIERE FOIS QUE CE 'HALT'
                                     < EST FAIT, 'X' EST INDETERMINE...
         CPZ         DEFOK           < OUI, ALORS ATTENDONS QU'IL AIT
                                     < FINI SON PETIT CINEMA (VOIR LA 'PSTH0').
         JNE         RESTMC          < TANT QUE DEFOK#0, ON BOUCLE...
RESTMB:  EQU         $
         RDSI                        < ON EST OBLIGE DE RELIRE L'IDENTIFICA-
                                     < TEUR DU SYSTEME A CAUSE DU PASSAGE
                                     < DANS LA FAUSSE 'TH0' QU'ON A FAIT SI
                                     < LE PROCESSEUR ESCLAVE N'EXISTE PAS...
         ANDI        MNUBUS?MNUPRO   < (A)=NUMERO DU PROCESSEUR...
         LXI         PROMST
         CP          &SYSPRO         < EST-ON BIEN SUR LE MAITRE ???
         JNE         $               < NON, BIZARRE...
                                     < (A NOTER QU'ON NE FAIT PAS DE SYSER
                                     < AFIN D'EVITER DES CHANGEMENTS DE
                                     < CONTEXTES QUE SEUL LE MAITRE PEUT
                                     < EXECUTER !!!)
<
< INHIBITION DU SOUS-PROGRAMME 'TDEFS' :
<
         IC          KTDEFS          < INHIBITION DES TESTS DE TDEFS
                                     < EN EFFET, TANT QUE LE 'RESTART' N'EST
                                     < PAS TRAITE, IL NE FAUT PAS PRENDRE EN
                                     < COMPTE DE NOUVEAUX DEFAUTS SECTEURS ;
                                     < ON FAIT DONC COMME S'IL Y AVAIT DEJA
                                     < UN APPEL EN COURS (RECURSIF...),
                                     < D'AILLEURS C'EST PEUT-ETRE LE CAS SI
                                     < C'EST 'TDEFS' QUI A DETECTE CELUI
                                     < QUE L'ON TRAITE...
<
<        NOTA :
<                      'COMPTH' N'EST PAS REINITIALISE ; EN
<                    EFFET, OU BIEN ELLE VAUT DEJA 0, OU BIEN
<                    ELLE NE PEUT VALOIR QUE 1 : ALORS CELA
<                    SIGNIFIE QU'UNE TACHE HARDWARE A MASQUE
<                    LES INTERRUPTIONS, PUIS FAIT PASSER A
<                    1 LA VARIABLE 'COMPTH', PUIS A DETECTE
<                    UN DEFAUT SECTEUR EN ATTENTE ; DANS CES
<                    CONDITIONS, CETTE TACHE HARDWARE VA ETRE
<                    RELANCEE, ET DONC RAZER ELLE-MEME 'COMPTH'
<                    DANS 'RRSTF'...
<
<
< MASQUAGE DU PUPITRE (SEUL LE SYSTEME
< Y AURA ACCES) :
<
BITPUP:: VAL         L               < NIVEAU DU PUPITRE DANS 'IM'.
         LXI         NSPPR1
         BSR         ACADCT          < (L)=ADRESSE DU FUTUR REGISTRE 'IM' DU
                                     <     PROCESSEUR MAITRE...
         WORD        LAIMST          < (A)=REGISTRE 'IM' DU PROCESSEUR MAITRE ;
                                     <     DANS CELUI-CI LE PUPITRE EST INHIBE,
                                     <     MAIS QUELQUEFOIS, LE NIVEAU DU
                                     <     'CBJ' L'EST AUSSI (LORSQU'IL EST
                                     <     ABSENT EN PARTICULIER, OU EN DEFAUT).
         XIMR        A               < MASQUAGE DU NIVEAU DU PUPITRE.
<
<
<        R E I N I T I A L I S A T I O N   D E S   ' P S T H '  :
<
<
         LAI         NUMDEF          < (A)=NUMERO DE LA PREMIERE 'PSTH'
                                     <     A REINITIALISER (ICI ON NE JOUE
                                     <     PLUS AVEC LEUR PRIORITE...).
<
< REINITIALISATION DE LA 'PSTH' COURANTE
< DONT LE NUMERO EST DANS LE REGISTRE 'A' :
<
REST01:  EQU         $
         BSR         ASMIC           < RENVOIE :
                                     < (B)=ADRESSE DE L''IC' DE LA 'TACHE HARD-
                                     <     WARE' DONT LE NUMERO EST DANS 'A'.
         LR          B,L             < 'L' BASE LE 'IC' COURANT...
         USE         L,PSTH          < ON SAIT QUE 'IC' ET 'PSTH'
                                     < UTILISENT LA MEME DSEC...
         BSR         ASMTH           < RENVOIE (B)=ADRESSE DE LA 'PSTH'
                                     < DONT LE NUMERO EST DANS 'A'
         PSR         A               < SAUVEGARDE DU NUMERO DE 'TACHE
                                     < HARDWARE' COURANT.
         LAD         HC              < (A)=ADRESSE ZONE DE 'IC' CONTENANT
                                     <     LES VALEURS DE REINITIALISATION
                                     <     DE 'PSTH'
         LXI         LPSTH           < (X)=NOMBRE DE MOTS A REINITIALISER.
         MOVE                        < REINITIALISATION DE LA 'PSTH' COURANTE.
<
< REINITIALISATION DE 'IC' :
<
         STZ         ICSAV           < REINITIALISATION DE L'ETAT DE
                                     < SAUVEGARDE DES REGISTRES
                                     < INTERROMPUS...
<
< ACCES A LA 'TACHE HARDWARE' PRECEDENTE :
<
         PLR         A               < RESTAURE LE NUMERO DE 'TACHE HARDWARE'
                                     < COURANT DANS LE REGISTRE 'A'.
         ADRI        -P,A            < PASSAGE A LA 'TACHE HARDWARE'
                                     < PRECEDENTE...
         JAGE        REST01          < VERS LA TACHE HARDWARE PRECEDENTE
<
<
<        I N I T I A L I S A T I O N  :
<
<
         LA          TYPDEF          < S'AGIT-IL D'UNE REAPPARITION
         CPI         TYPTH           < DU SECTEUR SUITE A DEFSEC?
         JNE         REST02          < NON...
<
< "REPOSITIONNEMENT" D'UNE 'TACHE HARDWARE' INTERROMPUE
< PAR UN MECHANT 'DEFAUT SECTEUR' :
<
         LA          IDEDEF          < (A)=NUMERO DE LA 'TACHE HARDWARE',
         BSR         ASMTH           < RENVOIE :
                                     < (B)=ADRESSE DE LA 'PSTH' DE CETTE TACHE.
         LRM         A               < (A)=ADRESSE DE LA FAUSSE 'PSTH' DE
         WORD        FPSTH           < REPRISE DE LA TACHE INTERROMPUE.
         LXI         LPSTH           < (X)=NOMBRE DE MOTS D'UNE 'PSTH'.
         MOVE                        < "REPOSITIONNEMENT" DE LA 'TACHE
                                     < HARDWARE' INTERROMPUE.
REST02:  EQU         $
<
<
<        R E L A N C E   D E S   T A C H E S   B L O Q U E E S  :
<
<
         PSR         L
         USE         L,DCT0
         LXI         NSPPER          < (X)=NSP DE LA DERNIERE TACHE A TESTER.
E881:    EQU         $
         LA          &ADCTSY         < (A)=ADRESSE DE LA DCT COURANTE.
         JAE         E882            < CAS DU 'SGF'...
         LR          A,L             < (L)=ADRESSE DE LA DCT COURANTE.
         LR          X,A             < (A)=NSP DE LA TACHE COURANTE.
         CPI         NSPVI0          < EST-CE UNE VISU ???
         JL          E882X           < NON...
         CPI         NSPVIN          < EST-CE UNE VISU ???
         JG          E882X           < NON...
         BSR         AINICV          < OUI, ON INITIALISE SON COUPLEUR !!!
E882X:   EQU         $
         CPI         NSPHOR          < EST-CE L'HORLOGE ???
         JE          E881X           < OUI, ON RELANCE A PRIORI...
         LA          SIT             < NON,
         TBT         XMBETA          < ALORS EST-ELLE EN ATTENTE SUR 'SIT' ???
         JNC         E882            < NON, RIEN A FAIRE...
         LA          BITSEM          < OUI,
         TBT         B0SIT           < ALORS FAUT-IL LA RELANCER APRES
                                     < UN DEFAUT SECTEUR ???
         JNC         E882            < NON, RIEN A FAIRE...
         SBT         B1SIT           < OUI, ALORS ON MEMORISE CETTE
                                     < FAUSSE INTERRUPTION APRES UN
                                     < 'INI' (DEFAUT SECTEUR,...).
         STA         BITSEM
E881X:   EQU         $
         BSR         ARVHDL          < ET ON SIMULE UNE INTERRUPTION...
E882:    EQU         $
         JDX         E881            < A UNE AUTRE TACHE...
         PLR         L
         USE         L
<
<
<        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  :
<
<
         LRM         A,B
         WORD        GOCOL           < ADRESSE DU MODULE D'INITIALISATION,
         WORD        RETCOL          < ET ADRESSE DE RETOUR DE CE MODULE...
         PSR         A
         RSR                         < CE 'RSR' EST DONC UN 'GOTO' VERS LE
                                     < MODULE 'GOCOL' D'INITIALISATION...
RETCOL:  EQU         $               < ET VOICI SON ADRESSE DE RETOUR...
<
<
<        F O R C A G E   D E   L A   R E I N I T I A L I S A T I O N
<        D E   L A   D A T E   E T   D E   L ' H E U R E  :
<
<
         LAI         XXRINI
         STA         RINI            < POUR LE 'RECOVERY'...
<
<
<        C O H E R E N C E   D E S   ' D C T E S C '  :
<
<
         USE         W,PSTS
         LXI         NESCLA          < (X)=NOMBRE D'UTILISATEURS RECONNUS.
REST20:  EQU         $
         ADRI        -P,X            < A L'UTILISATEUR PRECEDENT...
         CPZR        X               < EXISTE-T'IL ???
         JL          REST21          < NON, ON A PARCOURU TOUTE 'TBU'...
         LA          &ATBU           < OUI, (A)=ADRESSE DE SA 'DCTESC',
         JAE         REST20          < RIEN A FAIRE : CET 'ID'=(X) EST
                                     < INOCCUPE...
         LR          A,W             < (W)=ADRESSE 'DCTESC' COURANT.
         LA          SSLO            < (A)=SLO(DCTESC),
         JAG         REST24          < OK, A PREMIERE VUE IL EST BON...
         BSR         ASYSER          < E R R E U R   S Y S T E M E  :
                                     < (LE REGISTRE 'SLO' A UN CONTENU
                                     < NEGATIF OU NUL)
REST24:  EQU         $
         CP          SSLE            < A-T'ON BIEN (SLO)<(SLE) ???
         JNE         REST23          < ON A DEJA : (SLO)#(SLE)...
         BSR         ASYSER          < E R R E U R   S Y S T E M E  :
                                     < (SLO)=(SLE) ?!??!???!
         JMP         REST20          < ALLONS A L'UTILISATEUR SUIVANT...
REST23:  EQU         $
         JL          REST20          < OK, (SLO)<(SLE)...
<
< CAS OU (SLO)>(SLE) DANS UNE 'DCTESC' :
< IL S'AGIT D'UN CAS RARE ; EN EFFET
< LORS DE LA FONCTION '1EC5 DE 'TH0',
< CETTE MEME 'TH0' CONVERTIT LE CONTENU
< DE 'SLO' EN UNE ADRESSE MOT AFIN
< QUE LE SOUS-PROGRAMME MAITRE QUE L'ON
< VA EXECUTER PUISSE L'UTILISER, COMME
< IL LE FAISAIT DANS 'CMS4' ; MAIS SI
< PAR MALHEUR ARRIVE UN DEFAUT SECTEUR
< NON PREVU, OU BIEN UN 'INI' SUITE
< PAR EXEMPLE A UNE ALARME AU PUPITRE,
< ALORS LA LE 'SLO' DE CET UTILISATEUR
< RESTE EN ADRESSE MOT, CE QUI IMPLIQUE
< UNE TRAPPE, MAIS QUI NE PEUT ETRE
< TRAITEE CORRECTEMENT, CAR L'ADRESSE
< DE L'ESPACE MEMOIRE EST MAUVAIS...
<
         SLRS        -DADR           < CONVERSION EN UNE BONNE
                                     < ADRESSE...
         STA         SSLO            < ET MISE A JOUR DE 'SLO'...
         JMP         REST20          < VERS L'UTILISATEUR PRECEDENT...
REST21:  EQU         $
<
<
<        R E S T A U R A T I O N   " M A N U E L L E "
<        D U   C O N T E X T E   D E   L A   T A C H E
<        ' S O F T W A R E '   I N T E R R O M P U E  :
<
<
<        FONCTION :
<                      CETTE RESTAURATION DU CONTEXTE DE LA
<                    TACHE 'SOFTWARE' INTERROMPUE (PAR UN
<                    DEFAUT SECTEUR PAR EXEMPLE...) EST PRO-
<                    GRAMME, ET NON PAS MICRO-PROGRAMME POUR
<                    DEUX RAISONS FONDAMENTALES :
<                    1 - IL SERAIT BETE DE GACHER UN NIVEAU
<                    'SOFTWARE' POUR FAIRE LE 'RESTART',
<                    2 - LES INTERRUPTIONS SONT MASQUEES
<                    ET IL N'EST PAS IMPOSSIBLE QU'IL FAILLE
<                    PASSER LA MAIN A LA TACHE 'SOFTWARE'
<                    INTERROMPUE SANS LES DEMASQUER ; OR
<                    CECI EST IMPOSSIBLE EN UTILISANT LE
<                    'MICRO-SCHEDULER' !!!
<
<
         LX          &ANS            < 'X' RECOIT LE 'NS'
         ADRI        -NSNSP0,X       < 'X' RECOIT LE 'NSP' DE LA 'TS'
         LB          &ADCTSY         < 'B' RECOIT L'ADRESSE DE LA 'PSTS'
                                     < DE CETTE TACHE
         LR          B,W             < LA BASE 'W' VA BASER LA 'PSTS' DE
                                     < LA TACHE INTERROMPUE.
         USE         W,PSTS
<
< VALIDATION EVENTUELLE DE LA PILE DE LA
< TACHE DONT ON VEUT RESTAURER LE CONTEXTE ;
< EN EFFET, DANS LE CAS D'UNE TACHE EN MODE
< ESCLAVE, SA PILE 'K' SERA UTILISEE VIA
< LES REGISTRES 'SLO' ET 'SLE' A L'AIDE
< DE L'INDICATEUR 'SVCS' ; SI L'ESPACE LIBRE
< DE LA PILE N'EST PAS SUFFISANT, A CHAQUE
< OPERATION D'EMPILEMENT, IL Y AURA VIOLA-
< TION MEMOIRE, LE 'RESTART' SE RETROUVERA
< EN MODE ESCLAVE, ET LE PASSAGE EN 'TACHE
< HARDWARE 0' DEMASQUERA LES INTERRUPTIONS.
<
         LA          SS
         TBT         MS              < LA TACHE EST-ELLE EN MODE ESCLAVE ?
         JC          REST06          < NON, ON NE VALIDE PAS 'K'...
         LA          SK              < OUI, ACCES AU REGISTRE 'K',
         ADRI        FADR,A          < PRENONS EN COMPTE UNE MARGE DE
                                     < SECURITE CORRESPONDANT A L'UNITE
                                     < DANS LAQUELLE SONT EXPRIMES LES
                                     < REGISTRES 'SLO' ET 'SLE' (BLOCS
                                     < DE FADR-MOTS).
         SLRS        -DADR           < LA VALEUR DE 'K' EST EXPRIMEE DANS
                                     < LA MEME UNITE QUE 'SLO' ET 'SLE'.
         AD          SSLO            < ('K'+FADR)/FADR+'SLO'.
         SB          SSLE            < ('K'+FADR)/FADR+'SLO'-'SLE'.
         JALE        REST06          < OK, IL Y AURA SUFFISAMMENT DE PLACE
                                     < DANS LA PILE DE LA TACHE ESCLAVE.
<
<        S Y S E R  : IL N'Y A PAS ASSEZ DE PLACE DANS LA
<                     PILE ESCLAVE POUR TRAVAILLER EN TOUTE
<                     SECURITE : ('K'+FADR)/FADR>'SLE'-'SLO' !!!
<
<                    (W)=ADRESSE DE LA 'PSTS' DE LA TACHE ESCLAVE.
<
         BSR         ASYSER
REST06:  EQU         $
<
< RESTAURATION DES REGISTRES 'SLO' ET
< 'SLE' : DANS LA MESURE OU LA SUITE
< DU 'RESTART' NE LES UTILISE PAS :
< (SAUF DANS LES INSTRUCTIONS UTILISANT
< LA PILE 'K' LORSQUE L'INDICATEUR
< 'SVCS' EST A '1')
<
         LA          SSLO
         LB          SSLE
         WOE                         < RESTAURATION DES REGISTRES
                                     < 'SLO' ET 'SLE'.
<
< RESTAURATION DU REGISTRE 'B',
< AINSI QUE DE LA BASE 'L' ;
< CELA IMPLIQUE QUE LE 'RESTART' NE
< LES UTILISE PAS...
<
         LA          SL
         LR          A,L             < RESTAURATION DE LA BASE 'L'.
         LB          SB              < RESTAURATION DU REGISTRE 'B'.
<
< RESTAURATION DE LA PILE 'K' ;
< LE 'RESTART' VA DONC SE POURSUIVRE
< SUR LA PILE DE LA TACHE INTERROMPUE,
< CE QUI FAIT L'HYPOTHESE QUE CETTE PILE
< A ENCORE DE L'ESPACE LIBRE (ET PAR LA
< MEME OCCASION QU'IL NE VA PAS SE PRODUIRE
< TROP DE DEFAUTS SECTEURS IMBRIQUES !!!)
<
         LA          SK
         LR          A,K             < RESTAURATION DU REGISTRE 'K'.
         LRM         A               < A <-- MSVCS
         WORD        MSVCS
         AND         SS              < ON CONSTRUIT AINSI UN MASQUE QUI
                                     < EST SOIT VIDE ('SVCS'=K) OU NE
                                     < CONTENANT QUE 'SVCS'.
         SST                         < POSITIONNEMENT EVENTUEL DE 'SVCS'
                                     < A '1' AFIN D'ASSURER UN FONCTION-
                                     < NEMENT CORRECT DES INSTRUCTIONS SUR
                                     < LES PILES...
         LA          SS
         TBT         MS              < LA TACHE INTERROMPUE ETAIT-ELLE
                                     < EN MODE ESCLAVE ???
         JC          REST05          < NON, LE REGISTRE 'ST' EST BON...
         LRM         A
         WORD        MSVCS           < 'A' <-- 'MSVCS'...
         SST                         < ON POSITIONNE LE BIT 'SVCS' AFIN QUE
                                     < LES INSTRUCTIONS SUR LA PILE 'K'
                                     < UTILISENT LES REGISTRES 'SLO'
                                     < ET 'SLE'.
REST05:  EQU         $
<
< PREPARATION DES RESTAURATIONS DES
< REGISTRES 'P', 'W' ET 'A' QUI SEULS
< SONT ABSOLUMENT NECESSAIRES (AVEC LA
< BASE 'C') A UNE BONNE POURSUITE
< DU 'RESTART' :
<
XKREG:   VAL         K               < INITIALISATION DU CUMUL DES REGISTRES
                                     < EMPILES DANS LA PILE DE LA TACHE
                                     < INTERROMPUE...
         LA          SP
       #@PSR         A               < #SISP CMS5 KREG#
                                     < EMPILEMENT DU COMPTEUR ORDINAL 'P'.
         LA          SW
       #@PSR         A               < #SISP CMS5 KREG#
                                     < EMPILEMENT DE LA BASE 'W'.
         LA          SA
         LX          SX
         LY          SY
       #@PSR         A,X,Y           < #SISP CMS5 KREG#
                                     < EMPILEMENT DES REGISTRES 'A', 'X', 'Y'.
<
< REAUTORISATION DU SOUS-PROGRAMME 'TDEFS' :
<
         CALL        #SISP CMS5 DMKDEF#
                                     < A T T E N T I O N  : MIS A PART
                                     < 'NSYSER', ON SUPPOSE, QU'IL N'Y
                                     < AURA PLUS JUSQU'A L'EVENTUEL DEMAS-
                                     < QUAGE DES INTERRUPTIONS DE 'SVC',
                                     < NI D'APPEL A 'TDEFS' AFIN DE PAS
                                     < TESTER UN DEFAUT SECTEUR EN ATTENTE
                                     < AVANT QUE LE 'RESTART' NE SOIT TERMINE.
<
< DISCRIMINATION DES MODES MAITRES ET ESCLAVES :
< (ET CECI A CAUSE DE LA RESTAURATION DU
< REGISTRE 'P' ET DU BIT DE MODE 'MS')
<
         LA          SS
         TBT         MS              < QUEL ETAIT LE MODE DE LA TACHE
                                     < INTERROMPUE ???
         JC          REST03          < ELLE ETAIT EN MODE MAITRE...
<
< CAS OU LA TACHE INTERROMPUE ETAIT ESCLAVE :
<
         TBT         SVCS            < VALIDATION DE 'SVCS'...
         JNC         REST04          < OK, 'SVCS'=K.
<
<        S Y S E R  : 'SVCS' D'UNE TACHE 'SOFTWARE' EN MODE
<                     ESCLAVE EST A '1' !!!
<
<                    NS=NUMERO DE CETTE TACHE,
<                    (W)=ADRESSE DE SA 'PSTS'.
<
         BSR         ASYSER
REST04:  EQU         $
         CALL        #SISP CMS5 IREST#
XXPILI:: VAL         -XKREG          < NOMBRE DE MOTS SUPPLEMENTAIRES A RESER-
                                     < DANS CHAQUE PILE EN PREVISION D'UN
                                     < DEFAUT SECTEUR !!!
         IF          XXPILI-XXPILJ,,XEIF%,
         IF          ATTENTION : LA VALEUR PRESUMEE POUR 'XXPILI' DANS
         IF          LA DEFINITION DE 'DCTSGF' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         RSV                         < RESTAURATION DU REGISTRE 'P', ET
                                     < PASSAGE EN MODE ESCLAVE.
<
< CAS OU LA TACHE INTERROMPUE ETAIT MAITRE :
<
REST03:  EQU         $
         CALL        #SISP CMS5 JREST#
         RSR                         < RESTAURATION DU REGISTRE 'P', EN
                                     < RESTANT EN MODE MAITRE.
         PAGE
<
<
<        P R E V E N T I O N   D E S   D E F S E C  :
<        L O R S   D E S   E N T R E E S - S O R T I E S
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME MEMORISE
<                    DANS LA 'DCT' D'UNE TACHE QU'UN
<                    DEFAUT SECTEUR EST A CRAINDRE
<                    POUR ELLE CAR UNE ENTREE-SORTIE
<                    A ETE LANCEE...
<                      EN FAIT, LES INDICATEURS
<                    CONCERNES FONCTIONNENT EN
<                    BASCULE (AVANT,APRES) L'OPE-
<                    RATION SENSIBLE AU DEFAUT
<                    SECTEUR.
<
<
<        ARGUMENT :
<                    (L)=ADRESSE DE LA DCT DU HANDLER APPELANT.
<
<
         USE         L,DCT0
PREDS:   EQU         $
         PSR         A
         BSR         ASMMK           <<<< MASK IT...
         LA          BITSEM
         IBT         B0SIT           < INVERSION DE L'INDICATEUR QUI FONCTIONNE
                                     < DONC EN BASCULE ; CETTE INVERSION EST
                                     < FAITE AVANT LE DEBUT ET APRES LA FIN DE
                                     < L'ENTREE-SORTIE...
         STA         BITSEM
         BSR         ASMDK           <<<< DEMASK IT...
         PLR         A
         RSR
         PAGE
<
<
<        A V E R T I S S E M E N T   D E   C E R T A I N S
<        H A N D L E R S   L O R S   D E   D E F S E C  :
<
<
<        FONCTION :
<                      LORSQU'UN HANDLER A : BIT0(SIT)=1 LE
<                    RECOVERY LE REVEILLE LORS DES DEFSEC
<                    EN SIMULANT UNE IT. DE PLUS LE
<                    RECOVERY FAIT : BIT1(SIT)=1.
<                    CETTE ROUTINE PEUT ETRE APPELEE
<                    PAR UN HANDLER APRE LES 'RQST SIT'
<                    POUR SAVOIR SI L'IT EST REELLE OU
<                    SIMULEE POUR DEFSEC.
<
<                      ON ECRIRA :
<
<                            RQST    SIT
<                            BSR     ATHDS
<                            JC      <IT-DEFSEC>,
<                            JNC     <IT-REELLE>.
<
<
<        ARGUMENT :
<                    (L)=ADRESSE DU HANDLER.
<
<
         USE         L,DCT0
THDS:    EQU         $
         PSR         A,B
         LBI         K
         BSR         ASMMK           < MASQUAGE IT CAR ON VA
                                     < MODIFIER SIT !!!
         LA          BITSEM
         TBT         B1SIT           < TEST DU BIT QUE POSITIONNE LE
                                     < RECOVERY LORS DES DEFSEC.
         ADCR        B               < B <-- CARRY.
         TBT         B1SIT           < RETEST DU "BIT1(SIT)" :
         JNC         E923            < IL N'Y A PAS EU DE DEFSEC.
         RBT         B1SIT           < IL Y A EU UN DEFSEC: RAZ DU
                                     < "BIT1(SIT)",
         STA         BITSEM          < ET MISE A JOUR DE 'BITSEM' APRES DEFSEC.
         BSR         ABETA2          < RENVOIE (A)=BETA(SIT).
         JALE        E923            < OK : BETA(SIT)<=K.
         DC          SIT             < CAS BETA(SIT)>0 : LE DEFSEC EST
                                     < PROBABLEMENT APPARU DANS LA
                                     < TACHE HARD RELATIVE A L'IT
                                     < ATTENDUE PAR CE SIT : L'IT EST
                                     < DONC COMPTEE 2 FOIS DANS SIT :
                                     < UNE FIS PAR LA TACHE HARD, ET
                                     < UNE FOIS PAR SIMULATION DANS
                                     < LE RECOVERY.
                                     < (CAS DES DISQUES EN PARTICULIER)
E923:    EQU         $
         BSR         ASMDK           < DEMASQUAGE IT CAR ON A FINI
                                     < DE TOUCHER AU SIT !!!
         TBT         NBITAB-B
         PLR         A,B
         RSR
         PAGE
<
<
<        C O P I E   S Y N C H R O N E   D U   S Y S T E M E  :
<
<
<        FONCTION :
<                      L'HORLOGE REALISE UNE COPIE ASYNCHRONE
<                    DU SYSTEME VIS A VIS DES EVENEMENTS IMPOR-
<                    TANTS ; ON INTRODUIT ICI UN 'SVC' MAITRE
<                    QUI PEUT ETRE APPELE PAR N'IMPORTE QUI
<                    ET QUI PROVOQUE UNE COPIE SYNCHRONE...
<
<
         CALL        #SISP CMS5 CHECK#
COPSYN:  EQU         $
<
< DEMANDE DE COPIE SYNCHRONE :
<
DCOPSY:  BYTE        NSPDKF;XDSYM?XTYPAD
         WORD        FGW             < ECRITURE
         WORD        TCOPY           < DU BUFFER DE COPIE
         WORD        MCOPY2          < GENERE PAR 'PR1' (EN GENERAL)
         WORD        SCOPY0          < SUR LA ZONE 'SCOPY1' DE 'DKF'...
         DZS         LDEM0+DCOPSY-$
<
< PROTECTION DE LA DEMANDE :
<
SCOPSY:  WORD        SPHEX0          < SEMAPHORE D'EXCLUSION DE PHASE CRITIQUE
         DZS         LSEM            < PROTEGEANT 'DCOPSY'...
         CALL        #SISP CMS5 CHECK#
<
< ROUTINE DE GENERATION DU BUFFER
<
AACOPY:  WORD        MOPY            < AFIN QUE SI 'PR1' EST ABSENT, LE BUFFER
                                     < DE COPIE SOIT QUAND MEME GENERE...
         PAGE
<
<
<        V I D A G E   D U   B U F F E R   D ' A N T I C I P A T I O N  :
<
<
<        FONCTION :
<                      CE MODULE (FAIT DE REFERENCES
<                    EN AVANT PARCE QUE LE HANDLER
<                    VISUS N'EST PAS ENCORE ASSEMBLE...)
<                    VIDE LE BUFFER D'ANTICIPATION DES
<                    VISUS PAR REINITIALISATION DE SES
<                    3 DESCRIPTEURS.
<
<
<        ARGUMENT :
<                    (L)=ADRESSE DE LA 'DCTVIS'.
<
<
SVCVBI:  EQU         $
         BSR         ASMMK           < M A S Q U A G E   I N T E R R U P T I O N
         WORD        STZKCW          < ON SUPPRIME TOUS LES CARACTERES EN
                                     < ATTENTE PAR ANNULATION DE 'KCWIO'...
         WORD        LAIVIN
         WORD        STAWIN          < ON REINITIALISE LES INDEX D'ENTREE
                                     < ('ICWIN' <-- 'XXVIN')
         WORD        LAIVOU
         WORD        STAWOU          < ET DE SORTIE...
                                     < ('ICWOUT' <-- 'XXVOUT')
         BSR         ASMDK           < D E M A S Q U A G E ...
         JMP         ASVCMF          < VERS LA SORTIE...
         PAGE
<
<
<        S Y N C H R O N I S A T I O N   S U R   L E S
<        V A L E U R S   P O S I T I V E S   D U
<                    M O T   ' C D A G 0 '  :
<
<
<        FONCTION :
<                      CE NOUVEAU 'SVC' MAITRE UTILISE
<                    PAR L'IDLE ET LE SOUS-PROGRAMME
<                    'ARIT' DE L'HORLOGE DETECTE LES
<                    VALEURS POSITIVES DU MOT 'CDAG0'
<                    (PREMIER MOT DE LA 'CDAG'), ET ALORS
<                    DEBLOQUE LES TACHES BLOQUEES SUR
<                    LE SEMAPHORE 'SEMCDA'.
<
<
SVCDAG:  EQU         $
<
< SAUVEGARDES :
<
         PSR         A,B,Y
         CALL        #SISP CMS5 PSRSLO#
<
< POSITIONNEMENT SUR LA 'CDAG' :
<
         LRM         A,B
         WORD        AOCDA5          < (A)=FUTUR 'SLO',
         WORD        AECDA5          < (B)=FUTUR 'SLE'.
         WOE                         < ET ON POINTE SUR LA 'CDAG'...
         LYI         CDAG0           < (Y)=ADRESSE RELATIVE DANS LA 'CDAG' DU
                                     < MOT QUE L'ON VA TESTER ET QUI SERT DE
                                     < SYNCHRONISATION.
         LAR                         < (A)=MOT 'CDAG0' DE LA 'CDAG' :
         IF          XCDAG0-K,,XEIF%,XEIF%
         IF          ATTENTION : LE TEST SUIVANT EST IDIOT (NEGATIF,
         IF          NUL OU POSITIF) !!!
XEIF%:   VAL         ENDIF
         JALE        IDLEC3          < ET BIEN LE MOT 'CDAG0' N'A PAS LA
                                     < VALEUR ATTENDUE (C'EST-A-DIRE UNE VA-
                                     < LEUR POSITIVE), DONC ON NE REVEILLE
                                     < PERSONNE ; ON NOTERA QUE LE TIME-OUT
                                     < EST GERE DIRECTEMENT PAR 'HDLHOR' A
                                     < CHAQUE CHANGEMENT DE MINUTE...
<
< CAS D'UN ETAT IMPLIQUANT
< LA SYNCHRONISATION :
<
         BSR         ASMMK           < M A S Q U A G E   I N T E R R U P T I O N
                                     < ET CECI A CAUSE DE 'HDLHOR' QUI
                                     < GERE LES TIME-OUT SUR 'SEMCDA'...
<
< TEST DU SEMAPHORE DE DEMANDE
< DE SYNCHRONISATION SUR 'CDAG0' :
<
IDLEC1:  EQU         $
         LA          &ASEMCD         < (A)=MOT0 DU SEMAPHORE 'SEMCDA',
         BSR         ABETA           < (A)=BETA(SEMCDA),
         IF          XXSEM0-K,,XEIF%,
         IF          ATTENTION : LE TEST SUIVANT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         JAGE        IDLEC2          < (BETA(SEMCDA))>=0 : PAS D'ATTENTE SUR LE
                                     < SEMAPHORE DE SYNCHRONISATION SUR 'CDAG0'.
<
< (BETA(SEMCDA))<0 : AU MOINS UN UTILI-
< SATEUR (VIA UN 'HDLSER') ATTEND, TESTONS
< DONC LE CONTENU DU MOT 'CDAG0' DONT
< L'ADRESSE RELATIVE A 'CDAG' EST DANS 'Y'.
<
         LAD         &ASEMCD         < (A)=ADRESSE DU SEMAPHORE,
         BSR         ARLSE           < ET ON FAIT UN RELEASE...
         JMP         IDLEC1          < AU CAS OU UN AUTRE UTILISATEUR ATTENDRAIT
                                     < DESSUS...
<
< RESTAURATIONS ET SORTIE :
<
IDLEC2:  EQU         $
         BSR         ASMDK           < D E M A S Q U A G E ...
IDLEC3:  EQU         $
         CALL        #SISP CMS5 PLRSLO#
         PLR         A,B,Y
ASVCMF:  JMP         SVCMTF          < VERS LA SORTIE...
                                     < (ET RELAI...)
         PAGE
<
<
<                    ' S V C '   M A I T R E   D E
<        E X E C U T I O N   D E S   C O N N E X I O N S
<        M A T R I C I E L L E S   E V E N T U E L L E S  :
<
<
<        FONCTION :
<                      UN ESCLAVE PEUT ETRE ESPIONNE PAR
<                    AUTRE (CF. MAITRE-ELEVE), COMME UN
<                    ESCLAVE PEUT MONTRER A PLUSIEURS AUTRES
<                    QUELQUE-CHOSE. C'EST A QUOI VA SERVIR CE
<                    SYSTEME : IL VA DUPLIQUER LA DEMANDE
<                    COURANTE (W) SUR LE PERIPHERIQUES
<                    CONNECTES MATRICIELLEMENT AU PERI-
<                    PHERIQUE COURANT.
<                      UN NSP (NSP1) DE 0 A 31 PEUT ETRE
<                    CONNECTE MATRICIELLEMENT A UN NBRE
<                    QUELCONQUE DE NSP COMPRIS ENTRE 0 ET 31.
<                    (SOIT NSPX).
<
<
<        ARGUMENTS :
<                    (A)=FONCTION COURANTE ('OPDEM'),
<                        (ON LA TRANSMET CAR ELLE PEUT AVOIR
<                        CHANGEE AU COURS DU SERVICE PRECEDENT)
<                    (W)=ADRESSE DE LA DEMANDE COURANTE.
<
<
UMATCO:: VAL         D+D             < LA MATRICE DES CONNEXIONS EST UNE
                                     < MATRICE DE DOUBLE-MOTS...
XXNLOC:: VAL         K               < PAS D'ATTENTE EN CAS DE LOCATION...
XYNLOC:: VAL         XXNLOC)BIT      < ATTENTE EN CAS DE LOCATION ANTERIEURE...
<
< POINT D'ENTREE :
<
         USE         W,DEM0
SVCMAT:  EQU         $
         PSR         A,Y
         LR          A,Y             < (Y)=FONCTION COURANTE...
         LBY         NSPTYP
XWOR%1:  VAL         MSKNSP=K
         IF          XWOR%1-NBITOC,,XEIF%,
         IF          ATTENTION : LE 'LBY' VA MERDER !!!
XEIF%:   VAL         ENDIF
XWOR%1:  VAL         -XWOR%1
         ANDI        MSKNSP>XWOR%1   < (A)='NSP' DE LA DEMANDE COURANTE, ET
         CPI         NBITMO*UMATCO   < LE NSP(=NSP1) DEMANDE PAR
                                     < L'ESCLAVE A-T'IL DROIT AUX
                                     < CONNEXIONS MATRICIELLEES ???
         JGE         SVCMAC          < NON, LE SERVICE EST DONC TERMINE.
<
< CAS OU NSP1 A DROIT AUX CONNEXIONS MATRICIELLES :
<
         LR          Y,X             < (X)='OPDEM' COURANT, TEL QU'IL ETAIT
                                     <     AVANT LA DEMANDE PRECEDENTE.
         XR          A,X             < (A)=OPDEM ; (X)=NSP1.
         SWBR        A,Y
         ORR         X,Y             < OCTET0(Y)=OPDEM AVANT SERVICE,
                                     < OCTET1(Y)=NSP1.
         PSR         B
         ADR         X,X             < (X)=2*NSP1, EN EFFET, MATX EST
                                     <     UNE TABLE DOUBLE-MOTS.
         LA          &AMATX          < (A)=MOT0(MATX(NSP1)).
         ADRI        I,X
         LB          &AMATX          < (B)=MOT1(MATX(NSP1)).
<
< TEST SUR L'EXISTENCE DE CONNEXIONS
< MATRICIELLES SUR NSP1 :
<
         JANE        E940            < IL Y A AU MOINS UNE CONNEXION.
         CPZR        B
         JE          E941            < IL N' Y A AUCUNE CONNEXION SUR
                                     < NSP1, INUTILE DE NOUS ATTARDER.
<
< CAS OU ON A TROUVE AU MOINS UNE CONNEXION
< MATRICIELLE SUR NSP1 :
<
E940:    EQU         $
         LX          ARGDEM+OPDEM    < (X)=FONCTION ARGUMENT.
         PSR         A               < SAVE (A)=MOT0(MATX(NSP1)).
         LBY         &AFONX          < (A)=FONCTION TRANSCODEE DE LA
                                     < FONCTION ARGUMENT.
         STA         ARGDEM+OPDEM    < QUE L'ON MET IMMEDIATEMENT EN
                                     < OPDEM DE LA DEMANDE.
FIMATC:: VAL         MOCD            < CODE D'UNE FONCTION NE POUVANT
                                     < UTILISER LES CONNEXIONS MATRICIELLES.
         CPI         FIMATC          < EST-CE UNE FONCTION AUTORISEE
                                     < LORS D'1NE CONNEXION MATRICIELLE?
         PLR         A               < RESTAURE (A)=MOT0(MATX(NSP1)).
         JE          E927            < NON, LA FONCTION ARGUMENT N'EST
                                     < PAS UTILISABLE LORS D'1NE
                                     < CONNEXION MATRICIELLE, ON VA
                                     < DONC RESTAURER LA DEMANDE.
<        ON A ICI :
<                    (A)=MOT0(MATX(NSP1)),
<                    (B)=MOT1(MATX(NSP1)).
E928:    EQU         $
         DBT                         < RECHERCHE D'UNE CONNEXION.
                                     < NSP1-->NSPX.
         JC          E927            < IL N'Y A PAS OU PLUS DE
                                     < CONNEXION MATRICIELLE SUR NSP1.
<
< CAS OU ON A TROUVE UNE CONNEXION MATRICIELLE :
<
         RBT         L,X             < RAZ DE LA CONNEXION DANS A,B.
         PSR         B               < SAUVEGARDE DU MOT1(MATX(NSP1)).
         LBI         XXNLOC          < ARGUMENT D'UN DEMANDE DE LOCATION SANS
                                     < ATTENTE...
         BSR         ALODCT          < LOCATION DE LA DCT(NSP=(X)) SANS ATTENTE
                                     < SI ELLE EST DEJA LOUEE...
         CPZR        B               < ALORS, ON PEUT ???
         PLR         B               < RESTAURE (B)=MOT1(MATX(NSP1)).
         IF          XXNLOC-K,,XEIF%,
         IF          ATTENTION : SI UNE 'DCT' TESTEE N'EST PAS
         IF          LOUABLE, 'B' REVIENT INCHANGE, ET VAUT DONC
         IF          'XXNLOC', ET LE TEST EST DONC MAUVAIS !!!
XEIF%:   VAL         ENDIF
         JNE         E928XX          < NON, ALORS ON NE FAIT RIEN...
         XR          A,X             < (X)=MOT0(MATX(NSP1)), ET
                                     < (A)=NSPX AUQUEL EST CONNECTE
                                     <     NSP1 PAR L'INTERMEDIAIRE DE MATX.
         STBY        NSPTYP          < MAJ DE LA DEMANDE ESCLAVE, ELLE
                                     < PORTE MAINTENANT SUR UN DES
                                     < NSPX CONNECTES A NSP1.
                                     < CECI POUR UNE ECRITURE...
         BSR         ACHAND          < ENVOI DE LA DEMANDE D'ECRITURE
                                     < SUR LE NSPX CONNECTE.
         XR          X,A             < RESTAURE (A)=MOT0(MATX(NSP1)),
                                     < ET (X)=NSP COURANT...
         WAIT        WEIO            < ATTENTE DE LA FIN D'ECRITURE.
         BSR         ADLDCT          < DELOCATION DE LA DCT(NSP=(X))...
E928XX:  EQU         $
         STZ         ARGDEM+ETADEM   < LES CONDITIONS DE RETOURS DES
                                     < NSP CONNECTES MATRICIELLEMENT
                                     < SONT IGNOREES ; ON RESTAURE
                                     < DONC ETADEM A 0, PUISQUE SI
                                     < ON EST ICI, C'EST QUE LE
                                     < SERVICE DEMANDE PAR L'ESCLAVE
                                     < S'EST BIEN TERMINE...
         JMP         E928            < ALLONS CHERCHER LA CONNEXION
                                     < MATRICIELLE SUIVANTE (SI
                                     < ELLE EXISTE...).
<
< RESTAURATION DE LA DEMANDE ESCLAVE :
<
E927:    EQU         $
         LR          Y,A
         STBY        NSPTYP          < RESTAURE NSP1 DANS LA DEMANDE.
         SLRS        MSPTYP=K
         STA         ARGDEM+OPDEM    < RESTAURE L'OPDEM DE LA DEMANDE
                                     < ET CECI SURTOUT A CAUSE DE
                                     < L''OMOV' DES BUFFERS ET DU
                                     < SWAPPING.
E941:    EQU         $
         PLR         B
<
< FIN DU 'SVC' DE CONNEXION MATRICIELLE :
<
SVCMAC:  EQU         $
         PLR         A,Y
         JMP         SVCMTF          < VERS LA SORTIE...
         USE         W,PSTS          < POUR REMETTRE COMME C'ETAIT AVANT
                                     < L'INTRODUCTION DE 'SVCMAT'...
         PAGE
<
<
<        E N T R E E   S V C   M A I T R E  :
<
<
<        FONCTION :
<                      LE 'SVC' MAITRE JUSQU'ALORS INUTILISE DANS
<                    CMS4 EST INTRODUIT ICI POUR PERMETTRE
<                    A DES SOUS-PROGRAMMES MAITRES D'ACCEDER
<                    A CERTAINS SOUS-PROGRAMMES DU SYSTEME
<                    SANS EN CONNAITRE LE DEPLACEMENT DANS
<                    LE COMMON...
<                      MALHEUREUSEMENT LE DEROUTEMENT DES
<                    INSTRUCTIONS "EXTENSIONS" (PAR EXEMPLE,
<                    LES INSTRUCTIONS FLOTTANTES LORSQUE LE
<                    BLOC FLOTTANT EST ABSENT OU EN PANNE) EST
<                    TELLEMENT MERDIQUE QU'IL SUBSISTE UN ALEAS
<                    LORSQU'ON RENTRE DANS CETTE SEQUENCE DE
<                    CODE ; ON NE PEUT JAMAIS ETRE SUR QU'IL
<                    S'AGIT VRAIMENT D'UN 'SVC' !!!
<
<
<        ARGUMENTS :
<                    (X)=CODE DU 'SVC' ; NE PEUT DONC
<                        PAS TRANSMETTRE UN AUTRE ARGU-
<                        MENT QUE LE "NOM" DU SOUS-PRO-
<                        GRAMME A APPELER.
<                    LES AUTRES ARGUMENTS SONT SPECIFI-
<                    QUES DU SOUS-PROGRAMME APPELE.
<
<
<        'SVC' MAITRES RECONNUS :
<                    SVCM1  : 'RLSE' D'UN SEMAPHORE
<                             D'ADRESSE DONNEE PAR (A).
<                    SVCM2  : 'SNAP' LE CONTENU DE 'A'.
<                    SVCM3  : SIMULATION DU SYSTEME DE VISUALISATION
<                             VIDEO ACCEDANT A TOUTE LA MEMOIRE DU
<                             SYSTEME; SES ARGUMENTS SONT LES MOTS
<                             DU TYPE 'TVXXX' DE LA MEMOIRE DEBANA-
<                             LISEE ; IL EST APPELE ENTRE AUTRE PAR
<                             L'IDLE...
<                    SVCM4  : ALLOCATION D'UN CONTEXTE 'HDC',
<                    SVCM5  : DESALLOCATION D'UN CONTEXTE 'HDC',
<                    SVCM6  : EXTENSION DES ADRESSE AU-DELA DE
<                             64K DANS LES 'CCB'.
<                    SVCM7  : DEMANDE DE COPY DU SYSTEME SUR
<                             LA PREMIERE ZONE ('SCOPY1').
<                    SVCM8  : DUPLICATION DES DEMANDES RELATIVES
<                             A UN PERIPHERQUE A L'AIDE DE LA
<                             MATRICE DES CONNEXIONS.
<                    SVCM9  : SYNCHRONISATION SUR LES VALEURS
<                             POSITIVES DU MOT 'CDAG0'.
<                    SVCM10 : VIDAGE DU BUFFER D'ANTICIPATION
<                             D'UNE VISU.
<
<
SVCMTR:  EQU         $
XKREG:   VAL         K               < INITIALISATION DU CUMUL DES REGISTRES
                                     < EMPILES, CAR ON VA LES COMPTER...
       #@PSR         C               < #SISP CMS5 KREG#
         CALL        #SISP CMS5 BASE C#
                                     < ON N'EST JAMAIS ASSEZ PRUDENT...
       #@PSR         A,B,Y           < #SISP CMS5 KREG#
       #@PSR         L,W             < #SISP CMS5 KREG#
<*******************************************************************************
XSVCMP:: MOT         O               < POSITION DU REGISTRE 'P' DANS LA PILE
                                     < 'K' APRES UN 'SVC',
XSVCMX:: MOT         '0@@@@-D        < DE MEME POUR 'X' LORSQU'IL S'AGIT D'UN
                                     < 'SVC' SIMULE PAR UNE EXTENSION...
<*******************************************************************************
         LR          K,L             < (L)=BASE DE LA PILE 'K',
         LY          XKREG+XSVCMP,L  < (Y)=REGISTRE 'P' DE RETOUR,
         LR          Y,W             < (W)=BASE DU PROGRAMME APPELANT.
         LRM         B
XWOR%1:  VAL         $-ZERO
         SVC         K               < (B)=CODE DU 'SVC',
XWOR%1:  VAL         $-ZERO-XWOR%1   < ET SA LONGUEUR...
         LA          -XWOR%1,W       < (A)=MOT PRECEDENT CELUI QUI EST POINTE
                                     < PAR LE 'P' DE RETOUR (SOIT (W)).
         ANDI        MOCG            < ON ENLEVE LA ZONE ARGUMENT EVENTUELLE,
         CPR         A,B             < EST-CE UN CODE DE 'SVC' ???
         JNE         Z71Y3           < NON, IL S'AGIT DONC D'UNE EXTENSION...
         LA          -XWOR%1,W       < PEUT-ETRE (EN EFFET, LE DEUXIEME MOT
                                     < D'UNE INSTRUCTION D'EXTENSION PEUT TRES
                                     < BIEN AVOIR L'ALLURE D'UN 'SVC' !!!).
         ANDI        MOCD            < (A)=ZONE ARGUMENT DU 'SVC' PRESUME...
         CPR         A,X             < EST-ELLE EGALE AU CONTENU DE 'X' ???
         JE          Z71Y1           < OUI, ON ADMET QU'IL S'AGIT D'UN 'SVC',
                                     < BIEN QU'ENCORE UNE FOIS, IL PUISSE
                                     < S'AGIR D'UNE EXTENSION...
<
< CAS D'UNE INSTRUCTION EXTENSION :
<
Z71Y3:   EQU         $
         LX          XKREG+XSVCMX,L  < (X)=VALEUR DU REGISTRE 'X' AVANT
                                     <     LE DEROUTEMENT...
         STY         XKREG+XSVCMX,L  < QUI EST ECRASE DANS LA PILE 'K'
                                     < PAR LE REGISTRE 'P' DE RETOUR...
         PLR         L,W             < ON RESTAURE
         PLR         A,B,Y           < CE QUE L'ON A DETRUIT...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      VOIR D'OU PROVIENT LA CAUSE DE CE
<                    DEROUTEMENT : PAR EXEMPLE BLOC FLOTTANT
<                    EN PANNE, ET UTILISE PAR 'DKU' ; ON NOTERA
<                    QUE 'X' EST BON !!!
<
         PLR         C
         ADRI        XSVCMX-XSVCMP,K < ON ANNULE L'EMPILEMENT DE 'X' QUI
                                     < A ETE FAIT PAR LA SIMULATION
                                     < DU 'SVC'.
         LRM         A,B
         FLOAT       <K<K<K          < ON CLEAR (A,B)...
         JMP         Z71Y2           < ET ON ARRETE ICI...
<
< CAS OU L'ON CROIT AVOIR RECU UN 'SVC' :
<
Z71Y1:   EQU         $
         PLR         L,W             < ON RESTAURE
         PLR         A,B,Y           < CE QUE L'ON A DETRUIT...
         ADRI        Z,X             < POUR SAUTER LE CODE '00.
         XR          A,X
         WORD        SVCMTC          < 'CPI MAX...' : VALIDATION DU CODE.
         XR          A,X
         JGE         SVCMTS          < ERREUR : LA FONCTION N'EXISTE PAS...
         ADRP        X               < BRANCHEMENT EN FONCTION DU CODE.
<
<
<        L I S T E   D E S   S V C   M A I T R E S
<                    R E C O N N U S  :
<
<
SVCMTL:  EQU         $
         JMP         SVCMTS          < ERREUR : LE CODE '00 N'EST PAS RECONNU.
SVCM1::  VAL         $-SVCMTL        < RELEASE SEMAPHORE D'ADRESSE DONNEE.
         JMP         SVCMT1          < VERS LE RELEASE...
SVCM2::  VAL         $-SVCMTL        < 'SNAP' LE CONTENU DE 'A'.
         JMP         SVCMT2          < VERS LE SNAP...
SVCM3::  VAL         $-SVCMTL        < SIMULATION TELEVISION NUMERIQUE.
         JMP         SVCMT3          < VERS LA SIMULATION...
SVCM4::  VAL         $-SVCMTL        < ALLOCATION D'UN CONTEXTE 'HDC'.
         JMP         SVCGC           < VERS L'ALLOCATION...
SVCM5::  VAL         $-SVCMTL        < DESALLOCATION D'UN CONTEXTE 'HDC'.
         JMP         SVCRC           < VERS LA DESALLOCATION...
SVCM6::  VAL         $-SVCMTL        < MISE DE L'EXTENSION-ADRESSE DANS UN 'CCB'
         JMP         SVCMAE          < VERS L'EXTENSION D'ADRESSE...
SVCM7::  VAL         $-SVCMTL        < COPY DU SYSTEME SUR 'SCOPY1'.
         JMP         SVCCOP          < VERS LA COPIE SYNCHRONE...
SVCM8::  VAL         $-SVCMTL        < TRAITEMENT DES CONNEXIONS MATRICIELLES.
         JMP         SVCMAT          < VERS L'EXPLOITATION DES CONNEXIONS...
SVCM9::  VAL         $-SVCMTL        < SYNCHRONISATION SUR (CDAG0)>0.
         JMP         SVCDAG          < VERS LA SYNCHRONISATION...
SVCM10:: VAL         $-SVCMTL        < VIDAGE DU BUFFER D'ANTICIPATION-VISU.
         JMP         SVCVBI          < VERS LE VIDAGE...
<
< FIN DE LISTE DES CODES RECONNUS :
<
SVCMCP:  EQU         $
<*******************************************************************************
         CPI         $-SVCMTL+D      < GENERATION DE LA VALIDATION
XWOR%1:  VAL         '0000000@@@@    < DU CODE AVEC LE MAXIMUM.
<*******************************************************************************
SVCMTC:  EQU         ZERO+XWOR%1     < C'EST UNE REFERENCE EN AVANT.
         $EQU        SVCMCP          < ON ECRASE LE 'CPI'...
         IF          $-SVCMTL-NMSVCM,XEIF%,XEIF%,
         IF          ATTENTION : IL Y A TROP DE 'SVC' MAITRES !!!
XEIF%:   VAL         ENDIF
         PAGE
<
<
<        R E L E A S E   D ' U N   S E M A P H O R E  :
<
<
<        ARGUMENT :
<                    (A)=ADRESSE DU SEMAPHORE.
<
<
SVCMT1:  EQU         $
         BSR         ARLSE           < (A)=ADRESSE DU SEMAPHORE.
         JMP         SVCMTF          < ET C'EST TOUT...
         PAGE
<
<
<        S N A P   ( A )  :
<
<
<        ARGUMENT :
<                    (A)=VALEUR A EDITER.
<
<
XXSNAP:: VAL         L               < BIT INDICATEUR DE 'SNAP'.
SVCMT2:  EQU         $
         PSR         A
         SBT         XXSNAP          < ON FORCE LE BIT0 A 1,
         BSR         ASNAP           < ET ON SNAP...
         PLR         A
         JMP         SVCMTF          < ET C'EST TOUT...
         PAGE
<
<
<        C O D E S   N O N   R E C O N N U S  :
<
<
SVCMTS:  EQU         $
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<
<        R E T O U R   D E S   ' S V C '   M A I T R E S  :
<
<
SVCMTF:  EQU         $
         PLR         C
         LXI         K               < RETOUR AVEC (X)=K...
Z71Y2:   EQU         $               < RETOUR DES 'SVCM' ET DES EXTENSIONS'...
         RSR                         < ET C'EST TOUT...
         PAGE
<
<
<        C O P Y   S Y N C H R O N E   S U R   ' S C O P Y 1 '  :
<
<
<        FONCTION :
<                      CE NOUVEAU 'SVC' MAITRE PERMET
<                    A UNE TACHE QUELCONQUE ('GET' ET
<                    'REL' ESPACE DISQUE PAR EXEMPLE)
<                    DE FORCER UNE COPIE DU SYSTEME
<                    SUR 'SCOPY1' QUI DEVIENT AINSI
<                    LA PLUS A JOUR...
<
<
SVCCOP:  EQU         $
         PSR         A,B,W           < SAUVEGARDE DE 'A', 'B' ET 'W'...
         BSR         ASMWHO          < QUI EST LA ???
         IF          TYPTS-K,,XEIF%,
         IF          ATTENTION : LE TEST SUIVANT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         JAE         SVCCOS          < OK, C'EST UNE TACHE 'SOFTWARE'...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      LA COPIE NE PEUT PAS ETRE FAIT
<                    SOUS LES INTERRUPTIONS, CAR EN
<                    EFFET CELA PENALISERAIT TROP LE
<                    TEMPS DE REPONSE DU SYSTEME !!!
<
         JMP         SVCCOR          < ET ON SORT...
SVCCOS:  EQU         $
         LR          B,A             < (A)='NSP' DE LA TACHE 'SOFTWARE'...
         CPI         NSPINI          < EST-CE LA TACHE D'INITIALISATION ???
         JE          SVCCOR          < OUI, ON NE FAIT PAS DE COPIE (PAR
                                     < EXEMPLE, 'INI' ESSAYE DE RECUPERER LES
                                     < Q-SECTEURS HORS-SERVICE...) ; EN EFFET
                                     < DANS 'INI', TANT QUE L'ETAT DU SYSTEME
                                     < N'A PAS ETE REINITIALISE, ON NE PEUT
                                     < FAIRE DE COPIE...
         LA          ETASYS
         TBT         OTOCOP          < LA COPIE EST-ELLE ON ???
         JC          SVCCOR          < NON (VACHEMENT DANGEREUX...)...
         LRM         W               < OUI...
         WORD        COPSYN          < (W)=ADRESSE DU "CONTEXTE" DE COPIE...
<
< DEBUT DE PHASE CRITIQUE :
<
         RQST        SCOPSY-COPSYN,W
<
< GENERATION ET ENVOI DE LA COPY :
<
         BSR         AACOPY-COPSYN,W < IL FAUT GENERER LA COPY SUR LE PRO-
                                     < CESSEUR MAITRE, CAR SINON, LE BUFFER
                                     < QU'ON ENVERRAIT SUR 'SCOPY1' N'AURAIT
                                     < PAS LA BONNE VALEUR... DE PLUS ON NE
                                     < PEUT ATTENDRE QUE 'PR1' AIT FAIT CETTE
                                     < MISE A JOUR, CAR SEULE UNE ATTENTE ACTIVE
                                     < SERAIT REALISABLE, ET ALORS AUTANT FAIRE
                                     < LA COPIE ICI...
         IF          COPSYN-DCOPSY,,XEIF%,
         ADRI        DCOPSY-COPSYN,W < (W)=ADRESSE DE LA DEMANDE DE COPIE,
XEIF%:   VAL         ENDIF
         BSR         ACHAND          < QUE L'ON ENVOIE,
         BSR         ACHANW          < ET ON ATTEND LA FIN DE L'OPERATION...
         IF          COPSYN-DCOPSY,,XEIF%,
         ADRI        COPSYN-DCOPSY,W < ET ON RESTAURE 'W'.
XEIF%:   VAL         ENDIF
<
< FIN DE PHASE CRITIQUE :
<
         LAD         SCOPSY-COPSYN,W < (A)=ADRESSE DU SEMAPHORE
         BSR         ARLSE           < D'EXCLUSION QUE L'ON LIBERE...
<
< RETOUR :
<
SVCCOR:  EQU         $
         PLR         A,B,W
         JMP         SVCMTF          < ET C'EST TOUT...
         PAGE
<
<
<        S I M U L A T I O N   D ' U N   S Y S T E M E   D E
<        T E L E V I S I O N   N U M E R I Q U E   A C C E D A N T
<        A   T O U T E   L A   M E M O I R E  :
<
<
SVCMT3:  EQU         $
         PSR         A,B,Y,W         < SAUVEGARDE DES REGISTRES DETRUITS,
         LA          ETASYS          < ACCES AUX INDICATEURS DU SYSTEME :
         TBT         TVEXIS          < LA TELEVISION NUMERIQUE EST-ELLE LA ???
         JNC         Z71XD           < NON, ON NE FAIT DONC RIEN...
         CALL        #SISP CMS5 PSRSLO#
                                     < DE MEME POUR (SLO,SLE)...
         LRM         B,X,Y,W
         WORD        XX64K>DADR*LK   < (B)=LIMITE INFERIEURE DE LA VALEUR
                                     <     DE 'TVMEM1' EXPRIMEE EN 16-MOTS,
         WORD        TVLIMA*LK       < (X)=LONGUEUR EN MOTS D'UNE TRAME, OU
                                     < D'UNE COMPOSANTE.
         WORD        TVLIMA*LK>DADR  < (Y)=LONGUEUR EN 16-MOTS D'UNE TRAME...
         WORD        ZERO            < (W)=BASE DE LA MEMOIRE DEBANALISEE.
         LA          TVCTRL-ZERO,W   < ACCES AUX INDICATEURS DE CONTROLE
                                     < DU SYSTEME DE TELEVISION.
XWOR%1:  VAL         TVSIMU=K
XWOR%1:  VAL         -XWOR%1         < POUR UN DECALAGE A DROITE,
         IF          XWOR%1,,XEIF%,
         SLRS        -XWOR%1         < CADRAGE DE 'TVSIMU' A DROITE.
XEIF%:   VAL         ENDIF
         ANDI        TVSIMU>XWOR%1   < ACCES A 'TVSIMU'.
         JAE         Z71XX           < CE N'EST PAS LE MODE 'SIMULATION',
                                     < ON NE FAIT RIEN...
         PSR         W
         ADR         A,W             < ACCES A 'TVMEM1', 'TVMEM2' OU
                                     < 'TVMEM3' SUIVANT 'TVSIMU'.
         LA          TVMEM-ZERO,W    < (A)=ADRESSE 16-MOTS DU RECEPTEUR.
         PLR         W
         CPR         B,A             < VALIDATION CAPITALE DE CETTE ADRESSE
                                     < DE RECEPTEUR...
         JGE         Z71XY           < OK, L'ADRESSE DU RECEPTEUR EST SUPE-
                                     < RIEURE OU EGALE A LA LIMITE...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      RIEN, ON FAIT COMME SI LE SYSTEME ETAIT OFF...
<
         JMP         Z71XX           < COMME SI LE SYSTEME ETAIT OFF !!!
<
< DEPLACEMENT DE LA ZONE MEMOIRE POINTEE
< PAR 'TVMEME' VERS CELLE POINTEE PAR
< 'TVMEM1' QUI EST LA ZONE VISUALISEE
< PAR LE SYSTEME DE TELEVISION, AFIN
< DE FAIRE CROIRE QUE LA ZONE POINTEE
< PAR 'TVMEME' EST VISUALISEE EN
< DYNAMIQUE !!!
<
Z71XY:   EQU         $
         LR          A,B             < (A)=FUTUR REGISTRE 'SLO', ADRESSE DU
                                     <     RECEPTEUR,
         ADR         Y,B             < (B)=FUTUR REGISTRE 'SLE', ADRESSE DE
                                     <     FIN DU RECEPTEUR,
         BSR         ATWOE           < MISE EN PLACE DE LA PROTECTION (SLO,SLE).
         LR          X,B             < (X)=B=LONGUEUR-MOTS D'UNE TRAME,
         LAI         K               < CLEAR POUR FAIRE LA DIVISION :
         DV          TVNITE-ZERO,W   < (A)=NOMBRE DE MOTS ECHANGES LORS
                                     <     DE CHAQUE ITERATION.
         CPZR        B               < LE NOMBRE D'ITERATIONS DIVISE-T'IL
                                     < EXACTEMENT LA LONGUEUR D'UNE TRAME ???
         JE          Z71XZ           < OUI, OK...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      RIEN DE SIMPLE, EN EFFET, EN AUGMENTANT LE NOMBRE
<                    D'ITERATIONS DE 1, ON RISQUERAIT DES ALARMES DE
<                    MEMOIRE INEXISTANTE !!!
<
         JMP         Z71XX           < ET ON FAIT COMME SI LE SYSTEME
                                     < ETAIT OFF...
Z71XZ:   EQU         $
         LR          A,Y             < (Y)=NOMBRE DE MOTS POUR CHAQUE ITERATION,
         LX          TVNITE-ZERO,W   < (X)=NOMBRE D'ITERATIONS.
         LA          TVMEME-ZERO,W   < (A)=ADRESSE MOT DE L'EMETTEUR (ZONE A
                                     <     VISUALISER EN PSEUDO-DYNAMIQUE),
         LBI         TVAR0           < (B)=ADRESSE MOT DU RECEPTEUR RELATIVE
                                     <     A 'SLO' (ZONE DE VISUALISATION).
Z71XA:   EQU         $
         PSR         X               < SAUVEGARDE DU DECOMPTE DES ITERATIONS.
         LR          Y,X             < (Y)=X=NOMBRE DE MOTS DEPLACES.
         PSR         A
         LA          TVCTRL-ZERO,W   < ACCES AUX INDICATEURS DE CONTROLE
                                     < DE LA TELEVISION NUMERIQUE.
XWOR%1:  VAL         TVIN=K          < BIT DE DISCRIMINATION IN/OUT...
         TBT         NBITMO-B-XWOR%1 < EST-CE UNE ENTREE OU UNE SORTIE ???
         PLR         A
         JNC         Z71XB           < TVIN=K : OUT...
         XR          A,B             < TVIN=1 : IN, ON PERMUTE LES REGISTRES
                                     < D'ADRESSES 'A' ET 'B'.
         JMP         Z71XB3          < VERS LE 'MVTM' FONCTION DU SELECTEUR DE
                                     < BOOTSTRAP ET DE 'MAINT'...
Z71XB4:  EQU         $               < POINT DE RETOUR...
         XR          A,B             < RESTAURATION DES REGISTRES 'A' ET 'B'.
         JMP         Z71XC           < VERS LE BLOC SUIVANT...
Z71XB:   EQU         $
         MVTS                        < SIMULATION DE LA SORTIE (VISUALISATION).
Z71XC:   EQU         $
         ADR         Y,A             < PROGRESSION DE L'ADRESSE EMETTRICE,
         ADR         Y,B             < AINSI QUE CELLE RECEPTRICE.
         PLR         X               < RESTAURATION DU DECOMPTE DES ITERATIONS,
         JDX         Z71XA           < ET ON ITERE...
Z71XX:   EQU         $
                                     < RESTAURATION DE (SLO,SLE) :
         CALL        #SISP CMS5 PLRSLO#
Z71XD:   EQU         $               < PAS DE TELEVISION...
         PLR         A,B,Y,W         < ET DES REGISTRES DETRUITS...
SVCMTG:  JMP         SVCMTF          < ET VOILA LE TRAVAIL...
                                     < (ET RELAI)
         PAGE
<
<
<        A L L O C A T I O N   D ' U N   C O N T E X T E   ' H D C '  :
<
<
<        FONCTION :
<                      CE 'SVC' MAITRE GERE L'ALLOCATION
<                    D'UN CONTEXTE 'HDC' APPARTENANT AU
<                    PROCESSEUR 'PROIOP'.
<
<
<        ARGUMENT :
<                    (A)=ADRESSE D'UN 'CCB' (QUI ETRE DE TYPE 'HDC').
<
<
<        RESULTAT :
<                    CCN(CCB) <-- NUMERO DU CONTEXTE ALLOUE.
<
<
SVCGC:   EQU         $
         PSR         A,B,Y,W
         PSR         L
<
< INITIALISATION DES BASES (ON NE
< PEUT PAS FAIRE AUTREMENT QUE
< D'UTILISER TOUTES LES BASES) :
<
         LR          A,W             < (W)=ADRESSE DU 'CCB',
         LRM         Y,L
         WORD        PILDKX          < (Y)=ADRESSE DU POOL DES CONTEXTES,
         WORD        SEMDKY          < (L)=ADRESSE DU SEMAPHORE DE PROTECTION
                                     <     DE CETTE RESSOURCE.
<
< ALLOCATION D'UN JEU DE REGISTRES
< AVEC ATTENTE EVENTUELLE :
<
         LA          CCBMO1,W
         ANDI        MTRHDC          < NETTOYAGE DU MOT1 DU 'CCB',
         LR          A,B             < ET SAUVEGARDE DANS LE REGISTRE 'B'.
         RQST        O,L             < ALLOCATION D'UN CONTEXTE AVEC ATTENTE
                                     < EVENTUELLE...
         PULL                        < LORSQUE L'ALLOCATION EST POSSIBLE, ON
                                     < OBTIENT DANS 'A', UN NUMERO DE JEU DE
                                     < REGISTRES.
         PLR         L
         JNV         SVCGC1          < OK...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      EXAMINER LE POOL DES REGISTRES 'HDC' !!!
<                    ET IL CONVIENT D'ETRE PRUDENT AU REDEMARRAGE !!!
<
SVCGC1:  EQU         $
         ORR         B,A             < INSERTION DU NUMERO DE CONTEXTE ALLOUE,
         STA         CCBMO1,W        < ET MISE-A-JOUR DU 'CCB'.
         PLR         A,B,Y,W
         JMP         SVCMTG          < ET C'EST TOUT, ON SORT...
         PAGE
<
<
<        D E S A L L O C A T I O N   D ' U N   J E U   D E
<        R E G I S T R E S   ' H D C '  :
<
<
<        FONCTION :
<                      CE 'SVC' MAITRE PERMET DE RENDRE
<                    AU POOL UN JEU DE REGISTRES 'HDC'.
<
<
<        ARGUMENT :
<                    (A)=ADRESSE DU 'CCB'.
<
<
SVCRC:   EQU         $
         PSR         A,Y,L,W
<
< INITIALISATION DES BASES :
<
         LR          A,W             < (W)=ADRESSE DU 'CCB'.
         LRM         Y,L
         WORD        PILDKX          < (Y)=ADRESSE DU POOL DE CONTEXTES,
         WORD        SEMDKZ          < (L)=ADRESSE DU SEMAPHORE DE PROTECTION
                                     <     DE LA RESSOURCE 'HDC'.
<
< RELEASE DU CONTEXTE POSSEDE
< PAR LE 'CCB' ARGUMENT :
<
         LA          CCBMO1,W
         ANDI        CCBCCN          < (A)=NUMERO DU JEU DE REGISTRES POSSEDES,
         PUSH                        < QUE L'ON REMET DANS LE POOL...
         JNV         SVCRC1          < OK...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      ALLER EXAMINER LE POOL DE REGISTRES !!!
<
SVCRC1:  EQU         $
         LAD         O,L             < (A)=ADRESSE DU SEMAPHORE DE PROTECTION
                                     <     DU POOL DES CONTEXTES 'HDC',
         BSR         ARLSE           < RELEASE DE LA RESSOURCE...
         PLR         A,Y,L,W
         JMP         SVCMTG          < ET ON SORT...
         PAGE
<
<
<        E X T E N S I O N   D ' A D R E S S E   ' C C B '  :
<
<
<        FONCTION :
<                      CETTE ROUTINE RECOIT EN ARGUMENT
<                    UN 'CCB' ET LE REGISTRE 'SLO' ; A
<                    PARTIR DE CE REGISTRE 'SLO', ELLE
<                    DETERMINE L'EXTENSION D'ADRESSE AU
<                    DELA DE 32K, SACHANT QUE L'ADRESSE
<                    DEJA PRESENTE DANS LE 'CCB' EST
<                    ABSOLUE DANS UNE PAGE DE 32K...
<                      DE PLUS, 'SVCM6' INITIALISE 'CCBMO0'
<                    ET 'CCBMO2' A L'AIDE DE 'CCBMR0' ET
<                    'CCBMR2', CE QUI A L'AVANTAGE DE PER-
<                    METTRE LE BOUCLAGE SUR UN ECHANGE
<                    LORS D'UN DEFAUT...
<
<
<        NOTA IMPORTANT :
<                      LORSQU'INITIALEMENT, LE CHAMP 'MAE'
<                    CONTIENT DEJA QUELQUE CHOSE (C'EST
<                    PAR EXEMPLE LE CAS, LORS DES TRANSFERTS
<                    RAPIDES ENTRES 'DKU' ET 'MEMTV'), LE
<                    'SVCM6' EST INEFFECTIF...
<                      IL CONVIENDRA DONC D'INITIALISER
<                    CORRECTEMENT LE MOT0 D'UN 'CCB' AVANT
<                    TOUT APPEL DE 'SVCM6' !!!
<
<
<        ARGUMENTS :
<                    (A)=ADRESSE DU 'CCB',
<                    (SLO)=REGISTRE 'SLO' PERMETTANT LA DETERMINATION
<                          DE LA PAGE DE 32K A LAQUELLE APPARTIENT
<                          L'ADRESSE CONTENU DANS LE 'CCB'.
<
<
SVCMAE:  EQU         $
         PSR         A,B,X,W
         LR          A,W             < (W)=ADRESSE DU 'CCB'.
<
< INITIALISATION DU 'CCB' :
<
         LA          CCBMR0,W
         STA         CCBMO0,W        < INDICATEURS ET EXTENSION D'ADRESSE,
         LA          CCBMR2,W
         STA         CCBMO2,W        < ET PARTIE BASSE DE L'ADRESSE...
<
< VALIDATION RELATIVE A L'INTERDICTION
< D'ECHANGES A CHEVAL SUR DES FRONTIERES
< DE 64K-MOTS :
<
         LA          CCBMO3,W        < (A)=LONGUEUR EN MOTS/OCTETS...
XWOR%1:  VAL         NOCMO-E?D       < ??!??!?!
         IF          NOCMO-E-D,,XEIF%,
         IF          ATTENTION : IL FAUT TRAITER SEPAREMENT LES
         IF          COMPTES DE MOTS ET LES COMPTES D'OCTETS POUR
         IF          CONNAITRE L'ADRESSE-MOT DU DERNIER MOT CONCERNE
         IF          PAR L'ECHANGE !!!
XEIF%:   VAL         ENDIF
         ADRI        -XWOR%1,A       < POUR CALCULER L'ADRESSE DU DERNIER MOT...
         LB          CCBMO0,W        < (B)=MOT0 (INDICATEURS) :
         TBT         NBITMO+BCCBBM   < EST-CE UN CANAL MOTS OU OCTETS ???
         JNC         SVCMAJ          < DE MOTS...
         SLRS        NOCMO=K         < D'OCTETS, CONVERSION EN UN NOMBRE
                                     < DE MOTS...
SVCMAJ:  EQU         $
         AD          CCBMO2,W        < (A)=ADRESSE DU DERNIER MOT CONCERNE PAR
                                     <     L'ECHANGE...
         JNC         SVCMAK          < OK, IL N'EST PAS A CHEVAL SUR UNE
                                     < FRONTIERE DE 64K...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      MODIFIER LE SYSTEME AFIN DE FAIRE
<                    DISPARAITRE CET ECHANGE QUI VA ETRE
<                    EXECUTE "MODULO" 64K ; POUR REDEMARRER,
<                    IL SERAIT PEUT-ETRE PRUDENT DE REDUIRE
<                    ARTIFICIELLEMENT LA LONGUEUR DE L'ECHANGE
<                    ('CCBMO3'), AFIN DE RESTER DANS UNE PAGE
<                    DE 64K !!!
<
SVCMAK:  EQU         $
<
< GENERATION DE L'EXTENSION D'ADRESSE
< ('CCBMAE') SI ELLE N'EST DEJA PRESENTE :
<
         LA          CCBMO0,W
         ANDI        CCBMAE          < (A)=CHAMP 'MAE' DU MOT0 DU 'CCB' :
         JANE        SVCMAI          < IL CONTIENT DEJA UNE EXTENSION, ON
                                     < NE FAIT RIEN...
         RDOE                        < (A)='SLO' COURANT,
         LBI         K               < ET ON SE MOQUE DE 'SLE'...
XWOR%1:  VAL         XX64K/XPESC=K   < PERMET DE PASSER D'UN NUMERO DE PAGE
                                     < DE 64K A UN NUMERO DE PAGE DE 32K...
         SCRD        NBITMO+XSLO32+XWOR%1
                                     < (B)=NUMERO DE PAGE DE 64K, ET
                                     < BIT0(A)=NUMERO (0/1) DE PAGE DE 32K DANS
                                     <         LA PAGE DE 64K (B)...
         JNC         SVCMAF          < BIT0(A)=0 : ON EST DANS LA PAGE 0 DE 32K,
                                     <             DE LA PAGE DE 64K COURANTE,
                                     <             L'ADRESSE MEMOIRE CONTENUE
                                     <             DANS LE 'CCB' EST BONNE...
XWOR%1:  VAL         XPESC*LK=K      < POUR RECUPERER LE NUMERO DE PAGE DE 32K
                                     < A L'INTERIEUR DE LA PAGE DE 64K...
         SLRS        XWOR%1          < CLEAR PARTIEL
         SLLS        XWOR%1          < DU REGISTRE 'A'...
         LR          A,X             < (X)=COMPLEMENT DE L'ADRESSE DEJA CONTENUE
                                     <     DANS LE 'CCB',
         AND         CCBMO2,W        < VALIDATION DE L'ADRESSE MEMOIRE :
         JAE         SVCMAG          < OK, LE COMPLEMENT ETAIT DEJA NUL...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE POURQUOI LE BIT0
<                    DE L'ADRESSE CONTENUE DANS LE
<                    MOT2 DU 'CCB' EST DEJA A 1 ;
<                    VOIR SI LA DEMANDE D'ENTREE-SORTIE
<                    CORRESPONDANTE EST EN ADRESSE-MOTS
<                    OU OCTETS, OU S'IL NE S'AGIRAIT PAS
<                    D'UNE OPERATION 'CDA' !!!
<
SVCMAG:  EQU         $
         LA          CCBMO2,W
         ORR         X,A             < ON RAJOUTE LE NUMERO (0/1) DE PAGE DE
                                     < 32K (DANS LA PAGE DE 64K COURANTE),
         STA         CCBMO2,W        < ET ON MET A JOUR L'ADRESSE MEMOIRE
                                     < DANS LE 'CCB'...
SVCMAF:  EQU         $
         LX          CCBMO0,W        < (X)=MOT0 DU 'CCB', POUR LEQUEL LE
                                     <     LE CHAMP 'MAE' EST FORCEMENT NUL...
XWOR%1:  VAL         CCBMAE=K
         SLLD        NBITMO+XWOR%1   < (A)=NUMERO DE PAGE DE 64K,
         EORR        X,A             < QUE L'ON INSERE DANS LE CHAMP 'CCBMAE',
                                     < (PAR 'EORR' POUR UNE VALIDATION UN
                                     < PETIT PLUS LOIN...)
         STA         CCBMO0,W        < ET ON MET A JOUR LE 'CCB'...
         ANDR        X,A             < ON TENTE DE RECALCULER LE MOT0 DU 'CCB',
                                     < SANS LE CHAMP 'CCBMAE',
         CPR         A,X             < EST-ON RETOMBE SUR NOS PIEDS ???
         JE          SVCMAH          < OUI, OK...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE COMMENT-IL SE FAIT
<                    QU'IL Y A DEBORDEMENT DU CHAMP 'CCBMAE' !!!
<
SVCMAH:  EQU         $
SVCMAI:  EQU         $               < CAS, OU 'MAE' CONTIENT DEJA UNE
                                     < EXTENSION D'ADRESSE...
         PLR         A,B,X,W
         JMP         SVCMTG          < ET C'EST TOUT...
<
<
<        E X T E N S I O N S   D ' A D R E S S E S
<                    C L A S S I Q U E S  :
<
<
XWOR%1:  VAL         -NBITMO         < POUR CONNAITRE LES POIDS FORTS DE
                                     < L'ADRESSE DE BASE DU SYSTEME...
XWOR%2:  VAL         O>XWOR%1        < POIDS FORTS DE DEBUT.
XWOR%4:  VAL         CCBMAE=K
XEXA0::  VAL         XWOR%2>XWOR%4   < EXTENSION D'ADRESSE PAGE 0...
         IF          XEXA0-K,,XEIF%,
         IF          ATTENTION : LES 'STZ' D'INITIALISATION DES
         IF          MOTS 0 DES 'CCB' SONT IDIOTS !!!
XEIF%:   VAL         ENDIF
XWOR%1:  VAL         -NBITMO-DADR    < POUR CONNAITRE LES POIDS FORTS DE
                                     < L'ADRESSE DE 'MEMTV'...
XWOR%2:  VAL         MEMTV0>XWOR%1   < POIDS FORTS DE DEBUT,
XWOR%3:  VAL         MEMTVE>XWOR%1   < POIDS FORTS DE FIN...
         IF          XWOR%2-XWOR%3,,XEIF%,
         IF          ATTENTION : LES ADRESSES DE 'MEMTV' SONT INCOHERENTES !!!
XEIF%:   VAL         ENDIF
XWOR%4:  VAL         CCBMAE=K
XEXATV:: VAL         XWOR%2>XWOR%4   < EXTENSION D'ADRESSE 'MEMTV'...
         PAGE
<
<
<        S U I T E   D E   L A   T E L E V I S I O N   N U M E R I Q U E  :
<
<
<        NOTA :
<                      CE MODULE EST ICI ENCORE
<                    ET TOUJOURS A CAUSE DES SAUTS
<                    SUPERIEURS A 128 MOTS !!!
<
<
Z71XB3:  EQU         $
HORROM:: VAL         XXBPTR          < POSITION DU SELECTEUR DE BOOTSTRAP
                                     < UTILISEE POUR FORCER OU RAZER LE
                                     < BIT 'MAINT'...
         IF          HORROM-XXBROM,XEIF%,,XEIF%
         IF          ATTENTION : LORSQUE LE PUPITRE EST A L'ETAT "LOCK",
         IF          L'INSTRUCTION "RDSI" DONNE COMME POSITION DU
         IF          SELECTEUR DE BOOTSTRAP "XXBROM", DONC PB !!!
XEIF%:   VAL         ENDIF
         PSR         Y               < SAUVEGARDE DU NOMBRE DE MOTS DEPLACES
                                     < PAR LE 'MTVM'...
         PSR         A               < SAUVEGARDE DE L'ADRESSE RELATIVE A 'SLO'.
         RDSI                        < LECTURE DE L'IDENTIFICATION DU PROCESSEUR
         ANDI        MSBOOT          < DONT ON NE GARDE QUE LE SELECTEUR
                                     < DE BOOTSTRAP,
XWOR%1:  VAL         MSBOOT=K
         SLRS        XWOR%1          < QUE L'ON CADRE A DROITE...
         LR          A,Y             < ET QUE L'ON SAUVEGARDE DANS 'Y'...
         CPI         HORROM          < EST-CE UNE DEMANDE DE 'MAINT' ???
         JNE         Z71XB1          < NON, PAS DE 'MAINT'...
         BSR         ASMMK           < OUI, ON DEMANDE UNE INHIBITION DU TEST
                                     < DES PARITES MEMOIRE, ET POUR CE FAIRE
                                     < M A S Q U A G E   I N T E R R U P T I O N
                                     < AFIN QUE SEUL LE 'MVTM' SOIT EXECUTE AVEC
                                     < LE BIT 'MAINT' POSITIONNE...
         LAI         COSBT?MAINT=FMASK(K=FCINST
         SST                         < ET ON FORCE 'MAINT' QUI INHIBE LES TESTS
                                     < SUR LES PARITES MEMOIRE !!!
Z71XB1:  EQU         $
         PLR         A               < RESTAURE :
                                     < (A)=ADRESSE RELATIVE A 'SLO'...
         MVTM                        < ET ON SIMULE L'ENTREE...
         PSR         A               < RE-SAUVEGARDE DE L'ADRESSE RELATIVE A
                                     < 'SLO'...
         LR          Y,A             < (A)="SELECTEUR DE BOOTSTRAP"...
         CPI         HORROM          < A-T'ON DEMANDE 'MAINT' ???
         JNE         Z71XB2          < NON, RIEN A FAIRE...
         LA          MEMV            < OUI,
         TBT         MEMXXX          < ETAIT'IL DEJA POSITIONNE ???
         JC          Z71XB5          < OUI (VOIR L'HORLOGE), ON LE LAISSE...
         LAI         COSBT?MAINT=FMASK(K=FCINST
         RST                         < NON, IL FAUT EFFACER 'MAINT', ET
Z71XB5:  EQU         $
         BSR         ASMDK           < D E M A S Q U A G E ...
Z71XB2:  EQU         $
         PLR         A               < RESTAURE :
                                     < (A)=ADRESSE RELATIVE A 'SLO',
         PLR         Y               < (Y)=NOMBRE DE MOTS DEPLACES PAR 'MVTM'.
         JMP         Z71XB4          < VERS LE TRONC COMMUN 'MVTM'/'MVTS'...
         PAGE
<
<
<        E X T E N S I O N   D E S   ' C D A '  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME EST DESTINE
<                    A REMPLACER LES ANCIENS 'WOE'
<                    QUI PERMETTAIENT DE SE POSITIONNER
<                    SUR 'MEMTV' (C'EST-A-DIRE LA 'CDAI') ;
<                    DORENAVANT, TOUTES CES OPERATIONS
<                    PEUVENT ATTEINDRE L'ENSEMBLE DES
<                    'CDA' DU SYSTEME ; 'HDLDKU' RECOIT
<                    A CET EFFET, DANS LE CAS DE CES
<                    FONCTIONS, NON PAS (SLO,SLE) DE
<                    L'UTILISATEUR DANS LES REGISTRES
<                    (SLO,SLE), MAIS (CDESCO,CDESCE) QUI
<                    DEFINISSENT LA 'CDA' COURANTE...
<
<
<        ARGUMENTS :
<                    (A,B)=REGISTRES 'SLO' ET 'SLE'
<                          DEMANDES SUR L'ANCIENNE 'CDAI'...
<
<
TWOE:    EQU         $
         PSR         X,Y
         PSR         A,B             < SAUVEGARDE INDEPENDANTE DES REGISTRES
                                     < (SLO,SLE) DEMANDES.
<
< EXAMEM DE (SLE)-(SLO) :
<
         LR          B,Y             < (Y)=(SLE),
         SBR         A,Y             < (Y)=(SLE)-(SLO), SOIT TAILLE DE LA ZONE
                                     <     DE LA 'CDAI' DEMANDEE...
         SLLS        NBITMO-XSLO32
         SLRS        NBITMO-XSLO32   < ON ELIMINE LE NUMERO DE PAGE DE 32K,
         LR          A,X             < D'OU :
                                     < (X)=TRANSLATION DANS LA 'CDA'...
<
< ACCES A (SLO,SLE) COURANTS :
<
         RDOE                        < (A,B)=(SLO,SLE) COURANTS,
         ADR         X,A             < QUE L'ON TRANSLATE...
                                     < (A)=(SLO) COURANT TRANSLATE,
         ADR         B,X             < (X)=(SLE) COURANT TRANSLATE,
         LR          A,B             < AFIN DE RECALCULER LE 'SLE' COURANT :
         ADR         Y,B             < (B)=(SLE)=(SLO COURANT)+(SLE ARGUMENT)
                                     <                        -(SLO ARGUMENT),
         CPR         X,B             < ET COMPARAISON ENTRE LE 'SLE' COURANT
                                     < DANS 'X' ET LE 'SLE' DEMANDE APRES
                                     < TRANSLATION DANS 'B'...
         JLE         TWOE1           < OK, (B)<=(X), CE QUI SIGNIFIE QUE LA
                                     < TAILLE DEMANDEE N'EST PAS SUPERIEURE
                                     < A LA TAILLE COURANTE...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      IL NE S'AGIT PAS REELLEMENT D'UNE
<                    ERREUR SYSTEME : IL SUFFIT PAR EXEMPLE
<                    QUE LA 'CDA' COURANTE SOIT UNE 'CDAP',
<                    MAIS, JE LA METS AFIN D'EN ETRE AVERTI...
<
TWOE3:   EQU         $
         PLR         A,B             < ON RESTAURE (SLO,SLE) ARGUMENTS,
         PSR         A,B             < QUE L'ON RE-SAUVEGARDE IMMEDIATEMENT...
<
< MODIFICATION DE (SLO,SLE) COURANTS :
<
TWOE1:   EQU         $
         PSR         A               < SAUVEGARDE DE 'SLO',
         LR          B,A             < ON FAIT : (SLO) <-- (SLE),
         WOE                         < ET L'ON SE PLACE AINSI EN HAUT DE LA
                                     < 'CDA' DONT L'AMPLITUDE A ETE TROUVEE
                                     < CORRECTE...
         LAI         COSBT?DEBUG=FMASK(K=FCINST
         BSR         ASMMK           < MASQUAGE DES INTERRUPTIONS CAR ON VA
                                     < PASSER EN MODE 'DEBUG' :
         SST                         < ET VOILA, ON PASSE EN MODE 'DEBUG',
                                     < AFIN DE VOIR SI LA 'CDA' CHOISIE EST
                                     < VALIDE (EXISTE PHYSIQUEMENT...).
         LYI         O               < (Y)=ADRESSE DU PREMIER MOT A TESTER
                                     <     DANS (SLO,SLE),
         DBP                         < ALORS, RECHERCHE DES MEMOIRES INEXIS-
                                     < TANTES EN QUEUE DE LA 'CDA' :
         PLR         A               < RESTAURE :
                                     < (A)='SLO' REEL DE LA 'CDA'...
         JV          TWOE2           < ET BIEN, LA 'CDA' CHOISIE N'EXISTE PAS...
         WOE                         < LES DERNIERS MOTS TESTES ONT L'AIR
                                     < D'ETRE LA ; POSITIONNEMENT DE (SLO,SLE)
                                     < DE LA 'CDA' :
                                     < - COURANTE, LORSQUE L'AMPLITUDE EST
                                     < CORRECTE (ET PEUT-ETRE UNE REDUCTION DE
                                     < LONGUEUR : C'EST LA LONGUEUR ARGUMENT
                                     < QUI L'EMPORTE),
                                     < - ARGUMENT, SI L'AMPLITUDE DE LA 'CDA'
                                     < COURANTE DANS (SLO,SLE) EST INSUFFISANTE,
                                     < OU BIEN, SI LA 'CDA' QU'ON A MIS EN PLACE
                                     < N'EXISTE PAS PHYSIQUEMENT.
         DBP                         < RECHERCHE DES MEMOIRES EXISTANTES EN
                                     < TETE DE LA 'CDA' :
         JV          TWOE2           < ET BIEN LA 'CDA' CHOISIE A UNE QUEUE
                                     < QUI EXISTE, ET UNE TETE QUI N'EXISTE
                                     < PAS !!!
         IF          LSPACE/XLSTAC-2,,XEIF%,
         IF          ATTENTION : LES 2 TESTS 'DBP' DE RECHERCHE DES
         IF          MEMOIRES INEXISTANTES SONT TROP NOMBREUX SI
         IF          LES STACKS MEMOIRE SONT PLUS GRANDS, OU PAS
         IF          ASSEZ NOMBREUX S'ILS SONT PLUS PETITS !!!
XEIF%:   VAL         ENDIF
         LAI         COSBT?DEBUG=FMASK(K=FCINST
         RST                         < OUFFF, LA 'CDA' QU'ON A CHOISI EXISTE,
                                     < ET (SLO,SLE) SONT POSITIONNES, ON PEUT
                                     < DONC ANNULER LE MODE 'DEBUG'...
         BSR         ASMDK           < PUIS DEMASQUER LES INTERRUPTIONS...
<
< SORTIE ET RESTAURATIONS :
<
         PLR         A,B             < RESTAURATION DES ARGUMENTS...
         PLR         X,Y
         RSR
<
< TRAITEMENT DES MEMOIRES
< INEXISTANTES DANS UNE 'CDA' :
<
TWOE2:   EQU         $
         LAI         COSBT?DEBUG=FMASK(K=FCINST
         RST                         < ON COMMENCE PAR ANNULER LE MODE 'DEBUG',
         BSR         ASMDK           < PUIS ON DEMASQUE LES INTERRUPTIONS, ET
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      EN FAIT CE N'EST PAS REELLEMENT
<                    UNE ERREUR SYSTEME : LA 'CDA' ADRESSEE
<                    PEUT PHYSIQUEMENT N'EST PAS SUFFISANTE.
<                    DANS CE CAS, EN GENERAL, C'EST LA 'CDA'
<                    ARGUMENT (A,B) QUI SERA POSITIONNEE EN
<                    'TWOE3', OU BIEN... EN TOUT CAS, ON EXAMI-
<                    NERA ATTENTIVEMENT (SLO,SLE) !!!
<
         JMP         TWOE3           < ON VA FAIRE : (SLO,SLE) <-- (A,B)...
                                     < MAIS ATTENTION, ON PEUT AINSI RENTRER
                                     < DANS UNE BOUCLE SANS FIN, SI LA 'CDA'
                                     < ARGUMENT (A,B) N'EXISTE PAS ('CBM' DIS-
                                     < JOINTS,...) !!!
         PAGE
         CALL        #SISP CMS5 DOL1# < A CAUSE DE LA REFERENCE EN
                                     < AVANT SUR 'DCTSVC'
<
<
<        E N T R E E   S V C   E S C L A V E  :
<
<
<        PHILOSOPHIE :
<                      LE PROBLEME EST DELICAT, EN EFFET IL
<                    FAUT EVITER DE FAIRE TRAVAILLER LE
<                    MONITEUR DANS LA PILE DE L'ESCLAVE.
<                    LA SEULE SOLUTION POUR SAUVEGARDER
<                    LES REGISTRES DE L'ESCLAVE (...),
<                    EST DE PASSER PAR L'INTERMEDIAIRE
<                    D'UNE TACHE SOFT INTERMEDIAIRE
<                    D'OU LA CREATION DE 'RUNSVC'...
<
<
<        ARGUMENT :
<                    (A)=ADRESSE TRANSLATABLE DES ARGUMENTS.
<                    'X' EST DESTRUCTIBLE (LA VALEUR
<                    FOURNIE PAR LE FIRMWARE EST
<                    IGNOREE).
<
<
<        RESULTATS :
<                    A INCHANGE !!!
<                    (X)=0 SI EXECUTION DU SERVICE OK,
<                       =CODE-ERREUR SINON...
<                    CODES-CONDITIONS POSITIONNES TEL QUE :
<                    L'ESCLAVE PUISSE ECRIRE LE PROGRAMME SUIVANT :
<
<                            LAD     XXXX
<                            SVC     0
<                            JE      <SI OK>,
<                            JNE     <SI ERREUR>.
<
<
SSVC:    WORD        DCTSVC+LSIT     < @ DU SEMAPHORE DE SYNCHRONISATION
                                     < DE SVCESC ET DE RUNESC.
SVCESC:  EQU         $
         LR          C,X             < SAUVEGARDE REENTRANTE DU REGISTRE
                                     < C DE L'ESCLAVE DANS X (INUTILISE).
DOLLAR:  LRP         C               < MAJ DE C POUR ACCES A SSVC.
         RLSE        &SSVC-DOLLAR,C  < SYNCHRONISATION SVCESC ET RUNSVC
                                     < NOTA : ON N'UTILISE PAS LE S/P 'ARLSE'
                                     < PARCE QUE:
                                     < A NE DOIT PAS ETRE ECRASE
                                     < C NE BASE PAS LE COMMON DU SYSTEME
                                     < ET, ON EST SUR QUE LES IT NE SONT
                                     < PAS MASQUEES
         LR          X,C             < RESTAURE LE REGISTRE C DE
                                     < L'ESCLAVE.
         LXI         K               < AINSI, LORS DES APPELS DU !DEBUG QUI
                                     < POURRAIENT SUIVRE, ON AURA UN CONTENU
                                     < DU REGISTRE 'X' QUI SERA PROPRE...
<
<        D E S A C T I V A T I O N   D E   L ' E S C L A V E  :
<
         QUIT                        < DESARMEMENT DU NIVEAU ESCLAVE.
RETSVC:  EQU         $               < VALEUR DU REGISTRE P(ESCLAVE) LORSQU'IL
                                     < A EXECUTE L'INSTRUCTION 'SVC' ; CETTE
                                     < VALEUR EST UTILISE PAR LE MODULE 'MASTER'
                                     < DU 'CCI'...
<
<        NOTA :
<                      LE QUIT, POUR FAIRE UN CHANGEMENT DE
<                    CONTEXTE CORRECT, DOIT PASSER AVANT
<                    LE RAZ DE DCTSY(NSPACT) DE 'RUNSVC',
<                    EN CONSEQUENCE, LE NIVEAU ESCLAVE DOIT
<                    ETRE PLUS PRIORITAIRE QUE LE NIVEAU
<                    DE TRAITEMENT DES SVC :
<                            NSPACT<NSPSVC...
<
<
<        R E A C T I V A T I O N   P A R   S C H E D U L E R  :
<
         CPZR        X               < POUR PERMETTRE UN TEST JE/JNE
                                     < AU RETOUR DU SVC PAR L'ESCLAVE.
         RSV                         < RETOUR AU PROGRAMME ESCLAVE...
         CALL        #SISP CMS5 DOL2# < ON PEUT REPARTIR EN MEMOIRE HAUTE
         PAGE
<
<
<        T R A C E   D U   S Y S T E M E  :
<
<
<        PHILOSOPHIE :
<                      LE BUT DE LA TRACE EST DE CONSERVER UN HISTORIQUE
<                    POUR CELA, ET A CHAQUE FOIS QUE C'EST
<                    POSSIBLE, A CHAQUE CHANGEMENT DE TACHE, A
<                    CHAQUE MISE EN FILE D'ATTENTE, A CHAQUE
<                    IT, ON MET UN CERTAIN NBRE D'INFORMATIONS
<                    DANS UNE PILE CIRCULAIRE, OU TRACE QUI MEMOIRISE
<                    DONC LES DERNIERS INSTANTS DU SYSTEME (...).
<
<
<        FORMAT :
<                      LA TRACE EST UNE PILE CIRCULAIRE DOUBLE-MOTS,
<                    DONT L'INDEX EST 'TRACEX' ; LE FORMAT DE CHAQUE
<                    ENTREE EST LE SUIVANT :
<
<                    1- APPEL POUR IT :
<                            MOT0=SOUS-NIVEAU D'IT (DISTINGUE 3 & 7),
<                            MOT1=K.
<                    2- APPEL PAR LES HANDLERS :
<                            MOT0=NSPTYP (ACTIF/TERMIN),
<                            MOT1=ADRESSE DE LA DEMANDE.
<                    3- APPEL PAR CHAND :
<                            BIT0(MOT0)=K : ENTRY DE CHAND,
<                                      =1 : SORTIE DE CHAND,
XTRACH:: VAL         BITSIG          < BIT INDICATEUR IN/OUT DE 'CHAND'.
<                            BITS1-15(MOT0)=NSP DE LA DEMANDE,
<                            MOT1=ADRESSE DE LA DEMANDE.
<                    4- APPEL PAR IDLE :
<                            MOT0= SI >'32 : FREQUENCE DONNEE A L'HOR-
<                                            LOGE PAR IDLE,
<                                = SI <='32 : NBRE DE DEMANDES EN
<                                             ATTENTE SUR LE DKS OU
<                                             SUR LE SCHEDULER.
<                            MOT1='FFFF (-1).
<                    5- APPEL POUR DUMP :
<                            BIT0(MOT0)=1,
<                            MOT1=K.
<                    6- APPEL POUR CHANGEMENT DE CONTEXTE :CF.
<                    ENTRY/RETURN-HANDLER AVEC BIT11(NSPTYP)=
<                    BIT15(NSPTYP)=1.
<
<
<        ARGUMENTS :
<                    (A)=MOT0,
<                    (W)=MOT1.
<
<
STRACE:  EQU         $
         IF          XTROFF-K,XEIF%,,
         IF          ATTENTION : LES TESTS SUIVANTS VONT MERDER !!!
XEIF%:   VAL         ENDIF
         IF          XBTROF-BITSIG,,XEIF%,
         IF          ATTENTION : LES TEST D'INHIBITION VONT MERDER...
XEIF%:   VAL         ENDIF
         CPZ         SAVEX           < LA TRACE EST-ELLE INHIBEE ????
         JL          Z710            < OUI, RIEN A FAIRE.
         PSR         X
         XR          A,L
         BSR         ASMPUO          < AFFICHAGE DE LA BASE L DE
                                     < L'APPELANT AU PUPITRE A CHAQUE
                                     < APPEL DE 'TRACE' AFIN DE RENDRE
                                     < LE T1600 SEMBLABLE AUX VRAIS
                                     < ORDINATEURS...
         XR          A,L
<
< CAS DE LA TRACE NON INHIBEE :
<
         BSR         ASMMK           < MASQUAGE GENERAL DES IT
                                     < EN EFFET LA MISE A JOUR DE LA
                                     < TRACE EST STRICTEMENT IN-
                                     < INTERRUPTIBLE, ET LA SEULE
                                     < FACON DE LA PROTEGER DES PHASES
                                     < CRITIQUES EST LE MASCAGE DES IT...
         LX          TRACEX          < RECUPERATION DE L'INDEX DE TRACE.
         STA         &TRACE          < MISE EN TRACE DE 'A'.
         XR          A,W
         ADRI        I,X             < MOT SUIVANT DU DOUBLE-MOT COURANT.
         STA         &TRACE          < MISE EN TRACE DE 'W' (DANS 'A'...).
         XR          A,W             < RESTAURE 'A' ET 'W'.
         ADRI        I,X             < L'INDEX DE TRACE A PROGRESSE DE 2.
         IF          UTRACE-2,,XEIF%,
         IF          ATTENTION : CE QUI PRECEDE EST FAUX !!!
XEIF%:   VAL         ENDIF
         XR          A,X
         ANDI        UTRACE*LTRACE-N < PROGRESSION MODULO, LA TRACE
                                     < ETANT CIRCULAIRE.
XWOR%1:  VAL         UTRACE*LTRACE
XWOR%2:  VAL         XWOR%1=K
         IF          BIT>XWOR%2-XWOR%1,,XEIF%,
         IF          ATTENTION : LA LONGUEUR EN MOTS DE LA TRACE
         IF          DOIT ETRE UNE PUISSANCE DE 2 SI L'ON VEUT
         IF          CALCULER LE MODULO AVEC UN .AND. !!!
XEIF%:   VAL         ENDIF
         XR          A,X             < RESTAURE 'A'.
         STX         TRACEX          < SAVE INDEX DE TRACE.
         BSR         ASMDK           < DEMASQUAGE GENERAL DES IT
         PLR         X
Z710:    EQU         $               < SORTIE 'TRACE INHIBEE'.
         RSR
<
<
<        S N A P   T E M P S   R E E L  :
<
<
<        ARGUMENT :
<                    (A)=CONTENU A SNAPER, SON BIT 0 EST A 0
<                        OU A 1 SUIVANT QUE L'ON SNAPE UN PSEUDO
<                        NIVEAU D'IT (CF. VISU1 A VISU6) OU PAS...
<
<
SNAP:    EQU         $
         PSR         W
         CALL        #SISP CMS5 W TRACE# < RAZ DE 'W' POUR FAIRE
                                     < ASSIMILER CET APPEL A UN APPEL
                                     < D'INTERRUPTION POUR LA TRACE.
         BSR         ATRACE          < TRACE DE (A).
         PLR         W
         RSR
         PAGE
<
<
<        T R A C E U R   D E   T O U S   L E S
<        C H A N G E M E N T S   D E   C O N T E X T E S  :
<
<
<        FONCTION :
<                      CETTE TACHE OCCUPE LE NIVEAU 0, POUR
<                    L'ACTIVER, IL SUFFIT D'APPELER LE DEBUG,
<                    QUI RAZERA RSTF. AINSI DES QU'UNE TACHE
<                    ACTIVABLE DE MSP SERA ACTIVABLE, ET SI
<                    SON BIT DE RSTF=K, ON APPELERA
<                    'CHECK' QUI TRACERA CETTE ELECTION.
<                      LA TRACE CONTIENT L'ELECTION SOUS LA
<                    FORME 'ENTRY IN HDL' AVEC L'OCTET1
<                    DU MOT0='EF ; LE MOT1 CONTENANAT LE P
<                    LORS DE L'ELECTION.
<
<
         CALL        #SISP CMS5 CHECK#
<
<        ' D C T '   S I M P L I F I E E  :
<
         CALL        #SISP CMS5 DOL1#
DCTCHK:  EQU         $
         WORD        K;K;K;K;COM+DEPCS;NIL;NIL;PILCHK;CHECK;SMST;SO;SE
         CALL        #SISP CMS5 DOL2#
PILCHK:  EQU         $-DEPILE
XWPILE:  VAL         12
         CALL        #SISP CMS5 GENPIL2#
         CALL        #SISP CMS5 CHECK#
<
<        C H E C K   A N D   T R A C E  :
<
CHECK:   EQU         $
         BSR         ASMMK           <<<< MASQUAGE GENERAL DES IT...
         LXI         LOFDMS
E961:    EQU         $
         STZ         &ARSTF          < RAZ DE RSTF A CHAQUE APPEL
                                     < DE CHECK, AFIN D'EVITER DES
                                     < DE PERDRE DES CHANGEMENTS
                                     < DE CONTEXTE.
         JDX         E961
         LX          XXNL-ZERO,W     < (X)=(NL), SOIT LE NIVEAU DE LA
                                     <     TACHE ELUE.
         ADRI        -NSNSP0,X       < (X)=NSP DE LA TACHE ELUE.
         BSR         ACADCT          < (L)=@DCT TACHE ELUE.
         LY          RP+XXPSTD,L     < (Y)=REGISTRE P DE LA TACHE ELUE.
         SWBR        X,A
         ORI         MOCD            < ON GENERE DANS A LA CONFIGURATION
                                     < SUIVANTE :
                                     < OCTET0=NSP TACHE ELUE,
                                     < OCTET1='FF (BIT11=BIT15=1).
         XR          Y,W             < (Y)=K, (W)=P(TACHE ELUE).
         BSR         ATRACE          < TRACE DE L'ELECTION.
         LR          Y,W             < RESTAURE (W)=K.
         ADRI        NSNSP0,X        < RESTAURE (X)=NUMERO DE LA
                                     < TACHE ELUE.
         LYI         FONSB1          < FONCTION SET BIT A 1.
         LAD         ARSTF           < (A)=@ DU RELAI D'ACCES A RSTF.
         BSR         ATMOBT          < MISE A 1 DU BIT DE LA TACHE
                                     < ELUE DANS RSTF.
         LXI         NTS0
         BSR         ATMOBT          < ET OUI, SUR LE SOLAR, CONTRAIREMENT
                                     < AU T1600, IL FAUT PENSER A LA TACHE
                                     < DE 'CHECK AND TRACE'...
         BSR         ASMDK           <<<< DEMASQUAGE GENERAL DES IT...
         QUIT                        < ACTIVATION DE LA TACHE ELUE.
         JMP         CHECK
         PAGE
         IF          OACTIV-EXIST,XEIF%8,,XEIF%8
<
<
<        V I S U A L I S A T E U R   D E   T R A F F I C  :
<
<
<        FONCTION :
<                      LORSQUE SON ADRESSE EST IMPAIRE
<                    (CONTROLEE PAR LE BIT 'XACTIV'),
<                    CE SOUS-PROGRAMME PERMET DE VISUA-
<                    LISER SUR L'IMAGEUR MOYENNE DEFINI-
<                    TION LE TRAFFIC INTER-TACHES, NOTEES
<                    ALORS :
<
<                                    EMETTEUR --> RECEPTEUR.
<
<                      LES ABSCISSES REPERENT LES EMETTEURS,
<                    ET LES ORDONNEES LES RECEPTEURS.
<
<
<        ARGUMENTS :
<                    (X)=(RECEPTEUR/EMETTEUR),
<                    (Y)=NIVEAU DE GRIS A ATTRIBUER AU POINT.
XNGIN::  VAL         XXN255          < NIVEAU DE VISUALISATION DE L'ETABLISSE-
                                     < MENT DE LA CONNEXION EMETTEUR -->
                                     < RECEPTEUR DANS 'CHAND'.
XNGOUT:: VAL         XXNOIR+I+I+I+I  < NIVEAU DE VISUALISATION DE LA DECONNEXION
                                     < LORS DU 'REVDEM' FACULTATIF DE 'HANDLR'.
                                     < EN PRENANT UN NIVEAU DIFFERENT DU
                                     < NOIR, ON PEUT AINSI MEMORISER SUR
                                     < L'ECRAN TOUTES LES CONNEXIONS QUI ONT
                                     < EU LIEU...
<
<
<        NOTA IMPORTANT :
<                      POUR NE PAS MANGER TROP
<                    D'ESPACE DE PILE, LES REGIS-
<                    TRES 'A', 'X' ET 'Y' SONT
<                    DETRUITS, ET DOIVENT DONC
<                    ETRE SAUVEGARDES PAR L'APPELANT !!!
<
<
<*******************************************************************************
XWOR%1:  VAL         $-ZERO
XWOR%2:  VAL         -BIT
XWOR%3:  VAL         XWOR%1>XWOR%2>BIT
         IF          XWOR%1-XWOR%3,,XEIF%,
         NOP                         < SI LE "$" COURANT EST IMPAIR, ON
                                     < SE PLACE A L'ADRESSE PAIRE IMMEDIATEMENT
                                     < SUIVANTE...
XEIF%:   VAL         ENDIF
ACTIV:   EQU         $
<*******************************************************************************
<
< POINT D'ENTREE INACTIF :
<
         JMP         ACTIV1          < ON SORT IMMEDIATEMENT...
<
< POINT D'ENTREE ACTIF :
<
         BSR         ASMMK           < ET MASQUAGE DES INTERRUPTIONS, LE POSI-
                                     < TIONNEMENT DES DIFFERENTS REGISTRES NE
                                     < POUVANT ETRE INTERROMPU...
                                     < NOTA IMPORTANT : POUR REDUIRE AU MAXIMUM
                                     < LA PHASE MASQUEE, IL SERAIT PREFERABLE
                                     < D'EMPILER D'ABORD LES REGISTRES, PUIS DE
                                     < MASQUER LES INTERRUPTIONS... MALHEUREU-
                                     < SEMENT, LA PILE DES 'HLLSGF' EST IMPLAN-
                                     < TEE DANS UN BUFFER, ET SA TAILLE NE
                                     < PEUT CROITRE A LOISIR ; OR LE SOUS-
                                     < PROGRAMME 'SMMK' MANGE BEAUCOUP DE PILE
                                     < (IL APPELLE LUI-MEME 'SMWHO'...) ; D'OU
                                     < SON APPEL AVANT LES 'PSR' !!!
         PSR         B               < SAUVEGARDES...
         CALL        #SISP CMS5 PSRSLO#
<
< DEFINITION DES FACTEURS D'ECHELLES :
<
         NTRN
XWOR%1:  VAL         XC512/LSEMR/NBITMO
         TRN
XWOR%2:  VAL         CODBT=FMASK(K?XWOR%1=FCINST)XWOR%1
XACTIE:: VAL         COSBT?XWOR%2=FMASK(K=FCINST
                                     < POUR PASSER DU NUMERO D'EMETTEUR A UNE
                                     < ABSCISSE.
         NTRN
XWOR%1:  VAL         XL512/LSEMR/NBITMO
         TRN
XWOR%2:  VAL         CODBT=FMASK(K?XWOR%1=FCINST)XWOR%1
XACTIR:  VAL         COSBT?XWOR%2=FMASK(K=FCINST
                                     < POUR PASSER DU NUMERO DE RECEPTEUR A
                                     < UNE ORDONNEE.
<
< POSITIONNEMENT SUR LES
< REGISTRES DE COMMANDE :
<
         LRM         A,B
XWOR%1:  VAL         LK>DADR*TMCDAJ=K
XWOR%2:  VAL         BIT>XWOR%1*PAGE68
         WORD        MCDAJO+XWOR%2   < FUTUR 'SLO',
         WORD        MCDAJE+XWOR%2   < FUTUR 'SLE'.
         WOE                         < ET POSITIONNEMENT SUR LA PAGE DE LA
                                     < 'CDAJ' CONTENANT LES REGISTRES...
<
< ENVOI DU NIVEAU DE GRIS :
<
         LR          Y,A             < (A)=NIVEAU DE GRIS DEMANDE,
         LRM         Y
         WORD        XRNIVO          < (Y)=ADRESSE DU REGISTRE DE NIVEAU DE
                                     <     GRIS DANS LA PAGE 'PAGE68',
         STAR                        < ET ENVOI DU NIVEAU DE GRIS...
<
< RECUPERATION DU COUPLE
< (EMETTEUR/RECEPTEUR) :
<
         LR          X,A             < (A)=(RECEPTEUR/EMETTEUR),
         IF          TEMP68-K,XEIF%,XEIF%,
         LXI         -TEMP68
         BSR         ADODO           < ET ON ATTEND UN PETIT PEU...
         LR          A,X             < ET RESTAURE 'X'...
XEIF%:   VAL         ENDIF
         SLRS        MOCG=K          < DECONCATENATION,
         SLLS        XACTIR=K        < ET CONVERSION EN UNE ORDONNEE...
         LR          A,B             < (B)=COORDONNEE 'Y' DU RECEPTEUR.
         LR          X,A
         ANDI        MOCD            < DECONCATENATION,
         SLLS        XACTIE=K        < ET CONVERSION EN UNE ABSCISSE...
         LR          A,X             < (X)=COORDONNEE 'X' DE L'EMETTEUR.
<
< ENVOI DE L'EMETTEUR :
<
         SLRS        MOCG=K          < RECUPERATION DE LA PARTIE HAUTE,
         EORI        XLINV           < INVERSION DE LA LOGIQUE,
         LRM         Y
         WORD        XRXH
         STAR                        < ENVOI DE LA PARTIE HAUTE DE 'X',
         LR          X,A
         ANDI        MOCD            < RECUPERATION DE LA PARTIE BASSE,
         EORI        XLINV           < INVERSION DE LA LOGIQUE,
         ADRI        XRXL-XRXH,Y
         IF          TEMP68-K,XEIF%,XEIF%,
         LXI         -TEMP68
         BSR         ADODO           < ET ON ATTEND UN PETIT PEU...
XEIF%:   VAL         ENDIF
         STAR                        < ENVOI DE LA PARTIE BASSE DE 'X'.
         IF          TEMP68-K,XEIF%,XEIF%,
         LXI         -TEMP68
         BSR         ADODO           < ET ON ATTEND UN PETIT PEU...
XEIF%:   VAL         ENDIF
<
< ENVOI DU RECEPTEUR :
<
         LR          B,A
         SLRS        MOCG=K          < RECUPERATION DE LA PARTIE HAUTE,
         EORI        XLINV           < INVERSION DE LA LOGIQUE,
         LRM         Y
         WORD        XRYH
         STAR                        < ENVOI DE LA PARTIE HAUTE DE 'Y',
         IF          TEMP68-K,XEIF%,XEIF%,
         LXI         -TEMP68
         BSR         ADODO           < ET ON ATTEND UN PETIT PEU...
XEIF%:   VAL         ENDIF
         LR          B,A
         ANDI        MOCD            < RECUPERATION DE LA PARTIE BASSE,
         EORI        XLINV           < INVERSION DE LA LOGIQUE,
         ADRI        XRYL-XRYH,Y
         STAR                        < ENVOI DE LA PARTIE BASSE DE 'Y'.
         IF          TEMP68-K,XEIF%,XEIF%,
         LXI         -TEMP68
         BSR         ADODO           < ET ON ATTEND UN PETIT PEU...
XEIF%:   VAL         ENDIF
<
< TRACE DU "POINT DE TRAFFIC" :
<
         LAI         XRASTR          < (A)=FONCTION DE MISE EN 'RASTER'...
         LRM         Y
         WORD        XRCMD           < (Y)=ADRESSE DU REGISTRE DE COMMANDE,
         STAR                        < TRACE DU POINT DE COORDONNEES (X,B).
<
< RESTAURATIONS DIVERSES :
<
         CALL        #SISP CMS5 PLRSLO#
         PLR         B
         BSR         ASMDK           < DEMASQUAGE DES INTERRUPTIONS (VOIR LE
                                     < NOTA IMPORTANT RELATIF A 'SMMK' !!!)...
<
< ET SORTIE :
<
ACTIV1:  EQU         $               < (CAS DU MODE INACTIF...)
         RSR
XEIF%8:  VAL         ENDIF
         PAGE
<
<
<        D E C O N C A T E N A T I O N   D ' U N
<        N U M E R O   D E   B I T  :
<
<
<        ARGUMENT :
<                    - (A)=NUMERO DU BIT.
<        RESULTATS :
<                    - (A)=NUMERO DU MOT AUQUEL APPARTIENT LE BIT / A 0,
<                    - (B)=NUMERO DU BIT DANS LE MOT / A 0.
<
<
SEPAR:   EQU         $
         LBI         K               < PAR PRUDENCE...
         SCRS        NBITMO=K
         SCLD        NBITMO=K        < (B)=RANG DU BIT DANS L'ENTREE.
         SLRS        NBITMO=K        < (A)=NUMERO DE L'ENTREE,
                                     < (B)=NUMERO DU BIT DANS L'ENTREE.
         RSR
         PAGE
<
<
<        O P E R A T I O N S   S U R   B I T   D A N S
<                    U N E   T A B L E  :
<
<
<        ARGUMENTS :
<                    - (A)=ADRESSE RELAI INDIRECT-INDEXE (/IJIJDX) VERS TABLE.
<                    - (X)=RANG DU BIT DANS LA TABLE / A 0.
<                    - (Y)=FONCTION DEMANDEE :
<                          FONTB     - (Y)=K : TEST BIT,
<                          FONSB1    - (Y)=1 : SET BIT A 1,
<                          FONRB0    - (Y)=2 : RESET BIT A 0,
<                          FONIB     - (Y)=3 : INVERSE BIT.
<                          FONRB     - (Y)=4 : RESET BIT A 0, SANS VERIF,
<                          FONSB     - (Y)=5 : SET BIT A 1, SANS VERIF.
<
<
<        RESULTAT :
<                    DANS LE CAS DE 'FONTB', LES INDI-
<                    CATEURS SONT POSITIONNES COMME
<                    APRES UN 'TBT'.
<
<
TMOBT:   EQU         $               < TEST AND MODIFY BIT IN TABLE.
         PSR         A,B,X           < A CAUSE DU MICRO-CANAL.
         PSR         Y,W             < A CAUSE DU MICRO-CANAL.
         LR          A,W             < W POINTE SUR LE RELAI DE LA TABLE.
         LR          X,A             < (A)=RANG DU BIT DANS LA TABLE.
         BSR         ASEPAR          < DECONCATENATION DU NUMERO DE BIT.
<        ON A ICI
<                    - (A)=NUMERO DE L'ENTREE,
<                    - (B)=NUMERO DU BIT DANS L'ENTREE
<        CES 2 NUMEROS SONT / A 0.
         ADRI        IJIJDX,A        < (A)=NUMERO DE L'ENTREE / A 1.
         LR          A,X             < (X)=NUMERO DE L'ENTREE DANS LA TABLE
                                     <     PAR RAPPORT A 1...
         LA          &O,W            < ACCES A L'ENTREE DANS LA TABLE.
         XR          Y,X             < (X)=FONCTION ; (Y)=NUMERO DE L'ENTREE.
<        ON A DONC ICI :
<                    - (B)=RANG DU BIT / A 0 DANS L'ENTREE,
<                    - (X)=FONCTION DEMANDEE,
<                    - (Y)=NUMERO DE L'ENTREE / A 1 DANS LA TABLE.
         BR          &ATMOB          < REALISATION DE LA FONCTION.
         CALL        #SISP CMS5 DOL1#
         IF          FONTB-K,,XEIF%,
         IF          ATTENTION : LES FONCTIONS SONT MAUVAISES !!!
XEIF%:   VAL         ENDIF
TTMOB:   WORD        TMOBT0;TMOBT1;TMOBT2;TMOBT3;TMOBT4;TMOBT5
         CALL        #SISP CMS5 DOL2#
<
< TEST D'UN BIT :
<
TMOBT0:  EQU         $
         LR          B,X             < (X)=RANG DU BIT.
         TBT         L,X
E164:    EQU         $
         PLR         Y,W             < A CAUSE DU MICRO-CANAL.
         PLR         A,B,X           < A CAUSE DU MICRO-CANAL.
         RSR                         < CARY POSITIONNE SI 'TBT'.
<
< SET A 1 D'UN BIT :
<
TMOBT1:  EQU         $
         LR          B,X             < (X)=RANG DU BIT.
         TBT         L,X             < TEST DU BIT A METTRE A 1.
         JNC         SYSR01          < OK, IL EST A 0.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
SYSR01:  EQU         $
         SBT         L,X             < MISE A 1 DU BIT.
E165:    EQU         $
         LR          Y,X             < (X)=NUMERO DE L'ENTREE DANS LA TABLE.
         STA         &O,W            < MISE A JOUR DE LA TABLE.
         JMP         E164
<
< RESET A 0 D'1N BIT :
<
TMOBT2:  EQU         $
         LR          B,X             < (X)=RANG DU BIT.
         TBT         L,X             < TEST DU BIT A METTRE A 0.
         JC          SYSR02          < OK, IL A 1.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
SYSR02:  EQU         $
         RBT         L,X
         JMP         E165
<
< INVERSION D'UN BIT :
<
TMOBT3:  EQU         $
         LR          B,X             < (X)=RANG DU BIT.
         IBT         L,X
         JMP         E165
<
< RESET A 0 SANS VERIF :
<
TMOBT4:  EQU         $
         LR          B,X             < (X)=RANG DU BIT.
         RBT         L,X             < RESET.
         JMP         E165
<
< SET A 1 SANS VERIF :
<
TMOBT5:  EQU         $
         LR          B,X             < (X)=RANG DU BIT.
         SBT         L,X
         JMP         E165
         PAGE
<
<
<        R E C H E R C H E   D ' U N   B I T
<        A   1   D A N S   U N E   T A B L E  :
<        ( E T   S O N   R A Z.. )
<
<
<        FORMAT DES TABLES UTILISEES :
<                    1 - LA TABLE DOIT ETRE RELAYEE PAR
<                    UN RELAI INDIRECT INDEXE PAR RAPPORT
<                    A 'IJIJDX' ;
<                    2 - LE MOT LA PRECEDANT (DONC D'INDEX
<                    EGAL A '0) DOIT CONTENIR LE NOMBRE
<                    DE BITS (SOIT N) UTILES DE LA TABLE ;
<                    LE RESULTAT DOIT DONC ETRE CONTENU
<                    ENTRE 0 ET N-1 :
<                                    0<= (A) <= N-1.
<
<
<        ARGUMENTS :
<                    - (A)=ADRESSE RELAI INDIRECT-INDEX (/IJIJDX) VERS TABLE.
<                    - (X)=NUMERO DE LA 1ERE ENTREE (MOT) A TESTER DANS LA
<                          TABLE (ON TESTERA LES ENTREES DE (X) A 1, CE QUI PERM
<                          PERMET D'OPTIMISER EVENTUELLEMENT LE PARCOURS
<                          DE LA TABLE).
<
<
<        RESULTATS :
<                    - SI (X)#0 : (A)=NUMERO DU 1ER BIT A 1 DANS LA TABLE
<                                     (NUMERO PAR RAPPORT A 0),
<                    - SI (X)#0 : (X)=NUMERO / A 1 DE L'ENTREE DANS LAQUELLE
<                    ON A TROUVE UN BIT A 1. ON PEUT L'UTILISER AU
<                    RETOUR DANS LE CADRE D'UNE OPTIMISATION DU
<                    PARCOURS DE LA TABLE.
<                    - SI (X)#0 : RAZ DU 1ER BIT A 1 ,
<
<                    - SI (X)=K : AUCUN BIT N'EST A 1 DANS CETTE TABLE.
<
<
<        A T T E N T I O N  :
<                      DETRUIT 'A' ET 'X' !!!
<
<
SOBT:    EQU         $               < SURCH ONE BIT IN TABLE.
         PSR         W               < SAVE BAS W.
         LR          A,W             < L'ACCES A LA TABLE SE FAIT
                                     < D'UNE MANIERE REENTRANTE EN
                                     < TRAVAILLNAT SUR LE RELAI DE
                                     < L'APPELANT.
                                     < (W)=ADRESSE DU RELAI DE LA TABLE.
E160:    EQU         $
         LA          &O,W            < ACCES A UNE ENTREE DE LA TABLE.
         JANE        E161            < CA Y EST, ON A TROUVE AU MOINS
                                     < 1 BIT A 1.
         JDX         E160            < ET NON, PASSONS A L'ENTREE
                                     < SUIVANTE.
<
< CAS OU TOUS LES BITS SONT A 0,
< ON S'EN VA AVEC (X)=0 :
<
E162:    EQU         $
         PLR         W               < RESTAURE W.
         CPZR        X               < POUR TEST EN RETOUR...
         RSR
<
< CAS OU ON A TROUVE AU MOINS UN BIT A 1 :
<
E161:    EQU         $
         PSR         B
         LR          X,B             < (B)=NUMERO DE L'ENTREE PAR RAPPORT A 1.
         DBT                         < (X)=RANG DU 1ER BIT A 1 DANS L'ENTREE.
         RBT         L,X             < RAZ DE CE BIT.
         XR          B,X             < (B)=RANG DU BIT DANS L'ENTREE.
         STA         &O,W            < MAJ DE LA TABLE APRES LE RAZ DU
                                     < 1ER BIT A 1.
         LR          X,A             < (A)=NUMERO DE L'ENTREE PAR RAPPORT A 1.
         ADRI        -IJIJDX,A       < (A)=NUMERO DE L'ENTREE PAR RAPPORT A 0.
         SLLS        NBITMO=K        < CONVERSION EN UN NUMERO
                                     < DE BIT PAR RAPPORT A 0.
         ADR         B,A             < (A)=NUMERO DU 1ER BIT QUI ETAIT
                                     <     A 1 PAR RAPPORT A 0.
         PLR         B
         JAGE        E162XX          < OK, LE NUMERO EST POSITIF OU NUL...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
E162XX:  EQU         $
         PSR         X
         LXI         IJIJDX-P        < (X)=INDEX DU MOT PRECEDANT LA TABLE.
         CP          &O,W            < LE BIT TROUVE APPARTIENT-IL BIEN
                                     < A LA TABLE ARGUMENT ???
         JL          E162X           < OUI, C'EST BON...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
E162X:   EQU         $
         PLR         X
         JMP         E162            < RAPPEL : DANS X ON A UN NUMERO
                                     < PAR RAPPORT A 1, DONC POSITIF.
         PAGE
<
<
<        A C C E S   A   U N   O C T E T  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME TRES INTER-
<                    RESSANT PERMET D'ATTEINDRE UN OCTET
<                    QUELCONQUE DE 0 A 64K...
<
<
<        ARGUMENTS :
<                    (W)=ADRESSE-MOT DE LA TABLE A LAQUELLE APPARTIENT
<                        L'OCTET,
<                    (X)=INDEX-OCTET DE L'OCTET.
<                        (ATTENTION : CET INDEX EST CONSIDERE COMME
<                        POSITIF SUR 16 BITS : CF LE SLRS...)
<
<
<        RESULTAT :
<                    (A)=L'OCTET BIEN CADRE...
<
<
GETOC:   EQU         $
         PSR         X,W
         LR          X,A             < (A)=INDEX DE L'OCTET.
         SLRS        NOCMO=K         < (A)=INDEX MOT DE L'OCTET, ET
                                     < CARY=1 S'IL S'AGIT DE L'OCTET
                                     < DROIT DU MOT.
         LXI         MOCD=K          < OCTET DROIT A PRIORI...
         JC          GETOC1          < ET OUI...
         LXI         MOCG=K          < ET NON, OCTET GAUCHE...
GETOC1:  EQU         $
         ADR         A,W             < (W)=ADRESSE-MOT DE L'OCTET,
         LA          O,W             < QUE L'ON ACCEDE,
         SLRS        L,X             < PUIS QUE L'ON CADRE,
         ANDI        MOCD            < ET QUE L'ON ISOLE...
         PLR         X,W
         RSR                         < ET C'EST TOUT...
         PAGE
<
<
<        S O U S - P R O G R A M M E   D E   S I M U L A T I O N
<        D E S   I N S T R U C T I O N S   D E   L O A D / S T O R E
<        D E   M O T S   O U   D ' O C T E T S   P O U R
<        E X E C U T I O N   A U - D E L A   D E   3 2 K  :
<
<
<        FONCTION :
<                      IL EXISTE DANS LE SYSTEME CMS5
<                    EN DE NOMBREUX ENDROITS DES LOADS
<                    ET DES STORES INDIRECTS (SOUVENT INDEXES)
<                    ACCEDANT A L'ESPACE UTILISATEUR LORS
<                    DES ENTREES-SORTIES ('SGN', 'VIS',...).
<                    L'UTILISATION DE CES INSTRUCTIONS IMPLI-
<                    QUE LA PRESENCE DES ZONES UTILISATEURS
<                    DANS LES 32 PREMIERS K-MOTS DE LA
<                    MEMOIRE.
<                      ON IMPLEMENTE DONC DES APPELS A CE
<                    SOUS-PROGRAMME DEVANT CHACUNE DES
<                    INSTRUCTIONS EN CAUSE ; SI LA ZONE
<                    UTILISATEUR EST DANS LA PAGE 0 DE 32K
<                    CES INSTRUCTIONS S'EXECUTENT TELLES
<                    QUELLES (VIA LA MICRO-PROGRAMMATION) ;
<                    PAR CONTRE AU-DELA DE LA PAGE 0, LEUR
<                    EXECUTION EST SIMULEE PAR CE SOUS-
<                    PROGRAMME, CE QUI N'EST PAS UNE MINCE
<                    AFFAIRE (EN PARTICULIER, SI ON REGARDE
<                    LA FACON DONT LES 'LA', 'LB',... SONT
<                    CODES, ON A DES SURPRISES...).
<
<
<        ARGUMENTS :
<                    (SLO,SLE)=DONNE LA PAGE DE 32K QUE
<                              REFERENCE L'INSTRUCTION A
<                              SIMULER.
<                    (A), (B), (X), (Y)=REGISTRE A CHARGER
<                                       OU A RANGER.
<                    ((P)+DEPILE)=INSTRUCTION A EXECUTER.
<
<
SIMUL:   EQU         $
XKREG:   VAL         K               < INITIALISATION DU CUMUL DES REGISTRES
                                     < EMPILES.
       #@PSR         A,B             < #SISP CMS5 KREG#
         RDOE                        < ACCES A LA PAGE DE 32K COURANTE :
         IF          SO-K,,XEIF%,
         IF          ATTENTION : LE TEST SUR LA PAGE 0 EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         JAE         SIMULU          < ON EST DANS LA PAGE 0, L'INSTRUCTION
                                     < ARGUMENT PEUT DONC S'EXECUTER TELLE
                                     < QUELLE...
         CALL        #SISP CMS5 RST# < LECTURE DE 'ST' (ET DONC DE 'V' ET 'C')
       #@PSR         A,X,Y           < #SISP CMS5 KREG#
       #@PSR         L,W             < #SISP CMS5 KREG#
XKREG:   VAL         -XKREG          < NOMBRE DE REGISTRES EMPILES A L'ENTREE,
                                     < NON COMPRIS LE REGISTRE 'P' DE RETOUR.
<
< CAS DES PAGES DIFFERENTES DE LA PAGE 0 :
<
         LR          K,W             < 'W' BASE LA PILE :
         LA          -XKREG-D+DEPILE,W
                                     < (A)=REGISTRE 'P' DE RETOUR,
         DO          D
         IC          -XKREG-D+DEPILE,W
                                     < AFIN DE SAUTER L'INSTRUCTION ARGUMENT
                                     < AU RETOUR DU 'BSR'...
         LR          A,W             < 'W' BASE L'INSTRUCTION ARGUMENT,
         LB          O,W             < QUE L'ON MET DANS 'B' :
                                     < (B)=INSTRUCTION ARGUMENT A EXECUTER.
<
< FORMAT DE LA PILE :
<
<*******************************************************************************
SIMULP:: VAL         XKREG+D-DEPILE  < REGISTRE 'P' DE RETOUR,
<*******************************************************************************
SIMULA:: VAL         SIMULP-D        < REGISTRE 'A' D'APPEL,
SIMULB:: VAL         SIMULA-D        < REGISTRE 'B' D'APPEL,
SIMUST:: VAL         SIMULB-D        < REGISTRE 'ST' D'APPEL (POUR 'V' ET 'C').
SIMULX:: VAL         SIMUST-D        < REGISTRE 'X' D'APPEL,
SIMULY:: VAL         SIMULX-D        < REGISTRE 'Y' D'APPEL,
SIMULL:: VAL         SIMULY-D        < BASE 'L' D'APPEL,
SIMULW:: VAL         SIMULL-D        < BASE 'W' D'APPEL.
XWOR%1:  VAL         '0@@@@
         IF          XWOR%1-K,,XEIF%,
         IF          ATTENTION : LE FORMAT DE LA PILE EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         LR          K,W             < ET 'W' BASE LA PILE DE NOUVEAU...
<
< FORMAT D'UNE INSTRUCTION
< A REFERENCE MEMOIRE :
<
FIBASE:: VAL         'C000           < BASE D'ADRESSAGE 'C', 'L' OU 'W' :
FIBASC:: VAL         1               < 'C',
FIBASL:: VAL         FIBASC+RL-RC    < 'L',
FIBASW:: VAL         FIBASL+RW-RL    < 'W'.
FIIND::  VAL         '2000           < INDICATEUR D'INDIRECTION.
FICODE:: VAL         '1F00           < CODE OPERATION (VOIR LA LISTE 'XOYYY').
FIDEPL:: VAL         '00FF           < DEPLACEMENT PAR RAPPORT A LA BASE.
XWOR%1:  VAL         FIBASE?FIIND?FICODE?FIDEPL
XWOR%2:  VAL         FIBASE)FIIND)FICODE)FIDEPL
         IF          XWOR%1-XWOR%2,,XEIF%,
         IF          ATTENTION : IL Y A DES RECOUVREMENTS MALHEUREUX !!!
XEIF%:   VAL         ENDIF
<
< LISTE DES CODES OPERATIONS RECONNUS :
<
XWOR%1:  VAL         FICODE=K
XWOR%1:  VAL         -XWOR%1
SIMUL5:  EQU         $
<*******************************************************************************
         LBY         &O,C            < CODE DU 'LBY'.
XOLBY::  VAL         '0000000@@@@(FICODE>XWOR%1
<*******************************************************************************
<*******************************************************************************
         STBY        &O,C            < CODE DU 'STBY'.
XOSTBY:: VAL         '0000000@@@@(FICODE>XWOR%1
<*******************************************************************************
<*******************************************************************************
         STY         &O,C            < CODE DU 'STY'.
XOSTY::  VAL         '0000000@@@@(FICODE>XWOR%1
<*******************************************************************************
<*******************************************************************************
         STX         &O,C            < CODE DU 'STX'.
XOSTX::  VAL         '0000000@@@@(FICODE>XWOR%1
<*******************************************************************************
<*******************************************************************************
         STB         &O,C            < CODE DU 'STB'.
XOSTB::  VAL         '0000000@@@@(FICODE>XWOR%1
<*******************************************************************************
<*******************************************************************************
         STA         &O,C            < CODE DU 'STA'.
XOSTA::  VAL         '0000000@@@@(FICODE>XWOR%1
<*******************************************************************************
<*******************************************************************************
         LA          &O,C            < CODE DU 'LA'.
XOLA::   VAL         '0000000@@@@(FICODE>XWOR%1
<*******************************************************************************
<*******************************************************************************
         LX          &O,C            < CODE DU 'LX'.
XOLX::   VAL         '0000000@@@@(FICODE>XWOR%1
<*******************************************************************************
<*******************************************************************************
         LY          &O,C            < CODE DU 'LY'.
XOLY::   VAL         '0000000@@@@(FICODE>XWOR%1
<*******************************************************************************
<*******************************************************************************
         LB          &O,C            < CODE DU 'LB'.
XOLB::   VAL         '0000000@@@@(FICODE>XWOR%1
<*******************************************************************************
         $EQU        SIMUL5          < ANNULATION DU CODE GENERE...
<
< RECUPERATION DE LA BASE D'ADRESSAGE :
<
XWOR%1:  VAL         FIIND=K
XWOR%2:  VAL         NBITMO-B-XWOR%1
         IF          BIT>XWOR%1-FIIND,,XEIF%,
         IF          ATTENTION : 'FIIND' DOIT ETRE UN BIT !!!
XEIF%:   VAL         ENDIF
         TBT         NBITMO+XWOR%2   < Y-A-T'IL BIEN INDIRECTION ???
         JC          SIMUL2          < OK, IL Y A INDIRECTION...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      RAJOUTER DANS LE SIMULATEUR LES
<                    INSTRUCTIONS SANS INDIRECTION !!!
<                    MAIS ATTENTION A LA SORTIE, CAR
<                    L'INSTRUCTION ARGUMENT VA ETRE
<                    EXECUTEE TELLE QUELLE...
<
         JMP         SIMULZ          < ATTENTION A LA SORTIE...
SIMUL2:  EQU         $
XWOR%1:  VAL         FIBASE=K
XWOR%1:  VAL         -XWOR%1
         LR          B,A             < (A)=INSTRUCTION ARGUMENT,
         SLRS        -XWOR%1         < CADRAGE A DROITE DE LA BASE,
         ANDI        FIBASE>XWOR%1   < (A)=BASE D'ADRESSAGE :
         LR          C,X             < (X)=BASE 'C' A PRIORI...
         CPI         FIBASC          < EST-CE LA BASE 'C' ???
         JE          SIMUL3          < OUI...
         LX          -SIMULL,W       < NON, (X)=BASE 'L' A PRIORI...
         CPI         FIBASL          < EST-CE LA BASE 'L' ???
         JE          SIMUL3          < OUI...
         LX          -SIMULW,W       < NON, (X)=BASE 'W' A PRIORI...
         CPI         FIBASW          < ES-CE LA BASE 'W' ???
         JE          SIMUL3          < OUI, OK ON A UNE DES 3 BASES...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      VOIR QUELLE EST CETTE INSTRUCTION
<                    SANS BASE, ET EVENTUELLEMENT LA
<                    RAJOUTER DANS LA SIMULATION !!!
<                    MAIS ATTENTION A LA SORTIE, CAR
<                    L'INSTRUCTION ARGUMENT VA ETRE
<                    EXECUTEE TELLE QUELLE...
<
         JMP         SIMULZ          < VERS LA SORTIE...
SIMUL3:  EQU         $
         LR          X,L             < (L)=VALEUR DE LA BASE D'ADRESSAGE DE
                                     <     L'INSTRUCTION ARGUMENT LORS DE
                                     <     L'APPEL...
         LAI         FIDEPL
         ANDR        B,A
XWOR%1:  VAL         FIDEPL=K
         IF          XWOR%1-K,,XEIF%,
         SLRS        XWOR%1          < (A)=DEPLACEMENT SUR UN OCTET,
XEIF%:   VAL         ENDIF
XWOR%1:  VAL         -XWOR%1
XWOR%2:  VAL         FIDEPL>XWOR%1)MMOT=K-XWOR%1
XWOR%2:  VAL         NBITMO-XWOR%2
         SLLS        XWOR%2
         SARS        XWOR%2          < (A)=DEPLACEMENT PAR RAPPORT A LA BASE
                                     <     'L' ETENDU SUR 16 BITS...
         ADR         A,L             < (L)=ADRESSE DU RELAI UTILISE PAR
                                     <     L'INSTRUCTION ARGUMENT...
         LA          O,L             < (A)=RELAI...
         TBT         BITX            < CE RELAI EST-IL BIEN INDEXE ???
         RBT         BITX            < NON, A PRIORI,
         LXI         K               < (X)=INDEX NUL...
         JNC         SIMUL4          < EFFECTIVEMENT, IL N'Y A PAS INDEXATION...
         LX          -SIMULX,W       < IL Y A INDEXATION :
                                     < (X)=REGISTRE 'X' D'APPEL...
SIMUL4:  EQU         $
         LR          A,Y             < (Y)=ADRESSE DU BUFFER (OU AUTRE ZONE
                                     <     MEMOIRE) POINTE PAR LE RELAI LUI-
                                     <     MEME POINTE PAR 'L'...
<
< RECUPERATION DU CODE OPERATION :
<
XWOR%1:  VAL         FICODE=K
XWOR%1:  VAL         -XWOR%1
         LR          B,A             < (A)=INSTRUCTION ARGUMENT,
         SLRS        -XWOR%1         < CADRAGE A DROITE DU CODE OPERATION,
         ANDI        FICODE>XWOR%1   < (A)=CODE OPERATION JUSTIFIE A DROITE,
                                     <     SANS SA BASE, NI INDIRECTION...
         LBI         K               < CLEAR DE 'B' A CAUSE DE DECALAGES
                                     < DOUBLES QUI VONT SUIVRE.
<
< CAS DES INSTRUCTIONS SUR OCTETS A PRIORI :
<
         IF          XOLBY-K,XEIF%,,XEIF%
         JAE         SIMULE          < CAS DU 'LBY'.
XEIF%:   VAL         ENDIF
         IF          XOLBY-K,,XEIF%,
         CPI         XOLBY
         JE          SIMUL           < CAS DU 'LBY'.
XEIF%:   VAL         ENDIF
         CPI         XOSTBY
         JE          SIMULF          < CAS DU 'STBY'.
<
< CAS DES INSTRUCTIONS SUR MOTS A PRIORI :
<
         ADR         X,Y             < A PRIORI, IL S'AGIT D'INSTRUCTIONS SUR
                                     < MOT ; ON AJOUTE L'INDEX (X) A L'ADRESSE
                                     < DU BUFFER :
                                     < (Y)=ADRESSE DU MOT CHARGE OU RANGE PAR
                                     <     L'INSTRUCTION ARGUMENT.
         CPI         XOLA
         JE          SIMULG          < CAS DU 'LA'.
         CPI         XOSTA
         JE          SIMULH          < CAS DU 'STA'.
         CPI         XOLB
         JE          SIMULI          < CAS DU 'LB'.
         CPI         XOSTB
         JE          SIMULJ          < CAS DU 'STB'.
         CPI         XOLX
         JE          SIMULK          < CAS DU 'LX'.
         CPI         XOSTX
         JE          SIMULM          < CAS DU 'STX'.
         CPI         XOLY
         JE          SIMULN          < CAS DU 'LY'.
         CPI         XOSTY
         JE          SIMULO          < CAS DU 'STY'.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      RAJOUTER L'INSTRUCTION MANQUANTE !!!
<                    MAIS ATTENTION, ON SORT IMMEDIATEMENT,
<                    ET L'INSTRUCTION ARGUMENT EST DONC
<                    EXECUTEE TELLE QUELLE...
<
         JMP         SIMULZ          < VERS LA SORTIE...
<
< SIMULATION DU 'LA' :
<
SIMULG:  EQU         $
         LAR                         < (A)=MOT POINTE PAR (Y)+(SLO),
         STA         -SIMULA,W       < QUE L'ON MET DANS LA PILE...
         JMP         SIMULV          < VERS LA SORTIE...
<
< SIMULATION DU 'LB' :
<
SIMULI:  EQU         $
         LAR                         < (A)=MOT POINTE PAR (Y)+(SLO),
         STA         -SIMULB,W       < QUE L'ON MET DANS LA PILE...
         JMP         SIMULV          < VERS LA SORTIE...
<
< SIMULATION DU 'LX' :
<
SIMULK:  EQU         $
         LAR                         < (A)=MOT POINTE PAR (Y)+(SLO),
         STA         -SIMULX,W       < QUE L'ON MET DANS LA PILE...
         JMP         SIMULV          < VERS LA SORTIE...
<
< SIMULATION DU 'LY' :
<
SIMULN:  EQU         $
         LAR                         < (A)=MOT POINTE PAR (Y)+(SLO),
         STA         -SIMULY,W       < QUE L'ON MET DANS LA PILE...
         JMP         SIMULV          < VERS LA SORTIE...
<
< SIMULATION DU 'STA' :
<
SIMULH:  EQU         $
         LA          -SIMULA,W       < (A)=REGISTRE 'A' D'APPEL,
         JMP         SIMULQ          < VERS LE RANGEMENT...
<
< SIMULATION DU 'STB' :
<
SIMULJ:  EQU         $
         LA          -SIMULB,W       < (A)=REGISTRE 'B' D'APPEL,
         JMP         SIMULQ          < VERS LE RANGEMENT...
<
< SIMULATION DU 'STX' :
<
SIMULM:  EQU         $
         LA          -SIMULX,W       < (A)=REGISTRE 'X' D'APPEL,
         JMP         SIMULQ          < VERS LE RANGEMENT...
<
< SIMULATION DU 'STY' :
<
SIMULO:  EQU         $
         LA          -SIMULY,W       < (A)=REGISTRE 'Y' D'APPEL,
<
< EXECUTION DES 'STORE' EN MEMOIRE :
<
SIMULQ:  EQU         $
         STAR                        < RANGEMENT DE (A) EN (Y)+(SLO).
<
< FIN DES INSTRUCTIONS SUR MOTS ET DE 'LBY' :
<
SIMULV:  EQU         $
<
< SORTIE DE LA SIMULATION :
<
SIMUL1:  EQU         $
         PLR         L,W
         PLR         A,X,Y
         LRM         B
XWOR%1:  VAL         COSBT?V=FMASK(K=FCINST
XWOR%1:  VAL         COSBT?C=FMASK(K?XWOR%1=FCINST
         WORD        XWOR%1          < (B)=MASQUE DES INDICATEURS 'V' ET 'C'.
         XR          A,B             < (A)=MASQUE DE 'V' ET 'C', ET
                                     < (B)=VALEUR D'APPEL DU REGISTRE 'ST',
         ANDR        A,B             < (B)=VALEUR DE 'V' ET 'C' LORS DE
                                     <     L'APPEL DE 'SIMUL'.
         RST                         < CLEAR DE 'V' ET 'C',
         LR          B,A             < ON NE GARDE DANS 'A' QUE 'V' ET 'C'
                                     < DU REGISTRE 'ST' AVEC LEUR VALEUR LORS
                                     < DE L'APPEL DE 'SIMUL'...
         SST                         < RESTAURATION DE 'V' ET 'C'...
SIMULU:  EQU         $               < SORTIE RELATIVE AUX INSTRUCTIONS REFE-
                                     < RENCANT LA PAGE 0...
         PLR         A,B
         RSR                         < RETOUR A L'INSTRUCTION SUIVANTE LORS-
                                     < QU'ON EST EN PAGE 0, OU A CELLE D'APRES
                                     < DANS LES AUTRES CAS...
<
< SORTIE POUR 'SYSER' :
<
SIMULZ:  EQU         $
         DO          D
         DC          -XKREG-D+DEPILE,W
                                     < AFIN D'EXECUTER NORMALEMENT L'INSTRUC-
                                     < TION ARGUMENT...
         JMP         SIMUL1          < VERS LA SORTIE...
<
< SIMULATION DU 'LBY' :
<
SIMULE:  EQU         $
         LR          X,A             < (A)=INDEX OCTET :
         SLRD        NOCMO=K         < (A)=INDEX MOT, ET
                                     < BIT DE SIGNE(B)=NUMERO DE L'OCTET...
         ADR         A,Y             < (Y)=ADRESSE DU MOT CONTENANT L'OCTET
                                     <     CHERCHE...
         LAR                         < (A)=MOT CONTENANT L'OCTET CHERCHE.
         IF          NOCMO=K-B-BITSIG,,XEIF%,
         IF          ATTENTION : LE TEST QUI SUIT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         CPZR        B               < ALORS, OCTET DROIT OU GAUCHE ???
         JL          SIMULR          < DROIT : IL EST BIEN POSITIONNE...
         SLRS        MOCG=K          < GAUCHE, ON LE CADRE A DROITE...
SIMULR:  EQU         $
         ANDI        MOCD            < (A)=OCTET DESIRE,
         STA         -SIMULA,W       < QUE L'ON RANGE DANS LA PILE...
         JMP         SIMULV          < ET C'EST TOUT...
<
< SIMULATION DU 'STBY' :
<
SIMULF:  EQU         $
         LR          X,A             < (A)=INDEX OCTET,
         SLRD        NOCMO=K         < (A)=INDEX MOT, ET
                                     < BIT DE SIGNE DE (B)=NUMERO DE L'OCTET
                                     <                     DESIRE.
         ADR         A,Y             < (Y)=ADRESSE DU MOT CONTENANT L'OCTET
                                     <     A METTRE A JOUR.
XWOR%1:  VAL         MOCD
         LA          -SIMULA,W       < RECUPERATION DE 'A' ARGUMENT :
         ANDI        XWOR%1          < (A)=OCTET A RANGER EN MEMOIRE,
         ORR         A,B             < QUE L'ON SAUVEGARDE DANS 'B' A COTE DU
                                     < NUMERO DE L'OCTET (0/1).
         LAR                         < (A)=MOT POINTE PAR (Y)+(SLO),
         CPZR        B               < ALORS, OCTET DROIT OU GAUCHE ???
         JL          SIMULS          < DROIT...
         SWBR        A,A             < GAUCHE, ON LE MET A DROITE...
SIMULS:  EQU         $
         ANDI        XWOR%1)MMOT     < ON NETTOIE L'OCTET DROIT,
         RBT         NOCMO=K+NBITMO-B
                                     < ET ON SUPPRIME LE NUMERO DE L'OCTET...
         ORR         B,A             < ET ON INJECTE L'OCTET ARGUMENT DANS
                                     < L'OCTET DROIT (POUR LE MOMENT...),
         JL          SIMULT          < ET BIEN C'EST BON, C'EST LE DROIT...
         SWBR        A,A             < POUR LE GAUCHE, ON REPERMUTE...
SIMULT:  EQU         $
         JMP         SIMULQ          < VERS LA MISE A JOUR DU MOT MEMOIRE
                                     < D'ADRESSE ((Y)+(SLO) AVEC (A).
         PAGE
<
<
<        C O N V E R S I O N   H E X A D E C I M A L
<        A S C I   E N   B I N A I R E  :
<
<
<        FONCTION :
<                      CETTE ROUTINE CONVERTIT UNE CHAINE
<                    DE CARACTERES NON SIGNES ET PRESUMES
<                    HEXADECIMAUX. LA CONVERSION EN BINAIRE
<                    S'ARRETE SUR LE 1ER CARACTERE NON
<                    HEXADECIMAL RENCONTRE. DE PLUS ELLE
<                    ELIMINE LES BITS DE PARITES ET LES
<                    CARACTERES 'NULLS' (CF. 'CARAC'), ET
<                    ENFIN S'ARRETE SI L'INDEX (X) DEPASSE
<                    OU EGALE 'LCCI'...
<
<
<        ARGUMENT :
<                    (A)=ADRESSE RELAI VERS LA CHAINE HEXA-DECIMALE.
<                    (X)=INDEX DU 1ER CARACTERE HEXA.
<
<
<        RESULTAT :
<                    (A)=VALEUR BINAIRE,
<                    (X)=INDEX DU 1ER CARACTERE NON RECONNU COMME
<                        ETANT HEXADECIMAL.
<
<
HEXIN:   EQU         $
         PSR         B,Y,W
         LR          A,W             < (W)=@DU RELAI VERS LE TEXTE.
         LYI         NBITMO/NBITCX   < ON DECODE 4 CARACTERES AU MAXIMUM.
         LBI         K               < INITIALISATION DE B A 0.
<
< BOUCLE DE DECODAGE :
<
Z321:    EQU         $
         LR          X,A             < (A)=INDEX COURANT,
         CPI         LCCI            < Y-A-T'IL DEBORDEMENT (ET CECI A CAUSE
                                     < DU 'CCI' QUI NE VALIDE PAS SES DEMAN-
                                     < DES A 'HEXIN'...) ???
         JGE         Z322            < ON FAIT COMME SI C'ETAIT LA FIN DU
                                     < NOMBRE HEXA-DECIMAL COURANT...
         LBY         &O,W            < SI NON, ACCES A UN CARACTERE DE LA
                                     < CHAINE.
         RBT         BITPAR          < ON IGNORE AINSI SA PROVENANCE.
         JAE         Z323X1          < ON ELIMINE LES 'NULLS' PAR COMPATIBILITE
                                     < AVEC LA ROUTINE 'CARAC' DU 'CCI'...
         ADRI        -HZERO,A        < TRANSLATION PAR RAPPORT AUX
                                     < CODE DES CHIFFRES.
         JAL         Z322            < ON ARRETE AU 1ER CARACTERE NON
                                     < RECONNU.
         CPI         BASE10-Z        < EST-CE UN CHIFFRE ?????
         JLE         Z323            < C'EST UN CHIFFRE (K A 9).
         ADRI        -HA+HNEUF+Z,A   < TRANSLATION PAR RAPPORT AU
                                     < CODE DES LETTRES.
         CPI         BASE10
         JL          Z322            < ON ARRETE AU 1ER CARACTERE
                                     < NON RECONNU.
         CPI         BASE16-Z
         JG          Z322            < CARACTERE DE CODE SUPERIEUR
                                     < A LA LETTRE 'F'.
<
< CAS OU ON A RECONNU UN BON CARACTERE
< HEXADECIMAL (K A 9 OU 'A A 'F) :
<
Z323:    EQU         $
         SCRS        NBITCX          < LA VALEUR BINAIRE SUR 4 BITS
                                     < DU CARACTERE EST MISE EN TETE
                                     < DE A.
         SCLD        NBITCX          < PUIS CES 4 BITS SONT CONCATENES
                                     < AVEC LE CONTENU PRECEDENT DE B.
         ADRI        -I,Y            < DECOMPTE DES CARACTERES
                                     < A DECODER.
Z323X1:  EQU         $               < CAS DES 'NULLS', ON NE DECOMPTE PAS (Y)
                                     < LES CARACTERES DECODES ; SEUL L'INDEX
                                     < DU BUFFER (X) PROGRESSE...
         ADRI        I,X             < PROGRESSION DE L'INDEX
                                     < DE LA CHAINE HEXADECIMALE.
         CPZR        Y
         JG          Z321            < ON N'A PAS ENCORE ATTEINT
                                     < LA MAXIMUM DE 4 CARACTERES.
<
< FIN DU DECODAGE (UN CARACTERE NON
< HEXADECIMAL A ETE RECONNU
< OU ON A ATTEINT UN COMPTE DE 4 CARACTERES) :
<
Z322:    EQU         $
         LR          B,A             < RENVOI DU RESULTAT DANS A.
         PLR         B,Y,W
         RSR
         PAGE
<
<
<        C O N V E R S I O N   B I N A I R E
<        E N   H E X A D E C I M A L   A S C I  :
<
<
<        FONCTION :
<                      CETTE ROUTINE CONVERTIT UN MOT DE
<                    16 BITS EN UNE CHAINE DE 4 CARACTERES
<                    HEXADECIMAUX ASCI.
<
<
<        ARGUMENT :
<                    (B)=NBRE A CONVERTIR,
<                    (A)=ADRESSE DU RELAI VERS LE TEXTE DESTINATAIRE.
<                    (X)=RANG DU 1ER CARACTERE.
<
<
<        RESULTAT :
<                    (X)=RANG DU 1ER CARACTERE LIBRE DERRIERE
<                        LA CHAINE HEXA. (=X-ARGUMENT+4).
<
<
HEXEX:   EQU         $
         PSR         A,B,Y,W
         LR          A,W             < (W)=@RELAI VERS LE TEXTE.
         LYI         NBITMO/NBITCX   < (Y)=NOMBRE DE CONVERSIONS A FAIRE.
<
< BOUCLE DE DECODAGE :
<
Z324:    EQU         $
         LAI         K               < INITIALISATION DE A.
         SLLD        NBITCX          < RECUPERATION D'UN NBRE DE
                                     < 4 BITS DANS B.
         CPI         BASE10-Z        < LA CONVERSION EST-ELLE EN CHIFFRE ?
         JLE         Z325            < OUI, C'EST UN CHIFFRE.
         ADRI        HA-HNEUF-Z,A    < CAS D'UNE LETTRE.
Z325:    EQU         $
         ADRI        HZERO,A         < CONVERSION EN ASCI.
         STBY        &O,W            < ET RANGEMENT DANS LE TEXTE.
         ADRI        I,X             < PROGRESSION DE L'INDEX
                                     < DU TEXTE.
         ADRI        -I,Y            < DECOMPTE DES CONVERSIONS.
         CPZR        Y
         JG          Z324            < C'EST PAS FINI...
         PLR         A,B,Y,W
         RSR
         PAGE
<
<
<        T E S T   A N D   S T O R E   @ R O U T I N E
<        D E   F I N   D E   S E R V I C E  :
<
<
<        FONCTION :
<                      CETTE ROUTINE SERT A POSITIONNER
<                    L'ADRESSE 'FSERV' DE FIN DE SERVICE
<                    DANS 'DCTESC' ; MAIS 2 CAS SE REN-
<                    CONTRENT :
<                    1 - LE DEMANDEUR EST UNE VISU : ALORS
<                    'FSERV' EST POSITIONNE (QUITTE A PRO-
<                    VOQUER UN ECRASEMENT), SAUF S'IL Y A
<                    UNE TRAPPE EN COURS DE TRAITEMENT (CELA
<                    PEUT SE PRODUIRE, PUISQUE LA GESTION DES
<                    ALT-MODES PEUT ETRE PARALLELE AU DEROU-
<                    LEMENT DU PROGRAMME). ENFIN, ON TESTE
<                    SI CET APPEL EST DU A UN DOUBLE ALT-
<                    MODE LORS D'UNE ECRITURE (ALPHA-NUMERIQUE
<                    OU GRAPHIQUE), AUQUEL CAS, ON LE
<                    MEMORISE DANS 'RST' DE L'UTILISATEUR
<                    A L'AIDE DU BIT 'BALT2', AFIN DE
<                    PERMETTRE UN FONCTIONNEMENT CORRECT
<                    DE LA COMMANDE "G" SOUS 'DEBUG'...
<                    2 - LE DEMANDEUR N'EST PAS UNE VISU : ALORS,
<                    ON REGARDE SI 'FSERV' N'EST PAS DEJA
<                    POSITIONNE ; SI TEL EST LE CAS, ON
<                    VERIFIE QU'IL S'AGIT DE 'ABORT'...
<                      DANS LES 2 CAS, LE BIT 'XBABOR'
<                    DE LA DEMANDE 'DEMESC' COURANTE
<                    EST POSITIONNE (CECI EST UTILE
<                    EN PARTICULIER POUR LES FONCTIONS
<                    LONGUES DE 'HDLMT1').
<
<
<        ARGUMENT :
<                    (A)=ADRESSE ROUTINE DE FIN DE SERVICE.
<                        SI BIT0(A)=1 : RETOUR IMMEDIAT AU CAS
<                                       OU FSERV SERAIT DEJA POSITIONNE.
<                                       (PAS DE RECOVERY).
<                    (Y)=ADRESSE 'DCTVIS' SI VISU,
<                    (L)=ADRESSE DE 'DCTESC' SI VISU, OU
<                    (W)=ADRESSE DE 'DCTESC' SINON...
<
<
<        RESULTAT :
<                    BIT0(A)=K : FSERV A ETE POSITIONNE,
<                    BIT0(A)=1 : FSERV N'A PAS ETE POSITIONNE.
<
<
XFSERV:: VAL         BITSIG          < NUMERO DU BIT "RESULTAT".
<
<
SFSERV:  EQU         $
         BSR         ASMMK           <<<< MASQUAGE GENERAL DES IT...
<
< DISCRIMINATION DU DEMANDEUR :
<
         PSR         A,B             < SAUVEGARDE DE L'ADRESSE DE FIN DE
                                     < SERVICE A POSITIONNER DANS 'A'...
                                     < (ET DE 'B'...)
         BSR         ASMWHO          < IDENTIFICATION DU DEMANDEUR :
                                     < (A)=TYPE HARD/SOFT,
                                     < (B)='NSP' SI SOFT, ET NIVEAU SI HARD...
         IF          TYPTS-K,,XEIF%,
         IF          ATTENTION : LE TEST SUIVANT EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         JANE        Z265X1          < IL S'AGIT D'UNE TACHE 'HARD', CE N'EST
                                     < DONC PAS L'UNE DES VISUS...
         LR          B,A             < (A)='NSP' D'UNE TACHE SOFT DEMANDEUSE,
         CPI         NSPVI0          < EST-CE UNE VISU ???
         JL          Z265X1          < NON...
         CPI         NSPVIN          < EST-CE UNE VISU ???
         JG          Z265X1          < NON...
<
< CAS D'UNE VISU DEMANDEUSE :
<
         LA          DEMESC-DCTESC+XXNSP,L
         SBT         XBABOR          < ET ON FORCE LE BIT INDICATEUR DE ROUTINE
                                     < DE FIN DE SERVICE EN ATTENTE...
         STA         DEMESC-DCTESC+XXNSP,L
         LAD         DEMESC-DCTESC,L < (A)=ADRESSE DE LA DEMANDE 'DEMESC',
         XR          Y,L             < AFIN D'ATTEINDRE 'DCTVIS',
         CP          TETE            < LA DEMANDE COURANTE SUR CETTE VISU
                                     < EST-ELLE PRECISEMENT 'DEMESC' ???
         XR          Y,L             < RESTAURATIONS...
         JNE         Z265X3          < NON...
         LA          DEMESC-DCTESC+T+OPDEM,L
                                     < OUI, ALORS ACCEDONS A LA FONCTION :
         ANDI        MASSFF          < AFIN DE BIEN DISCRIMINER LES VRAIES
                                     < ENTREES-SORTIES DES FAUSSES...
         CPI         FAVW            < EST-CE UNE ECRITURE ???
         IF          FAVWG(MASSFF-FAVW,,XEIF%,
         IF          ATTENTION : LE TEST CI-DESSUS NE TESTE PAS
         IF          SIMULTANEMENT LES ECRITURES ALPHA-NUMERIQUES
         IF          ET GRAPHIQUES !!!
XEIF%:   VAL         ENDIF
         JNE         Z265X3          < CE N'EST PAS UNE ECRITURE...
XKREG:   VAL         K               < INITIALISATION DU CUMUL DES REGISTRES.
       #@PLR         A,B             < #SISP CMS5 KREG#
XWOR%1:  VAL         -XKREG          < NOMBRE DE REGISTRES DEPILES.
                                     < RESTAURE :
                                     < (A)=ADRESSE DU MODULE DE FIN DE SERVICE,
         RBT         XFSERV          < ON ENLEVE LE BIT 'XFSERV' A PRIORI...
         SB          AABORT          < EST-CE SUITE A UN DOUBLE ALT-MODE ???
                                     < (ON TESTE PAR 'SB' ET NON PAR 'CP', CAR
                                     < LE 'ADRI' QUI SUIT MODIFIERAIT LES
                                     < INDICATEURS AVANT LE SAUT CONDITIONNEL)
         ADRI        XWOR%1,K        < ET RESTAURE LA PILE, ET CECI SANS RE-
                                     < EMPILER, CAR ON A MODIFIE (PEUT-ETRE)
                                     < L'ADRESSE DE LA ROUTINE DE FIN DE
                                     < SERVICE PAR 'XFSERV'...
         JANE        Z265X3          < NON, PAS DE DOUBLE ALT-MODE...
         LA          IDDESC-DCTESC,L < OUI, ALORS
         TBT         IDESCX          < Y-A-T'IL UNE TRAPPE EN COURS DE TRAITE-
                                     < MENT ???
         JNC         Z265X4          < NON, C'EST BON...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE COMMENT 'DEMESC'
<                    PEUT ETRE EN TETE DE LA FILE
<                    D'ATTENTE DE LA VISU, ALORS QU'UNE
<                    TRAPPE EST EN COURS, ALORS QUE
<                    LES TRAPPES UTILISENT LA DEMANDE
<                    'DEMCCI' !!!
<
         JMP         Z265X3          < ET ON NE TOUCHE PAS A 'ST'...
Z265X4:  EQU         $
         LA          PSTESC-DCTESC+RS,L
         SBT         BALT2           < DANS LE CAS DU DOUBLE ALT-MODE
                                     < LORS D'UNE ECRITURE, ON MEMORISE CE
                                     < FAIT PAR LE BIT 'BALT2' DE 'S', QUI VA
                                     < DEVENIR PAR 'SAVREG' LE REGISTRE 'ST' ;
                                     < IL FAUT ESPERER QUE 'ST' N'EST JAMAIS
                                     < REMIS COMME REGISTRE 'S', SI CE N'EST
                                     < PAR LA COMMANDE "G" DU 'DEBUG' (IL
                                     < SEMBLE QUE CELA SOIT VERIFIE, CAR PENDANT
                                     < UN CERTAIN TEMPS, LA VALEUR DE 'BALT2'
                                     < FUT LE BIT 'STOP', ET LA MACHINE NE
                                     < S'EST JAMAIS ARRETE ; MALHEUREUSEMENT
                                     < CETTE VALEUR N'A PU ETRE CONSERVEE A
                                     < CAUSE DE SES INTERFERENCES AVEC LE CHAMP
                                     < 'MALARM' POSITIONNE PAR 'TH0'...).
         STA         PSTESC-DCTESC+RS,L
Z265X3:  EQU         $
<
< TEST D'UNE TRAPPE EN COURS :
< (ON FAIT APPEL A 'SFSERV'
< POUR LES VISUS, CAR IL Y
< AVAIT UN PATCH A FAIRE
< POUR LE TEST DES TRAPPES
< EN COURS, ET QU'A CAUSE DES
< SAUTS SUPERIEURS A 128 MOTS,
< JE NE POUVAIS L'IMPLEMENTER...)
<
         LA          IDDESC-DCTESC,L < (A)=LISTE DES INDICATEURS DE L'UTI-
                                     <     LISATEUR :
         TBT         IDESCX          < Y-A-T'IL UNE TRAPPE EN COURS DE TRAITE-
                                     < MENT N'AYANT PAS ATTEINT L'INTERROGATION
                                     < 'CCI' DE L'UTILISATEUR ???
         PLR         A,B             < (A)=ADRESSE DE FIN DE SERVICE...
         JC          Z265X2          < OUI, IL Y A UNE TRAPPE EN COURS, ELLE
                                     < MODIFIE LES REGISTRES DE L'UTILISATEUR,
                                     < DONC PAS DE FIN DE SERVICE, QUI CERTAI-
                                     < NEMENT ANNULERAIT LES EFFETS DE LA TRAP-
                                     < SAUF LA SORTIE DU MESSAGE...
                                     < N'OUBLIONS PAS AUSSI CE CAS VICIEUX :
                                     < 1 - UN ALT-MODE EST EN COURS (ON ATTEND
                                     < L'ARRIVEE D'UN EVENTUEL SUIVANT) ;
                                     < 2 - PENDANT CE TEMPS LE PROGRAMME COR-
                                     < RESPONDANT TOURNE TOUJOURS, ET FAIT UNE
                                     < TRAPPE (VRAIE OU FAUSSE : CF. LE CHANGE-
                                     < MENT DU CARACTERE D'ABORT) ;
                                     < 3 - LA VRAIE TRAPPE POSITIONNE LE PRO-
                                     < GRAMME MINIMUM EN BAS DE MEMOIRE, ET
                                     < FAIT TOUT POUR QU'IL SOIT EXECUTE ;
                                     < 4 - MAIS, ENFIN, LE ALT-MODE EST TRAITE,
                                     < ET CAUSE PAR EXEMPLE UN'GOBPE' QUI FAIT
                                     < PERDRE (EN QUELQUE SORTE) LE PROGRAMME
                                     < MINIMUM DE LA TRAPPE !!!
         STA         FSERV-DCTESC,L  < PAS DE TRAPPE EN COURS, DONC MISE EN
                                     < PLACE DU TRAITEMENT DU ALT-MODE SIMPLE
                                     < OU DOUBLE...
Z265X2:  EQU         $
         JMP         Z266            < VERS LA SORTIE...
<
< CAS DES AUTRES DEMANDEURS :
<
Z265X1:  EQU         $
         LA          DEMESC-DCTESC+XXNSP,W
         SBT         XBABOR          < ET ON FORCE LE BIT INDICATEUR DE ROUTINE
                                     < DE FIN DE SERVICE EN ATTENTE...
         STA         DEMESC-DCTESC+XXNSP,W
         LA          IDDESC-DCTESC,W < (A)=LISTE DES INDICATEURS UTILISATEUR :
         TBT         IDESCX          < Y-A-T'IL UNE TRAPPE EN COURS ???
         PLR         A,B             < (A)=ADRESSE DE FIN DE SERVICE...
         JC          Z266            < OUI, IL Y A UNE TRAPPE EN COURS, ON
                                     < IGNORE DONC CETTE FIN DE SERVICE...
         CPZ         FSERV-DCTESC,W  < FSERV EST-IL DEJA POSITIONNE ???
         JE          Z265            < NON, C'EST BON ALLONS LE
                                     < METTRE A JOUR AVEC (A).
<
< CAS OU FSERV EST DEJA POSITIONNE :
<
         IF          XFSERV-BITSIG,,XEIF%,
         IF          ATTENTION : CE QUI SUIT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         JAL         Z266            < BIT0(A)=1 : RETOUR IMMEDIAT
                                     < SANS RECOVERY. L'APPELANT
                                     < AURA CONNAISSANCE DE CE RETOUR
                                     < IMMEDIAT PAR BIT0(A)=1 (INCHANGE)
         CP          FSERV-DCTESC,W  < LA ROUTINE QUE L'ON VEUT METTRE
                                     < EN FSERV Y-EST'ELLE DEJA ???
         JE          Z266            < OUI, ON A DU PRENDRE LE
                                     < SYSTEME DE VITESSE (PAR EXEMPLE
                                     < LORS D'UN SERVICE LONG DU TYPE
                                     < DE L'ERASE DES VISUS)
         PSR         A               < SAVE @ROUTINE DE FIN DE SERVICE
                                     < AVEC BIT0(A)=K.
         LA          FSERV-DCTESC,W  < (A)=@ROUTINE DE FIN DE SERVICE
                                     <     SE TROUVANT DEJA DANS DCTESC.
         CP          AABORT          < ET COMPARAISON A @ABORT.
         PLR         A               < RESTAURE (A)=@ROUTINE DE FIN DE
                                     < SERVICE DEMANDEE.
         JE          Z360            < DANS LE CAS OU FSERV EST DEJA
                                     < POSITIONNEE AVEC ABORT, ON
                                     < CONSIDERE QU'IL NE S'AGIT PAS
                                     < D'UNE ERREUR, ET ON PEUT
                                     < REPOSITIONNER FSERV (CF. LE CAS
                                     < DU DEBUG OU UN ALT-MODE EST
                                     < FRAPPE DANS LA COMMANDE AU
                                     < DEBUG !!!).
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
< MISE A JOUR DE FSERV :
<
Z265:    EQU         $
         RBT         XFSERV          < BIT0(A)=K A PRIORI ; DANS LE
                                     < CAS OU IL VALAIT 1, L'APPELANT
                                     < AURA CONNAISSANCE DE CETTE MISE
                                     < A JOUR PAR BIT0(A)=K.
Z360:    EQU         $
         STA         FSERV-DCTESC,W
<
< RETOUR :
<
Z266:    EQU         $
         BSR         ASMDK           <<<< DEMASQUAGE GENERAL DES IT...
         RSR                         < GO BACK.
         PAGE
<
<
<        C A L C U L   D U   B E T A
<        D ' U N   S E M A P H O R E  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME REMET
<                    SUR 16 BITS LE COMPTEUR
<                    D'UN SEMAPHORE DONNE SUR
<                    8 BITS.
<
<
<        ARGUMENT :
<                    (L)=ADRESSE DCT.
<
<
<        RESULTAT :
<                    (A)=BETA DU SEMAPHORE.
<
<
         USE         L,DCT0
<
<
<        B E T A   D E   S D O D O  :
<
<
BETA3:   EQU         $
         LA          &ASDODO
         JMP         E753
<
<
<        B E T A   D E   S I T  :
<
<
BETA2:   EQU         $
         LA          SIT
         JMP         E753
<
<
<        B E T A   D E   S C H V I D  :
<
<
BETA1:   EQU         $
         LA          SCHVID
<
<
<        B E T A   D E   ( A )  :
<
<
<        ARGUMENT :
<                    (A)=BETA SUR 8 BITS D'UN SEMAPHORE.
<
<
E753:    EQU         $
         SLLS        NBITMO-XMBETA   < CADRAGE A GAUCHE, POUR TEST BIT
                                     < DE SIGNE ET EXTENSION...
                                     < ET RAZ DE L'OCTET0 DU BETA...
         SARS        NBITMO-XMBETA   < EXTENSION DU BIT8 DU BETA
                                     < DU SEMAPHORE (BIT DE SIGNE).
         RSR
         PAGE
<
<
<        T E S T   D E   P O S I T I O N   D E
<        B E T A ( S C H V I D )   P A R
<        R A P P O R T   A   S O N   S E U I L  :
<
<
<        UTILISATION DU SEUIL :
<                      LE TEST DE LA POSITION DE BETA PAR RAPPORT
<                    AU SEUIL PERMET D'ENTREPRENDRE UNE
<                    CERTAINE ACTION EVENTUELLEMENT.
<                      UNE APPLICATION EST DE POUVOIR
<                    INDIQUER AU SWAPPEUR S'IL DOIT
<                    SWAPPER UN ESCLAVE INTERROMPU PAR
<                    L'HORLOGE...
<
<
<        RESULTAT :
<                      CE SOUS-PROGRAMME EST
<                    STRICTEMENT EQUIVALENT AU
<                    CODE SUIVANT :
<
<        LA          BETA(SCHVID)
<        CP          SEUIL(SCHVID)
<
<
<        DETRUIT A & X.
<                    (A)=BETA(SCHVID),
<                    (X)=SEUIL(SCHVID),
<
<
<        ARGUMENT :
<                    (L)=ADRESSE DCT.
<
<
         USE         L,DCT0
PBS:     EQU         $
         LA          BITSEM          < OCTET1(BITSEM)=SEUIL DE SCHVID
         ANDI        BSEUIL          < ACCES AU SEUIL DE SCHVID
         ADRI        XXCHV0+I,A      < EN EFFET UN SCHVID NE PEUT
                                     < ETRE INFERIEUR A -1 ('FF), ET
                                     < DE PLUS IL TIENT SUR 8 BITS,
                                     < EN CONSEQUENCES ON TRANSLATE LE
                                     < BETA ET LE SEUIL DE 1 UNITE,
                                     < DE FACON A NE COMPARER QUE DES
                                     < NBRES POSITIFS OU NULS...
         ANDI        BSEUIL          < RESTONS SUR 8 BITS.
         LR          A,X             < (X)=SEUIL.
         LA          SCHVID          < ACCES AU BETA.
         ADRI        I,A
         ANDI        MBETA           < (A)=BETA.
         CPR         X,A             < POUR TEST EN RETOUR.
         IF          MBETA-BSEUIL,,XEIF%,
         IF          ATTENTION : CES 2 MASQUES DOIVENT ETRE IDENTIQUES !!!
XEIF%:   VAL         ENDIF
         RSR
         PAGE
<
<
<        R O U T I N E   D E   T E S T   D ' E C H A N G E   E N   C O U R S :
<
<
<        FONCTION :
<                      CETTE ROUTINE INDIQUE SI POUR LE PERIPHERIQUE
<                    DONT ON LUI A DONNE L'@DCT, IL Y A UN ECHANGE
<                    EN COURS.
<                      A NOTER, QUE C'EST LA TACHE APPELANTE DE 'TEC' DE
<                    DE SE PREMUNIR CONTRE LES PHASES CRITIQUES, SOIT PAR
<                    PAR DES RQST/RLSE, SOIT PAR DES MASK/UNMASK IT...
<                    ET CECI, PARCEQUE LE BSR ATEC NE PEUT ETRE INSERER DANS
<                    INSERE DANS CETTE PHASE CRITIQUE...
<
<
<        ARGUMENTS :
<                    (L)=ADRESSE DE LA 'DCT',
<                    (W)=ADRESSE DE LA DEMANDE.
<
<
<        RESULTATS :
<                      CETTE ROUTINE POSITIONNE LES INDICATEURS QUE
<                    L'ON PEUT TESTER AU RETOUR PAR :
<                                    - 'JE' : JUMP SI PAS D'ECHANGE..,
<                                    - 'JNE' : JUMP SI ECHANGE EN COURS...
<
<
         USE         L,DCT0
         USE         W,DEM0
TEC:     EQU         $
         PSR         A
         LA          TETE            < ACCES A LA TETE DE LA FILE
                                     < D'ATTENTE SUR CE PERIPHERIQUE.
         CPI         NEXIST          < ON FAIT CE CPI, POUR POUVOIR
                                     < TESTER AU RETOUR PAR JE/JNE...
         PLR         A
         RSR
         PAGE
<
<
<        N O T I O N   D E   F I L T R A G E
<        D E S   D E M A N D E S  :
<
<
<        PHILOSOPHIE DU FILTRAGE : DANS CERTAINS CAS CERTAINES DEMANDES
<                    APPARAISSANT SUR UN HANDLER PEUVENT ETRE MALVENUES.
<                    (CF. DE DEMANDES DE LECTURES SUR UN FICHIER
<                    SEQUENTIEL, ALORS QUE LA CHAINE DES SECTEURS DE
<                    CELUI-CI EST VIDE ; IL EST EVIDENT QUE DANS CE CAS
<                    SEULES LES DEMANDES D'ECRITURE PEUVENT PASSER,
<                    MAIS QUE CELLES DE LECTURES DOIVENT ETRE DIFFEREES
<                    JUSQU'A CE QUE LA CHAINE NE SOIT PLUS VIDE...).
<                      ON VA DONC AVOIR LA POSIBILITE DE DIFFERER LES
<                    DEMANDES A L'AIDE D'UN SYSTEME DIT DE FILTRAGE.
<                      DANS CHAQUE DCT, ON TROUVERA :
<                                    - FILTRE : IL S'AGIT D'UNE ROUTINE
<                                    SPECIFIQUE DU HANDLER APPELEE
<                                    PAR HANDLR AU MOMENT OU IL ACCEDE
<                                    A UNE DEMANDE DANS LA FILE D'ATTENTE
<                                    POUR SAVOIR S'IL FAUT LA DIFFERER
<                                    OU BIEN SI ON PEUT LA TRAITER
<                                    IMMEDIATEMENT.
<                                    - SFLITR : IL S'AGIT D'UNE ROUTINE SPECIFIQ
<                                    SPECIFIQUE A CHAQUE HANDLER  ET
<                                    QUI INDIQUE A HANDLR APRES CHAQUE
<                                    DEMANDE TRAITEE CE QU'IL DOIT FAIRE
<                                    AU SUJET DU FILTRE ET DES EVENTUELLES
<                                    DEMANDES DIFFEREES QUI SONT EN ATT-
<                                    ENTE.
<
<                      DEBLOCAGE DES DEMANDES DIFFEREES : LE DEBLOCAGE
<                    PEUT SURVENIR APRES L'APPEL DE SFLITR DANS LE CAS
<                    D'UNE REPONSE POSITIVE DE CELUI-CI. IL FAUT
<                    REMARQUER QUE LES DEMANDES DIFFEREES NE SONT PAS
<                    OBLIGATOIREMENT LIBEREES EN BLOC , EN EFFET
<                    ENTRE CHAQUE TRAITEMENT PAR 'ES' D'UNE DEMANDE
<                    DIFFEREE, ON RAPPELLE COMME POUR TOUTE AUTRE
<                    DEMANDE LA ROUTINE SFLITR, QUI PEUT REPOSITIONNER
<                    LE FILTRE.
<
<
<        REPONSES DES ROUTINES FILTRE & SFILTR :
<                      CELLES-CI REVIENNENT DANS A, EN RESPECTANT LES
<                    CONVENTIONS SUIVANTES :
<                                    - (A)=K : TRAITER LA DEMANDE, OU
<                                              SUPPRIMER LE FILTRE,
<                                    - (A)#0 : DIFFERE LA DEMANDE, OU
<                                              MAINTENIR LE FILTRE.
<
<
<        EN RESUME :
<                    - FILTRE : TEST LA DEMANDE ET LE CONTEXTE DU HANDLER,
<                    - SFILTR : NE TESTE QUE LE CONTEXTE DU HANDLER.
<
<
<        R O U T I N E   D E   F I L T R A G E   L A I S S A N T
<        P A S S E R   T O U T E S   L E S   D E M A N D E S  :
<
<
NFILTR:  EQU         $
         LAI         NEXIST          < TOUT PASSERA AINSI...
         RSR                         < ET C'EST TOUT...
<
<
<         R O U T I N E   D E   S - F I L T R A G E  :
<
<
FILTRS:  EQU         $
         LAI         EXIST           < ON MAINTIENT AINSI LE FILTRE.
         RSR
<
<
<        A T T E N T I O N  :
<                      COMME S-FILTRE, ON UTILISERA DE PREFERENCE
<                    FILTRS A NFILTR, EN EFFET AVEC NFILTR,
<                    ON SAUTE UN GRAND NBRE DE RQST SCHVID, SI
<                    LA FILE D'ATTENTE DU HANDLER EST TOUJOURS
<                    PLEINE (CF. DK, SCHEDULER,...), ET
<                    AINSI LE BETA DE SCHVID, EN PASSANT PAR
<                    SON '+INFINI' REDEVIENT NEGATIF...
         PAGE
<
<
<        M I S E   E N   F I L E   D ' A T T E N T E
<                    S U R   U N   H A N D L E R  :
<
<
<        PHILOSOPHIE :
<                      L'ACCES AUX TACHES DU SYSTEME
<                    SE FAIT PAR DES FILES D'ATTENTE ;
<                    CES FILES D'ATTENTE SONT EN GENE-
<                    RAL 'FIFO', C'EST-A-DIRE QUE 'CHAND'
<                    DEPOSE LES DEMANDES EN QUEUE DE
<                    FILE D'ATTENTE DESIREE, ET QUE
<                    'HANDLR' TRAITE CELLE DE TETE.
<                    MALGRE TOUT, IL EXISTE UNE OPTION
<                    DITE "PRIORITAIRE", QUI PERMET
<                    DE FAIRE DU 'LIFO', AVEC LAQUELLE,
<                    'CHAND' DEPOSE LA DEMANDE ARGUMENT
<                    LE PLUS PRES POSSIBLE DE LA TETE
<                    (EN TETE, SI LA FILE D'ATTENTE EST
<                    VIDE, OU JUSTE DERRIERE CELLE DE
<                    TETE SINON...).
<                      ON N'OUBLIERA PAS DE PLUS LA
<                    NOTION DE 'FILTRAGE'.
<
<
<        I M P O R T A N T  :
<                      ON RETIENDRA QUE LA DEMANDE
<                    DE TETE EST TOUJOURS LA DEMAN-
<                    DE LA PLUS PRIORITAIRE (C'EST-
<                    A-DIRE CELLE QUE L'ON VA TRAI-
<                    TER), QUELQUE SOIT LE MODE D'IN-
<                    SERTION D'AUTRES DEMANDES !!!
<
<
<        NOTATIONS :
<                      LA FIN D'UNE CHAINE DANS UNE
<                    FILE D'ATTENTE EST INDIQUEE PAR
<                    UN CHAINAGE 'NIL', ET UNE FILE
<                    D'ATTENTE VIDE PAR (TETE,QUEUE)=(NIL,NIL).
<
<
<        ARGUMENTS :
<                    (W)=ADRESSE DE LA DEMANDE.
<
<
<        A T T E N T I O N  :
<                      'CHAND' NE SE CHARGE PAS DE
<                    LA MISE EN ATTENTE DE FIN DE
<                    SERVICE SUR 'WEIO' !!!
<
<
         USE         W,DEM0
         USE         L,DCT0
CHAND:   EQU         $
         PSR         A,B,X           < A CAUSE DU MICRO-CANAL.
         PSR         Y,L             < A CAUSE DU MICRO-CANAL.
<
< TRANSMISSION DE LA PAGE DE 32K
< A LA QUELLE APPARTIENT LE 'SLO'
< DE LA TACHE DEMANDEUSE :
<
         LA          &NS
         ADRI        -NSNSP0,A       < (A)='NSP' DU DEMANDEUR ; A NOTER QUE
                                     <     L'ON NE PEUT UTILISER 'CANSP', CAR
                                     <     EN EFFET CETTE ROUTINE ASSIMILE TOUS
                                     <     LES 'NSPSER' A 'NSPACT'...
         LR          A,X
         BSR         ACADCT          < (A)=(L)=ADRESSE DE LA 'DCT' DU DEMANDEUR
                                     <         DONT LE 'NSP' EST (X)...
         LA          BITSEM
         TBT         BISOSE          < FAUT-IL VRAIMENT TRANSMETTRE (SLO,SLE)
                                     < A LA TACHE DEMANDEE ???
         LAI         SO              < NON, A PRIORI ON DONNE A 'A' UNE VALEUR
                                     < PERMETTANT DE TRANSMETTRE LA PAGE 0...
         JC          CHAND2          < NON, EFFECTIVEMENT, ON NE TRANSMET
                                     < PAS (SLO,SLE)...
         RDOE                        < ET SI, ON RECUPERE (SLO,SLE) COURANT :
CHAND2:  EQU         $
         SLRD        XSLO32+NBITMO   < (B)=NUMERO DE LA PAGE DE 32K,
         LAI         XNDSLO          < (A)=NUMERO MAX AUTORISE,
         CPR         A,B             < LE NUMERO DE PAGE (B) EST-IL VALIDE ???
         JLE         CHAND3          < OUI, (B)<='XNDSLO'...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      VOIR D'OU ARRIVE CE NUMERO
<                    DE PAGE TROP GRAND : NE SERAIT-
<                    CE PAS UNE EXTENSION 'CDA' DE
<                    'DKU' VERS 'CDAJ' ???
<
         LBI         XNDSLO          < POURQUOI PAS...
CHAND3:  EQU         $
         SLLD        XDDSLO          < ET CADRAGE SUIVANT 'XMDSLO'...
         LRM         A
         WORD        XMDSLO)MMOT
         AND         ARGDEM+OPDEM    < CLEAR DE 'XMDSLO' DANS L'OPDEM COURANT,
         CP          ARGDEM+OPDEM    < Y-AVAIT'IL QUELQUE CHOSE DANS LE
                                     < CHAMP 'XMDSLO' ???
         JE          CHAND1          < NON, OK...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      VOIR CE QUE CONTIENT LE CHAMP 'XMDSLO' !!!
<
CHAND1:  EQU         $
         ORR         B,A             < INSERTION DE 'XMDSLO',
         STA         ARGDEM+OPDEM    < ET MISE-A-JOUR DE 'OPDEM'...
<
< ACCES A LA TACHE DEMANDEE :
<
         LA          ETALOC          < ACCES A L'ETAT DE LOCATION
                                     < DU DEMANDEUR DE SERVICE,
         STA         ARGDEM+ETADEM   < ET SAUVEGARDE REENTRANTE DE
                                     < CET ETAT DE LOCATION DANS LA
                                     < DEMANDE DE SERVICE ARGUMENT.
         LBY         NSPTYP          < ACCES AU 1ER OCTET DE LA
                                     < DEMANDE.
XWOR%1:  VAL         MSKNSP=K
XWOR%1:  VAL         -XWOR%1         < POUR UN DECALAGE A DROITE.
XWOR%1:  VAL         MSKNSP>XWOR%1
         ANDI        XWOR%1          < (A)='NSP' DU SERVICE DEMANDE,
                                     < (X)='NSP' DU SERVICE DEMANDEUR.
         IF          OACTIV-EXIST,XEIF%8,,XEIF%8
<
< VISUALISATION DU TRAFFIC :
<
         PSR         A
         SWBR        A,A             < PREPARATION DU RECEPTEUR,
         ORR         A,X             < (X)=(RECEPTEUR/EMETTEUR),
         LYI         XNGIN           < (Y)=NIVEAU DE VISUALISATION DE LA
                                     <     CONNEXION PAR 'CHAND'.
         BSR         AACTIV          < ET VISUALISATION (SI LE BIT 'XACTIV'
                                     < EST POSITIONNE...
         PLR         A
XEIF%8:  VAL         ENDIF
<
< ACCES AU SERVICE DEMANDE :
<
         LR          A,X             < LE NSP EST MIS DANS X.
         BSR         ACADCT          < MISE DANS L DE @DCT.
<
<        ON A DONC ARRIVE ICI :
<                    - (W)=ADRESSE DE LA DEMANDE,
<                    - (L)=ADRESSE DE LA 'DCT',
<                    - (X)='NSP' DE LA TACHE DEMANDEE.
<
         LR          W,Y             < @DEMANDE EST MISE DANS Y (EN PLUS
                                     < DE W)
<
< SAUVEGARDE DU NSP DU DEMANDEUR DANS ETADEM :
< (UTILISE PAR LE SGF).
<
         BSR         ACANSP          < RENVOIE (A)=NSP DEMANDEUR OU NSPACT.
         LR          A,B             < (B)=NSP DU DEMANDEUR DE SERVICE.
E137:    EQU         $
         RQST        SPHEX           <<<<PHASE CRITIQUE
<
< TEST D'UN APPEL PAR LE HANDLER DE SURVEILLANCE :
< EN EFFET C'EST LE SEUL HANDLER POUR LEQUEL
< LE TEST DE LOCATION (DES VISUS) NE DOIT PAS
< ETRE FAIT, CAR SI UNE VISU EST ASSIGNEE,
< ELLE EST LOUEE, DONC UN BLOCAGE DU HANDLER
< DE SURVEILLANCE APPARAIT, ET TOUTES LES
< CONSOLES DU SYSTEME SE TROUVENT DANS
< L'IMPOSSIBILITE DE FAIRE 'ALT-MODE' !!!
<
         CPI         NSPSUR          < LE NSP (A) EST-IL LE NSP DU
                                     < HANDLER DE SURVEILLANCE ???
         JE          E136            < OUI, PAS DE TEST DE LOCATION.
                                     < (QUEL PRIVILEGE !!!)
<
<        T E S T   D E   L O C A T I O N   D E   L A   D C T  :
<
         LA          ETALOC          < ACCES A L'ETAT DE LOCATION DCT.
         JAGE        E136            < LA DCT N'EST PAS LOUEE OU
                                     < NON LOUABLE (PARTAGEABLE).
<
< CAS OU LA DCT COURANTE EST LOUEE :
<
         CP          ARGDEM+ETADEM   < LE 'PROPRIETAIRE' DU DEMANDEUR
                                     < (S'IL EXISTE...) ET DU DEMANDE
                                     < NE SERAIT-IL PAS UNE SEULE ET
                                     < MEME PERSONNE...
         JE          E136            < OUI, ALORS LA DEMANDE DE
                                     < SERVICE EST ACCEPTEE ; C'EST PAR
                                     < EXEMPLE LE CAS SUIVANT :
                                     < !ASSIGN 3=CR1,
                                     < !ASSIGN 4=LP1, PUIS L'UTILISATEUR
                                     < FAISANT UNE LECTURE AVEC ECHO
                                     < SUR LE LECTEUR DE CARTES...
         RBT         XETLOC          < RAZ BIT DE LOCATION DANS A.
                                     < DONC : (A)=NUMERO DU LOCATAIRE.
         CPR         A,B             < (B)=NSP DU DEMANDEUR.
         JE          E136            < OK, LE DEMANDEUR EST LE
                                     < LOCATAIRE.
<
< CAS OU LE DEMANDEUR N'EST PAS LE LOCATAIRE :
<
<        ON A ICI :
<                    (A)='NSP' DU LOCATAIRE,
<                    (B)='NSP' DU DEMANDEUR,
<                    (X)='NSP' DE LA TACHE DEMANDEE.
<
         CPI         NSPACT          < LE LOCATAIRE EST-IL UN UTILISATEUR ???
         JNE         E136X2          < NON, DONC ALLONS DIRECTEMENT SE METTRE
                                     < EN ATTENTE DE DELOCATION...
         PSR         A               < OUI :
         LR          B,A             < (A)='NSP' DU DEMANDEUR,
         CPI         NSPSG0          < LE DEMANDEUR EST-IL LE "SGN" ???
         JL          E136X1          < NON, VERS L'ATTENTE...
         CPI         NSPSGN          < LE DEMANDEUR EST-IL LE "SGN" ???
         JG          E136X1          < NON, VERS L'ATTENTE...
         LR          X,A             < OUI, (A)='NSP' DE LA TACHE DEMANDEE,
NSPDKG:: VAL         NSPDKU          < 'NSP' DU DISQUE SUPPORTANT LES VOLUMES
                                     < AMOVIBLES D'EXTENSION D'ADRESSAGE
                                     < DU "SGN".
         CPI         NSPDKG          < LE "SGN" A-T'IL DEMANDE "DKU" POUR LE
                                     < COMPTE DE L'UTILISATEUR ???
E136X1:  EQU         $
         PLR         A               < RESTAURE :
                                     < (A)='NSP' DU LOCATAIRE...
         JE          E136            < L'UTILISATEUR S'EST ASSIGNE OBLIGATOI-
                                     < REMENT 'DKU' POUR FAIRE UN MONTAGE DE
                                     < VOLUME ; LE "SGN" DOIT POUVOIR ATTEIN-
                                     < DRE 'DKU', DONC ON DOIT SAUTER CETTE
                                     < ATTENTE DE DELOCATION, QUI D'AIL-
                                     < LEURS N'ARRIVERAIT JAMAIS...
                                     < (PUISQUE L'UTILISATEUR SERAIT EN
                                     < EN ATTENTE VIA LE "SGN"...).
E136X2:  EQU         $
         PSR         A
         LAD         SPHEX
         BSR         ARLSE
         PLR         A
         RQST        SEMLOC          < LE DEMANDEUR SE MET EN ATTENTE
                                     < DE DELOCATION DE LA DCT.
         JMP         E137            < LA DCT VIENT D'ETRRE DELOUEE, ESSAYONS
                                     < DE L'AVOIR...
<
< CAS OU LA DCT EST SOIT LIBRE, SOIT LE DEMANDEUR EST LE LOCATAIRE :
<
E136:    EQU         $
         LA          NSPTYP          < (A)=NSPTYP DE LA DEMANDE.
         TBT         ENFILE          < LA DEMANDE EST-ELLE DEJA EN
                                     < FILE D'ATTENTE (CELLE-CI OU UNE
                                     < AUTRE...).
         JNC         E807            < NON, C'EST BON.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
         PSR         A
         LAD         SPHEX           < (A)=ADRESSE DU SEMAPHORE 'SPHEX'.
         BSR         ARLSE           < SORTONS DE LA PHASE CRITIQUE...
         WAIT        WEIO            < AU RETOUR DU DEBUG ON ATTEND
                                     < QUE LA DEMANDE NE SOIT PLUS EN
                                     < FILE ; UNE AUTRE SOLUTION POURRAIT
                                     < ETRE DE SORTIR DE CHAND, PAR
                                     < UN 'RLSE SPHEX', UN 'PLR
                                     < A,B,X,Y,L' ET UN 'RSR'...
         PLR         A
         RQST        SPHEX           < RE-RENTRONS EN PHASE CRITIQUE...
E807:    EQU         $
         SBT         ENFILE          < MAINTENANT LA DEMANDE EST
                                     < DANS CETTE FILE D'ATTENTE.
         STA         NSPTYP          < MAJ DU NSPTYP DE LA DEMANDE.
         STB         ARGDEM+ETADEM   < MEMORISATION DU NSP DU DEMAN-
                                     < DEUR DANS L'ETADEM.
         LA          &NS             < (A)='NS' DE LA TACHE DEMANDEUSE,
         SWBR        A,A             < ET CADRAGE TOUT EN CLEARANT
                                     < L'OCTET DROIT...
         STA         WEIO            < INITIALISATION EVENTUELLE DU
                                     < SEMAPHORE DE LA DEMANDE AVEC LE 'NS'
                                     < DU DEMANDEUR (DONC CELUI QUI RISQUE DE
                                     < FAIRE UN 'ACT' DESSUS...) ; ON PROCEDE
                                     < A CETTE INITIALISATION, AFIN QUE DANS
                                     < 'HANDLR', LORSQU'ON VISUALISE L'ACTIVITE
                                     < DU SYSTEME, ON RETROUVE LE DEMANDEUR (EN
                                     < EFFET, 'ETADEM' N'EST PAS TOUJOURS COR-
                                     < RECT...).
<        ON A DONC ICI :
<                    (X)=NSP DE LA DEMANDE,
<                    (W)=ADRESSE DE LA DEMANDE,
<                    (L)=ADRESSE DE LA 'DCT' DU HANDLER DEMANDE.
<                    (Y)=ADRESSE DE LA DEMANDE.
<
<        T R A C E   D U   S Y S T E M E  :
<
         LR          X,A             < (A)=NSP DE LA DEMANDE & BIT0(A)=K.
         BSR         ATRACE
<
<        M I S E   E N   F I L E   D ' A T T E N T E  :
<
         LA          TETE            < ACCES A LA TETE DE LA FILE
                                     < D'ATTENTE SUR CE HANDLER.
         JANE        E1              < LA FILE D'ATTENTE N'EST PAS VIDE
<
< CAS D'UNE FILE D'ATTENTE VIDE :
<
         STY         TETE            < LA DEMANDE EST MISE EN TETE.
E3:      EQU         $
         STY         QUEUE           < LA DEMANDE EST MISE EN QUEUE,
                                     < DANS 2 CAS :
                                     < - LA DEMANDE N'EST PAS PRIORITAIRE,
                                     < - LA FILE EST VIDE (QUE LA
                                     < DEMANDE SOIT OU NE SOIT PAS PRIO-
                                     < -RITAIRE).
E5:      EQU         $
         STA         NEXT            < ON CONSTITUE LE CHAINAGE DE CETTE
                                     < CETTE DEMANDE DANS LA FILE D'ATTENTE
                                     < SOIT AVEC 0, SI ELLE EST MISE
                                     < EN QUEUE, SOIT AVEC LE 2EME
                                     < MAILLON SI ELLE EST PRIORITAIRE.
E7:      EQU         $
         LAD         SPHEX
         BSR         ARLSE
         LAD         SCHVID
         BSR         ARLSE           < AVERTISSEMENT DU HANDLER
         IC          HSTATS          < COMPTAGE MODULO '10000 DES
                                     < DEMANDES DE SERVICE ADRESSEES
                                     < A CE HANDLER.
                                     < A NOTER QUE CE COMPTAGE N'A PAS
                                     < BESOIN D'ETRE FAIT DANS LA
                                     < PHASE CRITIQUE PROTEGEE PAR
                                     < LE SEMAPHORE SPHEX, PUISQU'IL
                                     < S'AGIT D'UNE ACTION NON
                                     < INTERRUPTIBLE !!!!
         ARM         NSNSP0,X        < ARMEMENT (SI CE N'EST DEJA FAIT)
                                     < DU HANDLER DE NIVEAU NSNSP0+(X).
<
<        T R A C E   D U   S Y S T E M E  :
<
         LR          X,A             < (A)=NSP DE LA DEMANDE.
         SBT         XTRACH          < BIT0(A)=1.
         BSR         ATRACE
         PLR         Y,L             < A CAUSE DU MICRO-CANAL.
         PLR         A,B,X           < A CAUSE DU MICRO-CANAL.
         RSR
<
< CAS D'UNE FILE D'ATTENTE NON VIDE :
<
E1:      EQU         $
         PSR         A,W             < SAUVEGARDE DE L'ADRESSE DE LA DEMANDE
                                     < COURANTE ('W'), ET DE CELLE DE LA
                                     < DEMANDE DE TETE ('A').
         LR          A,W             < (W)=ADRESSE DE LA DEMANDE DE TETE.
         LA          MEMV
         TBT         XBTOVI          < FAUT-IL DETECTER LES DEMANDES BLOQUANTES
                                     < SUR LES VISUS ???
         JNC         E1X1            < NON...
         LR          X,A             < OUI, (X)=A='NSP' DEMANDE,
         CPI         NSPVI0          < EST-CE UNE VISU ???
         JL          E1X1            < NON...
         CPI         NSPVIN          < EST-CE UNE VISU ???
         JG          E1X1            < NON...
<
< CAS D'UNE VISU DEMANDEE :
<
         LA          NSPTYP          < (A)='NSPTYP' DE LA DEMANDE DE TETE,
         TBT         ACTIF           < EST-ELLE ACTIVE ???
         JNC         E1X2            < NON...
XXTOVI:: VAL         2               < TIME OUT ARBITRAIRE DE DETECTION DES
                                     < DEMANDES BLOQUANTES SUR LES VISUS.
         IF          XXTOVI-W,,,XEIF%
         IF          ATTENTION : 'XXTOVI' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
<
< CAS OU LA DEMANDE DE TETE EST ACTIVE :
< 'HANDLR' EST DONC EN TRAIN DE LA TRAITER,
< IL A DONC SAUVEGARDE LA VALEUR INITIALE
< DE 'TESTO', ON PEUT DONC ALLEGREMENT
< ECRASER CELUI-CI...
<
         LAI         XXTOVI
         STA         TESTO           < LUI AUSSI A CAUSE DU SYSTEME D'ITERA-
                                     < TION DES SERVICES SUR ERREUR,
         STA         TIMOUT          < AINSI ON VA DETECTER UN TIME-OUT...
         JMP         E1X1            < ET C'EST TOUT...
<
< CAS OU LA DEMANDE DE TETE N'EST PAS ACTIVE :
< DONC 'HANDLR' N'A PAS SAUVEGARDE 'TESTO' DANS
< SA PHASE CRITIQUE ; SI CELUI-CI EST NON NUL
< ON N'A RIEN A FAIRE, DANS LE CAS CONTRAIRE
< ON LE FORCE AVEC UNE VALEUR NEGATIVE, DEMANDANT
< AINSI A 'HANDLR', EN FIN DE TRAITEMENT DE
< CETTE DEMANDE DE TETE, UNE REINITIALISATION
< NULLE DE 'TESTO'...
<
E1X2:    EQU         $
         CPZ         TESTO           < COMMENT EST 'TESTO' ???
         JNE         E1X1            < DEJA POSITIONNE, DONC RIEN A FAIRE...
         LAI         -XXTOVI         < NULLE, ON VA DONC FORCER -XXTOVI QUI EST
         STA         TESTO           < UNE VALEUR NEGATIVE AFIN QUE 'HANDLR'
                                     < L'EMPILE, PUIS LORS DU DEPILEMENT, LE
                                     < REINITIALISE A 0...
<
< FIN DE CETTE DETECTION :
<
E1X1:    EQU         $
         PLR         A,W             < RESTAURATION :
                                     < (W)=ADRESSE DE LA DEMANDE COURANTE,
                                     < (A)=ADRESSE DE LA DEMANDE DE TETE.
<
< DISCRIMINATION DU TYPE DE LA DEMANDE COURANTE :
<
         LB          NSPTYP          < ACCES AU TYPE DE LA DEMANDE.
         TBT         PRIO+NBITMO     < TEST DU MODE PRIORITAIRE.
         JC          E6              < LE MODE EST PRIORIATAIRE.
<
< CAS OU LE MODE EST NON PRIORITAIRE :
< LA DEMANDE EST MISE EN QUEUE DE LA FILE D'ATTENTE :
<
         LA          QUEUE           < ACCES A LA QUEUE DE LA FILE D'ATTENTE.
         XR          W,A             < 'W' POINTE LA DEMANDE DE QUEUE.
         STY         NEXT            < LA DEMANDE COURANTE EST MISE A
                                     < LA SUITE DE LA QUEUE.
         XR          W,A             < RESTAURE (W)=@DEMANDE.
         STY         QUEUE           < LA DEMANDE COURANTE DEVIENT LA
                                     < NOUVELLE QUEUE.
         STZ         NEXT            < DONT LE NEXT EST EVIDEMMENT
                                     < NUL PUISQU'ON LA MET EN QUEUE.
         JMP         E7
<
< CAS DU MODE PRIORITAIRE :
<
E6:      EQU         $
<
<
<          LA TETE DE LA CHAINE EST TOUJOURS CONSIDEREE COMME
<        LA DEMANDE LA PLUS PRIORITAIRE PUIQU'ELLE EST ACTIVE.
<        CECI ETANT DIT, LA DEMANDE COURANTE PRIORITAIRE EST MISE
<        APRES LA DERNIERE DEMANDE PRIORITAIRE DE LA CHAINE. CECI
<        A POUR BUT D'EVITER DES INVERSIONS DANS
<        LE SEQUENCEMENT DES OPERATIONS (CF. LES E/S PRIORITAIRES
<        SUR DK1)...
<
<        ON A ICI :
<                    - (A)=TETE DE LA CHAINE,
<                    - (W)=Y=DEMANDE COURANTE A CHAINER.
<
<
         LR          A,W             < INITIALISONS W SUR LA TETE DE CHAINE.
E190:    EQU         $
         LA          NEXT            < ACCES AU NEXT DE LA DEMANDE (W).
         JAE         E191            < ON EST EN BOUT DE CHAINE :A=K.
         XR          A,W             < W BASE LA DEMANDE SUIVANTE, ET
                                     < CECI POUR SAVOIR SI ELLE EST PRIORITAIRE
                                     < PRIORITAIRE...
         LB          NSPTYP
         TBT         PRIO+NBITMO     < LA DEMANDE NEXT EST-ELLE PRIORI-
                                     < TAIRE...
         JC          E190            < OUI, IL FAUT LA DEPASSER...
<
< CAS OU ON A TROUVE UNE DEMANDE
< NON PRIORITAIRE DANS LA CHAINE :
<
         XR          A,W             < (A)=1ERE DEMANDE NON PRIORITAIRE,
                                     < (W)=DERNIERE DEMANDE PRIORITAIRE.
E191:    EQU         $
         STY         NEXT            < ON CHAINE LA DEMANDE ARG. DE
                                     < CHAND SUR LA DERNIERE DEMANDE
                                     < PRIORITAIRE RENCONTREE (W).
         LR          Y,W             < (W)=DEMANDE ARG. DE CHAND.
         JAE         E3              < CAS OU LA DEMANDE PRIORITAIRE A
                                     < ETE INSEREE EN DERNIERE
                                     < POSITION DANS LA CHAINE.
         JMP         E5              < AUTRES CAS : LA DEMANDE ARG. EST
                                     < DANS LA CHAINE.
<        ON A ICI :
<                    - (Y)=W=DEMANDE ARG. DE CHAND,
<                    - (A)=LA DEMANDE QUI DEVIENDRA SA SUIVANTE.
         PAGE
<
<
<        M I S E   D ' U N E   D E M A N D E   E N   F I L E
<        D ' A T T E N T E   A V E C   P A S S A G E
<        P R E L I M I N A I R E   S U R   L A   P A G E 0  :
<
<
<        FONCTION :
<                      CE MODULE A ETE RAJOUTE
<                    A CAUSE DU SWAPPING IN/OUT ;
<                    EN EFFET, LORS DES ACCES DES
<                    UTILISATEURS A 'DKU', C'EST LA
<                    'CDA' COURANTE (EN GROS...) QUI
<                    EST MISE DANS (SLO,SLE) ; OR SI
<                    CET UTILISATEUR EST SWAPPE SUR
<                    'DKF' (PARCE QUE SON 'IDESC' EST
<                    GRAND, OU BIEN LORS D'UN CHARGEMENT DE
<                    PROCESSEUR), ALORS 'DKF' RECEVRA COMME
<                    ADRESSE DE PAGE POUR LE SWAPPING,
<                    EN FAIT LA 'CDA' DE CET UTILISATEUR,
<                    ET LE SWAPPING NE SE FERA PAS
<                    AVEC LA MEMOIRE BASSE, D'OU CE
<                    MODULE QUI REPOSITIONNE TEMPO-
<                    RAIREMENT SUR LA PAGE0...
<
<
<        ARGUMENT :
<                    (L)=ADRESSE DE LA 'DCT' RECEPTRICE,
<                    (W)=ADRESSE DE LA DEMANDE.
<
<
CHAND0:  EQU         $
<
< SAUVEGARDES DIVERSES :
<
         PSR         A,B
         CALL        #SISP CMS5 PSRSLO#
<
< PASSAGE SUR LA PAGE0 :
<
         CALL        #SISP CMS5 PAGE0#
<
< ENVOI DE LA DEMANDE :
<
         BSR         ACHAND          < MISE DE LA DEMANDE COURANTE (W) DANS
                                     < LA FILE D'ATTENTE DE LA 'DCT' (L)...
<
< RESTAURATIONS ET RETOUR :
<
         CALL        #SISP CMS5 PLRSLO#
         PLR         A,B
         RSR                         < OUF...
         PAGE
<
<
<        A T T E N T E   D E   F I N   D E   S E R V I C E
<        E T   T E S T   D E S   C O N D I T I O N S   D E
<                        R E T O U R  :
<
<
<        FONCTION :
<                      CETTE ROUTINE SE MET EN ATTENTE DE FIN
<                    SERVICE, PUIS TESTE LES CONDITIONS DE
<                    RETOUR, ET FAIT S'IL Y A LIEU UNE 'SYSER'.
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DE LA DEMANDE.
<
<
CHANW:   EQU         $
         WAIT        WEIO            < ATTENTE IMMEDIATE DE FIN DE SERVICE.
         CPZ         ARGDEM+ETADEM   < ENSUITE, REGARDONS SI CELA C'EST BIEN
                                     < PASSE ???
         JE          CHANW1          < OUI, OK...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      CETTE ROUTINE ETANT APPELEE DE NOMBREUSES
<                    FOIS, LE MIEUX EST DE POURSUIVRE CE SOUS-
<                    PROGRAMME EN PAS A PAS, ET D'ALLER VOIR CE QUI
<                    EST LE MIEUX...
<
         CPZ         ARGDEM+ETADEM   < POUR PERMETTRE UN TEST EN RETOUR SUR
                                     < LA FACON DONT S'EST DEROULEE LE
                                     < SERVICE...
CHANW1:  EQU         $
         RSR                         < ET C'EST TOUT...
         PAGE
<
<
<        R A N G E M E N T   F A C U L T A T I F   D E   L A
<        B O X   D ' U N E   D E M A N D E  :
<
<
<        FONCTION :
<                      SI LE BIT VBOX DU NSPTYP DE LA
<                    DEMANDE COURANTE (W) EST VALIDE (1),
<                    LA ROUTINE STBOX RANGE LA BOX DE CETTE
<                    DEMANDE. SI VBOX EST INVALIDE (K),
<                    CETTE ROUTINE NE FAIT RIEN...
<
<
<        ARGUMENTS :
<                    (W)=ADRESSE DEMANDE COURANTE.
<                    (X)=VALEUR A DONNER A LA BOX SI CELLE-CI EST VALIDE.
<
<
         USE         W,DEM0
STBOX:   EQU         $
         PSR         A               < VAUT MIEUX ETRE TROP PRUDENT !!!
                                     < (PLUTOT QUE DE SE TROUVER
                                     < EMMERDE PLUTARD PAR UN DEBUG
                                     < EPUISANT POUR MOI...)
         LA          NSPTYP          < (A)=NSPTYP DE LA DEMANDE (W).
         TBT         VBOX            < LA BOX DE LA DEMANDE EST-ELLE
                                     < VALIDE ???
         JNC         NSTBOX          < NON, ON NE FAIT DONC RIEN !!!
         STX         BOX             < SI OUI (1), ON RANGE LA BOX
                                     < DE LA DEMANDE COURANTE...
NSTBOX:  EQU         $
         PLR         A               < C'EST PAS QUE CELA SOIT MARRANT,
                                     < MAIS ON EST BIEN OBLIGE !!!
         RSR                         < ET BIEN VOILA C'EST TOUT...
         PAGE
<
<
<        N S P   D U   D E M A N D E U R  :
<
<
<        FONCTION :
<                      CETTE ROUTINE RENVOIE DANS A LE NSP
<                    DU DEMANDEUR (CELUI AYANT FAIT LE
<                    BSR) ; SI CE DEMANANDEUR EST L'UN
<                    DES HANDLERS DE SERVICE DES ESCLAVES,
<                    ON RENVOIE NSPACT.
<
<
<        RESULTAT :
<                    (A)=NSP DEMANDEUR, OU NSPACT.
<
<
CANSP:   EQU         $
         LA          &NS             < ATTENTION : L'APPEL DE CANSP
                                     < N'EST FAIT QUE PAR DES TACHES
                                     < SOFT ; NS A DONC UN SENS.
         ADRI        -NSNSP0,A       < (A)=NSP DU DEMANDEUR.
<
< TEST SUR LA NATURE DU HANDLER DEMANDEUR DE SERVICE :
<
         CPI         NSPSER
         JL          E700            < CE N'EST PAS UN HANDLER DE
                                     < SERVICE-ESCLAVE.
         CPI         NSPSER+NESCLA
         JGE         E700
<
< CAS D'UNE DEMANDE PROVENANT D'UN HANDLER DE SERVVICE ESCLAVE :
<
         LAI         NSPACT          < LE NSP UTILISE EST CELUI
                                     < DU NIVEAU D'EXECUTION DES ESCLAVES.
E700:    EQU         $
         JAL         E700X1          < POUAHHH, QUELLE HORREUR !!!
         CPI         NSPIDS          < OK, POUR LE BAS, MAIS VALIDONS LA
                                     < BORNE SUPERIEURE...
         JLE         E700X2          < OK, LE 'NSP' EST BON...
         CPI         NSPESC          < MAIS N'OUBLIONS PAS QUE LA LISTE DES
                                     < 'DCTESC' EST UTILISEE PAR 'DOWN'...
         JL          E700X1          < ET BIEN NON, C'EST MAUVAIS...
         CPI         NSPESC+NESCLA
         JL          E700X2          < OK, LE 'NSP' EST SUPERIEUR OU EGAL
                                     < A 'NSPESC', ET INFERIEUR A 'NSPESC'+
                                     < 'NESCLA'...
E700X1:  EQU         $
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE POURQUOI LE MOT 'NS'
<                    DE LA MEMOIRE EST DETRUIT !!!
<
E700X2:  EQU         $
         RSR
         PAGE
<
<
<        A D R E S S E   D ' U N E   D C T  :
<
<
<        ARGUMENT :
<                    - (X)=NSP DE LA DCT.
<
<
<        RESULTAT :
<                    - (L)=ADRESSE DCT,
<                    - (A)=ADRESSE DCT.
<
<
<        A T T E N T I O N  :
<                      DETRUIT LE REGISTRE 'A' !!!
<
<
CADCT:   EQU         $
         IF          NSPVID-K,,XEIF%,XEIF%
         IF          ATTENTION : LE TEST SUIVANT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         LR          X,A             < POUR VALIDER LE 'NSP' :
         JAL         CADCT1          < HOUAOU, QUELLE HORREUR !!!
         CPI         NSPLST
         JG          CADCT1          < DE MIEUX EN MIEUX...
         LA          &ADCTSY         < ACCES A L'@DCT.
         JANE        SYSR04          < OK.
CADCT1:  EQU         $
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      LE MIEUX POURRAIT DE METTRE 'DCTTSI'.
<                    DANS 'A', OU MIEUX ENCORE D'ALLER
<                    FAIRE DU PAS A PAS POUR VOIR QUI
<                    EST L'APPELANT...
<
SYSR04:  EQU         $
         LR          A,L             < @DCT EST MISE DANS L.
         RSR
         PAGE
<
<
<        C A L C U L   D E   L ' A D R E S S E   D ' U N E   D C T
<        A   P A R T I R   D ' U N   N I V E A U
<        D ' I N T E R R U P T I O N   G E N E R A L I S E  :
<
<
<        ARGUMENT :
<                    (X)=NIVEAU D'INTERRUPTION GENERALISE.
<
<
<        RESULTAT :
<                    (A)=L=ADRESSE DE LA 'DCT' ASSOCIEE.
<
<
CBDCT:   EQU         $
         PSR         X
         LRM         L
         WORD        DCTIT           < (L)=ADRESSE DE LA TABLE DES CORRESPON-
                                     <     DANCES : NIVEAU D'IT --> 'NSP'.
         ADR         X,L             < (L)=ADRESSE DE L'ENTREE ASSOCIEE AU
                                     <     NIVEAU (X),
         LX          O,L             < (X)='NSP' ASSOCIE,
         BSR         ACADCT          < ET : (A)=(L)=ADRESSE DE LA 'DCT' ASSOCIEE
         PLR         X
         RSR
         PAGE
<
<
<        A G E N C E   D E S   D C T  :
<
<
<        PHILOSOPHIE :
<                      CE SYSTEME VA PERMETTRE A UNE TACHE DE LOUER
<                    UNE DCT, C'EST-A-DIRE D'EN INTERDIRE L'ACCES
<                    AUX AUTRES TACHES. L'INTERET EN EST EVIDENT :
<                    PERMET D'EXCLURE DES PHASES CRITIQUES COMPLEXES,
<                    MAIS PERMET AUSSI D'EVITER QUE DES LISTINGS NE
<                    SE MELANGENT...
<                      MAIS UNE AUTRE APPLICATION PEUT ETRE TROUVEE :
<                    TOUS LES SERVICES DU MONITEUR ETANT ACCEDES
<                    COMME DES PERIPHERIQUES, PAR L'INTERMEDIAIRE
<                    DE DCT, IL VA DONC ETRE POSSIBLE DE LES RESERVER
<                    A UNE TACHE DONNE. ON POURRA AINSI AVOIR UNE TACHE
<                    DE REGULATION QUI S) LOUERA LA DCT D'ALLOCATION
<                    DES BUFFERS POUR DIMINUER LE TAUX D'ENTREES-SORTIES
<                    OU LOUERA LA DCT D'ALLOCATION DES B4, BLOQUANT
<                    AINSI L'EXPLOITATION...
<
<
<                      UNE FOIS QU'UNE DCT EST LOUEE PAR UNE TACHE,
<                    LES DEMANDES SUR CETTE DCT EMANANT D'AUTRES ATACHES
<                    SONT MISES EN ATTENTE PAR ORDRE DE PRIORITE,
<                    JUSQU'A CE QUE LA DCT SOIT DELOUEE. UNE TACHE PEUT ETRE
<                    ETRE AINSI MISE EN ATTENTE DE DCT SOIT EN
<                    ENTRANT DANS CHAND, SOIT EN FAISANT ELLE-MEME
<                    UNE DEMANDE DE LOCATION.
<
<
<        F O R M A T   D E   E T A L O C  :
<                    1- ETALOC>0 : LA DCT N'EST PAS LOUABLE, ET EST
<                    CONSIDEREE COMME TOUJOURS PARTAGEABLE.
<                    2- DANS LES AUTRES CAS (ETALOC=K INITIALLEMENT),
<                    LA DCT PEUT ETRE LOUEE :
<                       BIT0=K : LA DCT N'EST PAS LOUEE,
<                       BIT0=1 : LA DCT EST LOUEE, ET ON A :
<                                    BIT8-15=NSP LOCATAIRE.
         PAGE
<
<
<        L O C A T I O N   D ' U N E   D C T  :
<
<
<        ARGUMENT :
<                    - (X)=NSP DE LA DCT DEMANDEE.
<                    - (B)#0 : ATTENDRE LA DELOCATION DANS LE CAS
<                              OU LA DCT SERAIT DEJA LOUEE.
<                         =0 : NE PAS ATTENDRE DANS LE CAS OU
<                              LA DCT SERAIT DEJA LOUEE.
<
<
<        RESULTAT :
<                    DANS LE CAS OU (B ARGUMENT)=0,
<                    ON RENVOIE :
<                    - (B)=K : OK, DCT ALLOUEE AU DEMANDEUR,
<                         #0 (=ETALOC) : LOCATION IMPOSSIBLE DANS
<                                        DANS L'IMMEDIAT.
<
<
<        ATTENTION :
<                      'LODCT' MODIFIE EVENTUELLEMENT LA
<                    TABLE DES ASSIGNATIONS IMPLICITES
<                    'TIMPAS' SI LE 'NSP' DEMANDE EST
<                    CONTENU DANS 'TIMPAS' ; AUQUEL CAS
<                    IL EST RETIRE JUSQU'A LA DELOCATION...
<
<
         USE         L,DCT0
LOCDCT:  EQU         $
         PSR         A,Y,L,W
         BSR         ACADCT          < MISE DANS L DE L'@DCT DEMANDEE.
E132:    EQU         $
         RQST        SPHEX           <<<<PHASE CRITIQUE SUR CETTE DCT.
         LA          ETALOC          < ACCES A L'ETAT DE LOCATION
                                     < DE LA DCT DEMANDEE.
         IF          XETLOC-BITSIG,,XEIF%,
         IF          ATTENTION : LE BIT 'XETLOC' DOIT ETRE
         IF          NUL AFIN QUE LES TESTS SUR (A) SOIENT
         IF          CORRECTS (JAG, JAL,...) !!!
XEIF%:   VAL         ENDIF
         JAG         Z261            < LA DCT N'EST PAS LOUABLE, LA
                                     < DEMANDE DE LOCATION EST DONC
                                     < IGNOREE, ET B DEMEURE INCHANGE.
         JAE         E133            < OK, LA DCT DEMANDEE N'EST
                                     < PAS LOUEE.
<
< CAS OU LA DCT DEMANDEE EST DEJA LOUEE :
<
         CPZR        B
         JE          Z260            < LA LOCATION EST DEMANDEE SANS
                                     < ATTENTE, RETOUR AU DEMANDEUR.
         IF          XXNLOC-K,,XEIF%,
         IF          ATTENTION : CE QUI PRECEDE EST FAUX !!!
XEIF%:   VAL         ENDIF
<
< DEMANDE AVEC ATTENTE :
<
         LAD         SPHEX
         BSR         ARLSE
         RQST        SEMLOC          < MISE EN ATTENTE DE DELOCATION.
         JMP         E132            < OK, LA DCT VIENT D'ETRE DELOUEE,
                                     < ESSAYONS DE L'AVOIR.
<
< CAS OU LA DCT DEMANDEE EST LIBRE (OU VIENT D'ETRE LIBEREEE) :
<
E133:    EQU         $
         BSR         ACANSP          < (A)=NSP DU NOUVEAU LOCATAIRE.
         SBT         XETLOC          < POSITIONNEMENT DU BIT DE LOCATION.
         STA         ETALOC          < MAJ ETAT DE LOCATION DE LA DCT.
<
< TEST ET MISE A JOUR EVENTUELLE DE 'TIMPAS' :
<
         LR          X,Y             < (Y)='NSP' QUE L'ON LOUE...
         PSR         X
         LXI         K               < (X)=INDEX DE PARCOURS DE 'TIMPAS'...
E133X1:  EQU         $
         LA          &IMPASS         < (A)=ENTREE COURANTE DE 'TIMPASS' :
         ANDI        XXPAS0
         SLRS        XYPAS0          < (A)=ETAT INITIAL DE L'ENTREE COURANTE,
         CPR         A,Y             < EST-CE LE 'NSP' LOUE ???
         JE          E133X2          < OUI...
         ADRI        D,X             < NON, A L'ENTREE SUIVANTE,
         LR          X,A
         CPI         LIMPAS          < MAIS EXISTE-T'ELLE ???
         JNE         E133X1          < OUI...
         JMP         E133X4          < NON, DONC LE 'NSP' QUE L'ON VIENT DE
                                     < LOUER N'EST PAS DANS 'TIMPAS'...
E133X2:  EQU         $               < CAS OU LE 'NSP' QUE L'ON VIENT DE
                                     < LOUER EST DANS 'TIMPAS' :
         LA          &IMPASS
         ANDI        XXPAS1          < (A)=ETAT COURANT DE L'ENTREE COURANTE,
         IF          XYPAS1-K,,XEIF%,
         SLRS        XYPAS1
XEIF%:   VAL         ENDIF
         CPR         A,Y             < A-T'ON BIEN ETAT-INITIAL=ETAT COURANT ???
         JE          E133X3          < OUI...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      BIEN REGARDER CE QUE CONTIENT L'ENTREE
<                    COURANTE (X) DE 'TIMPASS'...
<
E133X3:  EQU         $
         IF          XXPAS0-MOCG,,XEIF%,
         IF          ATTENTION : CE QUI SUIT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         SWBR        Y,A             < MISE DU 'NSP' EN TETE,
         IF          XXPAS1-MOCD,,XEIF%,
         IF          ATTENTION : CE QUI SUIT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         PSR         X               < SAUVEGARDE DE L'INDEX D'ACCES A 'IMPASS'.
         XR          A,X             < (A)=INDEX D'ACCES,
         CPI         NOCMO*LTASGN    < DEBORDE-T'IL DE LA TABLE DES ASSIGNATIONS
                                     < DES UTILISATEURS ???
         JL          E133X5          < NON, IL FAIT DONC UN NON 'NVP'...
         ADRI        -XXXMOY*NOCMO*LTASGN+W,A
                                     < OUI, ON RENVERSE LA SITUATION EN FAISANT
                                     < LA CORRESPONDANCE SUIVANTE :
                                     < (X)=12 ==> NVP=11 ('0B, DERNIER 'NVP'
                                     <                   ASSIGNABLE),
                                     < (X)=13 ==> NVP=10,
                                     < (X)=14 ==> NVP=9.
                                     < A NOTER QUE L'ON SAUTE LE NVP=12 ('0C)
                                     < QUI CORRESPOND A LA ZONE SCRATCH DE
                                     < 'DKS' (PAR +W)...
         NGR         A,A             < (A)='NVP' ASSOCIE A (X)...
E133X5:  EQU         $
         XR          A,X             < ON A DONC ICI DANS 'X' UN 'NVP' ASSOCIE
                                     < A L'INDEX COURANT DANS 'IMPASS' :
                                     < NVP=3,  INDEX=3,
                                     < NVP=4,  INDEX=4,
                                     < NVP=5,  INDEX=5,
                                     < NVP=6,  INDEX=6,
                                     < NVP=7,  INDEX=7,
                                     < NVP=8,  INDEX=8,
                                     < NVP=9,  INDEX=9 OU 14,
                                     < NVP=10, INDEX=10 OU 13,
                                     < NVP=11, INDEX=11 OU 12.
         ORR         X,A             < CONCATENATION DU 'NSP' AVEC LE 'NVP'...
         PLR         X               < RESTAURE :
                                     < (X)=INDEX REEL DE 'TIMPASS'...
         IF          XYPAS1-K,,XEIF%,
         IF          ATENTION : TOUT CELA EST IDIOT !!!
XEIF%:   VAL         ENDIF
         ORI         XMPASI          < MISE DU MODE 'NVP',
         STA         &IMPASS         < ET MISE A JOUR DE 'TIMPASS',
                                     < CE QUI A POUR EFFET D'INHIBER
                                     < L'ACCES A CE 'NSP' PAR 'TIMPASS',
                                     < TANT QU'IL EST LOUE...
E133X4:  EQU         $
         PLR         X
<
< SORTIE DE L'AGENCE :
<
Z261:    EQU         $
         LAD         SPHEX
         BSR         ARLSE
         PLR         A,Y,L,W
         RSR
<
< RETOUR SANS ATTENTE :
<
Z260:    EQU         $
         LR          A,B             < ON RENVOIE (B)=ETALOC#0 AU
                                     < DEMANDEUR DE LOCATION POUR
                                     < LUI SIGNIFIER LA LOCATION
                                     < IMPOSSIBLE DANS L'IMMEDIAT.
         JMP         Z261            < RETOUR IMMEDIAT.
         PAGE
<
<
<        D E L O C A T I O N   D ' U N E   D C T  :
<
<
<        ARGUMENT :
<                    - (X)=NSP DE LA DCT A DELOUER.
<
<
         USE         L,DCT0
DELDCT:  EQU         $
         PSR         A,Y,L,W
         BSR         ACADCT          < CALCUL DE @DCT.
         RQST        SPHEX           <<<<PHASE CRITIQUE SUR CETTE DCT.
         LA          ETALOC          < ACCES A L'ETAT DE LOCATION DE LA DCT.
                                     < DCT.
         JAG         E135            < LA DCT N'EST PAS LOUABLE, LA
                                     < DEMANDE DE DELOCATION EST DONC
                                     < IGNOREE.
<
< TEST DU BIT DE LOCATION (BIT 0) :
< (=BIT DE SIGNE DE A : SI A<0, LA DCT EST LOUEE...)
<
         JAL         SYSR05          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
                                     < DCT NON LOUEE...
<
<        QUE FAIRE ???
<                      LE MIEUX PARAIT DE FAIRE : 'JMP E135'...
<
SYSR05:  EQU         $
<
< OK, LA DCT ETAIT BIEN LOUEE :
<
         BSR         ACANSP          < (A)=NSP DU DELOCATEUR.
         SBT         XETLOC          < POUR COMPATIBLITE AVEC ETALOC.
         CP          ETALOC          < LE DEMANDEUR DE DELOCATION EST-IL
                                     < BIEN LE PROPRIETAIRE...
         JE          SYSR06          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      LE MIEUX PARAIT DE FAIRE : 'JMP E135'...
<
SYSR06:  EQU         $
<
< OK, C'EST BIEN L'ANCIEN PROPRIETAIRE :
<
         STZ         ETALOC          < DELOCATION DE LA DCT.
         LR          X,A             < (A)=NSP DE LA DCT A DELOUER.
         CPI         NSPVI0          < EST-CE UNE VISU ???
         JL          E134X           < NON...
         CPI         NSPVIN          < EST-CE UNE VISU ???
         JG          E134X           < NON...
         STZ         TESTO           < OUI, ALORS ON INHIBE A PRIORI
                                     < LES TESTS DE 'TIME-OUT' ; EN EFFET,
                                     < UN UTILISATEUR A LA POSSIBILITE
                                     < D'ACTIVER LE 'TIME-OUT' SUR SA VISU
                                     < (IN/OUT), MAIS AUSSI SUR TOUTE VISU
                                     < QU'IL SE SERA ASSIGNEE ; LORS DE LA
                                     < DESASSIGNATION, IL FAUT DONC INHIBER...
E134X:   EQU         $
         LR          X,Y             < (Y)='NSP' QUE L'ON DELOUE...
         PSR         X
         LXI         K               < (X)=INDEX DE PARCOURS DE 'TIMPASS'...
E134X1:  EQU         $
         LA          &IMPASS
         ANDI        XXPAS0
         SLRS        XYPAS0          < 'NSP'/'NVP' CONTENU DANS L'ENTREE
                                     < COURANTE DE 'TIMPASS',
         CPR         A,Y             < S'AGIT-IL DU 'NSP' QUE L'ON DELOUE ???
         JE          E134X2          < OUI...
         ADRI        D,X             < NON, A L'ENTREE SUIVANTE,
         LR          X,A
         CPI         LIMPAS          < SI ELLE EXISTE...
         JNE         E134X1          < OUI...
         JMP         E134X4          < NON, RIEN A FAIRE...
E134X2:  EQU         $               < CAS OU ON A TROUVE LE 'NSP' QUE L'ON
                                     < DELOUE DANS 'TIMPASS' :
         SLLS        XYPAS0          < MISE DU 'NSP' EN TETE,
         PSR         X               < SAUVEGARDE DE L'INDEX D'ACCES A 'IMPASS'.
         XR          A,X             < (A)=INDEX D'ACCES,
         CPI         NOCMO*LTASGN    < DEBORDE-T'IL DE LA TABLE DES ASSIGNATIONS
                                     < DES UTILISATEURS ???
         JL          E134X5          < NON, IL FAIT DONC UN NON 'NVP'...
         ADRI        -XXXMOY*NOCMO*LTASGN+W,A
                                     < OUI, ON RENVERSE LA SITUATION EN FAISANT
                                     < LA CORRESPONDANCE SUIVANTE :
                                     < (X)=12 ==> NVP=11 ('0B, DERNIER 'NVP'
                                     <                   ASSIGNABLE),
                                     < (X)=13 ==> NVP=10,
                                     < (X)=14 ==> NVP=9.
                                     < A NOTER QUE L'ON SAUTE LE NVP=12 ('0C)
                                     < QUI CORRESPOND A LA ZONE SCRATCH DE
                                     < 'DKS' (PAR +W)...
         NGR         A,A             < (A)='NVP' ASSOCIE A (X)...
E134X5:  EQU         $
         XR          A,X             < ON A DONC ICI DANS 'X' UN 'NVP' ASSOCIE
                                     < A L'INDEX COURANT DANS 'IMPASS' :
                                     < NVP=3,  INDEX=3,
                                     < NVP=4,  INDEX=4,
                                     < NVP=5,  INDEX=5,
                                     < NVP=6,  INDEX=6,
                                     < NVP=7,  INDEX=7,
                                     < NVP=8,  INDEX=8,
                                     < NVP=9,  INDEX=9 OU 14,
                                     < NVP=10, INDEX=10 OU 13,
                                     < NVP=11, INDEX=11 OU 12.
         ORR         X,A             < CONCATENATION DU 'NVP',
         PLR         X               < RESTAURE :
                                     < (X)=INDEX REEL DE 'TIMPASS'...
         ORI         XMPASI          < MISE DE L'INDICATEUR 'NVP',
         CP          &IMPASS         < ET VALIDATION ???
         JE          E134X3          < OK...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      EVALUER LA DIFFERENCE !!!
<
E134X3:  EQU         $
         ANDI        XXPAS0          < NE CONSERVONS QUE LE 'NSP' EN ETAT
                                     < INITIAL,
         ORR         Y,A             < QUE L'ON REMET EN ETAT COURANT...
         STA         &IMPASS         < ET MISE A JOUR DE 'TIMPASS'...
E134X4:  EQU         $
         PLR         X
<
< DEBLOCAGE DES TACHES EN ATTENTE SUR CETTE DCT, SOIT DANS CHAND
< SOIT DANS LOCDCT :
<
E134:    EQU         $
         LA          SEMLOC
< A NOTER QUE LE 'BETA' DE SEMLOC NE PEUT JAMAIS ETRE STRICTEMENT
< POSITIF SUR 8 BITS... IL NE PEUT ETRE QUE NUL OU NEGATIF (SUR 8 BITS)...
         JAE         E135            < AUCUNE TACHE N'EST EN ATTENTE.
< CAS 'BETA'<0 :
         LAD         SEMLOC
         BSR         ARLSE           < DEBLOCAGE
         JMP         E134            < SUIVANT...
E135:    EQU         $
         LAD         SPHEX
         BSR         ARLSE
         PLR         A,Y,L,W
         RSR
         PAGE
<
<
<        H A N D L E R   G E N E R A L   R E E N T R A N T  :
<
<
<        DEFINITION :
<                      'HANDLR' EST UN MODULE
<                    REENTRANT DEFINISSANT CE QUE
<                    L'ON A APPELE "PROLOGUE"-"EPILOGUE"
<                    DES TACHES, ET QUI CORRESPOND EN
<                    GROS A LA PARTIE FIXE DES 'DCT'.
<                      SON ROLE PRINCIPAL, ET DE PRENDRE
<                    LA DEMANDE DE TETE DE LA FILE D'AT-
<                    TENTE, DE LANCER SON TRAITEMENT PAR
<                    LE MODULE SPECIFIQUE 'ES', PUIS A
<                    ENTREPRENDRE UNE ACTION DE FIN DE
<                    SERVICE (EN PARTICULIER DECHAINAGE
<                    DE LA DEMANDE DE TETE...).
<
<
<        NOTAS IMPORTANTS :
<                    1 - LES PHASES CRITIQUES ENTRE
<                    TACHES SOFTWARES ET TACHES HARDWARES
<                    NE POURRONT ETRE EXCLUES QUE PAR
<                    MASCAGE DES INTERRUPTIONS, PUIS-
<                    QU'UNE TACHE HARDWARE NE PEUT
<                    UTILISER LES 'P-OP' ('RQST' ET
<                    'WAIT') SUR SEMAPHORES.
<                    2 - LES ATTENTES D'INTERRUPTIONS
<                    DE FIN D'ECHANGE (POUR LES TACHES
<                    PERIPHERIQUES) SONT A LA CHARGE
<                    DES MODULES SPECIFIQUES RELAYES
<                    PAR 'ES'.
<
<
<        ARGUMENT :
<                    (L)=ADRESSE DE LA 'DCT' ASSOCIEE.
<
<
         USE         L,DCT0
         USE         W,DEM0
HANDLR:  EQU         $
<
<        T E S T   D E   D E S A R M E M E N T  :
<
<        PHILOSOPHIE :
<                      ON A LA POSSIBILITE DE DESARMER
<                    UN HANDLER A SON POINT D'ENTREE,
<                    AVANT TOUTE OPERATION FAISANT
<                    INTERVENIR SON NIVEAU ; ON PEUT
<                    DONC AINSI PERMUTER LE NIVEAU DE 2
<                    HANDLERS EN POSITIONNANT LE BIT0
<                    DE LEUR SPHEX RESPECTIF. EN EFFET
<                    LA PERMUTATION DES NIVEAUX NE PEUT
<                    SE FAIRE LORSQUE LES TACHES SONT DEJA
<                    BLOQUEES SUR DES SEMAPHORES.
<                      POUR SAVOIR SI UN HANDLER S'EST
<                    DESARME, IL SUFFIT DE REGARDER
<                    SON REGISTRE 'P' DANS SA DCT ; IL
<                    DOIT ALORS POINTER SUR LE 'QUIT'+1.
<
         PSR         A
         LA          BITSEM
         TBT         B0SPHX          < TEST DU "BIT0(SPHEX)"
         PLR         A
         JNC         Z702            < CAS DU FONCTIONNEMENT NORMAL.
<
<        D E S A R M E M E N T   D U   H A N D L E R  :
<
         QUIT
         JMP         HANDLR          < LORS DU REARMEMENT DU HANDLER
                                     < (EN GENERAL PAR 'NSPUP' DANS
                                     < LE HANDLER HORLOGE), ON FAIT
                                     < UN RE-RENTREE DANS LE HANDLER.
                                     < N O T A  :  ON DOIT D'ABORD
                                     < FAIRE :
                                     < BIT0(SPHEX) <-- 0, PUIS :
                                     < NSPUP <-- NSP(HANDLER) !!!!
                                     < (ET RELAI...)
<
<        F O N C T I O N N E M E N T   N O R M A L  :
<
Z702:    EQU         $
         RQST        SCHVID          < LE HANDLER SE MET EN ATTENTE DE
                                     < DE REMPLISSAGE DE CHAINE.
E204:    EQU         $
         RQST        SPHEX           <<<<PHASE CRITIQUE
         LBI         NIL-ZERO        < INITIALISATION : PAS DE DEMANDE
                                     < PRECEDENTE.
         LA          TETE            < INITIALISATION (A)=DEMANDE DE TETE.
E202:    EQU         $
         JAE         E200A           < ON A EXPLORE TOUTE LA FILE D'ATTENTE
                                     < SANS TROUVER DE DEMANDE NON
                                     < DIFFEREE, RETOURNONS ATTENDRE
                                     < UN REVEIL PAR CHAND.
                                     < A NOTER QUE CE N'EST PLUS UNE ERREUR SYST
                                     < SYSTEME...
         LR          A,W             < (W)=DEMANDE COURANTE.
         BSR         FILTRE          < LA DEMANDE COURANTE (W) EST-ELLE DIFFEREE
                                     < DIFFEREE...
         JAE         E203            < NON, LA DEMANDE N'EST APS DIFFEREE
                                     < ALLONS DONC LA TRAITER...
<
< CAS D'UNE DEMANDE DIFFEREE,
< ON LA SAUTE :
<
         LA          NEXT            < ACCES DEMANDE SUIVANTE.
         LR          W,B             < MEMORISATION DE LA DEMANDE
                                     < PRECEDENTE DANS B.
         JMP         E202
<
< TRAITEMENT DES DEMANDES NON DIFFEREES :
<
E203:    EQU         $
<
<        ON A DONC ICI :
<                    - (W)=DEMANDE COURANTE,
<                    - (B)=DEMANDE PRECEDENTE (OU 0 SI W EST LA TETE ),
<
         LA          TESTO
         PSR         A,B             < SAVE (A)='TESTO', ET (B)=ADRESSE DE LA
                                     < DEMANDE PRECEDENTE...
         LA          NSPTYP          < ACCES AU TYPE.
         SBT         ACTIF           < MEMORISATION DU FAIT QUE LA DEMANDE
                                     < EST EN COURS DE TRAITEMENT.
         RBT         TERMIN          < RAZ DU BIT 'DEMANDE TERMINEE'.
         RBT         BACT            < A PRIORI, ON FERA L'ACT DE
                                     < FIN DE SERVICE.
         STA         NSPTYP
<
<        T R A C E   D U   S Y S T E M E  :
<
         BSR         ATRACE          < (A)=NSPTYP & 'DEMANDE EN COURS DE
                                     <     TRAITEMENT'.
         PSR         A
         LAD         SPHEX
         BSR         ARLSE
<
< ON A DONC ARRIVE ICI :
<        - (W)=ADRESSE DE LA DEMANDE A TRAITER,
<        - (L)=ADRESSE DE LA 'DCT'.
<
         LA          ARGDEM+OPDEM    < (A)='OPDEM' DE LA DEMANDE,
         ANDI        MKOPDM          < DONT ON EXTRAIT LA FONCTION...
XWOR%1:  VAL         MKOPDM=K
         IF          XWOR%1-K,,XEIF%,
         SLRS        XWOR%1          < (CADRAGE EVENTUEL...)
XEIF%:   VAL         ENDIF
         LR          A,X             < (X)=FONCTION COURANTE VALIDEE,
         PLR         A               < RESTAURE : (A)='NSPTYP' DE LA
                                     < DEMANDE...
         LB          DCTFON          < (B)=LISTE DES FONCTIONS RECONNUES.
         CPZR        B               < EST-CE 'XXDCTF' ???
         JE          E560XX          < OUI, PAS DE TEST DE VALIDITE...
         IF          XXDCTF-K,,XEIF%,
         IF          ATTENTION : CE QUI PRECEDE EST IDIOT !!!
XEIF%:   VAL         ENDIF
         XR          A,X             < POUR VALIDER LA FONCTION (X)...
         CPI         FINEX           < VALIDATION SUPERIEURE ???
         JL          E203X1          < OK...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      IL Y A TROP DE FONCTIONS, IL
<                    FAUT DONC METTRE L'INDICATEUR
<                    'FINEX' AILLEURS, ET PAR EXEMPLE
<                    DANS 'BITSEM' !!!
<
E203X1:  EQU         $
         XR          A,X             < RESTAURATIONS...
         TBT         NBITMO+L,X      < LA FONCTION DEMANDEE EST-ELLE VALIDE ???
         JC          E560XX          < OUI, OK...
         STB         ETAT0           < NON, ALORS 'DCTFON' --> CODE-ERREUR !!!
         JMP         E562            < ET ON ARRETE LA...
HBNDLR:  JMP         HANDLR          < RELAI...
E200A:   JMP         E200            < RELAI...
E204A:   JMP         E204            < RELAI...
E560XX:  EQU         $
E560X:   EQU         $
         LX          NTRIES          < CHARGEMENT DANS X DU NOMBRE
                                     < D'ESSAIS MAX SUR LE HANDLER.
         CPZR        X               < ON PEUT EN FAISANT NTRIES=K,
                                     < INHIBER TEMPORAIREMENT UN
                                     < SERVICE ; LE HANDLER SPECOIFIQUE
                                     < N'EST PAS APPELE DANS CE CAS.
         JE          E562            < LE SERVICE EST INHIBE, PAS
                                     < D'APPEL DU HANDLER SPECOFIQUE.
         JG          SYSR07          < OK, PAS D'INHIBITION.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      PEUT ETRE 'JMP E560X', AU CAS
<                    OU 'NTRIES' AURAIT ETE MODIFIE
<                    A LA MAIN...
<
SYSR07:  EQU         $
<
<        G E N E R A T I O N   D E   ( S L O, S L E )   P A R
<        R A P P O R T   A   L A   T A C H E   D E M A N D E U S E  :
<
         PSR         A,B
         LA          DCTFUP
         CPI         NOSOSE          < DOIT-ON INITIALISER (SLO,SLE) EN
                                     < FONCTION DE LA DEMANDE ARGUMENT ???
         RDOE
         LR          A,Y             < NON, A PRIORI, ON MEMORISE LE 'SLO'
                                     < INITIAL DANS 'Y'...
         LRM         A
         WORD        XMDSLO
         AND         ARGDEM+OPDEM    < (A)=NUMERO DE PAGE DE 32K NON CADRE...
         JE          E560X1          < ET BIEN NON, IL NE FAUT PAS TOUCHER
                                     < A (SLO,SLE)...
                                     < (A NOTER QUE 'A' ET 'Y' SONT BONS...)
         PSR         A               < SAUVEGARDE DU NUMERO DE PAGE DE 32K...
         SLRS        XDDSLO          < (A)=NUMERO DE LA PAGE DE 32K A LAQUELLE
                                     <     APPARTIENT LE 'SLO' DE L'APPELANT,
         LR          A,B
         ADRI        ASLO32,B        < ET GENERATION DANS 'B' D'UN NUMERO
                                     < DE PAGE DE 32K POUR UN 'SLE', TEL QUE
                                     < LA DISTANCE (SLE)-(SLO) SOIT MAXIMALE...
         SLLD        XSLO32          < CONVERSION DE 'A' ET 'B' EN DES
                                     < ADRESSES DE FADR-MOTS,
         ADRI        -E,B            < AINSI, LE COUPLE (SLO,SLE) EST MAXIMAL...
         WOE                         < ET AINSI, ON INITIALISE 'SLO' ET 'SLE',
                                     < EN FONCTION DU 'SLO' DU DEMANDEUR...
         LR          A,Y             < (Y)=SAUVEGARDE DU 'SLO' QUE L'ON VIENT
                                     < DE GENERER...
         PLR         A               < RESTAURE : (A)=NUMERO DE PAGE DE 32K,
E560X1:  EQU         $
         EOR         ARGDEM+OPDEM    < QUE L'O SUPPRIME,
         STA         ARGDEM+OPDEM    < EN EFFET, CERTAINS HANDLERS UTILISENT
                                     < 'OPDEM' COMME INDEX !!!
         PLR         A,B
<
<        B O U C L E   D ' I T E R A T I O N   D U   S E R V I C E  :
<
E560:    EQU         $
         PSR         X               < & SAVE IT...
<
<        P R E P A R A T I O N   D E S   T I M E D   O U T  :
<
         LR          A,B             < (B)=SAVE LE 'NSPTYP',
         LA          TESTO           < (A)=VALEUR INITIALE DU DECOMPTEUR DE
                                     <     TIME-OUT,
         JAE         Z1260Y          < OK, PAS DE TEST DE TIME OUT...
         JAG         Z1260A          < OK, TIME OUT NORMAL...
         NGR         A,A             < ON PREND LA VALEUR ABSOLUE DE CE DETEC-
                                     < TEUR POSITIONNE PAR 'CHAND' ALORS QUE
                                     < CETTE DEMANDE DE TETE N'ETAIT PAS ENCORE
                                     < ACTIVE...
Z1260A:  EQU         $
         CPI         W               < LE DECOMPTEUR EST-IL VALIDE ???
         JG          Z1260X          < OUI, IL FAUT QU'IL SOIT STRICTEMENT
                                     < SUPERIEUR A 1, CAR SINON, UNE INTER-
                                     < RUPTION D'HORLOGE VICIEUSE POURRAIT
                                     < FAIRE CROIRE A UN FAUX TIME-OUT...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      MODIFIER LA VALEUR INITIALE 'A', AINSI QUE
<        DANS LA DCT EN CAUSE...
<
Z1260X:  EQU         $
         STA         TIMOUT          < INITIALISATION DU DECOMPTEUR COURANT.
Z1260Y:  EQU         $
         XR          A,B             < RESTAURE 'A' ET 'B'...
<
<
<        E X E C U T I O N   D U   S E R V I C E  :
<
<
         PSR         Y               < ET ON SAUVEGARDE LE 'SLO'... (POUR DES
                                     < VERIFICATIONS ULTERIEURES).
<
< EXECUTION DU SERVICE PROPREMENT DIT :
<
<        ON A ICI :
<                    (A)=NSPTYP,
<                    (Y)=SLO (EMPILE AUSSI...).
<
         BSR         ES              < APPEL DU HANDLER SPECIFIQUE.
<
< VALIDATION DU (SLO,SLE) EN RETOUR :
<
         PLR         Y               < RESTAURE : (Y)='SLO' POSITIONNE EN DEBUT
                                     < DE SERVICE...
         PSR         A,B
         RDOE                        < ACCES A (A,B)=(SLO,SLE) EN FIN DE SERVICE
         CPR         A,Y             < SLO(AVANT) VAUT-IL SLO(APRES) ???
         JNE         Z1260N          < NON, IL Y A QUELQUE CHOSE !!!
         ADRI        E,B
         SLRD        XSLO32          < RECONVERSION EN NUMERO DE PAGE DE 32K,
         SBR         B,A             < (A)=(SLO)-(SLE) EN NUMERO DE PAGE DE 32K,
         CPI         -ASLO32         < EST-CE BIEN UN COUPLE (SLO,SLE)
                                     < GENERE PAR PAGE DE 32K ???
         JE          Z1260M          < OUI, OK...
Z1260N:  EQU         $
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE OU (SLO,SLE) ONT ETE MODIFIES
<                    SANS ETRE RESTAURES !!!
<
         LR          Y,A             < (A)='SLO' ATTENDU,
         SLRS        XSLO32          < RECONVERSION EN UN NUMERO DE PAGE
         LR          A,B             < DE 32K,
         ADRI        ASLO32,B        < ET GENERATION D'UN FUTUR 'SLE' MAX...
         SLLD        XSLO32          < MISE AU FORMAT FADR-MOTS...
         ADRI        -E,B            < (A,B)=COUPLE (SLO,SLE) MAXIMUM,
         WOE                         < ET ON RESTAURE (SLO,SLE)... A NOTER
                                     < QUE L'ON NE PEUT UTILISER 'OPDEM' POUR
                                     < CELA, CAR IL EST DES HANDLERS QUI LE
                                     < MODIFIE ('VIS', 'SGN',...).
Z1260M:  EQU         $
         PLR         A,B
<
<        I T E R A T I O N   E V E N T U E L L E  :
<
         PLR         X               < RESTAURE NBRE D'ESSAIS RESTANT
                                     < EVENTUELLEMENT A FAIRE.
         JDX         E561            < ALLONS VOIR SI L'ON DOIT FAIRE
                                     < LES ESSAIS RESTANT.
E562:    EQU         $
<
<        LORSQU'ON ARRIVE ICI, C'EST QUE
<        TOUS LES ESSAIS (1 EN GENERAL) ONT ETE TENTES.
<
         RQST        SPHEX           <<<<PHASE CRITIQUE
         LRM         A
         WORD        XMDSLO)MMOT
         AND         ARGDEM+OPDEM
         STA         ARGDEM+OPDEM    < ON CLEAR 'XMDSLO' AFIN DE VERIFIER
                                     < QUE CE CHAMP N'EST PAS UTILISE AILLEURS !
         LA          NSPTYP
         SBT         TERMIN          < INDIQUONS AINSI QUE LA DEMANDE
                                     < EST EXECUTEE.
         RBT         ACTIF           < LA DEMANDE N'EST PLUS EN COURS
                                     < DE TRAITEMENT.
         RBT         ENFILE          < LA DEMANDE N')ST PLUS EN
                                     < FILE D'ATTENTE.
         STA         NSPTYP
<
<        T R A C E   D U   S Y S T E M E  :
<
         BSR         ATRACE          < (A)=NSPTYP & 'DEMANDE TERMINEE'.
<
< DELETE DE LA DEMANDE COURANTE (W) :
<
         PLR         A,B             < RESTAURE : (A)='TESTO', ET (B)=ADRESSE DE
                                     < LA DEMANDE PRECEDENTE...
         JAGE        E195X           < CAS DE 'TESTO' NORMAL...
         LAI         K               < CAS D'UN 'TESTO' POSITIONNE PAR 'CHAND'
                                     < ET QUI DEMANDE UNE REINITIALISATION...
E195X:   EQU         $
         STA         TESTO           < RESTAURATION DE 'TESTO'.
         LA          NEXT            < ACCES DEMANDE SUIVANTE (A).
         STZ         NEXT            < RAZ DU CHAINAGE POUR FAVORISER
                                     < LA DETECTION DES ERREURS
                                     < DU SYSTEME (CF. CHAND).
         CPZR        B               < Y-AVAIT-IL UNE DEMANDE PRECEDENTE...
         JNE         E195            < OUI.
<
< CAS OU LA DEMANDE COURANTE
< ETAIT EN TETE :
<
         STA         TETE            < ALORS, LA DEMANDE SUIVANTE (A)
                                     < DEVIENT LA DEMANDE DE TETE.
E196:    EQU         $
         JANE        E197            < IL Y AVAIT EFFECTIVEMENT UNE
                                     < DEMANDE SUIVANTE.
<
< CAS OU LA DEMANDE COURANTE (W) ETAIT EN QUEUE (PAS DE SUIVANTE) :
<
         STB         QUEUE           < LA DEMANDE PRECEDENTE (B) DEVIENT
                                     < LA DEMANDE DE QUEUE.
E197:    EQU         $
         IF          OACTIV-EXIST,XEIF%8,,XEIF%8
<
< VISUALISATION DE LA DECONNEXION :
<
         PSR         X,Y
         LA          AACTIV          < (A)=RELAI D'ACCES A 'ACTIV' :
         TBT         XACTIV          < 'ACTIV' EST-IL ACTIF ???
         JNC         Z400X1          < NON, INUTILE DE L'APPELER...
         LBY         WEIO            < OUI :
         ADRI        -NSNSP0,A       < (A)='NSP' DU DEMANDEUR (OU EMETTEUR),
                                     < (A NOTER QUE LE SEMAPHORE CONTIENT DANS
                                     < SON OCTET GAUCHE LE 'NS' DE LA TACHE
                                     < DEMANDEUSE MIS SOIT PAR 'CHAND', SOIT
                                     < LA MICRO-MACHINE EN EXECUTANT UN
                                     < 'WAIT' DESSUS...
         LR          A,X             < (X)='NSP' DU DEMANDEUR...
         LA          &NS             < (A)='NS' DE LA TACHE DEMANDEE,
         ADRI        -NSNSP0,A       < (A)='NSP' DU DEMANDE (OU RECEPTEUR),
         SWBR        A,A
         ORR         A,X             < (X)=(RECEPTEUR/EMETTEUR),
         LYI         XNGOUT          < (Y)=NIVEAU DE GRIS DE DECONNEXION,
         BSR         AACTIV          < ET VISUALISATION DE LA DECONNEXION...
Z400X1:  EQU         $
         PLR         X,Y
XEIF%8:  VAL         ENDIF
<
< ACTION SUR LE DEMANDEUR :
<
         LA          NSPTYP
         TBT         BACT            < L'ACT DE FIN DE SERVICE DOIT-IL
                                     < ETRE FAIT ?????
         JC          Z400            < NON, ON LAISSE DON EVENTUELLEMENT
                                     < LE DEMANDEUR EN ATTENTE.
         BSR         ARVDEM          < RENVOI DES CONDITIONS ET
                                     < REVEIL EVENTUEL DU DEMANDEUR.
Z400:    EQU         $
<
< TEST DE DEBLOCAGE EVENTUEL DE DEMANDES DIFFEREEES :
<
         BSR         SFLITR
         PSR         A
         LAD         SPHEX
         BSR         ARLSE
         PLR         A
         JANE        HBNDLR          < NON, IL FAUT METTRE OU MAINTENIR
                                     < LE FILTRE.
<
< CAS OU IL N'Y A PAS OU PLUS DE FILTRAGE ; ALLONS VOIR
< S'IL Y A DES DEMANDES DIFFEREES EN ATTENTE :
<
         JMP         E204A
<
< CAS OU IL Y AVAIT UNE DEMANDE PRECEDENTE :
<
E195:    EQU         $
         LR          B,W             < (W)=DEMANDE PRECEDENTE.
         STA         NEXT            < ETABLISSONS LE CHAINAGE DE LA
                                     < DEMANDE PRECDENTE W, VERS LA
                                     < DEMANDE SUIVANTE A.
         JMP         E196
<
< CAS OU L'ON A TROUVE, SOIT UNE FILE D'ATTENTE
< VIDE, SOIT UNE FILE D'ATTENTE PLEINE DE DEMANDE DIFFEREE,
< ALORS QUE LE FILTRE EST MIS :
<
E200:    EQU         $
         LAD         SPHEX
         BSR         ARLSE
         JMP         HBNDLR          < ALLONS NOUS REMETTRE EN ATTENTE DE
                                     < DE CHAND.
<
< CAS OU IL RESTE DES ESSAIS A TENTER :
<
E561:    EQU         $
<
<        ON A ICI :
<                    (X)=NBRE D'ESSAIS RESTANT A TENTER.
<
         PSR         Y               < SAUVEGARDE DE 'Y'=(SLO)...
         BSR         FRETRY          < ROUTINE SPECIFIQUE, TESTANT
                                     < S'IL Y A LIEU DE REFAIRE
                                     < UN ESSAI (CF. CAS DES PERIPHERIQUES
                                     < EN DEFAUT,...).
         PLR         Y               < RESTAURE 'Y'=(SLO)...
         JAE         E562            < OK SI (A)=K.
         LR          X,A
         CPI         XXNTRY          < SERAIT-CE LE DERNIER ESSAI ???
         JE          E562            < OUI, ON ABANDONNE...
         LA          NSPTYP          < RESTAURE (A)=NSPTYP AVANT LE RETRY.
         JMP         E560            < TRY AGAIN.
<
<
<        C A S   D ' U N   S E U L   E S S A I  :
<
<
TRYVID:  EQU         $
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      VOIR POURQUOI 'NTRIES' NE VAUT PLUS
<                    SA BONNE VALEUR DE 'XXNTRY' !!!
<
         RSR
         PAGE
<
<
<        F I N   D E   S E R V I C E  :
<
<
<        FONCTION :
<                      CETTE ROUTINE APPELEE EN SORTIE DE HANDLR
<                    EVENTUELLEMENT (OU AILLEURS...) A A SA CHARGE
<                    DE RENVOYER DANS L'ETADEM DE LA DEMANDE,
<                    L'ETAT0 DU SERVICE ET ENSUITE DE REVEILLER
<                    EVENTUELLEMENT LE DEMANDEUR (S'IL A FAIT UN
<                    WAIT !!!).
<
<
<        ARGUMENTS :
<                    (W)=ADRESSE DEMANDE,
<                    (L)=ADRESSE DCT.
<
<
REVDEM:  EQU         $
<
< RENVOI DES CONDITIONS D'EXECUTION DE LA DEMANDE AU
< DEMANDEUR EN FIN DE SERVICE :
<
         LA          ETAT0           < ACCES A ETAT0.
         STA         ARGDEM+ETADEM   < ETAT0 EST MIS DANS LA DEMANDE
                                     < EN RETOUR A L'UTILISATEUR.
<
< REVEIL EVENTUEL DU DEMANDEUR :
<
         ACT         WEIO            < AVERTISSEMENT DU DEMANDEUR.
         RSR
         PAGE
<
<
<        T A C H E   D E   D I S P A T C H I N G
<        D E   R E V E I L   S U R   I N T E R R U P T I O N  :
<
<
<        DEFINITION :
<                      UN DISPATCHER 'DISPAT' EST
<                    ASSEZ SEMBLABLE A UNE TACHE
<                    'HANDLR', SAUF QUE 'DISPAT'
<                    NE DISPOSE PAS DE FILE D'ATTEN-
<                    TE D'ACCES A SES SERVICES ;
<                    C'EST LE SEMAPHORE 'SIT' QUI EN
<                    FAIT OFFICE : 'DISPAT' EST
<                    TOUJOURS BLOQUE DESSUS, JUSQU'A
<                    CE QU'UN DEMANDEUR VIENNE FAIRE
<                    UN 'RLSE' DESSUS...
<
<
<        ARGUMENT :
<                    (L)=ADRESSE DE LA 'DCT' ASSOCIEE.
<
<
DISPAT:  EQU         $
         RQST        SIT             < ATTENTE D'INTERRUPTION.
         CPZ         NTRIES
         JE          DISPAT          < LE REVEIL EST IGNORE (LE
                                     < DISPATCHER EST INHIBE), SI
                                     < NTRIES=K.
<
<        T R A C E   D U   S Y S T E M E  :
<
         LA          &NS
         ADRI        -NSNSP0,A       < (A)=NSP DU DISPATCHER.
         SWBR        A,A             < GENERATION D'UN NSPTYP.
         SBT         ACTIF           < ENTREE DANS 'ES'.
         BSR         ATRACE
         PSR         A               < SAVE 'NSPTYP' FICTIF DU DISPATCHER.
         BSR         ES              < APPEL D'UNE ROUTINE SPECIFIQUE
                                     < DE DISPATCHONG.
<
<        T R A C E   D U   S Y S T E M E  :
<
         PLR         A               < RESTAURE NSPTYP FICTIF.
         SBT         TERMIN
         RBT         ACTIF
         BSR         ATRACE
         JMP         DISPAT          < ALLONS ATTENDRE L'IT SUIVANTE
                                     < SUR CE COUPLEUR.
         NLS
         PAGE
<
<
<        C H I F F R A G E   D ' U N   M O T  :
<        ( O U   " M A G I C A L   M Y S T E R Y   T O U R " )
<
<
<        FONCTION :
<                      CE MODULE DEFINIT UNE
<                    TRANSFORMATION 'T' TELLE QUE
<                    T*T=1 ; ELLE PERMET DONC EN
<                    L'APPLIQUANT DE CHIFFRER UN MOT HEXA-
<                    DECIMAL, ET EN LA REAPPLIQUANT
<                    DE LE DECHIFFRER. ELLE UTILISE
<                    LA CONSTANTE MAGIQUE...
<                      D'AUTRE PART POUR DES RAISONS
<                    DE COMMODITE :
<                                    T(0)=0...
<
<
<        ARGUMENT :
<                    (A)=MOT A CHIFFRER (OU A DECHIFFRER).
<
<
<        RESULTAT :
<                    (A)=MOT CHIFFRE (OU DECHIFFRE).
<
<
CHIFRA:  EQU         $
         PSR         B,X,W           < SAUVEGARDES DIVERSES ET VARIEES...
         LR          A,B             < (B)=MOT A CHIFFRER (OU DECHIFFRER)...
         LAI         K               < ET CLEAR DE 'A'...
         LXI         NBITMO/NBITCX   < (X)=INDEX DES TOURS A FAIRE...
CHIFR1:  EQU         $
         SCLD        NBITCX          < (A)=CHIFFRE HEXA COURANT,
         LRM         W
         WORD        TCHIFR          < (W)=ADRESSE DE LA TABLE DE CHIFFRAGE,
         ADR         A,W             < (W)=ADRESSE DE L'ENTREE RELATIVE AU
                                     <     CHIFFRE COURANT QUE L'ON CODE (OU
                                     <     DECODE...),
         LA          O,W             < (A)=VALEUR CODEE DU CHIFFRE COURANT
                                     <     CADREE A GACUCHE DANS 'A' SOUS
                                     <     LA FORME 'X000, AFIN D'EVITER UN
                                     <     DECALAGE 'SLLS NBITMO-NBITCX'...
         JDX         CHIFR1          < ET AU CHIFFRE SUIVANT...
         SCRD        NBITMO-NBITCX   < (A)=MOT CHIFFRE (OU DECHIFFRE)...
         PLR         B,X,W           < RESTAURATIONS...
         RSR                         < ET RETOUR MAGIQUE...
<
<
<        T A B L E   D E   C H I F F R A G E  :
<
<
TCHIFR:  EQU         $               < TABLE DE CHIFFRAGE :
XWOR%2:  VAL         NBITMO-NBITCX
         NTRN
         DO          BASE16
         WORD        K=FCDO)MFFFF+N+BASE16-N*MAGIK/BASE16(K=FCREST>XWOR%2
         TRN
         LST



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