< << DELETE 'SISP'
DF'SISP CMS5 BOOT VISU'
DF'SISP CMS5 DMKDEF'
DF'SISP CMS5 DOL1'
DF'SISP CMS5 DOL2'
DF'SISP CMS5 DSEC'
DF'SISP CMS5 FTHDEB'
DF'SISP CMS5 GENPIL1'
DF'SISP CMS5 GENPIL2'
DF'SISP CMS5 IC'
DF'SISP CMS5 ICPSTH'
DF'SISP CMS5 IREST'
DF'SISP CMS5 JREST'
DF'SISP CMS5 MKDEF'
DF'SISP CMS5 PSTH'
DF'SISP CMS5 PSTH-IC'
DF'SISP CMS5 RST'
DF'SISP CMS5 SST'
DF'SISP CMS5 THDEB'
DF'SIS CMS5'
DF'SISP CMS5 NBIT1'
DF'SISP CMS5 KREG'
DF'SISP CMS5 REC'
DF'SISP CMS5 TAB1'
DF'SISP CMS5 TAB2'
DF'SISP CMS5 ASCI'
DF'SISP CMS5 EXTEND'
DF'SISP CMS5 BYTE'
DF'SISP CMS5 GENPIL3'
DF'SISP CMS5 VALITN'
DF'SISP CMS5 SAVE'
DF'SISP CMS5 RESTAURE'
DF'SISP CMS5 DELETE'
DF'SISP CMS5 PSRSLO'
DF'SISP CMS5 PLRSLO'
DF'SISP CMS5 PAGE0'
DF'SISP CMS5 W ZERO'
DF'SISP CMS5 W TRACE'
DF'SISP CMS5 BASE C'
DF'SISP CMS5 GEN DEF'
DF'SISP CMS5 GEN CTE'
DF'SISP CMS5 CHECK'
< << DELETE 'SISP'
< *******            F I N   D E   D E L E T E  ...
ED'SISP CMS5 BOOT VISU'
IN0
<
<
<        B O O T   V I S U  :
<
<
<        FONCTION :
<                      CE MODULE EST A IMPLANTER A
<                    UNE CERTAINE ADRESSE DANS LA MEMOIRE
<                    DU SOLAR 16.65; LANCE A L'ADRESSE 'YOOT',
<                    IL LIT DES OCTETS A PARTIR DESQUELS
<                    IL GENERE DES MOTS DE 16 BITS. DES QU'IL
<                    RENCONTRE 'A-ROND', IL S'ARRETE...
<                      A NOTER, QUE CE BOOT-STRAP S'ECRASE
<                    LUI-MEME, CE QU'IL PEUT FAIRE, PUISQU'IL
<                    NE TRAVAILLE QUE SUR DES REGISTRES...
<
<
<
<
<        I M P L A N T A T I O N  :
<
<
         $EQU        $               < PEU ORIGINAL...
<
<
<        L O C A L  :
<
<
YSV01::  VAL         'C8             < ADRESSE DU COUPLEUR.
         LOCAL
YOC:     EQU         $
         WORD        K               < AFIN DE NE PAS TRANSLATER CE QUI SUIT.
YNFIN:   WORD        YSV01?FPHIN     < ENTREE INFORMATION SUR ASV01.
YTATIN:  WORD        YSV01?FPHETA    < ENTREE DE L'ETAT DE ASV01.
YOCOM1:  WORD        YSV01?FPHCMD    < SORTIE COMMANDE 1 SUR ASV01.
YOM1:    WORD        '0001           < VALIDATION INTERRUPTIONS !?!?!?!
YOCOM2:  WORD        YSV01?FPHCME    < SORTIE COMMANDE 2 SUR ASV01.
YOM2:    WORD        '0140           < 7 BITS, PAS DE PARITE, 1 STOP.
<
<
<        M O D U L E   D E   C H A R G E M E N T
<                    S U R   A S V 0 1  :
<
<
         PROG
YOOT:    EQU         $
         LRM         L               < INITIALISATION DE L.
         WORD        YOC+DEPBAS
         LA          YOM2
         SIO         YOCOM2          < SORTIE COMMANDE...
         LA          YOM1
         SIO         YOCOM1          < COMMANDE SUIVANTE...
         SIO         YNFIN           < ENTREE POUR CLEAR.
         CALL        #SISP CMS5 W ZERO#  < DEPART SUR LE PREMIER MOT.
<
< BOUCLE DE RECUPERATION DES MOTS :
<
YOOP1:   EQU         $
         LYI         NBITMO/NBITCX   < 4 CHIFFRES PAR MOT.
<
< BOUCLE DE RECUPERATION DES 4 CHIFFRES D'UN MOTS :
<
YOOP2:   EQU         $
         SIO         YTATIN          < ENTREE DE L'ETAT,
         TBT         ETANXT          < INFO VALIDE ???
         JNC         YOOP2           < NON, ON ATTEND...
         SIO         YNFIN           < OUI, ENTREE 1 CARACTERE.
         CPI         KAROND          < FIN DE LISTE ???
         JE          $               < OUI, S T O P...
         ADRI        -HZERO,A        < DECODAGE BINAIRE.
         JAL         $               < E R R E U R !!!
         CPI         BASE10-Z        < CHIFFRE DECIMAL ???
         JLE         YOOP3           < OUI.
         ADRI        -HA+HNEUF+Z,A   < DECODAGE SUITE.
         CPI         BASE16-Z        < VALIDATION...
         JG          $               < E R R E U R !!!
YOOP3:   EQU         $
         SCRS        NBITCX
         SCLD        NBITCX          < CONCTENATION DANS A.
         ADRI        -I,Y            < DECOMPTAGE DES 4 CHIFFRES.
         CPZR        Y               < FIN ???
         JG          YOOP2           < NON, ENCORE AU MOINS 1...
         STB         O,W             < OUI, RANGEMENT 1 MOT,
         ADRI        P,W             < PROGRESSION ADRESSE MOT...
         JMP         YOOP1           < ET C'EST REPARTI...
:F
:F
< <<'SISP CMS5 BOOT VISU'
ED'SISP CMS5 DMKDEF'
IN0
         NLS
<
<
<        S I S P   C M S 5   D M K D E F  :
<
<
         LST
         DC          KTDEFS          < AUTORISATION DES TESTS DE 'TDEFS'.
:F
:F
< <<'SISP CMS5 DKMDEF'
ED'SISP CMS5 DOL1'
IN0
         NLS
<
<
<        S I S P   C M S 5   D O L 1  :
<
<
<        FONCTION :
<                      CETTE PROCEDURE SAUVEGARDE
<                    LE "$" COURANT DANS 'DOLAR2',
<                    ET REPOSITIONNE LE "$" EN
<                    MEMOIRE BASSE ('DOLAR1').
<
<
DOLAR2:  VAL         $-ZERO
         IF          MEMORY*UMEM-DOLAR2,XEIF%1,XEIF%1,
         IF          E R R E U R  D ' I M P L A N T A T I O N
XEIF%1:  VAL         ENDIF
XWORK:   VAL         DOLAR1-DOLAR2
         LST
         $EQU        $+XWORK         <<<<< MEMOIRE BASSE
:F
:F
< <<'SISP CMS5 DOL1'
ED'SISP CMS5 DOL2'
IN0
         NLS
<
<
<        S I S P   C M S 5   D O L 2  :
<
<
<        FONCTION :
<                      CETTE PROCEDURE SAUVEGARDE
<                    LE "$" COURANT DANS 'DOLAR1',
<                    ET REPOSITIONNE LE "$" EN
<                    MEMOIRE HAUTE ('DOLAR2').
<
<
DOLAR1:  VAL         $-ZERO
         IF          MEMORY*UMEM-DOLAR1,,,XEIF%1
         IF          E R R E U R  D ' I M P L A N T A T I O N
XEIF%1:  VAL         ENDIF
XWORK:   VAL         DOLAR2-DOLAR1
         LST
         $EQU        $+XWORK         <<<<< MEMOIRE HAUTE
:F
:F
< <<'SISP CMS5 DOL2'
ED'SISP CMS5 DSEC'
IN0
         NLS
<
<
<        S I S P   C M S 5   D S E C  :
<
<
         LST
<
<
<        F O R M A T   ' P S T S '  :
<
<
         DSEC
PSTS:    EQU         $
SA:      WORD        K
SB:      WORD        K
SX:      WORD        K
SY:      WORD        K
SC:      WORD        NIL
SL:      WORD        NIL
SW:      WORD        NIL
SK:      WORD        NIL
SP:      WORD        NIL
SS:      WORD        K
SSLO:    WORD        NIL
SSLE:    WORD        NIL
XLPSTS:: VAL         $-PSTS          < LONGUEUR D'UNE 'PSTS'.
<
<
<        F O R M A T   ' P S T H '   F O R M A T   ' I C '  :
<
<
         DSEC
