<        S I S   C M S 5   7
         PAGE
         PAGE
<
<
<        T A C H E   A L A R M E  :
<
<
<        FONCTION:
<                    CETTE TACHE RECUPERE TOUTES LES ALARMES,ET EN
<                    PARTICULIER LES ACTD.LORSQU'UN HANDLER SE TROUVE
<                    EN ERREUR (INFORMATION ERRONEE,ETC...),IL
<                    APPELLE LA TACHE ALARME PAR ACTD.L'AVANTAGE DE
<                    CELUI-CI SUR LE JMP/JC/JE...$ EST QUE L'ACTD
<                    ARME LA TACHE LA PLUS PRIORITAIRE DU SYSTEME,
<                    ET LES AUTRES IT (NIVEAUX 1 A 15) ATTENDENT.
<                    L'ETAT DU SYSTEME SE TROUVE AINSI FIGE CE QUI
<                    FACILITE LE DEBUG.
<                    MAIS N'OUBLIONS PAS QUE DEFSEC PEUT PASSER LORS
<                    D'UN APPEL A TDEFS (DETECTION DEFAUT SECTEUR).
<                    MAIS CELUI-CI TRAVAILLE TRES PROPREMENT ET NE
<                    NOUS GENE NULLEMENT.DE PLUS CETTE TACHE
<                    RECUPERE LES ACTD ESCLAVES:
<                    1E1D : (STAR) EST LE COMPLEMENT DE '1E15,
<                           ET PERMET DE RANGER UNE CERTAINE VALEUR
<                           'V' A L'ADRESSE CONTENUE DANS A, OU
<                           BIEN DANS DCTSY SI A CONTIENT UN 'NSP'+Q8000 ;
<                           V=(B) SI (Y)=K (MODE ABSOLU),
<                           V=(B)+(SLO)*16 SI (Y)#0 (MODE TRANSLATABLE).
<                    1EF5 : 'TEST & SET' SYNCHRO-USER 7,
<                    1EE5 : 'TEST & SET' SYNCHRO USER 6,
<                    1ED5 : 'TEST & SET' SYNCHRO USER 5,
<                    1EC5 : EXECUTION D'UN SOUS-PROGRAMME MODE-MAITRE !!!
<                    1EB5 : PRESC<--(A(ESCLAVE)),
<                           SI (A(ESCLAVE))<0 : ON INHIBE LES ALT-MODES
<                           SOLITAIRES.
<                    1EA5 : SI (A(ESCLAVE)) EST UN CARACTERE ASCI
<                           ACCESSIBLE AU CLAVIER DE LA VISU, IL
<                           DEVIENT LE CARACTERE D'ABORT COURANT,
<                           SI BIT0=1 ET BIT1=K DANS A(ESCLAVE), LES
<                           BITS2-15 DEVIENNENT LA VALEUR INITIALE DU
<                           DETECTEUR DE TIME OUT DE LA VISU,
<                           SI BIT0=BIT1=1 : LES BITS2-15 DEVIENNENT
<                           L'AUTORISATEUR/INHIBITEUR DES EXPANSIONS/
<                           EXTENSIONS DE LA VISU,
<                    1E95 : RENVOI DANS A(ESCLAVE) DU NSPOUT
<                           CONCATENE AVEC LE NSPVI1,
<                    1E85 : RENVOI DANS A(ESCLAVE) DE L'HEURE
<                           EXPRIMEE EN MULTIPLE DE 2 SECONDES,
<                    1E75 : 'RESET' SYNCHRO USER 7,
<                    1E65 : 'RESET' SYNCHRO USER 6,
<                    1E55 : 'RESET' SYNCHRO USER 5,
<                    1E45 : RENVOI DANS A(ESCLAVE) DE 'IDESC',
<                    1E35 : A(ESCLAVE)<--LA TAILLE DE L'ESPACE
<                           MEMOIRE DE L'ESCLAVE A CET INSTANT, ET
<                           B(ESCLAVE)<--(BOX(DEMESC)) COURANTE,
<                    1E25 : RENVOI DANS A,B(ESCLAVE) DE L'ACNESC,
<                    1E15 : RENVOIE DANS B(ESCLAVE) LE CONTENU
<                           DU MOT DONT L'ADRESSE EST CALCULEE
<                           COMME SUIT :
<                            1- (A)>=K : B<--((A)),
<                            2- (A)<0  : B<--(DCTSY((A).AND.'7FFF)),
<                               (B) EST ALORS EN FAIT UN RELAI...
<                    1E05 : TRAPPE.
<
<
<        NOTA :
<                      POUR PALLIER A UN DEFAUT DE 'CDAJ',
<                    'TH0' PEUT IGNORER LES ALARMES "MEMOIRE
<                    INEXISTANTE" DES UTILISATEURS, ET CECI
<                    EN FONCTION DU MOT 'MEMINX' DE LA
<                    MEMOIRE DEBANALISEE...
<
<
         PAGE
<
<
<        D E F I N I T I O N   D E   Q U E L Q U E S   C O D E S
<                    O P E R A T I O N   U T I L E S  :
<
<
         CALL        #SISP CMS5 DOL1#
SAVE1:   EQU         $               < SAUVEGARDE DU '$'...
<*******************************************************************************
         ACTD        K
XACTD::  VAL         '0000000@@@@    < CODE DE L'ACTD.
<*******************************************************************************
<*******************************************************************************
         ACTD        15
XACTDF:: VAL         '0000000@@@@    < CODE DU DERNIER 'ACTD' UTILISATEUR.
<*******************************************************************************
<*******************************************************************************
         QUIT
XQUIT::  VAL         '0000000@@@@    < CODE DU QUIT.
<*******************************************************************************
<*******************************************************************************
         STAR
XSTAR::  VAL         '0000000@@@@    < CODE DU STAR.
<*******************************************************************************
         $EQU        SAVE1           < ANNULATION DU CODE GENERE...
MKSL::   VAL         XACTD)XACTDF    < MASQUE D'IDENTIFICATION DES INSTRUCTIONS.
         IF          MKSL-XXZOP,,XEIF%,
         IF          ATTENTION : 'MKSL' EST PEUT-ETRE MAUVAIS !!!
XEIF%:   VAL         ENDIF
         PAGE
<
<
<        L O C A L  :
<
<
         LOCAL
LOCTH0:  EQU         $               < LOCAL TH0...
<
< QUELQUES CODES OPERATION :
<
ACTDSL:  WORD        XACTD           < ACTD ESCLAVE (POUR TEST INSTRUCTION
                                     < ESCLAVE).
RSTSL:   WORD        XQUIT           < 1EX6 ESCLAVE...
XWOR%1:  VAL         MKSL)MFFFF      < COMPLEMENTATION...
STARSL:  WORD        XSTAR(XWOR%1    < CODE DU 'STAR' A '0 PRES (EN FAIT '1E1D).
<
< RELAIS D'ACCES A LA
< PILE DE 'TH0' :
<
AXPLH0:  WORD        PILTH0+DEPILE,X < RELAI INDEXE SUR LA PILE TH0
                                     < POUR ACCEDER AUX REGISTRES
                                     < A, B, X, Y, L, W, SLO, SLE DE LA
                                     < TACHE SOFT APPELANTE...
APLH0:   WORD        PILTH0+DEPILE   < IDEM MAIS NON INDEXE...
APSTHS:  WORD        PSTH00+HS-HC    < RELAI D'ACCES AU REGISTRE S
                                     < DE LA TACHE INTERROMPUE
                                     < PAR TH0...
<
< EXECUTION DES ACTD ESCLAVES :
<
ACTDU:   WORD        AZ401,X
AZ401:   WORD        Z401            < 1E05.
         WORD        RECABS          < 1E15.
XXXABS:: VAL         $-D-AZ401
         WORD        RECACN          < 1E25.
XXXACN:: VAL         $-D-AZ401
         WORD        RECSIZ          < 1E35.
XXXSIZ:: VAL         $-D-AZ401
         WORD        RECID           < 1E45.
XXXID::  VAL         $-D-AZ401
         WORD        RECRST          < 1E55 (X=5).
XXXRT1:: VAL         $-D-AZ401
         WORD        RECRST          < 1E65 (X=6).
XXXRT2:: VAL         $-D-AZ401
         WORD        RECRST          < 1E75 (X=7).
XXXRT3:: VAL         $-D-AZ401
         WORD        RECDAT          < 1E85.
XXXTIM:: VAL         $-D-AZ401
         WORD        RECOUT          < 1E95.
XXXOUT:: VAL         $-D-AZ401
         WORD        RECALT          < 1EA5.
XXXALT:: VAL         $-D-AZ401
         WORD        RECPRE          < 1EB5.
XXXPRE:: VAL         $-D-AZ401
         WORD        RECMST          < 1EC5.
XXXMST:: VAL         $-D-AZ401
         WORD        RECSET          < 1ED5 (X=5+8).
XXXST1:: VAL         $-D-AZ401
         WORD        RECSET          < 1EE5 (X=6+8).
XXXST2:: VAL         $-D-AZ401
         WORD        RECSET          < 1EF5 (X=7+8).
