<        S I S   C M S 5   11
         PAGE
         PAGE
<
<
<        D C T   D U   R U N N E R   D E S   E S C L A V E S  :
<
<
         CALL        #SISP CMS5 CHECK#
         CALL        #SISP CMS5 DOL1#
DCTRUN:  EQU         $
PSTRUN:  WORD        K;K;NSPACT;K;COM+DEPCS;DCTRUN;XXDISW;PILRUN;DISPAT;SMST
         WORD        SO;SE
       #@ASCI        " RUN"          < #SISP CMS5 ASCI#
         WORD        XIOID0          < IOID.
         WORD        NFILTR          < FILTRE.
         WORD        FILTRS          < S-FILTRE.
         WORD        XTALOC          < ETALOC.
         WORD        XXLOC0          < SEMLOC.
         DZS         LSEM
         WORD        NIL
         WORD        NIL
         WORD        XXCHV0
         DZS         LSEM
         WORD        XXSIT0          < SIT.
         DZS         LSEM
         WORD        SPHEX0          < SPHEX.
         DZS         LSEM
         WORD        RUNESC          < ES.
         WORD        NIL
         WORD        K;K             < ETAT.
         WORD        XBITS0          < BITSEM.
         WORD        XXNTRY;TRYVID
         WORD        K               < HSTATS.
         WORD        XTESTO          < TESTO.
         WORD        XDDCTF          < 'DCT' NON CONNECTABLE...
         WORD        XFONBA          < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< ZONE VARIABLE :
<
VARRUN:  EQU         $
         IF          VARRUN-DCTRUN-DCTFIX,,XEIF%,
         IF          ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
<
< PILE DU RUNNER :
<
         CALL        #SISP CMS5 DOL2#
PILRUN:  EQU         $-DEPILE
XWPILE:  VAL         LPILED+5
         CALL        #SISP CMS5 GENPIL2#
         CALL        #SISP CMS5 CHECK#
         PAGE
<
<
<        R U N N E R   D E S   E S C L A V E S  :
<
<
<        FONCTION :
<                      CE DISPATCHER A A SA CHARGE
<                    LA MISE A JOUR DE 'DCTSY' AVEC
<                    L'ADRESSE DE LA 'DCTESC' DE
<                    L'HEUREUX ELU, PUIS L'ARMEMENT
<                    DU NIVEAU ESCLAVE 'NSPACT'.
<
<
<        A T T E N T I O N  :
<                      POUR QUE TOUT FONCTIONNE
<                    CORRECTEMENT, IL FAUT RESPECTER
<                    LA HIERARCHIE SUIVANTE :
<
<                                    NSPRUN < NSPACT < NSPSCH...
<
<
<        ARGUMENT :
<                    (X)=NSPACT.
<
<
RUNESC:  EQU         $
<
< HDLSCH VIENT DE SYNCHRONISER RUNESC PAR SIT :
<
         LY          IBHRUN          < RECUPERATION DE LA VALEUR
                                     < INITIALE DE BHRUN FONCTION DE
                                     < LA CHARGE DU SYSTEME.
         STY         BHRUN           < BHRUN=1 SI NUSERA=K OU 1,
                                     < BHRUN=K SI NUSERA>1, EN VUE DE
                                     < LA PROCHAINE ET EVENTUELLE
                                     < IT HORLOGE SUR L'ESCLAVE QUE
                                     < L'ON FAIT RUNNER.
         LA          ARUN            < RECUPERATION DE @DCT-ESCLAVE A
                                     < FAIRE RUNNER.
         STA         &ADCTSY         < MISE A JOUR DE DCTSY.
         ARM         NSNSP0+NSPACT   < ARMEMENT DU NIVEAU ESCLAVE,
                                     < QUI NE PREND PAS LA MAIN IMMEDIA-
                                     < TEMENT (CF. LES PRIORITES).
         RSR                         < ALLONS PASSER LA MAIN A L'ESCLAVE.
         PAGE
<
<
<        D C T   S C H E D U L E R   E S C L A V E S  :
<
<
         CALL        #SISP CMS5 CHECK#
         CALL        #SISP CMS5 DOL1#
DCTSCH:  EQU         $
PSTSCH:  WORD        K;K;K;K;COM+DEPCS;DCTSCH;NIL;PILSCH;HANDLR;SMST;SO;SE
       #@ASCI        " SCH"          < #SISP CMS5 ASCI#
         WORD        XIOID0          < IOID.
         WORD        NFILTR          < FILTRE.
         WORD        FILTRS          < POUR LE SCHEDULER, ON EST OBLIGE
                                     < DE METTRE SYSTEMATIQUEMENT LE
                                     < FILTRE, EN EFFET SA FILE
                                     < D'ATTENTE EST PRESQUE TOUJOURS
                                     < PLEINE, ET SI ON LA VIDE SANS
                                     < FILTRER, ON SAUTE DES
                                     < 'RQST SCHVID', ET RAPIDEMENT
                                     < LE 'BETA' DE SCHVID DEVIENT
                                     < NEGATIF, EN PASSANT PAR '+INFINI'
                                     < CE QUI BLOQUE DONC LE SYSTEME...
         WORD        XTALOC          < ETALOC.
         WORD        XXLOC0          < SEMLOC.
         DZS         LSEM
         WORD        NIL             < TETE.
         WORD        NIL             < QUEUE.
         WORD        XXCHV0          < SCHVID
         DZS         LSEM
         WORD        XXSIT0          < SIT.
         DZS         LSEM
         WORD        SPHEX0          < SPHEX.
         DZS         LSEM
         WORD        HDLSCH          < SCHEDULER DES ESCLAVES.
         WORD        NIL             < PAS DE RIT.
         WORD        K;K             < ETAT.
XBITS1:: VAL         '0001           < SEUIL POUR 'SCH' :
         WORD        XBITS1          < BITSEM.
         WORD        XXNTRY;TRYVID   < NTRIES-FRTRY.
         WORD        K               < HSTATS.
         WORD        XTESTO          < TESTO.
         WORD        XXDCTF          < 'DCT' NON CONNECTABLE...
         WORD        XFONBA          < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< ZONE VARIABLE :
<
VARSCH:  EQU         $
         IF          VARSCH-DCTSCH-DCTFIX,,XEIF%,
         IF          ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
<
< OUTILS DE SYNCHRONISATION :
<
         WORD        DCTSVC+LSIT     < SYNCHRONISATION DE HDLSCH
                                     < ET DU RECEPTEUR DES SVC.
SESVC::  VAL         $-D-VARSCH
         WORD        DCTRUN+LSIT     < SYNCHRONISATION DE HDLSCH
                                     < ET DU RUNNER DES ESCLAVES.
SRUN::   VAL         $-D-VARSCH
<
< DEFINITION DE QUELQUES 'CDA' :
<
         WORD        OCDA
SCHCDO:: VAL         $-D-VARSCH      < ACCES A L'ORIGINE DE LA 'CDA',
         WORD        ECDA
SCHCDE:: VAL         $-D-VARSCH      < ACCES A LA FIN DE LA 'CDA'.
         WORD        MEMTV0
SCHCDI:: VAL         $-D-VARSCH      < POUR SAVOIR SI L'UTILISATEUR ACCEDE
                                     < A LA "CDA-IMAGE"...
         WORD        AOCDA2
SCHCDA:: VAL         $-D-VARSCH      < POUR SAVOIR SI L'UTILISATEUR ACCEDE
                                     < A LA "CDA-PRIVEE", ON REGARDERA S'IL
                                     < N'ACCEDE NI A LA "CDA-IMAGE", NI A
                                     < LA "CDA-COMMUNE"...
ACDAG:   WORD        XCDAGL
ACDAG1:  EQU         ACDAG           < A CAUSE
ACDAG2:  EQU         ACDAG           < DE L'ASSEMBLEUR...
SACDAG:: VAL         $-D-VARSCH      < INDICATEUR PERMETTANT DE SAVOIR SI LA
                                     < 'CDA-COMMUNE PRIVEE' EST LIBRE (ACDAG=
                                     < XCDAGL), OU BIEN OCCUPEE (ACDAG=XCDAGO).
ACDAJ:   WORD        XCDAJL
ACDAJ1:  EQU         ACDAJ           < A CAUSE
ACDAJ2:  EQU         ACDAJ           < DE
ACDAJ3:  EQU         ACDAJ           < L'ASSEMBLEUR...
ACDAJ4:  EQU         ACDAJ           < IDEM...
ACDAJ5:  EQU         ACDAJ           < IDEM...
SACDAJ:: VAL         $-D-VARSCH      < INDICATEUR PERMETTANT DE SAVOIR SI LA
                                     < 'CDA' IMAGE MOYENNE-DEFINITION EST
                                     < LIBRE (ACDAJ=XCDAJL) OU BIEN OCCUPEE
                                     < (ACDAJ=XCDAJO).
<
< DONNEES POUR L'UTILISATEUR :
<
         WORD        RETSVC
RETSCH:: VAL         $-D-VARSCH      < VALEUR DU REGISTRE 'P' DE L'UTILISATEUR
                                     < LORSQUE CELUI-CI A EXECUTE UN 'SVC'...
<
< PILE DU SCHEDULER :
<
         CALL        #SISP CMS5 DOL2#
PILSCH:  EQU         $-DEPILE
XWPILE:  VAL         LPILEH+8
         CALL        #SISP CMS5 GENPIL2#
         CALL        #SISP CMS5 CHECK#
         PAGE