PSTH:    EQU         $
HC:      WORD        NIL
HK:      WORD        NIL
HP:      WORD        NIL
HS:      WORD        K
LPSTH::  VAL         $-PSTH          < LONGUEUR D'UNE 'PSTH'.
XICSA0:: VAL         K               < VALEUR INITIALE DE 'ICSAV'...
ICSAV:   WORD        XICSA0          < INDICATEUR DE SAUVEGARDE.
LONGIC:: VAL         $-PSTH          < LONGUEUR D'UN 'IC'.
:F
:F
< <<'SISP CMS5 DSEC'
ED'SISP CMS5 FTHDEB'
IN0
         NLS
<
<
<        S I S P   C M S 5   F T H D E B  :
<
<
         LST
         PAGE
<
<
<        F A U X   P R O L O G U E   D E   T A C H E   H A R D W A R E  :
<
<
<        NOTA :
<                      ON L'APPELLE "FAUX PROLOGUE"
<                    CAR EN EFFET, ON NE GENERE PAS
<                    LE SYMBOLE 'THXX', AINSI QUE LE
<                    CODE DE MASQUAGE GENERAL DES
<                    INTERRUPTIONS. IL EST UTILISE
<                    PAR LE DEFAUT SECTEUR...
<
<
<        PARAMETRE D'ASSEMBLAGE :
<                    NEANT...
<
<
         PSR         A,B,X,Y         < SAUVEGARDE A,B,X,Y...
         PSR         L,W             < ...L,W DE LA TACHE INTERROMPUE.
         USE         C,PSTH          < TEMPORAIREMENT! RAPPELONS QUE
                                     < LE 'C' DE NOTRE 'PSTH' BASE
                                     < NOTRE 'IC'.
                                     < ET RAPPELONS QUE 'PSTH' ET 'IC'
                                     < UTILISENT LA MEME 'DSEC'.
                                     < ET 'PSTH' UTILISENT LA MEME DSEC
         USE         L,COM+DEPCS     < POUR RAISONS D'ASSEMBLAGE...
         IC          ICSAV
         LR          C,L             < L BASE LE 'IC' DE NOTRE TACHE.
         CALL        #SISP CMS5 BASE C#
         USE         C,COM+DEPCS
         CALL        #SISP CMS5 PSRSLO#
                                     < SAVE (SLO,SLE) DE LA TACHE INTERROMPUE.
         PSR         L               < SAUVEGARDE DE 'L', BASE DE NOTRE
                                     < 'IC'...
         USE         L,PSTH          < PEUT ETRE UTILE...
:F
:F
< <<'SISP CMS5 FTHDEB'
ED'SISP CMS5 GENPIL1'
IN0
         NLS
<
<
<        S I S P   C M S 5   G E N P I L 1  :
<
<
<        FONCTION :
<                      CETTE PROCEDURE GENERE UNE
<                    PILE EN MEMOIRE HAUTE, PUIS
<                    REPOSITIONNE LE "$" EN MEMOIRE
<                    BASSE.
<
<
<        PARAMETRES :
<                    XWPILE=LONGUEUR-MOTS DE LA PILE.
<
<
         LST
         CALL        #SISP CMS5 DOL2#
       @@
         CALL        #SISP CMS5 GENPIL2#
         CALL        #SISP CMS5 DOL1#
:F
:F
< <<'SISP CMS5 GENPIL1'
ED'SISP CMS5 GENPIL2'
IN0
         NLS
<
<
<        S I S P   C M S 5   G E N P I L 2  :
<
<
<        FONCTION :
<                      CETTE PROCEDURE GENERE LA
<                    PARTIE "UTILE" D'UNE PILE
<                    EN Y IMPLEMENTANT LE "$",
<                    CE QUI PERMET DE CONNAITRE
<                    A POSTERIORI CE QUI AURA
<                    ETE UTILISE...
<
<
<        PARAMETRE :
<                    XWPILE=LONGUEUR-MOTS DEMANDEE POUR LA PILE.
<
<
XWOR%7:  VAL         D               < CONSTANTE LOCALE.
         LST
         DO          XWPILE-XWOR%7
         WORD        $               < AFIN DE CONNAITRE LE STRICT MINIMUM...
         NLS
XXPILI: @
XWOR%1:  VAL         KOLTED=FMASK+KOL0=FVAL+KOLTEF=FMASK+KOL1=FVAL
XWOR%2:  VAL         KOLC=FMASK+KDP=FVAL?FCTES
XWOR%5:  VAL         MSYMBI=FMASK+KOL0=FVAL+MSYMBL=FMASK+XWOR%1=XWOR%2=FVAL
XWOR%3:  VAL         XWOR%5=FCSYMT   < TEST DE L'EXISTENCE DE 'XXPILI' ???
         IF          XWOR%3,XEIF%,,XEIF%
XWOR%6:  VAL         $-ZERO          < SAUVEGARDE DU '$'...
<*******************************************************************************
         WORD        ZERO+D          < LA VALEUR GENEREE SERA 'NIL' SI L'ON
XWOR%4:  VAL         '0000000@@@@    < SE SITUE DANS UNE 'DSEC' : RECUPERATION..
<*******************************************************************************
XWOR%6:  VAL         $-ZERO-XWOR%6
         $EQU        $-XWOR%6        < ANNULATION DU CODE GENERE...
XWOR%6:  VAL         NIL-ZERO        < ABSOLUTISATION DE 'NIL'.
         IF          XWOR%4-XWOR%6,,XEIF%9,
         LST
         IF          ATTENTION : ON N'EST PAS DANS UNE 'DSEC', ET
         IF          'XXPILI' N'A PAS ENCORE ETE DEFINI !!!
         NLS
XEIF%9:  VAL         ENDIF
         IF          XWOR%4-XWOR%6,XEIF%9,,XEIF%9
         LST
         DO          XXPILJ
         WORD        XXDEF0
         NLS
XEIF%9:  VAL         ENDIF
XEIF%:   VAL         ENDIF
         IF          XWOR%3,,XEIF%,
         LST
         DO          XXPILI
         WORD        XXDEF0          < POUR LE DEFAUT SECTEUR !!!
         NLS
XEIF%:   VAL         ENDIF
         LST
         DO          XWOR%7
         WORD        XXBAC0          < INDICATEUR DE SOMMET DE LA PILE...
:F
:F
< <<'SISP CMS5 GENPIL2'
ED'SISP CMS5 IC'
IN0
         NLS
<
<
<        S I S P   C M S 5   I C  :
<
<
XWOR%1:  VAL         XWKNIV>DGNS
         LST
IC@@:    EQU         $
         CALL        #SISP CMS5 ICPSTH#
         WORD        XICSA0          < ICSAV
:F
:F
< <<'SISP CMS5 IC'
ED'SISP CMS5 ICPSTH'
IN0
         NLS
<
<
<        S I S P   C M S 5   I C P S T H  :
<
<
XWOR%1:  VAL         XWKNIV>DGNS
         LST
         WORD        IC@@            < C POINTE SUR L'INTERRUPT-
                                     < CONTEXT LUI-MEME, CELA POUR
                                     < PERMETTRE LE POSITIONNEMENT DE
                                     < ICSAV EN PROLOGUE DE TACHE HARD
                                     < SANS TOUCHER AUX REGISTRES DE
                                     < LA TACHE INTEROMPUE N'AYANT PAS
                                     < PARTICIPE AUX CHANGEMENTS DE CONTEXTES.
         NLS
         IF          XWKNIV-NUMDEF,,XEIF%2,
XWOR%1:  VAL         XWKNIV
         LST
         WORD        PILTH@          < K,
         NLS
XEIF%2:  VAL         ENDIF
         IF          XWKNIV-NUMDEF,XEIF%2,,
XWOR%1:  VAL         XWKNIV
         LST
         WORD        PLTH@@          < K,
         NLS
XEIF%2:  VAL         ENDIF
XWOR%1:  VAL         XWKNIV>DGNS
         LST
         WORD        TH@@            < P,
         WORD        SMST            < S.
XWKNIV:  VAL         XWKNIV+I        < NIVEAU HARDWARE SUIVANT (SI EXISTE...).
:F
:F
< <<'SISP CMS5 ICPSTH'
ED'SISP CMS5 IREST'
IN0
         NLS