XXXST3:: VAL         $-D-AZ401
XWOR%1:  VAL         $-AZ401         < LONGUEUR DE LA LISTE DES 'ACTD'.
XWOR%2:  VAL         MKSL=K
XWOR%2:  VAL         -XWOR%2         < POUR UN DECALAGE A DROITE...
XWOR%3:  VAL         MKSL>XWOR%2+Z   < NOMBRE DE 'ACTD' UTILISATEUR (+1 CAR
                                     < CEUX-CI COMMENCENT A '0).
         IF          XWOR%1-XWOR%3,,XEIF%,
         IF          ATTENTION : CONFLITS DANS LA LISTE DES 'ACTD' !!!
XEIF%:   VAL         ENDIF
XWOR%1:  VAL         MKSL=K
         IF          XXXABS>XWOR%1?XACTD-COGETM,,XEIF%,
         IF          ATTENTION : 'COGETM' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         IF          XXXID>XWOR%1?XACTD-COIDES,,XEIF%,
         IF          ATTENTION : 'COIDES' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
<*******************************************************************************
XWOR%F:  VAL         XXXABS
XXXABS: @VAL         '0@@@@          < LECTURE ABSOLUE DE LA MEMOIRE.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         XXXACN
XXXACN: @VAL         '0@@@@          < RECUPERATION DE .
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         XXXSIZ
XXXSIZ: @VAL         '0@@@@          < RECUPERATION DE LA 'BOX' ENTRE AUTRES.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         XXXID
XXXID:  @VAL         '0@@@@          < RECUPERATION DE 'IDESC'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         XXXTIM
XXXTIM: @VAL         '0@@@@          < ACCES A L'HEURE EN MULTIPLE DE 2S.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         XXXOUT
XXXOUT: @VAL         '0@@@@          < ACCES A /.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         XXXALT
XXXALT: @VAL         '0@@@@          < CHANGEMENT DU CARACERE D'ABORT COURANT.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         XXXPRE
XXXPRE: @VAL         '0@@@@          < CHANGEMENT DU 'PRESC'.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F:  VAL         XXXMST
XXXMST: @VAL         '0@@@@          < EXECUTION D'UN PROGRAMME MODE MAITRE.
         CALL        #SISP CMS5 GEN CTE#
<*******************************************************************************
ASTAR:   WORD        STAR            < TRAITEMENT DU 'STAR' ESCLAVE.
<
< POUR TRAITER LES ALARMES "MEMOIRE
< INEXISTANTE" DES UTILISATEURS :
<
AMEMX:   WORD        MEMINX          < ADRESSE DE L'INDICATEUR EN MEMOIRE
                                     < DEBANALISEE.
AAOCDA:  WORD        OCDA            < POUR TESTER LA 'CDA' COURANTE...
<
< RELAIS DES ROUTINES DU RECOVERY :
<
ADUMP:   WORD        DUMP            < DUMP 32 K MOTS.
AIMPB:   WORD        IMPB            < ROUTINE D'IMPRESSION DE (B).
AIMPM:   WORD        IMPM            < ROUTINE D'IMPRESSION MESSAGE.
AIMPLF:  WORD        IMPLF           < ROUTINE IMPRIMANT UN 'LF'.
AIMPRC:  WORD        IMPRC           < ROUTINE IMPRIMANT UN 'RC'.
AIMPSP:  WORD        IMPSP           < @ROUTINE IMPRIMANT UNE SUITE
                                     < DE 'SPACE'.
ADBGV:   WORD        DBGV            < ROUTINE DE VALIDATION DE
                                     < L'ADRESSE COURANTE.
AIMPK:   WORD        IMPK            < IMPRESSION D'1 CARACTERE.
ALIRK:   WORD        LIRK            < ROUTINE LECTURE 1 CARACTERE SUR
                                     < TTYS AVEC ELIMINATION DES
                                     < SPACE ET DU BIT0 DU CARACTERE.
ABASK:   WORD        BASK            < BASCULEMENT DES ARGUMENTS
                                     < DE SIO LP1/TTY1
AE812:   WORD        E812            < REBLOCAGE DU RECOVERY (JMP $).
AE890:   WORD        E890            < VERS LA TRACE/DEBUG.
ATRAPH:  WORD        TRAPH           < RECUPERATION DES REGISTRES DE L'ESCLAVE
                                     < EN CAS DE TRAPPE...
ASIPST:  WORD        SIPST           < RECONSTITUTION D'UNE 'PSTESC'.
AIMEMY:  WORD        IMEMY
AFITH0:  WORD        FITH0           < EPILOGUE SPECIFIQUE DE 'TH0'.
ARCABS:  WORD        RCABS           < SOUS-PROGRAMME EXECUTANT LA FONCTION
                                     < 'RECABS' (MIS EN S/P A CAUSE DES SAUTS
                                     < DE LA MORT...).
<
< CONSTANTES DU RECOVERY :
<
PUPTH0:  WORD        ACPUP?FPHCME    < POUR ATTEINDRE LES VOYANTS DU BAS
                                     < DU PUPITRE...
XXTYLP:: VAL         K               < DISCRIMINATEUR TTY/LP1...
         IF          XXTYLP-K,,XEIF%,
         IF          ATTENTION : CA VA MERDER !!!
XEIF%:   VAL         ENDIF
IMPTTY:  WORD        XXTYLP          < INDICATEUR TTY/LP1 (POUR
                                     < IMPK)=K LP1;#0 SI TTY
IMPC:    WORD        ACLP1?FPHOUT    < SORTIE INFORMATION EN MODE
                                     < PROGRAMME SIMPLE SUR LP1
IMPI:    WORD        ACLP1?FPHCMD    < SORTIE COMMANDE SUR LP1
IMPETA:  WORD        ACLP1?FPHETA    < ENTREE MOT D'ETAT
TTYE:    WORD        ACTTY1?FPHIN    < ENTREE INFORMATION TTYS
TTYC:    WORD        ACTTY1?FPHOUT   < SORTIE INFORMATION TTYS
TTYI:    WORD        ACTTY1?FPHCMD   < SORTIE COMMANDE TTYS
TTYETA:  WORD        ACTTY1?FPHETA   < ENTREE MOT ETAT TTYS
CLESPU:  WORD        NILK            < CLES DU PUPITRE
DBGCP:   WORD        NILK            < MEMORISATION DE LA COMMANDE
                                     < PRECDENTE DU DEBUG.
DBGMC:   WORD        NILK            < NBRE COURANT LU OU EN COURS
                                     < DE LECTURE (ET D'ASSEMBLAGE).
DBGADC:  WORD        NIL             < ADRESSE COURANTE TRAITEE EN
                                     < MEMOIRE.
<
< RELAIS DE TABLES :
<
IMPA:    WORD        NIL             < RELAI INDIRECT-INDEX VERS LE
                                     < MESSAGE COURANT.
ASPMST:  EQU         IMPA            < RELAI TEMPORAIRE VERS UN SOUS-
                                     < PROGRAMME A EXECUTER EN MODE
                                     < MAITRE !!!
IMPDAT:  WORD        DATE+XXDAT9     < ADRESSE D'UNE PARTIE DU
                                     < MESSAGE DE DATE CMS4.
<
< CONSTANTES DE PATCH DU SYSTEME :
<
AZPTCH:  WORD        ZPATCH          < @COURANTE DE LA ZONE DE PATCH,
                                     < INTIALISEE SUR ZPATCH.
LZPTCH:  WORD        LPATCH          < LIMITE SUPERIEURE DE LA ZONE
                                     < DE PATCH.
GRTRAP:  WORD        ARTRAP          < INDEX DE LA GRAMMAIRE DU CCI
                                     < EN CAS DE TRAPPE D'UN ESCLAVE.
<
< MESSAGES :
<
IMPTD:   EQU         $
        @BYTE        " ";KCR;KLF;KD;KE;KB;KU;KG;KCR;KLF
         CALL        #SISP CMS5 BYTE#
IMPT:    EQU         $
        @BYTE        " ";KCR;KFF;KCR;KLF;KSP;KT;KR;KA;KC;KE;KSP;KSP;KSP;KCR
         CALL        #SISP CMS5 BYTE#
IMPX:    EQU         $
        @BYTE        " ";KSP;KSP;KSP;KX;KEGAL
         CALL        #SISP CMS5 BYTE#
IMPIT:   EQU         $
        @BYTE        " ";KI;KT;KSP
         CALL        #SISP CMS5 BYTE#
IMPID:   EQU         $
        @BYTE        " ";KI;KD;KL;KE;KSP;KSP;KSP
         CALL        #SISP CMS5 BYTE#
IMPCH:   EQU         $
        @BYTE        " ";KC;KH;KA;KN;KD;KSP
         CALL        #SISP CMS5 BYTE#
IMPV:    EQU         $
        @BYTE        " ";KMOINS;KMOINS;KSUP;KSP
         CALL        #SISP CMS5 BYTE#
IMPHDL:  EQU         $
        @BYTE        " ";KH;KD;KL
         CALL        #SISP CMS5 BYTE#
IMPNUL:  EQU         $
        @BYTE        " ";KAROND;KEGAL;KZERO
         CALL        #SISP CMS5 BYTE#
IMPCAL:  EQU         $
        @BYTE        " ";KA;KC;KT;KD;KSP;KB;KY;KSP
         CALL        #SISP CMS5 BYTE#
IMPAD:   EQU         $
        @BYTE        " ";KSP;KAROND;KSP
         CALL        #SISP CMS5 BYTE#
IMPDMP:  EQU         $
        @BYTE        " ";KCR;KFF;KCR;KLF;KD;KU;KM;KP;KCR
         CALL        #SISP CMS5 BYTE#
<
< TABLES D'INITIALISATION DE LA DATE :
<
DATM:    EQU         $
        @BYTE        " ";KCR;KLF;KPE;KD;KA;KT;KE;KPI;KSP
         CALL        #SISP CMS5 BYTE#
INTDAT:  WORD        YNTDAT,X
YNTDAT:  EQU         $
         ASCI        " AMJHMS "
DATINI:  WORD        VARHOR+DATHOR,X < RELAI VERS DATHOR DE HDLHOR.
DATMAX:  WORD        TMOIS,X         < ACCES A LA TABLE DONNANT LE
                                     < NOMBRE DE JOURS DE CHAQUE MOIS.
         IF          MINUTE-HEURE,,XEIF%,
         IF          ATTENTION : LA CONSTANTE SUIVANTE N'A PAS DE SENS !!!
XEIF%:   VAL         ENDIF
DAT60:   WORD        MINUTE          < POUR FAIRE DES CALCULS EN
                                     < SECONDES SUR LA DATE.
<
< TABLE DE COMMANDE DU DEBUG :
<
DBGC0::  VAL         KET             < 1ERE COMMANDE DU DEBUG.
XWOR%1:  VAL         COSBT?BITPAR=FMASK(K=FCINST
         NTRN
DBGC00:: VAL         DBGC0/XWOR%1*XWOR%1 < CALCUL DU BIT DE PARITE.
         TRN
DBGVAL:  WORD        YBGVAL,X
YBGVAL:  EQU         $
         WORD        DBGNCP;E892;DBGAP;DBGMAP
         WORD        DBGIND;DBGP;DBGST;DBGM;DBGIMP;DBGCL
XWOR%3:  VAL         BASE10
         DO          XWOR%3
         WORD        Z=FCDO-XWOR%3)MFFFF+N
         WORD        DBGCLA;DBGFIN;DBGST;DBGIAC
         WORD        DBGIMP;IRSTF;DBGADR
XWOR%2:  VAL         BASE16-XWOR%3
         DO          XWOR%2
         WORD        Z=FCDO-XWOR%2)MFFFF+N+XWOR%3
         PROG
         CALL        #SISP CMS5 DOL2#
<
<
<        P I L E   D E   ' T H 0 '  :
<
<
<        NOTA :
<                      ETANT ATTEINTE PAR DES RELAIS
<                    INDIRECTS-INDEXES, CELLE-CI
<                    DOIT ETRE EN MEMOIRE BASSE ; ELLE
<                    A ETE IMPLEMENTEE DEVANT LA
<                    GRAMMAIRE DU 'CCI'...
<
<
         PAGE
<
<
<        R E C O V E R Y - D E B U G - T R A C E  :
<
<
DEPL0::  VAL         DEPBAS          < DEPLACEMENT DE LA BASE 'L' DE 'TH0'.
XWKNIV:  VAL         TH0             < NIVEAU TACHE HARD
         CALL        #SISP CMS5 THDEB# < PROLOGUE TACHE HARD
         PAGE
<
<
<        D E F I N I T I O N   D E S   R E G I S T R E S
<        D A N S   L A   P I L E   D E   ' T H 0 '  :
<
<
RH0A::   MOT         O               < REGISTRE 'A',
RH0B::   MOT         RH0A+D          < REGISTRE 'B',
TH0X::   MOT         RH0B+D          < REGISTRE 'X',
TH0Y::   MOT         TH0X+D          < REGISTRE 'Y',
TH0L::   MOT         TH0Y+D          < REGISTRE 'L',
TH0W::   MOT         TH0L+D          < REGISTRE 'W',
TH0SLO:: MOT         TH0W+D          < REGISTRE 'SLO',
         IF          THDSLO-DEPILE-TH0SLO,,XEIF%,
         IF          ATTENTION : 'THDSLO' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
TH0SLE:: MOT         TH0SLO+D        < REGISTRE 'SLE'.
<
<
<        D E F I N I T I O N   D E S   R E G I S T R E S
<                    D A N S   ' P S T H 0 '  :
<
<
RH0C::   MOT         HC-PSTH         < REGISTRE 'C',
TH0K::   MOT         HK-PSTH         < REGISTRE 'K',
TH0P::   MOT         HP-PSTH         < REGISTRE 'P',
TH0S::   MOT         HS-PSTH         < REGISTRE 'S'.
LPSTH0:: VAL         NTH0*LPSTH      < TRANSLATION D'ACCES A 'PSTH0'.
         PAGE
<
<
<        I N I T I A L I S A T I O N   D E S   B A S E S  :
<
<
         LRM         L,W
         WORD        LOCTH0+DEPL0    < (L)=BASE LOCAL TH0,
         WORD        K               < (W)=K POUR LA TRACE.
         USE         L,LOCTH0+DEPL0
RECOV:   EQU         TH00
<
<        T R A C E   D U   R E C O V E R Y  :
<
         LAI         XNTRA           < FAUX NIVEAU D'IT 2 (TRACE).
         BSR         ATRACE
         PAGE
<
<
<        T R A I T E M E N T   D E S   P A R I T E S   M E M O I R E  :
<
<
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         < NUMERO D'ALARME...
         CPI         ALPAR           < EST-CE UNE PARITE HORS DU MODE 'DEBUG'???
         JNE         E601X1          < NON...
         PSR         A               < OUI, ESSAYONS DE L'EFFACER,
         LAI         K
         RST                         < LECTURE DU REGISTRE 'ST'...'.
         TBT         DEBUG           < EST-ON DEJA EN MODE 'DEBUG' ???
         JNC         SYSE10          < NON, OK...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      ATTENTION, A LA SORTIE DE
<                    'TH0' PUISQU'ON EFFACE CE
<                    MODE : DONC LES POINTS D'AR-
<                    RET ANTERIEURS AURONT DISPARUS !!!
<
SYSE10:  EQU         $
         LAI         K
         SBT         DEBUG
         SST                         < PASSAGE AU MODE 'DEBUG'...
         LRM         A,B,Y
         WORD        SO              < 'SLO'='ZERO',
         WORD        SE              < 'SLE'=64K,
         WORD        K64-Z*LK+LK-Z   < (Y)=ADRESSE DU DERNIER MOT.
         WOE                         < INITIALISATION DE 'SLO' ET 'SLE'...
E601X2:  EQU         $
         DBP                         < RECHERCHE DE LA PREMIERE PARITE,
         JNCV        E601X3          < C'EST FINI...
         JNV         SYSE11          < OK...
         BSR         ASYSER          < M E M O I R E   I N E X I S T A N T E ?!?
<
<        QUE FAIRE ???
<                      IL CONVIENT DE NOTER
<                    L'ADRESSE DE CETTE MEMOIRE
<                    INEXISTANTE, ET VERIFIER
<                    SI CELA EST VRAI !!!
<
SYSE11:  EQU         $
         JC          SYSE12          < OK...
         BSR         ASYSER          < P A S   D E   P A R I T E ???!??!!
<
<        QUE FAIRE ???
<                      COMPRENDRE COMMENT L'ALARME
<                    A PU APPARAITRE, ET NE PLUS
<                    EN TROUVER LA CAUSE !!!
<
SYSE12:  EQU         $
         RBP                         < ESSAYONS D'EFFACER LA PARITE...
         ADRI        -P,Y            < ET PASSAGE AU MOT PRECEDENT,
         CPZR        Y               < EXISTE-T'IL ???
         JGE         E601X2          < OUI...
E601X3:  EQU         $               < NON, C'EST FINI...
         LAI         K
         SBT         DEBUG
         RST                         < EFFACEMENT DU MODE DEBUG...
         PLR         A
E601X1:  EQU         $
         PAGE
<
<
<        T R A I T E M E N T   D E S   A P P E L S   E N T R E
<        L E   P R O C E S S E U R   E S C L A V E   E T
<                    M A I T R E  :
<
<
         LR          A,Y             < ...DANS Y
         CPI         ALIPIX          < EST-CE UNE ALARME IPI?
         JNE         E601
<
< UN 'IPI' A ETE RECU ESCLAVE --> MAITRE :
<
         CALL        #SISP CMS5 W TRACE#
         LAI         NPIPI
         BSR         ATRACE
         JMP         E823
         PAGE
<
<
<        D I S C R I M I N A T I O N   E N T R E   L E S   N I V E A U X
<                    ' H A R D '   E T   ' S O F T '  :
<
<
E601:    EQU         $
         RDHV                        < LECTURE HV POUR CONNAITRE LA
                                     < LISTE DES TACHES HARD EN COURS
                                     < DE TRAITEMENT
         RBT         NTH0            < RAZ DU TRAITEMENT DE TH0 (RECO-
                                     < VERY FORCEMENT MONTE, PUISQU'
                                     < ACTIF...
         JAE         E600            < SI (A)=K, C'EST QU'UNE TACHE
                                     < SOFT A APPELEE.
<
<
<        C A S   D ' U N E   T A C H E   ' H A R D '  :
<
<
         DBT                         < RECHERCHE DU NIVEAU DE LA TACHE
                                     < HARD APPELANTE.
         LR          X,A
XXBTHS:: VAL         BITSIG          < BIT UTILISE POUR DISCRIMINER LES
                                     < TACHES HARD DES TACHES SOFT...
         SBT         XXBTHS          < ON MET DANS 'A' :
                                     < BIT0(A)=1,
                                     < BIT1-15(A)=NUMERO DE LA TH.
         JMP         Z236            < VERS TRAPPE SYSTEME
ARECOV:  JMP         RECOV           < RELAI VERS 'RECOV' : ON NE PEUT UTILISER
                                     < UN MOT DU LOCAL, CAR LORSQU'ON A BESOIN
                                     < DE CE RELAI, LA BASE 'L' EST MAUVAISE...
<
<
<        C A S   D ' U N E   T A C H E   ' S O F T '  :
<
<
E600:    EQU         $
         LX          &NS
         ADRI        -NSNSP0,X       < NSP TACHE SOFT APPELANTE
         LB          &ADCTSY         < ACCES A L'ADRESSE DE LA DCT
         LR          B,W             < DANS W
         LR          X,A             < DANS A ON A:
                                     < BIT0(A)=K
                                     < BITS1-15(A)=NSP TACHE SOFT
         CPI         NSPACT          < EST-CE UN ESCLAVE ??? CE TEST EST
                                     < PREFERABLE A CELUI DU BIT DE MODE
                                     < DU REGISTRE 'S', CAR EN EFFET, PAR
                                     < EXEMPLE A LA SUITE D'UNE VIOLATION
                                     < MEMOIRE LORS DE L'EXECUTION DE
                                     < L'INSTRUCTION 'SVC', L'ESCLAVE SE
                                     < RETROUVE EN MODE MAITRE !!!
         JNE         Z236            < NON, DONC IL S'AGIT
                                     < D'UNE ERREUR SYSTEME,OU
                                     < D'UN ARRET CALCULATEUR SUR
                                     < HORLOGE.
         PAGE
<
<
<        T R A P P E S   E S C L A V E S  :
<
<
<        FONCTION :
<                      DISCRIMINE LES TRAPPES ESCLAVES VOLONTAIRES
<                    DE CELLES QUI NE LE SONT PAS. LORSQU'UNE TRAPPE
<                    EST INVOLONTAIRE, LE CONTROLE EST RENDU AU CCI,
<                    POUR L'ENVOI DU MESSAGE '' ; LES TRAPPES
<                    SONT VOLONTAIRES LORSQU'ELLES SONT CAUSEES PAR
<                    UN 'ACTD' :
<                    '1E05 : TRAPPE,
<                    '1E15 : 1- (A(ESCLAVE))>=K :
<                                    B(ESCLAVE)<--((A(ESCLAVE))),
<                            2- (A(ESCLAVE))<0 :
<                                    B(ESCLAVE)<--(DCTSY((A(ESCLAVE))
<                                                .AND.'7FFF)),
<                    '1E25 : A,B(ESCLAVE)<--'ACNESC',
<                    '1E35 : A(ESCLAVE)<--(SLE)-(SLO)+1, ET
<                            B(ESCLAVE)<--(BOX(DEMESC)),
<                    '1E45 : A(ESCLAVE)<--'IDESC',
<                    '1E55 : RESET 5,
<                    '1E65 : RESET 6,
<                    '1E75 : RESET 7,
<                    '1E85 : A(ESCLAVE)<--HEURE EXPRIMEE EN MULTIPLES
<                            DE 2 SECONDES (ATTENTION : SUR 16 BITS !!!).
<                    '1E95 : OCTET0(A(ESCLAVE))<--NSPOUT,
<                            OCTET1(A(ESCLAVE))<--NSPVI1,
<                    '1EA5 : 1- (A(ESCLAVE)) EST UN CODE ASCI ACCESSIBLE
<                               AU CLAVIER DE LA VISU :
<                                    CARACTERE D'ABORT<--(A(ESCLAVE)),
<                            2- SI BIT0=1 ET BIT1=K DANS A(ESCLAVE) :
<                                    LE DETECTEUR DE TIME OUT DE LA
<                                    VISU RECOIT LES BITS2-15 DE
<                                    A(ESCLAVE), CEUX-CI POUVANT ETRRE
<                                    NULS ET SUPPRIMANT AINSI LA
<                                    DETECTION DES TIME OUT,
<                            3- SI BIT0=BIT1=1 DANS A(ESCLAVE) :
<                                    L'INHIBITEUR/AUTORISEUR DES
<                                    EXPANSIONS/EXTENSIONS RECOIT LES
<                                    BITS2-15 DE (A(ESCLAVE), CEUX-CI
<                                    POUVANT ETRE NULS (=AUTORISATION),
<                    '1EB5 : PRESC<--(A(ESCLAVE)) SANS VERIFICATIONS !!
<                            SI (A(ESCLAVE))<0 : ON INHIBE LES ALT-
<                            MODES SOLITAIRES.
<                    '1EC5 : EXECUTION D'UN SOUS-PROGRAMME EN MODE
<                            MAITRE SOUS :SYS, DONT L'ADRESSE
<                            RELATIVE EST DANS A(ESCLAVE).
<                    '1ED5 : TEST & SET 5,
<                    '1EE5 : TEST & SET 6,
<                    '1EF5 : TEST & SET 7.
<                    '1E1D : ('STAR') EST LE COMPLEMENT DE '1E15, ET
<                            PERMET DE RANGER UNE VALEUR 'V' A UNE
<                            ADRESSE 'A' :
<                            V=(B) SI (Y)=K,
<                            V=(B)+(SLO)*16 SI (Y)#0,
<                            (A)=(DCTSY) SI (A)='NSP'+Q8000,
<                            (A)=((A)) SINON.
<                    '1E16 : APPEL 'CCI' ('RST' EN MODE ESCLAVE...).
<
<
<        NOTA : LES REGISTRES A,B,X,W SONT DESTRUCTIBLES...
<
<
<        REMARQUES IMPORTANTES :
<
<                    1 - LORSQU'UN ESCLAVE EXECUTE '1EX5
<                    AVEC 'X' PAIR, ON TOMBE SUR UNE ALAR-
<                    ME 9 ('ACTD'), ET ON AGIT EN CONSE-
<                    QUENCE...
<
<                    2 - LORSQU'UN ESCLAVE EXECUTE '1EX5
<                    AVEC 'X' IMPAIR, ON TOMBE SUR UNE ALAR-
<                    ME 4 (INSTRUCTION PRIVILEGIEE : ICI
<                    UN 'SST' EN MODE ESCLAVE), ET ON AGIT
<                    EN CONSEQUENCE...
<
<                    3 - MAIS ATTENTION, L'ALARME PRECE-
<                    DENTE PEUT AUSSI MONTER LORSQUE L'ES-
<                    CLAVE EXECUTE '1E16 ('RST') QUI EST LA
<                    FONCTION D'APPEL DIRECT DU 'CCI'
<                    ("BREAK-POINTS")...
<
<                      EN CONSEQUENCE DE QUOI, LORS DE
<                    LA RECEPTION D'UNE ALARME, IL CON-
<                    VIENT DE FAIRE LE TRI, AVANT DE
<                    DECLARER A UNE EVENTUELLE "TRAPPE"...
<
<
<        NOTA :
<                      LE CODE 6 ('IPI') A ETE TRAITE
<                    EN AMONT BIEN ENTENDU (SALUT
<                    MARCEL...).
<
<
         LR          Y,A             < (A)=CAUSE DE LA TRAPPE ESCLAVE.
<
<
<        D I S C R I M I N A T I O N   D E S   C A U S E S
<        D E S   C A U S E S   D ' A P P E L  :
<
<
         CPI         ALACTD          < EST-CE UN ACTD (1EX5 AVEC 'X' PAIR) ???
         JE          Z402Z           < OUI...
         CPI         ALMX            < EST-CE UNE "MEMOIRE INEXISTANTE" POUR
                                     < L'UTILISATEUR ???
         JE          Z401X1          < OUI, D'AILLEURS CELA NE PEUT SE PRODUIRE
                                     < QUE POUR LA 'CDAJ'...
         CPI         ALPRO           < EST-CE UNE ALARME PROTECTION MEMOIRE ???
         JE          Z401X5          < OUI, ALLONS VOIR SI EN FAIT CE N'EST PAS
                                     < UNE MEMOIRE INEXISTANTE SUR LA 'CDAJ' ;
                                     < VOIR A CE PROPOS CE QUE FAIT LA TACHE
                                     < D'INTERRUPTION DU 'CBJ'...
         CPI         ALIP            < EST-CE UNE INSTRUCTION PRIVILEGIEE?
                                     < (PAR EXEMPLE SST=1EX5 AVEC X IMPAIR
                                     < OU RST(1E16)...)
         JNE         Z401            < C'EST FORCEMENT UNE TRAPPE "PURE"
Z402Z:   EQU         $               < EST-CE BIEN UN 1EX5?
         LXI         TH0SLO
         LA          &AXPLH0         < (A)=SLO(ESCLAVE),
         LXI         TH0SLE
         LB          &AXPLH0         < (B)=SLE(ESCLAVE),
         WOE                         < MISE EN PLACE DE (SLO,SLE) ESCLAVE...
         SBR         A,B             < (B)=(SLE)-(SLO)=TAILLE EN DADR-MOTS
                                     <     DE L'ESPACE MEMOIRE UTILISATEUR...
         LXI         LPSTH0+TH0P
         LY          &AXPSTH         < (Y)=REGISTRE 'P' DE L'ESCLAVE,
                                     < MAIS,  A T T E N T I O N  :
                                     < SUIVANT LA CAUSE DE L'ENTREE DANS 'TH0',
                                     < C'EST (P) OU (P)-D QUI EST BON !!!
                                     < EN PARTICULIER, ET C'EST UN COMBLE,
                                     < SUIVANT L'INSTRUCTION QUI PROVOQUE LA
                                     < TRAPPE "INSTRUCTION PRIVILEGIEE", C'EST
                                     < LA AUSSI (P) OU (P)-D QUI EST L'ADRESSE
                                     < DE CETTE INSTRUCTION ; MAIS HEUREUSEMENT,
                                     < POUR "SST" ('1E15), "RST" ('1E16) ET
                                     < "STAR" ('1E1D) C'EST SYSTEMATIQUEMENT
                                     < (P)-D...
         LR          Y,A
         SLRS        -DADR           < (A)=VALEUR DU REGISTRE 'P' EXPRIMEE EN
                                     <     DADR-MOTS,
         CPR         B,A             < ET VALIDATION PAR RAPPORT A (SLO,SLE) :
         JLE         ZX401A          < OK : (P) <= TAILLE DE L'ESPACE...
         BSR         ASYSER
<
<        QUE FAIRE ???
<                      COMPRENDRE COMMENT AVEC
<                    UN 'P' DE TYPE "VIOLATION
<                    MEMOIRE" ON PEUT EN ARRIVER
<                    LA !!!
<
         JMP         Z401            < ET ON SAUTE LE 'LAR' AFIN D'EVITER UNE
                                     < ALARME...
ZX401A:  EQU         $
         ADRI        -D,Y            < ET RETOUR SUR L'INSTRUCTION "ACTD", "SST"
                                     < "RST" OU "STAR",
         CPZR        Y               < ON FAIT CE TEST, CAR EN EFFET SI C'ETAIT
                                     < (P) QUI ETAIT BON, ET QUE PAR MALHEUR
                                     < IL ETAIT DEJA NUL, ON PROVOQUERAIT AVEC
                                     < "LAR", ETANT DANS 'TH0' UNE ALARME...
XWOR%8:  VAL         NOCMO=K
XWOR%8:  VAL         -XWOR%8
         IF          MXMEME>XWOR%8-K,,,XEIF%
         IF          ATTENTION : LE REGISTRE 'P' D'UN ESCLAVE PEUT
         IF          ETRE NEGATIF, VUE LA TAILLE DE L'ESPACE
         IF          MEMOIRE !!!
XEIF%:   VAL         ENDIF
         JL          Z401            < EFFECTIVEMENT, ON NE PEUT ETRE EN
                                     < PRESENCE DE "ACTD", "SST", "RST" OU
                                     < "STAR"...
         LAR                         < QUE L'ON CHARGE DANS 'A', MAIS N'OUBLIONS
                                     < PAS QUE CE PEUT ETRE L'INSTRUCTION
                                     < PRECEDENTE, MAIS QUE FAIRE ???
         ANDI        MKSL)MFFFF
         CP          ACTDSL          < 'ACTD' ESCLAVE ???
         JE          Z401A           < OUI, LE TRAITER...
         CP          RSTSL           < EST-CE '1EX6 (AVEC 'X'#0) ???
         JE          ZX401           < OUI, C'EST '1E16.
         CP          STARSL          < EST-CE UN 'STAR' ESCLAVE ???
         JNE         Z401            < NON, VERS UNE TRAPPE...
         BR          ASTAR           < OUI, ALLONS LE TRAITER...
ZX401:   EQU         $
<
<
<        C A S   D E S   ' 1 E X 6  :
<
<
<        NOTA :
<                      LES '1EX6 SONT TOUS ASSIMILES
<                    A DES 'SVC', C'EST POURQUOI, ON
<                    FAIT COMME SI UN 'SVC' AVAIT ETE
<                    RECU : ON DESARME LE NIVEAU UTILI-
<                    SATEUR EN AGISSANT SUR 'ASTF'...
<
<
         LYI         FONRB0          < FONCTION RESET(MISE A 0)
         LAD         AASTF           < RELAI D'ACCES A LA FILE ASTF
         LXI         NSNSP0+NSPACT   < (X)=NIVEAU SOFT D'EXECUTION
                                     <     DE L'ESCLAVE,
         BSR         ATMOBT          < ASTF(NSNSP0+NSPACT)=0,
                                     < L'ESCLAVE EST DONC DESARME...
         JMP         Z237            < SORTIE DE LA TH0
<
<
<        C A S   D E S   ' A C T D '  :
<
<
Z401A:   EQU         $
         LAR                         < REMISE DE L'INSTRUCTION DANS 'A'...
         ANDI        MKSL            < RECUPERATION DE LA ZONE ARGUMENT
                                     < DE L'ACTD ESCLAVE.
                                     < (BITS 8-11).
         SLRS        MKSL=K          < CADRAGE A DROITE DE LA FONCTION.
         LR          A,X             < (X)=FONCTION DE 0 A 15.
<
< EXECUTION DE LA FONCTION DEMANDEE :
< (X=K,1,...,15).
<
         LA          &APLH0          < 'A' RECOIT A PRIORI LE A(ESCLAVE)
         BR          &ACTDU
         PAGE
<
<
<        C A S   D E S   V R A I E S   T R A P P E S  :
<
<
<
< CAS OU UNE VIOLATION MEMOIRE
< A ETE RECUE PAR L'UTILISATEUR :
<
Z401X5:  EQU         $
         IF          BMCDAJ-BITSIG,,XEIF%,
         IF          ATTENTION : LE TEST SUIVANT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         CPZ         &AAOCDA         < EST-ON BIEN ACTUELLEMENT SUR LA 'CDAJ' ??
         JGE         Z401X6          < NON ; NOTONS BIEN QU'IL S'AGIT-LA D'UN
                                     < TEST INCOMPLET CAR CE N'EST PEUT-ETRE
                                     < PAS UNE INSTRUCTION 'WCDA'/'RCDA' QUI
                                     < EST EN CAUSE, MAIS C'EST DIFFICILE A
                                     < TESTER, D'OU CE TEST SIMPLISTE ; ON
                                     < PEUT EN TOUT CAS SAVOIR SI LA 'CDAJ'
                                     < EST UTILISEE PAR CET UTILISATEUR...
<
< CAS DE LA 'CDAJ' :
< (ON SAIT QUE LA TACHE
< D'INTERRUPTION DU 'CBJ'
< TRANSFORME LES MEMOIRES
< INEXISTANTES DE 'CDAJ'
< EN VIOLATION MEMOIRE EN
< PERMUTANT 'CDESCO' ET
< 'CDESCE', SEULE FACON DE
< PROVOQUER UNE ALARME ;
< MAIS NOTONS BIEN QUE LA
< MEMOIRE INEXISTANTE EST
< DEVENUE UNE VIOLATION MEMOIRE...)
<
         LA          CDESCO-DCTESC,W < (A)=ORIGINE DE LA 'CDAJ',
         LB          CDESCE-DCTESC,W < (B)=EXTREMITE DE LA 'CDAJ',
         CPR         A,B             < SONT-ELLES DANS LE BON ORDRE ???
         JGE         Z401X6          < OUI...
                                     < NON, IL Y A DONC EU UNE INTERRUPTION
                                     < MEMOIRE INEXISTANTE DE LA PART DU 'CBJ'
                                     < DE L'IMAGEUR MOYENNE DEFINITION...
         STA         CDESCE-DCTESC,W < ET ON RESTAURE
         STB         CDESCO-DCTESC,W <                LA 'CDAJ'...
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 :
         LAI         ALACBJ          < (A)=NUMERO DE L'ALARME MEMOIRE INEXIS-
                                     <     TANTE DU 'CBJ' TRANSFORMEE EN UNE
                                     <     VIOLATION MEMOIRE DIFFEREE (CF.
                                     <     L'ASYNCHRONISME : ON DETECTE CETTE
                                     <     MEMOIRE INEXISTANTE A L'ACCES SUIVANT
                                     <     A LA 'CDAJ'...).
         STBY        &AXPSTH         < QUE L'ON MET DANS 'PSTH0' POUR AVERTIR
                                     < L'UTILISATEUR...
<
< TRAITEMENT DE L'ALARME 'VIOL' :
<
Z401X6:  EQU         $
         JMP         Z401            < VERS LE TRAITEMENT GENERAL DES ALARMES...
<
< UNE ALARME "MEMOIRE INEXISTANTE"
< A ETE RECUE POUR L'UTILISATEUR :
<
Z401X1:  EQU         $
         IF          BMCDAJ-BITSIG,,XEIF%,
         IF          ATTENTION : LE TEST SUIVANT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         CPZ         &AAOCDA         < EST-ON BIEN ACTUELLEMENT SUR LA 'CDAJ' ??
         JL          Z401X2          < OUI ; NOTONS BIEN QU'IL S'AGIT-LA D'UN
                                     < TEST INCOMPLET CAR CE N'EST PEUT-ETRE
                                     < PAS UNE INSTRUCTION 'WCDA'/'RCDA' QUI
                                     < EST EN CAUSE, MAIS C'EST DIFFICILE A
                                     < TESTER, D'OU CE TEST SIMPLISTE ; ON
                                     < PEUT EN TOUT CAS SAVOIR SI LA 'CDAJ'
                                     < EST UTILISEE PAR CET UTILISATEUR...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      BIEN NOTER LES ADRESSES
<                    DE LA 'CDA' EN CAUSE, ET
<                    VOIR SI CELA EST NORMAL !!!
<
Z401X2:  EQU         $
         IF          XMEMXI-K,,XEIF%,
         IF          ATTENTION : LE TEST SUIVANT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         CPZ         &AMEMX          < PEUT-ON IGNORER CETTE ALARME ???
         JE          Z237            < OUI (EN ESPERANT QU'IL S'AGIT BIEN DE
                                     < LA 'CDAJ') ; ON SORT IMMEDIATEMENT DE
                                     < 'TH0'...
<
< TRAITEMENT DES TRAPPES VRAIES ET PURES :
<
Z401:    EQU         $
         BSR         ADOWN           < ON FAIT TOUT POUR QUE LA TRAPPE SOIT
                                     < TRAITEE EN MEMOIRE BASSE...
         LA          SRCOTO-DCTESC,W < VERIFICATION QU'IL N'Y A PAS
                                     < D'APPEL DE SOUS-GRAMMAIRE
                                     < EN COURS.
         CP          CE000
         JE          SYSE13          < OK...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      ESSAYER DE COMPRENDRE
<                    CES APPELS DE SOUS-GRAMMAIRES
<                    IMBRIQUES !!!
<
         JMP         Z830            < ET IL VAUT MIEUX SAUTER CE QUI SUIT...
SYSE13:  EQU         $
         LA          RECOTO-DCTESC,W
         CP          INFINI          < Y-A-T'IL UN LOG-OUT EN COURS ???
         JE          Z830            < OUI, ON IGNORE DONC LA TRAPPE
                                     < QUI EST DONC SUREMENT DU A UNE
                                     < ERREUR HARD DES DISQUES (!!!).
         CP          GRTRAP          < Y-A-AURAIT-IL UNE TRAPPE EN COURS ???
         JE          Z830            < OUI, ON L'IGNORE FINALEMENT (AU POINT DE
                                     < VUE GRAMMAIRE) ; CELA PEUT SE PRODUIRE
                                     < PAR EXEMPLE LORSQUE LE 'SVC''CCI' IMPLAN-
                                     < TE SUITE A UNE TRAPPE FAIT PAR EXEMPLE
                                     < UNE PARITE MEMOIRE...
         STA         SRCOTO-DCTESC,W < SAUVEGARDE DE RECOTO DANS
                                     < SRCOTO POUR SIMULER UN APPEL
                                     < DE SOUS-GRAMMAIRE.
                                     < NOTA : LORSQUE L'ESCLAVE TRAPPE,
                                     < RECOTO CONTIENT L'INDEX COURANT
                                     < DE LA GRAMMAIRE DU CCI...
         LA          GRTRAP
         STA         RECOTO-DCTESC,W < MODIFICATION DE
                                     < L'INDEX DE LA GRAMMAIRE DU CCI
                                     < DE CETE ESCLAVE.
Z830:    EQU         $               < CAS DES ERREURS HARD DISQUES
                                     < LORS D'UN LOG-OUT.
         BSR         ATRAPH          < PREPARATION DES REGISTRES UTILISATEURS,
                                     < ET GENERATION DU PROGRAMME MINIMUM
                                     < DE TRAPPE...
         JMP         Z237            < SORTIE DU RECOVEY IMMEDIAT.
         PAGE
<
<
<        T R A P P E S   S Y S T E M E  :
<
<
Z236:    EQU         $
         LR          Y,X             < RESTAURE DANS X LA CAUSE DE
                                     < L'APPEL.
XWOR%2:  VAL         '0F00           < MASQUE DU NUMERO D'ALARME,
XWOR%3:  VAL         MOCD            < MASQUE D'IDENTIFICATION DE LA TACHE.
XWOR%4:  VAL         MOCG=K          < A CAUSE DU 'SWBR' QUI SUIT...
XWOR%4:  VAL         -XWOR%4         < POUR FAIRE UN DECALAGE A DROITE...
XWOR%1:  VAL         CORBT?XXBTHS=FMASK(K?XWOR%2?XWOR%3)MMOT=FCINST>XWOR%4
         XR          A,Y             < (A)=NUMERO DE L'ALARME, (Y)=IDENTIFICATIO
         ORI         XWOR%1          < MISE EN PLACE DE L'INDICATIF,
         SWBR        A,A             < ET CADRAGE DANS L'OCTET GAUCHE DE 'A',
         ORR         Y,A             < PUIS CONCATENATION DE L'IDENTIFICATION
                                     < DE LA TACHE EN CAUSE.
<
< AFFICHAGE PUPITRE & AVERTISSEMENT OPERATEUR :
<
         BSR         ASMPUO          < AFFICHAGE PUPITRE DE A
E812:    EQU         $
         PSR         A
         LB          ETASYS          < (B)='ETASYS',
         TBT         NBITMO+RECON    < QUEL EST LE MODE DE BLOCAGE DE 'TH0' ???
         JC          E812XY          < PAR 'CLEAR'+'STEP'... C'EST PLUS FACILE..
E812XX:  EQU         $
         BSR         ATDEFS          < B L O C A G E...
<
<        ON A ICI :
<                    BIT0(A)=1 : TACHE HARD APPELANTE,
<                           =0 : TACHE SOFT APPELANTE,
<                    BIT1-3='7 (MASQUE DISTINCTIF FORMANT UNE ADRESSE
<                              QUI NE PEUT ETRE CELLE D'UNE 'DCT').
<                    BIT4-7=NUMERO DE L'ALARME (REGISTRE 'X').
<                    BIT1-15(A)=NUMERO (NIVEAU) DE LA TACHE APPELANTE,
<                               (NSP SI TACHE SOFT),
<                    (W)=ADRESSE DCT(TACHE APPELANTE), SI TACHE SOFT,
<                    (B)=ETASYS,
<                    (X)=0  MEMOIRE INEXISTANTE
<                       =1  PROTECTION DRPS OU CDA
<                       =2  ERREUR DE PARITE (HORS DU MODE DEBUG)
<                       =3  INSTRUCTION OPTIONNELLE INEXISTANTE
<                       =4  INSTRUCTION PRIVILEGIEE
<                       =5  RQST,WAIT,QUIT SOUS NIVEAU HARD
<                       =6  APPEL D'UNE AUTRE UT PAR IPI
<                       =7  STEP
<                       =8  POINT D'ARRET (MODE DEBUG)
<                       =9  ACTD
<
ZRECOV:  EQU         $               < ADRESSE DE BOUCLAGE SUR SYSER
                                     < AVEC INTERRUPTIONS NON MASQUEES.
         JMP         E812XX          < ATTENTE DU DEBLOCAGE MANUEL EN FAISANT :
                                     < P <-- ZRECOV+1.
         PAGE
<
<
<        S O R T I E   D E   ' T H 0 '  :
<
<
E812XY:  EQU         $               < DEBLOCAGE PAR 'CLEAR'+'STEP'.
<
< TRAITEMENT D'UNE PETITE ANOMALIE FAISANT
< QUE LES TACHES SYSTEMES QUI TOURNENT EN
< MODE MAITRE PEUVENT SE RETROUVER EN MODE
< ESCLAVE (VOIR PAR EXEMPLE L'IDLE QUI
< UTILISE L'INSTRUCTION 'MVTS' QUI PROVOQUE
< AVEC SES ALARMES UN PASSAGE EN MODE
< ESCLAVE) :
<
         LA          &APSTHS         < (A)=REGISTRE 'S' DE LA TACHE APPELANTE,
         SBT         MS              < QUE L'ON FORCE EN MODE MAITRE, ET
         STA         &APSTHS         < QUE L'ON MET A JOUR DANS 'PSTH0'.
         PSR         B,X
E812B:   EQU         $
         BSR         ASMPUI          < LECTURE DU PUPITRE POUR SAVOIR
                                     < S'IL FAUT SORTIR DE LA TACHE 0 ???
                                     < CARY=INFORMATION VALIDE (1).
         JNC         E812B           < ON ATTEND QUE L'INFORMATION VENANT
                                     < DU PUPITRE SOIT VALIDE...
         LXI         LPSTH0+TH0P
         LA          &AXPSTH         < (A)=REGISTRE 'P' DE LA TACHE PLANTEE.
         IF          TH0-K,,XEIF%,
         IF          ATTENTION : CE QUI PRECEDE EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         BSR         ASMPUO          < VISUALISATION DU REGISTRE 'P'...
E812AX:  EQU         $
         BSR         ASMPUI          < LECTURE DU PUPITRE POUR SAVOIR QUOI
                                     < FAIRE ???
         JNC         E812AX          < RIE, ON CONTINUE D'ATTENDRE...
         STA         CLESPU          < STOCKAGE POUR DEBUG/TRACE EVENTUEL
XCLEF0:: VAL         L               < CLEF 0 DU PUPITRE,
XCLEF1:: VAL         XCLEF0+I        < CLEF 1 DU PUPITRE.
         IF          XCLEF0-BITSIG,,XEIF%,
         IF          ATTENTION : 'XCLEF0' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         TBT         XCLEF0          < TEST CLE 0
         LAI         '0000
         SIO         PUPTH0          < ON RAZE LES VOYANTS DU BAS...
         PLR         A,B,X
         JNC         E822            < CLEF0=K : SORTIE DU RECOVERY.
         BR          AE890           < CLEF0=1 : UNE DEMANDE DE TRACE
                                     < ET EVENTUELLEMENT DE DEBUG EST
                                     < FAITE.
<
<
<        D E S A R M E M E N T   D E   ' T H 0 '  :
<
<
E823:    EQU         $
E822:    EQU         E823
Z237:    EQU         $               < SORTIE TRAPPES ESCLAVES.
         BSR         AFITH0          < TEST DES 'IPI' EN ATTENTE, TEST
                                     < DU MODE D'EXECUTION, ET EPILOGUE...
         JMP         ARECOV          < VERS NOUVELLE ALARME
         PAGE
<
<
<        E X E C U T I O N   D E S   A C T D   D E   F O N C T I O N  :
<
<
<        ARGUMENT :
<                    (A)=A(ESCLAVE),
<                    (W)=ADRESSE DCT(ESCLAVE).
<
<
<        NOTA :
<                    'A', 'B', 'X' ET 'W' SONT DESTRUCTIBLES...
<
<
<        REMARQUE :
<                      'W' CONTIENT L'ADRESSE DE LA
<                    'DCTESC' DE L'ESCLAVE EN CAUSE ;
<                    LORS DES ALARMES (ET INTERRUP-
<                    TIONS) LE CHANGEMENT DE CON-
<                    TEXTE N'ETANT QUE PARTIEL, LES
<                    REGISTRES UTILISATEURS (ET EN
<                    PARTICULIER 'A' ET 'B'), SONT,
<                    NON PAS DANS 'DCTESC', MAIS DANS
<                    LA PILE DE 'TH0', D'OU LES RELAIS
<                    D'ACCES QUE L'ON A IMPLANTE
<                    ('AXPSTH' DANS LE 'COMMON', ET
<                    'APSTHS' DANS LE 'LOCAL' DE
<                    'TH0').
<
<
<
< RENVOI DE NSPOUT/NSPVI1 DANS A ('1E95) :
< (X=9).
<
RECOUT:  EQU         $
         LXI         PHOUT
         LBY         &TASSGN-DCTESC,W  < OCTET1(A)=NSPOUT.
         SWBR        A,A               < OCTET0(A)=NSPOUT.
         ORI         NSPVI0          < OCTET1(A)=NSPVI1.
         JMP         Z820            < VERS LE RENVOI DANS A(ESCLAVE).
<
< RENVOI DE L'HEURE A L'ESCLAVE ('1E85) :
< (X=8).
<
RECDAT:  EQU         $
XXXDAT:: VAL         2               < L'HEURE EST EXPRIMEE EN MULTIPLE DE
                                     < 2 SECONDES POUR TENIR DANS UN MOT...
         LA          HTIME
         LB          HTIMED          < (A,B)=HEURE DANS LE JOUR EN
                                     <       SECONDES.
         SLRD        XXXDAT=K        < CONVERSION EN UN MULTIPLE
                                     < DE 2 SECONDES (SUR 16 BITS).
         STB         &APLH0          < A(ESCLAVE)=HEURE DANS LE JOUR
                                     < EN MULTIPLE DE 2 SECONDES
         JMP         Z1950           < VERS LA SIMULATION D'UNE FAUSSE
                                     < IT D'HORLOGE, PUIS LA SORTIE OK.
<
< RENVOI A L'ESCLAVE DE SON IDENTIFICATEUR SYSTEME ('1E45) :
< (X=4).
<
RECID:   EQU         $
         LA          IDESC-DCTESC,W
         ANDI        MKIDES          < (A)=IDESC.
Z820:    EQU         $               < ENTRY 'RENVOI DANS A(ESCLAVE)'.
         STA         &APLH0          < A(ESCLAVE)=IDESC
                                     <           =NSPOUT/NSPVI1
         JMP         Z1950           < VERS LA SIMULATION D'UNE FAUSSE
                                     < IT D'HORLOGE, PUIS LA SORTIE OK.
<
< RENVOI A L'ESCLAVE DE LA TAILLE EN MOTS DE SON ESPACE MEMOIRE :
< ET DE LA BOX COURANTE DE DEMESC :
< (X=3).
<
RECSIZ:  EQU         $
         LXI         TH0SLE
         LA          &AXPLH0         < (A)=SLE(ESCLAVE)
         LXI         TH0SLO
         SB          &AXPLH0         < (A)=SLE(ESCLAVE)-SLO(ESCLAVE)
         ADRI        FADR>DADR,A     < (A)=TAILLE EN MULTIPLE DE 16 MOTS
         SLLS        -DADR           < (A)=TAILLE EN MOTS DE L'ESPACE
                                     <     MEMOIRE DE L'ESCLAVE
         IF          RH0A-K,,XEIF%,
         IF          ATTENTION : CE QUI SUIT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         STA         &APLH0          < ET RENVOI DANS A(ESCLAVE)
         LA          BOXESC-DCTESC,W < RECUPERATION DANS A DE LA
                                     < BOX COURANTE DE DEMESC.
         JMP         Z731            < VERS LE RENVOI DE LA BOX COURANTE
                                     < PAR LE REGISTRE B(ESCLAVE).
<
< RENVOI DE L'ACN A L'ESCLAVE ('1E25) :
< (X=2).
<
RECACN:  EQU         $
         LA          ACNESC-DCTESC,W
         STA         &APLH0          < A(ESCLAVE)<--- ACN1
         LA          ACNESC-DCTESC+U,W
Z731:    EQU         $               < ENTRY DESTINEE A RECABS.
                                     < (ET RECSIZ)
         LXI         RH0B
         STA         &AXPLH0         < B(ESCLAVE) <---ACN2
                                     < OU : B(ESCLAVE)<--(BOX(DEMESC)),
                                     < OU : B(ESCLAVE)<--((A(ESCLAVE))).
         JMP         Z1950           < VERS LA SIMULATION D'UNE FAUSSE
                                     < IT D'HORLOGE, PUIS LA SORTIE OK.
<
< ACCES MEMOIRE ABSOLU ('1E15) :
< (X=1).
<
<        1- SI (A)>=K : (A) EST UNE ADRESSE MEMOIRE ABSOLUE,
<        2- SI (A)<0 : (A).AND.'7FFF EST UN NVP D'ACCES A DCTSY.
<
RECABS:  EQU         $
XXBNSP:: VAL         BITSIG          < BIT DE DISCRIMINATION DES 'NSP' DES
                                     < ADRESSES ABSOLUES.
         IF          XXBNSP-BITSIG,,XEIF%,
         IF          ATTENTION : LES TESTS SUIVANTS SONT IDIOTS !!!
XEIF%:   VAL         ENDIF
         BSR         ARCABS          < EXECUTION CONDITIONNELLE DES ACCES
                                     < DIRECTS A LA MEMOIRE ; ON APPELLE UN
                                     < SOUS-PROGRAMME A CAUSE DES SAUTS SUPE-
                                     < RIEURS A 128 MOTS...
                                     < LE RESULTAT EST DANS 'A'...
         JMP         Z731            < VERS LE RENVOI DU CONTENU DU MOT MEMOIRE
                                     < OU DU RELAI DEMANDE DANS B(ESCLAVE).
         PAGE
<
<
<        S Y N C H R O N I S A T I O N
<        I N T E R - U T I L I S A T E U R S  :
<
<
<        PHILOSOPHIE :
<                      LE SYSTEME DECRIT CI-DESSOUS EST
<                    DESTINE A PERMETTRE L'EXCLUSION DE
<                    PHASES CRITIQUES ENTRE UTILISATEURS
<                    DU SYSTEME (CF. LE CAS DE LA MISE A
<                    JOUR DE LA VALEUR ASSOCIEE A UN NOM, CELUI-
<                    CI ETANT COMMUN A PLUSIEURS UTILISATEURS
<                    DE MEME NUMERO DE COMPTE).
<                      ON DISPOSE DE 2 PRIMITIVES :
<                    - 'TEST & SET' : P-OPERATION,
<                    - 'RESET' : V-OPERATION.
<
<
<        SOIT (X)=5,6,7 (MODULO 8), ON A ALORS LES 2 PRIMITIVES :
<
<        'TEST & SET S(X)' :
<                    SI S(X)=K : S(X)<--1 ; CARRY(ESCLAVE)<--0.
<                    SI S(X)=1 : CARRY(ESCLAVE)<--1.
<
<        RESET S(X)' :
<                    SI S(X)=1 : S(X)<--0 ; CARRY(ESCLAVE)<--0.
<                    SI S(X)=K : CARRY(ESCLAVE)<--1.
<
<
<        NOTA :
<                      'S' DESIGNE 'SYNCUS', ET MEMORISE
<                    AU NIVEAU GLOBAL DU SYSTEME, LES
<                    'TEST & SET' EN COURS ; UNE MEMORI-
<                    SATION LOCALE (AU NIVEAU DE CHAQUE
<                    ESCLAVE) EST FAITE DANS 'SETRUN(DCTESC)'.
<                    ENFIN, SEUL L'ESCLAVE AYANT EXECUTE
<                    UN 'TEST & SET' PEUT FAIRE LE 'RESET'
<                    ASSOCIE...
<
<
<
< 'TEST & SET' ('1EF5, '1EE5, '1ED5) :
< (X=7+8, 6+8, 5+8).
<
XSET::   VAL         8               < DROLE DE PARAMETRAGE...
RECSET:  EQU         $
         LA          SYNCUS          < ACCES A SYNCUS.
         LB          &APSTHS         < ACCES AU REGISTRE S(ESCLAVE)
         TBT         NBITMO+XSET,X   < LE 'TEST & SET' DEMANDE EST-IL
                                     < DEJA ACTIF ???
         JC          Z801            < OUI, CELUI-CI DOIT DONC ETRE
                                     < IGNORE.
         SBT         NBITMO+XSET,X   < DANS LE CAS CONTRAIRE, IL
                                     < EST PRIS EN COMPTE.
         STA         SYNCUS          < MEMORISATION DE 'TEST & SET' AU
                                     < NIVEAU GENERAL DU SYSTEME.
         LA          SETRUN-DCTESC,W
         SBT         NBITMO+XSET,X   < MEMORISATION LOCALE DU 'TEST
                                     < & SET' AU NIVEAU ESCLAVE.
         STA         SETRUN-DCTESC,W < MAJ DE SETRUN.
         RBT         NBITMO+C        < CARY(ESCLAVE)<--0.
<
< RETOUR A L'ESCLAVE DEMANDEUR :
<
Z803:    EQU         $
Z805:    EQU         $
         STB         &APSTHS         < MISE A JOUR S(ESCLAVE)
         JMP         Z1950           < VERS LA SIMULATION D'UNE FAUSSE
                                     < IT D'HORLOGE, PUIS LA SORTIE OK.
Z801:    EQU         $
         SBT         NBITMO+C        < CARY(ESCLAVE)<--1.
         JMP         Z803            < VERS LA MAJ DE S(ESCLAVE).
<
< 'RESET' ('1E75, '1E65, '1E55) :
< (X=7, 6, 5).
<
RECRST:  EQU         $
         LA          SETRUN-DCTESC,W < ON COMMENCE PAR SETRUN (ET NON
                                     < PAS PAR SYNCUS), AFIN QUE
                                     < SEUL L'ESCLAVE QUI A FAIT LE
                                     < 'TEST & SET' PUISSE DEMANDER
                                     < LE 'RESET' ASSOCIE.
         LB          &APSTHS         < ACCES AU REGISTRE S(ESCLAVE)
         SBT         NBITMO+C        < CARY(ESCLAVE)<--1 A PRIORI.
         TBT         XSET-XSET,X     < TEST DE L'EXISTENCE DU 'TEST &
                                     < SET' DONT ON DEMANDE LE 'RESET'.
         JNC         Z803            < ERREUR : L'ESCLAVE N'A PAS FAIT
                                     < LE 'TEST & SET' ASSOCIE, OU
                                     < BIEN A APPELE LE CCI INTER-
                                     < ACTIF ENTRE TEMPS.
         RBT         XSET-XSET,X     < OK, RESET.
         STA         SETRUN-DCTESC,W < RESET AU NIVEAU DE L'ESCLAVE.
         LA          SYNCUS
         RBT         XSET-XSET,X     < 'RESET' DANS SYNCUS.
         STA         SYNCUS          < RESET AU NIVEAU GLOBAL
                                     < DU SYSTEME.
         RBT         NBITMO+C        < CARY(EESCLAVE)<--0.
         JMP         Z805            < VERS LA SIMULATION D'UN IT
                                     < D'HORLOGE.
         PAGE
<
<
<        C H A N G E M E N T   D U   C A R A C T E R E
<        C O U R A N T   D ' A B O R T  :
<
<
<        FONCTION :
<                      SI LE CONTENU DE A(ESCLAVE) EST UN
<                    CARACTERE ASCI ACCESSIBLE A PARTIR DU
<                    CLAVIER D'UNE VISU, CE MODULE LE MET
<                    CARACTERE D'ABORT, SUIVANT :
<
<                    BITS4-7 : ILS DONNENT LE 'NVP' AUQUEL EST
<                              ASSIGNE LA VISU DONT ON DESIRE
<                              MODIFIER DES PARAMETRES ; S'ILS
<                              SONT A '0, ALORS ON UTILISE LA
<                              VISU IN/OUT.
<
<                    1- (A(ESCLAV))=CARACTERE ASCI : IL DONNE
<                    ALORS LE CARACTERE D'ABORT COURANT,
<                    (SI CELUI-CI EST NUL, ON PREND 'KALTM'...)
<
<                    2- BIT0=1 ET BIT1=K DANS A(ESCLAVE) :
<                            TESTO(VISU)<--(BITS2-15(A(ESCLAVE))),
<
<                    3- BIT0=BIT1=1 DANS A(ESCLAVE) :
<                            INEXEX(VISU)<--(BITS2-15(A(ESCLAVE))),
<
<
XXALT0:: VAL         K               < =0 : ON CHANGE LE CARACTERE 'CARALT',
                                     < =1 : VOIR ALORS LE BIT 'XXALT1'...
         IF          XXALT0-BITSIG,,XEIF%,
         IF          ATTENTION : LES TESTS SUIVANTS SONT MAUVAIS !!!
XEIF%:   VAL         ENDIF
XXALT1:: VAL         1               < =0 : MODIFICATION DE 'TESTO',
                                     < =1 : MODIFICATION DE 'INEXEX'.
XXALTC:: VAL         MOCD            < ARGUMENT ('CARALT', TEMPO,...).
XXALTN:: VAL         '0F00           < 'NVP' AUQUEL EST ASSIGNEE LA VISU
                                     < DESIREE.
RECALT:  EQU         $
         JAL         Z893            < DEMANDE DE MODIFICATION DU
                                     < DETECTEUR DE TIME OUT VISU.
         CPI         KALTM           < EST-CE LE CODE DU 'ALT-MODE' ???
         JE          Z893            < OUI, C'EST BON.
         CPI         ALTMAX          < SINON, VALIDATION DU CARACTERE
                                     < DEMANDE PAR RAPPORT AU CODE
                                     < DE LA 1ERE MINUSCULE ASCI.
         JG          Z890            < ERREUR : CARACTERE INACCESSIBLE!!
Z893:    EQU         $
XWOR%7:  VAL         XXALTN=K
XWOR%7:  VAL         -XWOR%7         < POUR FAIRE UN DECALAGE A DROITE...
         SLRS        -XWOR%7
         ANDI        XXALTN>XWOR%7   < (A)=NVP DE LA VISU A MODIFIER...
         JAE         Z893X           < SI L'ON EST EN TIME-SHARING, C'EST
                                     < LA VISU IN/OUT QUI SERA UTILISEE.
         CPI         NOCMO*LTASGN    < VALIDATION DU NVP...
         JGE         Z890            < ERREUR, IL N'EXISTE PAS...
         LR          A,X             < (X)=NVP AUQUEL LA VISU EST ASSIGNEE.
         LBY         &TASSGN-DCTESC,W  < (A)=NSP PRESUME DE LA VISU DESIREE.
         CPI         NSPVI0          < EST-CE UNE VISU ???
         JL          Z890            < NON, ERREUR...
         CPI         NSPVIN          < EST-CE UNE VISU ???
         JG          Z890            < NON, ERREUR...
         JMP         Z893Y           < OK, (A)=NSP DE LA VISU DESIREE.
Z893X:   EQU         $               < CAS OU IN/OUT EST DEMANDE...
         BSR         ACHKIN          < TEST DU MODE DE L'UTILISATEUR,
                                     < EN TESTANT NSPIN PAR RAPPORT
                                     < A NSPOUT, ET EN RENVOYANT :
                                     < (A)=NSPIN.
         JNE         Z1950           < VERS LA SIMULATION D'UNE FAUSSE
                                     < IT D'HORLOGE, PUIS LA SORTIE OK.
                                     < LA DEMANDE EST RENDUE INEFFECTIVE
                                     < CAR L'UTILISATEUR N'EST PAS SUR
                                     < UNE CONSOLE DU TEMPS PARTAGE...
<
< OK, EXECUTION DE CE QUI EST DEMANDE :
<
Z893Y:   EQU         $
         LR          A,X             < (X)=NSPIN DE LA CONSOLE.
         USE         L,DCT0
         PSR         L,W             < SAVE @DCT-RECOVERY.
         LR          L,W             < W BASE LA DCT DE 'TH0'...
         USE         W,LOCTH0+DEPL0
         BSR         ACADCT          < RENVOIE : (L)=@DCT(NSPIN).
         LA          &APLH0          < (A)=A(ESCLAVE)
         JAL         Z1600           < DEMANDE SUR LE TIME OUT VISU.
<
< CHANGEMENT DU CARACTERE D'ABORT COURANT :
<
         JANE        Z893XY          < OK, CARACTERE NON NUL...
         LAI         KALTM           < SI LE CARACTERE EST NUL, ON REPREND
                                     < L'ETAT INITIAL 'KALTM'...
Z893XY:  EQU         $
         STA         VAR+CARALT      < (A) EST UN CODE ASCI ACCESSIBLE.
         LXI         FIVALT
         LA          &VISOTO         < (A)=ETAT SUITE A UN "ALT-MODE",
         CP          ETAT1           < L'ETAT COURANT DE LA VISU NE SERAIT-IL
                                     < PAS CELUI QUI SUIT LA RECEPTION D'UN
                                     < PREMIER "ALT-MODE" ???
         JNE         Z1601           < NON, VERS LES RESTAURATION NORMALES...
         PLR         L,W             < OUI, IL Y A DONC UN "ALT-MODE" EN COURS
                                     < DE TRAITEMENT (ATTENTE DU SECOND...),
         JMP         Z890            < ON REFUSE LE CHANGEMENT DE 'CARALT', ET
                                     < ON FAIT UNE VRAIE TRAPPE ; EN EFFET, LE
                                     < RISQUE EST LE SUIVANT : UN PREMIER "ALT-
                                     < MODE" EST RECU, ET PENDANT LA PERIODE
                                     < D'ATTENTE D'UN EVENTUEL DEUXIEME "ALT-
                                     < MODE", LE PROGRAMME UTILISATEUR, QUI
                                     < LUI CONTINU A TOURNER (JUSQU'A EPUISE-
                                     < MENT DE LA TEMPORISATION) EMET UNE DEMAN-
                                     < DE CHANGEMENT DE 'CARALT', MAIS IL EST
                                     < TROP TARD !!!
<
< CHANGEMENT DU DETECTEUR DE TIME-OUT DE LA VISU, OU
< DE L'AUTORISATEUR/INHIBITEUR DES EXPANSIONS/EXTENSIONS
< DE SA VISU :
<
Z1600:   EQU         $
         TBT         XXALT1          < DISCRIMINATION TESTO/INEXEX.
         ANDI        XXALTC          < ON NE GARDE QUE L'ESSENTIEL.
         JC          Z1901           < BIT1=1 : CAS INEXEX.
         CPI         W               < EST-CE LA FATIDIQUE VALEUR 'W' ???
         JE          Z1601           < OUI, LA FONCTION EST CONSIDEREE COMME
                                     < INEFFECTIVE, CE QUI PERMET AU PASSAGE
                                     < DE PREVOIR UNE EXTENSION ULTERIEURE !!!
         STA         TESTO           < MISE EN PLACE DANS TESTO (REGISTRE
                                     < SLO DE LA DCT(NSP)) DE LA VALEUR
                                     < INITIALE DU DETECTEUR DE
                                     < TIME OUT.
                                     < (CELUI-CI POUVANT ETRE NUL)
<
< RESTAURATIONS ET SORTIE :
<
Z1601:   EQU         $
         PLR         L,W             < RESTAURE : (L)=@DCT-RECOVERY.
         JMP         Z1950           < VERS LA SIMULATION D'UNE FAUSSE
                                     < IT D'HORLOGE, PUIS LA SORTIE OK.
<
< CHANGEMENT DE INEXEX :
<
Z1901:   EQU         $
         STA         VAR+INEXEX      < MISE EN PLACE DE INEXEX,
                                     < CELUI-CI POUVANT ETRE NUL.
         JMP         Z1601           < VERS LA SORTIE...
<
< TRAITEMENT DES ERREURS DE RECALT ET DE RECMST :
<
Z890:    EQU         $
         USE         L,LOCTH0+DEPL0
         USE         W,DEM0
         BR          AZ401           < VERS UNE VRAIE TRAPPE ('1E05) !!!
         PAGE
<
<
<        C H A N G E M E N T   D E   P R E S C  :
<
<
<        ARGUMENT :
<                    A>=K : (A) DONNE LE PRESC DE RETOUR A LA SUITE
<                           D'UN ALT-MODE SOLITAIRE,
<                    A<0 : INDIQUE QUE LES ALT-MODES SOLITAIRES DOIVENT
<                          ETRE IGNORES PAR LE SYSTEME...
<
<
<        NOTA :
<                      LE CHANGEMENT DE PRESC EST FAIT SANS
<                    VERIFICATIONS (D'INCLUSION DANS
<                    L'INTERVALLE SLO-SLE) D'UNE PART
<                    PARCEQU'IL N'Y A PAS LA PLACE D'INSERER
<                    CETTE VALIDATION, ET D'AUTRE PART
<                    PARCEQUE LE BRANCHEMENT VERS UNE
<                    ADRESSE EXTERIEURE A SLO-SLE EN MODE
<                    ESCLAVE PROVOQUERA UNE TRAPPE !!!
<
<
RECPRE:  EQU         $
         STA         PRESC-DCTESC,W    < QUE L'ON MET DANS LE PRESC
                                       < SANS VERIFICATIONS !!!
<
<
<        S I M U L A T I O N   D ' U N E   I T   D ' H O R L O G E  :
<
<
<        FONCTION :
<                      CE MODULE PERMET APRES CHAQUE 'ACTD'
<                    DE FONCTION ESCLAVE, DE FAIRE CROIRE
<                    AU SYSTEME QU'UNE EXPIRATION DU QUANTUM
<                    DE L'ESCLAVE DEMANDEUR EST APPARUE,
<                    ET AINSI DE LUI FAIRE PERDRE LA
<                    MAIN, ET AINSI NE PAS RIQUER DE FREINER
<                    LE SYSTEME...
<                      CETTE SIMULATION NE SERA FAITE
<                    QUE SI LE MASQUE IM=Q8000 (AUCUNE IT MASQUEE),
<                    RAPPEL : LE BIT0 DE IM N'A RIEN A VOIR AVEC LES IT...
<                    TOT CECI N'A DE CONSEQUENCES QU'EN FIN DE TACHE 0
<                    CAR DANS LA TACHE 0 ON A IOM=IPM=1 !!!
<
<
<
Z1950:   EQU         $
         USE         L,DCT0
         PSR         L               < SAVE (L)=ADRESSE LOCTH0
         LXI         NSPHOR          < (X)=NSP(HDLHOR).
         BSR         ACADCT          < RENVOIE : (L)=@DCT-HORLOGE.
         BSR         ABETA2          < RENVOIE : (A)=BETA(SIT(HDLHOR)).
<
<        NOTA :
<                      BETA(SIT(HORLOGE)) PEUT ETRE
<                    POSITIF OU NUL A CE MOMENT ; EN
<                    EFFET CE PHENOMENE RARE CORRESPOND
<                    AU CAS OU L'HORLOGE, BIEN QUE PLUS
<                    PRIORITAIRE QUE LES UTILISATEURS
<                    EST EN ATTENTE D'UNE FIN DE SERVICE
<                    D'ENTREES-SORTIES PAR EXEMPLE...
<
         JAGE        Z237XL          < ET BIEN, SAUTER LA MODIFICATION
                                     < DE SON REGISTRE 'A' QUAND 'HDLHOR'
                                     < N'EST PAS SUR SON 'SIT'...
         STZ         RA+XXPSTD,L
         DC          RA+XXPSTD,L     < A(HDLHOR)=-1 : AINSI HDLOR
                                     < EST AVERTI QUE C'EST UNE
                                     < FAUSSE IT QUI EST MONTEE, ET
                                     < QU'IL N'A PAS DE TEMPS A
                                     < DECOMPTER.
         LAD         SIT
         BSR         ARLSE           < FAUSSE IT D'HORLOGE
Z237XL:  EQU         $
         PLR         L               < RESTAURE (L)=ADRESSE LOCTH0
         USE         L,LOCTH0+DEPL0
Z237X1:  EQU         $
         JMP         Z237              < VERS LA SORTIE IMMEDIATE
                                       < DU RECOVERY.
         PAGE
<
<
<        E X E C U T I O N   E N   M O D E   M A I T R E   D ' U N
<        S O U S - P R O G R A M M E   S O U S   : S Y S  :
<
<
<        FONCTION :
<                      CET ACTD ESCLAVE EST EXTREMEMENT
<                    DANGEREUX A UTILISER ; C'EST POURQUOI
<                    IL EST RESERVE A :SYS. IL PERMET
<                    D'EXECUTER UN S/P DONT L'ADRESSE RELATIVE
<                    EST DANS A(ESCLAVE) EN MODE MAITRE ;
<                    AINSI PAR EXEMPLE !GE POURRA REGENERE
<                    LES PROCESSEURS DE BASE DE CMS4 EN
<                    STAND-ALONE...
<
<
<        NOTA :
<                      CET 'ACTD' EST INTERDIT A ":SYS"
<                    LORSQUE LE BIT 'MEMXXX' DE 'MEMV'
<                    EST A '0 !!!
<
<
<        A T T E N T I O N  :
<                      AUCUNE VERIFICATION N'EST FAITE QUANT
<                    AU CONTENU DE A ; EN EFFET CELA SERAIT
<                    ILLUSOIRE ETANT DONNE QUE L'ON NE
<                    PEUT VALIDER AUSSI CE QUE FERA LE S/P !!!!
<
<
<        ARGUMENT :
<                    (C)=ADRESSE COMMON(CMS5),
<                    (W)=ADRESSE DCT(ESCLAVE).
<
<
RECMST:  EQU         $
         BSR         ASIPST          < RECONSTITUTION DE 'PSTESC' ; EN EFFET
                                     < POUR FACILITER LA PROGRAMMATION DES
                                     < SOUS-PROGRAMMES MAITRES, ON FAIT COMME
                                     < SI LE CHANGEMENT DE CONTEXTE ENTRE
                                     < LE PROGRAMME UTILISATEUR, ET 'TH0'
                                     < N'ETAIT PAS PARTIEL...
         BSR         ADOWN           < MAIS OU EST L'ESCLAVE ???
         JE          Z237X1          < EN HAUT, ON RESSORT DONC IMMEDIATEMENT
                                     < ET LORSQU'IL SERA EN BAS, NON REVIENDRA
                                     < ICI...
         PSR         A               < IL CONTIENT A(ESCLAVE) C-A-D
                                     < ADRESSE DU S/P A EXECUTER
         LXI         TH0SLO          < RELATIVE A SLO(ESCLAVE)
         LA          &AXPLH0         < ACCES AU SLO(ESCLAVE)
         BSR         APDADR          < QU'ON MET EN MOTS
         PLR         X
         ADR         X,A             < ABSOLUTISATION DE L'ADRESSE
                                     < DU SOUS-PROGRAMME A L'AIDE
                                     < DE SLO(ESCLAVE).
         STA         ASPMST          < ON RANGE L'ADRESSE ABSOLUE A
                                     < PRIORI DANS ASPMST.
<
< VALIDATION DE L'ACN DU DEMANDEUR :
<
         LA          ACNESC-DCTESC,W
         CP          ACNSYS          < EST-CE :SYS ???
         JNE         Z890            < NON : REFUSE, ON VA RENVOYER
                                     < UNE VRAIE TRAPPE ('1E05) !!!!
         LA          ACNESC-DCTESC+U,W
         CP          ACNSYS+U        < EST-CE :SYS ????
         JNE         Z890            < NON REGUSE...
                                     < VERS UNE VRAIE TRAPPE ('1E05) !!!
         LA          MEMV
         TBT         MEMXXX          < ET ":SYS" ALORS ???
         JNC         Z890            < IL N'Y A PAS DROIT NON PLUS !!!
<
< CAS D'UN DEMANDEUR SOUS :SYS :
<
         LA          PSTESC-DCTESC+RSLO,W < (A)=(SLO).
         PSR         A,C,L,W
         BSR         APDADR
         STA         PSTESC-DCTESC+RSLO,W < COMPATIBILITE AVEC T1600; SI 'INI'
                                          < AU COURS DU PROG ESCLAVE EN
                                          < MODE MAITRE,ALORS L'ESCLAVE
                                          < TRAPPERA CAR ON AURA
                                          < SLO > SLE !!OK
         BSR         ASPMST          < VERS LE SOUS-PROGRAMME, QUI
                                     < EST, IL FAUT LE NOTER RESIDENT
                                     < EN MEMOIRE (CF. L'EXECUTION
                                     < DES ACTD).
         PLR         A,C,L,W
         STA         PSTESC-DCTESC+RSLO,W < RESTAURATION INUTILE DE 'SLO'
                                          < CAR LE VRAI SLO EST DANS LA
                                          < PILE TH0!!
         JMP         Z1950           < VERS LA SIMULATION D'UNE FAUSSE
                                     < IT D'HORLOGE, PUIS LA SORTIE OK.
         PAGE
<
<
<        ' S T A R '   E S C L A V E  :
<
<
<        FONCTION :
<                      L'EXECUTION D'UN 'STAR' EN MODE
<                    ESCLAVE A POUR EFFET LORSQU'ON EST
<                    SOUS :SYS, DE RANGER LE CONTENU DE
<                    B(ESCLAVE) TRANSLATE DU CONTENU
<                    DE SLO(ESCLAVE)*16 SUR 16 BITS SI (Y(ESCLAVE))#0
<                    DANS 'DCTSY' A L'INDEX DONNE PAR
<                    (A).AND.'7FFF SI (A)=NSP+Q8000, ET
<                    DANS LA MEMOIRE D'ADRESSE (A) SINON.
<
<
<        NOTA :
<                      'STAR' EST INTERDIT A ":SYS"
<                    LORSQUE LE BIT 'MEMXXX' DE 'MEMV'
<                    EST A '0 !!!
<
<
<        ARGUMENTS :
<                    A(ESCLAVE)=ADRESSE OU NSP+Q8000,
<                    B(ESCLAVE)=CONTENU A RANGER,
<                    Y(ESCLAVE)=K SI (B) EST ABSOLU,
<                              #0 SI (B) EST A TRANSLATER DE (SLO(ESCLAVE))*16.
<                    (W)=ADRESSE DCT(ESCLAVE).
<
<
STAR:    EQU         $
         LA          ACNESC-DCTESC,W
         CP          ACNSYS          < EST-CE :SYS ???
         JNE         Z890            < NON, VERS UNE TRAPPE...
         LA          ACNESC-DCTESC+U,W
         CP          ACNSYS+U        < EST-CE :SYS ???
         JNE         Z890            < NON, VERS UNE TRAPPE...
         BSR         ASIPST          < RECONSTITUTION DE 'PSTESC' ; EN EFFET
                                     < POUR L'EXECUTION DE 'DOWN', ON FAIT COMME
                                     < SI LE CHANGEMENT DE CONTEXTE ENTRE
                                     < LE PROGRAMME UTILISATEUR, ET 'TH0'
                                     < N'ETAIT PAS PARTIEL...
<
< VILAIN TRUANDAGE (PERMETTANT
< A 'DOWN' DE FAIRE ITERER LES
< INSTRUCTIONS 'STAR' EN MEMOIRE
< HAUTE) :
<
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 :
         LAI         ALASTA          < (A)=NUMERO D'UNE PSEUDO-ALARME CORRES-
                                     <     PONDANT A LA RECEPTION D'UNE
                                     <     INSTRUCTION 'STAR',
         STBY        &AXPSTH         < QUE L'ON MET DANS 'PSTH0' POUR FACILITER
                                     < LE TRAVAIL DE 'DOWN'...
<
< OU EST L'UTILISATEUR ???
<
         BSR         ADOWN           < OU EST CE PAUVRE ESCLAVE ???
         JE          Z237X1          < EN HAUT, ON VA LE FAIRE REDESCENDRE
                                     < UNIQUEMENT A CAUSE DU MODE TRANSLATABLE !
         LA          MEMV
         TBT         MEMXXX          < ET ":SYS" ALORS ???
         JNC         Z890            < IL N'Y A PAS LE DROIT NON PLUS !!!
         LXI         TH0Y
         LA          &AXPLH0         < (A)=Y(ESCLAVE).
         JAE         RECSTA          < CAS DU MODE ABSOLU.
<
< MODE TRANSLATABLE : (Y(ESCLAVE))#0 :
<
         LXI         TH0SLO
         LA          &AXPLH0         < (A)=(SLO(ESCLAVE)).
         BSR         APDADR          < (A)=TRANSLATION A DONNER A (B).
<
< MODES ABSOLU ((Y(ESCLAVE))=K) OU TRANSLATABLE :
<
RECSTA:  EQU         $
         LXI         RH0B
         AD          &AXPLH0         < ON AJOUTE (B(ESCLAVE)).
         LR          A,B             < (B)=(B(ESCLAVE))+TRANS EVENTUELLEMENT 0.
<
< EXECUTION DU STORE :
<
         LA          &APLH0          < (A)=(A(ESCLAVE)).
         JAL         RECST2          < C'EST PEUT-ETRE UN 'NSP'...
<
< CAS DES STORES ABSOLUS :
<
RECST3:  EQU         $
         XR          A,W             < (A)=@DCTESC, (W)=@DE RANGEMENT.
         STB         O,W             < ET C'EST FAIT !??!!???!
         XR          A,W             < RESTAURE TOUT...
         JMP         Z1950           < VERS LA SIMULATION IT HORLOGE.
<
< DISCRIMINATION DES 'NSP' :
<
RECST2:  EQU         $
XWOR%1:  VAL         Q8000=K         < ACCES AU BIT0...
         RBT         NBITMO-B-XWOR%1
         CPI         NSPLST          < EST-CE UN 'NSP' ???
         JLE         RECST4          < OUI...
         LA          &APLH0          < NON, (A)=(A(ESCLAVE))=@<32K.
         JMP         RECST3          < VERS LE STORE ABSOLU...
<
< STORE DANS 'DCTSY' :
<
RECST4:  EQU         $
         LR          A,X             < (X)='NSP'...
         STB         &ADCTSY         < ET VOILA LE BOULOT...
         JMP         Z1950           < VERS LA SIMULATION D'UNE IT HORLOGE.
         PAGE
<
<
<        T R A C E / D E B U G  :
<
<
<        FONCTION DES CLEFS DU PUPITRE :
<                    CLEF0=1 : DEMANDE D'INTERVENTION,
<                    CLEF1=0 : EDITION DE LA TRACE,
<                         =1 : DEMANDE DU DEBUG SUR TTYS.
<
<
E890:    EQU         $
         PSR         A,B,X,Y
         LR          A,B             < (B)=TACHE APPELANTE DU RECOVERY.
         LA          CLESPU          < RECUPERATION DANS A DE LA
                                     < VALEUR RENTREE AU PUPITRE
                                     < RELECTURE DES CLEFS (A CAUSE
                                     < DU PLR A,Y).
         TBT         XCLEF1          < TEST DE LA CLEF1.
         JC          DEBUGX          < C'EST LE DEBUG SUR TTYS.
<
<
<        E D I T I O N   D E   L A   T R A C E   S U R   L P 1  :
<
<
         STZ         IMPTTY          < INDICATEUR IMP/TTY (=K IMP)
         LAI         MOMRW           < RESET IMPRIMANTE...
         SIO         IMPI
         LAD         IMPT
         BSR         AIMPM           < EDITION DU TITRE DE TRACE.
         BSR         AIMPLF
         LAD         IMPCAL
         BSR         AIMPM           < EDITION DE 'ACTD BY  '.
         BSR         AIMPB           < IMPRESSION DE (B)=TACHE APPELANTE.
         LAD         IMPX
         BSR         AIMPM           < EDITION DE 'X=   '.
         LR          X,B             < (B)=CAUSE DE L'APPEL.
         BSR         AIMPB           < IMPRESSION DE (B)=CAUSE DE L'APPEL.
<
< ENVOI DE LA DATE SUR LA TRACE :
<
         LXI         10
         BSR         AIMPSP          < ENVOI DE 10 'SPACE'.
         LA          IMPDAT          < (A)=ADRESSE DE LA DATE DE 'CMS5'.
         BSR         AIMPM           < ENVOI DE LA DATE SUR LA TRACE.
         BSR         AIMPRC
         BSR         AIMPLF
         LXI         1
         BSR         AIMPSP
         BSR         AIMPRC
<
< EDITION DE LA TRACE PROPREMENT DITE :
<
         LX          TRACEX          < INITIALISATION DE (X)=TRACEX.
<
<        NOTA :
<                      TRACEX DONNE LA 1ERE ENTREE LIBRE
<                    DE LA TRACE, ET DONC EN MEME TEMPS
<                    LE PLUS ANCIEN EVENEMENT MEMORISE
<                    DANS LA TRACE, C'EST DONC PAR LUI
<                    QU'IL FAUT COMMENCER.
<
E813:    EQU         $
         BSR         AIMPLF          < POSITIONNEMENT EN DEBUT
                                     < DE LIGNE SUR LP1.
         LB          &TRACE          < (B)=MOT0 DE L'ENTREE COURANTE.
         ADRI        I,X
         LA          &TRACE          < (A)=MOT1 DE L'ENTREE COURANTE.
         ADRI        I,X
         PSR         X               < SAVE INDEX COURANT DE LA TRACE.
<
< AIGUILLAGES FONCTION DE LA NATURE DE L'ENTREE :
<
         JAE         E814            < EVENEMENT 'INTERRUPTION'.
XXIDLE:: VAL         -1              < DISCRIMINATEUR DE 'IDLE'...
         CPI         XXIDLE          < EST-CE 'IDLE' ???
         JE          E815            < EVENEMENT 'IDLE'.
<
< CAS DES EVENEMENTS CHAND/HANDLERS :
<        CONVENTIONS :
<                    "("='ENTRY',
<                    ")"='RETURN'.
<
Z288:    EQU         $
         PSR         A               < SAVE MOT1 DE L'ENTREE COURANTE.
XWOR%1:  VAL         MSKNSP=K
XWOR%1:  VAL         -XWOR%1         < POUR UN DECALAGE A DROITE...
XWOR%1:  VAL         MSKNSP>XWOR%1
         LYI         XWOR%1
         SWBR        B,X             < (X)=OCTET0 DU MOT0.
         ANDR        Y,X             < (X)=BIT1-7(MOT0).
         CPZR        X
<
<        A T T E N T I O N  : DANS LE CAS DE 'HDLVID', L'EDITEUR DE
<        TRACE DONNERA DES RESULTATS INATTENDUS...
<
         JE          E818            < EVENEMENT ENTRY/RETURN CHAND.
         JMP         E821            < EVENEMENT ENTRY/RETURN
                                     < D'UN HANDLER.
<
<
<        E V E N E M E N T   I D L E  :
<
<
E815:    EQU         $
         LXI         20
         BSR         AIMPSP          < ENVOI DE 20 'SPACE'.
         LAD         IMPID
         BSR         AIMPM           < EMISSION DU MESSAGE 'IDLE '.
         BSR         AIMPB           < IMPRESSION DE (B).
         JMP         E816            < VERS LA FIN DE LIGNE.
<
<
<        E V E N E M E N T   I N T E R R U P T I O N  :
<
<
E814:    EQU         $
         LR          B,A             < (A)=SOUS-NIVEAU GENERALISE D'IT.
         CPI         X69             < EST-CE BIEN UN EVENEMENT IT ????
         LAI         K               < RESTAURE A PRIORI (A)=K.
         JG          Z288            < ET BIEN CE N'EST PAS UNE IT,
                                     < C'EST EN FAIT UN APPEL AVEC
                                     < MOT1=K (SOIT (W)=K, SOIT P=K LORS
                                     < DU MODE DE TRACE DE TOUS LES
                                     < CHANGEMENTS DE CONTEXTES).
         LXI         20
         BSR         AIMPSP          < ENVOI DE 20 'SPACE'.
         LAD         IMPIT
         BSR         AIMPM           < EMISSION DU MESSAGE 'IT'.
<
<        ON A ICI :
<                    (B)=NIVEAU GENERALISE D'IT.
<
         BSR         AIMPB           < ENVOI DE (B)=NIVEAU GENERALOSE IT.
         LXI         2
         BSR         AIMPSP          < ENVOI DE 2 'SPACE'.
         PSR         B,L
         TBT         NBITMO+XXSNAP   < TEST DU BIT DE DUMP ???
         JNC         E886X           < NON...
         LBI         XNDMP           < OUI, CETTE DEMANDE ET CARACTERISEE
                                     < PAR :
                                     < 1 - MOT1=0,
                                     < 2 - BIT0(MOT0)=1.
E886X:   EQU         $
         LRM         L
         WORD        DCTIT           < 'L' BASE LA LISTE DES INTERRUPTIONS :
         ADR         B,L             < 'L' BASE MAINTENANT L'ENTREE RELAYEE
                                     < PAR L'EVENEMENT COURANT DE LA TRACE...
         LA          O,L             < (A)='NSP', OU ADRESSE DE NOM ASSOCIE AU
                                     <     NIVEAU GENERALISE 'B'...
         JAGE        E886X1          < OK...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      FAIRE ATTENTION CAR ON GENERE PAR
<                    LA SUITE UN RELAI INDEXE SUR LE NOM...
<
E886X1:  EQU         $
         JAL         E886X2          < ON CONSIDERE QUE C'EST UNE ADRESSE (!??!)

         CPI         NSPLST          < EST-CE UN 'NSP' ???
         JG          E886X2          < NON, UNE ADRESSE...
<
< CAS DES 'NSP' ASSOCIES AU NIVEAU GENERALISE :
<
         LR          A,X             < (X)='NSP',
         BSR         ACADCT          < (A)=L=ADRESSE DE LA 'DCT' ASSOCIEE.
         ADRI        HNAME-DCT0,A    < (A)=ADRESSE DU NOM DE LA TACHE...
<
< ICI, (A)=ADRESSE D'UN NOM :
<
E886X2:  EQU         $
         PLR         B,L
         BSR         AIMPM           < EMISSION DU NOM DU PERIPHERIQUE.
E816:    EQU         $
         BSR         AIMPRC          < FERMETURE DE LA LIGNE.
         PLR         A               < RESTAURE L'INDEX COURANT DE
                                     < LA TRACE (X) DANS A.
         ANDI        UTRACE*LTRACE-N < PROGRESSION DE L'INDEX MODULO LA
                                     < LONGUEUR DE LA TRACE.
         CP          TRACEX          < A-T'ON BOUCLE LA PILE CIRCULAIRE
                                     < DE TRACE.
         JE          E817            < OUI, L'EDITION EST TERMINEE.
         LR          A,X             < (X)=INDEX COURANT DE TRACE.
         JMP         E813            < ACCES A L'ENTREE SUIVANTE.
<
< FIN DE TRACE :
<
E817:    EQU         $
         BSR         ADUMP           < DUMP 32 K-MOTS TANT QUE LA CLEF0
                                     < RESTE A 1 APRES LA TRACE.
         PLR         A,B,X,Y
         BR          AE812           < RETOUR AU BLOCAGE DU RECOVERY.
<
<
<        E V E N E M E N T   E N T R Y / R E T U R N   H A N D L E R  :
<
<
E821:    EQU         $
         PSR         X               < SAVE LE NSP DU HANDLER EN CAUSE.
         LXI         8
         BSR         AIMPSP          < EDITION DE 8 'SPACE'.
         LAI         KPG             < 'ENTRY' A PRIORI.
         TBT         NBITMO+TERMIN   < TEST DU BIT 11 DU MOT0,
                                     < C'EST-A-DIRE LE BIT 'TERMIN'.
         ADCR        A               < (A)="(" POUR 'ENTRY',
                                     < (A)=")" POUR UN 'RETURN'.
         PSR         A
         SWBR        B,A
XWOR%1:  VAL         MOCD)MFFFF=K
XWOR%1:  VAL         NBITMO-XWOR%1   < POUR CADRER 'MOCD' A GAUCHE...
XWOR%2:  VAL         COSWBR=FMASK(K?MOCD=FCINST
XWOR%2:  VAL         COSARS?XWOR%1=FMASK(K?XWOR%2=FCINST
         SARS        XWOR%1          < ON ETEND AINSI L'ANCIEN BIT8(B).
         CPI         XWOR%2          < OCTET1(B)='FF ???
         PLR         A
         JNE         E821X           < NON...
         ADRI        KSTAR-KPD,A     < OUI : A <-- "*" : IL S'AGISSAIT
                                     < D'UN CHANGEMENT DE CONTEXTE.
E821X:   EQU         $
         BSR         AIMPK           < IMPRESSION DE (A).
         PLR         X               < RESTAURE (X)=NSP DU HANDLER.
E819:    EQU         $
<
<        ON A ICI :
<                    (X)=NSP DU HANDLER EN CAUSE.
<
         LAD         IMPHDL
         BSR         AIMPM           < EMISSION DE 'HDL'.
         LA          &ADCTSY         < (A)=@DCT-NSP(X) (X=NSP).
X37::    VAL         HNAME-DCT0
         JANE        Z270            < (A)=@DCT(NSP(X)).
<
< CAS OU L'@DCT(NSP(X)) EST NULLE : C'EST
< LE CAS D'UN HANDLER DE FICHIER A L'ETAT
< 'CLOSE' OU D'UN UTILISATEUR NON ACTIF :
<
         LAD         IMPNUL-X37
Z270:    EQU         $
         ADRI        X37,A           < (A)=@NOM DU HANDLER (OU NOM 'BIDON')
         BSR         AIMPM           < EDITION DU NOM DU HANDLER.
         LXI         4
         BSR         AIMPSP          < EDITION DE 4 'SPACE'.
         BSR         AIMPB           < IMPRESSION DE (B)=MOT0.
         LAI         KSLASH
         BSR         AIMPK           < IMPRESSION DE (A).
         PLR         B               < RESTAURE MOT1 (A) DANS B.
         BSR         AIMPB           < EDITION DE (B)=MOT1.
         JMP         E816            < PASSAGE A L'ENTREE SUIVANTE.
<
<
<        E N T R Y / R E T U R N   D A N S   C H A N D  :
<
<
E818:    EQU         $
         LAI         KPG             < 'ENTRY' A PRIORI.
XWOR%1:  VAL         Q8000=K         < ACCES AU BIT0...
         TBT         NBITAB-B-XWOR%1 < TEST DU BIT0 DU MOT0...
         ADCR        A               < (A)="(" OU ")".
         BSR         AIMPK           < IMPRESSION DE (A).
         LAD         IMPCH
         BSR         AIMPM           < EMISSION DU MESSGE 'CHAND '.
         LAD         IMPV
         BSR         AIMPM           < EMMISION DE "-->".
         LR          B,A             < (A)=MOT0 DE L'ENTREE.
XWOR%1:  VAL         MSKNSP=K
XWOR%1:  VAL         -XWOR%1         < POUR UN DECALAGE A DROITE.
XWOR%1:  VAL         MSKNSP>XWOR%1
         ANDI        XWOR%1          < CALCUL DU NSP DU HANDLER APPELE.
         LR          A,X             < (X)=NSP HDL APPELE.
         JMP         E819            < VERS L'EDITION DES MOT0 & 1.
         PAGE
<
<
<        M O D U L E   D E   D E B U G   S U R   T T Y S  :
<
<
<        FONCTION :
<                      LE MODULE DE 'DEBUG' DE 'TH0'
<                    PERMET D'EXPLORER ET MODIFIER LE
<                    CONTENU DE LA MEMOIRE MAITRE DE
<                    'CMS5' PAR L'INTERMEDIAIRE DE SA
<                    'TTYS' ; DE PLUS, SI SA 'TTYS'
<                    SUPPORTE UN LECTEUR DE RUBAN, ON
<                    PEUT PAR CE MOYEN INTRODUIRE DES
<                    PATCHES...
<
<
<        UTILISATION :
<        ( DESIGNANT UN NOMBRE HEXA-DECIMAL)
<
<                     : MODIFICATION ADRESSE COURANTE
<                             TRAITEE EN MEMOIRE (INITIALISATION 0),
<                    * : L'ADRESSE COURANTE RECOIT (SI VALIDE) LE
<                        MOT ACCEDE EN MEMOIRE PAR >.
<                    +/- : L'ADRESSE COURANTE PROGRESSE/REGRESSE
<                          D'UNE VALEUR EGALE AU MOT COURANT.
<                    . :
<                    > : IMPRESSION DU CONTENU DU MOT D'ADRESSE
<                        L'ADRESSE COURANTE.
<                    , :
<                    < : MISE DU NBRE COURANT A L'ADRESSE MEMOIRE
<                        L'ADRESSE COURANTE.
<                    = : IMPRESSION DE L'ADRESSE COURANTE SUIVIE
<                        DU NBRE COURANT.
<                    / : CLEAR DU NBRE COURANT.
<                    : : INVERSION DU CLAVIER/LECTEUR DE TTYS.
<                    ? : INVERSION DE LA FILE RSTF (K/-1).
<                    & : MISE DE L'ADRESSE COURANTE DE LA ZONE
<                        DE PATCH DANS LE NBRE COURANT.
<                                    NC<--(AZPTCH).
<                    ( : MISE DE L'ADRESSE COURANTE DE LA ZONE DE
<                        PATCH DANS L'ADRESSE COURANTE.
<                                    DBGADC<--(AZPTCH).
<                    ) : MISE A JOUR DE LHADRESSE COURANTE DE LA ZONE
<                        DE PATCH AVEC L'ADRESSE COURANTE.
<                                    AZPTCH<--(DGBADC).
<                    ; : SORTIE DU DEBUG (RETOUR AU RECOVERY).
<
<
<        REMARQUE IMPORTANTE :
<                    ',' ET '<' CORRESPONDENT A LA
<                    MEME TOUCHE DU CLAVIER TTYS,
<                    IL EN EST DE MEME DE '>' ET '.'.
<
<
<        AFFICHAGE PUPITRE :
<                      EN PERMANENCE, ON VISUALISE LE
<                    CONTENU DU MOT MEMOIRE COURANT
<                    (EDITE OU MODIFIE), OU L'ADRESSE
<                    COURANTE, LORSQUE CELLE-CI EST
<                    MODIFIEE EXPLICITEMENT.
<
<        NOTE D'UTILISATION :
<                      POUR VISUALISER L'ADRESSE COURANTE
<                    IL SUFFIT DE FRAPPER PAR EXEMPLE
<                    LA COMMANDE '-' SEULE.
<
<
<        GENERATION DE CHAINAGES DANS UN PATCH : EXEMPLE :
<        WORD        1;$+2;2;3;...   SE PATCHERA :
<                    1,/3+)/2-&,2,3,...
<
<
<        INCREMENTATION AUTOMATIQUE DE L'ADRESSE COURANTE :
<                      L'ADRESSE COURANTE PROGRESSE AUTOMATI-
<                    QUEMENT DE +1 LORSQUE 2 COMMANDES IDENTIQUES
<                    (D'EDITION OU DE MODIFICATION MEMOIRE)
<                    SE SUIVENT (PERMET DONC D'EDITER UN MOT
<                    MEMOIRE ET ENSUITE DE LE MODIFIER DANS
<                    LA FOULEE).
<
<
<        A T T E N T I O N  :
<                      APRES CHAQUE USAGE VALIDE DU
<                    NOMBRE COURANT, CELUI-CI EST
<                    REMIS A 0...
<
<
DEBUGX:  EQU         $
<
< BASCULEMENT ENTRE 'LP1'
< ET 'TTYS', ET INITIALISATION :
<
         BSR         ABASK           < BASCULEMENT...
         LAI         EXIST
         IF          EXIST-K,XEIF%,,XEIF%
         IF          ATTENTION : IL FAUT QUE (A)#0 !!!
XEIF%:   VAL         ENDIF
         STA         IMPTTY          < IMPTTY #0 SIGNIFIE TTY (POUR
                                     < LES S/P COMMUNS A 'LP1' ET 'TTYS').
<
< REINITIALISATION DE 'TTYS',
< ET MISE SOUS-TENSION AVEC
< ATTENTE DE FIN D'OPERATION :
<
XTTYE1:: VAL         9               < PREMIER BIT D'ACTIVATION DE L'ECHO,
XTTYE2:: VAL         10              < DEUXIEME BIT D'ECHO...
XTTYR::  VAL         11              < BIT DE 'RESET'...
XWOR%1:  VAL         COSBT?XTTYE1=FMASK(K=FCINST
XWOR%1:  VAL         COSBT?XTTYE2=FMASK(K?XWOR%1=FCINST
XWOR%1:  VAL         COSBT?XTTYR=FMASK(K?XWOR%1=FCINST
         LAI         XWOR%1          < RESET TTY ET ECHO
         SIO         IMPI
         LXI         20              < 20 CARACTERES
         LAI         KNUL            <               'NULL'...
E897:    EQU         $
         BSR         AIMPK           < QUE L'ON IMPRIME...
         JDX         E897
         LA          RINI            < LA DATE A-T'ELLE DEJA ETE INI-
                                     < TIALISEE ???
         JAGE        E906            < OUI, ON NE LE REFAIT PAS...
<
<
<        I N I T I A L I S A T I O N   D E   L A   D A T E  :
<
<
         IC          RINI            < RINI=K : INIT FAITE, MAIS
                                     < DATE NON CONVERTIE EN ASCI.
         LAD         DATM
         BSR         AIMPM           < ENVOI DU MESSAGE 'DATE?'.
         LYI         LOTIME+IJIJDX   < POUR TEST DE FIN D'ENTREE DE
                                     < LA DATE.
E919:    EQU         $
         LXI         IJIJDX          < POUR ACCES A DATHOR A PERTIR
                                     < DES ANNEES.
E908:    EQU         $
         LBY         &INTDAT
         BSR         AIMPK           < ENVOI D'UN INDICATIF PRECISANT
                                     < LA COMPOSANTE DE LA DATE/HEURE.
         PSR         X               < SAVE INDEX DE DATHOR.
         LXI         2               < 2 CARACTERES A LIRE.
         LAI         K               < INITIALISATION DE LA VALEUR
                                     < BINAIRE DU NBRE A LIRE.
E907:    EQU         $
         MP          DIX             < CALCUL EN BASE 10.
                                     < (B)=VALEUR COURANTE DU NBRE A LIRE.
         BSR         ALIRK           < LECTURE 1 CARACTERE DANS A.
         ADRI        -HZERO,A        < CONVERSION NUMERIQUE.
         JAL         E909            < ERREUR.
         CPI         BASE10-Z
         JG          E909
<
< CAS OU L'ON A LU UN
< BON CHIFFRE DECIMAL :
<
         ADR         B,A             < CUMUL.
         JDX         E907            < LECTURE CHIFFRE SUIVANT.
         PLR         X               < RESTAURE (X)=INDEX DE DATHOR.
         LR          A,B             < (B)=NBRE LU SUR TTYS.
         JAG         E907X1          < OK, LE NOMBRE LU SUR 2 CHIFFRES EST
                                     < NON NUL...
         LR          X,A             < SI LE NOMBRE LU EST NUL, VOYONS DE QUELLE
                                     < COMPOSANTE IL S'AGIT :
         CPI         XXHMOI+IJIJDX   < EST-CE LES MOIS ???
         JE          E910            < OUI, LE MOIS 'ZERO' N'EXISTE PAS !!!
         CPI         XXHJOU+IJIJDX   < EST-CE LES JOURS ???
         JE          E910            < OUI, LE JOUR 'ZERO' N'EXISTE PAS !!!
E907X1:  EQU         $               < OK, LA BORNE INFERIEURE EST VALIDEE...
         LA          &DATINI         < (A)=ENTREE COURANTE DE DATHOR.
         SLRS        XXMAXT=K        < (A)=MAX ATTENDU POUR LA VALEUR LUE.
         XR          A,X             < (A)=NUMERO COMPOSANTE COURANTE
                                     <     DE LA DATE.
         CPI         XXHJOU+IJIJDX   < EN EST-ON AUX JOURS ?????
         XR          A,X             < RESTAURE A & X.
         JNE         Z971            < NON, ON CONNAIT DONC LE MAX...
<
< CAS DES JOURS :
<
         PSR         X               < SAVE X.
         LXI         XXHMOI+IJIJDX*NOCMO+XXDX
                                     < INDEX D'ACCES AU MOIS COURANT.
         LBY         &DATINI         < (A)=MOIS COURANT.
         LR          A,X             < (X)=MOIS COURANT.
         CPI         FEVRIE          < EST-CE LE MOIS DE FEVRIER ???
         JNE         Z971Y           < NON...
         LXI         XXHANE+IJIJDX*NOCMO+XXDX
         LBY         &DATINI         < (A)=ANNEE COURANTE,
XWOR%1:  VAL         BISSEX=K
         SLLS        NBITMO-XWOR%1   < TEST DE LA DIVISIBILITE PAR 'BISSEX' ???
         CPI         K               < PARCEQU'ON VA MODIFIER 'A'... L'ANNEE
                                     < COURANTE EST-ELLE BISSEXTILE ???
         LAI         FEVR29
         JE          Z971X           < OUI, (A)='FEVR29',
         LAI         FEVR28          < NON, (A)='FEVR28'.
Z971X:   EQU         $
         LXI         FEVRIE          < RESTAURE : (X)=MOIS COURANT,
         STBY        &DATMAX         < MODIFICATION DU NOMBRE DE JOURS
                                     < DU MOIS DE FEVRIER...
Z971Y:   EQU         $
         LBY         &DATMAX         < (A)=NBRE DE JOURS DU MOIS COURANT.
                                     <     (NOMBRE DE JOURS+1 !!!)
         PLR         X               < RESTAURE X.
Z971:    EQU         $
<
<        ON A ICI :
<                    (A)=MAX ATTENDU POUR LA VALEUR LUE.
<
         CPR         A,B             < VALIDATION DU NBRE LU.
         JGE         E910            < VALEUR ERRONNEE.
<
< CAS OU LE NOMBRE LU
< EST CORRECT :
<
         SWBR        A,A             < OCTET0(A)=MAX.
         ORR         B,A             < OCTET1(A)=NBRE LU.
         STA         &DATINI         < MAJ DE LA DATE ET DE L'HEURE
                                     < EN BINAIRE (LA CONVERSION ASCI
                                     < N'AYANT LIEU QU'A LA 1ERE IT
                                     < HORLOGE SUIVANT LE RECOVERY.
         LAI         KSTAR
         BSR         AIMPK           < ENVOI DE '*' COMME SEPARATEUR.
         ADRI        I,X             < ENTREE SUIVANTE DE DATHOR.
         CPR         X,Y             < TEST DE FIN DE PARCOUURS.
         JNE         E908            < ENTREE SUIVANTE.
<
< INITIALISATION DU COMPTEUR DE SECONDES :
<
         LR          B,Y             < (Y)=SECONDES(DATE).
         LXI         XXHHEU+IJIJDX*NOCMO+XXDX
         LBY         &DATINI         < (A)=HEURE(DATE).
         MP          DAT60           < (B)=HEURE(DATE) EN MINUTES.
         LXI         XXHMIN+IJIJDX*NOCMO+XXDX
         LBY         &DATINI         < (A)=MINUTES(DATE).
         ADR         B,A
         MP          DAT60           < CONVERSION EN SECONDES.
         ADR         Y,B
         ADCR        A               < ADDITION DE LA RETENUE EVENTUELLE.
         STA         HTIME           < INITIALISATION DU COMPTEUR
         STB         HTIMED          < JOURNALIER DES SECONDES.
<
<
<        T I T R E   D E   D E B U G  :
<
<
E906:    EQU         $
         PSR         W
         LAD         IMPTD
         BSR         AIMPM
<
< INITIALISATION DU DEBUG :
<
         STZ         DBGMC           < MOT COURANT A 0.
         STZ         DBGADC          < ADRESSE COURANTE A 0.
         STZ         DBGCP           < RAZ COMMANDE PRECEDENTE.
         LBI         K               < INITIALISATION DE B POUR LA
                                     < COMMANDE D'INDIRECTION.
<
<
<        B O U C L E   D U   D E B U G  :
<
<
DBG1:    EQU         $
         BSR         ALIRK           < LECTURE 1 CARACTERE DANS A.
<
< DECODAGE DU CARACTERE :
<
DBGC0:   VAL         DBGC0-DBGC00    < RAZ BIT DE PARITE.
         ADRI        -DBGC0,A        < TRANSLATION PAR RAPPORT A LA
                                     < 1ERE COMMANDE RECONNUE.
         JAL         E892            < CARACTERE NON RECONNU.
         CPI         HF-DBGC0
         JG          E892            < CARACTERE NON RECONNU.
         LR          A,X             < (X)=CARACTERE TRANSLATE DE '2A.
         LA          &DBGVAL         < CODAGE DU CARACTERE.
         JAL         Z660X           < COMMANDE
<
<        ON A ICI :
<                    (A)=UN NBRE DE 0 A 15 SI LE CARACTERE EST
<                        UN CHIFFRE HEXA,
<                    (A)=ADRESSE MODULE DE TRAITEMENT DE LA FONCTION SI LE
<                        CARACTERE EST <  ,>,@,=,:,;,*,+,-.
<                    (X)=VALEUR DU CARACTERE TRANSLATEE.
<
         CPI         BASE16-Z
         JLE         DBGAS           < C'ETAIT UN CHIFFRE HEXA,
                                     < ALLONS L'ASSEMBLER...
DBGC0:   VAL         DBGC0+DBGC00    < RESATURE BIT DE PARITE.
         CP          YBGVAL+KET-DBGC0 < ETAIT-CE "&" ???   ?
         JE          Z660            < OUI, IL EST IGNORE EN TANT
                                     < QUE COMMANDE, CAR '&' EST EN
                                     < FAIT UNE VARIABLE...
<
< TRAITEMENT DES COMMANDES :
<
Z660X:   EQU         $
         CP          DBGCP           < COMPARAISON DE LA COMMANDE
                                     < COURANTE A LA COMMANDE PRECEDENTE
         STA         DBGCP           < MAJ COMMANDE PRECDENTE.
Z660:    EQU         $
         BR          &DBGVAL         < BRANCHEMENT AU MODULE DE LA
                                     < COMMANDE.
<
<
<        S O R T I E   D U   D E B U G  :
<
<
DBGFIN:  EQU         $
         BSR         AIMPRC
         BSR         AIMPLF
<
< RE-BASCULEMENT DES ARGUMENTS
< DE 'SIO' DE 'LP1' ET 'TTYS' :
<
         BSR         ABASK
<
< RETOUR AU MODE LP1 DES ARG. DES SIO :
<
         LA          IMPC
         RBT         L               < RETOUR A LP1.
         STA         IMPC
         LA          IMPI
         RBT         L               < RETOUR A LP1.
         STA         IMPI
         PLR         W
         PLR         A,B,X,Y
         BR          AE812           < RETOUR AU BLOCAGE DU RECOVERY.
<
<
<        A S S E M B L A G E   D ' U N   N O M B R E  :
<
<
DBGAS:   EQU         $
<
<        ON A ICI :
<                    (A)=4 BITS A CONCATENER EN QUEUE DU MOT COURANT.
<
         SCRS        NBITCX          < CADRAGE A GAUCHE DANS A DES 4
                                     < BITS.
         OR          DBGMC           < CONCATENATION AU NBRE COURANT.
         SCLS        NBITCX          < CADRAGE DROIT ET CONCATENATION.
Z241:    EQU         $
         STA         DBGMC           < MISE A JOUR DU NBRE COURANT.
         JMP         DBG1            < VERS LA BOUCLE DE DEBUG.
<
<
<        N B R E   C O U R A N T <-- ( A Z P T C H )  :
<
<
DBGNCP:  EQU         $
         LA          AZPTCH
         JMP         Z241
<
<        E R R E U R   D A N S   L A   D A T E  :
<
E909:    EQU         $
         ADRI        -D,K            < RATTRAPAGE DU 'PLR X' MANQUANT.
E910:    EQU         $
         LAI         KPI
         BSR         AIMPK           < ENVOI DE '?' EN SIGNE D'ERREUR.
         JMP         E919            < ON RECOMMENCE AU DEBUT, CETTE
                                     < SOLUTION PERMET DE REPRENDRE
                                     < TOUTE LA DATE EN CAS D'ERREUR,
                                     < EN FAISANT UNE FAUTE DE
                                     < FRAPPE VOLONTAIRE...
<
<
<        M E S S A G E   D ' E R R E U R   D U   D E B U G  :
<
<
         ADRI        -D,K            < RATTRAPAGE DU RSR MANQUE.
E892:    EQU         $
         LAI         KPI             < ENVOI D'UN "?" A L'OPERATEUR.
         BSR         AIMPK
         JMP         DBG1            < RETOUR A LA BOUCLE DU DEBUG.
<
<
<        V A L I D A T I O N   D E   L ' A D R E S S E
<                    C O U R A N T E  :
<
<
<        FONCTION :
<                      CETTE ROUTINE DANS LE CAS
<                    OU 2 COMMANDES IDENTIQUES SE SUIVENT
<                    INCREMENTE L'ADRESSE COURANTE,
<                    ET ENSUITE VALIDE CELLE-CI.
<
<
DBGV:    EQU         $
         JNE         E895            < LA COMMANDE COURANTE N'EST PAS
                                     < LA MEME QUE LA COMMANDE PRECEDENTE
         IC          DBGADC          < DANS LE CAS OU 2 COMMANDES
                                     < D'EDITION (OU D'IMPRESSION)
                                     < IDENTIQUES SE SUIVENT,
                                     < L'ADRESSE COURANTE PROGRSSE DE +1
E895:    EQU         $
         LA          DBGADC          < VALIDATION DE L'ADRESSE COURNATE.
         RSR                         < OK, RETOUR.
<
<
<        I N V E R S I O N   C L A V I E R / L E C T E U R  :
<
<
DBGCLA:  EQU         DBG1            < CETTE INVERSION NE PEUT SE
                                     < FAIRE PAR UN SIO DE COMMANDE.
                                     < C'EST L'OPERATEUR QUI FERA
                                     < MANUELLEMENT LE SWITCH
                                     < CLAVIER---> RUBAN
<
<
<        C L E A R   D U   N B R E   C O U R A N T  :
<
<
DBGCL:   EQU         $
         STZ         DBGMC           < RAZ DU NBRE COURANT.
         JMP         DBG1            < RETOUR A LA BOUCLE DU DEBUGER.
<
<
<        M O D I F I C A T I O N   M E M O I R E  :
<
<
DBGST:   EQU         $
         BSR         ADBGV           < VALIDATION ET INCREMENTATION
                                     < EVENTUELLE DE L'ADRESSE COURANTE.
         LB          DBGMC           < RECUPERATION DU NBRE COURANT,
         LA          DBGADC
         LR          A,W
         STB         O,W             < NBRE COURANT QUE L'ON RANGE A
                                     < L'ADDRESSE COURANTE.
         STZ         DBGMC           < REINITIALISATION DU NBRE COURANT.
E902:    EQU         $
         LR          B,A             < POUR AFFICAHGE PUPITRE DU
                                     < CONTENU MEMOIRE COURANT.
         BSR         ASMPUO          < AFFICHAGE MOT MEMOIRE COURANT
         JMP         DBG1            < RETOUR A LA BOUCLE DE DEBUG.
<
<
<        I M P R E S S I O N   M E M O I R E  :
<
<
DBGIMP:  EQU         $
         BSR         ADBGV           < VALIDATION ET INCREMENTATION
                                     < EVENTUELLE DE L'ADRESSE COURANTE.
         LA          DBGADC
         LR          A,W
         LB          O,W             < (B)=CONTENU DU MOT MEMOIRE
                                     <     D'ADRESSE L'ADRESSE COURANTE.
         BSR         AIMPB           < IMPRESSION DE (B).
         JMP         E902            < VERS L'AFFICHAGE PUPITRE.
<
<
<        M O D I F I C A T I O N   D E
<        L ' A D R E S S E   C O U R A N T E  :
<
<
DBGADR:  EQU         $
         LA          DBGMC           < ACCES AU NBRE COURANT.
E899:    EQU         $               < ENTREE AVEC RAZ DE DBGMC.
         STZ         DBGMC           < REINITIALISATION DU NBRE
                                     < COURANT.
E898:    EQU         $               < ENTREE SANS RAZ DE DBGMC.
<
<        ON A ICI :
<                    (A)=LA NOUVELLE ADRESSE COURANTE (SI VALIDE...).
<
Z240:    EQU         $
         STA         DBGADC          < OK, MAJ DE L'ADRESSE COURANTE.
         BSR         ASMPUO          < AFFICHAGE NOUVELLE ADRESSE
                                     < COURANTE
         JMP         DBG1            < RETOUR A LA BOUCLE DE DEBUG.
<
<
<        A Z P T C H <-- ( D B G A D C )  :
<
<
DBGMAP:  EQU         $
         LA          DBGADC
         CP          LZPTCH          < COMPARAISON A LA LIMITE SUP.
                                     < DE LA ZONE DE PATCH DU SYSTEME.
         JGE         E892            < 'OVERPATCH' : DGBADC REFUSEE.
         STA         AZPTCH          < OK, MAJ DE AZPTCH.
         JMP         DBG1            < VERS LA BOUCLE DU DEBUG.
<
<
<        D B G A D C <-- ( A Z P T C H )  :
<
<
DBGAP:   EQU         $
         LA          AZPTCH
         CP          LZPTCH          < VALIDATION.
         JL          Z240            < OK, MAJ DE DBGADC.
         JMP         E892            < ERREUR : OVERPATCH.
<
<
<        A D R E S S A G E   I N D I R E C T  :
<
<
DBGIND:  EQU         $
         LR          B,A             < B CONTENAIT LE MOT MEMOIRE
                                     < PRECEDEMMENT TRAITE.
         JMP         E898            < VERS DBGADR, SANS MODIFICATION
                                     < DU NBRE COURANT DBGMC.
<
<
<        P R O G R E S S I O N   D E   L ' A D R E S S E
<                    C O U R A N T E  :
<
<
DBGP:    EQU         $
         LA          DBGADC
         AD          DBGMC           < ON FAIT :
                                     < DBGADC<--(DBGADC)+(DBGMC).
         JMP         E899            < VERS DBGADR AVEC RAZ DE DBGMC.
<
<
<        D E G R E S S I O N   D E   L ' A D R E S S E
<                    C O U R A N T E  :
<
<
DBGM:    EQU         $
         LA          DBGADC
         SB          DBGMC           < ON FAIT :
                                     < DBGADC<--(DBGADC)-(DBGMC).
         JMP         E899            < VERS DBGADR AVEC RAZ DE DBGMC.
<
<
<        E D I T I O N   D E   L ' A D R E S S E   E T
<        D U   N B R E   C O U R A N T S  :
<
<
DBGIAC:  EQU         $
         PSR         B
         LB          DBGADC          < (B)=ADRESSE COURANTE.
         BSR         AIMPB           < IMPRESSION DE L'ADRESSE
                                     < COURANTE.
         LAI         KET
         BSR         AIMPK           < ENVOI DE "&" COMME SEPARATEUR.
         LB          DBGMC           < (B)=NBRE COURANT.
         BSR         AIMPB           < EDITION DU NBRE COURANT.
         PLR         B
         JMP         DBG1            < REOUR A LA BOUCLE DU DEBUG.
<
<
<        I N V E R S I O N   D E   L A   F I L E   R S T F  :
<
<
IRSTF:   EQU         $
         LXI         LOFDMS
         LAI         MMOT            < A PRIORI.
         CP          &ARSTF          < UN MOT DE RSTF VAUT -1 (ETAT
                                     < NORMAL), OU 0 AVEC AU PLUS
                                     < UN BIT A 1 (MODE TRACE DES
                                     < CHANGEMENTS DE CONTEXTE).
         JNE         E962            < ON ETAIT EN MODE TRACE CHANGE-
                                     < MENTS DE CONTEXTES, PASSONS A L'
                                     < ETAT NORMAL.
         LAI         K               < DANS LE CAS OU ON ETAIT DANS L'
                                     < ETAT NORMAL, ON PASSE A L'ETAT
                                     < TRACE DES CHANGEMENTS DE
                                     < CONTEXTE EN RAZANT RSTF.
E962:    EQU         $
         STA         &ARSTF          < RSTF RECOIT 0 OU -1.
         JDX         E962
         LXI         NTS0
         LYI         FONSB1
         LAD         ARSTF
         BSR         ATMOBT          < A PRIORI, ON FOCE LE BIT 'RSTF' DE
                                     < LA TACHE 'CHECK AND TRACE'...
         JMP         DBG1            < VERS LA BOUCLE DU DEBUG.
         PAGE
<
<
<        L E C T U R E   1   C A R A C T E R E   S U R   T T Y S  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME LIT UN
<                    CARACTERE SUR 'TTYS', RAZE
<                    SON BIT DE PARITE, ET ELI-
<                    MINE TOUS LES CARACTERES DE
<                    TYPE 'CTRL' (DE CODES INFE-
<                    RIEURS A CELUI DE 'SPACE').
<
<
<        RESULTAT :
<                    (A)=CARACTERE LU (NON 'CTRL').
<
<
LIRK:    EQU         $
         BSR         ATDEFS          < TEST DEFSEC EN ATTENTE
         SIO         IMPETA          < ENTREE MOT D'ETAT
         TBT         ETANXT          < BIT VAL MOT ETAT =1?
         JNC         LIRK            < NON ON BOUCLE
XWOR%1:  VAL         COSBT?XTTYE1=FMASK(K=FCINST
XWOR%1:  VAL         COSBT?XTTYE2=FMASK(K?XWOR%1=FCINST
         LAI         XWOR%1
         SIO         IMPI            < A PRIORI, ON REMET LE MODE ECHO, EN
                                     < EFFET, SI UN DEFAUT SECTEUR EST APPARU
                                     < LORS DU DEBUG LE REGISTRE DE COMMANDE
                                     < EST EFFACE...
         SIO         TTYE            < ENTREE CARACTERE DANS A
         RBT         BITPAR
         CPI         KRUBOU          < EST-CE UN RUBBOUT (DEL) ????
         JE          LIRK            < OUI, IGNORE...
         CPI         KSP
         JLE         LIRK            < TOUS LES CARACTERES INFERIEURS
                                     < AU 'SPACE' (LUI COMPRIS) : RC,
                                     < LF,... SONT IGNORES.
         RSR
<
<
<        B A S C U L E M E N T   ' L P 1 ' / ' T T Y S '  :
<
<
<        ATTENTION :
<                      CE SOUS-PROGRAMME DETRUIT 'A' !!!
<
<
BASK:    EQU         $
<
< SORTIE CARACTERE :
<
         LA          TTYC
         XM          IMPC
         STA         TTYC
<
< SORTIE COMMANDE :
<
         LA          TTYI
         XM          IMPI
         STA         TTYI
<
< ENTREE MOT D'ETAT :
<
         LA          TTYETA
         XM          IMPETA
         STA         TTYETA
<
< ET RETOUR :
<
         RSR
         PAGE
<
<
<        I M P R E S S I O N   D U   R E G I S T R E   'B'  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME EDITE
<                    LE CONTENU DU REGISTRE 'B'...
<
<
<        ARGUMENT :
<                    (B)=VALEUR A EDITER.
<
<
IMPB:    EQU         $
         PSR         A,B,X
         LXI         NBITMO/NBITCX   < EN EFFET, UN MOT DE 16 BITS
                                     < GENERE 4 CARACTERES.
IMPB1:   EQU         $
         LAI         K               < RAZ DE A.
         SLLD        NBITCX          < DECONCATENATION DE 4 BITS DE B.
         ORI         HZERO           < CONVERSION EN ASCI.
         CPI         HNEUF           < EST-CE EN FAIT UN CHIFFRE OU
                                     < UNE LETTRE...
         JLE         IMPB2           < OK, C'EST UN CHIFFRE : "0" A "9".
         ADRI        HA-HNEUF-Z,A    < CONVERSION EN UNE LETTRE :
                                     < "A" A "F".
IMPB2:   EQU         $
         BSR         AIMPK           < EDITION DE (A).
         JDX         IMPB1           < CARACTERE SUIVANT.
         PLR         A,B,X
         RSR
<
<
<        I M P R E S S I O N   C A R A C T E R E  :
<
<
<        ARGUMENT :
<                    (A)=CARACTERE ASCI A IMPRIMER.
<
<
IMPK:    EQU         $
         PSR         A,X
         CPZ         IMPTTY          < 'LP1' OU 'TTYS' ???
         JNE         IMPK1           < 'TTYS'...
         LXI         ETAOPE          < 'LP1' :
                                     < (X)=BIT A TESTER POUR 'LP1 READY'...
         JMP         IMPK2
IMPK1:   EQU         $
         LXI         ETARIL          < 'TTYS' :
                                     < (X)=BIT A TESTER POUR 'BUFFER TTYS
                                     <     EMPTY'...
IMPK2:   EQU         $
         BSR         ATDEFS          < TEST D'UN EVENTUEL DEFAUT SECTEUR EN
                                     < ATTENTE, CAR EN EFFET ON BOUCLE...
         SIO         IMPETA          < (A)=MOT D'ETAT DU PERIPHERIQUE :
         TBT         L,X             < ALORS ON EST PRET ???
         JNC         IMPK2           < NON, ON BOUCLE...
         CPZ         IMPTTY          < OUI, QUI EST-CE ???
         JNE         IMPK3           < 'TTYS'...
         TBT         ETANXT          < 'LP1', ALORS EST-ELLE OCCUPEE ???
         JNC         IMPK2           < OUI, ON ATTEND QU'ELLE NE LE SOIT PLUS...
IMPK3:   EQU         $
         PLR         A,X
         SIO         IMPC            < ET ENFIN, IMPRESSION DU CARACTERE..
         RSR
<
<
<        E M I S S I O N   D ' U N   M E S S A G E  :
<
<
<        ARGUMENT :
<                    (A)=ADRESSE MOT DU MESSAGE (DETRUIT 'A' !!!),
<                    OCTET0(MESSAGE)=LONGUEUR DU MESSAGE EN ASCI (...).
<
<
IMPM:    EQU         $
         PSR         B,X
         SBT         BITX            < GENERATION DE L'INDEXATION.
         STA         IMPA            < GENERATION D'UN RELAI INDIRECT
                                     < INDEX VERS LE MESSAGE.
         LXI         K
         LBY         &IMPA           < ACCES A LA LONGUEUR DU MESSAGE
                                     < CODEE EN ASCI ("1"=1,...).
         ANDI        MBAS16          < (A)=LONGUEUR DU MESSAGE (K A 15).
         LR          A,B             < (B)=LONGUEUR DU MESSAGE (<16).
IMPM1:   EQU         $
         CPR         X,B             < TEST DE FIN D'EDITION.
         JE          IMPM2           < OK, FIN DU MESSAGE.
         ADRI        I,X
         LBY         &IMPA           < (A)=1 CARACTERE DU MESSAGE.
         BSR         AIMPK           < EDITION DE CE CARACTERE.
         JMP         IMPM1           < AU SUIVANT.
IMPM2:   EQU         $
         PLR         B,X
         RSR
<
<
<        E D I T I O N   D E   ' L F ' , ' R C ' , ' S P '  :
<
<
<        DETRUISENT A.
<
<
<
<
<        ' L F '  :
<
<
IMPLF:   EQU         $
         LAI         KLF             < (A)='LF'.
E820:    EQU         $
         BSR         AIMPK
         RSR
<
<
<        ' R C '  :
<
<
IMPRC:   EQU         $
         LAI         KCR             < (A)='RC'.
         JMP         E820
<
<
<        ' S P A C E '  :
<
<
<        ARGUMENT :
<                    (X)=NBRE DE 'SPACE A EMETTRE.
<
<
<        ATTENTION :
<                      DETRUIT LE REGISTRE 'X' !!!
<
<
IMPSP:   EQU         $
         LAI         KSP             < (A)='SPACE'.
IMPSP1:  EQU         $
         BSR         AIMPK
         JDX         IMPSP1
         RSR
         PAGE
<
<
<        D U M P   M E M O I R E   6 4 K  :
<
<
DUMP:    EQU         $
         LA          MEMV
         TBT         MEMXXX          < MAIS LE DUMP EST-IL AUTORISE ???
         JNC         DUMPX           < NON, GARE AUX ESPIONS !??!?!??!
         LAD         IMPDMP
         BSR         AIMPM           < ENVOI DU TITRE DE DUMP.
         PSR         W
         LA          CLESPU          < RECUPERATION DES CLES DU PUPITRE
         RBT         L               < RAZ DU BIT0 DE DEMANDE DE
                                     < DE TRACE, A PRIORI.
NMLIGN:: VAL         BIT>4           < NOMBRE MOTS/LIGNE=PUISSANCE DE 2...
         ANDI        NMLIGN-N)MFFFF  < CALCUL MODULO 16 DE (A).
         LR          A,W             < W RECOIT L'ADRESSE DE DEPART
                                     < DU DUMP (MODULO 16) ; CE DUMP
                                     < SE FERA DE (W) A '7FFF, ET
                                     < PEUT ETRE INTERROMPU A TOUT
                                     < MOMENT EN SUPPRIMANT LA CLEF0.
<
< BOUCLE DE DUMP DE LA MEMOIRE :
<
E958:    EQU         $
         BSR         ASMPUI
                                     < CARY=INFORMATION VALIDE (1).
         JNC         E958X           < RIEN
         JAGE        E956            < FIN
E958X:   EQU         $
         BSR         AIMPLF          < ENVOI D'UN LF EN TETE DE CHAQUE
                                     < NOUVELLE LIGNE.
         LR          W,B
         BSR         AIMPB           < IMPRESSION DE L'ADRESSE MEMOIRE
                                     < D'UN BLOC DE 16 MOTS EN TETE
                                     < DE CHAQUE LIGNE.
         LAD         IMPAD
         BSR         AIMPM           < ENVOI D'UN INDICATIF D'ADRESSE.
         LXI         NMLIGN          < ON MET 16 MOTS PAR LIGNE.
<
< BOUCLE DE DUMP DE 16 MOTS :
<
E959:    EQU         $
         LR          X,Y             < SAVE X DANS Y.
         LXI         3
         BSR         AIMPSP          < ENVOI DE 3 'SPACE' ENTRE CHAQUE
                                     < MOT DE LA LIGNE.
         LR          Y,X             < RESTAURE X.
         LB          O,W             < ACCES AU MOT POINTE PAR W DANS B.
         BSR         AIMPB           < IMPRESSION DU MOT COURANT (W).
         ADRI        P,W             < ADRESSE DU MOT SUIVANT.
         JDX         E959            < POURSUIVONS SUR LA LIGNE.
         BSR         AIMPRC          < ENVOI D'UN R/C DE FIN DE LIGNE.
         CPZR        W
         JNE         E958            < CETTE BOUCLE PERMET DE BALAYER
                                     < LES 64 K DE LA MEMOIRE.
         BSR         AIMPLF          < AFIN D'IMPRIMER LA DERNIERE LIGNE !???!!
E956:    EQU         $
         PLR         W               < RESTAURE W.
DUMPX:   EQU         $
         RSR
         PAGE
<
<
<        L I S T E   D E S   B L O C S   M E M O I R E
<        A C C E S S I B L E S   A U X   P R O L E T A I R E S
<        U T I L I S A N T   L E   S Y S T E M E  :
<
<
<        FORMAT :
<                      CETTE LISTE CONTIENT (COMME
<                    'LZSAV') L'ADRESSE DE DEBUT D'UN
<                    BLOC ET LE NOMBRE DE MOTS QUE L'ON
<                    PEUT Y LIRE, Y COMPRIS CELUI DU
<                    DEBUT...
<
<
LZ1E15:  EQU         $
<
< FORMAT DE LA LISTE :
<
YCOPAD:: VAL         XCOPAD          < ADRESSE DE DEBUT DU BLOC,
YCOPLO:: VAL         XCOPLO          < NOMBRE DE MOTS ACCESSIBLES,
YLCOPY:: VAL         XLCOPY          < LONGUEUR D'UNE ENTREE DE LA LISTE...
<
< LISTE PROPREMENT DIT :
<
         WORD        NSL;D*W         < NBRE TOTAL DE SECTEURS LIBRES.
         WORD        BSTREE;D*W      < NOMBRE DE NOEUDS LIBRES DANS L'ARBRE.
         WORD        TFREK1;LTFREK   < ALPHABET VIRTUEL DU 'SGN'.
         WORD        NCOLOR;-XXCULM  < MEMOIRE DES COULEURS DE 'MEMTV'.
                                     < (NOTA : LA VALEUR '-XXCULM' SEMBLE AVOIR
                                     < ETE MISE EN PREVISION D'UNE EXTENSION
                                     < RELATIVE A UNE VERIFICATION DES ASSI-
                                     < GNATIONS A 'CU3' LORS DE L'ACCES DIRECT
                                     < A LA MEMOIRE DES COULEURS DE 'MEMTV'
                                     < SANS PASSER PAR 'NSPCOL'... CETTE
                                     < EXTENSION N'A PAS ENCORE ETE FAITE...)
         WORD        OCDA;D*W        < DEBUT DE LA 'CDA' COURANTE,
         WORD        ECDA;D*W        < FIN DE LA 'CDA' COURANTE.
         WORD        CVOLU;ELVOL     < ACCES AU DESCRIPTEUR DU VOLUME COURANT.
         WORD        TEDF+IJIJDX;LTEDF
                                     < ACCES AUX ETATS DES FICHIERS.
         WORD        LTIME;LOTIME    < DATE ET HEURE COURANTE.
         WORD        ETASYS;D*W      < LISTE DES INDICATEURS DE CONTROLE...
                                     < (ON Y DONNE ACCES A CAUSE DES PROGRAM-
                                     < MES QUI TESTE LE MODE DE DESTRUCTION DES
                                     < FICHIERS...)
<
< FIN DE LA LISTE :
<
         WORD        NIL;NIL         < INDICATEUR DE FIN DE LISTE...
XWOR%1:  VAL         W+W             < LONGUEUR DE LA ZONE DE PATCH DE LA LISTE.
         DO          XWOR%1
         WORD        NIL;NIL
<
<
<        A C C E S   D I R E C T   A   L A   M E M O I R E
<                    E T   A C C E S   P A R   ' N V P '  :
<
<
<        FONCTION :
<                      CE MODULE EST DEVENU UN SOUS-
<                    PROGRAMME DEPUIS QUE CERTAINES
<                    VALIDATIONS ONT ETE RAJOUTEES,
<                    DU TYPE SEUL ":SYS" PEUT ACCEDER
<                    A L'INTEGRALITE DE LA MEMOIRE,
<                    ET LA MEMOIRE DES COULEURS N'EST
<                    ACCESSIBLE LORSQUE 'CU3' EST LOUEE
<                    QU'AU LOCATAIRE.
<                      DE PLUS, IL S'AGIT D'UN SOUS-PROGRAMME
<                    A CAUSE DES SAUTS SUPERIEURS A 128 MOTS...
<
<
<        ARGUMENT :
<                    (A)=CONTENU DU REGISTRE A(ESCLAVE).
<
<
<        RESULTAT :
<                    (A)=ADRESSE MEMOIRE (SI ACCES DIRECT), OU
<                        RELAI (SI ACCES PAR 'NSP'), OU
<                        VALEUR FARFELUE LORSQUE L'ACCES EST ILLEGAL...
<
<
RCABS:   EQU         $
         LR          A,Y             < (Y)=SAUVEGARDE DE L'ADRESSE DEMANDEE...
         JAL         RECNVP          < ACCES PAR DCTSY.
<
<
<        A C C E S   D I R E C T   A   L A   M E M O I R E  :
<
<
Z731X:   EQU         $
         PSR         B,L             < SAUVEGARDES DIVERSES...
<
< TEST DE  DEMANDEUR :
<
         LA          ACNESC-DCTESC,W
         CP          ACNSYS          < EST-CE ":SYS" ???
         JNE         Z731X4          < NON, IL FAUT VALIDER L'ACCES...
         LA          ACNESC-DCTESC+U,W
         CP          ACNSYS+U        < EST-CE ":SYS" ???
         JE          Z731X5          < OUI, TOUT EST PERMIS...
<
< CAS DES AUTRES  QUE ":SYS" :
<
Z731X4:  EQU         $
         LRM         L
         WORD        LZ1E15          < (L)=ADRESSE DE LA LISTE DES BLOCS
                                     <     AUTORISES EN ACCES DIRECT A LA
                                     <     MASSE POPULAIRE...
Z731X6:  EQU         $
         LA          YCOPAD,L        < (A)=ADRESSE DE L'ELEMENT COURANT,
         JAE         Z731XA          < ET BIEN, C'EST FINI : ON N'A TROUVE AUCUN
                                     < INTERVALLE LEGAL, L'ACCES EST INTERDIT...
         LB          YCOPLO,L        < (B)=LONGUEUR DE L'ENTREE COURANTE,
         CPZR        B
         JGE         Z731X7          < DONT ON PREND
         NGR         B,B             <               LA VALEUR ABSOLUE.
Z731X7:  EQU         $
         SBR         Y,A
         NGR         A,A             < (A)=ADRESSE DEMANDEE-ADRESSE COURANTE,
         JAL         Z731X8          < L'ADRESSE DEMANDEE EST HORS DE L'IN-
                                     < TERVALLE LEGAL, PASSONS A L'ENTREE
                                     < SUIVANTE...
         CPR         B,A             < ???
         JL          Z731X9          < 0<=(A)<(B) : L'ADRESSE DEMANDEE EST
                                     < DANS L'UN DES INTERVALLES AUTORISES,
                                     < L'ACCES EST LICITE...
Z731X8:  EQU         $
         ADRI        YLCOPY,L        < DANS LE CAS DES ADRESSES HORS-INTER-
                                     < VALLE, ON PASSE A L'ENTREE SUIVANTE,
         JMP         Z731X6          < SI ELLE EXISTE...
<
< CAS DES ADRESSES ILLICITES :
<
YYDEF0:  WORD        XXDEF0          < C'EST LE CONTENU DE CE MOT QUI SERA
                                     < EDITE POUR TOUS LES ACCES ILLICITES ; A
                                     < NOTER L'ASTUCE "DEFAUT" ('DEF0')...
Z731XA:  EQU         $
         LRM         Y
         WORD        YYDEF0          < ET ON FORCE UNE ADRESSE FARFELUE DANS
                                     < LE REGISTRE 'Y' ==> "DEFAUT"...
<
< CAS DES ACCES LICITES, ET DE ":SYS" :
<
Z731X9:  EQU         $
Z731X5:  EQU         $
         LR          Y,A             < (A)=ADRESSE MEMOIRE DEMANDEE...
         PLR         B,L             < RESTAURATIONS...
<
< ACCES DIRECT MEMOIRE :
<
         PSR         W               < SAUVEGARDE DE L'ADRESSE DE 'DCTESC'...
         LR          A,W
         LA          O,W             < RECUPERATION DU CONTENU DU
                                     < MOT DONT L'ADRESSE ABSOLUE
                                     < EST DANS A(ESCLAVE).
         PLR         W               < RESTAURATION DE L'ADRESSE DE 'DCTESC'.
         JMP         Z731XC          < VERS LA SORTIE, POUR RENVOI DU CONTENU
                                     < PAR L'INTERMEDIAIRE DE B(ESCLAVE)...
<
<
<        A C C E S   M E M O I R E   V I A   ' D C T S Y '  :
<
<
RECNVP:  EQU         $
         RBT         XXBNSP          < RAZ DU BIT 0 (.AND.'7FFF).
         CPI         NSPLST          < EST-CE VRAIMENT UN NSP ???
         JG          Z731Y           < NON, DONC ACCES DIRECT...
<
< TEST D'UN ACCES A LA MEMOIRE
< DES COULEURS ('CU3') :
<
         CPI         NSPCOL          < EST-CE LA MEMOIRE DES COULEURS ???
         JNE         Z731X1          < NON, PAS DE PROBLEMES...
         PSR         A,X,L           < OUI,
         LXI         NSPCU3          < (X)='NSP' DU COUPLEUR POSSEDANT LA
                                     <     MEMOIRE DES COULEURS,
         BSR         ACADCT          < (A)=(L)=ADRESSE DE SA 'DCT'...
         USE         L,DCT0
         CPZ         ETALOC          < ALORS EST-IL LOUE ???
         USE         L,LOCTH0+DEPL0
         JGE         Z731X2          < NON, PAS DE LIMITATIONS D'ACCES...
         IF          XETLOC-BITSIG,,XEIF%,
         IF          ATTENTION : LE TEST PRECEDENT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         LXI         NOCMO*LTASGN-Z  < OUI, IL EST LOUE, IL FAUT DONC VOIR SI
                                     < L'ON EST EN PRESENCE DU LOCATAIRE ???
Z731X3:  EQU         $
         LBY         &TASSGN-DCTESC,W < PARCOURS DE 'TASSGN' :
         CPI         NSPCU3          < L'UTILISATEUR COURANT POSSEDE-T'IL 'CU3'?
         JE          Z731X2          < OUI, L'ACCES EST LICITE...
         JDX         Z731X3          < NON, PASSAGE AU PERIPHERIQUE PRECEDENT...
         PLR         A,X,L           < ET BIEN NON, L'UTILISATEUR COURANT N'A
                                     < PAS LE 'CU3',
         LAI         NSPVID          < ON FORCE DANS 'A' UN 'NSP' FARFELU...
         JMP         Z731X1          < ET ON VA EFFECTUER LA DEMANDE...
Z731X2:  EQU         $               < LORSQU'ON POSSEDE LE 'CU3',
         PLR         A,X,L           < APRES CETTE RESTAURATION, 'A' CONTIENT
                                     < LE 'NSPCOL'...
<
< ACCES A UN RELAI PAR 'DCTSY' :
<
Z731X1:  EQU         $
         LR          A,X             < (X)='NSP' D'ACCES A L'INFORMATION,
         LA          &ADCTSY         < (A)=INFORMATION DEMANDEE ; A
                                     <     NOTER QUE CETTE INFORMATION EST
                                     <     EN FAIT UN RELAI VERS UNE
                                     <     AUTRE INFORMATION (CF. DCTSY) !!!!
<
< SORTIE DU SOUS-PROGRAMME :
<
Z731XC:  EQU         $               < (A) EST BON...
         RSR
<
< ACCES DIRECT AU DELA DE Q8000+NSPLST :
<
Z731Y:   EQU         Z731X
         PAGE
<
<
<        S A U V E G A R D E   P U I S   R E S T A U R A T I O N
<        D E S   R E G I S T R E S   D E   L ' E S C L A V E  :
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DE LA 'DCTESC'.
<
<
TRAPH:   EQU         $
         PSR         A,B,X
<
< RECONSTITUTION ET SAUVEGARDES :
<
         BSR         ASIPST          < RECONSTITUTION DE 'PSTESC' DU AU
                                     < CHANGEMENT DE CONTEXTE PARTIEL AVEC 'TH0'
                                     < ET OUI, MERCI LA 'SEMS'...
         BSR         ASAVRE          < SAUVEGARDE REGISTRES
<
< INITIALISATION DES REGISTRES
< ET DE LA MEMOIRE :
<
         LXI         LPSTH0+TH0P
         STZ         &AXPSTH         < RAZ REGISTRE DU REGISTRE 'P',
         STZ         &APSTHS         < MISE A PRIORI DE L'ESCLAVE EN MODE
                                     < ESCLAVE ; EN EFFET IL POURRAIT ETRE
                                     < EN MODE MAITRE (VOIR PAR EXEMPLE UNE
                                     < VIOLATION MEMOIRE PENDANT UN 'SVC'...).
         CPZ         MOT0            < MODE 'SVC' OU 'QUIT' ???
         JL          TRAPH1          < MODE 'QUIT'...
<
< MODE 'SVC' :
<
XWOR%6:  VAL         LPSTH0+TH0K
         LXI         XWOR%6          < POUR ATTEINDRE 'K' DANS 'PSTH0'...
         IF          XMOT2-DEPILE-XWOR%6,,XEIF%,
         IF          ATTENTION : L'INITIALISATION DU REGISTRE 'K'
         IF          DANS 'PSTH0' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         IF          XMOT1-XWOR%6,,XEIF%,
         IF          ATTENTION : L'INITIALISATION DU REGISTRE 'A'
         IF          DANS LA PILE DE 'TH0' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         STX         &AXPSTH         < K <- 1
         STX         &APLH0          < A <- 1
TRAPH1:  EQU         $
         PSR         W
         LAI         LARMO2          < (A)=INDICATEUR DE 'LAR' REALISABLE SUR
                                     <     LE MOT2 DE L'ESPACE MEMOIRE UTILI-
                                     <     SATEUR...
         BSR         AIMEMY          < GENERATION DU PROGRAMME MINIMUM, ET
                                     < SAUVEGARDE PREALABLE DES MOT0, MOT1
                                     < ET MOT2...
         PLR         W               < RESTAURE : (W)=ADRESSE DE 'DCTESC'.
         LA          IDDESC-DCTESC,W
         TBT         IDESCX          < VALIDATION DE 'IDESCX'...
         JNC         TRAPH2          < OK, IL EST NUL...
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE D'OU VIENNENT CES
<                    TRAPPES IMBRIQUEES !!!
<
TRAPH2:  EQU         $
         SBT         IDESCX
         STA         IDDESC-DCTESC,W < INDIQUONS AINSI QU'IL Y A UNE TRAPPE
                                     < EN COURS DE TRAITEMENT, INDICATION
                                     < QUI SERA EFFACEE DES QUE LE 'NSPIN'
                                     < SERA MIS EN LECTURE DANS LE 'CCI'...
<
< TEST DES PERIPHERIQUES 'IN'
< ET 'OUT' DE L'UTILISATEUR :
<
         LXI         PHIN
         LBY         &TASSGN-DCTESC,W
                                     < (A)='NSP' DU PERIPHERIQUE 'IN',
         CPI         NSPVI0          < EST-CE UNE VISU ???
         JL          TRAPH3          < NON...
         CPI         NSPVIN          < ???
         JG          TRAPH3          < NON...
<
< CAS D'UNE VISU : IL FAUT
< REINITIALISER A PRIORI
< LE BUFFER D'ANTICIPATION :
<
         PSR         L               < SAVE LA BASE 'L' DE 'TH0'...
         LR          A,X
         BSR         ACADCT          < (L)=ADRESSE DE LA 'DCTVIS' DE 'NSP'=(X).
         SVC         SVCM10          < DANS LE CAS D'UNE TRAPPE, ON ANNULE TOUS
                                     < LES CARACTERES EN ATTENTE, EN REINITIA-
                                     < LISANT 'KCWIO'...
         PLR         L               < RESTAURE LA BASE 'L' DE 'TH0'...
TRAPH3:  EQU         $
<
< SORTIE :
<
         PLR         A,B,X
         RSR
         PAGE
<
<
<        R E C O N S T I T U T I O N   D E   ' P S T E S C '
<        A   L A   S U I T E   D ' U N E   E N T R E E
<                    D A N S   ' T H 0 '  :
<
<
<        FONCTION :
<                      LORSQU'UNE TACHE ESCLAVE RENTRE
<                    DANS 'TH0', SA 'PSTESC' NE CONTIENT
<                    PAS LES REGISTRES EN COURS DE L'UTILI-
<                    SATEUR, PUISQUE L'ENTREE DANS 'TH0'
<                    SE FAIT PAR UN CHANGEMENT DE CONTEXTE
<                    PARTIEL...
<
<
SIPST:   EQU         $
         PSR         A,B,X,W
         LXI         LPSTH0+RH0C
         LA          &AXPSTH
         STA         PSTESC-DCTESC+RC,W < BASE C.
         LXI         LPSTH0+TH0K
         LA          &AXPSTH
         STA         PSTESC-DCTESC+RK,W < REGISTRE K.
         LXI         LPSTH0+TH0P
         LA          &AXPSTH
         STA         PSTESC-DCTESC+RP,W < REGISTRE P.
         LXI         LPSTH0+TH0S
         LA          &AXPSTH
         STA         PSTESC-DCTESC+RS,W < REGISTRE S, ET NATURE TRAPPE...
         LXI         TH0L
         LA          &AXPLH0
         STA         PSTESC-DCTESC+RL,W < BASE L.
         LXI         TH0W
         LA          &AXPLH0
         STA         PSTESC-DCTESC+RW,W < BASE W.
         LA          APLH0           < AD REG A (EMETTEUR)
         LR          W,B             < (RECEPTEUR) REG B
         LXI         TH0Y-RH0A+Z
         MOVE                        < A B X Y
         IF          TH0Y-RH0A+Z-RY+RA-Z,,XEIF%,
         IF          ATTENTION : LE 'MOVE' EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
         PLR         A,B,X,W
         RSR
         USE         L,DCT0
         PAGE
<
<
<        S U S P E N S I O N   E S C L A V E  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME SUSPEND
<                    UN ESCLAVE DANS LE 'CCI' A
<                    L'AIDE DE SON HANDLER DE
<                    SERVICE COURANT ; LE REVEIL
<                    DE CET ESCLAVE SE FERA SUR
<                    RECEPTION D'UN 'ALT-MODE',
<                    OU D'UNE COMMANDE "!X..."
<                    EMISE PAR QUELQU'UN D'AUTRE.
<
<
<        A T T E N T I O N  :
<                      'SLEEP' EST SANS ACTION SI LE JOB
<                    DEMANDEUR N'EST PAS INTERACTIF,
<                    C'EST-A-DIRE SI NSPIN#NSPOUT.
<
<
<        DISTINCTION ENTRE "!W" ET "!U" :
<                      "!W" : CETTE COMMANDE MET L'UTILISATEUR
<                    EN ATTENTE JUSQU'A RECEPTION D'UN CARACTERE
<                    D'ABORT COURANT, OU D'UNE COMMANDE "!X".
<                      "!U" : CETTE COMMANDE MET L'UTILISATEUR
<                    EN ATTENTE, L'EMPILE DANS LA PILE 'APILID'
<                    LOCALE A CHAQUE VISU (RAPPELONS QU'IL NE
<                    PEUT S'AGIR QUE D'UN JOB INTERACTIF) ;
<                    LA VISU CORRESPONDANTE SE TROUVE DANS
<                    L'ETAT OU AUCUN N'UTILISATEUR N'EST
<                    CONNECTE : UN 'ALT-MODE' CREE ALORS UN
<                    LOG-IN,..., CETTE SESSION ETANT TERMINEE
<                    PAR UN LOG-OUT, QUI DEPILERA L'UTILISATEUR
<                    EMPILE, LE REMETTANT DANS L'ETAT D'UN "!W",
<                    OU IL ATTEND DONC UN CARACTERE D'ABORT
<                    POUR ETRE RELANCE...
<
<
<        DIAGRAMME TEMPOREL :
<
<
...!F...
<
...!U.                            ...
<
<
<
<
<        ARGUMENTS :
<                    (W)=ADRESSE DCT(ESCLAVE),
<                    (L)=ADRESSE DCT(SERVICE).
<                    (B)='XXNCHI' : COMMANDE "!W",
<                      'XXCHI'  : COMMANDE "!U".
<
<
<        NOTA :
<                      LORSQU'ON RENTRE DANS 'SLEEP', LE
<                    'ALT-MODE' DOIT ETRE INHIBE (BIT2
<                    DE 'IDESC'), SAUF EVIDEMMENT LA
<                    PREMIERE FOIS...
<
<
SLEEP:   EQU         $
<
< TEST DU CARACTERE INTERACTIF DU JOB DEMANDEUR :
<
         BSR         ACHKIN          < TEST DU MODE DU JOB :
         JNE         Z280            < NSPIN#NSPOUT : LE JOB N'EST PAS
                                     < INTERACTIF, LE 'SLEEP' EST SANS
                                     < EFFET.
<
< CAS D'UN JOB INTERACTIF (NSPIN=NSPOUT) :
<
         BSR         ASMMK           < MASQUAGE DES INTERRUPTIONS.
         LA          IDESC-DCTESC,W
         TBT         IDESCW
         JNC         SYSR71          < OK, ESCLAVE NON ENCORE SUSPENDU.
         BSR         ASYSER          < E R R E U R   S Y S T E M E ...
<
<        QUE FAIRE ???
<                      COMPRENDRE COMMENT UN
<                    UTILISATEUR DEJA SUSPENDU
<                    PEUT DEMANDER UNE SUSPENSION !!!
<
SYSR71:  EQU         $
         SBT         IDESCW          < SUSPENSION DE L'ESCLAVE DANS CCI
                                     < PAR L'INTERMEDIAIRE DE SON
                                     < HANDLER DE SERVICE.
         RBT         IDESCA          < AUTORISATION DE L''ALT-MODE'
                                     < AVEC LA FONCTION DE DEBLOQUER
                                     < L'ESCLAVE SUSPENDU.
         STA         IDESC-DCTESC,W  < MAJ DE IDESC.
XXNCHI:: VAL         K               < INDICATEUR "!W" : PAS D'EMPILEMENT
                                     < D'UTILISATEUR,
XXCHI::  VAL         XXNCHI+I        < INDICATEUR "!U" : EMPILEMENT UTILISATEUR.
         IF          XXNCHI-K,,XEIF%,
         IF          ATTENTION : CE QUI SUIT MERDE !!!
XEIF%:   VAL         ENDIF
         IF          XXCHI-K,XEIF%,,XEIF%
         IF          ATTENTION : CE QUI SUIT MERDE !!!
XEIF%:   VAL         ENDIF
         CPZR        B               < FAUT-IL EMPILER L'UTILISATEUR ???
         JE          Z280X1          < NON, TANT MIEUX POUR LUI...
<
< EMPILEMENT D'UN UTILISATEUR INTERACTIF :
<
         PSR         X,Y,L
         LA          &ASAESC
         BSR         ABETA           < (A)=BETA(SEMAPHORE D'ALLOCATION ).
         NTRN
XWOR%1:  VAL         NESCLA/XXXMOY   < SEUIL ARBITRAIRE...
         TRN
         CPI         XWOR%1          < Y-A-T'IL ASSEZ D' LIBRES ???
         JLE         Z280X4          < NON, INSUFFISANT, LA COMMANDE "!U"
                                     < EST REFUSEE...
         LXI         PHIN
         LBY         &TASSGN-DCTESC,W  < (A)='NSPIN' (='NSPOUT') :
         LR          A,X
         BSR         ACADCT          < (L)=ADRESSE DE LA 'DCT' DE LA VISU DE CET
                                     <     UTILISATEUR...
         LY          VAR+APILID      < (Y)=ADRESSE DU POINTEUR DE PILE :
         LA          IOID
         PUSH                        < EMPILEMENT DE 'IOID' :
         JNV         Z280X2          < OK, IL Y AVAIT DE LA PLACE DANS LA PILE..
Z280X4:  EQU         $
         BSR         ASMDK           < DEMASQUAGE DES INTERRUPTIONS,
         PLR         X,Y,L           < RESTAURATION DES REGISTRES,
         ADRI        XCCIER,X        < ET RETOUR EN ERREUR AU 'CCI' LORSQUE LA
                                     < PILE EST SATUREE...
         JMP         Z280
Z280X2:  EQU         $
<
< REINITIALISATION DE LA VISU :
<
         LBY         IOID
         SWBR        A,A
         STA         IOID            < REINITIALISATION DE 'IOID', TEL
                                     < QU'IL N'Y AIT AUCUN UTILISATEUR DE
                                     < CONNECTE.
         PLR         X,Y,L
<
< MISE EN ATTENTE DE L'UTILISATEUR
< VIA SON NIVEAU DE SERVICE :
<
Z280X1:  EQU         $
         BSR         ASMDK           < DEMASQUAGE DES INTERRUPTIONS.
         RQST        SIT             < SUSPENSION DE L'ESCLAVE, PAR
                                     < BLOCAGE DE HDL-SERVICE SUR
                                     < SON SIT.
Z280:    EQU         $
         RSR                         < RETOUR A CCI, LORS DU REVEIL.
                                     < (OU IMMEDIATEMENT, SI LE JOB
                                     < N'EST PAS INTERACTIF).
<
<
<        A N N U L A T I O N   D E   ' S L E E P '  :
<
<
<        FONCTION :
<                      CE MODULE EST APPELE PAR LA
<                    GRAMMAIRE DU 'CCI' LORSQUE LA
<                    FONCTION 'SLEEP' A ECHOUEE POUR
<                    LA COMMANDE "!U" ; ELLE ANNULE
<                    CE QU'A FAIT 'SLEEP'.
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DE 'DCTESC'.
<
<
RZIDW:   EQU         $
         BSR         ASMMK           < MASQUAGE DES INTERRUPTIONS,
         LA          IDESC-DCTESC,W
         RBT         IDESCW          < ET ON ANNULE L'INDICATEUR 'IDESCW'...
         STA         IDESC-DCTESC,W
         BSR         ASMDK
         RSR                         < ET C'EST TOUT...
         PAGE
<
<
<        D I A L O G U E   V I S U   A   V I S U  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME (APPELE
<                    PAR LE 'CCI') ENVOIE SUR
<                    UNE VISU 'VIX' UN MESSAGE
<                    EMIS PAR UNE VISU 'VIY',
<                    LORSQUE CELA EST POSSIBLE
<                    (VISU EXISTANTE, UTILISA-
<                    TEUR LOGUE SUR 'VIX',...).
<
<
<        ARGUMENTS :
<                    (L)=ADRESSE DCT(SERVICE),
<                    (W)=ADRESSE DCT(ESCLAVE).
<
<
         USE         L,DCT0
VISAVI:  EQU         $
<
< VALIDATION DE LA DEMANDE :
<
         DC          VAR+XBUFGR      < RETOUR SUR LE NUMERO DE LA
                                     < VISU DEMANDEE.
         BSR         ACARAC          < RENVOIE (A)=NUMERO EN ASCI
                                     < DE LA VISU DEMANDEE.
         ANDI        BASE16-N        < (A)=NUMERO DECIMAL DE LA VISU.
         JAE         E863            < ERREUR, NUMERO=K.
         CPI         NSPVIN-NSPVI0+Z
         JG          E863            < ERREUR : VISU INEXISTANTE.
<
< OK, TEST D'ETAT DE LA VISU DEMANDEE :
<
         ADRI        NSPVI0-Z,A      < (A)=NSP DE LA VISU DEMANDEE.
         PSR         X,L             < SAVE INDEX COURANT DE LA
                                     < GRAMMAIRE DU CCI & @DCT DE
                                     < SERVICE.
         LR          A,X             < (X)=NSP DE LA VISU DEMANDEE.
         BSR         ACADCT          < (L)=@DCT-VISU DEMANDEE (X).
         LA          IOID            < ACCES A L'IOID DE LA VISU
                                     < DEMANDEE.
         PLR         X,L             < RESTAURE :
                                     < (X)=INDEX COURANT DE LA GRAMMAIRE,
                                     < (L)=@DCT DE SERVICE.
         TBT         IOIDX           < UN ESCLAVE EST-IL CONNECTE
                                     < A LA VISU DEMANDEE ????
         JNC         E863            < NON, ERREUR.
<
< OK, ENVOI DU MESSAGE :
< (A NOTER QUE L''AUTO-ENVOI' DE MESSAGE EST AUTORISE...)
<
         PSR         X,W             < SAVE INDEX COURANT DE LA
                                     < GRAMMAIRE & @DCT-ESCLAVE QUI
                                     < A EMIS LA DEMANDE.
         ANDI        IOIDM           < (A)=ID DE L'ESCLAVE DEMANDE
                                     <     (CALCULE A PARTIR DE IOID).
         LR          A,X             < (X)=ID ESCLAVE DEMANDE.
         LA          &ATBU           < (A)=@DCT DE L'ESCLAVE DEMANDE.
         LR          A,W             < (W)=@DCT-ESCLAVE DEMANDE.
<
< MISE DANS LE MESSAGE DU NUMERO DE LA VISU EMETTRICE :
<
         LBY         VAR+DEMCCI+XXNSP  < (X)=NSP DE LA DEMANDE DE LECTURE.
XWOR%1:  VAL         MOCG=K
XWOR%1:  VAL         -XWOR%1         < POUR UN DECALAGE A DROITE...
XWOR%1:  VAL         MSKNSP>XWOR%1
         ANDI        XWOR%1          < (A)=NSP DE LA VISU EMETTRICE.
         ADRI        Z-NSPVI0,A      < (A)=NUMERO DE LA VISU EMETTRICE.
         ORI         HZERO           < (A)=NUMERO CODE EN ASCI.
         LX          VAR+XBUFGR
         ADRI        -I,X            < (X)=INDEX DU NUMERO DE LA VISU
                                     <     DANS LE MESSAGE.
         STBY        &VAR+ABUFGR     < LE NUMERO DE LA VISU EMETTRICE
                                     < REMPLACE LE NUMERO DE LA
                                     < VISU RECEPTRICE.
         LA          VAR+DEMCCI+T+AMDEM
         SLRS        NOCMO=K         < (A)=@MOT DU MESSAGE.
         LB          VAR+DEMCCI+T+CODEM  < (B)=LONGUEUR EXACTE DU MESSAGE.
         BSR         AMESSO          < ENVOI DU MESSAGE ET ATTENTE DE
                                     < FIN D'EMISSION.
         PLR         X,W             < RESTAURE :
                                     < (W)=@DCT-ESCLAVE COURANT,
                                     < (X)=INDEX COURANT DE LA GRAMMAIRE.
<
< ET RETOUR AU 'CCI' :
<
E864:    EQU         $
         RSR                         < RETOUR AU CCI.
E863:    EQU         $
         ADRI        XCCIER,X        < RETOUR EN ERREUR AU CCI.
         JMP         E864



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