<
<
<        S C H E D U L E R   D E S   E S C L A V E S  :
<
<
<        PHILOSOPHIE :
<                      LE SCHEDULER EST UN HANDLER COMME
<                    LES AUTRES ; LORSQU'UN ESCLAVE EST
<                    REACTIVABLE (EN FIN DE SERVICE,
<                    QUELQU'IL SOIT), LE HANDLER DE SER-
<                    VICE QUI LUI ETAIT ASSOCIE (SUITE
<                    A UN 'SVC' , OU UNE INTERRUPTION
<                    D'HORLOGE) DEPOSE PAR 'CHAND' UNE
<                    DEMANDE DE SCHEDULING POUR CET
<                    UTILISATEUR. LE SCHEDULER PRO-
<                    VOQUE ENSUITE L'ACTIVATION DE
<                    L'UTILISATEUR DE TETE DE SA FILE
<                    D'ATTENTE ; AU PREALABLE, IL
<                    POSITIONNE LES MOTS 'AOCDA' ET
<                    'AECDA' ASSOCIE A CET UTILISATEUR,
<                    EN PRENANT EN COMPTE LES PRO-
<                    BLEMES D'EXCLUSION...
<
<
<        ARGUMENT :
<                    (A)=NSPTYP DE LA DEMANDE DE SCHEDULING,
<                        EN MODE PRIRITAIRE OU NON PRIORITAIRE,
<                    (W)=ADRESSE DEMANDE SCHEDULING (DONC @DCT(ESCLAVE)
<                        A UNE CONSTANTE DE TRANSLATION PRES).
<
<
         USE         W,DEM0
         USE         L,DCT0
HDLSCH:  EQU         $
         RBT         PRIO            < RAZ DU BIT PRIORITAIRE DE
                                     < LA DEMANDE A PRIORI.
         STA         NSPTYP          < MAJ DU NSPTYP DE LA DEMANDE.
         IC          COMPT1-DEMSCH,W < COMPTABILISATION DES DEMANDES
                                     < DE SCHEDULING DE CET ESCLAVE.
<
< MISE EN PLACE DE LA 'CDA' :
<
         LA          CDESCO-DEMSCH,W < (A)=ORIGINE DE LA "CDA" UTILISATEUR,
         LB          CDESCE-DEMSCH,W < (B)=EXTREMITE DE LA "CDA" UTILISATEUR.
ACCBJ:  @
XWOR%1:  VAL         KOLF=FMASK+KOLTES=FVAL
XWOR%1:  VAL         KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2:  VAL         KOLTED=FMASK+KOL0=FVAL
XWOR%2:  VAL         KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3:  VAL         XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE 'ACCBJ'...
XWOR%4:  VAL         MSYMBI=FMASK+KOL0=FVAL
EACCBJ:: VAL         MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
         IF          EACCBJ=FCSYMT-SYMBX,XEIF%9,,XEIF%9
         TBT         BMCDAJ          < EST-CE LA 'CDAJ' ???
         JC          Z730X8          < OUI...
XEIF%9:  VAL         ENDIF
         CP          VAR+SCHCDI      < NON, ALORS VEUT-ON LA 'CDAI' ???
         JE          Z730X3          < OUI, ACCES A LA "CDA-IMAGE", DONC
                                     < REGARDER DE PRES LE 'DKU'...
         CP          VAR+SCHCDA      < NON, ALORS ACCEDE-T'IL A LA "CDA-COMMUNE"
         JNE         Z730X1          < NON, PAS DE PROBLEMES...
                                     < (C'EST DONC LA "CDAP")
                                     < NOTA : IL EST POSSIBLE QUE LA CARTE
                                     < "!CDAP" AIT ETE FRAPPEE JUSTE AVANT
                                     < ALORS QUE L'UTILISATEUR ETAIT DONC
                                     < SWAPPE OUT ET PEUT-ETRE DE PLUS SUR
                                     < 'PR1' ; MAIS CELA N'A AUCUNE IMPORTANCE
                                     < CAR EN EFFET, LORS DU PROCHAIN SWAPPING
                                     < OUT ON TESTERA L'UTILISATION DE LA "CDAP"
                                     < ET ON FORCERA L'UTILISATION DE 'DKS'...
<
< CAS DE "!CDA" OU "!CDAG" :
<
         CPZ         VAR+SACDAG      < LA 'CDA-COMMUNE' EST-ELLE PRIVATISEE ???
         JE          Z730X1          < NON, OK PAS DE PROBLEMES...
         IF          XCDAGL-K,,XEIF%,
         IF          ATTENTION : LE TEST QUI PRECEDE EST IDIOT !!!
XEIF%:   VAL         ENDIF
         PSR         A
         LA          IDDESC-DEMSCH,W < OUI,
         TBT         IDESC5          < EST-CE L'UTILISATEUR COURANT QUI A FAIT
                                     < "!CDAG" ???
         PLR         A
         JNC         Z730X4          < NON, DONC LA 'CDA-COMMUNE' EST INACCES-
                                     < SIBLE POUR LUI (C'EST UN COMBLE !!!).
         JMP         Z730X1          < OUI, IL PEUT DONC Y ACCEDER...
         IF          EACCBJ=FCSYMT-SYMBX,XEIF%9,,XEIF%9
<
< CAS DE !CDAJ :
<
Z730X8:  EQU         $
         PSR         A,X
         LXI         PROMST
         LA          &SYSPRO
         LR          A,Y             < ET SAVE :
                                     < (Y)=NUMERO DU PROCESSEUR MAITRE...
         LXI         PROIOP
         CP          &SYSPRO         < EST-CE QUE LE PROCESSEUR MAITRE EST
                                     < AUSSI CELUI D'ENTREES-SORTIES ???
         PLR         A,X
         JE          Z730X4          < OUI, ALORS L'ACCES A LA 'CDAJ' EST
                                     < INTERDIT POUR EVITER DES ERREURS DE
                                     < CADENCE SUR LES CANAUX D'ENTREES-SORTIES
                                     < DUES AU BLOCAGE DU SOLAR MAITRE LORS
                                     < DIALOGUES AVEC LE '68000'...
         IF          YROMST-K,,XEIF%,
         IF          ATTENTION : LE TEST SUIVANT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         CPZR        Y               < LE PROCESSEUR MAITRE EST-IL BIEN LE
                                     < PROCESSEUR 0 ('YROMST') ???
         JNE         Z730X4          < NON, LA 'CDAJ' NE PEUT ETRE ATTEINTE PAR
                                     < UN AUTRE PROCESSEUR QUE LE PROCESSEUR 0 !
         JMP         Z730X1          < NON, ALORS ON PEUT SE PERMETTRE DE BLO-
                                     < QUER LE MAITRE DE TEMPS EN TEMPS...
XEIF%9:  VAL         ENDIF
<
< CAS DE !CDAI :
<
Z730X7:  EQU         $               < CAS OU 'DKU' N'EST PAS ASSIGNE...
         PSR         A               < SAUVEGARDE DE 'OCDA'...
         LA          LUDKU-DEMSCH,W  < (A)=LISTE DES GROUPES DE CYLINDRES
                                     <     APPROPRIES PAR L'UTILISATEUR,
         EORR        X,A             < ON FAIT UN.EOR. AVEC LA LISTE DES
                                     < GROUPES APPROPRIES (X) POUR 'DKU'...
         TBT         BLDKTV          < TEST DU BIT PROTEGEANT LE DERNIER GROUPE
                                     < ET LA TV :
         PLR         A               < RESTAURATION DE 'OCDA'...
         JC          Z730X4          < LSDK=1 ET LUDKU=0 : ACCES INTERDIT ;
                                     < (A NOTER QUE LSDK=0 ET LUDKU=1 EST UN
                                     < CAS INEXISTANT...)
         JMP         Z730X1          < LSDK=LUDKU (=0 OU =1) : L'ACCES EST LIBRE
                                     < POUR TOUT LE MONDE (=0), OU RESERVE POUR
                                     < CET UTILISATEUR (=1), "!CDAI" PASSE
                                     < DONC...
Z730X3:  EQU         $
         PSR         A,L
         LXI         NSPDKU
         BSR         ACADCT          < (L)=ADRESSE DE 'DCTDKU',
         WORD        LXLSDK          < (X)=LISTE GENERALE DES GROUPES DE CYLIN-
                                     <     DRES APPROPRIES DE 'DKU' (IL S'AGIT
                                     <     D'UNE INSTRUCTION "EN AVANT", CAR
                                     <     'LSDK' N'EST PAS ENCORE DEFINI...).
         CPZ         ETALOC          < 'DKU' EST-IL LOUE ???
         PLR         A,L
         IF          XETLOC-BITSIG,,XEIF%,
         IF          ATTENTION : LE TEST SUIVANT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         JGE         Z730X7          < NON, DONC ALLONS VOIR SI L'ACCES A LA
                                     < TELEVISION N'EST PAS SEUL PROTEGE PAR
                                     < UNE COMMANDE "!Q..." ???
         LXI         NOCMO*LTASGN-Z  < OUI, 'DKU' EST LOUE ; REGARDONS SI
                                     < L'UTILISATEUR QUE L'ON ACTIVE EN EST
                                     < L'HEUREUX LOCATAIRE...
Z730X2:  EQU         $
         PSR         A
         LBY         &TASSGN-DEMSCH,W
         CPI         NSPDKU          < ALORS ???
         PLR         A
         JE          Z730X1          < OUI, ALORS SON "!CDAI" EST ACCEPTE...
         JDX         Z730X2          < ON NE SAIT PAS... AU NVP SUIVANT...
<
< GENERATION DE LA DEFINITION DE LA 'CDA' :
< (ACCESSIBLE EN 'Z730X1', ET
< INACCESSIBLE EN 'Z730X4')
<
Z730X4:  EQU         $
         XR          A,B             < ET BIEN NON, DANS SES CONDITIONS,
                                     < ON REFUSE SON "!CDA..." PROVISOIREMENT,
                                     < EN PERMUTANT LES ADRESSES DE DEBUT ET
                                     < FIN, EN PROVOQUANT AINSI UNE TRAPPE
                                     < S'IL TENTE D'Y ACCEDER...
                                     < DE MEME LORS DE !CDAP ALORS QU'IL
                                     < EST SWAPPE SUR 'PR1'...
Z730X1:  EQU         $
         STA         &VAR+SCHCDO     < MISE EN PLACE DE 'OCDA',
         STB         &VAR+SCHCDE     < ET DE 'ECDA'...
<
< PETIT TRUANDAGE SUR LE REGSITRE
< 'S' AU CAS OU L'UTILISATEUR
< SORTIRAIT DU 'DEBUG' :
<
         LA          PSTESC-DEMSCH+RS,W
         TBT         MS              < L'UTILSATEUR EST-IL EN MODE MAITRE ???
                                     < C'EST-A-DIRE VIENT-IL D'UN 'SVC' ???
         JC          Z730X6          < OUI, MAITRE, RIEN A FAIRE...
         RBT         SVCS            < NON, IL EST EN MODE ESCLAVE ; ON RAZE
                                     < DONC A PRIORI 'SVCS' AU CAS OU SUITE
                                     < A UN 'SVC', IL SERAIT ENTRE DANS LE
                                     < 'DEBUG' ET AURAIT REMIS A ZERO SON
                                     < REGISTRE 'S' ; ON SAIT QU'ALORS ON
                                     < MEMORISE L'APPEL PAR 'SVC' EN LAISSANT
                                     < LE BIT 'SVCS' INTACT...
         STA         PSTESC-DEMSCH+RS,W < ET ON MET 'S' A JOUR...
         JMP         Z730X9          < VERS LA SYNCHRONISATION DU 'RUNER'...
Z730X6:  EQU         $
         LA          VAR+RETSCH      < L'UTILISATEUR EST EN MODE MAITRE :
         CP          PSTESC-DEMSCH+RP,W
                                     < VALIDONS DONC SON REGISTRE 'P'...
         JE          Z730XA          < OK, IL FAUT 'RETSVC'...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE COMMENT, L'UTILISATEUR
<                    ETANT EN MODE MAITRE, PEUT AVOIR UN
<                    REGISTRE 'P' DONT LA VALEUR DIFFERE
<                    DE LA VALEUR D'UN RETOUR DE 'SVC'...
<
         STA         PSTESC-DEMSCH+RP,W
                                     < ET ENFIN, ON CORRIGE 'RP'...
Z730XA:  EQU         $
Z730X9:  EQU         $
<
< CALCUL DE L'ADRESSE DE 'DCTESC' :
<
         LR          W,A             < (A)=@DEMANDE DE SCHEDULING.
         ADRI        DCTESC-DEMSCH,A < (A)=@DCT ESCLAVE.
<
<        A T T E N T I O N  :
<                      POUR DES RAISONS D'ININTERRUPTIBLITE,
<                    ON NE PEUT DISSOCIER LA MISE A JOUR DE
<                    DCTSY AVEC ADRESSE DCTESC, DE L'ARMEMENT
<                    DU NIVEAU ESCLAVE...
<
         STA         ARUN            < TRANSMISSION DE @DCT-ESCLAVE
                                     < A RUNESC.
         LAD         &VAR+SRUN       < SYNCHRONISATION DU RUNNER
         BSR         ARLSE           < DES ESCLAVES
<
<        A T T E N T I O N  :
<                      L'EXECUTION DE LA SEQUENCE
<                    D'INSTRUCTIONS QUI SUIT N'EST
<                    EXECUTEE QUE LORSQUE LE NIVEAU
<                    ESCLAVE REND LA MAIN (AU PLUS TOT !!!)
<
<
<
<        N A T U R E   D U   P A S S A G E   D E
<        M A I N   D E   L ' E S C L A V E  :
<
<
         LXI         NSPACT
         CPZ         &ADCTSY         < L'ADRESSE-DCT-ESCLAVE FIGURE-
                                     < T'ELLE TOUJOURS DANS DCTSY ???
         JE          Z730            < NON, L'ESCLAVE A DONC PASSE
                                     < LA MAIN PAR IT-HORLOGE, OU
                                     < A FAIT UN SVC.
         JG          SYSRA1          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      APRES AVOIR EVENTUELLEMENT MODIFIE
<                    'DCTSY', ON FERA UN 'JMP Z730'...
<
SYSRA1:  EQU         $
<
<
<        R E C U P E R A T I O N   D E S   Q U I T
<        E X E C U T E   P A R   L ' E S C L A V E  :
<
<
         LAD         &VAR+SESVC
         BSR         ARLSE           < LES QUIT EXECUTES DANS UN
                                     < PROGRAMME ESCLAVE SONT ASSIMILES
                                     < A DES SVC ; ON SYNCHRONISE
                                     < DONC LE RECEPTEUR DES SVC QUI
                                     < RECUPERA DANS LE REGISTRE A
                                     < L'ADRESSE DES ARGUMENTS...
Z730:    EQU         $
         RSR                         < ATTENTION : CE RSR N'EST EXECUTE
                                     < AU PLUS TOT QUE LORSQUE L'ESCLA-
                                     < VE REND LA MAIN.
         PAGE
<
<
<        A L L O C A T I O N   E T   A P P E L
<        D ' U N   H A N D L E R   D E   S E R V I C E  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME ALLOUE UN
<                    HANDLER DE SERVICE A UN UTILI-
<                    SATEUR SUITE A UN 'SVC' OU BIEN
<                    A UNE INTERRUPTION D'HORLOGE ;
<                    ENSUITE, IL MET A JOUR 'DCTESC'
<                    ('DEMSER'), PUIS ENFIN MET 'DEMSER'
<                    DANS LA FILE D'ATTENTE DU 'HDLSER'
<                    QUI A ETE ALLOUE A CET UTILISATEUR ;
<                    ON NOTERA QU'EN FAIT CET UTILI-
<                    SATEUR, DE PAR LE MECANISME D'ALLO-
<                    CATION, EST FORCEMENT LE SEUL DANS
<                    LA FILE D'ATTENTE...
<
<
<        ARGUMENTS :
<                    (L)=ADRESSE DCT(ESCLAVE),
<                    (B)=ADRESSE AUTOMATE DE SERVICE.
<
<
         USE         L,DCTESC
         USE         W,DEM0
ALOHS:   EQU         $
         PSR         A,X,W
<
< VALIDATION DE LA DEMANDE 'DEMSER' ANTERIEURE :
<
         LA          DEMSER+XXNSP
         TBT         ACTIF           < EST-ELLE ENCORE ACTIVE ???
         JC          ALOHSY          < OUI !!!
         TBT         ENFILE          < EST-ELLE ENCORE EN FILE  ???
         JNC         ALOHSZ          < NON, TOUT EST BON, ON PEUT DEMANDER
                                     < UN NOUVEAU NIVEAU DE SERVICE...
ALOHSY:  EQU         $
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE (COMME TOUJOURS...) !!!
<
         JMP         ALOHSX          < ET ON SORT...
ALOHSZ:  EQU         $
<
< ALLOCATION D'UN HANDLER DE SERVICE :
<
         LAD         ATOHDS          < RELAI DE LA TABLE D'OCCUPATION
                                     < DES HANDLERS DE SERVICE.
         NTRN
         LXI         X12/NBITMO      < LONGUEUR DE LA TABLE.
         TRN
         RQST        &ASXSER         <<<HANDLER DE SERVICE, EST
<                    DYNAMIQUE, ET PAR CONSEQUENT, LE NIVEAU
<                    D'EXECUTION DU SERVICE N'EST PAS FIGE DANS
<                    LE TEMPS ; AINSI STATITIQUEMENT, AUCUN
<                    ESCLAVE N'EST FAVORISE PAR RAPPORT
<                    A UN AUTRE.
<
<
<        NOTION D'AUTOMATE :
<                      L'AUTOMATE EST EN FAIT UN ENCHAINEMENT
<                    DE ROUTINES REALISANT UN CERTAIN SERVICE
<                    POUR L'UTILISATEUR (ESCLAVE).
<                      ON TROUVERA ENTRE AUTRE CHOSE DANS
<                    L'AUTOMATE LE SWAPPING IN/OUT, LE
<                    MOVE DES BUFFERS,...
<
<
<        FORMAT D'UN AUTOMATE :
<                    MOTS 0 A L-1 : @ROUTINES DE SERVICE,
<                    MOT (L)=-L.
<                    SI LA LONGUEUR 'L' EST NULLE,
<                    IL S'AGIT D'UNE REACTIVATION
<                    SEULE...
<
<
<        UTILISATION DE 'B' PAR UN AUTOMATE :
<                      LE REGISTRE 'B' EST UTILISE POUR LA
<                    TRANSMISSION DE PARAMETRES ET
<                    D'INDICATEURS AU TRAVERS DES
<                    ROUTINES COMPOSANT UN AUTOMATE.
<                    BIT0(B)=1 : SWAP (ET DONC ALL/REL MEM) A FAIRE,
<                           =0 : SWAP (ET DONC ALL/REL MEM) NON NECESSAIRE.
<                    BIT1(B)=1 : L'ESPACE MEMOIRE DE L'UTILISATEUR NE
<                                S'EST PAS DEPLACE D'UN SWAP A L'AUTRE.
<                    BITS8-13(B)=K,
<                    BIT14-15(B)=RANG DE L'ALLOCATEUR/RELEASEUR MEMOIRE.
<
<
BBSOSI:: VAL         BITSIG          < BIT(B) INDIQUANT SI LES SWAPPINGS
                                     < ONT ETE FAITS...
BBMOVE:: VAL         BBSOSI+I        < 0=L'ESPACE MEMOIRE S'EST DEPLACE,
                                     < 1=IL NE S'EST PAS DEPLACE...
BBTOP::  VAL         BBMOVE+I        < BIT INDIQUANT SI ON A FAIT UN 'RUNO' :
                                     < 0 : NON,
                                     < 1 : OUI, 'RUNO', DONC IL FAUT FAIRE
                                     <     UN SWAPPING IN INTEGRAL...
MKRGM::  VAL         MOCD            < MASQUE CONTENANT LE RANG DE
                                     < L'ALLOCATEUR/RELEASEUR MEMOIRE.
<
<
<        ADRESSE DE L'AUTOMATE=ADRESSE DU MOT CONTENANT 'L'.
<
<
<        ARGUMENTS :
<                    (W)=DEMANDE DE DEMANDE DE SERVICE, AVEC :
<                        (SOIT (W)=ADRESSE DEMSER(DCT(ESCLAVE)))
<                    OPDEM=K : REACTIVATION DE L'ESCLAVE EN FIN
<                              DE SERVICE,
<                         #0 : PAS DE REACTIVATION (CF. END-JOB).
<                    AMDEM=ADRESSE AUTOMATE DE SERVICE.
<                          (SI LA LONGUEUR DE L'AUTOMATE EST
<                          NULLE, ON NE FAIT QUE LA REACTIVATION
<                          DE L'ESCLAVE).
<
<
<        NOTA :
<                      (W)=ADRESSE DE 'DEMSER',
<                    DONNE DONC A UNE CONSTANTE
<                    DE TRANSLATION PRES, L'ADRESSE
<                    DE LA 'DCTESC' DE L'UTILISATEUR...
<
<
         USE         W,DEM0
         USE         L,DCT0
HDLSER:  EQU         $
         CALL        #SISP CMS5 PSRSLO#
         LA          ARGDEM+AMDEM    < ACCES A L'ADRESSE DE L'AUTOMATE
                                     < REALISANT LE SERVICE DEMANDE.
         TBT         BITX            < VALIDATION DE L'AUTOMATE :
         JNC         E736X7          < OK...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      VOIR D'OU VIENT CET AUTOMATE !!!
<
E736X7:  EQU         $
         SBT         BITX            < GENERATION D'UN RELAI INDIRECT
                                     < INDEXE VERS L'AUTOMATE.
         STA         VAR+OTOMAT
<
< VALIDATION DE L'AUTOMATE :
<
         LRM         A
         WORD        OTOSP,X
         CP          VAR+OTOMAT      < NE SERAIT-ON PAS EN PRESENCE DE L'AUTO-
                                     < MATE DES SERVICES SWAPPABLES ???
         JNE         E736X8          < NON...
         RDOE                        < OUI :
         CPI         SO              < EST-ON BIEN ALORS DANS LA PAGE 0 ???
         JE          E736X9          < OUI, OUF...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE COMMENT ON EN ARRIVE ICI !!!
<                    LE PIRE C'EST QUE PAR 'OMOV1'/'OMOV2'
<                    ON ATTEINT DES BUFFERS QUI SONT DANS
<                    'DCTESC' ET DONC DANS LA PAGE 0 !!!
<
         CALL        #SISP CMS5 PAGE0#
E736X9:  EQU         $
E736X8:  EQU         $
<
< POSITIONNEMENT SUR 'DCTESC' :
<
         ADRI        DCTESC-DEMSER,W < (W)=ADRESSE DE LA DCT(ESCLAVE)...
<
< PREPARATION DE L'ITERATION DU SERVICE
< DANS LE BUT EVENTUEL DE RALENTIR LE
< FONCTIONNEMENT DU SERVICE (PAR EXEM-
< PLE POUR FILMER EN IMAGE/IMAGE L'ECRAN
< DE TELEVISION NUMERIQUE) ; POUR CE
< FAIRE ON ITERE 'NITERS' FOIS CE
< QUE FAIT 'HDLSER' EN FAISANT ATTEN-
< TION AUX MODIFICATIONS DU REGISTRE
< X(ESCLAVE) QUI NE DOIT ETRE MODIFIE
< QU'A LA PREMIERE ITERATION (VOIR
< PAR EXEMPLE LE CAS OU IL S'AGIT D'UN
< APPEL A 'HDLDLN' : SI LA PREMIERE
< ITERATION EST BONNE, LES SUIVANTES
< SERONT ERRONNEES...) :
<
         LA          IDDESC-DCTESC,W
         RBT         IDESC4          < PREMIERE ITERATION DU SERVICE...
         STA         IDDESC-DCTESC,W
NITERS:: VAL         W               < A PRIORI, UNE SEULE ITERATION !!!
         IF          NITERS-K,,,XEIF%
         IF          NON MAIS, CA VA PAS ?!??!
XEIF%:   VAL         ENDIF
ITERSE:  EQU         $               < POUR PERMETTRE L'ACCES PAR 'DCTSY'...
         LXI         NITERS          < (X)=NOMBRE D'ITERATIONS DE 'HDLSER'...
         IF          CCISNP-CCISP,,XEIF%,
         IF          ATTENTION : IL Y A DEUX AUTOMATES POSSIBLES
         IF          POUR LE 'CCI' !!!
XEIF%:   VAL         ENDIF
XWOR%1:  VAL         CCISNP-ZERO
XWOR%2:  VAL         CCISP-ZERO
XWOR%3:  VAL         XWOR%1?XWOR%2
         LRM         A,B,Y
         WORD        ZERO+XWOR%3,X   < (A)=ADRESSE INDEXEE DE L'AUTOMATE 'CCI',
         WORD        OTOJE,X         < (B)=ADRESSE DE L'AUTOMATE DE 'LOG-IN',
         WORD        OTOEJ,X         < (Y)=ADRESSE DE L'AUTOMATE DE 'LOG-OUT'.
         CP          VAR+OTOMAT      < L'UTILISATEUR VA-T'IL DANS LE 'CCI'
                                     < INTERACTIF ???
                                     < NOTA : ON A RAJOUTE CE TEST COMPLIQUE
                                     < PARCE QUE NSPTYP(DEMESC) ETAIT AUSSI LE
                                     < MOT 'VALESC', ET QUE CELA RISQUE DE
                                     < FOUTRE LA MERDE AU NIVEAU DU LOG-OUT !!!
         JE          E736X5          < OUI, DONC SANS HESITER, ON NE PEUT ITERER
                                     < LE SERVICE !!!
         LA          VAR+OTOMAT      < (A)=ADRESSE INDEXEE DE L'AUTOMATE COURANT
         CPR         A,B             < EST-CE UN 'LOG-IN' ???
         JE          E736X5          < OUI, PAS D'ITERATION !!!
         CPR         A,Y             < EST-CE UN LOG-OUT ???
         JE          E736X5          < OUI, PAS D'ITERATION !!!
         LBY         DEMESC-DCTESC+XXNSP,W < (A)='NSP' DU SERVICE DEMANDE,
         JANE        E736X3          < OK, IL N'EST PAS IMMEDIAT, IL PEUT
                                     < BENEFICIER DE L'ITERATION DE SERVICE...
         LA          DEMESC-DCTESC+T+OPDEM,W
                                     < LORSQUE LE SERVICE EST IMMEDIAT, ON
                                     < REGARDE LA FONCTION (A) DEMANDEE :
         CPI         FONDOR          < EST-CE LE 'DODO' ???
         JE          E736X3          < OUI, LUI AUSSI PEUT BENEFICIER DE
                                     < L'ITERATION DE SERVICE...
         IF          FONDOR-K,XEIF%,,XEIF%
         IF          ATTENTION : 'RUNSVC' REMET 'OPDEM' A 0 ET LE LAISSE
         IF          A 0 POUR CERTAINS SERVICE IMMEDIATS, EN PARTICULIER
         IF          L'APPEL DU 'CCI' INTERACTIF, IL Y A DONC RISQUE
         IF          DE CONFUSION AVEC 'FONDOR' !!!
XEIF%:   VAL         ENDIF
E736X5:  EQU         $
         LXI         W               < DANS TOUS LES AUTRES CAS, ON NE PEUT
                                     < ITERER LE SERVICE (ON RISQUE EN EFFET
                                     < QUELQUES ENNUIS, AVEC LE 'CCI' EN
                                     < PARTICULIER...).
E736X3:  EQU         $
         CPZR        X               < VALIDONS LE NOMBRE D'ITERATIONS DE
                                     < CHAQUE SERVICE, PUISQU'ON PEUT LE
                                     < MODIFIER MANUELLEMENT...
         JG          E736X4          < OK, AU MOINS 1...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
         JMP         E736X5          < ET ON FORCE UNE ITERATION...
E736X4:  EQU         $
E736X1:  EQU         $
         LA          DEMESC-DCTESC+T+OPDEM,W
         PSR         A,X             < SAUVEGARDE DE L''OPDEM' DE 'DEMESC',
                                     < AINSI QUE DU COMPTE DES ITERATIONS...
         LA          DEMESC-DCTESC+T+AMDEM,W
         LB          DEMESC-DCTESC+T+CODEM,W
         LX          DEMESC-DCTESC+T+ASDEM,W
         PSR         A,B,X           < SAUVEGARDE DE 'AMDEM', 'CODEM' ET 'ASDEM'
                                     < DE 'DEMESC'...
<
< ACCES A L'AUTOMATE :
<
         LXI         XOTOMA          < INDICE D'ACCES A -LONGUEUR DE L'AUTOMATE.
         LX          &VAR+OTOMAT     < (X)=-LONGUEUR AUTOMATE.
<
<        ON A DONC ICI :
<                    (W)=ADRESSE DCT(ESCLAVE) DEMANDEUR DE SERVICE.
<
         CPZR        X
         JE          E736            < IL S'AGIT D'UNE REACTIVATION.
         JL          SYSRA4          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      VERIFIER L'ADRESSE DE L'AUTOMATE,
<                    PUIS L'AUTOMATE LUI-MEME... ENSUITE
<                    FERA PEUT-ETRE COMME S'IL S'AGISSAIT
<                    D'UNE RE-ACTIVATION...
<
SYSRA4:  EQU         $
XWOR%1:  VAL         CORBT?BBSOSI=FMASK(K=FCINST
XWOR%1:  VAL         CORBT?BBMOVE=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         CORBT?BBTOP=FMASK(K?XWOR%1=FCINST
         LBI         XWOR%1          < PREPARATION DE B POUR L'AUTOMATE.
XXSER3:: VAL         1               < INDICATEUR INTERRUPTION 'HORLOGE'.
XXSER2:: VAL         -1              < INDICATEUR : FONCTION>='FONFR'.
         LYI         XXSER3          < INITIALISATION DE Y A 1, (CETTE
                                     < INITIALISATION DE Y EST DESTINEE
                                     < A SWAPO DANS LE CAS D'UN APPEL
                                     < POUR HORLOGE-QUANTUM EXPIRE) ;
                                     < CETTE VALEUR DE 1 EST CELLE
                                     < CORRESPONDANT A UN SERVICE
                                     < DE TYPE 'ECRITURE'.
E701:    EQU         $
         PSR         X,W             < SAVE INDEX AUTOMATE & @DCT ESCLAVE.
         BSR         &VAR+OTOMAT     < APPEL D'UNE ROUTINE DE L'AUTOMATE.
         PLR         X,W             < RESTAURE X,W.
<
<        NOTA IMPORTANT :
<                      LES EVENTUELS 'WAIT WEIO' SONT
<                    A LA CHARGE DES ROUTINES DE
<                    SERVICE...
<
         JIX         E701            < ROUTINE SUIVANTE...
<
< FIN DE SERVICE :
<
E736:    EQU         $
<
< ITERATION EVENTUELLE :
<
         LA          IDDESC-DCTESC,W
         SBT         IDESC4          < CA Y EST, ON A FAIT LA PREMIERE
                                     < ITERATION...
         STA         IDDESC-DCTESC,W
         PLR         A,B,X           < REMISE DE 'DEMESC' DANS L'ETAT INITIAL
                                     < A L'EXCEPTION DE 'BOX'...
         STX         DEMESC-DCTESC+T+ASDEM,W
         STB         DEMESC-DCTESC+T+CODEM,W
         STA         DEMESC-DCTESC+T+AMDEM,W
         PLR         A,X
         STA         DEMESC-DCTESC+T+OPDEM,W
         CPZ         FSERV-DCTESC,W  < Y-A-T'IL UNE ROUTINE DE FIN DE SERVICE
                                     < DE POSITIONNEE ???
         JG          E736X2          < OUI, ON ARRETE LA LES ITERATIONS...
         JDX         E736X1          < NON, ON ITERE SI NECESSAIRE...
E736X2:  EQU         $
         LA          IDDESC-DCTESC,W
         RBT         IDESC4          < PAR PUR SOUCI D'HYGIENE,...
         STA         IDDESC-DCTESC,W
         LA          IDESC-DCTESC,W  < ACCES A L'IDESC DE L'UTILISATEUR,
         RBT         IDESCI          < DONT ON RAZE A PRIORI LE BIT
                                     < 'CCI INTERPRETATIF' ; EN EFFET,
                                     < LORS D'UNE TELLE DEMANDE, SI
                                     < SES ARGUMENTS SONT ERRONNES,
                                     < CET INDICATEUR RESTE POSITIONNE,
                                     < CE QUI CONSTITUE UNE ERREUR
                                     < AU NIVEAU SYSTEME !!!!
         STA         IDESC-DCTESC,W
<
< AUTO-RELEASE DU HANDLER DE SERVICE :
<        NOTA : IL N'EST PAS DANGEREUX QU'UN HANDLER SE
<        RELEASE LUI-MEME, PUISQUE SON ACCES EST PROTEGE
<        PAR UNE FILE D'ATTENTE. IL INDIQUE AINSI, QU'IL PEUT
<        PRENDRE EN CHARGE UN NOUVEL ESCLAVE...
<
         LX          &NS             < ACCES AU NIVEAU DU HANDLER
                                     < DE SERVICE.
         ADRI        -NSPSER-NSNSP0,X  < (X)=NUMERO DU HANDLER DE SERVICE
                                       <     PAR RAPPORT A 0.
         LYI         FONSB1          < FONCTION SET BIT A 1.
         LAD         ATOHDS          < @RELAI DE LA TABLE D'OCCUPATION
                                     < DES HANDLERS DE SERVICE.
         RQST        &ASXSER         <<<0 ; AINSI
<                    DES ROUTINES DE FIN DE SERVICE
<                    PEUVENT S'ENCHAINER (CF. GOBPE QUI
<                    MET EN PLACE ABORT LORSQUE LE
<                    SWAPPING EST BLOQUE) ;  LA FIN DE CE BOUCLAGE
<                    SE PRODUIT DES QUE FSERV<=K.
<
<
<        A T T E N T I O N  :
<                      LE REGISTRE 'Y' EST DESTRUCTIBLE !!!
<
<
         BSR         ASMMK           < M A S Q U A G E...
                                     < EN EFFET : ON SOUHAITE EVITER DES
                                     < PHENOMENES ASYNCHRONES...
         LA          DEMESC-DEMSER+XXNSP,W
         RBT         XBABOR          < ET LE BIT 'XBABOR' DE 'DEMESC' EST REMIS
                                     < A 0 SYSTEMATIQUEMENT...
         STA         DEMESC-DEMSER+XXNSP,W
Z1501:   EQU         $               < ITERATION DE L'APPEL DE LA
                                     < ROUTINE DE FIN DE SERVICE (OU
                                     < DES ROUTINES !!!).
         LA          FSERV-DEMSER,W  < TEST D'EXISTENCE DE CETTE
                                     < ROUTINE DE FIN DE SERVICE...
         JAE         E795            < ELLE N'EXISTE PAS, OU BIEN ELLE N'EXISTE
                                     < PLUS, CAR ON VIENT DE LA TRAITER...
         JAG         E795X2          < ELLE EXISTE, ET SON ADRESSE EST BONNE...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      VOIR QUELLE EST LA ROUTINE DE
<                    FIN DE SERVICE QUI SE TROUVE EN
<                    MEMOIRE HAUTE, ET LA REDESCENDRE !!!
<
         JMP         E795            < PUIS ON SORT (OU PAS ???)...
E795X2:  EQU         $
         LA          IDDESC-DEMSER,W < (A)=LISTE DES INDICATEURS SECONDAIRES,
         TBT         IDESCX          < Y-A-T'IL UNE TRAPPE EN COURS DE TRAI-
                                     < TEMENT (C'EST-A-DIRE N'EST-ON PAS ENCORE
                                     < ARRIVE AU RETOUR 'CCI' ASSOCIE ???
         JC          E795X1          < OUI, ON IGNORE ALORS LA ROUTINE DE FIN
                                     < DE SERVICE ; CE PHENOMENE PEUT SE PRO-
                                     < DUIRE DE LA FACON SUIVANTE :
                                     < 1 - UN ALT-MODE SOLITAIRE HORS-ECHANGE
                                     < A ETE RECU ; CECI A PROVOQUE LA MISE
                                     < EN PLACE DE 'GOBPE' DANS 'FSERV' QUI
                                     < ATTEND POUR ETRE EXECUTE (IL ATTEND UNE
                                     < IT D'HORLOGE POUR EXPIRATION DE QUANTUM,
                                     < OU BIEN LA FIN DU PROCHAIN SERVICE QUE
                                     < L'UTILISATEUR DEMANDERA).
                                     < 2 - PENDANT CE TEMPS LE PROGRAMME UTILI-
                                     < SATEUR CONTINUE A SE DEROULER, ET IL
                                     < EMET UN 'ACTD' DE CHANGEMENT DU CARAC-
                                     < TETE D'ABORT.
                                     < 3 - OR LE ALT-MODE SOLITAIRE HORS-
                                     < ECHANGE A MIS LA VISU CORRESPONDANTE
                                     < DANS L'ETAT 'FIVALT' QUI NE SERA ANNULE
                                     < QU'A L'ECHANGE SUIVANT...
                                     < 4 - EN CONSEQUENCE DE QUOI, 'TH0' REFUSE
                                     < CET 'ACTD', ET EN FAIT UNE TRAPPE, CE QUI
                                     < PROVOQUE L'APPEL DE 'ADOWN' ; SI L'UTI-
                                     < LISATEUR TOURNE EN MEMOIRE HAUTE, CET
                                     < APPEL DE 'ADOWN' PREPARE LE REVEIL DU
                                     < NIVEAU DE SERVICE ASSOCIE.
                                     < 5 - 'TH0', VIA 'IMEMY' GENERE DANS L'ES-
                                     < PACE MEMOIRE UTILISATEUR LE MINI PRO-
                                     < GRAMME DE TRAPPE... PUIS REND LA MAIN ;
                                     < 6 - C'EST ALORS LE NIVEAU DE SERVICE
                                     < PRECEDEMMENT REVEILLE QUI LA PREND (A DES
                                     < NIVEAUX PLUS PRIORITAIRES PRES...) ET
                                     < QUE FAIT-IL ??? ET BIEN IL VA EXECUTER
                                     < LE 'GOBPE' EN 'FSERV' ANNULANT AINSI
                                     < TOUS LES EFFETS DE 'TH0' ET DE 'IMEMY'...
                                     < 7 - ET BIEN, C'ETAIT LA MERDE MON VIEUX !
         LA          FSERV-DEMSER,W  < ET BIEN C'EST PLUS SIMPLE, ON VA EXECU-
                                     < TER 'FSERV', ET PAR PRUDENCE, ON RESTAURE
                                     < (A)=ADRESSE DE LA ROUTINE DE 'FSERV'...
         PSR         W               < SAVE @DEMSER.
         BSR         FSERV-DEMSER,W  < APPEL DE LA ROUTINE DE FIN DE
                                     < SERVICE AVEC :
                                     < (W)=@DEMSER.
         PLR         W               < RESTAURE (W)=@DEMSER.
         JMP         Z1501           < ITERATION TANT QUE FSERV>0 !!!
<
< CAS DES TRAPPES "EN COURS" :
< (VOIR LE LUXUEUX COMMENTAIRE
< CI-DESSUS...)
<
E795X1:  EQU         $
         STZ         FSERV-DEMSER,W  < IL FAUT BIEN QUE QUELQU'UN LE FASSE...
<
< FIN DE SERVICE :
<
E795:    EQU         $
         BSR         ASMDK           < D E M A S Q U A G E...
<
< DEMANDE DE REACTIVATION DE L'ESCLAVE :
<
         ADRI        DEMSCH-DEMSER,W < (W)=@DEMANDE DE SCHEDULING.
         WAIT        WEIO            < CETTE ATTENTE, PERMET D'EVITER
                                     < QU'UNE DEMSCH QUI EST ENCORE
                                     < EN TETE DE LA FILE DU SCHEDULER
                                     < NE SOIT REMISE DANS CETTE FILE
                                     < AVANT D'EN AVOIR ETE ENLEVEE...
         BSR         ACHAND          < ENVOI DE LA DEMANDE DE
                                     < REACTIVATION.
<
<        NOTA IMPORTANT :
<                      A PRIORI LA DEMANDE DE REACTIVATION EST
<                    NON PRIORITAIRE, MAIS UNE ROUTINE DE
<                    SERVICE DE L'AUTOMATE A PU EN DECIDER
<                    AUTREMENT. ON PEUT DONC AINSI JOUER SUR
<                    LES PRIORITES...(CF. DE MEME LE FILTRAGE...)
<
         ADRI        DEMSER-DEMSCH,W < RESTAURE (W)=@DEMANDE DE SERVICE.
<
< PEUT-ON FAVORISER L'ESCLAVE COURANT ???
<
         LRM         A
         WORD        ATSUSP,X        < (A)=ADRESSE DE L'AUTOMATE DE SUSPENSION
                                     <     SUR QUANTUM EXPIRE PAR L'HORLOGE.
         CP          VAR+OTOMAT      < L'UTILISATEUR COURANT A-T'IL ETAIT
                                     < INTERROMPU PAR L'HORLOGE ???
         JE          E737X1          < OUI, CELA VEUT DIRE QU'IL FAIT CERTAI-
                                     < NEMENT BEAUCOUP DE PROCESS, ON NE VA PAS
                                     < LE FAVORISER, MAIS PLUTOT CEUX QUI FONT
                                     < BEAUCOUP DE DEMANDES DE SERVICES, ET
                                     < DONC D'ENTREES-SORTIES...
         LXI         NSNSP0+NSPACT
         LYI         FONTB
         LAD         AASTF
         BSR         ATMOBT          < LE NIVEAU ESCLAVE EST-IL ACTIF ???
                                     < ON NOTERA QUE L'ON NE MASQUE PAS LES
                                     < INTERRUPTIONS POUR ALLER PLUS VITE...
         JNC         E737X1          < NON, RIEN A FAIRE...
         BSR         ASMMK           < OUI, MASQUAGE DES INTERRUPTIONS...
         BSR         ATMOBT          < ON REGARDE DE NOUVEAU S'IL Y A UN ESCLAVE
                                     < ACTIF, CAR EN EFFET DEPUIS L'HORLOGE A
                                     < PU PASSER !!!
         JNC         E737X2          < ET OUI, L'HORLOGE EST PASSEE...
<
< CAS OU UN UTILISATEUR EST ACTIF :
<
         PSR         L
         LXI         NSPACT
         BSR         ACADCT          < (L)=ADRESSE DE LA 'DCTESC' DE L'ESCLAVE
                                     <     PRESENTEMENT ACTIF...
         LRM         A
<*******************************************************************************
         WORD        KSIMS>DADR*LK   < (A)=PLUS PETIT 'SLO' EN MEMOIRE HAUTE.
XWOR%3:  VAL         '0000000@@@@
<*******************************************************************************
SLOMIN:  EQU         ZERO+XWOR%3     < PLUS PETIT 'SLO' EN MEMOIRE HAUTE (MIS
                                     < EN TRANSLATABLE, CAR IL EST REFERENCE
                                     < EN AVANT).
SLOM1N:  EQU         SLOMIN          < A CAUSE DE
SLOM2N:  EQU         SLOMIN          < L'ASSEMBLEUR...
SLOM3N:  EQU         SLOMIN          < (...)
         CP          PSTESC-DCTESC+RSLO,L
                                     < L'UTILISATEUR ACTIF EST-IL EN MEMOIRE
                                     < HAUTE ???
         JLE         E737X4          < OUI, IL EST EN HAUT, ON PEUT L'INTER-
                                     < ROMPRE...
         LA          IDDESC-DCTESC,L < NON, ALORS
         TBT         IDESC6          < QUELLE EST SA PRIORITE ???
         JNC         E737X3          < NORMALE (IDESC6=0) : DONC, ON NE PEUT
                                     < L'INTERROMPRE...
E737X4:  EQU         $
<
< CAS OU UN UTILISATEUR EST ACTIF EN HAUT :
< (OU BIEN IL A UNE PRIORITE INFERIEURE : IDESC6=1)
<
         LXI         NSPHOR
         BSR         ACADCT          < (L)=ADRESSE DE LA 'DCTHOR'...
         BSR         ABETA2          < (A)=BETA(SIT(HORLOGE)) :
         JAGE        E737X3          < L'HORLOGE N'EST PAS SUR SON 'SIT', ELLE
                                     < ATTEND SUREMENT UN EVENEMENT...
         STZ         RA+XXPSTD,L
         DC          RA+XXPSTD,L     < A(HORLOGE)=-1,
         LAD         SIT
         BSR         ARLSE           < ON PROVOQUE AINSI UNE FAUSSE INTERRUP-
                                     < TION D'HORLOGE ET AINSI L'HORLOGE VA
                                     < PRENDRE LA MAIN ET INTERROMPRE CET
                                     < UTILISATEUR EN MEMOIRE HAUTE, ET AINSI
                                     < AMELIORER LE TEMPS DE REPONSE DE
                                     < L'UTILISATEUR POUR LEQUEL ON EST EN
                                     < FIN DE SERVICE...
E737X3:  EQU         $
         PLR         L
E737X2:  EQU         $
         BSR         ASMDK           < DEMASQUAGE DES INTERRUPTIONS...
E737X1:  EQU         $
<
< SORTIE DE 'HDLSER' :
<
E737:    EQU         $
         CALL        #SISP CMS5 PLRSLO#
         RSR
<
<
<        ' I N T E R R U P T I O N '   D E   S E R V I C E  :
<
<
ITSERV:  EQU         $
<
<        ON A ICI :
<                    (L)=ADRESSE DCT(SERVICE).
<
         BSR         ARVHDL          < REVEIL DU HANDLER DE SERVICE.
         RSR
         PAGE
<
<
<        M O D I F I C A T I O N   D U   R E G I S T R E
<                    X ( E S C L A V E )  :
<
<
<        FONCTION :
<                      X(ESCLAVE) CONTIENT TOUJOURS LES
<                    CONDITIONS DE RETOUR DE TOUT SERVICE.
<                    MALHEUREUSEMENT, LORSQU'ON ITERE PAR
<                    'NITERS' LES HANDLERS 'HDLSER', IL SE
<                    PEUT QUE LES CONDITIONS DE RETOUR
<                    DES ITERATIONS SECONDES, TROISIEMES,..
<                    DIFFERENT DE LA PREMIERE (VOIR UN
<                    'DLN' DU 'SGN').
<                      DANS CES CONDITIONS IL NE FAUT POSI-
<                    TIONNER X(ESCLAVE) QU'A LA PREMIERE
<                    ITERATION ; A CETTE FIN 'HDLSVC'
<                    POSITIONNE L'INDICATEUR 'IDESC4'
<                    DANS 'IDDESC' A 0 ; PUIS TOUS LES
<                    'STORE' SUR X(ESCLAVE) SONT PIEGES,
<                    ET INTERPRETES PAR 'STXES', CAR EN
<                    EFFET ILS DIFFERENT TOUS PAR LA BASE
<                    ET LE DEPLACEMENT UTILISES, D'OU
<                    L'USINE A GAZ QUI SUIT...
<
<
<        ARGUMENT :
<                    L'INSTRUCTION QUI SUIT LE 'BSR' D'APPEL...
<
<
         CALL        #SISP CMS5 CHECK#
STXES:   EQU         $
XKREG:   VAL         K               < POUR COMPTER LE NOMBRE DE REGISTRES
                                     < EMPILES A L'ENTREE...
       #@PSR         A,B,Y           < #SISP CMS5 KREG#
       #@PSR         L,W             < #SISP CMS5 KREG#
XKREG:   VAL         -XKREG          < CE QUI DONNE LE NOMBRE DE REGISTRES
                                     < EMPILES.
<
< IDENTIFICATION D'UNE INSTRUCTION
< VARIABLE DE TEST DE X(ESCLAVE) :
<
<*******************************************************************************
STXES1:  LAD         O,C             < SEUL LE CODE DU 'LAD' NOUS INTERESSE :
XWOR%1:  VAL         '0000000@@@@    < CODE DU 'LAD' SUR LA BASE 'C'...
<*******************************************************************************
XWOR%2:  VAL         $-STXES1        < LONGUEUR D'UNE INSTRUCTION ; ON N'ARRETE
                                     < PAS LE PROGRES...
         IF          XWOR%2-D,,XEIF%,
         IF          C'EST BIEN BEAU DE PARAMETRER, SAUF
         IF          QUAND ON SE FOUT DEDANS !!!
XEIF%:   VAL         ENDIF
         $EQU        STXES1          < ANNULATION DU CODE DU 'LAD'.
<
< RECUPERATION DE L'INSTRUCTION ARGUMENT :
<
         LR          K,W             < 'W' BASE LA PILE :
         LA          -XKREG-XWOR%2+DEPILE,W
                                     < (A)=REGISTRE 'P' DE RETOUR D'UN 'BSR'
                                     <     EXECUTE "NORMALEMENT"...
         DO          XWOR%2
         IC          -XKREG-XWOR%2+DEPILE,W
                                     < MAIS VOILA, IL N'EST PAS NORMAL, PUISQUE
                                     < L'INSTRUCTION QUI SUIT LE 'BSR' D'APPEL
                                     < DE 'STXES' EST EXECUTE ICI, IL FAUT DONC
                                     < LA SAUTER...
         LR          A,W             < 'W' BASE L'INSTRUCTION ARGUMENT,
         LY          O,W             < (Y)=INSTRUCTION ARGUMENT, QUI DOIT ETRE
                                     <     UN 'STORE', ET QUE L'ON NE VALIDE PAS
<
< X(ESCLAVE) A-T'IL ETE DEJA POSITIONNE ???
< (NOTONS QU'ON NE SAIT PAS TRES BIEN
< QUELLE EST LA BASE UTILE, NI CE QU'ELLE
< POINTE...)
<
XWOR%3:  VAL         'E0FF           < XWOR%3 EST UN MASQUE PERMETTANT DE RECU-
                                     < PERER LA BASE ET LE DEPLACEMENT INDEPEN-
                                     < DEMMENT DU CODE-OPERATION...
XWOR%4:  VAL         XWOR%3)MMOT(XWOR%1
         LRM         A,B,L,W
         WORD        XWOR%4          < (A)=CODE-OPERATION D'UN 'LAD' TOUT NU...
         WORD        XWOR%3          < (B)=MASQUE DE RECUPERATION DE LA BASE ET
                                     <     DU DEPLACEMENT INDEPENDEMMENT DU CODE
                                     <     OPERATION...
         WORD        INSTV1          < (L)=ADRESSE DE L'INSTRUCTION DE CALCUL
                                     <     DE L'ADRESSE DE X(ESCLAVE)...
         WORD        INSTV2          < (W)=ADRESSE DE L'INSTRUCTION VARIABLE DE
                                     <     MODIFICATION DE X(ESCLAVE).
         ANDR        Y,B             < (B)=BASE ET DEPLACEMENT DE L'INSTRUCTION
                                     <     ARGUMENT...
         ORR         A,B             < (B)=INSTRUCTION DE CALCUL DE L'ADRESSE DE
                                     <     X(ESCLAVE) UTILISANT LA MEME BASE ET
                                     <     MEME DEPLACEMENT QUE L'INSTRUCTION AR
         BSR         ASMMK           < ON EST OBLIGE MALHEUREUSEMENT DE MAS-
                                     < QUER TOUTES LES INTERRUPTIONS, CAR ON
                                     < MODIFIE LE CODE DU SYSTEME, CE QUI
                                     < FAIT QUE 'STXES' N'EST PAS REENTRANT,
                                     < QUEL SCANDALE !!!
         STB         O,L             < MISE EN PLACE DU 'LAD'...
         STY         O,W             < MISE EN PLACE DE L'INSTRUCTION VARIABLE
                                     < DE MODIFICATION DE X(ESCLAVE).
         PLR         L,W             < RESTAURATION DES BASES D'ACCES,
INSTV1:  NOP                         < INSTRUCTION VARIABLE D'ACCES A L'ADRESSE
                                     < DU REGISTRE X(ESCLAVE) :
XWOR%5:  VAL         IDDESC-DCTESC
XWOR%6:  VAL         PSTESC-DCTESC+RX
                                     < (A)=ADRESSE DU 'X' DE CET UTILISATEUR
                                     <     PUISQUE LE 'LAD' NOUS A DONNE L'ADRES
                                     <     DE SON X(ESCLAVE),
         PSR         W               < NOUVELLE SAUVEGARDE DE LA BASE 'W'...
         LR          A,W             < (W)=ADRESSE DU REGISTRE X(ESCLAVE),
         LA          XWOR%5-XWOR%6,W < ET ACCES A 'IDDESC' :
         TBT         IDESC4          < EST-CE LA PREMIERE ITERATION DU SERVICE ?
         PLR         W
         PLR         A,B,Y           < PUIS ON RESTAURE TOUS LES REGISTRES
                                     < CAR ON NE SAIT LEQUEL VA SERVIR A LA
                                     < MODIFICATION DE X(ESCLAVE)...
         JC          STXES2          < IDESC4(IDDESC)=1 : DONC CE N'EST PLUS
                                     < LA PREMIERE ITERATION DU SERVICE...
<
< MODIFICATION DE X(ESCLAVE) LA PREMIERE FOIS :
<
INSTV2:  NOP                         < IDESC4(IDDESC)=0 : C'EST LA PREMIERE
                                     < ITERATION : ON POSITIONNE X(ESCLAVE)...
STXES2:  EQU         $
         BSR         ASMDK           < ET ENFIN, ON DEMASQUE...
         RSR                         < OUF...
         CALL        #SISP CMS5 CHECK#
         PAGE
<
<
<        R U N   E N   M E M O I R E   H A U T E   D ' U N
<        P R O G R A M M E   U T I L I S A T E U R  :
<
<
<        PHILOSOPHIE :
<                      ON CONSIDERE QU'UN UTILISATEUR INTERROMPU
<                    PAR L'HORLOGE FAIT PLUS DE "PROCESS" QUE
<                    D'ENTREES-SORTIES. L'AUTOMATE UTILISE PAR
<                    L'HORLOGE, LORSQUE LE PROGRAMME UTILISATEUR
<                    A RENDU SON ESPACE MEMOIRE ('SWAPO'+'RLMESC'),
<                    ON REGARDE S'IL A ETE SWAPPE EN MEMOIRE OU
<                    SUR DISQUE ; S'IL S'AGIT DE LA MEMOIRE ON
<                    LE SCHEDULE IMMEDIATEMENT.
<                      AINSI LE PROGRAMME TOURNE EN MEMOIRE HAUTE ;
<                    A PARTIR DE LA 3 EVENEMENTS PEUVENT SE PRO-
<                    DUIRE :
<                    1 - UNE NOUVELLE INTERRUPTION D'HORLOGE :
<                    IL SUFFIT D'ITERER LE SCHEDULING "HAUT"...
<                    2 - UN 'SVC' OU UN 'QUIT' A ETE RENCONTRE
<                    DANS LE PROGRAMME : ON FAIT RECULER LE PROGRAMME
<                    D'UN PAS, PUIS EVIDEMMENT, IL FAUT LE FAIRE
<                    REDESCENDRE, ET L'AUTOMATE REPREND LA MAIN.
<                    AINSI LE 'SVC' OU LE 'QUIT' SERA REEXCUTE
<                    MAIS CETTE FOIS EN MEMOIRE BASSE, CE QUI
<                    SIMPLIFIE BIEN LES CHOSES...
<                    3 - UNE TRAPPE : DE MEME QUE CI-DESSUS SI CE
<                    N'EST QU'ON LAISSE SUBSISTER LA CONDITION
<                    DE TRAPPE AFIN QU'ELLE SE REPRODUISE UNE FOIS
<                    LE PROGRAMME RETOURNE EN MEMOIRE BASSE.
<
<
<        FONCTION :
<                      'RUNO' (POUR "RUN" EN MEMOIRE "HAUTE"),
<                    SI L'ESCLAVE A ETE SWAPPE OUT EN MEMOIRE
<                    HAUTE, POSITIONNE SES REGISTRES 'SLO'
<                    ET 'SLE' SUR CETTE MEMOIRE HAUTE ; PUIS
<                    IL LE SCHEDULE, ET LE 'HDLSER' ASSOCIE
<                    SE MET ATTENTE SUR SON 'SIT' ; LORSQU'UN
<                    DES 3 EVENEMENTS MENTIONNES CI-DESSUS
<                    APPARAIT, 'HDLSER' REPREND LA MAIN :
<                    DANS LE CAS DE L'HORLOGE, IL ITERE LE
<                    SCHEDULING "HAUT", DANS LES AUTRES CAS
<                    IL REPREND L'AUTOMATE EN FAISANT AINSI
<                    DESCENDRE L'ESCLAVE EN BAS...
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DE LA DCT-ESCLAVE.
<                    BIT0(B)=1 : UN RELEASE MEMOIRE A ETE FAIT.
<
<
<        DETRUIT :
<                    LES REGISTRES 'A' ET 'X'.
<
<
RUNO:    EQU         $
         TBT         NBITMO+BBSOSI   < UN RELESAE MEMOIRE A-T'IL ETE FAIT ???
         JNC         RUNO1           < NON, DONC IL N'Y A RIEN A FAIRE...
         LBY         DEMSWP-DCTESC+XXNSP,W
                                     < OUI, MAIS LE SWAPPING OUT ASSOCIE
                                     < A-T'IL EFFECTUE SUR 'PR1' ???
         CPI         NSPPR1          < ???
         JNE         RUNO1           < NON, SUR 'DKF', DONC RIEN A FAIRE...
<
< CAS OU LE SWAPPING OUT A ETE
< EFFECTUE SUR 'PR1', LE PROGRAMME
< UTILISATEUR EST DONC EN MEMOIRE
< HAUTE :
<
         LR          B,X             < SAUVEGARDE DE 'B' DANS 'X',
         CALL        #SISP CMS5 PSRSLO#
                                     < SAUVEGARDE DE (SLO,SLE) D'APPEL...
         LR          X,B             < ET RESTAURE 'B'...
         PSR         B,Y,W
<
< INITIALISATION DES REGISTRES 'SLO' ET 'SLE' :
<
         LA          PSTESC-DCTESC+RSLE,W
         SB          PSTESC-DCTESC+RSLO,W
         LR          A,Y             < (Y)=LONGUEUR DE L'ESPACE MEMOIRE DE
                                     <     L'UTILISATEUR EN DADR-MOTS.
         LA          DEMSWP-DCTESC+T+ASDEM,W
                                     < (A)=ADRESSE DISQUE DE LA ZONE DE SWAPPING
         SB          ASYS            < QUE L'ON VA CONVERTIR EN UNE ADRESSE
                                     < MEMOIRE EN DADR-MOTS :
XWOR%2:  VAL         XXXMOY
XWOR%1:  VAL         TZSWAP/XWOR%2
         IF          XWOR%1*XWOR%2-TZSWAP,,XEIF%,
         IF          ATTENTION : 'TZSWAP' N'EST PAS MULTIPLE DE 2 !!!
XEIF%:   VAL         ENDIF
         DO          XWOR%2*M
         ADRI        -XWOR%1,A
         LR          A,B             < ET SAUVEGARDE DANS 'B'...
         PSR         X,L
         LXI         NSPPR1
         BSR         ACADCT          < (A)=(L)=ADRESSE DE 'DCTPR1', CAR EN EFFET
                                     <     ELLE CONTIENT 2 CONSTANTES VACHEMENT
                                     <     UTILES...
         LR          B,A             < (A)=PREMIERE ADRESSE ACCESSIBLE (EXPRI-
                                     <     PRIMEE EN SECTEURS PAR RAPPORT AU '0
                                     <     DU PREMIER UTILISATEUR...
         MP          VAR+TAPROG      < PAR CE CALCUL ON PASSE D'UNE ZONE DE
         DV          VAR+TASWAP      < SWAPPING A ZONE SCRATCH ('DKS') A UNE
                                     < ZONE DE SWAPPING SANS ('PR1')...
         CPZR        B               < LE RESTE DOIT ETRE NUL...
         JE          RUNO6           < OUI, OK...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE COMMENT LE RESTE DE
<                    CETTE DIVISION PEUT ETRE NON NUL !!!
<
RUNO6:   EQU         $
         PLR         X,L
         SLLS        YY7>DADR=K      < (A)=ADRESSE EN DADR-MOTS RELATIVE A
                                     <     L'ORIGINE DE LA MEMOIRE DE SWAPPING
                                     <     DE LA ZONE UTILISATEUR.
XWOR%1:  VAL         KSIMS>DADR*LK   < ADRESSE EN DADR-MOTS DE LA ZONE GENERALE
                                     < DE SWAPPING,
XWOR%2:  VAL         SLOESC>DADR     < TRANSLATION DANS CHAQUE ZONE DE
                                     < SWAPPING DES PROGRAMMES UTILISATEURS.
         LRM         B
         WORD        XWOR%1+XWOR%2   < (B)=ADRESSE EN DADR-MOTS DE LA ZONE
                                     <     GENERALE DE SWAPPING TRANSLATEE +'SLO
         ADR         B,A             < (A)='SLO' EN MEMOIRE HAUTE,
         ADR         A,Y             < (Y)='SLE' EN MEMOIRE HAUTE.
         STA         PSTESC-DCTESC+RSLO,W
         STY         PSTESC-DCTESC+RSLE,W
         LR          Y,B             < (A)=(SLO) ET (B)=(SLE),
         WOE                         < ON DONNE A CE NIVEAU DE SERVICE LES
                                     < REGISTRES (SLO,SLE) EN MEMOIRE HAUTE
                                     < DE L'UTILISATEUR, AFIN QUE LES DEMANDES
                                     < QU'IL EMETTRA TRANSMETTENT CORRECTEMENT
                                     < LE FAMEUX NUMERO DE PAGE DE 32K...
<
< SCHEDULING "HAUT" :
<
RUNO5:   EQU         $               < (ASTUCE ?!??!) POINT D'ENTREE RESERVE
                                     < AUX ITERATIONS DE SCHEDULING EN HAUT,
                                     < SUITE A UN 'SERESC' LOCAL A 'RUNO'...
         ADRI        DEMSCH-DCTESC,W < (W)=ADRESSE DE LA DEMANDE DE SCHEDULING..
RUNO2:   EQU         $
         WAIT        WEIO            < AU CAS OU LA DEMANDE DE SCHEDULING
                                     < NE SERAIT PAS ENCORE DECHAINEE...
         LA          IDDESC-DEMSCH,W
         RBT         IDESC3          < A PRIORI, ON EST PROPRE...
         STA         IDDESC-DEMSCH,W
         BSR         ACHAND          < ET ON SCHEDULE L'UTILISATEUR EN
                                     < MEMOIRE HAUTE.
         RQST        SIT             < ET ON ATTEND QU'IL RENDE LA MAIN POUR
                                     < UNE DES RAISONS EVOQUEES PRECEDEMMENT :
         CPZ         FSERV-DEMSCH,W  < Y-A-T'IL PAR EXEMPLE UNE ROUTINE DE
                                     < FIN DE SERVICE POSITIONNEE ???
         JNE         RUNO3           < OUI (PAR UN DOUBLE ALT-MODE OU BIEN
                                     < LA COMMANDE !X, OU BIEN ENCORE LE
                                     < SIMPLE ALT-MODE,...). DANS CES CONDI-
                                     < TIONS ON N'ITERE PAS BIEN SUR !!!
         LA          IDDESC-DEMSCH,W
         TBT         IDESC7          < ALORS EST-CE UNE DEMANDE DE 'SERESC'
                                     < EN MEMOIRE HAUTE ???
         JNC         RUNO4           < (RUNO4 GTL, ASCTUCE ?!??!) NON...
<
< CAS D'UN SERVICE POUVANT SE DEROULER
< EN MEMOIRE HAUTE DE L'UTILISATEUR :
<
         RBT         IDESC7
         STA         IDDESC-DEMSCH,W < ON EST PROPRE (COMME LA RUNO4 GTL...).
         PLR         B,Y,W           < RESTAURATION DES REGISTRES,
         PSR         W               < EN EFFET, 'SERESC' FAIT QUELQUES DEGATS!
         BSR         VAR+ASERES      < ET ON FAIT COMME SI LE 'SERESC' ETAIT
                                     < DANS L'AUTOMATE 'OTSUSP' DE L'HORLOGE...
         PLR         W               < RESTAURATION, ENTRE AUTRES CHOSES DE :
                                     < (W)=ADRESSE DE 'DCTESC'...
         PSR         B,Y,W           < ET EN FIN DE SERVICE EN HAUT,
         ADRI        DEMSCH-DCTESC,W < (W)=ADRESSE DE LA DEMANDE DE SCHEDULING,
         CPZ         FSERV-DEMSCH,W  < Y-A-T'IL EU UNE ROUTINE DE FIN DE SER-
                                     < VICE POSITIONNEE PAR LE SERVICE PRECE-
                                     < DENT ???
                                     < A NOTER, QUE CE TEST EST PREFERABLE A
                                     < CELUI QUI SE TROUVE DERRIERE LE
                                     < 'RQST SIT' PRECEDENT, CAR EN EFFET, UN
                                     < SCHEDULING SEPARE ALORS LA DEMANDE DE
                                     < FIN DE SERVICE DE SON TEST, ET CELA
                                     < RISQUE DE MERDER SOUVENT : PAR EXEMPLE :
                                     < 1 - LA VISU DE DIALOGUE EST SUR UNE DE-
                                     < MANDE D'ENTREE,
                                     < 2 - UN ALT-MODE SOLITAIRE APPARAIT,
                                     < CE QUI POSITIONNE 'AGOBPE',
                                     < 3 - MAIS ON FAIT MALGRE CELA UN COUP
                                     < DE SCHEDULING, CE QUI FAIT QUE LE PRO-
                                     < GRAMME UTILISATEUR REVIENT D'UNE LECTURE
                                     < VISU AVEC 'ALT-MODE' DANS SON BUFFER,
                                     < ET UN CODE D'ERREUR DANS 'X', MAIS CE
                                     < N'EST QU'AU COUP SUIVANT QUE LE 'GOBPE'
                                     < AURA LIEU ; OR 'PRESC' A PU CHANGER
                                     < ENTRE TEMPS PUISQUE LE PROGRAMME A REPRIS
                                     < LA MAIN QUELQUES INSTANTS...
         JNE         RUNO3           < OUI, DONC ON N'ITERE PAS !!!
         JMP         RUNO2           < ON REFAIT UN SCHEDULING HAUT...
<
< AUTRES CAS :
<
RUNO4:   EQU         $               < (EFFECTIVEMENT UNE 'RUNO4' COUTE TRES
                                     < CHER, C'EST POURQUOI "MON GARAGISTE
                                     < EST RICHE"...)
         TBT         IDESC3          < EST-CE UNE NOUVELLE INTERRUPTION
                                     < D'HORLOGE ???
         JC          RUNO2           < OUI, ON ITERE DONC LE SCHEDULING...
<
< AUTRES CAS : ON VA FAIRE REDESCENDRE
< L'UTILISATEUR EN MEMOIRE BASSE EN
< REPRENANT L'AUTOMATE :
<
RUNO3:   EQU         $
         LA          IDDESC-DEMSCH,W
         RBT         IDESC3          < SOYONS
         RBT         IDESC7          <        PROPRES...
         STA         IDDESC-DEMSCH,W
         PLR         B,Y,W
         LR          B,X             < SAUVEGARDE DE 'B' DANS 'X',
                                     < ET RESTAURATION DE (SLO,SLE) D'APPEL :
         CALL        #SISP CMS5 PLRSLO#
         LR          X,B             < ET ENFIN RESTAURATION DE 'B'...
         SBT         NBITMO+BBTOP    < AINSI, ON INDIQUE QU'ON A FAIT 'RUNO',
                                     < AINSI, DONC :
                                     < ON SWAPPERA INTEGRALEMENT L'ESPACE
                                     < MEMOIRE, CE QUI EST NORMAL PUISQUE
                                     < LE RUN EN MEMOIRE HAUTE (DURANT LE
                                     < SWAPPING OUT) MODIFIE CE MEME ESPACE !!!
<
< SORTIE :
<
RUNO1:   EQU         $
         RSR
         PAGE
<
<
<        D E T E C T I O N   D E   L ' A L T I T U D E
<                    D ' U N   E S C L A V E  :
<
<
<        FONCTION :
<                      LORSQU'UN PROGRAMME ESCLAVE EST EN
<                    MEMOIRE HAUTE, IL EST POUR DES RAISONS
<                    EVIDENTES DIFFICILE A ATTEINDRE PAR
<                    LE SYSTEME ; OR IL FAUT BIEN Y ACCEDER
<                    DE TEMPS EN TEMPS...
<                      CE SOUS-PROGRAMME EST REFERENCE EN
<                    UN CERTAIN NOMBRE DE POINTS NEVRALGI-
<                    QUES DU SYSTEME :
<                    1 - LORS D'UNE TRAPPE ('RECMST' EN PARTICULIER),
<                    2 - A LA RECEPTION D'UN 'SVC' OU D'UN 'QUIT',
<                    3 - LORS D'UNE INTERRUPTION HORLOGE.
<                      CE SOUS-PROGRAMME DETERMINE D'ABORD
<                    L'IDENTITE DE L'APPELANT A PARTIR
<                    DE LAQUELLE IL DEDUIT CELLE DE L'ESCLAVE
<                    EN CAUSE. IL PEUT ALORS CALCULER SON
<                    "ALTITUDE" (MEMOIRE HAUTE OU BASSE)...
<                    1 - S'IL EST EN BAS, RIEN A FAIRE...
<                    2 - S'IL EST EN HAUT, ET SAUF S'IL S'AGIT
<                    DE L'HORLOGE, IL FAUT LE FAIRE REDESCENDRE
<                    (EN REPASSANT LA MAIN A L'AUTOMATE),
<                    ET LUI FAIRE REFAIRE CE QU'IL AVAIT
<                    FAIT ('SVC', 'QUIT' OU TRAPPE).
<
<
<        ARGUMENT :
<                    (L)=ADRESSE DCT-ESC DANS LE CAS DE L'HORLOGE,
<                        DU 'SVC' ET DU 'QUIT'.
<
<
<        RESULTAT :
<                      LE SOUS-PROGRAMME POSITIONNE LES
<                    INDICATEURS AFIN QU'ON PUISSE FAIRE
<                    AU RETOUR :
<        JE          ,
.
<
<
<        A T T E N T I O N  :
<                      'DOWN' SUPPOSE BIEN ENTENDU QUE
<                    LA 'PSTESC' EST INTEGRE ; C'EST POURQUOI,
<                    'TH0' FAIT 'ASIPST' QUI RECONSTITUE LA
<                    'PSTESC' A PARTIR DE SON CONTEXTE
<                    PARTIEL ET DE SA PILE... EN FAIT IL
<                    N'Y A QUE 'SLO' ET 'SLE' DONT ON EST
<                    SUR !!!
<
<
DOWN:    EQU         $
         PSR         A,B,X,Y
         PSR         L
<
< IDDENTIFICATION DU DEMANDEUR :
<
         BSR         ASMWHO          < RENVOIE :
                                     < (A)=TYPE ('HARDWARE' OU 'SOFTWARE'),
                                     < (B)=NUMERO ('NSP' PAR EXEMPLE).
         PSR         A,B             < QUE L'ON MEMORISE...
         CPI         TYPTH           < EST-CE UNE TACHE 'HARDWARE' (EN
                                     < FAIT LA TACHE ALARME) ???
         JE          DOWN1           < OUI, IL S'AGIT D'UNE TRAPPE, DONC
                                     < 'NSPACT' EST BON...
<
< CAS DES TACHES 'SOFTWARES' :
<
         XR          A,B
         CPI         NSPHOR          < EST-CE L'HORLOGE ???
         JE          DOWN20          < OUI, LA BASE 'L' EST DEJA BONNE...
         CPI         NSPSVC          < EST-CE LE RECEPTEUR DES 'SVC' ET 'QUIT' ?
         JE          DOWN20          < OUI, LA AUSSI 'L' EST BONNE...
DOWN4:   EQU         $
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      VOIR QUEL EST CE CAS NON PREVU !!!
<                    1 - 'NSP' NON PREVU,
<                    2 - OU 'DCTESC' D'ADRESSE ANORMALE.
<
         PLR         A,B
         JMP         DOWN8           < ET ON SORT... (OU ON FAIT AUTRE CHOSE)
<
< CAS DE L'HORLOGE, DU 'SVC' ET DU 'QUIT' :
<
DOWN20:  EQU         $
         LR          L,A             < (A)=ADRESSE DE LA 'DCT' DE L'ESCLAVE...
         JMP         DOWN7
<
< AUTRES CAS (TRAPPE,
< ET C'EST TOUT J'ESPERE...) :
<
DOWN1:   EQU         $
         LXI         NSPACT          < (X)='NSP' DU NIVEAU ESCLAVE, ET
         BSR         ACADCT          < (A)=(L)=ADRESSE DE LA .
<
< ACCES A L'ESCLAVE EN CAUSE :
<
DOWN7:   EQU         $
         JALE        DOWN4           < E R R E U R   S Y S T E M E...
         LR          A,L             < (L)=ADRESSE DE LA .
         LRM         A
         WORD        SLOMIN          < (A)=PLUS PETIT 'SLO' POSSIBLE EN MEMOIRE
                                     <     HAUTE,
         CP          PSTESC-DCTESC+RSLO,L
                                     < EST-ON EN HAUT ???
         PLR         A,B
         JG          DOWN8           < RIEN A FAIRE, CAR LE PROGRAMME EST EN
                                     < BAS : (SLO) DE L'UTILISATEUR,
         IF          MKIDES=K-K,,XEIF%,
         IF          ATTENTION : LA RECUPERATION DE  EST IDIOTE !!!
XEIF%:   VAL         ENDIF
         ADRI        NSPESC+NSNSP0,A < QUE L'ON CONVERTIT EN UN NIVEAU 'SOFT'
                                     < AFIN D'ATTEINDRE 'TBU' COMME UNE LISTE
                                     < DE TACHES "NORMALES"...

         STA         &ANS            < EN EFFET, ON VA RAZER DCTSY(NSPACT),
                                     < DONC LE CHANGEMENT DE CONTEXTE PARTIEL
                                     < EN SORTIE DE 'TH0' VA MAL SE PASSER,
                                     < SAUF SI L'ON CHANGE 'NS'...
XWOR%1:  VAL         MALARM)MFFFF=K/NBITOC < NUMERO DE L'OCTET 'MALARM'.
         LXI         LPSTH0+TH0S*NOCMO+XWOR%1 < POUR ACCEDER AU 2EME OCTET DE
                                     < S DANS LA PSTH0,CET OCTET
                                     < CONTENANT LE N0 D'ALARME
         LBY         &AXPSTH         < (A)=NUMERO DE L'ALARME,
         LXI         LPSTH0+TH0P     < (A)=INDEX DU REGISTRE 'P' DE LA TACHE
                                     <     TRAPPANTE DANS 'PSTH0',
         CPI         ALASTA          < EST-CE UNE PSEUDO-ALARME 'STAR' ???
         JNE         DOWN70          < NON...
<
< CAS DE LA PSEUDO-ALARME 'STAR' :
<
         DC          &AXPSTH         < ON CONTRAINT L'UTILISATEUR AYANT EXECUTE
                                     < L'INSTRUCTION 'STAR' A L'ITERER EN
                                     < MEMOIRE BASSE...
         JMP         DOWN50          < VERS SON DESARMEMENT...
<
< CAS DES VRAIES ALARMES :
<
DOWN70:  EQU         $
         CPI         ALACTD          < EST-CE "ACTD" ???
         JNE         DOWN50          < NON, LE PROGRAMME VA REDESCENDRE EN
                                     < EN BAS, ET L'UTILISATEUR SUSPENDU
                                     < JUSQU'AU PROCHAIN SCHEDULING...
         DC          &AXPSTH         < A PRIORI, ON REVIENT EN ARRIERE...
         PSR         B               < SAUVEGARDE DE 'IDDESC',
         CALL        #SISP CMS5 PSRSLO#
                                     < ET DE (SLO,SLE) COURANT...
         LA          PSTESC-DCTESC+RSLO,L
         LB          PSTESC-DCTESC+RSLE,L
         WOE                         < ET MISE EN PLACE DE (SLO,SLE) ESCLAVE.
         SBR         A,B             < (B)=(SLE)-(SLO)=TAILLE DE L'ESPACE
                                     <     MEMOIRE...
         LY          &AXPSTH         < (Y)='P' COURANT DU PROGRAMME,
         LR          Y,A
         SLRS        -DADR           < (A)='P' DE L'ESCLAVE EN DADR-MOTS,
         CPR         B,A             < ALORS, 'P' EST-IL EN VIOLATION ???
         JLE         DOWN71          < NON, OK...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE COMMENT ON
<                    PEUT ETRE ICI (AVEC CE TYPE
<                    D'ALARME "ACTD"...) TOUT
<                    EN AYANT UN 'P' EN VIOLATION...
<                    N'Y-A-T'IL PAS EU UN DEFAUT
<                    SECTEUR JUSTE AVANT !!!
<
         LRM         A
         WORD        XACTD           < (A)=CODE DE 'ACTD' SIMPLE...
         JMP         DOWN72          < ET ON SAUE LE 'LAR' QUI SUIT, AVEC 'A'
                                     < POSITIONNE DE TELLE FACON QUE 'P' SOIT
                                     < REINCREMENTE...
DOWN71:  EQU         $
         LAR                         < ET (A)=INSTRUCTION EN CAUSE...
DOWN72:  EQU         $
XWOR%1:  VAL         MKSL=K
XWOR%2:  VAL         XXXMST>XWOR%1
         LRM         B
         WORD        XACTD?XWOR%2    < (B)=CODE DE L'INSTRUCTION SPECIALE
                                     <     D'EXECUTION DES SOUS-PROGRAMMES
                                     <     EN MODE MAITRE,
         CPR         A,B             < EST-CE 'RECMST' ???
                                     < RESTAURATION DE (SLO,SLE) :
         CALL        #SISP CMS5 PLRSLO#
         PLR         B               < ET DE 'IDDESC',
         JE          DOWN50          < OUI, C'EST 'RECMST', LE REGISTRE 'P'
                                     < ET BON : IL POINT SUR L'INSTRUCTION...
                                     < ON VA INTERROMPRE L'UTILISATEUR, ET
                                     < AINSI LE 'RECMST' SERA REINTERE EN
                                     < MEMOIRE BASSE...
         IC          &AXPSTH         < NON, ON REMET 'P' COMME IL FAUT...
<
< DESARMEMENT DE L'UTILISATEUR :
<
DOWN50:  EQU         $
         LXI         NSPACT          < (X)='NSP' DU NIVEAU UTILISATEUR,
         LYI         FONRB0          < (Y)=FONCTION DE REMISE A 0 D'UN BIT,
         LAD         AASTF           < (A)=ADRESSE DU RELAI D'ACCES A 'ASTF',
         BSR         ASMMK           < P H A S E   C R I T I Q U E...
         STZ         &ADCTSY         < L'UTILISATEUR DISPARAIT DE LA LIST
                                     < DES 'DCT' ACTIVABLES...
         LXI         NSNSP0+NSPACT   < (X)=NIVEAU 'NS' DES UTILISATEURS,
         BSR         ATMOBT          < ET ON LE DESACTIVE...
         BSR         ASMDK           < F I N   D E   P H A S E   C R I T I Q U E
         JMP         DOWN9           < VERS LE REVEIL DU NIVEAU DE SERVICE
                                     < ASSOCIE A CET UTILISATEUR...
<
< CAS DES 'SVC' OU DES 'QUIT' :
< (IL FAUT QUE CETTE OPERATION
< SOIT REPETEE, AFIN QU'ELLE
< AIT LIEU EN MEMOIRE BASSE)
<
DOWN10:  EQU         $
         TBT         NBITMO+IDESC7   < EST-CE UNE DEMANDE DE 'SERESC' EN HAUT ??
         JC          DOWN12          < OUI, ON NE PREPARE DONC PAS L'ITERATION
                                     < DU 'SVC'/'QUIT', ON LAISSE 'IDESC7' A 1
                                     < POUR 'RUNO', ET ENFIN, ON VA REVEILLER
                                     < LE NIVEAU DE SERVICE ASSOCIE...
         CPZ         PSTESC-DCTESC+RS,L
                                     < QUEL EST LE MODE DE L'ESCLAVE ???
         JL          DOWN11          < MAITRE : DONC UN 'SVC'...
         DC          PSTESC-DCTESC+RP,L
                                     < ESCLAVE : DONC UN 'QUIT', ET LE REGISTRE
                                     < 'P' DE L'ESCLAVE EST SIGNIFICATIF...
                                     < ON REVIENT DONC SUR LE 'QUIT'.
         JMP         DOWN12
DOWN11:  EQU         $
         PSR         B               < SAUVEGARDE DE 'IDDESC'...
         CALL        #SISP CMS5 PSRSLO#
                                     < SAUVEGARDE DU (SLO,SLE) COURANT.
         LA          PSTESC-DCTESC+RSLO,L
         LB          PSTESC-DCTESC+RSLE,L
         WOE                         < UTILISATION DU (SLO,SLE) UTILISATEUR...
         LY          PSTESC-DCTESC+RK,L
                                     < (Y)=REGISTRE 'K' DE L'ESCLAVE DANS SON
                                     <     ESPACE RELATIF,
         LAR
         ADRI        -D,A            < DECREMENTATION D'UNE UNITE DE LA VALEUR
                                     < DU REGISTRE 'P' DE RETOUR DU 'SVC'.
         STAR
                                     < RESTAURATION DE (SLO,SLE) COURANT :
         CALL        #SISP CMS5 PLRSLO#
         PLR         B
DOWN12:  EQU         $
<
< REVEIL DU NIVEAU DE SERVICE
< ASSOCIE A CET UTILISATEUR :
<
DOWN9:   EQU         $
         STB         IDDESC-DCTESC,L < TRANSMISSION DU DISCRIMINATEUR ('IDESC3')
                                     < ENTRE L'HORLOGE ET LES AUTRES CAS...
         LBY         DEMSER-DCTESC+XXNSP,L
                                     < (A)='NSP' DU NIVEAU DE SERVICE,
         LR          A,X
         BSR         ACADCT          < (L)=ADRESSE DE LA 'DCT' DE SERVICE,
         BSR         ABETA2          < RENVOIE : (A)=BETA(SIT) :
         IF          XXSIT0-K,,XEIF%,
         IF          ATTENTION, LE TEST SUIVANT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         JAL         DOWN40          < OK, LE NIVEAU DE SERVICE ATTEND...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      REGARDER OU EST CE NIVEAU DE
<                    SERVICE !!!
<
DOWN40:  EQU         $
         BSR         ARIT            < QUE L'ON REVEILLE...
XWOR%9:  VAL         K
         LAI         XWOR%9          < AFIN DE POSITIONNER LES INDICATEURS...
<
< SORTIE GENERALE :
<
DOWN13:  EQU         $
         CPZR        A               < POSITIONNEMENT DES INDICATEURS...
         PLR         L
         PLR         A,B,X,Y
         RSR
<
< CAS OU L'ON ETAIT EN BAS :
<
DOWN8:   EQU         $
         LAI         XWOR%9)MFFFF    < AFIN DE POSITIONNER LES INDICATEURS...
         JMP         DOWN13          < ET ON SORT...
         PAGE
<
<
<        R A N G   D E   L ' A L L O C A T E U R -
<        R E L E A S E U R   M E M O I R E  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME DETERMINE
<                    EN FONCTION DE LA TAILLE-OCTET
<                    DE L'ESPACE MEMOIRE UTILISATEUR
<                    (CONNUE PAR 'DEMSWP') LE RANG
<                    (IDENTIFICATEUR) DE L'ALLOCATEUR
<                    ET RELEASEUR MEMOIRE NECESSAIRE
<                    ('B1', 'B2' OU 'B4') SUIVANT LE
<                    TABLEAU :
<
<                    TAILLE OCTET :  RANG ALLOCATEUR/RELEASEUR :
<
<                    <=2KO ('800)    0 : NSP1,
<                    <=4KO ('1000)   1 : NSP2,
<                    <=8KO ('2000)   2 : NSP4 & ASDEM=2,
<                    <=12KO ('3000)  2 : NSP4 & ASDEM=3,
<                    <=16KO ('4000)  2 : NSP4 & ASDEM=4.
<                    <=20KO ('5000)  2 : NSP4 & ASDEM=5,
<                    <=24KO ('6000)  2 : NSP4 & ASDEM=6.
<                    <=32KO ('7000)  2 : NSP=4 & ASDEM=7,
<                    <=32KO (Q8000)  2 : NSP=4 & ASDEM=8.
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DEMANDE DE SWAP (DEMSWP).
<
<
<        RESULTAT :
<                    (A)=BITS14-15(B)=RANG ALLOCATEUR/RELEASEUR MEMOIRE
<                                     NECESSAIRE A L'ESCLAVE.
<                    DANS LE CAS DU RANG 2, ASDEM=2,3,4, SUIVANT
<                    LA TAILLE MEMOIRE NECESSAIRE (8KO, 12KO, 16KO).
<
<
         USE         W,DEM0
RGARM:   EQU         $
         STZ         DEMMEM-DEMSWP+T+ASDEM,W
                                     < PAR PRUDENCE, ET A PRIORI.
         LA          ARGDEM+CODEM    < (A)=TAILLE-OCTET DE L'ESPACE
                                     <     MEMOIRE DE L'ESCLAVE.
         ADRI        -N,A            < POUR INCLURE LES TAILLES QUI
                                     < SONT DEJA DES PUISSANCES DE 2.
         JALE        E712            < E R R E U R   S Y S T E M E...
         DBT
XWOR%1:  VAL         PLK*NOCMO=K
         LAI         NBITMO-XWOR%1
         SBR         X,A             < CALCUL DU RANG, A PARTIR DU
                                     < NUMERO DU 1ER BIT A 1 DANS
                                     < LA TAILLE MEMOIRE.
         CPI         Z
         JLE         E713            < OK, ALLOCATEUR 0 OU 1.
         CPI         NBITMO-XWOR%1-E < TEST D'EXISTENCE DE L'ALLOCATEUR/
                                     < RELEASEUR NECESSAIRE.
         JG          E712            < E R R E U R   S Y S T E M E ...
<
< CAS DES ALLOCATIONS 4K , 6K , 8K :
< ET DE CELLES DE 10, 12, 14 ET 16K :
<
         LA          ARGDEM+CODEM    < (A)=TAILLE-OCTET NECESSAIRE.
         SLRS        YY8*NBITMO=K    < (A)=NBRE DE BLOCS DE 2K-MOTS
                                     <     NECESSAIRES.
         STA         DEMMEM-DEMSWP+T+ASDEM,W
                                     < ET TRANSMISSION A MALOC4/MREL4.
         LAI         NSPAL4-NSPAL1   < C'EST L'ALLOCATEUR/RELEASEUR
                                     < DE RANG 2 QUI EST NECESSAIRE.
         JMP         E714            < OK.
E712:    EQU         $
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      RECALCULER LE RANG DE L'ALLOCATEUR...
<
E713:    EQU         $
         JAGE        E714            < CAS DES TAILLES SUPERIEURES
                                     < OU EGALES A 2KO.
<
< CAS OU LA TAILLE MEMOIRE EST INFERIEURE A 2KO : ON FORCE 2KO.
<
         LAI         NSPAL1-NSPAL1   < ON FORCE L'ALLOCATEUR/RELEASEUR
                                     < DE RANG 0.
E714:    EQU         $
         ORR         A,B             < MISE DU RANG DE L'ALLOCATEUR/
                                     < RELEASEUR MEMOIRE NECESSAIRE EN
                                     < BITS 14-15 DE B.
         RSR
         PAGE
<
<
<        1 E R E   A L L O C A T I O N   M E M O I R E  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME EST APPELE
<                    LORS DE LA PREMIERE ALLOCATION
<                    MEMOIRE (APRES 'JE') POUR FORCER
<                    LE RANG DU PREMIER ALLOCATEUR
<                    MEMOIRE NECESSAIRE...
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DCT(ESCLAVE).
<                    (W DESTRUCTIBLE).
<
<
<        RESULTAT :
<                    BIT0(B)=1 : ALLOCATION NECESSAIRE,
<                    BIT1-15(B)=RANG DE L'ALLOCATEUR.
<
<
         USE         W,DEM0
RGAM:    EQU         $
         ADRI        DEMSWP-DCTESC,W < (W)=@DEMSWP.
         BSR         ARGARM          < DETERMINATION DU RANG DE
                                     < L'ALLOCATEUR MEMOIRE NECESSAIRE.
         SBT         NBITMO+BBSOSI   < INDIQUONS AINSI QU'UNE ALLOCATION
                                     < EST DEMANDEE.
         RSR
         PAGE
<
<
<        A L L O C A T I O N / R E L E A S E
<        D E   L ' E S P A C E   M E M O I R E
<                    E S C L A V E  :
<
<
<        FONCTION :
<                      CES DEUX SOUS-PROGRAMMES
<                    ALLOUE ET RELEASE (RESPECTI-
<                    VEMENT) L'ESPACE MEMOIRE DE
<                    L'UTILISATEUR...
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DCT(ESCLAVE).
<                    BIT0(B)=1 : ALLOCATION/RELEASE A FAIRE,
<                           =0 : RIEN A FAIRE.
<                    BITS8-13(B)=K,
<                    BIT14-15(B)=RANG DE L'ALLOCATEUR/RELEASEUR
<                                MEMOIRE NECESSAIRE A L'ESCLAVE.
<
<
<        RESULTAT :
<                    'RL' : BBMOVE <-- 0,
<                    'AL' : BBMOVE <-- 0 S'IL L'ESPACE MEMOIRE S'EST DEPLACE,
<                                    1 SINON...
<
<
         USE         L,DCT0
         USE         W,DEM0
<
<        R E L E A S E   M E M O I R E  :
<
RLMESC:  EQU         $
         LAI         NSPRL1          < RELEASEUR 2KO (RANG 0).
         LYI         NIL-ZERO*NOCMO+E  < 'AL' : (Y)=ADRESSE D'UN ESPACE MEMOIRE
                                       <            INALLOUABLE : ON PREND POUR
                                       <            CELA UNE ADRESSE-OCTET
                                       <            IMPAIRE...).
         JMP         E716
<
<        A L L O C A T E U R   M E M O I R E  :
<
ALMESC:  EQU         $
         LAI         NSPAL1          < ALLOCATEUR 2KO (RANG 0).
         LY          DEMSWP-DCTESC+T+AMDEM,W
                                     < 'RL' : (Y)=ADRESSE DE L'ESPACE MEMOIRE
                                     <            ALLOUE AU COUP PRECEDENT...
<
< TRONC COMMUN :
<
E716:    EQU         $
<
< TEST SUR LA NECESSITE D'UNE ALLOCATION/RELEASE MEMOIRE :
<
         TBT         NBITMO+BBSOSI   < UN SWAP-OUT A-T'IL ETE FAIT...
         JNC         E717            < NON, DONC RIEN A FAIRE...
<
< CAS OU L'ALLOCATION/RELEASE EST NECESSAIRE :
<
         ADRI        DEMMEM-DCTESC,W < (W)=@DEMANDE MEMOIRE DANS
                                     < DCT-ESCLAVE.
         ADR         B,A
         ANDI        MKRGM           < (A)=NSP,>.
         SWBR        A,A             < GENERATION DE L'EN-TETE DE DEMMEM
         STA         NSPTYP          < MAJ NSPTYP.
         BSR         ACHAND          < ENVOI DE LA DEMANDE D'ALLOCATION/
                                     < RELEASE.
         BSR         ACHANW          < ATTENTE DE FIN D'ALLOCATION/
                                     < RELEASE...
         RBT         NBITMO+BBMOVE   < A PRIORI : IL Y A DEPLACEMENT...
         TBT         NBITMO+BBTOP    < Y-A-T'IL EU 'RUNO' ???
         JC          E717            < OUI, IL FAUT DONC SWAPPER INTEGRALEMENT !
         LA          DEMSWP-DEMMEM+T+AMDEM,W
                                     < (A)=ADRESSE DE L'ESPACE MEMOIRE ALLOUE
                                     <     OU RELAESE (SI 'RL')...
         CPR         Y,A             < Y-A-T'IL EU DEPLACEMENT ???
         JNE         E717            < NON, OU BIEN IL S'AGIT DE 'RL'...
         SBT         NBITMO+BBMOVE   < OUI, BMOVE <-- 1...
E717:    EQU         $
         RSR
         PAGE
<
<
<        M O U V E M E N T   D E S   B U F F E R S
<                    D E S   E S C L A V E S  :
<
<
<        FONCTION :
<                      CES DEUX SOUS-PROGRAMMES SONT
<                    APPELES PAR L'INTERMEDIAIRE DE
<                    L'AUTOMATE 'OTOSP' (EST-IL LE
<                    SEUL ???) ; ILS ONT A LEUR CHARGE
<                    DE DEPLACER LES BUFFERS ESCLAVES
<                    (APPARTENANT A L'ESPACE MEMOIRE
<                    UTILISATEUR) VERS OU A PARTIR DU
<                    BUFFER RESIDENT 'BUFESC', ET CECI
<                    QUAND L'ESPACE MEMOIRE EST RESI-
<                    DENT (AVANT LE SWAPPING OUT POUR
<                    UNE ECRITURE, ET APRES LE SWAPPING
<                    IN POUR UNE LECTURE).
<
<
<        RAPPEL :
<                    OPDEM.AND.'MKESEF'=0,1 ==> OPERATION DE LECTURE,
<                                      =2   ==> OPERATION D'ECRITURE,
<                                      >2   ==> CE N'EST PAS UNE E/S EFFECTIVE.
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DCT(ESCLAVE).
<                    (B)=A NE PAS DETRUIRE...
<
<
<        RESULTAT :
<                    (Y)=K : LECTURE OU OPERATION N'ETANT PAS UNE
<                            E/S EFFECTIVE,
<                       #0 : ECRITURE.
<                            LA VALEUR CONTENUE DANS Y EST LE NSPTYP
<                            DU SERVICE DEMANDE PAR L'ESCLAVE.
<                    (CETTE VALEUR DE Y EST DESTINE A SWAPO).
<
<
<
<
<        A V A N T   L E S   S W A P   O U T  :
<
<
OMOV1:   EQU         $
         LYI         FGR             < MODE NON-ECRITURE A PRIORI.
<
< TEST SUR LA FONCTION DEMANDEE :
<
         LA          DEMESC-DCTESC+T+OPDEM,W
         ANDI        MKESEF          < AFIN DE SAVOIR S'IL S'AGIT
                                     < D'UNE E/S EFFECTIVE.
         CPI         FGX
         JG          Z650            < C'EST UNE FONCTION ; ALLONS VOIR
                                     < SI ELLE EST EQUIVALENTE A
                                     < UNE ECRITURE.
<
< DANS LE CAS D'UNE E/S EFFECTIVE, IL FAUT DEPLACER LES
< BUFFERS, ET ON FAIT APPEL POUR CELA A HDLMEM,
< DONT ON VA PREPARER LES ARGUMENTS ICI :
<
         LX          DEMESC-DCTESC+T+AMDEM,W
         STX         DEMESC-DCTESC+T+ASDEM,W
<
< CALCUL DE L'AMDEM DE DEMESC :
<
         LR          W,X             < (X)=@DCT-ESCLAVE.
         ADRI        BUFESC-DCTESC,X < (X)=@BUFESC.
         ADR         X,X             < (X)=@OCTET DE BUFESC.
         IF          NOCMO-2,,XEIF%,
         IF          ATTENTION : 'ADR X,X' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         STX         DEMESC-DCTESC+T+AMDEM,W
<
< LE MOVE BUFFER DOIT IL AVOIR LIEU
< AVANT LE SWAP OUT, OU APRES LE SWAP IN...
<
         CPI         FGW             < EST-CE UNE ECRITURE...
         JNE         E747            < DANS LE CAS D'UNE LECTURE, LE
                                     < MOVE EST FAIT APRES LE SWAP
                                     < IN DANS OMOV2.
         LXI         FGR             < DEMANDE DE LECTURE SUR 'MEM'.
<
< CAS D'UNE ECRITURE POUR OMOV1 OU D'UNE
< LECTURE POUR OMOV2 :
<
E749:    EQU         $
<
< GENERATION DE LA DEMANDE VERS HDLMEM,
< AVEC SAUVEGARDE DES ARGUMENTS DU SERVICE :
<
         LA          DEMESC-DCTESC+T+OPDEM,W
         STX         DEMESC-DCTESC+T+OPDEM,W
         LY          DEMESC-DCTESC+XXNSP,W < SAVE NSPTYP DU SERVICE DEMANDE.
         LXI         NSPMEM          < NSP DE HDLMEM.
         SWBR        X,X
         STX         DEMESC-DCTESC+XXNSP,W < NSPTYP DE LA DEMANDE SUR HDLMEM.
<
<        ON A ICI :
<                    (A)=OPDEM DU SERVICE DEMANDE,
<                    (Y)=NSPTYP DU SERVICE DEMANDE.
<
         ADRI        DEMESC-DCTESC,W < (W)=@DEMESC.
<
<        ON A ICI :
<                    (W)=ADRESSE DEMANDE VERS 'HDLMEM',
<                    OPDEM=K POUR OMOV1 ==>      BUFFER-->'BUFESC',
<                         =2 POUR OMOV2 ==>      'BUFESC'-->BUFFER.
<                    AMDEM=ADRESSE OCTET DE BUFESC,
<                    ASDEM=ADRESSE OCTET DU BUFFER DE L'ESCLAVE.
<                    (Y)=NSPTYP DU SERVICE DEMANDE.
<
         BSR         ACHAND          < ENVOI DE LA DEMANDE VERS HDLMEM.
         BSR         ACHANW          < ATTENTE DE FIN DE MOVE...
<
< REGENERATION DU SERVICE DEMANDE :
<
         USE         W,DEM0
         STY         NSPTYP
         STA         ARGDEM+OPDEM
E747:    EQU         $
         RSR
<
<
<        T R A I T E M E N T   D E S   F O N C T I O N S  :
<        ( T E S T   D ' E Q U I V A L E N C E
<        A   U N E   E C R I T U R E )
<
<
Z650:    EQU         $
         LR          A,X             < (X)=FONCTION DEMANDEE.AND.'7.
         LBY         DEMESC-DCTESC+XXNSP,W < (A)=NSP DEMANDE.
         JAE         E747            < C'EST UNE FONCTION MONITEUR ;
                                     < ELLE N'EST PAS CONSIDEREE COMME
                                     < UNE E/S EFFECTIVE ; D'AILLEURS,
                                     < EN GENERAL, IL FAUT ABSOLUMENT
                                     < SWAPPER OUT AVANT DE LES
                                     < EXECUTER (CF. LE CHANGEMENT DE
                                     < TAILLE MEMOIRE...)
         TBT         MSKNSP=K+BINNSP < TEST DE BLOCAGE DU SWAPPING ???
         JC          E747            < PAS LA PEINE DE SE FATIGUER,
                                     < LE SWAPPING EST BLOQUE POUR
                                     < CET UTILISATEUR.
         PSR         X,L             < SAVE FONCTION DEMANDEE.AND.'7,
                                     < ET L'@DCT-SERVICE.
         LR          A,X             < (X)=NSP DU SERVICE DEMANDE.
         BSR         ACADCT          < RENVOIE : (L)=@DCT(SERVICE
                                     < DEMANDE(X)).
         LA          SIT+TFONCE      < (A)=TABLE D'EQUIVALENCE DES
                                     <     FONCTIONS 3 A 7 DU SERVICE
                                     <     DEMANDE.
         PLR         X,L             < RESTAURE (X)=FONCTION.AND.'7, ET
                                     < (L)=@DCT-SERVICE.
         JAE         E747            < LA TABLE D'EQUIVALENCE ETANT
                                     < NULLE, LA FONCTION DEMANDEE
                                     < N'EST PAS CONSIDEREE COMME
                                     < UNE E/S EFFECTIVE.
         ADR         X,X             < (CHAQUE FONCTION OCCUPE 2 BITS)
XWOR%1:  VAL         2               < LE CODAGE TIENT SUR 2 BITS...
XWOR%2:  VAL         FGX*XWOR%1      < ON NE COMMENCE QU'APRES LA FONCTION 'FGW'
         SCLS        NBITMO-XWOR%2,X < RECUPERATION DE L'EQUIVALENCE
                                     < DE LA FONCTION (X).
         ANDI        BIT>XWOR%1-N    < (A)=NBRE DE CARACTERES ECRITS
                                     <     PAR CETTE FONCTION.
         JAE         E747            < LA FONCTION (X) N'EST PAS
                                     < CONSIDERRE COMME UNE E/S
                                     < EFFECTIVE, SOIT QU'ELLE NE LE
                                     < SOIT VRAIMENT PAS, SOIT QUE
                                     < LE NBRE DE CARACTERES QU'ELLE
                                     < ECRIVE SOIT TROP GRAND (CF.
                                     < L'ERASE DES VISUS...).
<
< MISE EN PLACE D'UN CODEM(DEMESC) :
<
         STA         DEMESC-DCTESC+T+CODEM,W
                                     < ON POURRA AINSI DANS LE SWAPPING
                                     < OUT, APPLIQUER A CETTE FONCTION
                                     < LES CRITERES DE SWAPP UTILISES
                                     < POUR LES ECRITURES.
         LY          DEMESC-DCTESC+XXNSP,W < (Y)=NSPTYP#0 : LA FONCTION EST
                                     < DONC ASSIMILEE A UNE ECRITURE
                                     < EXPLICITE.
         JMP         E747            < ET C'EST TOUT...
<
<
<        A P R E S   L E S   S W A P   I N  :
<
<
<        ARGUMENT :
<                    (Y)=TRANSLATION EN MOT SUBIE PAR LE PROGRAMME.
<                        (TRANSMIS PAR ISLOE).
<
<
OMOV2:   EQU         $
<
< TEST DE LA FONCTION DEMANDEE :
<
         LA          DEMESC-DCTESC+T+OPDEM,W
         ANDI        MKESEF
         CPI         FGW             < EST-CE UNE LECTURE...
         IF          FGX-FGW,,XEIF%,
         IF          ATTENTION, CE QUI PRECEDE EST IDIOT !!!
XEIF%:   VAL         ENDIF
         JGE         E747            < NON RIEN A FAIRE...
<
< CAS D'UNE LECTURE, IL FAUT MOVER LE BUFFER :
< (A CONDITION QUE TOUT SE SOIT BIEN PASSE...)
<
         LXI         FGW             < DEMANDE D'ECRITURE SUR 'MEM'.
<
< TRANSLATION DE L'ADRESSE-OCTET DU BUFFER :
<
         LA          DEMESC-DCTESC+T+ASDEM,W
         ADR         Y,A             < TRANSLATION.
         ADR         Y,A             < TRANSLATION.
         IF          NOCMO-2,,XEIF%,
         IF          ATTENTION : LES 2 'ADR' PRECEDENTS SONT MAUVAIS !!!
XEIF%:   VAL         ENDIF
         STA         DEMESC-DCTESC+T+ASDEM,W
         CPZ         DEMESC-DCTESC+T+ETADEM,W
         JNE         E747            < LE SERVICE DEMANDE S'ETANT MAL
                                     < EXECUTE, IL N'Y A PAS DE
                                     < MOVE DES BUFFERS A EXECUTER !!!
         JMP         E749
         PAGE
<
<
<        S W A P P I N G   I N & O U T  :
<
<
<        PHILOSOPHIE :
<                    1- L'ORDONNANCEMENT DES DEMANDES DE SWAP
<                    IN & OUT EST FAIT AUTOMATIQUEMENT PAR CHAND.
<                    2- LE SWAPPING-OUT EST EXECUTE EN MODE
<                    PRIORITAIRE (CONTRAIREMENT AU SWAPPING-IN) ; EN E
<                    EFFET, PLUS VIDE LE SWAPPING-OUT EST FAIT,
<                    PLUS VITE LA LIBERATION DE L'ESPACE MEMOIRE
<                    DE L'ESCLAVE EST FAITE, CE QUI A POUR RESULTAT
<                    D'AUGEMENTER LE DEBIT DU SYSTEME.
<
<
<        BLOCAGE DU SWAPPING ESCLAVE :
<                      ON A LA POSSIBILITE DE BLOQUER POUR
<                    UN ESCLAVE DETERMINE LE SWAPPING.
<                    IL SUFFIT POUR CELA DE METTRE
<                    A 1 LE BIT0 DE NSPTYP(DEMSWP) :
<                      BIT0(NSPTYP(DEMSWP))=K : SWAPPING AUTORISE,
<                                          =1 : SWAPPING BLOQUE POUR
<                                               CET ESCLAVE.
<
<
<        OPTIMISATION DES SWAPPINGS 'IN' :
<                      LA TABLE 'TOMP' DE L'ALLOCATEUR MEMOIRE EST
<                    UTILISEE POUR OPTIMISER LES SWAPPINGS 'IN' ; ELLE
<                    MEMORISE PAR BLOC DE 'PLK' K-MOTS (DIT "BK"), D'UNE
<                    PART L' DE L'UTILISATEUR QUI LE POSSEDE, OU
<                    QUI LE POSSEDAIT EN DERNIER, ET D'AUTRE PART LE
<                    NUMERO RELATIF (A PARTIR DE 0) QU'IL POSSEDE OU
<                    POSSEDAIT DANS L'ESPACE DE CET UTILISATEUR. LORSQU'ON
<                    PROCEDE A UN SWAPPING 'IN', ON NE SWAPPE PAS LES
<                    "BK" DE TETE DE L'ESPACE UTILISATEUR TELS QU'ILS
<                    N'ONT APPARTENUS A PERSONNE D'AUTRE...
<                      ON NOTERA ENFIN QU'IL N'Y A PAS D'ACCES CRITIQUE A
<                    CETTE TABLE, CAR EN EFFET SI ON TOUCHE A TOMP("BK"),
<                    C'EST QUE CE BLOC "BK" NOUS APPARTIENT !!!
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DCT(ESCLAVE).
<                    (DESTRUCTIBLE)
<                    DEMSWP(DCT-ESCLAVE) : DEMANDE DE SWAPPING
<                    IN/OUT SUR NSPDKS.
<                    (Y)=K : LECTURE,
<                            E/S NON EFFECTIVE,
<                            SERVICE NON PRIORITAIRE (NSP>=(HINSP)),
<                            LORS D'1NE GROSSE CHAGRE MEMOIRE.
<                       =NSP (#0) : SERVICES IMMEDIATS (NSP<  (HINSP)),
<                       =1 : CAS DES QUANTUM D'HORLOGE EXPIRES.
<
<
<        C H A R G E M E N T   D ' U N   P R O C E S S E U R  :
<                    C'EST UN SWAPPING IN OU L'ADRESSE DISQUE
<                    N'EST PAS CELLE DE LA ZONE DE SWAPPING
<                    DE L'ESCLAVE...
<
<
<        CHOIX ENTRE SWAP-IN ET LOAD-PROCESSEUR :
<                    OPDEM=K : SWAP-IN,
<                    OPDEM#0 : LOAD PROC D'@DK (OPDEM).
<
<
<        UTLISATION DU REGISTRE B :
<                    BIT0(B)=1 : IL FAUT FAIRE DU SWAPPING,
<                           =0 : LE SWAPPING N'EST PAS NECESSAIRE.
<                    BIT14-15(B)=RANG DE L'ALLOCATEUR/RELEASEUR MEMOIRE.
<
<
         USE         L,DCT0
         USE         W,DEM0
<
<
<        S W A P P I N G   I N  :
<
<
SWAPI:   EQU         $
         ADRI        DEMSWP-DCTESC,W < (W)=@DEMANDE DE SWAP DANS DCT-ESCLAVE.
         TBT         NBITMO+BBSOSI   < LE SWAP-OUT A-T'IL ETE FAIT...
         JNC         E711            < NON, DONC PAS DE SWAP-IN...
         LA          NSPTYP          < MAJ DE L'EN-TETE DE LA DEMANDE.
         RBT         PRIO            < UN SWAP-IN EST EXECUTE
                                     < EN MODE NON PRIORITAIRE.
         STA         NSPTYP
         LA          ARGDEM+AMDEM    < (A)=ADRESSE OCTET DU BLOC ALLOUE,
         SLRS        PLK*NOCMO=K
         LR          A,Y             < (Y)=NUMERO PAR RAPPORT A 0 DU PREMIER
                                     <     'PLK'-BLOC ALLOUE...
         LA          ARGDEM+CODEM    < (A)=LONGUEUR OCTET DE CET ESPACE,
         SLRS        PLK*NOCMO=K
         LR          A,X             < (X)=NOMBRE DE 'PLK'-BLOCS ALLOUES.
         LA          IDESC-DEMSWP,W
         ANDI        MKIDES          < (A)= DE CET UTILISATEUR.
         IF          MKIDES=K-K,,XEIF%,
         IF          ATTENTION : CE QUI PRECEDE EST FAUX !!!
XEIF%:   VAL         ENDIF
         SWBR        A,A             < (A)=IDESC/0 (K=NUMERO DU PREMIER 'PLK'
                                     <     BLOC ALLOUE).
XWOR%1:  VAL         MOCG=K
XWOR%2:  VAL         XITOMP=K
         IF          XWOR%1-XWOR%2,,XEIF%,
         IF          ATTENTION : CE QUI PRECEDE EST FAUX !!!
XEIF%:   VAL         ENDIF
<
< CHOIX ENTRE SWAP-IN ET LOAD-PROCESSOR :
<
         CPZ         ARGDEM+OPDEM
         JE          E710X           < OPDEM=K : C'EST UN SWAP-IN
                                     < VERITABLE.
<
<
<        L O A D - P R O C E S S O R  :
<
<
E710XE:  EQU         $
         XR          X,Y
         STA         &ATOMP          < OCCUPATION DU 'PLK' BLOC COURANT,
         XR          X,Y
         ADRI        I,A             < PROGRESSION DU NUMERO RELATIF DU
                                     < 'PLK'-BLOC COURANT DANS L'ESPACE
                                     < UTILISATEUR,
         ADRI        I,Y             < PROGRESSION DU NUMERO ABSOLU DE
                                     < 'PLK'-BLOC,
         JDX         E710XE          < AU SUIVANT, S'IL EXISTE...
         LA          ARGDEM+OPDEM    < (A)=ADRESSE DISQUE DU PROCESSEUR DE
                                     <     BASE A CHARGER...
         LX          ARGDEM+ASDEM    < SAVE L'ADRESSE DE LA ZONE DE
                                     < SWAPPING DE L'ESCLAVE DANS X.
         STA         ARGDEM+ASDEM    < ET MISE A LA PLACE DE L'ADRESSE
                                     < DU PROCESSEUR SUR LE DISQUE DE
                                     < SWAPPING.
         LAI         NSPDKS          < DANS LE 'LOAD PROCESSOR', ON PREND
         STBY        NSPTYP          < SYSTEMATIQUEMENT 'DKF'...
         STZ         ARGDEM+OPDEM    < LE LOAD-PROC EST UNE LECTURE.
         BSR         ACHAN0          < ENVOI DE LA DEMANDE DE CHARGE-
                                     < MENT DU PROCESSEUR AVEC PASSAGE TEMPO-
                                     < RAIRE SUR LA PAGE0...
         WAIT        WEIO            < ATTENTE DE FIN DE CHARGEMENT.
         STX         ARGDEM+ASDEM    < RESTAURE L'ADRESSE DE LA ZONE
                                     < DE SWAPPING DE L'ESCLAVE EN FIN
                                     < DE CHARGEMENT DU PROCESSEUR.
         CPZ         ARGDEM+ETADEM   < VALIDATION DU LOAD PROCESSOR...
         JE          SYSRA5          < OK BIEN EFFECTUE...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
                                     < (PROCESSEUR SUPERIEUR A 8K...)
<
<        QUE FAIRE ???
<                      IL S'AGIT PROBABLEMENT D'UNE
<                    ERREUR SUR 'DKF', ALORS...
<
SYSRA5:  EQU         $
         JMP         E955            < AND NOW GO BACK...
<
< OPTIMISATION DES SWAPPINGS 'IN' :
<
E710X:   EQU         $
         TBT         NBITMO+BBMOVE   < Y-A-T'IL EU DEPLACEMENT DE L'ESPACE ???
         PSR         B
         LBI         K               < (B)=COMPTEUR DES 'PLK'-BLOCS DEJA LA
                                     <     PROPRIETE DE CET UTILISATEUR.
         JNC         E710XB          < OUI, DONC IL FAUT SUREMENT TOUT
                                     < SWAPPER IN...
         PSR         A
         LBY         DEMESC-DEMSWP+XXNSP,W < (A)=NVP DU SERVICE DEMANDE,
         CPI         NSPVID          < EST-CE UN SERVICE IMMEDIAT ???
         PLR         A
         JE          E710XB          < OUI, ALORS ON SWAPPE IN A PRIORI,
                                     < VOIR EN PARTICULIER LES RISQUES
                                     < LORS DES CHANGEMENTS DE TAILLE DE
                                     < L'ESPACE MEMOIRE, ET RETOUR A UNE
                                     < TAILLE ANTERIEURE !!!
E710XA:  EQU         $
         XR          X,Y
         CP          &ATOMP          < MEME PROPRIETAIRE, ET MEME POSITION
                                     < RELATIVE DANS L'ESPACE ???
         XR          X,Y
         JNE         E710XB          < NON, ON ARRETE ICI LE TEST...
         ADRI        I,B             < OUI, COMPTAGE DES IDENTITES,
         ADRI        I,A             < COMPTAGE DES NUMEROS RELATIFS DES
                                     < 'PLK'-BLOCS DANS L'ESPACE UTILISATEUR,
         ADRI        I,Y             < (Y)=NUMERO DU 'PLK'-BLOC SUIVANT,
         JDX         E710XA          < S'IL EXISTE...
         PLR         B
         JMP         E711            < LE SWAPPING 'IN' EST INUTILE, CAR ON EST
                                     < RETOMBE SUR LE MEME ESPACE TOUJOURS
                                     < INTACT...
E710XB:  EQU         $
E710XD:  EQU         $
         XR          X,Y
         STA         &ATOMP          < MEMORISATION DU PROPRIETAIRE, ET DU
                                     < NUMERO RELATIF, N'OUBLIONS PAS QU'IL N'Y
                                     < A PAS D'ACCES CRITIQUE A TOMP('PLK')
                                     < PUISQU'ON POSSEDE CE BLOC 'PLK'.
         XR          X,Y
         ADRI        I,A             < OCCUPATION DU BLOC SUIVANT, MEME SI ON
                                     < L'AVAIT DEJA...
         ADRI        I,Y             < (Y)=NUMERO DU 'PLK'-BLOC SUIVANT...
         JDX         E710XD
         SLLD        PLK/YY7=K       < (B)=CONSTANTE DE TRANSLATION EXPRIMEE
                                     <     EN ADRESSE-SECTEURS SUR 'DKF'.
         LA          ARGDEM+ASDEM
         PSR         A               < SAUVEGARDE DE L'ADRESSE DE SWAPPING
                                     < "NORMALE"...
         ADR         B,A
         STA         ARGDEM+ASDEM    < OPTIMISATION DE L'ASDEM...
         SLLD        YY8=K           < (B)=CONSTANTE DE TRANSLATION EXPRIMEE
                                     <     EN OCTETS...
         LX          ARGDEM+AMDEM
         ADR         B,X
         STX         ARGDEM+AMDEM    < OPTIMISATION DE 'AMDEM',
         LY          ARGDEM+CODEM
         SBR         B,Y
         STY         ARGDEM+CODEM    < ET OPTIMISATION DU 'CODEM'.
         BSR         ACHAN0          < LANCEMENT DU SWPPING 'IN' AVEC PASSAGE
                                     < TEMPORAIRE SUR LA PAGE0...
         ADR         B,Y
         SBR         B,X
         WAIT        WEIO            < ET ATTENTE DE FIN...
         STY         ARGDEM+CODEM    < RESTAURATION DU 'CODEM',
         STX         ARGDEM+AMDEM    < DE L''AMDEM',
         PLR         A
         STA         ARGDEM+ASDEM    < ET ENFIN DE L''ASDEM'...
         PLR         B
         JMP         E710XC          < VERS LE TEST DES CONDITIONS DE RETOUR...
<
<
<        E X E C U T I O N   D U   S W A P P I N G   O U T  :
<
<
E710:    EQU         $
         BSR         ACHAN0          < ENVOI DE LA DEMANDE DE SWAP OUT, AVEC
                                     < PASSAGE TEMPORAIRE SUR LA PAGE0...
         WAIT        WEIO            < ATTENTE DE LA FIN DE SWAP OUT...
<
<
<        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  :
<
<
E710XC:  EQU         $
         CPZ         ARGDEM+ETADEM   < VALIDATION DU SWAP IN/OUT...
         JE          E711            < OK, TOUT S'EST BIEN PASSE.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      IL S'AGIT SOIT D'UNE ERREUR SUR
<                    'DKF', SOIT D'UN TIME OUT SUR 'PR1',
<                    AUQUEL CAS, ON PEUT RETENTER L'ECHANGE...
<
<
< RETOUR COMMUN DES SWAPPING IN ET OUT :
<
E711:    EQU         $
         STZ         ARGDEM+OPDEM    < NETTOYAGE...
<
<        A T T E N T I O N  :
<                    QUAND ON SORT DU SWAPPER (IN, OU,
<                    LOAD-PROC), ON A OPDEM=K !!!!
<
E955:    EQU         $
         RSR                         < ET C'EST TOUT...
<
<
<        S W A P P I N G   O U T  :
<
<
SWAPO:   EQU         $
         ADRI        DEMSWP-DCTESC,W < (W)=@DEMANDE DE SWAP DANS DCT-ESCLAVE.
         LRM         A
         WORD        SLOM3N          < (A)=PLUS PETIT 'SLO' POSSIBLE EN MEMOIRE
                                     <     DE SWAPPING,
         CP          PSTESC-DEMSWP+RSLO,W
                                     < ALORS L'ESCLAVE EST-IL EN MEMOIRE BASSE,
                                     < OU EN MEMOIRE HAUTE (C'EST-A-DIRE DE
                                     < SWAPPING) ???
         JG          E711X1          < L'ESCLAVE EST EN BAS, ON PEUT EXAMINER
                                     < LA NECESSITE DU SWAPPING OUT...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE COMMENT IL SE FAIT
<                    QUE L'ESCLAVE SOIT DEJA SWAPPE
<                    EN MEMOIRE HAUTE, ET QU'ON CHERC-
<                    CHE DE NOUVEAU A LE SWAPPER OUT
<                    (VOIR EN PARTICULIER L'AUTOMATE
<                    COURANT DU NIVEAU DE SERVICE) !!!
<
         JMP         E711            < ET ON SORT...
                                     < (A NOTER : (B)=K)
E711X1:  EQU         $
         LA          NSPTYP
         IF          BINNSP-BITSIG,,XEIF%,
         IF          ATTENTION : LE 'JAL' SUIVANT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         JAL         E711            < LE SWAPPING EST BLOQUE POUR
                                     < CET ESCLAVE (NOTER : (B)=K).
         BSR         ARGARM          < CALCUL DANS A & B DU RANG DE
                                     < L'ALLOCATEUR/RELEASEUR NECESSAIRE.
                                     < NOTER QUE BIT0(B)=K.
         LR          A,X             < (X)=RANG DU RELEASEUR MEMOIRE.
<
< TEST SUR LE SWAPPING OUT CYCLIQUE (ET A PRIORI) :
< AFIN DE NE PAS BLOQUER L'ALLOCATION
< MEMOIRE PAR DES PHENOMENES DIFFICILEMENT
< CONTROLABLES, ON SWAPPE OUT A PRIORI
< ET PERIODIQUEMENT LES ESCLAVES DU SYSTEME,
< A L'AIDE DE LA LISTE CYCLIQUE 'SOCYCL'
< GEREE PAR L'HORLOGE.
<
         PSR         B,X             < SAVE LE RANG DE L'ALLOCATEUR/
                                     < RELEASEUR MEMOIRE NECESSAIRE.
                                     < AINSI QUE B
         LX          IDESC-DEMSWP,W  < OCTET1(X)=ID-ESCLAVE.
         RQST        &ASEMSO         <<<=(HINSP)),
<                            (CAS DES GROSSES CHARGES MEMOIRE)
<                    (Y)#0 : ECRITURE (=NSPTYP SERVICE DEMANDE),
<                            INTERRUPTION D'HORLOGE (=1),
<                            SERVICE IMMEDIAT DE FONCTION>='FONFR' (=-1).
<                    (A)=NSP DU SERVICE DEMANDE PAR L'ESCLAVE.
<
         CPZR        Y               < TEST DU MODE DU SERVICE.
         JE          E735            < DANS LE CAS D'UNE LECTURE OU
                                     < D'UNE OPERATION QUI N'EST PAS
                                     < UNE E/S EFFECTIVE, ON SWAPPE
                                     < A PRIORI.
<
< TEST SUR LA NECESSITE DE FAIRE DU SWAP :
<
         PSR         L               < SAVE @DCT-SERVICE.
         PSR         X               < SAVE LE RANG DU RELEASEUR MEM.
XWOR%1:  VAL         MSKNSP=K
XWOR%1:  VAL         -XWOR%1         < POUR UN DECALAGE A DROITE...
         ANDI        MSKNSP>XWOR%1
         LR          A,X             < (X)=NSP DU SERVICE DEMANDE PAR
                                     <     L'ESCLAVE.
         BSR         ACADCT          < (L)=@DCT DU SERVICE DEMANDE.
         LBY         BITSEM
XWOR%1:  VAL         M57SIT=K
XWOR%1:  VAL         -XWOR%1         < POUR UN DECALAGE A DROITE...
         ANDI        M57SIT>XWOR%1
         LR          A,X             < CALCUL DU NBRE DE DECALAGES A
                                     < FAIRE SUR LE COMPTE OCTETS DE
                                     < L'ECHANGE POUR CONNAITRE A UNE
                                     < CONSTANTE MULTIPLICATIVE PRES,
                                     < LA DUREE DE L'ECRITURE DEMANDEE.
         LA          DEMESC-DEMSWP+T+CODEM,W
         SLLS        L,X             < (A)=DUREE*CONSTANTE.
         PLR         X               < RESTAURE (X)=RANG RELEASEUR MEMOIRE.
         CP          DMES            < COMPARAISON DE LA DUREE PREVUE
                                     < POUR L'E/S A UN SEUIL AU DELA
                                     < DUQUEL, IL VAUT MIEUX SWAPPER.
         JG          Z754            < LA DUREE DE L'ECRITURE SERA
                                     < TROP GRANDE : SWAP-OUT !!!!!
         ADRI        NSPAL1,X        < CALCUL DU NSP DE L'ALLOCATEUR
                                     < MEMOIRE ASSOCIE.
         BSR         ACADCT          < (L)=@DCT ALLOCATEUR ASSOCIE.
         BSR         APBS            < TEST DE LA FILE D'ATTENTE SUR
                                     < L'ALLOCATEUR MEMOIRE.
         JGE         Z754            < IL Y A TROP DE DEMANDES EN
                                     < ATTENTE SUR L'ALLOCATEUR, IL
                                     < FAUT SWAPPER.
<
< CAS OU L'ON EST INDECIS : EN FAIT SI L'ON EST ICI,
< C'EST QUE L'HORLOGE A INTERROMPU UN ESCLAVE.
< SI CET ESCLAVE EST SEUL OU PRESQUE A ETRE
< ACTIVABLE, IL SERAIT STUPIDE DE LE SWAPPER
< EN AFFET IL VA SERVIR DE TACHE IDLE...
<
         LXI         NSPSCH
         BSR         ACADCT          < (L)=@DCT-SCHEDULER.
         BSR         APBS            < TEST DE LA FILE D'ATTENTE SUR
                                     < LE SCHEDULER.
         PLR         L               < RESTAURE (L)=@DCT-SERVICE.
         JLE         E711            < IL N'EST PAS NECESSAIRE DE SWAPPER
                                     < OU BIEN IL N'EST PAS JUDICIEUX DE
                                     < SWAPPER (CF. CAS SCHEDULER).
<        NOTA :
<                    BIT0(B)=K...
<
<
< CAS OU LE SWAPPING EST NECESSAIRE :
<
E735:    EQU         $
         SBT         NBITMO+BBSOSI   < COMMUNIQUONS AUX AUTRES
                                     < ROUTINES DE L'AUTOMATE QU'UN
                                     < SWAPPING OUT EST FAIT...
         LX          ANSPS           < (X)='NSP' DE L'ORGANE DE SWAPPING...
         IF          BMCDAJ-BITSIG,,XEIF%,
         IF          ATTENTION : LE TEST SUIVANT EST INSUFFISANT !!!
XEIF%:   VAL         ENDIF
         CPZ         CDESCO-DEMSWP,W < LA 'CDA' COURANTE DE L'UTILISATEUR
                                     < EST-ELLE LA 'CDAJ' ???
         JL          Z70X1           < OUI, ON PEUT DONC SWAPPER OUT SUR 'PR1'.
         LRM         A
         WORD        MEMTV0          < (A)=ORIGINE DE LA 'CDA-IMAGE',
         CP          CDESCO-DEMSWP,W < EST-CE "!CDAI" ???
         JE          Z70X1           < OUI, DONC ON PEUT AVOIR DROIT AU
                                     < SWAPPING OUT SUR 'PR1'...
         LRM         A               < NON,
         WORD        AOCDA4          < (A)=ORIGINE DE LA 'CDA-COMMUNE',
         CP          CDESCO-DEMSWP,W < EST-CE "!CDA" OU "!CDAG" ???
         JNE         Z70X2           < NON, IL S'AGIT DONC DE "!CDAP", AUQUEL
                                     < CAS LE SWAPPING OUT NE PEUT QU'AVOIR
                                     < LIEU SUR 'DKS'...
Z70X1:   EQU         $               < ICI, IL S'AGIT DONC DE "!CDAI", "!CDA"
                                     < OU "!CDAG", AUQUEL CAS LE SWAPPING
                                     < SUR 'PR1' PEUT ETRE ENVISAGEE...
         LA          IDESC-DEMSWP,W
         ANDI        MKIDES          < (A)='IDESC' DE L'UTILISATEUR...
         CP          NUSEP1          < A PRIORI, A-T'IL DROIT A 'PR1' ???
         JL          Z70             < OUI, ON CONSERVE (X)=(ANSPS)...
Z70X2:   EQU         $               < ICI, OU BIEN IL S'AGIT DE "!CDAP",
                                     < OU BIEN D'UN UTILISATEUR QUI N'A PAS
                                     < DE ZONE DE SWAPPING SUR 'PR1', AUQUEL
                                     < CAS E SWAPPING OUT SUR 'DKS' S'IMPOSE...
         LXI         NSPDKS          < NON, ON FORCE DONC (X)='NSPDKS'...
<
< GENERATION DU NSPTYP DE LA DEMANDE DE SWAPPING :
<
Z70:     EQU         $
         SWBR        X,A             < NSP DU NSPTYP.
         SBT         PRIO            < UN SWAPPING OUT EST EXECUTE EN
                                     < MODE PRIORITAIRE.
         STA         NSPTYP
         LAI         FGW
         STA         ARGDEM+OPDEM    < UN SWAP-OUT EST UNE ECRITURE.
         JMP         E710            < VERS LE TRONC COMMUN SWAP IN/OUT.
<
< SWAPPING OUT NECESSAIRE :
<
Z754:    EQU         $
         PLR         L               < RESTAURE (L)=@DCT-SERVICE.
         JMP         E735            < VERS L'EXECUTION DU SWAPPING OUT.
<
<
<        S W A P P I N G   O U T   A   P R I O R I  :
<
<
<        FONCTION :
<                      CETTE ENTREE DU 'SWAP',
<                    FAIT DU SWAPPING OUT A PRIORI,
<                    SANS EN TESTER LA NECESSITE...
<
<
SWAPOP:  EQU         $
         ADRI        DEMSWP-DCTESC,W < (W)=@DEMANDE DE SWAP DANS DCT-ESCLAVE.
         LA          NSPTYP
         JAL         E711            < LE SWAPPING EST BLOQUE POUR
                                     < CET ESCLAVE (NOTER : (B)=K).
         BSR         ARGARM          < (B)=RANG DU RELEASEUR MEMOIRE.
         JMP         E735            < ALLONS FAIRE LE SWAP OUT.
         PAGE
<
<
<        I N I T I A L I S A T I O N   D E   S L O   &   S L E  :
<
<
<        ARGUMENTS :
<                    BIT0(B)=1 : INITIALISER SLO & SLE,
<                           =0 : NE PAS LES INITIALISER.
<                    (W)=ADRESSE DCT(ESCLAVE).
<                    ('W' DESTRUCTIBLE).
<                    AMDEM(DEMSWP)=ADRESSE OCTET DE L'ESPACE MEMOIRE ESCLAVE,
<                    CODEM(DEMSWP)=TAILLE OCTET DE L'ESPACE MEMOIRE
<                    ESCLAVE.
<
<
<        DETRUIT A & X.
<
<
<        RESULTAT :
<                    (Y)=TRANSLATION EN MOT SUBIE PAR LE PROGRAMME.
<
<
         USE         W,DEM0
ISLOE:   EQU         $
         LXI         K               < PAR PRUDENCE !!!???.!!.
         TBT         NBITMO+BBSOSI   < L'INITIALISATION EST-ELLE
                                     < NECESSAIRE...
         JNC         E723            < NON.
<
< INITIALISATION DE SLO :
<
         ADRI        DEMSWP-DCTESC,W < (W)=@DEMSWP.
         LA          ARGDEM+AMDEM
         SLRS        NOCMO=K         < @MOT DE L'ESPACE MEMOIRE ESCLAVE.
         ADRI        SLOESC,A        < VALEUR DE SLO*16
         SLRS        -DADR           < VALEUR DE SLO
<
< CALCUL DE LA TRANSLATION SUBIE PAR
< LE PROGRAMME ESCLAVE :
<
         LX          PSTESC-DEMSWP+RSLO,W < SAVE (X)=SLO.AVANT,
         SBR         A,X             < (X)=SLO.AVANT-SLO.APRES.
         NGR         X,X             < (X)=SLO.APRES-SLO.AVANT.
         XR          A,X
         BSR         APDADR
         XR          A,X             < X EST MAINTENANT EN MOTS
<
<        A T T E N T I O N  :
<                      MEME SI (X)=K, IL FAUT FAIRE
<                    LES OPERATIONS QUI SUIVENT, EN EFFET
<                    SINON, DANS LES CAS OU LA TAILLE
<                    DE L'ESPACE MEMOIRE ESCLAVE
<                    CHANGE (CF. LOAD-PROCESSOR), ON
<                    COURT A LA CATASTROPHE ?!!!...?
<
         STA         PSTESC-DEMSWP+RSLO,W < MAJ DE SLO DANS LA PST
                                         < ESCLAVE.
<
< INITIALISATION DE SLE :
<
         BSR         APDADR          < MISE DE A EN ADRESSE MOTS
         ADRI        -SLOESC-Z,A
         LR          A,Y             < SAVE A DANS Y.
         LA          ARGDEM+CODEM
         SLRS        NOCMO=K         < TAILLE MOT DE L'ESPACE MEMOIRE
                                     < ESCLAVE.
         ADR         Y,A             < VALEUR DE SLE*16
         SLRS        -DADR           < VALEUR DE SLE
         STA         PSTESC-DEMSWP+RSLE,W < MAJ DE SLE DANS LA PST
                                         < ESCLAVE.
E723:    EQU         $
<
< TRANSMISSION EVENTUELLE DE LA TRANSLATION
< SUBIE PAR LE PROGRAMME A OMOV2 :
<
         LR          X,Y             < TRANSLATION EN MOTS.
         RSR
         PAGE
<
<
<        E X E C U T I O N   D E S   D E M A N D E S
<        D E   S E R V I C E   E S C L A V E  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME APPELE PAR
<                    UN AUTOMATE EST CHARGE DE RECU-
<                    PERER LA DEMANDE ESCLAVE ('DEMESC'),
<                    ET DE LA ENVOYER, VIA 'CHAND', A
<                    LA TACHE CONCERNEE PAR LE SERVICE
<                    RECLAME PAR L'ESCLAVE, PUIS D'AT-
<                    TENDRE LA FIN DE SERVICE...
<
<
<        ARGUMENTS :
<                    (W)=ADRESSE DCT(ESCLAVE).
<                    (DESTRUCTIBLE)
<                    DEMESC(DCT ESCLAVE)=DEMANDE DE SERVICE ESCLAVE.
<                    (DANS LE FORMAT 'CHAND'...)
<
<
<        RESULTAT :
<                    (Y)=K : AU CAS OU SERESC SERIAT APPELE PAR
<                            L'AUTOMATE OTOSNP AVEC CHAGRE MEMOIRE
<                            (SOIT 'OTOMO'), AFIN DE FORCER UN SWAPP
<                            OUT LORS DU PASSAGE QUI VA SUIVRE
<                            DANS 'SWAPPO'.
<
<
<        A T T E N T I O N  :
<                    SI NSP(DEMESC)=K : LE SERVICE DEMANDE, EST
<                    EN FAIT UN RESIDU DE SERVICE IMMEDIAT.
<
<
         USE         W,DEM0
SERESC:  EQU         $
<
< CHOIX ENTRE LES SERVICES-ESCLAVES ET LES FAUX SERVICES IMMEDIATS :
<
         LBY         DEMESC-DCTESC+XXNSP,W < ACCES AU NSP DE DEMESC.
         JAE         Z62             < C'EST UN FAUX SERVICE IMMEDIAT.
<
<
<        S E R V I C E   E S C L A V E  :
<
<
         ADRI        DEMESC-DCTESC,W < (W)=@DEMANDE DE SERVICE ESCLAVE.
         LX          ARGDEM+OPDEM
         PSR         X               < SAUVEGARDE DE 'OPDEM' AVANT LE SERVICE...
         CPI         NSPVI0          < EST-CE UNE VISU QUI EST DEMANDEE ???
         JL          Z62X1           < NON...
         CPI         NSPVIN          < EST-CE UNE VISU QUI EST DEMANDEE ???
         JG          Z62X1           < NON...
         LXI         PHIN
         CPBY        &TASSGN-DEMESC,W  < OUI, C'EST UNE VISU ; EST-CE AUSSI
                                       < LE PERIPHERIQUE D'ENTREE ???
         JE          Z62X1           < OUI, C'EST LE PERIPHERIQUE D'ENTREE...
         LA          MEMV            < NON...
         TBT         YBTOVI          < ALORS FAUT-IL METTRE UN TIME-OUT ???
         JNC         Z62X1           < NON...
<
< CAS OU L'ECHANGE DEMANDE UNE VISU QUI
< EST DIFFERENTE DU PERIPHERIQUE D'ENTREE,
< ET YBTOVI=1 DANS 'MEMV' :
<
         LA          ARGDEM+OPDEM
         SBT         ZBTOVI          < ON DEMANDE UN TIME-OUT
         STA         ARGDEM+OPDEM    < DANS 'OPDEM'...
Z62X1:   EQU         $
         PLR         X               < RESTAURE : (X)='OPDEM' AVANT.
<
< ENVOI DE LA DEMANDE DE L'ESCLAVE :
<
         BSR         ACHAND          < ENVOI DE LA DEMANDE ESCLAVE.
         LAI         MKOPDM
         ANDR        X,A             < (A)='OPDEM' AVANT L'ENVOI...
         WAIT        WEIO            < ATTENTE DE LA FIN DE SERVICE
                                     < ESCLAVE.
<
< RENVOI DES CONDITIONS DE FIN D'EXECUTION
< DU SERVICE A L'ESCLAVE DANS SON REGISTRE 'X' :
<
         LY          ARGDEM+ETADEM     < ACCES AUX CONDITIONS DE RETOUR.
<*******************************************************************************
         BSR         ASTXES          < EXECUTION DU STORE X(ESCLAVE) SUIVANT :
         STY         PSTESC-DEMESC+RX,W < MISE DANS LE REGISTRE 'X'
                                        < DE L'ESCLAVE.
<*******************************************************************************
         CPZR        Y               < LE SERVICE DE L'ESCLAVE S'EST-IL
                                     < BIEN TERMINE ???
         JNE         E926            < NON, IL EST DONC INUTILE DE
                                     < TESTER LE SYSTEME DE CONNEXIONS.
<
< EXPLOITATION EVENTUELLE DES
< CONNEXIONS MATRICIELLES :
<
         PSR         X
         SVC         SVCM8           < DUPLICATION EVENTUELLE DE LA DEMANDE
                                     < COURANTE (W) SUR LES PERIPHERIQUES
                                     < CONNECTES AU PERIPHERIQUE COURANT...
                                     < (A)=FONCTION AVANT LE 'CHAND',
                                     < (W)=ADRESSE DE LA DEMANDE COURANTE...
         PLR         X
<
< SORTIE DE 'SERESC' :
<
E926:    EQU         $
         LYI         FGR             < AU CAS OU 'SWAPPO' SUIVRAIT...
         RSR
         PAGE
<
<
<        R E S I D U   D E   S E R V I C E   I M M E D I A T  :
<
<
<        FONCTION :
<                      PERMET L'EXECUTION DE SERVICE IMMEDIAT
<                    DONT UNE COMPOSANTE NE PEUT ETRE EXECUTEE
<                    DANS LE RUN-SVC, POUR DES RAISONS
<                    D'ALLOCATION MEMOIRE PAR EXEMPLE...
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DCT(ESCLAVE).
<
<
Z62:     EQU         $
<*******************************************************************************
         BSR         ASTXES          < EXECUTION DU STORE X(ESCLAVE) SUIVANT :
         STZ         PSTESC-DCTESC+RX,W < RAZ DU REGISTRE 'X' DE L'ESCLAVE.
<*******************************************************************************
                                       < POUR LUI INDIQUER UN RETOUR OK.
         LA          DEMESC-DCTESC+T+OPDEM,W
         JAGE        SYSRA6          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      LE MIEUX EST DE FAIRE UN 'JMP E926'...
<
SYSRA6:  EQU         $
         CPI         NFON            < VALIDATION FONCTION DEMANDEE.
         JL          SYSRA7          < OK.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      LE MIEUX EST DE FAIRE UN 'JMP E926'...
<
SYSRA7:  EQU         $
         LR          A,X             < (X)=FONCTION DEMANDEE (ANCIEN
                                     <     SERVICE IMMEDIAT (DE NVP=K).
         BSR         &AFOSIM         < EXECUTION DU RESIDU DE SERVICE
                                     < IMMEDIAT.
         JMP         E926            < GO BACK.
<
<
<        F O N C T I O N S   I N E X I S T A N T E S  :
<
<
Z64:     EQU         $
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<
<        C A S   D E S   R E S I D U S   V I D E S  :
<
<
<        FONCTION :
<                      CERTAINES FONCTIONS POURRAIENT
<                    NECESSITER UN PASSAGE PAR LES MODULES
<                    OMOV1/2, ET DONC UN PASSAGE DANS SERESC,
<                    MAIS ARRIVANT DANS SERESC, IL N'Y A PLUS
<                    RIEN OU ENCORE RIEN A FAIRE, ET L'ON EN
<                    SORT DONC IMMEDIATEMENT !!!
<
<
FOSIMV:  EQU         $
         RSR
         PAGE
<
<
<        T A B L E   D E S   F A U X   S E R V I C E S
<                    I M M E D I A T S  :
<
<
         CALL        #SISP CMS5 DOL1#
FOSIM:   EQU         $
         WORD        Z64             < 0 : ERREUR SYSTEME.
         WORD        Z64             < 1 : ERREUR SYSTEME.
         WORD        RUNCCJ          < 2 : CCI NON INTERACTIF.
         IF          $-FOSIM-D-FOCCIM,,XEIF%,
         IF          ATTENTION : LA TABLE 'FOSIM' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         WORD        Z64             < 3 : ERREUR SYSTEME.
         WORD        Z63             < 4 : CHANGEMENT TAILLE MEMOIRE.
         WORD        Z320            < 5 : FAIT DODO MON PETIT ESCLAVE.
         IF          $-FOSIM-D-FONDOR,,XEIF%,
         IF          ATTENTION : LA TABLE 'FOSIM' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         WORD        Z64             < 6 : ERREUR SYSTEME.
         WORD        Z64             < 7 : ERREUR SYSTEME.
         WORD        Z1932           < 8 : FAUSSE LECTURE ET ACCES ZDC.
         IF          $-FOSIM-D-FONFR,,XEIF%,
         IF          ATTENTION : LA TABLE 'FOSIM' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         WORD        Z64             < 9 : ERREUR SYSTEME.
         WORD        Z1932           < A : FAUSSE ECRITURE ET MAJ ZDC.
         IF          $-FOSIM-D-FONFW,,XEIF%,
         IF          ATTENTION : LA TABLE 'FOSIM' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         PAGE
<
<
<        A C C E S   A U   ' C C I '   I N T E R P R E T A T I F  :
<
<
<        FONCTION :
<                      AU LIEU DE SE BRANCHER DIREC-
<                    TEMENT A 'RUNCCI', ON INSERE AU
<                    PREALABLE, AU BOUT DE LA CARTE
<                    ARGUEMENT UN , AFIN DE
<                    RESOUDRE LE PROBLEME DES CARTES
<                    INCOMPLETES (IL Y MANQUE UN 
<                    EN QUEUE) ET DE LA REMANENCE DE
<                    'BUFESC' (IL N'EST JAMAIS CLEARE).
<                    CECI AVAIT POUR CONSEQUENCES POUR
<                    LES CARTES "!ASSIGN ", ET
<                    LES CARTES COMPORTANT DES  D'INVENTER DES NOMS
<                    DE FICHIERS, OU BIEN DES CONSTANTES
<                    NON DESIREES, ET FONCTION DU CON-
<                    TENU ANTERIEUR DU 'BUFESC'...
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DE 'DCTESC'.
<
<
RUNCCJ:  EQU         $
<
< INSERTION D'UN  EN BOUT DE CARTE :
<
         LAD         BUFESC-DCTESC,W
         SBT         BITX
         STA         VAR+ABUFGR      < GENERATION D'UN RELAI INDEX VERS LE
                                     < 'BUFESC' DE L'UTILISATEUR,
         LA          DEMESC-DCTESC+T+CODEM,W
                                     < (A)=INDEX DU PREMIER CARACTERE SUIVANT
                                     <     LA CARTE ARGUMENT,
         CPI         LBUFES*NOCMO    < N'Y-A-T'IL PAS DEBORDEMENT ???
         JGE         RUNCC7          < OUI, DONC ON NE FAIT RIEN, SOUS PEINE
                                     < DE SORTIR DE 'DCTESC'...
         LR          A,X             < NON,
                                     < (X)=INDEX D'UN  A FORCER...
         IF          Z-I,,XEIF%,
         IF          ATTENTION : (X) EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         LAI         EON
         STBY        &VAR+ABUFGR     < ET ON FORCE UN  EN QUEUE...
RUNCC7:  EQU         $
<
< BRANCHEMENT AU 'CCI' :
<
         LRM         A
         WORD        RUNCCI
         PSR         A
         RSR                         < ET AINSI, ON SIMULE UN SAUT EN 'RUNCCI'.
         PAGE
<
<
<        C H A N G E M E N T   D E   L A   T A I L L E
<        M E M O I R E   D ' U N   E S C L A V E  :
<
<
<        ARGUMENT :
<                    CODEM(DEMESC)=NBRE D'OCTETS DEMANDES.
<
<
         CALL        #SISP CMS5 DOL2#
Z63:     EQU         $
         LA          DEMESC-DCTESC+T+CODEM,W
         STA         DEMSWP-DCTESC+T+CODEM,W
         LBI         K               < REINITIALISATION DE B EN VUE
                                     < DU CALCUL DU RANG DE L'ALLOCA-
                                     < TEUR MEMOIRE SUIVANT.
         BSR         ARGAM1          < CHANGEMENT DU NUMERO D'ALLOCATEUR
                                     < MEMOIRE ESCLAVE POUR LE SWAPPING
                                     < IN SUIVANT.
         RSR                         < MAINTENANT QUE LA DEMANDE
                                     < DE SWAPPING EST MODIFIEE, ON
                                     < A TERMINE CE DUR LABEUR.
         PAGE
<
<
<        M I S E   E N   S O M M E I L   D E   L ' E S C L A V E  :
<
<
<        FONCTION :
<                      1 - CODEM(DEMESC)=DODCDA :
<                      L'UTILISATEUR EST MIS EN ATTENTE
<                    D'UNE VALEUR POSITIVE SUR LE MOT
<                    'CDAG0' DE LA 'CDAG', OU BIEN SUR
<                    LE CHANGEMENT DE MINUTE (PSEUDO
<                    TIME-OUT..).
<                      2 - 1<=CODEM(DEMESC)<=60 :
<                      CE MODULE MET EN SOMMEIL L'ESCLAVE
<                    POUR LA DUREE DONNE PAR CODEM(DEMESC) PAR
<                    L'INTERMEDIAIRE DU HANDLER DE
<                    SERVICE.
<
<                      CETTE MISE EN SOMMEIL EST DONC
<                    ININTERRUPTIBLE PAR ALT-MODE, CELUI-CI
<                    ETANT PRIS EN COMPTE EN FIN DE SERVICE...
<
<
<        ARGUMENT :
<                    CODEM(DEMESC)=DUREE DE SOMMEIL EN SECONDES.
<
<
Z320:    EQU         $
         LX          DEMESC-DCTESC+T+CODEM,W
         IF          DODCDA-K,,XEIF%,
         IF          ATTENTION : 'DODCDA' EST INCOMPATIBLE
         IF          AVEC LES DUREES DE SOMMEIL REEL AINSI
         IF          QU'AVEC LE TEST QUI SUIT !!!
XEIF%:   VAL         ENDIF
         CPZR        X               < ALORS SOMMEIL OU SYNCHRONISATION ???
         JG          Z320X1          < VRAI SOMMEIL...
         JE          Z320X3          < SYNCHRONISATION...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE, CAR 'HDLSVC' A
<                    ELIMINER LES DEMANDES AVEC UN
<                    'COESC' NEGATIF !!!
<
         JMP         Z320X2          < ET ON SORT...
<
< SYNCHRONISATION SUR LE
< MOT 'CDAG0' DE LA 'CDAG' :
<
Z320X3:  EQU         $
         RQST        &ASEMCD         < ET ON SE BLOQUE JUSQU'A :
                                     < 1 - UN CHANGEMENT DE MINUTE,
                                     < 2 - OU BIEN UNE VALEUR POSITIVE
                                     <     DE 'CDAG0' ; ON NOTERA QUE CETTE
                                     <     METHODE N'EST PAS SURE A 100%,
                                     <     EN EFFET CES CHANGEMENTS SONT
                                     <     DETECTES PAR 'IDLE' A CHAQUE
                                     <     FOIS QU'ELLE PREND LA MAIN,
                                     <     MAIS 'CDAG0' PEUR CHANGER DE
                                     <     VALEUR A UN RYTHME PLUS ELEVE...
                                     <     C'EST POURQUOI, EN PARTICULIER
                                     <     ON INTRODUIT LES PSEUDOS-
                                     <     TIME-OUT A CHAQUE CHANGEMENT
                                     <     DE MINUE...
         JMP         Z320X2          < ET C'EST TOUT...
<
< VRAI SOMMEIL :
<
Z320X1:  EQU         $
         BSR         ADODO           < MISE EN SOMMEIL POUR LA
                                     < DUREE (X).
<
< SORTIE DE LA MISE EN SOMMEIL :
<
Z320X2:  EQU         $
         RSR                         < GO BACK LORS DU REVEIL.
         PAGE
<
<
<        F A U S S E S   L E C T U R E S / E C R I T U R E S  :
<
<
<        FONCTION :
<                      CE RESIDU PERMET UN ACCES/MAJ EVENTUEL
<                    DE LA ZDC CONCERNANT QUELQUES UNS DES 15
<                    PREMIERS OCTETS DE BUFESC ET ZDC :
<                    1- FONCTION '08 : FAUSSE LECTURE AVEC ACCES
<                    EVENTUEL AU PREALABLE A ZDC,
<                    2- FONCTION '0A : FAUSSE ECRITURE SUIVIE
<                    D'UNE EVENTUELLE MODIFICATION DE ZDC.
<                      DE PLUS, SI LE BIT 'XTBFRW' EST A 1
<                    L'OPERATION EST PRECEDEE D'UNE TEMPO-
<                    RISATION DE 2 SECONDES...
<
<
<        ARGUMENT :
<                    ARGUM(DCTESC)=LISTE DE VALIDATION DES 15 PREMIERS
<                                  OCTETS DE BUFESC ET ZDC ; LE DERNIER
<                                  BIT ('XTBFRW') INDIQUE S'IL FAUT TEM-
<                                  PORISER (=1) OU PAS (=0) PENDANT 2
<                                  SECONDES AVANT L'OPERATION DEMANDEE.
<
<
Z1932:   EQU         $
<
< RECUPERATION DES ARGUMENTS :
<
         PSR         B               < SAVE LE REGISTRE DE PASSAGE DES
                                     < CONDITIONS DE SWAP.
         LYI         MKESEF          < MASQUE D'ACCES AUX BITS 13 A 15.
         ANDR        X,Y             < (Y)=K : IL S'AGIT D'UNE LECTURE,
                                     <    =2 (#0) : C'EST UNE ECRITURE.
         LB          ARGUM-DCTESC,W  < ACCES A LA LISTE DE VALIDATION
                                     < DES OCTETS DE BUFESC ET ZDC.
<
< TEMPORISATION EVENTUELLE :
<
XTBFRW:: VAL         NBITMO-B        < LE DERNIER BIT DE LA LISTE ARGUMENT NE
                                     < DESIGNE PAS UN OCTET DE LA 'ZDC', MAIS
                                     < EST UN INDICATEUR DE TEMPORISATION :
                                     < 0 : PAS DE TEMPORISATION AVANT LES OPE-
                                     <     RATIONS,
                                     < 1 : ON TEMPORISERA 2 SECONDES AVANT
                                     <     L'OPERATION DEMANDEE.
XTDFRW:: VAL         W+W             < DUREE DE LA TEMPORISATION DE PRE-OPE-
                                     < RATION...
         IF          XTDFRW-W,,,XEIF%
         IF          ATTENTION : POUR ETRE SUR DE LA DUREE, IL
         IF          FAUT QUE CELLE-CI SOIT SUPERIEURE A 1 SECONDE !!!
XEIF%:   VAL         ENDIF
         TBT         NBITMO+XTBFRW   < UNE TEMPORISATION EST-ELLE DEMANDEE ???
         RBT         NBITMO+XTBFRW   < (ON LA CLEAR A PRIORI...)
         JNC         Z1932X          < NON...
         LXI         XTDFRW          < OUI :
         BSR         ADODO           < ON FAIT UN DODO DE 2 SECONDES...
<
< PREPARATION DE L'ACCES 'ZDC' :
<
Z1932X:  EQU         $
         LAD         BUFESC-DCTESC,W < (A)=@BUFESC.
         SBT         BITX            < POSITIONNEMENT DU BIT INDEX.
         STA         VAR+ABUFGR      < GENERATION D'UN RELAI VERS
                                     < LE BUFFER ESCLAVE 'BUFESC'.
         RQST        &ASMATX         <<<< PHASE CRITIQUE SUR ZDC.
<
< BOUCLE DE TRAITEMENT DES OCTETS VALIDES :
<
Z1930:   EQU         $
         LR          B,A             < ACCES A LA LISTE DE VALIDATION
                                     < COURANTE (B).
         JAE         Z1934           < IL N'Y A PLUS D'OCTETS A TRAITER.
         DBT                         < (X)=NUMERO DE L'CTET A TRAITER.
         RBT         NBITMO+L,X      < ET MEMORISATION DANS B DE SON
                                     < TRAITEMENT.
         CPZR        Y               < TEST DU SENS LECTURE (Y=K) OU
                                     < ECRITURE (Y#0).
         JNE         Z1931           < ECRITURE : BUFESC-->ZDC.
<
< TRAITEMENT DES MODOFICATIONS DE BUFESC PAR ZDC :
< (ZDC-->BUFESC)
<
         LBY         &AZDC           < ACCES A ZDC,
         STBY        &VAR+ABUFGR     < ET MODIFICATION DE ZDC.
         JMP         Z1930           < A L'OCTET SUIVANT...
<
< CAS DES MODIFICATIONS DE ZDC PAR BUFESC :
< (BUFESC-->ZDC)
<
Z1931:   EQU         $
         LBY         &VAR+ABUFGR     < ACCES A BUFESC,
         STBY        &AZDC           < ET MODIFICATION DE ZDC.
         JMP         Z1930           < A L'OCTET SUIVANT.
<
< FIN DES FAUSSE LECTURES/ECRITURES :
<
Z1934:   EQU         $
         PSR         A
         LAD         &ASMATX
         BSR         ARLSE           <<<< FIN DE PHASE CRITIQUE SUR ZDC
         PLR         A
         PLR         B               < RESTAURE LE REGISTRE DE PASSAGE
                                     < DES CONDITIONS DE SWAP.
         RSR                         < ET C'EST TOUT...
<
<
<        Z O N E   D E   D O N N E E S   C O M M U N E S  :
<                    ( ' Z D C ' )
<
<
         CALL        #SISP CMS5 CHECK#
         CALL        #SISP CMS5 DOL1#
ZDC:     EQU         $
LOZDC::  VAL         XTBFRW          < LONGUEUR DE LA 'ZDC'... (EN OCTETS)
         NTRN
         DZS         LOZDC+NOCMO-E/NOCMO
         TRN
         PAGE
<
<
<        M A T R I C E   D E   C O N N E X I O N  :
<
<
<        NOTA :
<                      CETTE MATRICE DE CONNEXION
<                    INTER-NSP EST RESERVEE AUX
<                    32 (2*16) PREMIERS 'NSP' DU
<                    SYSTEME, ET ASSURE DES FONC-
<                    TIONS DE DUPLICATION ET D'ES-
<                    PIONNAGE...
<
<
MATX:    EQU         $
         DO          NBITMO*UMATCO
         DZS         UMATCO          < 2 MOTS PAR NSP : 32 CONNEXIONS.
         PAGE
<
<
<        T R A N S C O D A G E   D E S   F O N C T I O N S  :
<
<
<        UTILISATION :
<                      CETTE TABLE DE TRANSCODAGE EST
<                    INDEXEE PAR LA FONCTION ARGUMENT D'UNE
<                    DEMANDE ; ELLE DONNE DANS L'OCTET INDEXE
<                    LA FONCTION TRANSCODEE A UTILISER
<                    SUR LES NSP CONNECTES A NSP1 ; SI
<                    LA FONCTION TRANSCODEE EST 'FF, CELA
<                    SIGINIFIE QUE LA FONCTION ARGUMENT
<                    N'EST PAS CONNECTABLE (PAR EXEMPLE
<                    LA LECTURE DU CURSEUR GRAPHIQUE SUR
<                    LES VISUS).
<                      CETTE TABLE EST CONSTRUITE EN FAIT
<                    A PARTIR DES FONCTIONS ACCESSIBLES
<                    SUR LES VISUS, ET QUI PROFITENT
<                    PRESQUE EXCLUSIVEMENT DES CONNEXIONS
<                    MATRICIELLES.
<
<
FONX:    EQU         $
         BYTE        FGW;FGW         < LA LECTURE ALPHA-NUMERIQUE
                                     < AVEC OU SANS ECHO EST TRANSCODEE
                                     < SOUS FORME D'UNE ECRITURE
                                     < ALPHA-NUMERIQUE ('02).
         BYTE        FGW;FAVOG       < L'ECRITURE ALPHA-NUMERIQUE ET
                                     < L'OPEN GRAPHIQUE SONT TRANSCODES
                                     < TELS QUELS.
         BYTE        FAVCG;FAVER     < DE MEME LE CLOSE GRAPHIQUE ET
                                     < L'EFFACEMENT DE L'ECRAN.
         BYTE        FIMATC;FAVWD    < L'AFFICHAGE DU CURSEUR GRAPHIQUE
                                     < ('06) EST REFUSEE, ET L'ECRITURE
                                     < DIRECTE SUBSISTE.
         BYTE        FIMATC;FAVCG    < LA LECTURE DU CURSEUR ALPHA-
                                     < NUMERQIE EST REFUSEE, ET LA
                                     < LECTURE DU CURSEUR GRAPHIQUE
                                     < EST TRANSCODEE EN UN CLOSE
                                     < GRAPHIQUE ('04).
         BYTE        FAVWG;K         < L'ECRITURE GRAPHIQUE SUBSISTE.



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