<
<
<        S I S P   C M S 5   I R E S T  :
<
<
         LST
         LYI         -YENA           < A PRIORI, ON SUPPOSE QU'IL N'Y
                                     < AURA PAS A SIMULER D'ACTIVATION
                                     < DE 'TACHE HARDWARE'...
         IF          YENA-K,,,XEIF%
         IF          A T T E N T I O N  : L'ADRESSE 'YENA' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         LA          TYPDEF          < ACCES AU TYPE DE LA TACHE
                                     < INTERROMPUE PAR L'EVENTUEL
                                     < DEFAUT SECTEUR.
         CPI         TYPTH           < S'IL S'AGIT D'UNE 'TACHE HARDWARE',
                                     < IL FAUT LAISSER LES INTERRUPTIONS
                                     < MASQUEES, AFIN QUE LA TACHE 'HARDWARE'
                                     < REPRENNE LA MAIN IMMEDIATEMENT, DANS
                                     < UN CONTEXTE IDENTIQUE A CELUI QU'ELLE
                                     < POSSEDAIT LORSQU'ELLE FUT INTERROMPUE
                                     < DANS 'TDEFS'...
         JE          REST%9          < ET OUI, C'EST UNE 'TACHE HARDWARE',
                                     < IL FAUT DEMASQUER LES INTERRUPTIONS.
<
< CAS DES TACHES 'SOFTWARES' (OU BIEN
< DES TACHES 'HARDWARES' ENCORE INTER-
< RUPTIBLES, C'EST-A-DIRE AVANT LE
< MASQUAGE DES INTERRUPTIONS) :
<
         LA          MKDEF           < NON, C'ETAIT UNE 'TACHE SOFTWARE',
                                     < ALLONS VOIR LE MOT 'MKDEF' :
                                     < ('MKDEF')='SMASK0' : LES INTERRUPTIONS
                                     < N'ETAIENT PAS MASQUEES AU MOMENT DU
                                     < DEFAUT SECTEUR.
                                     < PAR CONTRE SI 'MKDEF' EST SUPERIEUR
                                     < A 'SMASK0', ALORS ELLES L'ETAIENT...
         CPI         SMASK0
         JG          REST%5          < INTERRUPTIONS MASQUEES...
         LYI         K               < LORSQUE LES INTERRUPTIONS SONT A
                                     < DEMASQUER, ON FORCE L'EXECUTION
                                     < D'UN 'ACTD', AFIN DE PRENDRE EN
                                     < COMPTE DES 'IPI' EMIS ET PRIS EN
                                     < COMPTE PAR LA MICRO-MACHINE MAIS
                                     < POUR LESQUELS LE DEFAUT SECTEUR EST
                                     < APPARU AVANT QUE LA TACHE 'ALARME'
                                     < NE SE MASQUE ; UN 'IPI' SITUE A
                                     < LA FIN DE CETTE SEQUENCE N'EST ALORS
                                     < PAS SUFFISANT, CAR EN EFFET LA BOITE
                                     < AUX LETTRES DU PROCESSEUR A ETE
                                     < REMISE A '0' AVANT LE DEFAUT SECTEUR...
         JMP         REST%2          < INTERRUPTIONS DEMASQUEES...
<
< CAS DES TACHES 'HARDWARES' INTERROMPUES DANS 'TDEFS' :
<
REST%9:  EQU         $               < CAS DES 'TACHES HARDWARES'.
         LA          IDEDEF          < (A)=NUMERO DE LA 'TACHE HARDWARE',
         LYI         NTH0            < A PRIORI, ON SUPPOSE QU'IL
                                     < S'AGIT DE LA TACHE ALARME ('0').
                                     < EST-CE LA TACHE ALARME ?
         JAE         REST%5          < OUI, SA REACTIVATION EST SIMPLE...
                                     < (DE PLUS ON VA LAISSER LES INTER-
                                     < RUPTIONS MASQUEES...)
XWORK7:  VAL         S               < AMPLITUDE DU DECALAGE...
         CPI         BITSIG+XWORK7
         JG          REST%4          < OK, LA REACTIVATION VA BIEN SE PASSER.
         BSR         ASYSER          < IL NE S'AGIT PAS A PROPREMENT PARLER
                                     < D'UNE ERREUR SYSTEME... MAIS LA REACTI-
                                     < VATION VA MAL SE PASSER CAR LA MICRO-
                                     < MACHINE FAIT UN DECALAGE ARITHMETIQUE
                                     < ET NON PAS LOGIQUE SUR LE CONTENU DE 'X'
                                     < QUEL SCANDALE !!!
REST%4:  EQU         $
         LR          A,X             < NON, METTONS DANS 'X' SON NUMERO.
         LAI         K               < ET GENERONS UN MASQUE DE MISE
                                     < DE MISE A JOUR DU REGISTRE 'HV'.
         SBT         NBITAB-XWORK7-TH0,X
                                     < (ON FAIT '-1', CAR LE REGISTRE
                                     < 'H' RECEVRA LE CONTENU DE 'X'
                                     < DECALE D'UNE UNITE A DROITE, IL
                                     < FAUT DONC FAIRE UN DECALAGE D'UNE
                                     < UNITE A GAUCHE AVANT...
         LR          A,X             < (X)=MASQUE DE MISE A JOUR DE 'HV'
                                     <     DECALE D'UNE UNITE A GAUCHE.
         LYI         YENA            < AFIN DE SIMULER UNE INTERRUPTION
                                     < SUR LE NIVEAU CORRESPONDANT...
         JMP         REST%5          < VERS LA SIMULATION DE L'INTERRUPTION,
                                     < MAIS EN LAISSANT LES VRAIES INTER-
                                     < RUPTIONS MASQUEES...
REST%2:  EQU         $
         LAI         K               < INTERRUPTIONS NON MASQUEES : IL
         SBT         IOM             < FAUT DONC DEMASQUER 'IOM',
         SBT         IPM             < ET 'IPM'.
         JMP         REST%6          < VERS LE DEMASQUAGE DE 'IOM' ET 'IPM'.
REST%5:  EQU         $
         LAI         K               < LES INTERRUPTIONS ETAIENT MASQUEES,
                                     < IL FAUT DONC QU'ELLES LE RESTENT...
REST%6:  EQU         $
         SBT         LCM             < DANS TOUS LES CAS, ON DEMASQUE 'LCM',
         SBT         V               < ET ON REINITIALISE LES
         SBT         C               < INDICATEURS 'V' ET 'C'.
       #@PSR         A               < #SISP CMS5 KREG#
         LAI         -TYPTS-TYPTH
         STA         TYPDEF          < REINITIALISATION DE 'TYPDEF'
         LAI         -NMTS-NMTH
         STA         IDEDEF          < ET DE 'IDEDEF'.
         STZ         MKDEF           < AVANT LE DEMASQUAGE EVENTUEL DES
                                     < INTERRUPTIONS, ON REINITIALISE
                                     < 'MKDEF' AUTORISANT AINSI UN DEFAUT
                                     < SECTEUR A APPARAITRE IMMEDIATEMENT !!!
         STZ         DEFOK           < INDICATION DE FIN DE TRAITEMENT
                                     < DU DEFAUT SECTEUR...
         LA          SC
         LR          A,C             < RESTAURATION DE LA BASE 'C'.
                                     < (MAINTENANT QU'ON N'EN A PLUS BESOIN)
         PLR         A
<
< REACTIVATION EVENTUELLE D'UNE 'TACHE
< HARDWARE' INTERROMPUE PAR LE DEFAUT
< SECTEUR : CETTE REACTIVATION, ETANT
< DONNE LA NON-INTERRUPTIBILITE DES
< 'TACHES HARDWARES' (SAUF AU DEFAUT
< SECTEUR), NE PORTE QUE SUR UNE SEULE
< TACHE ; S'IL S'AGIT DE LA TACHE D'ALARME,
< IL SUFFIT DE FAIRE UN 'ACTD', LE
< CHAMP 'MALARM' ETANT REGENERE PAR
< 'TDEFS', PAR CONTRE POUR LES AUTRES
< 'TACHE HARDWARES', IL FAUT SE BRANCHER
< DANS LE MICRO-PROGRAMME AU MODULE
< DE CHANGEMENT DES CONTEXTES PARTIELS,
< ET DE LA MISE A JOUR DU REGISTRE
< 'HV'...
< ON NOTERA AVEC ATTENTION QUE LES INTERRUPTIONS
< SONT LAISSEES A L'ETAT MSAQUEES PAR LE
< 'RESTART' AFIN QUE LA TACHE 'HARDWARE' SOIT
< CONTENTE DU CONTEXTE QU'ON LUI FOURNIT...
< A T T E N T I O N  : DERRIERE LE 'ROMB',
< OU BIEN L''ACTD', LES INTERRUPTIONS SE
< TROUVENT DEMASQUEES PAR L''ACQ' QUI TER-
< MINE CHAQUE 'TACHE HARDWARE', MAIS CELA
< N'A AUCUNE IMPORTANCE ; EN EFFET D'UNE
< MANIERE GENERALE SI UNE 'TACHE HARDWARE'
< EST ACTIVE C'EST QUE LES INTERRUPTIONS
< N'ETAIENT PAS MASQUEES LORS DE SON APPEL ;
< LA SEULE EXCEPTION EST LA TACHE ALARME ('0')
< A L'EXCEPTION DU TRAITEMENT DES 'IPI' ;
< MAIS QU'IL Y AIT ALORS DEFAUT SECTEUR
< OU PAS, LES INTERRUPTIONS SE TROUVENT
< DEMASQUEES APRES L'ALARME, DONC IL EST
< LOGIQUE LORS DU 'RESTART' DE FAIRE DE
< MEME...
<
         CPZR        Y               < Y-A-T'IL UNE REACTIVATION DE
                                     < 'TACHE HARDWARE' ???
         JL          REST%1          < NON, C'EST UNE 'TACHE SOFTWARE'
                                     < QUI A ETE INTERROMPUE...
         JG          REST%3          < OUI, ET CE N'EST PAS LA TACHE ALARME.
         ACTD                        < OUI, REACTIVATION DE LA TACHE ALARME ;
                                     < NOTONS QUE CET 'ACTD' ECRASE LE
                                     < CHAMP 'MALARM' MAIS QUE CE DERNIER
                                     < SERA RESTAURE AVANT DE SORTIR DE
                                     < 'TDEFS'...
         JMP         REST%1
REST%3:  EQU         $
         ROMB                        < ET ON SIMULE UNE INTERRUPTION SUR
                                     < LE NIVEAU CORRESPONDANT ; ON A :
                                     < (Y)=ADRESSE DU MICRO-PROGRAMME DE
                                     <     CHANGEMENT DE CONTEXTES PARTIELS,
                                     < (X)=MASQUE DECALE D'UNE UNITE A GAUCHE
                                     <     A SUPERPOSER A 'HV'.
REST%1:  EQU         $
         RST                         < REMISE A '0' DES INDICATEURS 'V' ET
                                     < 'C', DEMASQUAGE DES INTERRUPTIONS 'LCM',
                                     < AINSI QUE DES INTERRUPTIONS 'IOM' ET
                                     < 'IPM' SI ELLES ETAIENT MASQUEES AU
                                     < MOMENT DU DEFAUT SECTEUR.
                                     < (CE DEMASQUAGE N'A LIEU COMME DEJA
                                     < MENTIONNE QUE SI L'ON N'A PAS EXECUTE
                                     < NI UN 'ROMB', NI UN 'ACTD')
         LRM         A               < MISE EN PLACE D'UN MASQUE DE SELECTION
XWOR%1:  VAL         COSBT?V=FMASK(K=FCINST
         WORD        COSBT?C=FMASK(K?XWOR%1=FCINST
                                     < DES INDICATEURS 'V' ET 'C' DE 'ST'.
         AND         SS              < EN EFFET, ON NE PEUT PRENDRE
                                     < BRUTALEMENT 'SS' COMME JE L'AVAIS
                                     < FAIT PRECEDEMMENT : DANS LE CAS OU
                                     < LA 'TACHE SOFTWARE' A ETE INTERROMPUE
                                     < PAR UNE 'TACHE HARDWARE', ELLE MEME
                                     < INTERROMPUE PAR LE DEFAUT SECTEUR, LE
                                     < REGISTRE 'S' DE LA 'TACHE SOFTWARE'
                                     < EST EN GENERAL RECUPERE DANS LA 'PSTH'
                                     < DE LA 'TACHE HARDWARE', AUQUEL IL Y A
                                     < DES BITS POSITIONNES DANS LE CHAMP
                                     < 'MALARM', ET EN PARTICULIER LE
                                     < FATIDIQUE BIT 'STOP'.
         SST                         < REINIALISATION DES INDICATEURS
                                     < 'V' ET 'C' (LES AUTRES 'MS' ET
                                     < 'SVCS' RESTENT INCHANGES).
         PLR         A,X,Y           < RESTAURATION DES REGISTRES 'A', 'X', 'Y'.
         PLR         W               < RESTAURATION DE LA BASE 'W'.
         IPI                         < ET OUI, ON ENVOIE ICI UN 'IPI' TOUT
                                     < SEUL ; EN EFFET LE DEFAUT SECTEUR AYANT
                                     < PU APPARAITRE DANS UNE PHASE MASQUEE
                                     < DANS LAQUELLE UN 'IPI' A ETE EMIS,
                                     < CE DERNIER ('IPI') A ETE PERDU ; AINSI
                                     < POUR RECUPERER TOUS LES 'IPI' PERDUS,
                                     < ON EN ENVOIE UN TOUT SEUL ICI
                                     < QUI N'AURA D'EFFET QUE SUR LES PROCES-
                                     < SEURS AYANT LEUR BOITE AUX LETTRES
                                     < POSITIONNEE...
:F
:F
< <<'SISP CMS5 IREST'
ED'SISP CMS5 JREST'
IN0
         NLS
<
<
<        S I S P   C M S 5   J R E S T  :
<
<
<        FONCTION :
<                      'JREST' A ETE CREE AFIN
<                    DE FAIRE PROGRESSER LE
<                    CARACTERE "POUR-CENT" DE
<                    'IREST'...
<
<
         LST
         CALL        #SISP CMS5 IREST#
:F
:F
< <<'SISP CMS5 JREST'
ED'SISP CMS5 MKDEF'
IN0
         NLS
<
<
<        S I S P   C M S 5   M K D E F  :
<
<
         LST
         IC          KTDEFS          < INHIBITION DES TESTS DE 'TDEFS'.
:F
:F
< <<'SISP CMS5 MKDEF'
ED'SISP CMS5 PSTH'
IN0
         NLS
<
<
<        S I S P   C M S 5   P S T H  :
<
<
XWOR%1:  VAL         XWKNIV
         LST
PSTH@@:  EQU         $
         CALL        #SISP CMS5 ICPSTH#
:F
:F
< <<'SISP CMS5 PSTH'
ED'SISP CMS5 PSTH-IC'
IN0
         NLS
<
<
<        S I S P   C M S 5   P S T H - I C  :
<
<
<        FONCTION :
<                      CETTE PROCEDURE PERMET
<                    DE GENERER L'ENSEMBLE DES
<                    'PSTH' ET DES 'IC' DE CMS5...
<
<
         LST
         PAGE
<
<
<        P S T H  :
<
<
<        NOTA :
<                      LA GENERATION DES 'PSTH'
<                    EST SEMI-PARAMETREE ; ELLE
<                    DOIT ETRE MODIFIEE A LA MAIN,
<                    EN CAS DE CHANGEMENT DANS LA
<                    CONFIGURATION...
<
<
XWKNIV:  VAL         NTH0            < NIVEAU DE 'TH0'.
         DO          NMTH
         CALL        #SISP CMS5 PSTH#
XWKNIV:  VAL         NUMDEF          < NIVEAU HARD '10 (DEFSEC).
         CALL        #SISP CMS5 PSTH#
         PAGE
<
<
<        ' I  C '  :  I N T E R R U P T   C O N T E X T S  :
<
<
<        NOTA :
<                      LA GENERATION DES 'IC'
<                    EST SEMI-PARAMETREE, ET DOIT
<                    DONC ETRE MODIFIEE A LA MAIN
<                    EN CAS DE CHANGEMENTS DANS LA
<                    CONFIGURATION...
<
<
XWKNIV:  VAL         NTH0            < NIVEAU DE 'TH0'.
         DO          NMTH
         CALL        #SISP CMS5 IC#
XWKNIV:  VAL         NUMDEF          < NIVEAU HARD '10 (DEFSEC).
         CALL        #SISP CMS5 IC#
:F
:F
< <<'SISP CMS5 PSTH-IC'
ED'SISP CMS5 RST'
IN0
         NLS
<
<
<        S I S P   C M S 5   R S T  :
<
<
         LST
         LAI         K               < CLEAR DU REGISTRE 'A' AFIN DE LIRE
         RST                         < LE REGISTRE 'ST' DANS 'A' PAR 'RST'.
:F
:F
< <<'SISP CMS5 RST'
ED'SISP CMS5 SST'
IN0
         NLS
<
<
<        S I S P   C M S 5   S S T  :
<
<
         LST
         LAI         K               < CLEAR DU REGISTRE 'A' AFIN DE LIRE
         SST                         < LE REGISTRE 'ST' DANS 'A' PAR 'SST'.
:F
:F
< <<'SISP CMS5 SST'
ED'SISP CMS5 THDEB'
IN0
         NLS
<
<
<        S I S P   C M S 5   T H D E B  :
<
<
<        FONCTION :
<                      CETTE PROCEDURE PERMET
<                    DE GENERE LE PROLOGUE DE
<                    CHAQUE TACHE HARDWARE DU
<                    SYSTEME...
<
<
<        PARAMETRE :
<                    XWKNIV=NIVEAU DE LA TACHE HARDWARE.
<
<
         LST
         PAGE
<
<
<        P R O L O G U E   D E   T A C H E   H A R D W A R E  :
<
<
XWOR%:   VAL         XWKNIV>DGNS
TH@@:    EQU         $
         PSR         A,B,X,Y         < SAUVEGARDE A,B,X,Y...
         PSR         L,W             < ...L,W DE LA TACHE INTERROMPUE
         USE         C,PSTH          < TEMPORAIREMENT! RAPPELONS QUE
                                     < LE 'C' DE NOTRE 'PSTH' BASE
                                     < NOTRE 'IC'.
                                     < ET RAPPELONS QUE 'PSTH' ET 'IC'
                                     < UTILISENT LA MEME 'DSEC'.
                                     < ET 'PSTH' UTILISENT LA MEME DSEC
         USE         L,COM+DEPCS     < POUR RAISONS D'ASSEMBLAGE...
         IC          ICSAV
         LR          C,L             < L BASE LE 'IC' DE NOTRE TACHE...
         CALL        #SISP CMS5 BASE C#
         USE         C,COM+DEPCS
         USE         L,DCT0
<
< LE MASQUAGE GENERAL DES 'IT' N'EST UTILE QUE DANS LES
< TACHES HARD AUTRES QUE DEFSEC
<
         NLS
         IF          XWKNIV-NUMDEF,,XEIF%,XEIF%
         LST
         BSR         ASMMK           < MASQUAGE GENERAL DES IT,
                                     < NOTA : ON NE PEUT APPELER CETTE
                                     < ROUTINE QU'APRES AVOIR CORRECTEMENT
                                     < CHARGE LE REGISTRE 'C', C'EST POURQUOI
                                     < ON REINITIALISE 'C' AVANT D'APPELER
                                     < ASMMK!!!!
         RDHV                        < APRES MASQUAGE DES INTERRUPTIONS, LISONS
                                     < LE REGISTRE 'HV' DES TACHES HARDWARES
                                     < EN COURS,
         STA         SAVHV           < QUE L'ON SAUVEGARDE DANS 'SAVHV', QUE
                                     < LE DEFAUT SECTEUR PEUT ECRASER (MAIS
                                     < AVEC LA MEME VALEUR...),
         IC          COMPTH          < ET VALIDONS LA VALEUR DE 'SAVHV'...
         NLS
XEIF%:   VAL         ENDIF
         LST
         CALL        #SISP CMS5 PSRSLO#
                                     < SAVE (SLO,SLE) DE LA TACHE INTERROMPUE.
         PSR         L               < SAUVEGARDE DE 'L', BASE DE NOTRE
                                     < 'IC'.
         USE         L,PSTH          < PEUT ETRE UTILE...
:F
:F
< <<'SISP CMS5 THDEB'
ED'SIS CMS5'
IN0
         PAGE
<
<
<        A S S E M B L A G E   D E   C M S 5   L E   M A G N I F I Q U E  :
<
<
NSDKF::  VAL         '0FE0           < ET OUI, MON BON MONSIEUR, SI ON NE
                                     < COMMUNIQUE PAS CETTE VALEUR INFERIEURE
                                     < A LA VALEUR REELLE ('1000), LA COPIE
                                     < DKF --> DKM SE MET EN 'WATCHDOG' SUR
                                     < LES SECTEURS SUPERIEURS A 'NSDKF' !!!
         DATE
         PAGE
         PAGE
         CALL        #SIS CMS5 1#
         DATE
         PAGE
         PAGE
         CALL        #SIS CMS5 2#
         DATE
         PAGE
         PAGE
         CALL        #SIS CMS5 3#
         DATE
         PAGE
         PAGE
         CALL        #SIS CMS5 4#
         DATE
         PAGE
         PAGE
         CALL        #SIS CMS5 5#
         DATE
         PAGE
         PAGE
         CALL        #SIS CMS5 6#
         DATE
         PAGE
         PAGE
         CALL        #SIS CMS5 7#
         DATE
         PAGE
         PAGE
         CALL        #SIS CMS5 8#
         DATE
         PAGE
         PAGE
         CALL        #SIS CMS5 9#
         DATE
         PAGE
         PAGE
         CALL        #SIS CMS5 10#
         DATE
         PAGE
         PAGE
         CALL        #SIS CMS5 11#
         DATE
         PAGE
         PAGE
         CALL        #SIS CMS5 12#
         DATE
         PAGE
         PAGE
         CALL        #SIS CMS5 13#
         DATE
         PAGE
         PAGE
         CALL        #SIS CMS5 14#
         DATE
         PAGE
         PAGE
         CALL        #SIS CMS5 15#
         DATE
         PAGE
         PAGE
<
<
<        S U P P R E S S I O N   D E   C E R T A I N E S   S Y S E R S  :
<
<
XSAVD1:  EQU         $               < SAUVEGARDE DU DOLLAR...
         $EQU        SYSCBM
         NOP                         < PREMIER DEFAUT SUR LE 'CBM-TV'.
         $EQU        SYSCBN
         NOP                         < DEUXIEME DEFAUT SUR LE 'CBM-TV'.
         $EQU        SYSCBJ
         NOP                         < PREMIER DEFAUT SUR LE 'CBJ-TV'.
         $EQU        SYSCBK
         NOP                         < DEUXIEME DEFAUT SUR LE 'CBJ-TV'.
         $EQU        ZZZDKM
         NOP                         < FAUSSE FIN DE CYLINDRE SUR 'DKM'.
         $EQU        DEFCBM
         NOP                         < DEFAUT SUR 'CBM' AU RESTART.
<
< RETOUR AU DOLLAR :
<
         $EQU        XSAVD1
XWOR%1:  VAL         '00000000000@   < VAUDRA '0 SI 'LST' EN COURS...
         IF          XWOR%1-K,XEIF%,,XEIF%
         PAGE
         PAGE
         EST
XEIF%:   VAL         ENDIF
         END
:F
:F
< <<'SIS CMS5'
ED'SISP CMS5 NBIT1'
IN0
         NLS
<
<
<        S I S P   C M S 5   N B I T 1  :
<
<
<        FONCTION :
<                      CETTE PROCEDURE GENERE
<                    UNE LISTE DE BITS A 1.
<
<
<        PARAMETRE :
<                    XWORK7=NOMBRE DE BITS A 1 DANS LA LISTE.
<
<
         LST
XWOR%7:  VAL         XWORK7          < NOMBRE DE BITS CONSECUTIFS A '1.
         NTRN
XWOR%8:  VAL         XWOR%7/NBITMO   < NOMBRE DE MOTS PLEINS.
XWOR%9:  VAL         XWOR%7/NBITMO(K=FCREST < NOMBRE DE BITS RESIDUELS.
         TRN
         IF          XWOR%8,XEIF%,XEIF%,
         DO          XWOR%8
         WORD        MMOT
XEIF%:   VAL         ENDIF
         IF          XWOR%9,XEIF%,XEIF%,
XWOR%6:  VAL         NBITMO-XWOR%9   < NOMBRE DE BITS RESTANT A '0.
         WORD        BIT>XWOR%6-N)MMOT
XEIF%:   VAL         ENDIF
:F
:F
< <<'SISP CMS5 NBIT1'
ED'SISP CMS5 KREG'
IN0
<*******************************************************************************
       @@
XWOR%1:  VAL         '0000000@@@@    < RECUPERATION DE L'INSTRUCTION PRECEDENTE.
<*******************************************************************************
         NLS
<
<
<        S I S P   C M S 5   K R E G  :
<
<
<        FONCTION :
<                      CETTE PROCEDURE COMPTE
<                    LE NOMBRE DE REGISTRES
<                    EMPILES OU DEPILES ET EN
<                    FAIT LE CUMUL DANS 'XKREG'
<                    EN NEGATIF...
<
<
<        UTILISATION :
<                      CETTE PROCEDURE DOIT S'APPELER A
<                    L'AIDE D'UN EOT IMPLICITE DE FACON
<                    A RECUPERER LE CODE DE L'INSTRUCTION
<                    COURANTE ; ELLE CUMULE LE NOMBRE DE
<                    REGISTRES EMPILES OU DEPILES DANS
<                    'XKREG' EN COMPLEMENT A 2...
<
<
         LST
XWOR%1:  VAL         XWOR%1(MOCD     < ON NE CONSERVE QUE LA LISTE DES
                                     < REGISTRES EMPILES...
XWOR%2:  VAL         BIT>NBITCX-N    < MASQUE D'UN CHIFFRE HEXA-DECIMAL.
         DO          NBITMO
XWOR%1:  VAL XWOR%1=K=FCPUSH-NBITMO+B)MMOT+N(XWOR%2+CORBT=FMASK+XWOR%1=FCINST
         DO          NBITMO
XKREG:   VAL         0=FCPULL-NBITMO=FCSIGN+XKREG
:F
:F
< <<'SISP CMS5 KREG'
ED'SISP CMS5 REC'
IN
< SISGEN CMS5 PROC
RL'SISGEN CMS5 PROC''XXXX'
< SIS CMS5 1
RL'SIS CMS5 1''XXXX'
< SIS CMS5 2
RL'SIS CMS5 2''XXXX'
< SIS CMS5 3
RL'SIS CMS5 3''XXXX'
< SIS CMS5 4
RL'SIS CMS5 4''XXXX'
< SIS CMS5 5
RL'SIS CMS5 5''XXXX'
< SIS CMS5 6
RL'SIS CMS5 6''XXXX'
< SIS CMS5 7
RL'SIS CMS5 7''XXXX'
< SIS CMS5 8
RL'SIS CMS5 8''XXXX'
< SIS CMS5 9
RL'SIS CMS5 9''XXXX'
< SIS CMS5 10
RL'SIS CMS5 10''XXXX'
< SIS CMS5 11
RL'SIS CMS5 11''XXXX'
< SIS CMS5 12
RL'SIS CMS5 12''XXXX'
< SIS CMS5 13
RL'SIS CMS5 13''XXXX'
< SIS CMS5 14
RL'SIS CMS5 14''XXXX'
< SIS CMS5 15
RL'SIS CMS5 15''XXXX'
:F
:F
< <<'SISP CMS5 REC'
ED'SISP CMS5 TAB1'
IN0
         NLS
<
<
<        S I S P   C M S 5   T A B 1  :
<
<
<        FONCTION :
<                      CETTE PROCEDURE GENERE
<                    LA TABULATION STANDARD DU
<                    SYSTEME...
<
<
        @1           1               1
XWOR%1:  VAL         KOLMOE=FMASK+KOL0=FVAL+KOLMOR=FMASK+KOL0+KOLON=FVAL
XWOR%2:  VAL         KOLF=FMASK+KOLMOV=FVAL+KOLMOL=FMASK+KOLON=FVAL
XWOR%3:  VAL         XWOR%1=XWOR%2   < DEPLACEMENT CARTE1 --> CARTE2.
        @ASCI        "'
XWOR%1:  VAL         KOLTED=FMASK+KOL2=FVAL+KOLTEF=FMASK+KOL3=FVAL
XWOR%2:  VAL         KOLF=FMASK+KOLTES=FVAL+KOLC=FMASK+KQUOTE=FVAL
XWORK1:  VAL         XWOR%1=XWOR%2+I < XWORK1=INDEX DE RANGEMENT COURANT.
XWORK2:  VAL         KOL0+KOLON      < XWORK2=INDEX DE TEST DE CARTE2.
XWORK3:  VAL         NBITCX          < XWORK3=DECOMPTEUR DE BITS DE GENERA-
                                     < TION D'UN CHIFFRE HEXA-DECIMAL.
XWORK4:  VAL         0               < XWORK4=CUMUL DE GENERATION D'UN
                                     < CHIFFRE HEXA-DECIMAL.
         DO          KOLON
         CALL        #SISP CMS5 TAB2#
XWOR%1:  VAL         KOLC=FMASK+KDQ=FVAL?FCSTO
XWOR%3:  VAL         XWORK1=XWOR%1   < "FERMETURE" DE LA CARTE 'ASCI'...
         LST
       @@                            < GENERATION DE LA LISTE DE TABULATION.
:F
:F
< <<'SISP CMS5 TAB1'
ED'SISP CMS5 TAB2'
IN0
         NLS
<
<
<        S I S P   C M S 5   T A B 2  :
<
<
         LST
XWOR%1:  VAL         XWORK2=FCGET    < ACCES AU CARACTERE DE RANG (XWORK2).
XWORK2:  VAL         XWORK2+I        < PROGRESSION DE L'INDEX CARTE2.
         IF          XWOR%1-KSP,XEIF%,,XEIF%
XWOR%1:  VAL         HZERO           < LE 'SPACE' EST REMPLACE PAR "0"...
XEIF%:   VAL         ENDIF
XWOR%1:  VAL         XWOR%1=FCAB     < CONVERSION BINAIRE DU CARACTERE.
XWOR%2:  VAL         BIT)BIT
         IF          XWOR%1-XWOR%2,,XEIF%,
         IF          XWOR%1-BIT,,XEIF%,
         IF          ATTENTION LA CARTE ARGUMENT CONTIENT D'AUTRES
         IF          CARACTERES QUE "0", "1" OU 'SPACE' !!!
XEIF%:   VAL         ENDIF
XWORK4:  VAL         XWORK4>BIT?XWOR%1 < CUMUL DU CHIFFRE HEXA-DECIMAL...
XWORK3:  VAL         XWORK3-I        < DECOMPTE DES BITS DU CHIFFRE...
         IF          XWORK3,XEIF%,,XEIF%
XWORK3:  VAL         NBITCX          < REINITIALISATION DU DECOMPTEUR.
XWOR%2:  VAL         XWORK4=FCBA(MOCD?FCSTO
XWOR%3:  VAL         XWORK1=XWOR%2   < RANGEMENT DU CHIFFRE COURANT...
XWORK1:  VAL         XWORK1+I        < PROGRESSION DE L'INDEX DE RANGEMENT,
XWORK4:  VAL         0               < REINITIALISATION DU CUMUL...
XEIF%:   VAL         ENDIF
:F
:F
< <<'SISP CMS5 TAB2'
ED'SISP CMS5 ASCI'
IN0
         NLS
<
<
<        S I S P   C M S 5   A S C I  :
<
<
XETI%::  EQU         $               < SAUVEGARDE DU '$' AVANT D'EXECUTER
                                     < LA CARTE 'ASCI' ARGUMENT :
<*******************************************************************************
       @@
XWOR%1:  VAL         '000000000@@=FCSIGN-SIGNP
<*******************************************************************************
XWOR%2:  VAL         $-XETI%*NOCMO+XWOR%1-W
                                     < XWOR%2=LONGUEUR DU MESSAGE PROPREMENT DIT
                                     < (-W POUR EXCLURE LA LONGUEUR ELLE-MEME).
XLASCI:  VAL         XWOR%2          < RENVOI LA LONGUEUR DU MESSAGE...
         IF          XWOR%2-MBAS16,XEIF%,XEIF%,
         IF          ATTENTION : LA LONGUEUR EST TROP GRANDE POUR
         IF          SUPPORTER LE CODAGE SUIVANT 'MBAS16' !!!
XEIF%:   VAL         ENDIF
         $EQU        XETI%           < RETOUR AVANT 'ASCI'...
XWOR%4:  VAL         KOL2
XWOR%3:  VAL         XWOR%4=FCGET    < POUR VALIDER 'ASCI' :
         IF          XWOR%3-KDQ,,XEIF%,
         IF          ATTENTION : LA CARTE 'ASCI' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
XWOR%4:  VAL         XWOR%4+I        < INDEX DU PREMIER CARACTERE SUIVANT 'KDQ':
XWOR%3:  VAL         XWOR%4=FCGET
         IF          XWOR%3-KSP,,XEIF%,
         IF          ATTENTION : IL FAUT LAISSER UN 'SPACE' EN TETE DE
         IF          'ASCI' POUR Y METTRE LA LONGUEUR !!!
XEIF%:   VAL         ENDIF
XWOR%1:  VAL         KOLC=FMASK+HZERO?XWOR%2=FVAL?FCSTO
XWOR%8:  VAL         HZERO?MBAS16
XWOR%9:  VAL         HZERO)MBAS16
         IF          XWOR%8-XWOR%9,,XEIF%,
         IF          ATTENTION : LE CODAGE DE LA LONGUEUR EST MAUVAIS !!!
XEIF%:   VAL         ENDIF
XWOR%3:  VAL         XWOR%4=XWOR%1   < INSERTION DE LA LONGUEUR DU MESSAGE,
         LST
       @@                            < ET ASSEMBLAGE DEFINITIF DE 'ASCI'...
:F
:F
< <<'SISP CMS5 ASCI'
ED'SISP CMS5 EXTEND'
IN0
         NLS
<
<
<        S I S P   C M S 5   E X T E N D  :
<
<
XETI%::  EQU         $               < SAUVEGARDE DU '$' AVANT D'EXECUTER
                                     < LA CARTE 'BYTE' ARGUMENT :
         NTRN
XWOR%9:  VAL         NKEXT+NOCMO-E/NOCMO
         TRN
         DO          XWOR%9
         BYTE        K;K             < REINITIALISATION DE LA ZONE...
         $EQU        XETI%           < RETOUR A L'ORIGINE DE LA CARTE 'BYTE'.
<*******************************************************************************
       @@
XWOR%1:  VAL         '000000000@@=FCSIGN-SIGNP
<*******************************************************************************
XWOR%2:  VAL         $-XETI%*NOCMO+XWOR%1-W
                                     < XWOR%2=LONGUEUR DU MESSAGE PROPREMENT DIT
                                     < (-W POUR EXCLURE LA LONGUEUR ELLE-MEME).
XXLEXT:  VAL         XWOR%2          < POUR COMMUNIQUER LA LONGUEUR...
         IF          XWOR%2-NKEXT+W,XEIF%,XEIF%,
         IF          ATTENTION : LA LONGUEUR EST TROP GRANDE POUR
         IF          ETRE COMPATIBLE AVEC 'NKEXT' !!!
XEIF%:   VAL         ENDIF
         IF          XWOR%2-BASE10,XEIF%,,
         IF          ATTENTION : LA LONGUEUR EST INCOMPATIBLE
         IF          AVEC UN CODAGE DECIMAL !!!
XEIF%:   VAL         ENDIF
         $EQU        XETI%           < RETOUR AVANT 'BYTE'...
XWOR%4:  VAL         KOL2            < INDEX DU PREMIER CARACTERE :
XWOR%3:  VAL         XWOR%4=FCGET
         IF          XWOR%3-KZERO,,XEIF%,
         IF          ATTENTION : IL FAUT LAISSER UN 'ZERO' EN TETE DE
         IF          'BYTE' POUR Y METTRE LA LONGUEUR !!!
XEIF%:   VAL         ENDIF
XWOR%1:  VAL         KOLC=FMASK+XWOR%2=FCBA(MOCD=FVAL?FCSTO
XWOR%3:  VAL         XWOR%4=XWOR%1   < INSERTION DE LA LONGUEUR DU MESSAGE,
         LST
       @@                            < ET ASSEMBLAGE DEFINITIF DE 'ASCI'...
         NLS
         $EQU        XETI%+XWOR%9    < AFIN DE GENERER DES OCTETS NULS...
         LST
:F
:F
< <<'SISP CMS5 EXTEND'
ED'SISP CMS5 BYTE'
IN0
         NLS
<
<
<        S I S P   C M S 5   B Y T E  :
<
<
XETI%::  EQU         $               < SAUVEGARDE DU '$' AVANT D'EXECUTER
                                     < LA CARTE 'BYTE' ARGUMENT :
<*******************************************************************************
       @@
XWOR%1:  VAL         '000000000@@=FCSIGN-SIGNP
<*******************************************************************************
XWOR%2:  VAL         $-XETI%*NOCMO+XWOR%1-W
                                     < XWOR%2=LONGUEUR DU MESSAGE PROPREMENT DIT
                                     < (-W POUR EXCLURE LA LONGUEUR ELLE-MEME).
         IF          XWOR%2-MBAS16,XEIF%,XEIF%,
         IF          ATTENTION : LA LONGUEUR EST INCOMPATIBLE
         IF          AVEC UN CODAGE SUIVANT 'MBAS16' !!!
XEIF%:   VAL         ENDIF
         $EQU        XETI%           < RETOUR AVANT 'BYTE'...
XWOR%4:  VAL         KOL2+I          < INDEX DU PREMIER CARACTERE :
XWOR%3:  VAL         XWOR%4=FCGET
         IF          XWOR%3-KSP,,XEIF%,
         IF          ATTENTION : IL FAUT LAISSER UN 'SPACE' EN TETE DE
         IF          'BYTE' POUR Y METTRE LA LONGUEUR !!!
XEIF%:   VAL         ENDIF
XWOR%1:  VAL         KOLC=FMASK+HZERO?XWOR%2=FVAL?FCSTO
XWOR%3:  VAL         XWOR%4=XWOR%1   < INSERTION DE LA LONGUEUR DU MESSAGE,
         LST
       @@                            < ET ASSEMBLAGE DEFINITIF DE 'ASCI'...
:F
:F
< <<'SISP CMS5 BYTE'
ED'SISP CMS5 GENPIL3'
IN0
         NLS
<
<
<        S I S P   C M S 5   G E N P I L 3  :
<
<
<        FONCTION :
<                      CETTE PROCEDURE GENERE
<                    UNE PILE DU TYPE "PUSH/
<                    PULL".
<
<
<        PARAMETRE :
<                    XWPILE=LONGUEUR-MOTS DE LA PILE.
<
<
XWOR%1:  VAL         XLMPIL=K
XWOR%7:  VAL         XWPILE>XWOR%1   < LONGUEUR MAXIMALE DE LA PILE,
XWOR%2:  VAL         XLCPIL=K
XWOR%8:  VAL         K>XWOR%2        < LONGUEUR COURANTE (NULLE INITIALEMENT).
         LST
         WORD        XWOR%7?XWOR%8   < POINTEUR DE LA PILE,
         DZS         XWPILE          < ET CORPS DE LA PILE PROPREMENT DIT...
:F
:F
< <<'SISP CMS5 GENPIL3'
ED'SISP CMS5 VALITN'
IN0
         NLS
<
<
<        S I S P   C M S 5   V A L I T N  :
<
<
<        FONCTION :
<                      CETTE PROCEDURE PERMET DE
<                    VERIFIER QUE DEUX 'ITN' GE-
<                    NERES NE SONT PAS IDENTIQUES...
<
<
<        PARAMETRE :
<                    CUMITN=CUMUL DES 'ITN' A RAISON D'UN BIT PAR 'ITN'.
<
<
         LST
XWOR%1:  VAL         '0@@@@          < RECUPERATION DE 'ITN' COURANT, QUI EST
                                     < AUSSI UN SOUS-NIVEAU D'INTERRUPTION
                                     < D'EXCEPTION...
<*******************************************************************************
         IF          XWOR%1-NBITMO,XEIF%,,
         IF          ATTENTION : LE CUMUL NE PEUT SE FAIRE SUR UN MOT !!!
XEIF%:   VAL         ENDIF
XWOR%2:  VAL         COSBT?XWOR%1=FMASK(K=FCINST
         IF          CUMITN(XWOR%2,,XEIF%,
         IF          ATTENTION : CET 'ITN' EST DEJA UTILISE !!!
XEIF%:   VAL         ENDIF
CUMITN:  VAL         CUMITN?XWOR%2   < CUMUL DU NOUVEL 'ITN'...
:F
:F
< <<'SISP CMS5 VALITN'
ED'SISP CMS5 SAVE'
IN0
DF'SVS CMS5 1'
DF'SVS CMS5 2'
DF'SVS CMS5 3'
DF'SVS CMS5 4'
DF'SVS CMS5 5'
DF'SVS CMS5 6'
DF'SVS CMS5 7'
DF'SVS CMS5 8'
DF'SVS CMS5 9'
DF'SVS CMS5 10'
DF'SVS CMS5 11'
DF'SVS CMS5 12'
DF'SVS CMS5 13'
DF'SVS CMS5 14'
DF'SVS CMS5 15'
CO'SIS CMS5 1''SVS CMS5 1'
CO'SIS CMS5 2''SVS CMS5 2'
CO'SIS CMS5 3''SVS CMS5 3'
CO'SIS CMS5 4''SVS CMS5 4'
CO'SIS CMS5 5''SVS CMS5 5'
CO'SIS CMS5 6''SVS CMS5 6'
CO'SIS CMS5 7''SVS CMS5 7'
CO'SIS CMS5 8''SVS CMS5 8'
CO'SIS CMS5 9''SVS CMS5 9'
CO'SIS CMS5 10''SVS CMS5 10'
CO'SIS CMS5 11''SVS CMS5 11'
CO'SIS CMS5 12''SVS CMS5 12'
CO'SIS CMS5 13''SVS CMS5 13'
CO'SIS CMS5 14''SVS CMS5 14'
CO'SIS CMS5 15''SVS CMS5 15'
:F
:F
< <<'SISP CMS5 SAVE'
ED'SISP CMS5 RESTAURE'
IN0
DF'SIS CMS5 1'
DF'SIS CMS5 2'
DF'SIS CMS5 3'
DF'SIS CMS5 4'
DF'SIS CMS5 5'
DF'SIS CMS5 6'
DF'SIS CMS5 7'
DF'SIS CMS5 8'
DF'SIS CMS5 9'
DF'SIS CMS5 10'
DF'SIS CMS5 11'
DF'SIS CMS5 12'
DF'SIS CMS5 13'
DF'SIS CMS5 14'
DF'SIS CMS5 15'
CO'SVS CMS5 1''SIS CMS5 1'
CO'SVS CMS5 2''SIS CMS5 2'
CO'SVS CMS5 3''SIS CMS5 3'
CO'SVS CMS5 4''SIS CMS5 4'
CO'SVS CMS5 5''SIS CMS5 5'
CO'SVS CMS5 6''SIS CMS5 6'
CO'SVS CMS5 7''SIS CMS5 7'
CO'SVS CMS5 8''SIS CMS5 8'
CO'SVS CMS5 9''SIS CMS5 9'
CO'SVS CMS5 10''SIS CMS5 10'
CO'SVS CMS5 11''SIS CMS5 11'
CO'SVS CMS5 12''SIS CMS5 12'
CO'SVS CMS5 13''SIS CMS5 13'
CO'SVS CMS5 14''SIS CMS5 14'
CO'SVS CMS5 15''SIS CMS5 15'
:F
:F
< <<'SISP CMS5 RESTAURE'
ED'SISP CMS5 DELETE'
IN0
DF'SVS CMS5 1'
DF'SVS CMS5 2'
DF'SVS CMS5 3'
DF'SVS CMS5 4'
DF'SVS CMS5 5'
DF'SVS CMS5 6'
DF'SVS CMS5 7'
DF'SVS CMS5 8'
DF'SVS CMS5 9'
DF'SVS CMS5 10'
DF'SVS CMS5 11'
DF'SVS CMS5 12'
DF'SVS CMS5 13'
DF'SVS CMS5 14'
DF'SVS CMS5 15'
:F
:F
< <<'SISP CMS5 DELETE'
ED'SISP CMS5 PSRSLO'
IN0
         NLS
<
<
<        S I S P   C M S 5   P S R S L O  :
<
<
         LST
         RDOE
         PSR         A,B             < SAUVEGARDE DE (SLO,SLE) COURANT.
:F
:F
< <<'SISP CMS5 PSRSLO'
ED'SISP CMS5 PLRSLO'
IN0
         NLS
<
<
<        S I S P   C M S 5   P L R S L O  :
<
<
         LST
         PLR         A,B
         WOE                         < RESTAURATION DE (SLO,SLE).
:F
:F
< <<'SISP CMS5 PLRSLO'
ED'SISP CMS5 PAGE0'
IN0
         NLS
<
<
<        S I S P   C M S 5   P A G E 0  :
<
<
         LST
         LRM         A,B
         WORD        SO              < (A)='SLO' DE LA PAGE 0,
         WORD        SE              < (B)='SLE) DE LA PAGE 0.
         WOE                         < ET POSITIONNEMENT SUR LA PAGE 0 (DE 32K).
:F
:F
< <<'SISP CMS5 PAGE0'
ED'SISP CMS5 W ZERO'
IN
         NLS
<
<
<        S I S P   C M S 5   W   Z E R O  :
<
<
XWOR%1:  VAL         '1234
XWOR%2:  VAL         XWOR%1)XWOR%1
         IF          ZERO+XWOR%2-ZERO,,XEIF%,
         IF          ATTENTION : LA MISE DE 'ZERO' DANS 'W' EST IDIOTE !!!
XEIF%:   VAL         ENDIF
         LST
         EORR        W,W             < (W)=BASE DE LA MEMOIRE DEBANALISEE.
:F
:F
< <<'SISP CMS5 W ZERO'
ED'SISP CMS5 W TRACE'
IN
         NLS
<
<
<        S I S P   C M S 5   W   T R A C E  :
<
<
XWOR%1:  VAL         '1234
         IF          XWOR%1)XWOR%1-K,,XEIF%,
         IF          ATTENTION : LA MISE A ZERO DE 'W' EST IDIOTE !!!
XEIF%:   VAL         ENDIF
         LST
         EORR        W,W             < (W)=0...
:F
:F
< <<'SISP CMS5 W TRACE'
ED'SISP CMS5 BASE C'
IN0
         NLS
<
<
<        S I S P   C M S 5   B A S E   C  :
<
<
         LST
         LRM         C
         WORD        COM+DEPCS       < 'C' EST LA BASE GENERALE DU COMMON
                                     < DE CMS5.
:F
:F
< <<'SISP CMS5 BASE C'
ED'SISP CMS5 GEN DEF'
IN0
         NLS
<
<
<        S I S P   C M S 5   G E N   D E F  :
<
<
<        FONCTION :
<                      CETTE PROCEDURE CREE INCRE-
<                    MENTALEMENT LE FICHIER
<                    'SIP DEFINITION CMS5' CONTE-
<                    NANT LA DEFINITION DES DIFFE-
<                    RENTS SYMBOLES UTILISES PAR
<                    LES PROCESSEURS-SYSTEME...
<
<
XWOR%1:  VAL         KOLMOE=FMASK+KOL0=FVAL             < EMETTEUR,
XWOR%2:  VAL         KOLMOR=FMASK+KOL0+KOLON=FVAL       < RECEPTEUR,
XWOR%3:  VAL         FCMOV?KOLON
XWOR%4:  VAL         XWOR%1?XWOR%2=XWOR%3 < MISE DE LA CARTE ARGUMENT EN CARTE
                                          < 'CD2'...
        @:F;:F;:F;
XWOR%1:  VAL         KOLMOE=FMASK+KOL1=FVAL             < EMETTEUR,
XWOR%2:  VAL         KOLMOR=FMASK+KOL0+KOLON+KOLON=FVAL < RECEPTEUR,
XWOR%4:  VAL         XWOR%1?XWOR%2=XWOR%3 < MISE DE LA FERMETURE DU FICHIER
                                          < EN CARTE 'CD3'...
;ED     @'SIP DEFINITION CMS5';IF                                              ;
                                          < MISE DE L'EDITION DU FICHIER QUE
                                          < L'ON MET A JOUR EN CARTE 'CD1'...
         EE
         LST
:F
:F
< <<'SISP CMS5 GEN DEF'
ED'SISP CMS5 GEN CTE'
IN0
         NLS
<
<
<        S I S P   C M S 5   G E N   C T E  :
<
<
<        FONCTION :
<                      CETTE PROCEDURE CREE INCRE-
<                    MENTALEMENT LE FICHIER
<                    'SIP DEFINITION CTTE' CONTENANT
<                    LA DEFINITION DE DIFFERENTS SYM-
<                    BOLES UTILISES PAR LES PROCES-
<                    SEURS-SYSTEME...
<
<
XWOR%1:  VAL         KOLMOE=FMASK+KOL0=FVAL             < EMETTEUR,
XWOR%2:  VAL         KOLMOR=FMASK+KOL0+KOLON=FVAL       < RECEPTEUR,
XWOR%3:  VAL         FCMOV?KOLON
XWOR%4:  VAL         XWOR%1?XWOR%2=XWOR%3 < MISE DE LA CARTE ARGUMENT EN CARTE
                                          < 'CD2'...
        @:F;:F;:F;
XWOR%1:  VAL         KOLMOE=FMASK+KOL1=FVAL             < EMETTEUR,
XWOR%2:  VAL         KOLMOR=FMASK+KOL0+KOLON+KOLON=FVAL < RECEPTEUR,
XWOR%4:  VAL         XWOR%1?XWOR%2=XWOR%3 < MISE DE LA FERMETURE DU FICHIER
                                          < EN CARTE 'CD3'...
;ED     @'SIP DEFINITION CTTE';IF                                              ;
                                          < MISE DE L'EDITION DU FICHIER QUE
                                          < L'ON MET A JOUR EN CARTE 'CD1'...
         EE
         LST
:F
:F
< <<'SISP CMS5 GEN CTE'
ED'SISP CMS5 CHECK'
IN0
         NLS
<
<
<        S I S P   C M S 5   C H E C K  :
<
<
<        FONCTION :
<                      CETTE PROCEDURE GENERE
<                    LES CHAINAGES INTER-BLOCS
<                    DE SIMULATION DES "RAM"/"ROM"...
<
<
         LST
         WORD        CHAINK          < CHAINAGE DES BLOCS "ROM"-"RAM"...
         NLS
         IF          ICHAIN-EXIST,,XEIF%,
         LST
         WORD        NILK            < EMPLACEMENT DU CHECK-SUM DU BLOC "RAM"
                                     < PRECEDENT.
         NLS
XEIF%:   VAL         ENDIF
ICHAIN:  VAL         -ICHAIN         < BASCULE DU GENERATEUR DU CHECK-SUM, LES
                                     < BLOCS "RAM" ET "ROM" ETANT INTERCALES...
         LST
:F
:F
< <<'SISP CMS5 CHECK'



Copyright © Jean-François Colonna, 2017-2022.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2017-2022.