< S I S C M S 5 1
PAGE
<
<
< P R E P A R A T I O N D U F I C H I E R D E S
< D E F I N I T I O N S R E L A T I V E S A C M S 5
< U T I L I S E P A R L E S P R O C E S S E U R S :
<
<
< FONCTION :
< PENDANT L'ASSEMBLAGE DE
< 'CMS5', ON CONSTRUIT UN FICHIER
< DE DEFINITIONS BAPTISES
< 'SIP DEFINITION CMS5', ET
< UTILISES PAR DIFFERENTS PRO-
< CESSEURS ; POUR SAVOIR SI
< CELUI-CI A ETE MODIFIE PAR
< RAPPORT A L'ASSEMBLAGE PRE-
< CEDENT, LA VERSION ANTERIEURE
< DE 'SIP DEFINITION CMS5' EST
< COPIEE DANS LE FICHIER DE
< NOM 'SVP DEFINITION CMS5' ;
< APRES CET ASSEMBLAGE, EN COM-
< PARANT 'SIP...' ET 'SVP...',
< ON VERRA LES EVOLUTIONS...
<
<
< NOTA :
< LES SYMBOLES INSERES DANS LE
< FICHIER 'SIP DEFINITION CMS5' LE
< SONT SOUS LA FORME 'XXX: VAL...'
< ET NON PAS 'XXX:: VAL...' AFIN QUE
< DES PROGRAMMES UTILISATEURS LES AYANT
< DEJA DEFINIS, NE COMMETTENT PAS
< D'ERREURS D'ASSEMBLAGE !!!
<
<
ORDI:: VAL "@" < IDENTIFICATION DE L'ORDINATEUR SUPPORT
< DE 'CMS5' LE MAGNIFIQUE...
;DF @'SVP DEFINITION CMS5';:F;
EE
;CO @'SIP DEFINITION CMS5''SVP DEFINITION CMS5';:F;
EE
;DF @'SIP DEFINITION CMS5';:F;
EE
;ED @'SIP DEFINITION CMS5';IF; IDP "SIP DEF. CMS5";:F;:F;:F;
EE
PAGE
<
<
< P R E P A R A T I O N D U F I C H I E R D E S
< C O N S T A N T E S G E N E R A L E S
< U T I L I S E P A R L E S P R O C E S S E U R S :
<
<
< FONCTION :
< PENDANT L'ASSEMBLAGE DE
< 'CMS5', ON CONSTRUIT UN FICHIER
< DE DEFINITIONS BAPTISES
< 'SIP DEFINITION CTTE', ET
< UTILISES PAR DIFFERENTS PRO-
< CESSEURS ; POUR SAVOIR SI
< CELUI-CI A ETE MODIFIE PAR
< RAPPORT A L'ASSEMBLAGE PRE-
< CEDENT, LA VERSION ANTERIEURE
< DE 'SIP DEFINITION CTTE' EST
< COPIEE DANS LE FICHIER DE
< NOM 'SVP DEFINITION CTTE' ;
< APRES CET ASSEMBLAGE, EN COM-
< PARANT 'SIP...' ET 'SVP...',
< ON VERRA LES EVOLUTIONS...
<
<
< NOTA :
< LES SYMBOLES INSERES DANS LE
< FICHIER 'SIP DEFINITION CTTE' LE
< SONT SOUS LA FORME 'XXX: VAL...'
< ET NON PAS 'XXX:: VAL...' AFIN QUE
< DES PROGRAMMES UTILISATEURS LES AYANT
< DEJA DEFINIS, NE COMMETTENT PAS
< D'ERREURS D'ASSEMBLAGE !!!
<
<
;DF @'SVP DEFINITION CTTE';:F;
EE
;CO @'SIP DEFINITION CTTE''SVP DEFINITION CTTE';:F;
EE
;DF @'SIP DEFINITION CTTE';:F;
EE
;ED @'SIP DEFINITION CTTE';IF; IDP "SIP DEF. CTTE";:F;:F;:F;
EE
PAGE
IDP "CMS5 - VERSION SOLAR 16.75"
IDP "J'AI CHERCHE,"
IDP " J'AI TROUVE,"
IDP " J'AI PUNCHE..."
IDP "JOHN F. COLONNA"
TRN
<
<
<
< U N I V E R S A L C O N T R O L
< P R O G R A M F O R R E S O U R C E S
< S H A R I N G
<
< C O L O N N A M O N I T O R S Y S T E M 5
<
<
<
< PHILOSOPHIE :
<
< LE MONITEUR CMS5 EST CHARGE DE RENDRE
< UN CERTAIN NOMBRE DE SERVICES. LES SERVICES
< (ENTRETIEN D'ECHANGES,INITIALISATION D'ECHANGES,
< ALLOCATION MEMOIRE,ALLOCATION DISQUE,GESTION DE
< FICHIERS,...) SONT DES ACTIONS INDEPENDANTES,
< DONC ASYNCHRONES, MAIS ETANT PARFOIS EN RELATION
< (CF. L'ALLOCATION DISQUE FAIT DES E/S DISQUES).
< C'EST POURQUOI CMS5 A ETE DECOMPOSE EN AUTANT DE
< TACHES QU'IL Y DE SERVICES A RENDRE. CES TACHES
< SONT APPELEES HANDLERS OU 'STATION-SERVICE'.
< L'ACCES A UN HANDLER SE FAIT PAR L'INTERMEDIAIRE
< D'UNE FILE D'ATTENTE QUI LUI EST PROPRE A GESTION
< FIFO, AVEC LA POSSIBILITE DE DEMANDES PRIORITAIRES
< ET DE FILTRER LES DEMANDES.
< UNE TELLE STRUCTURE POSSEDE DE NOMBREUX
< AVANTAGES :
< - INDEPENDANCE DES FONCTIONS, D'OU LA POSSIBILITE
< DE CREER DES TACHES PARALLELES : C'EST DE LA
< MULTIPROGRAMMATION, MAIS C'EST AUSSI DU TRAVAIL
< PARALLELE, UNE MEME TACHE MERE POUVANT DEMANDER
< 'SIMULTANEMENT' AUTANT DE SERVICES QU'ELLE LE
< DESIRE.
< - TRANSPORTABILITE SUR UNE MACHINE A PLUSIEURS
< UNITES CENTRALES : C'EST DU MULTIPROCCESING,
< AVEC ENCORE UNE FOIS LA POSSIBILITE DE CREER DES
< TACHES FILLES PARALLELEES.
<
<
< CONSEQUENCES :
<
< UNE TELLE STRUCTURE ASSURE UNE
< SIMULTANEITE MAXIMALE ENTRE LES
< DIFFERENTS SERVICES...
<
<
<
<
< AUTHOR : JOHN F. COLONNA
PAGE
<
<
< V A R I A B L E S D E T R A V A I L :
<
<
XWORK: VAL 0 < VARIABLE DE TRAVAIL A L'ASSEMBLAGE.
XWOR%: VAL XWORK < V A R I A B L E D E
< T R A V A I L A
< L ' A S S E M B L A G E
< ELLE EST APPELEE AUSSI PARFOIS
< 'XWORK'; ICI, ELLE EST GENEREE
< PAR 'XWOR' SUIVI DU CARACTERE
< "POUR-CENT"...
XWOR6: VAL XWORK < IDEM...
XWORK1: VAL XWORK < DE MEME QUE 'XWORK'.
XWORK2: VAL XWORK < DE MEME QUE 'XWORK'.
XWORK3: VAL XWORK < DE MEME QUE 'XWORK'.
XWORK4: VAL XWORK < DE MEME QUE 'XWORK'.
XWORK7: VAL XWORK < DE MEME QUE 'XWORK'.
XWOR61: VAL XWORK
XWOR62: VAL XWORK
XWOR63: VAL XWORK
XWOR64: VAL XWORK
XWOR65: VAL XWORK
XWOR66: VAL XWORK
XWOR67: VAL XWORK
XWOR68: VAL XWORK
XWOR69: VAL XWORK
XMASK: VAL XWORK
XEIF6: VAL XWORK < INITIALISATION DES 'XEIF' "POUR-CENT"...
XEIF61: VAL XWORK
XEIF62: VAL XWORK
XEIF68: VAL XWORK
XEIF69: VAL XWORK
PAGE
<
<
< C O N S T A N T E S D E B A S E D E C M S 4 :
<
<
< NOTA :
< SONT DEFINIES ICI DES CONSTANTES
< QUI N'ONT AUCUNE RAISON DE CHANGER,
< MAIS DONT LE BESOIN EST EVIDENT...
<
<
PROG
ZERO: EQU $
NIL: EQU ZERO < ELEMENT INDIQUANT UNE ADRESSE VIDE.
< (PAR EXEMPLE CHAINAGE DE FILE D'ATTENTE
< 'TETE' ET 'QUEUE' VIDE,...).
NILX: EQU NIL < POUR LES RELAIS INDEXES CALCULES...
NILS: EQU NIL < POUR LES ADRESSES DISQUES CALCULEES...
K:: VAL '0000 < POUR CLEARER, RAZER...
NILK:: VAL K < POUR GENERER DES MOTS DONT LA VALEUR
< N'EST PAS CONNUE LORS DE L'ASSEMBLAGE...
ENDIF:: VAL K < POUR INDIQUER UNE FIN DE 'IF'...
IF NIL-ZERO,,XEIF%,
IF ATTENTION : TOUS LES 'STZ' ET AUTRES CONCERNANT
IF DES ELEMENTS VIDES VONT MERDER !!!
XEIF%: VAL ENDIF
NOCMO:: VAL 2 < NOMBRE D'OCTETS PAR MOT.
NBITOC:: VAL 8 < NOMBRE DE BITS DANS UN OCTET,
NBITMO:: VAL NBITOC*NOCMO < NOMBRE DE BITS DANS UN MOT.
NBITAB:: VAL NBITMO+NBITMO < NOMBRE DE BITS DANS LE REGISTRE (A,B)...
BIT:: VAL 1
<*******************************************************************************
ZERO1: WORD K
D:: VAL $-ZERO1 < LONGUEUR D'UN MOT !!!
<*******************************************************************************
$EQU ZERO1 < ANNULATION DU CODE GENERE...
<*******************************************************************************
ZERO2: FLOAT XWOR%1-NOCMO,,XEIF%,
IF ATTENTION : 'NOCMO' DOIT ETRE UNE PUISSANCE
IF DE 2 (A CAUSE DES DECALAGES...) !!!
XEIF%: VAL ENDIF
YY7:: VAL BIT>7 < TAILLE DES SECTEURS DISQUES, DES
< BUFFERS ET DE DIVERSES AUTRES CHOSES...
YY8:: VAL YY7*NOCMO < IDEM, MAIS EXPRIMEE EN OCTETS.
YM7:: VAL YY7-D
BITSIG:: VAL L < RANG DU BIT DE SIGNE...
XWOR%1: VAL NBITMO-B-BITSIG
Q8000:: VAL BIT>XWOR%1 < BIT0=1, UTILISE POUR L'INFINI...
LSEM:: VAL 5 < A T T E N T I O N ::
< ON DOIT AVOIR : LSEM=LSEMR.
LDEM1:: VAL 8 < LONGUEUR PRESUMEE DES BLOCS DE DEMANDE :
< A T T E N T I O N : ON DOIT AVOIR :
< LDEM1=LDEM0 !!!
XWPILE: VAL XWORK < DECLRE EN TETE POUR FACILITER
< L'ASSEMBLAGE
LPILTH:: VAL 38 < LONGUEUR MINIMALE DES PILES
< DE TACHES HARD
LPILEH:: VAL 20 < LONGUEUR MINIMALE DES PILES
< DES HANDLERS ; ELLE EST DUE AU
< MODULE 'HANDLR...
LPILED:: VAL 8 < LONGUEUR MINIMALE DES PILES
< DES DISPATCHERS.
BMOT0:: VAL BITSIG < BIT DE DISCRIMINATION DES 'SVC'/'QUIT'.
IF BMOT0-BITSIG,,XEIF%,
IF ATTENTION : DES TESTS SUR 'MOT0' VONT MERDER !!!
XEIF%: VAL ENDIF
XWOR%1: VAL NBITMO-B-BMOT0
XWOR%2: VAL BIT>XWOR%1 < MASQUE CORRESPONDANT A 'BMOT0'.
XXQUIT:: VAL 1 < CODE DU 'QUIT' D'APPEL DIRECT 'CCI'.
<*******************************************************************************
QUIT XXQUIT
CMOT0:: VAL '0000000@@@@?XWOR%2
< PLACE EN DERNIERE POSITION,
< PERMET DE GENERER UN QUIT
< D'APPEL DIRECT AU CCI. A NOTER :
< BIT0(MOT0)=1.
<*******************************************************************************
<*******************************************************************************
SVC
CMOT0: VAL '0000000@@@@ < PLACE EN DERNIERE POSITION,
< PERMET DE GENERER EN MOT0 DE
< L'ESPACE MEMOIRE ESCLAVE UN
< 'SVC CCI'. A NOTER :
< BIT0(MOT0)=K.
<*******************************************************************************
$EQU ZERO < ANNULATION DU CODE GENERE...
DGNS:: VAL 8 < DECALAGE DE GENERATION DE CERTAINS
< NOMS DU SYSTEME : 'TH', 'IC',...
SECTSY:: VAL '800 < PSEUDO-ADRESSE DU PREMIER SECTEUR DU
< SYSTEME SUR LE DISQUE 'DKF'.
QUANTA:: VAL 3 < DEFINITION DE L'UNITE D'ALLOCATION
< SUR LE DISQUE 'DKM' :
< 1 QUANTUM=3 SECTEURS.
YY7Q:: VAL YY7*QUANTA < NOMBRE DE MOTS DANS UN Q-SECTEUR.
YY8Q:: VAL YY8*QUANTA < NOMBRE D'OCTETS CONTENUS DANS
< UN Q-SECTEUR.
PAGE
<
<
< C O N S T A N T E S L I E E S A U X
< U N I T E S C E N T R A L E S :
<
<
YENA:: VAL '31 < A T T E N T I O N : ON DEFINIT
< ICI UNE ADRESSE CORRESPONDANT AUX
< CHANGEMENTS DE CONTEXTES PARTIELS
< DANS LE MICRO-PROGRAMME DE LA
< MACHINE ; TOUTE MODIFICATION DU
< PROCESSEUR DEVRA ETRE FAITE EN
< S'ASSURANT QUE CETTE ADRESSE NE
< CHANGE PAS...
ISPIE:: VAL '7F1 < ADRESSE DU MICRO-PROGRAMME D'INITIA-
< LISATION DES CANAUX 'HDC'.
ALIPI:: VAL '10 < ADRESSE DU MICRO-PROGRAMME DE
< TRAITEMENT DES 'IPI'.
PAGE
<
<
< D E F I N I T I O N S G E N E R A L E S :
<
<
<
<
< PROVERBE SHADOKK :
<
< "POURQUOI FAIRE SIMPLE, QUAND ON PEUT FAIRE COMPLIQUE ???!!?
<
< EN EFFET, CERTAINS TROUVERONT CERTAINES
< DEFINITIONS LUXUEUSES, MAIS J'AI ESSAYE
< ICI, DE NE JAMAIS FAIRE APPARAITRE DE
< CONSTANTES, OU D'OBJETS DONT LA DEFINITION
< N'AIT ETE FAITE AVEC LE PLUS DE RIGUEUR
< POSSIBLE; DE PLUS, A CHAQUE FOIS QUE
< CELA EST POSSIBLE, DES VERIFICATIONS "CONTEX-
< TUELLES" ONT ETE INTRODUITES (PAR EXEMPLE,
< DE NON RECOUVREMENT DE MASQUES).
< AINSI, J'ESPERE QUE LE RESTE DU SYSTEME
< NE DEPENDRA QUE DE CES DEFINITIONS, ET QUE
< LEUR MODIFICATION SE FERA DANS LA CONTINUITE...
<
<
PAGE
<
<
< C O N S T A N T E S G E N E R A L E S
< D E M A S Q U E :
<
<
MFFFF:: VAL -1 < -1='FFFF : UTILISE POUR COMPLEMENT.
N:: VAL -MFFFF < POUR CALCULER DES MASQUES A PARTIR
< DE CONSTANTES QUI SONT DES PUISSAN-
< CES DE 2.
PAGE
<
<
< C O N S T A N T E S G E N E R A L E S
< D E N O M B R E :
<
<
BITX:: VAL L < RANG DU BIT D'INDEXATION.
BASE10:: VAL 10 < BASE DECIMALE,
BASE16:: VAL 16 < BASE HEXA-DECIMALE.
MBAS16:: VAL BASE16-N < POUR LE CODAGE DE LA LONGUEUR DE MESSAGES
< EN ASCI...
NBITCX:: VAL BASE16=K < NOMBRE DE BITS CONTENUS DANS
< UN CHIFFRE HEXA-DECIMAL.
LK:: VAL BIT>BASE10 < VALEUR DU FACTEUR MULTIPLICATIF 'K'.
UMEM:: VAL 2 < LES TAILLES MEMOIRES SONT EXPRIMEES
< EN UNITE DE DOUBLE-MOTS (2).
XWOR%1: VAL LK/UMEM < 1K DANS CETTE UNITE...
XLSTAC:: VAL 32 < TAILLE DES STACKS MEMOIRE UTILISES
< EN K-MOTS.
XKMEMX:: VAL 512+256+32+4+4 < TAILLE EN K-MOTS DE LA MEMOIRE DE TYPE
< 'SOLAR', C'EST-A-DIRE EXCLUANT CELLE
< QUI EST EN FAIT LE SYSTEME DE TELE-
< VISION MOYENNE DEFINITION...
MEMORK:: VAL 32 < TAILLE EN K-MOTS DE LA MEMOIRE
< ALLOUABLE.
MEMORY:: VAL MEMORK < LA MEMOIRE ALLOUABLE FAIT 32K,
MEMORY: VAL MEMORY*XWOR%1 < SOIT (...) DOUBLE-MOTS.
< LA MEMOIRE.
XX64K:: VAL 64 < LONGUEUR DE LA MEMOIRE ACCESSIBLE EN
< ADRESSAGE DIRECT, ET PAR LA MEME, DONNE
< LA TAILLE DU SYSTEME...
PLK:: VAL LK < LONGUEUR DU PLUS PETIT ESPACE MEMOIRE
< ALLOUABLE A UN UTILISATEUR.
<
<
< P A R T I T I O N D E L A M E M O I R E :
<
<
DOLA1:: VAL ZERO-ZERO < '$' INITIAL DE LA MEMOIRE BASSE.
XWOR%1: VAL UMEM=K < POUR AVOIR UNE ADRESSE-MOT,
DOLA2:: VAL MEMORY>XWOR%1 < '$' INITIAL DE LA MEMOIRE HAUTE.
DOLAR1: VAL DOLA1 < INITIALISATION DU '$' BAS COURANT,
DOLAR2: VAL DOLA2 < INITIALISATION DU '$' HAUT COURANT.
PAGE
<
<
< C O N S T A N T E S G E N E R A L E S
< D U S Y S T E M E :
<
<
IJIJDX:: VAL I < TRANSLATION DES INDEX LORS
< DE L'UTILISATION DES INSTRUCTIONS
< 'JIX' ET 'JDX'.
DEPILE:: VAL D < TRANSLATION NEGATIVE A DONNER
< AUX ADRESSES DE PILE AFIN DE PRENDRE
< EN COMPTE LA GESTION QUI EST FAITE
< PAR LES INSTRUCTIONS 'PSR' ET 'PLR'.
NMBUSM:: VAL 8 < NOMBRE MAXIMUM DE BUS MEMOIRE.
NMPROB:: VAL 4 < NOMBRE MAXIMUM DE PROCESSEURS
< PAR BUS MEMOIRE (UN PROCESSEUR
< POUVANT ETRE UN SOLAR-40, UN
< SOLAR-65, UN IOP, OU ENFIN
< UN CBM-P.
NMPROC:: VAL NMBUSM*NMPROB < NOMBRE MAXIMUM DE PROCESSEURS.
NMTS:: VAL 128 < NOMBRE MAXIMUM DE TACHES
< SOFTWARES DANS LE SYSTEME.
NMTH:: VAL 16 < NOMBRE MAXIMUM DE TACHES
< HARDWARES DANS LE SYSTEME,
< NON COMPRIS LE DEFAUT SECTEUR !!!
NTS0:: VAL K < NUMERO DE LA PREMIERE TACHE SOFT,
NTH0:: VAL K < NUMERO DE LA PREMIERE TACHE HARD.
IF NBITAB-NMPROC,,XEIF%,XEIF%
IF A T T E N T I O N : IL Y A TROP DE
IF PROCESSEURS POUR QUE LEUR LISTE
IF TIENNE SUR 2 MOTS (OU DANS LES 2
IF REGISTRES 'A' ET 'B') !!!
XEIF%: VAL ENDIF
NMSVC:: VAL BIT>NBITOC < NOMBRE MAXIMUM DE 'SVC'.
NMSVCM:: VAL NMSVC < NOMBRE MAXIMUM DE 'SVC' EXECUTABLES
< EN MODE MAITRE.
NMSVCS:: VAL NMSVC < NOMBRE MAXIMUM DE 'SVC' EXECUTABLES
< EN MODE ESCLAVE.
PAGE
<
<
< C O N V E N T I O N S G E N E R A L E S :
<
<
NEXIST:: VAL NIL-ZERO < EXPRIME LA NON EXISTENCE,...
EXIST:: VAL BIT)NEXIST < EXPRIME L'EXISTENCE...
PAGE
<
<
< C O N S T A N T E S G E N E R A L E S
< D E M A S Q U E S :
<
<
M1FFF:: VAL '1FFF
M0FFF:: VAL '0FFF
M7FFF:: VAL '7FFF
M007F:: VAL '007F
M000F:: VAL '000F
M0001:: VAL '0001
ME000:: VAL 'E000
XWOR%1: VAL K < MASQUE D'ACCES A L'OCTET DROIT
< D'UN MOT.
DO NBITOC
XWOR%1: VAL XWOR%1>BIT?BIT < GENERATION BIT A BIT DE 'MOCD'.
MOCD:: VAL XWOR%1 < MASQUE D'ACCES A L'OCTET DROIT...
MOCG:: VAL MOCD>NBITOC < MASQUE D'ACCES A L'OCTET
< GAUCHE D'UN MOT.
M00FF:: VAL MOCD
MFF00:: VAL MOCG
XWOR%1: VAL K < MASQUE RECOUVRANT UN MOT.
DO NBITMO
XWOR%1: VAL XWOR%1>BIT?BIT < GENERATION BIT A BIT DE 'MMOT'.
MMOT:: VAL XWOR%1 < MASQUE D'ACCES AU MOT...
IF MMOT-MFFFF,,XEIF%,
IF ATTENTION : IL VA SE PASSER DES CHOSES !!!
XEIF%: VAL ENDIF
PAGE
<
<
< D E F I N I T I O N D E S
< C O D E S A S C I I :
<
<
KNUL:: VAL '00 < CONTROL-SHIFT-P.
KSOH:: VAL '01 < CONTROL-A.
KSTX:: VAL '02 < CONTROL-B.
KETX:: VAL '03 < CONTROL-C.
KEOT:: VAL '04 < CONTROL-D.
KENQ:: VAL '05 < CONTROL-E.
KACK:: VAL '06 < CONTROL-F.
KBEL:: VAL '07 < CONTROL-G.
KBS:: VAL '08 < CONTROL-H (BACK-SPACE).
KHT:: VAL '09 < CONTROL-I (TAB).
KLF:: VAL '0A < CONTROL-J (LINE-FEED).
KVT:: VAL '0B < CONTROL-K.
KFF:: VAL '0C < CONTROL-L.
KCR:: VAL '0D < CONTROL-M (RETURN).
KSO:: VAL '0E < CONTROL-N.
KSI:: VAL '0F < CONTROL-O.
KDLE:: VAL '10 < CONTROL-P.
KDC1:: VAL '11 < CONTROL-Q.
KDC2:: VAL '12 < CONTROL-R.
KDC3:: VAL '13 < CONTROL-S.
KDC4:: VAL '14 < CONTROL-T.
KNAK:: VAL '15 < CONTROL-U.
KSYN:: VAL '16 < CONTROL-V.
KETB:: VAL '17 < CONTROL-W.
KCAN:: VAL '18 < CONTROL-X.
KEM:: VAL '19 < CONTROL-Y.
KSUB:: VAL '1A < CONTROL-Z.
KESC:: VAL '1B < CONTROL-SHIFT-K.
KFS:: VAL '1C < CONTROL-SHIFT-L.
KGS:: VAL '1D < CONTROL-SHIFT-M.
KRS:: VAL '1E < CONTROL-SHIFT-M.
KUS:: VAL '1F < CONTROL-SHIFT-O.
KSP:: VAL " " < SPACE.
KPE:: VAL "!" < !
KDQ:: VAL '22 < "
KDIESE:: VAL "#" < #
KDOLAR:: VAL "$" < $
KPC:: VAL '25 < POUR-CENT.
KET:: VAL "&" < &
KQUOTE:: VAL "'" < '
KPG:: VAL "(" < (
KPD:: VAL ")" < )
KSTAR:: VAL "*" < *
KPLUS:: VAL "+" < +
KVIR:: VAL "," < ,
KMOINS:: VAL "-" < -
KPOINT:: VAL "." <.
KSLASH:: VAL "/" < /
KZERO:: VAL "0" < 0
KUN:: VAL "1" < 1
KDEUX:: VAL "2" < 2
KTROIS:: VAL "3" < 3
KQUATR:: VAL "4" < 4
KCINQ:: VAL "5" < 5
KSIX:: VAL "6" < 6
KSEPT:: VAL "7" < 7
KHUIT:: VAL "8" < 8
KNEUF:: VAL "9" < 9
KDP:: VAL ":" < ::
KPV:: VAL ";" < ;
KINF:: VAL "<" < <
KEGAL:: VAL "=" < =
KSUP:: VAL">" < >
KPI:: VAL "?" < ?
KAROND:: VAL '40 < @
KA:: VAL "A" < A
KB:: VAL "B" < B
KC:: VAL "C" < C
KD:: VAL "D" < D
KE:: VAL "E" < E
KF:: VAL "F" < F
KG:: VAL "G" < G
KH:: VAL "H" < H
KI:: VAL "I" < I
KJ:: VAL "J" < J
KK:: VAL "K" < K
KL:: VAL "L" < L
KM:: VAL "M" < M
KN:: VAL "N" < N
KO:: VAL "O" < O
KP:: VAL "P" < P
KQ:: VAL "Q" < Q
KR:: VAL "R" < R
KS:: VAL "S" < S
KT:: VAL "T" < T
KU:: VAL "U" < U
KV:: VAL "V" < V
KW:: VAL "W" < W
KX:: VAL "X" < X
KY:: VAL "Y" < Y
KZ:: VAL "Z" < Z
KCG:: VAL "[" < [
KASLSH:: VAL "\" < \
KCD:: VAL "]" < ]
KCHAP:: VAL "^" < ^
KSOUL:: VAL "_" < _
KAPO:: VAL '60 < APOSTROPHE.
KMINUS:: VAL '20 < CONSTANTE DE PASSAGE DES
< MAJUSCULES AUX MINUSCULES.
KAM:: VAL KA+KMINUS < A
KBM:: VAL KB+KMINUS < B
KCM:: VAL KC+KMINUS < C
KDM:: VAL KD+KMINUS < D
KEMI:: VAL KE+KMINUS < E
KFM:: VAL KF+KMINUS < F
KGM:: VAL KG+KMINUS < G
KHM:: VAL KH+KMINUS < H
KIM:: VAL KI+KMINUS < I
KJM:: VAL KJ+KMINUS < J
KKM:: VAL KK+KMINUS < K
KLM:: VAL KL+KMINUS < L
KMM:: VAL KM+KMINUS < M
KNM:: VAL KN+KMINUS < N
KOM:: VAL KO+KMINUS < O
KPM:: VAL KP+KMINUS < P
KQM:: VAL KQ+KMINUS < Q
KRM:: VAL KR+KMINUS < R
KSM:: VAL KS+KMINUS < S
KTM:: VAL KT+KMINUS < T
KUM:: VAL KU+KMINUS < U
KVM:: VAL KV+KMINUS < V
KWM:: VAL KW+KMINUS < W
KXM:: VAL KX+KMINUS < X
KYM:: VAL KY+KMINUS < Y
KZM:: VAL KZ+KMINUS < Z
KACCOG:: VAL '7B < ACCOLADE GAUCHE.
KDPBIS:: VAL '7C < 'DEUX POINTS' BIZARRES...
KACCOD:: VAL '7D < ACCOLADE DROITE.
KALTM:: VAL KACCOD < FABULEUX ALT-MODE !!!
ALTMAX:: VAL KZ < CODE MAXIMUM DU CARACTERE POUVANT
< REMPLACER LE ALT-MODE LORS DE L'UTILI-
< SATION DES FONCTIONS '1EX5...
KINTER:: VAL KAM < CARACTERE REMPLACANT TOUT CARACTERE
< EN ENTREE SUR UNE VISU INTERDITE
< PAR 'VINTER'...
IF ALTMAX-KINTER,XEIF%,,
IF ATTENTION : IL NE FAUT PAS QUE LE ALT-MODE PUISSE
IF ETRE REMPLACE PAR LE CARACTERE 'KINTER' ; EN EFFET
IF SI 'KINTER' REMPLACE PAR '1EX5 LE ALT-MODE, PUIS QUE
IF L'ON INTERDISE CETTE VISU PAR 'VINTER', POUR CHAQUE
IF CARACTERE FRAPPE, ON FERA AINSI UN ALT-MODE !!!
XEIF%: VAL ENDIF
KSINUS:: VAL '7E < PETIT BOUT DE SINUSOIDE...
KDEL:: VAL '7F < RUBOUT.
KRUBOU:: VAL KDEL < RUBOUT.
K6D:: VAL '6D < EXTENSION CR+LF...
KINEX:: VAL 'FF < CARACTERE INEXISTANT.
KEON:: VAL KEOT < CARACTERE DE FIN DE NOM...
KCCI:: VAL KPE < CARACTERE D'INTRODUCTION DES COMMANDES
< ENVOYEES AU CCI.
KBREAK:: VAL KNUL < LE CODE DU 'BREAK' EST CELUI DU 'NULL'.
IF KBREAK-K,,XEIF%,
IF ATTENTION : IL Y A DES TAS DE TESTS DANS
IF 'HDLVIS' QUI NE VONT PAS MARCHER ('JAE',...) !!!
XEIF%: VAL ENDIF
PAGE
<
<
< N U M E R O D E C O M P T E
< D U S Y S T E M E :
<
<
XK1:: VAL KDP < LE NUMERO DE COMPTE
XK2:: VAL KS < DU SYSTEME
XK3:: VAL KY < EST DEFINI
XK4:: VAL KS < PAR 4 CARACTERES.
<
<
< M O N N U M E R O D E C O M P T E :
<
<
XXK1:: VAL KDP
XXK2:: VAL KJ
XXK3:: VAL KF
XXK4:: VAL KC
<
<
< N U M E R O D E C O M P T E D E S I M U L A T I O N :
<
<
XXXK1:: VAL KDP
XXXK2:: VAL KS
XXXK3:: VAL KI
XXXK4:: VAL KM
PAGE
<
<
< G E N E R A T I O N D Y N A M I Q U E
< D E C A R T E S :
<
<
< FONCTION :
< LES CONSTANTES SUIVANTES PERMET-
< TENT LA GENERATION DYNAMIQUE DE CAR-
< TES EN DEFINISSANT LE FORMAT DES
< CARTES STANDARD (0, 9, 21, 37) AINSI
< QUE LES DEUXIEMES OPERANDES DE L'OPE-
< RATEUR '='.
<
<
<
< DEFINITION DES FONCTIONS DISPONIBLES
< EN TANT QUE DEUXIEME OPERANDE DE '=' :
<
KOLGET:: VAL 'F1 < DEUXIEME OPERANDE DE L'OPERATEUR '='
< DEMANDANT L'ACCES AU CARACTERE COURANT
< DE LA CARTE "DYNAMIQUE" DONT L'INDEX
< EST LE PREMIER OPERANDE.
KOLSTO:: VAL 'F2 < DEUXIEME OPERANDE DE L'OPERATEUR '='
< DEMANDANT DE METTRE DANS LA CARTE
< "DYNAMIQUE" LE CARACTERE CONTENU DANS
< L'OCTET LIBRE DE CE DEUXIEME OPERANDE
< A L'INDEX DONNE PAR LE PREMIER
< OPERANDE (VOIR LE MASQUE 'KOLC' POUR LA
< DEFINITION DU CARACTERE A INSERER).
KOLMOV:: VAL 'F3 < FONCTION PERMETTANT DE DEPLACER
< UNE CHAINE DE CARACTERES D'INDEX
< INITIAL DEFINI PAR 'KOLMOE' VERS
< L'INDEX FINAL DEFINI PAR 'KOLMOR'
< DANS LE PREMIER OPERANDE DE '=',
< ET SUR UNE LONGUEUR DEFINI PAR
< PAR 'KOLMOL' DANS LE DEUXIEME
< OPERANDE.
KOLTES:: VAL 'F4 < FONCTION PERMETTANT DE RECHERCHER
< LE CARACTERE DEFINI PAR LE MASQUE 'KOLC'
< DANS LA CHAINE DEFINIE PAR SON
< INDEX DE PREMIER CARACTERE (MASQUE
< 'KOLTED' DU PREMIER OPERANDE), ET
< PAR LE PREMIER CARACTERE NE LUI
< APPARTENANT PAS MASQUE 'KOLTEF' DU
< PREMIER OPERANDE) ; LE RESULTAT EST
< L'INDEX DE LA PREMIERE OCCURENCE DU
< CARACTERE, OU BIEN L'INDEX DE FIN DANS
< LES AUTRES CAS...
<
< DEFINITION DES MASQUES DU PREMIER OPERANDE :
<
KOLMOE:: VAL MFF00 < DEFINITION DE L'EMETTEUR LORS
< D'UN DEPLACEMENT DE CHAINE PAR
< LA FONCTION 'KOLMOV'.
KOLMOR:: VAL M00FF < DEFINITION DU RECEPTEUR LORS
< D'UN DEPLACEMENT DE CHAINE PAR
< LA FONCTION 'KOLMOV'.
KOLTED:: VAL MFF00 < DEFINITION DE L'INDEX DU PREMIER
< CARACTERE D'UNE CHAINE DANS LA
< FONCTION 'KOLTES'.
KOLTEF:: VAL M00FF < DEFINITION DE L'INDEX DU PREMIER
< CARACTERE N'APPARTENANT PLUS A UNE
< CHAINE DANS LA FONCTION 'KOLTES'.
<
< DEFINITION DES MASQUES DE DEUXIEME OPERANDE :
<
KOLF:: VAL MFF00 < DEFINITION DE LA FONCTION DEMANDEE ::
< PAR EXEMPLE : 'KOLGET', 'KOLSTO' OU
< BIEN 'KOLMOV'...
KOLMOL:: VAL M00FF < DEFINITION DU NOMBRE DE CARACTERES A
< DEPLACER PAR LA FONCTION 'KOLMOV'.
KOLC:: VAL M00FF < DEFINITION DU CARACTERE A INSERER
< DANS LA CARTE DYNAMIQUE PAR LA
< FONCTION 'KOLSTO', AINSI QUE DU CARAC-
< TERE A TESTER LORS DE LA FONCTION
< 'KOLTES'.
PAGE
<
<
< D E F I N I T I O N D E S C H A M P S :
<
<
< DEFINITION :
< UN 'CHAMP' EST UNE ZONE DE UN
< OU PLUSIEURS BITS CONTENUE DANS
< UN MOT MACHINE ; UN CHAMP SERA
< TOUJOURS DEFINI PAR UN MASQUE,
< ET SON POSITIONNEMENT SE FERA
< TOUJOURS A L'AIDE D'UNE VALEUR
< CADREE A DROITE DANS LE MOT
< MACHINE.
<
<
< GENERATION :
< PAR LES FONCTIONS 'FMASK' ET
< 'FVAL' DE L'ASSEMBLEUR LA PRE-
< MIERE PERMET DE DEFINIR UN MASQUE
< COURANT (PREMIER OPERANDE DE '='),
< LA SECONDE, DONNE LA VALEUR A INSE-
< RER DANS LE MASQUE COURANT (PREMIER
< OPERANDE DE '='), PUIS FAIT UN CUMUL
< (PAR UN 'OU') SUR UNE VALEUR COURANTE,
< QUI EST ENSUITE AFFECTEE A L'EXPRESSION
< COURANTE...
<
<
FOMASK:: VAL 'F5 < FONCTION DE DEFINITION DU MASQUE
< COURANT : CELUI-CI SERA LA PARTIE
< GAUCHE DE L'OPERATEUR '='.
FOVAL:: VAL 'F6 < FONCTION D'INSERTION DE LA VALEUR
< DANS LE MASQUE COURANT, ET DE CUMUL ;
< LA VALEUR EST L'OPERANDE GAUCHE DE
< L'OPERATEUR '='.
<
< GENERATION DES OPERANDES DROITS DE '=' :
<
XWOR%1: VAL KOLF=K < POUR CADRER LA FONCTION :
FMASK:: VAL FOMASK>XWOR%1 < 'DEFINITION D'UN MASQUE'.
FVAL:: VAL FOVAL>XWOR%1 < 'CADRAGE D'UNE VALEUR SUIVANT UN MASQUE'.
PAGE
<
<
< F O N C T I O N S C O M P L E T E S D E
< G E N E R A T I O N D E C A R T E S :
<
<
< NOTA :
< CES FONCTIONS 'FCXXX' S'UTILISERONT
< POUR GENERER D'AUTRES FONCTIONS AVEC
< CETTE FOIS DES ARGUMENTS, ET CECI DE
< LA FACON SUIVANTE :
<
?FCXXX
<
<
FCGET:: VAL KOLF=FMASK+KOLGET=FVAL
< ACCES A UN OCTET.
FCSTO:: VAL KOLF=FMASK+KOLSTO=FVAL
< RANGEMENT D'UN OCTET.
FCMOV:: VAL KOLF=FMASK+KOLMOV=FVAL
< MOUVEMENT D'UNE CHAINE D'OCTETS.
FCTES:: VAL KOLF=FMASK+KOLTES=FVAL
< RECHERCHE D'UN OCTET DANS UNE CHAINE.
PAGE
<
<
< D E F I N I T I O N D ' U N E C A R T E :
<
<
0 @1 2 3 L
XWOR%1: VAL K < DEBUT PRESUME D'UNE CARTE,
XWOR%2: VAL 80 < FIN PRESUMEE D'UNE CARTE...
XWOR%3: VAL KOLTED=FMASK+XWOR%1=FVAL+KOLTEF=FMASK+XWOR%2=FVAL
XWOR%4: VAL KOLC=FMASK+KZERO=FVAL?FCTES
KOL0:: VAL XWOR%3=XWOR%4 < DEFINITION DE LA ZONE 'ETIQUETTE' DES
< LIGNES A ASSEMBLER.
XWOR%4: VAL KOLC=FMASK+KUN=FVAL?FCTES
KOL1:: VAL XWOR%3=XWOR%4 < DEFINITION DE LA ZONE 'COMMANDE'.
XWOR%4: VAL KOLC=FMASK+KDEUX=FVAL?FCTES
KOL2:: VAL XWOR%3=XWOR%4 < DEFINITION DE LA ZONE 'ARGUMENT'.
XWOR%4: VAL KOLC=FMASK+KTROIS=FVAL?FCTES
KOL3:: VAL XWOR%3=XWOR%4 < DEFINITION DE LA ZONE 'COMMENTAIRE'.
XWOR%4: VAL KOLC=FMASK+KL=FVAL?FCTES
KOLON:: VAL XWOR%3=XWOR%4+1 < LONGUEUR D'UNE CARTE A ASSEMBLER.
IF XWOR%1-KOL0,XEIF%,XEIF%,
IF ATTENTION : ARGUMENTS DE BASE MAUVAIS !!!
XEIF%: VAL ENDIF
IF XWOR%2-KOL0-KOLON,,XEIF%,XEIF%
IF ATTENTION : ARGUMENTS DE BASE MAUVAIS !!!
XEIF%: VAL ENDIF
NCDYN:: VAL 3 < NOMBRE DE CARTES DYNAMIQUES,
CODGEN:: VAL KOLON*NCDYN < INDEX D'ACCES A LA PILE COURANTE DU
< CODE GENERE...
LCODG:: VAL YY8-CODGEN < NOMBRE D'OCTETS DE LA PILE DU CODE
< GENERE...
PAGE
<
<
< Q U E L Q U E S C O N S T A N T E S D A N S
< L E F I C H I E R D E D E F I N I T I O N S :
<
<
< NOTA :
< IL FALLAIT ATTENDRE QUE 'KOLON',
< 'KOL0', 'FCMOV',... SOIENT DEFINIS
< POUR COMMENCER A APPELER LA PROCE-
< DURE #SISP CMS5 GEN DEF# POUR INSE-
< RER 'NBITMO',...
<
<
<*******************************************************************************
XWOR%F: VAL ORDI
ORDI: @VAL '0@@@@ < TYPE DE L'ORDINATEUR HOTE DE 'CMS5'...
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL NBITMO
NBITMO: @VAL '0@@@@ < NOMBRE DE BITS PAR MOT-MACHINE...
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL SECTSY
SECTSY: @VAL '0@@@@ < PSEUDO-ADRESSE 'DKF' DE 'CMS5'.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
PAGE
<
<
< I N D E X D ' I T E R A T I O N :
<
<
KOLDO:: VAL 'F8 < CETTE FONCTION PERMET DE RECUPERER
< L'INDEX COURANT D'UNE ITERATION
< PORTANT SUR TOUTE INSTRUCTION
< AUTRE QU'UN 'EOT' ; SI UN 'DO N'
< A ETE EXECUTE, ELLE RENVERRA LES
< VALEURS N-1, N-2,..., 2, 1, 0
< AUXQUELLES AURONT ETE AJOUTEES
< LA PARTIE GAUCHE DE L'OPERATEUR "=",
< AINSI QUE L'OCTET QUI SUIT LA
< FONCTION ELLE-MEME.
KOLDOF:: VAL 'F9 < CETTE FONCTION EST IDENTIQUE A LA
< FONCTION 'KOLDO', MAIS PORTE SUR
< LES ITERATIONS INTERRESSANTS LES
< INSTRUCTIONS 'EOT'...
<
< DEFINITION DES FONCTIONS COMPLETES (SI NECESSAIRE) :
<
FCDO:: VAL KOLF=FMASK+KOLDO=FVAL
< AJOUTE A LA VALEUR DE L'EXPRESSION
< SITUEE A GAUCHE DE "=" L'INDEX COURANT
< DES ITERATIONS SUR INSTRUCTIONS DIF-
< FERENTES DE 'EOT'.
FCDOF:: VAL KOLF=FMASK+KOLDOF=FVAL
< AJOUTE A LA VALEUR DE L'EXPRESSION
< SITUEE A GAUCHE DE "=" L'INDEX COURANT
< DES ITERATIONS SUR 'EOT'.
PAGE
<
<
< D E F I N I T I O N D E S F O N C T I O N S
< D E T E S T D E S S Y M B O L E S :
<
<
< FONCTION :
< CETTE FONCTION DE L'ASSEMBLEUR 'FOSYMB'
< PERMET, LUI TRANSMETTANT UN SYMBOLE PAR
< L'INTERMEDIAIRE D'UNE CARTE DYNAMIQUE,
< DE SAVOIR SI CE SYMBOLE EXISTE, ET SI
< OUI, DE QUEL TYPE IL EST, ET QUEL EST
< SON MODE DE REFERENCE.
< DE PLUS, LES SOUS-FONCTIONS RECEMMENT
< INTRODUITES ('FSXXXX') PERMETTENT DE
< CHANGER LE DESCRIPTEUR D'UN SYMBOLE,
< AUTORISANT PAR EXEMPLE LA MISE A
< L'ETAT 'INDEFINI' D'UN SYMBOLE TRANS-
< LATABLE DEJA DEFINI, ET DONC AINSI
< SA REDEFINITION ULTERIEURE ; CETTE
< APPLICATION S'ECRIRA PAR EXEMPLE :
<
:
<
< CHAINA < FIN DE CHAINE.
<
< CHAINA
< CHAINX < CHECK-SUM DE CI-DESSUS.
<
< CHAINA
<
< CHAINA
< CHAINX < CHECK-SUM DE CI-DESSUS.
<
< CHAINA
<
< CHAINA < DEBUT DE CHAINE.
< CHAINX < CHECK-SUM DE CI-DESSUS.
<
<
< NOTA :
< ENFIN, POUR SIMPLIFIER
< LES CHOSES, SEULES LA
< PARTIE HAUTE ('DOL2') DE
< LA MEMOIRE EST SOUMISE A
< CE CONTROLE...
<
<
ICHAIN:: VAL EXIST < INDICATEUR EN BASCULE PERMETTANT
< DE GENERER , OU BIEN
< POUR LA VALEUR
< OPPOSEE...
IF ICHAIN-K,XEIF%,,XEIF%
IF ATTENTION : LA VALEUR INITIALE DE
IF 'ICHAIN' EST INCOMPATIBLE AVEC UNE BASCULE !!!
XEIF%: VAL ENDIF
PAGE
CALL #SISP CMS5 DSEC#
PAGE
<
<
< D E F I N I T I O N D E S R E G I S T R E S
< E M P I L A B L E S :
<
<
RA:: VAL SA-PSTS < REGISTRE 'A'.
RB:: VAL SB-PSTS < REGISTRE 'B'.
RX:: VAL SX-PSTS < REGISTRE 'X'.
RY:: VAL SY-PSTS < REGISTRE 'Y'.
RC:: VAL SC-PSTS < REGISTRE 'C'.
RL:: VAL SL-PSTS < REGISTRE 'L'.
RW:: VAL SW-PSTS < REGISTRE 'W'.
RK:: VAL SK-PSTS < REGISTRE 'K'.
<
<
< R E G I S T R E S N O N E M P I L A B L E S :
<
<
RP:: VAL SP-PSTS < REGISTRE 'P'.
RS:: VAL SS-PSTS < REGISTRE 'S'.
RSLO:: VAL SSLO-PSTS < REGISTRE 'SLO'.
RSLE:: VAL SSLE-PSTS < REGISTRE 'SLE'.
<
<
< N O M S D E S R E G I S T R E S :
<
<
KRA:: VAL KA < REGISTRE 'A',
KRB:: VAL KB < REGISTRE 'B',
KRX:: VAL KX < REGISTRE 'X',
KRY:: VAL KY < REGISTRE 'Y',
KRC:: VAL KC < REGISTRE 'C',
KRL:: VAL KL < REGISTRE 'L',
KRW:: VAL KW < REGISTRE 'W',
KRK:: VAL KK < REGISTRE 'K',
KRP:: VAL KP < REGISTRE 'P',
KRSTAT:: VAL KS < REGISTRE 'S'.
PAGE
<
<
< D E F I N I T I O N D E L A P R O T E C T I O N
< M E M O I R E :
<
<
LSPACE:: VAL XX64K < L'ESPACE MEMOIRE DELIMITE PAR
< UN COUPLE (SLO,SLE) NE DOIT
< PAS EXCEDER 'LSPACE' K-MOTS.
XWOR%4: VAL 4 < LES ADRESSES CONTENUES DANS LES REGISTRES
< 'SLO' ET 'SLE' SONT EN FAIT DECALEES
< DE 'DADR' PAR LE HARDWARE...
FADR:: VAL BIT>XWOR%4 < CES ADRESSES SONT DONC DES ADRESSES
< DE FADR-MOTS...
<*******************************************************************************
DADR:: VAL -XWOR%4 < POUR FAIRE DES DECALAGES A DROITE...
DADR: @VAL '0@@@@ < POUR CONVERTIR DES ADRESSES 16-MOTS.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
<
< DEFINITION DU COUPLE (SLO,SLE) IMPLICITE :
<
SO:: VAL ZERO-ZERO>DADR
SE:: VAL LSPACE>DADR*LK-Z
< NOTA : AVEC CE COUPLE (SO,SE), ON COUVRE
< TOUTE LA MEMOIRE MAITRE...
PAGE
<
<
< D E P L A C E M E N T D E S B A S E S :
<
<
DEPBAS:: VAL 128 < PORTEE DES BASES...
DEPCH:: VAL DEPBAS < BASE 'C' DANS LES TACHES HARDWARES.
DEPCS:: VAL DEPBAS < BASE 'C' DANS LES TACHES SOFTWARES'.
PAGE
<
<
< L I S T E E T A T T R I B U T S D E S
< P R O C E S S E U R S D U S Y S T E M E :
<
<
<
< M A S Q U E S A S S O C I E S :
<
MNUPRO:: VAL '0003 < NUMERO D'UN PROCESSEUR SUR UN
< BUS MEMOIRE DE NUMERO DONNE
< PAR 'MNUBUS' (DONNE PAR 'RDSI'
< DANS A).
MNUBUS:: VAL '001C < NUMERO D'UN BUS MEMOIRE DANS
< LE SYSTEME (DONNE PAR 'RDSI'
< DANS A).
IF MNUPRO(MNUBUS-K,,XEIF%,
IF ATTENTION : RECOUVREMENT DES 2 MASQUES !!!
XEIF%: VAL ENDIF
IF MNUBUS?MNUPRO=K-K,,XEIF%,
IF ATTENTION : ETANT DONNEES LES OPERATIONS
IF REALISEES SUR LES NUMEROS DE PROCESSEUR,
IF IL FAUT QUE CE MASQUE SOIT CADRE A DROITE !!!
XEIF%: VAL ENDIF
MSBOOT:: VAL '00E0 < POSITION DU SELECTEUR DE
< BOOTSTRAP (DONNE PAR 'RDSI'
< DANS A), SOIENT LES VALEURS POSSIBLES :
<*******************************************************************************
XXBTTY:: VAL K < 'TTY',
XXBPTR:: VAL '0@@@@+I < 'PTR',
XXBCDR:: VAL '0@@@@+I < 'CDR',
XXBMTU:: VAL '0@@@@+I < 'MTU',
XXBROM:: VAL '0@@@@+I < 'ROM',
XXBFLD:: VAL '0@@@@+I < 'FLD',
XXBMHD:: VAL '0@@@@+I < 'MHD',
XXBFHD:: VAL '0@@@@+I < 'FHD'.
XWOR%2: VAL '0@@@@ < VALEUR MAXIMALE ATTEINTE...
<*******************************************************************************
XWOR%3: VAL MSBOOT=K
XWOR%3: VAL -XWOR%3
XWOR%4: VAL MSBOOT>XWOR%3 < VALEUR MAXIMALE POSSIBLE...
IF XWOR%2-XWOR%4,XEIF%,XEIF%,
IF ATTENTION : ON A DEFINI TROP DE POSITIONS
IF POUR LE SELECTEUR DE BOOTSTRAP !!!
XEIF%: VAL ENDIF
MTYPRO:: VAL '0300 < TYPE DU PROCESSEUR (DONNE PAR
< 'RDSI' DANS 'A').
IF MNUPRO?MNUBUS=K-K,,XEIF%,
IF ATTENTION : IL CONVIENT DE PROCEDER A UN
IF DECALAGE A DROITE DES INFORMATIONS DONNEES
IF PAR LES 'RDSI' POUR CONNAITRE LE NUMERO D'UN
IF PROCESSEUR !!!
XEIF%: VAL ENDIF
PAGE
<
<
< D E F I N I T I O N D E S E N T R E E S - S O R T I E S :
<
<
< F O N C T I O N S :
<
<
FGR:: VAL 0 < FONCTION DE LECTURE,
FGW:: VAL 2 < FONCTION D'ECRITURE.
FAVW:: VAL FGW < FONCTION D'APPEL ECRITURE ALPHA-NUMERIQUE
< SUR VISU,
FAVWG:: VAL 10 < FONCTION D'APPEL ECRITURE GRAPHIQUE
< SUR VISU.
FGX:: VAL FGW < FGX=MAX(FGW,FGR) INITIALISE A PRIORI...
IF FGX-FGR,,XEIF%,XEIF%
FGX: VAL FGR < ET BIEN NON...
XEIF%: VAL ENDIF
XBITQ:: VAL 12 < BIT INDIQUANT POUR LE 'DKM' LA
< VALEUR A DONNER A 'QUANTA' :
< =1 POUR 1, =3 POUR 0.
FGRQ:: VAL COSBT?XBITQ=FMASK(K?FGR=FCINST
< LECTURE 'DKM' AVEC QUANTA=1.
FGWQ:: VAL COSBT?XBITQ=FMASK(K?FGW=FCINST
< ECRITURE 'DKM' AVEC QUANTA=1.
FGSGNA:: VAL '2 < FONCTION COMMUNE A TOUS LES HANDLERS
< 'SGN' LORSQUE LES DOIVENT
< ETRE CONCATENES AUX .
FGSGN:: VAL 'A < FONCTION COMMUNE A TOUS LES HANDLERS
< 'SGN' LORSQU'IL N'Y A PAS DE CONCA-
< TENATION AUTOMATIQUE.
FGSGNN:: VAL -1 < 'ASDEM' D'ACCES AU 'SGN' LORSQUE
< LA SUIT IMMEDIATEMENT
< LE .
FGID:: VAL '2 < FONCTION D'INSERT/DELETE DE 'HDLTRI'.
FGT:: VAL 'A < FONCTION DE TEST DE 'HDLTRI'.
<
<
< P A R A M E T R E S :
<
<
<*******************************************************************************
TYPITN:: VAL K < INDICATEUR 'INTERRUPTION NORMALE'.
TYPITX:: VAL '0@@@@+I < INDICATEUR 'INTERRUPTION EXCEPTION'.
<*******************************************************************************
<
< CARACTERE DANS UN MOT :
<
XWOR%1: VAL MOCD)MMOT=K < UN CARACTERE EST CONTENU DANS L'OCTET
< D'UN MOT.
XWOR%1: VAL NBITMO-B-XWOR%1+I
BITPAR:: VAL XWOR%1 < BIT DE PARITE CARACTERE DANS UN MOT.
PAGE
<
<
< D E F I N I T I O N D E S ' C C B ' :
<
<
CCBMO0:: MOT O < MOT0 : IL EST COMPOSE DES CHAMPS (BITS
< ET MASQUES) SUIVANTS :
BCCBIP:: VAL 0 < BIT DE MOT0 DISCRIMINANT LES 'IPI'
< CANAUX DES 'IPI' INTER-PROCESSEURS.
BCCBCR:: VAL 4 < BIT(MOT0) D'ENTREE DU COMPTE-RENDU.
BCCBBM:: VAL 7 < BIT(MOT0) DISCRIMINANT LES CANAUX
< MOTS(K) DES CANAUX OCTETS(1).
CCBDF:: VAL 1 < BIT SPECIAL "DEFAUT-SECTEUR".
CCBDKM:: VAL 6 < BIT SPECIAL "DISQUE AMOVIBLE".
CCBMAE:: VAL M000F < ZONE RESERVEE DANS LE MOT0 AUX
< EXTENSIONS D'ADRESSES...
CCBMO1:: MOT CCBMO0+D < MOT1 : IL EST COMPOSE DES CHAMPS
< SUIVANTS :
CCBCAN:: VAL 'C000 < TYPE DU CANAL (LDC/MDC/HDC) :
CCBHDC:: VAL '80 < CODE INDICATEUR D'UN CANAL "HDC".
CCBMDC:: VAL 'C0 < CODE INDICATEUR D'UN CANAL "MDC".
CCBLDC:: VAL '00 < CODE INDICATEUR D'UN CANAL "LDC".
XWOR%1: VAL MOCG=K
XWOR%1: VAL -XWOR%1
XWOR%2: VAL CCBCAN>XWOR%1
IF CCBHDC(XWOR%2-CCBHDC,,XEIF%,
IF ATTENTION : 'CCBHDC' EST MAUVAIS !!!
XEIF%: VAL ENDIF
IF CCBMDC(XWOR%2-CCBMDC,,XEIF%,
IF ATTENTION : 'CCBMDC' EST MAUVAIS !!!
XEIF%: VAL ENDIF
IF CCBLDC(XWOR%2-CCBLDC,,XEIF%,
IF ATTENTION : 'CCBLDC' EST MAUVAIS !!!
XEIF%: VAL ENDIF
CCBITN:: VAL '3F00 < NUMERO D'INTERRUPTION NORMALE,
XWOR%1: VAL CCBITN=K
XWOR%2: VAL MOCG=K
IF XWOR%1-XWOR%2,,XEIF%,
IF ATTENTION : LA GENERATION DES 'CCB' PAR DES
IF 'BYTE' POUR 'CCBITN' EST MAUVAISE !!!
XEIF%: VAL ENDIF
CCBCCN:: VAL '001F < NUMERO DE REGISTRES-CANAUX DANS LE
< CAS D'UN CANAL 'HDC',
MTRHDC:: VAL CCBCCN)MMOT < MASQUE D'EFFACEMENT DU NUMERO DE
< REGISTRES 'HDC'.
CCBMO2:: MOT CCBMO1+D < MOT2 (16 PREMIERS BITS DE L'ADRESSE
< MEMOIRE DE L'ECHANGE),
CCBMO3:: MOT CCBMO2+D < MOT3 (COMPTE DE MOTS/OCTETS, ET COMPTE-
< RENDU) :
BCCBDC:: VAL 1 < BIT DEFSEC/CLEAR DU COMPTE-RENDU.
BCCBME:: VAL 0 < BIT DEFAUT MEMOIRE DU COMPTE-RENDU.
CCBMO4:: MOT CCBMO3+D < MOT4 (ADRESSE DU COUPLEUR).
CCBMO5:: MOT CCBMO4+D < MOT5 (UTILISE SEULEMENT PAR LES DIS-
< AMOVIBLES 'DKM' ET 'DKU'...).
<
<
< E X T E N S I O N ' C C B ' :
<
<
< FONCTION :
< CETTE EXTENSION EST UTILISE PAR LE
< 'SVC' MAITRE 'SVCM6' ET PERMET LA
< REINITIALISATION CORRECTE DES MOT0
< ET MOT2 DU 'CCB'...
< ELLE FACILITE AINSI L'ITERATION
< D'UN ECHANGE CANAL A LA SUITE
< D'UN DEFAUT...
<
<
CCBMR2:: MOT CCBMO0-D < POUR L'INITIALISATION DE 'CCBMO2',
CCBMR0:: MOT CCBMR2-D < ET DE 'CCBMO0'...
PAGE
<
<
< R E G I S T R E D ' E T A T D ' U N
< C O U P L E U R :
<
<
< DEFINITION :
< LE REGISTRE D'ETAT D'UN COUPLEUR
< EST UN REGISTRE ACCESSIBLE A L'AIDE
< D'UNE 'SIO' D'ENTREE ETAT ; LES BITS
< QU'IL CONTIENT SONT DES INDICATEURS
< DE L'ETAT DU COUPLEUR.
<
<
ETADEF:: VAL 0 < SOMME DES INDICATEURS DE DEFAUTS
< REELS (EXCLUE DONC LA FIN D'ECHANGE).
ETACAD:: VAL 1 < ERREUR DE CADENCE EN ENTREE
< COMME EN SORTIE.
ETAPAR:: VAL 2 < INFORMATION INCORRECTE (PARITE,
< CHECKSUM,...).
ETAVIO:: VAL 3 < TENTATIVE DE VIOL (OH,... PROTECTION
< D'ECRITURE,... AH BON...).
ETADOG:: VAL 5 < CHIEN DE GARDE (OUAH, OUAH...) ;
< HEUREUSEMENT, IL EST PAS MECHANT...
ETABRK:: VAL 6 < APPEL OPERATEUR (BREAK,...).
ETAFBS:: VAL 7 < FIN DE BLOC EN SORTIE POUR LES VOIES
< FULL DUPLEX UNIQUEMENT.
ETARIL:: VAL 8 < LE REGISTRE D'INFORMATION EST LIBRE
< EN SORTIE, IL PEUT RECEVOIR LA DONNEE
< SUIVANTE : NE VAUT QUE POUR LES LIGNES
< FULL DUPLEX.
ETAS0:: VAL 11 < UTILISE POUR DKM/DKU POUR LES
< SYNCHRONISATIONS SUR SECTEUR 0...
ETAPIV:: VAL 12 < INFORMATION VALIDE LORS DE L'UTILI-
< SATION DU PUPITRE !!!
ETAFBK:: VAL 13 < FIN DE BLOC EN ENTREE COMME EN SORTIE ;
< MAIS FIN DE BLOC EN ENTREE UNIQUEMENT
< POUR LES LIGNES FULL DUPLEX.
ETANXT:: VAL 14 < EN ENTREE, LE REGISTRE INFORMATION
< CONTIENT LA DONNEE SUIVANTE, ALORS
< QU'EN SORTIE, IL PEUT RECEVOIR LA
< SUIVANTE (LA SIGNIFICATION 'EN
< SORTIE' N'A PAS DE SENS POUR LES
< LIGNES FULL DUPLEX.
ETAOPE:: VAL 15 < LE COUPLEUR EST OPERATIONNEL : IL EST
< PRESENT, SOUS TENSION ET TOUT
< ET TOUT...
PUPLOC:: VAL ETAOPE < LORSQUE CE BIT EST A 1 DANS LE
< MOT D'ETAT DU PUPITRE, CELA SIGNIFIE
< QUE LE PUPITRE EST 'UNLOCK'...
PUSTEP:: VAL ETAFBS < BIT INDIQUANT DANS LE MOT D'ETAT DU
< PUPITRE QU'UNE ACTION SUR 'STEP' A EU
< LIEU.
<
< DEFINITION DES MASQUES ASSOCIES :
<
XWOR%: VAL NBITMO-B-ETADEF
MTADEF:: VAL BIT>XWOR% < MASQUE ASSOCIE A 'ETADEF'.
XWOR%: VAL NBITMO-B-ETACAD
MTACAD:: VAL BIT>XWOR% < MASQUE ASSOCIE A 'ETACAD'.
XWOR%: VAL NBITMO-B-ETAPAR
MTAPAR:: VAL BIT>XWOR% < MASQUE ASSOCIE A 'ETAPAR'.
XWOR%: VAL NBITMO-B-ETAVIO
MTAVIO:: VAL BIT>XWOR% < MASQUE ASSOCIE A 'ETAVIO'.
XWOR%: VAL NBITMO-B-ETADOG
MTADOG:: VAL BIT>XWOR% < MASQUE ASSOCIE A 'ETADOG'.
XWOR%: VAL NBITMO-B-ETABRK
MTABRK:: VAL BIT>XWOR% < MASQUE ASSOCIE A 'ETABRK'.
XWOR%: VAL NBITMO-B-ETAFBS
MTAFBS:: VAL BIT>XWOR% < MASQUE ASSOCIE A 'ETAFBS'.
XWOR%: VAL NBITMO-B-ETARIL
MTARIL:: VAL BIT>XWOR% < MASQUE ASSOCIE A 'ETARIL'.
XWOR%: VAL NBITMO-B-ETAFBK
MTAFBK:: VAL BIT>XWOR% < MASQUE ASSOCIE A 'ETAFBK'.
XWOR%: VAL NBITMO-B-ETANXT
MTANXT:: VAL BIT>XWOR% < MASQUE ASSOCIE A 'ETANXT'.
XWOR%: VAL NBITMO-B-ETAOPE
MTAOPE:: VAL BIT>XWOR% < MASQUE ASSOCIE A 'ETAOPE'.
<
<
< R E G I S T R E D E C O M M A N D E
< D ' U N C O U P L E U R :
<
<
< DEFINITION :
< LE REGISTRE DE COMMANDE D'UN COUPLEUR
< EST ACCESSIBLE PAR UNE 'SIO' DE SORTIE
< DE COMMANDE, ET PERMET DE REALISER AVEC
< LE COUPLEUR LES OPERATIONS N'IMPLIQUANT
< PAS DE TRANSFERT DE DONNEES.
<
<
COM8:: VAL 8 < UTILISE PAR 'CR' ET 'DKM'...
COM10:: VAL 10 < UTILISE PAR 'DKM'...
COMRW:: VAL 9 < INDIQUE LE SENS D'UN TRANSFERT DE
< DONNEES :
< COMRW=COMR=K : LECTURE D'INFORMATIONS,
< COMRW=COMW=1 : ECRITURE D'INFORMATIONS.
COMR:: VAL 0 < LECTURE D'INFORMATIONS,
COMW:: VAL 1 < ECRITURE D'INFORMATIONS.
COMINI:: VAL 11 < DEMANDE D'INITIALISATION D'UN COUPLEUR.
COMFBK:: VAL 12 < DEMANDE DE FIN DE BLOC.
COMSTR:: VAL 13 < DEMANDE DE LANCEMENT D'UN ECHANGE.
< ('START')
COMTST:: VAL 14 < MISE DU COUPLEUR EN MODE TEST.
COMINT:: VAL 15 < DEMANDE DE VALIDATION DES INTERRUPTIONS.
<
< MASQUES ASSOCIES AUX BITS DU REGISTRE DE COMMANDE :
<
XWOR%: VAL NBITMO-B-COM8
MOM8:: VAL BIT>XWOR% < MASQUE ASSOCIE A 'COM8'.
XWOR%: VAL NBITMO-B-COM10
MOM10:: VAL BIT>XWOR% < MASQUE ASSOCIE A 'COM10'.
XWOR%: VAL NBITMO-B-COMRW
MOMRW:: VAL BIT>XWOR% < MASQUE ASSOCIE A 'COMRW'.
XWOR%: VAL NBITMO-B-COMINI
MOMINI:: VAL BIT>XWOR% < MASQUE ASSOCIE A 'COMINI'.
XWOR%: VAL NBITMO-B-COMFBK
MOMFBK:: VAL BIT>XWOR% < MASQUE ASSOCIE A 'COMFBK'.
XWOR%: VAL NBITMO-B-COMSTR
MOMSTR:: VAL BIT>XWOR% < MASQUE ASSOCIE A 'COMSTR'.
XWOR%: VAL NBITMO-B-COMTST
MOMTST:: VAL BIT>XWOR% < MASQUE ASSOCIE A 'COMTST'.
XWOR%: VAL NBITMO-B-COMINT
MOMINT:: VAL BIT>XWOR% < MASQUE ASSOCIE A 'COMINT'.
PAGE
<
<
< C O N S T A N T E S G E N E R A L E S D U
< S Y S T E M E D ' I N T E R R U P T I O N :
<
<
NMSNN:: VAL 16 < NOMBRE MAXIMUM DE SOUS-NIVEAUX
< NORMAUX (DE 0 A NMSNN-1) POUR
< UN NIVEAU D'INTERRUPTION DONNE.
< RAPPELONS QU'ALORS : V=1 LORS
< D'UN 'ACK'.
NMSNE:: VAL 3*NMSNN < NOMBRE MAXIMUM DE SOUS-NIVEAUX
< D'EXCEPTION (DE 0 A NMSNE-1) POUR
< UN NIVEAU D'INTERRUPTION DONNE.
< RAPPELONS QU'ALORS : C=1 LORS
< D'UN 'ACK'.
PAGE
<
<
< C O N S T A N T E S G E N E R A L E S
< D I V E R S E S :
<
<
THALT:: VAL 2 < PERIODE EXPRIMEE EN MICRO-SECONDES
< DE DECOMPTAGE SUR LE REGISTRE X
< PAR L'INSTRUCTION 'HALT'.
MINUTE:: VAL 60 < DUREE EN SECONDES D'UNE MINUTE.
PAGE
<
<
< D E F I N I T I O N D E S S E M A P H O R E S :
<
<
< DEFINITION :
< LES SEMAPHORES DITS D'"EXCLUSION"
< SONT DES STRUCTURES DE DONNEES CON-
< NUES DE LA MICRO-MACHINE, ET QUI
< PERMETTENT, VIA LES INSTRUCTIONS
< 'RQST' ET 'RLSE' D'ASSURER DES FONC-
< TIONS D'EXCLUSION ET DE SYNCHRONI-
< SATION (EVENTUELLEMENT) ENTRE PLU-
< SIEURS TACHES.
<
<
DSEC
SEMBET: EQU $
<
< DEFINITION DU "COMPTEUR" :
<
BYTE K;K < L'OCTET 'MBETA' CONTIENT LE COMPTEUR
< DU SEMAPHORE.
MBETA:: VAL MOCD < COMPTEUR (OU BETA) DU SEMAPHORE.
XMBETA:: VAL MBETA)MMOT=K
XMBETA: VAL NBITMO-XMBETA < DECALAGE POUR ALLER ETENDRE LE BIT
< DE SIGNE DU BETA (A GAUCHE).
MAXBET:: VAL '70 < VALEUR AU DELA DE LA QUELLE IL FAUT
< S'INQUIETER...
IF MAXBET>S-MBETA,XEIF%,,
IF MAXBET EST INCOMPATIBLE AVEC MBETA !!!
XEIF%: VAL ENDIF
<
< DEFINITION DE LA "FILE D'ATTENTE" :
<
SEMWQ: EQU $ < FILE D'ATTENTE SI LE SEMAPHORE
XXLSEM:: VAL SEMWQ-SEMBET < TRANSLATION D'ACCES A LA LISTE DES
< TACHES EN ATTENTE.
DZS LSEM < EST DIT D'EXCLUSION...
SPHEX0:: VAL W < VALEUR INITIALE D'UN SEMAPHORE
< D'EXCLUSION.
XXSEM0:: VAL K < VALEUR INITIALE D'UN SEMAPHORE
< QUELCONQUE...
IF XXSEM0-K,,XEIF%,
IF ATTENTION : 'XXSEM0' EST MAUVAIS !!!
XEIF%: VAL ENDIF
XXSIT0:: VAL XXSEM0 < VALEUR INITIALE D'UN SIT.
IF XXSIT0-K,,XEIF%,
IF ATTENTION : 'XXSIT0' EST MAUVAIS !!!
XEIF%: VAL ENDIF
XXCHV0:: VAL XXSEM0 < VALEUR INITIALE D'UN 'SCHVID'.
IF XXCHV0-K,,XEIF%,
IF ATTENTION : 'XXCHV0' EST MAUVAIS !!!
XEIF%: VAL ENDIF
XXLOC0:: VAL XXSEM0 < VALEUR INITIALE D'UN 'SEMLOC'.
IF XXLOC0-K,,XEIF%,
IF ATTENTION : 'XXLOC0' EST MAUVAIS !!!
XEIF%: VAL ENDIF
PAGE
<
<
< S Y N C H R O N I S A T I O N S U R L E M O T
< ' C D A G 0 ' D E L A ' C D A G ' :
<
<
< FONCTION :
< LE MOT 'CDAG0' DE LA 'CDAG'
< PEUT ETRE TESTE PAR UNE ATTENTE
< PASSIVE DES UTILISATEURS (VIA
< LE SEMAPHORE 'SEMCDA' ET LES
< 'HDLSER'). POUR CE FAIRE LE
< SYSTEME PAR 'IDLE' TESTE LES
< VALEURS POSITIVES DE 'CDAG0' ;
< LORSQU'IL EN DETECTE, ET SI DES
< UTILISATEURS L'ATTENDENT, IL LES
< DEBLOQUE... POUR EVITER DES BLO-
< CAGES INDEFINIS, L'HORLOGE A
< CHAQUE CHANGEMENT DE MINUTE EN
< FAIT AUTANT...
< ELLE S'ATTEINT PAR LE 'SVC'
< 'FONDOR' AVEC UNE DUREE DE SOM-
< MEIL DEMANDEE NULLE...
<
<
< NOTA :
< 1 - CETTE FONCTION (CF. 'FONDOR')
< EST ACCESSIBLE QUELQUE SOIT L'ETAT
< D'APPROPRIATION DE LA 'CDAG' ; ON PEUT
< DONC TOUJOURS TESTER 'CDAG0', MAIS
< PAS OBLIGATOIREMENT CONNAITRE SA
< VALEUR PRECISE (UNIQUEMENT SON SIGNE).
< 2 - LA FREQUENCE DES TESTS REALISES
< PAR 'IDLE' PEUT ETRE TRES DIFFERENTE
< DE CELLE DES MISES A JOUR DU MOT
< 'CDAG0' PAR UN AUTRE PROCESSUS ; ON
< PEUT DONC RATER DE TELS CHANGEMENTS ;
< MAIS N'OUBLIONS PAS QUE CELA SERA
< UTILISE AVEC UN MECANISME DU TYPE
< PRODUCTEUR-CONSOMMATEUR, CE QUI
< IMPLIQUE 2 FREQUENCES IDENTIQUES...
<
<
CDAG0:: MOT O < MOT DE LA 'CDAG' QUI PERMET UNE SYNCHRO-
< NISATION INTER-UTILISATEURS (ET MEME
< INTER-SYSTEMES...).
XCDAG0:: VAL K < LE SYSTEME TESTERA LES VALEURS
< NEGATIVES/NULLES ET POSITIVES...
PAGE
<
<
< C O N F I G U R A T I O N P E R I P H E R I Q U E :
<
<
XXBRAC:: VAL 4 < INDICATEUR DES ARGUMENTS DE 'SIO' INDI-
< QUANT QUE LE COUPLEUR CORRESPONDANT
< EST IN (0) / HORS (1) RACK...
XWOR%9: VAL COSBT < HORS-RACK A PRIORI...
INRACK: @
<
< TESTONS L'EXISTENCE DU SYMBOLE 'INRACK' ???
< S'IL EXISTE, ON ADMET QUE LES COUPLEURS SONT
< IN-RACK, SINON, HORS-RACK :
<
XWOR%1: VAL KOLF=FMASK+KOLTES=FVAL
XWOR%1: VAL KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2: VAL KOLTED=FMASK+KOL0=FVAL
XWOR%2: VAL KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3: VAL XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE 'INRACK'...
XWOR%4: VAL MSYMBI=FMASK+KOL0=FVAL
XWOR%4: VAL MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
IF XWOR%4=FCSYMT-SYMBX,,XEIF%,
XWOR%9: VAL CORBT < ET BIEN NON, 'IN-RACK'...
XEIF%: VAL ENDIF
XXRACK:: VAL XWOR%9 < 'COSBT'/'CORBT' POUR OUT-RACK/IN-RACK...
OFFRAC:: VAL XXRACK?XXBRAC=FMASK(K=FCINST
< GENERATION DE L'INDICATEUR IN/HORS-RACK,
< SUIVANT QUE LE SYMBOLE 'INRACK' EXISTE
< OU PAS...
<
<
< L I S T E D E S C O U P L E U R S P R E S E N T S :
<
<
ACPUP:: VAL '17F0 < PUPITRE.
ACCBM:: VAL '00D0 < 'CBM' D'ACCES A LA 'CDAI' ; A NOTER
< LA CORRESPONDANCE : "M" --> "I"...
ACCBJ:: VAL '00C8 < 'CBM' D'ACCES A LA 'CDAJ' ; A NOTER
< LA CORRESPONDANCE : "J" --> "J"...
ACLP1:: VAL '40 < IMPRIMANTE RAPIDE 1.
ACLP1: VAL ACLP1?OFFRAC
ACCR1:: VAL '10 < LECTEUR DE CARTES 1.
ACCR1: VAL ACCR1?OFFRAC
ACCR2:: VAL '28 < LECTEUR DE CARTES 2.
ACCR2: VAL ACCR2?OFFRAC
ACHOR:: VAL '17FC < HORLOGE.
ACDKF:: VAL '38 < DISQUE A TETES FIXES.
ACDKF: VAL ACDKF?OFFRAC
ACDKM:: VAL '20 < DISQUE A TETES MOBILES.
< A T T E N T I O N : 'DKM' N'EST PLUS
< SITUEE A L'ADRESSE DEBANALISEE RECONNUE
< PAR LE MICRO-PROGRAMME DE BOOT-STRAP...
< POUR BOOT-STRAPER A PARTIR DE 'DKM'
< DANS LE CAS D'UN EXPLOITATION REDUITE
< (SANS 'DKF'), IL FAUDRA EN FAIT BOOT-
< STRAPER A PARTIR DE 'DKU', EN AYANT
< PERMUTER LES 2 DISPACKS...
ACDKM: VAL ACDKM?OFFRAC
ACDKU:: VAL '30 < DISQUE A TETES MOBILES UTILISATEUR.
< A T T E N T I O N : 'DKU' DEVIENT LE
< DISQUE DEBANALISE A PARTIR DUQUEL
< ON PEUT BOOT-STRAPER... DONC, NE PAS
< OUBLIER DE PERMUTER LES DISPACKS...
ACDKU: VAL ACDKU?OFFRAC
ACTTY1:: VAL '17F8 < TELETYPE DE SERVICE.
ACMU1:: VAL '110C < MULTIPLEXEUR DES VISUS
ACMU1: VAL ACMU1?OFFRAC
XWOR%8: VAL 4 < DECALAGE DES NUMEROS DE VISU.
XXVI1:: VAL '0>XWOR%8 < VISU 1 D'UN COUPLEUR 4 VOIES,
XXVI2:: VAL '1>XWOR%8 < VISU 2 D'UN COUPLEUR 4 VOIES,
XXVI3:: VAL '2>XWOR%8 < VISU 3 D'UN COUPLEUR 4 VOIES,
XXVI4:: VAL '3>XWOR%8 < VISU 4 D'UN COUPLEUR 4 VOIES.
ACVI1:: VAL ACMU1?XXVI1 < PSEUDO-COUPLEUR VISU1.
ACVI2:: VAL ACMU1?XXVI2 < PSEUDO-COUPLEUR VISU2.
ACVI3:: VAL ACMU1?XXVI3 < PSEUDO-COUPLEUR VISU3.
ACVI4:: VAL ACMU1?XXVI4 < PSEUDO-COUPLEUR VISU4.
ACMU2:: VAL '1104 < MULTIPLEXEUR DES VISUS
ACMU2: VAL ACMU2?OFFRAC
ACVI5:: VAL ACMU2?XXVI1 < PSEUDO-COUPLEUR VISU5.
ACVI6:: VAL ACMU2?XXVI2 < PSEUDO-COUPLEUR VISU6.
ACVI7:: VAL ACMU2?XXVI3 < PSEUDO-COUPLEUR VISU7.
ACVI8:: VAL ACMU2?XXVI4 < PSEUDO-COUPLEUR VISU8.
ACCU1:: VAL '0000 < COUPLEUR UNIVERSEL 1
ACCU1: VAL ACCU1?OFFRAC
ACCU2:: VAL '0008 < COUPLEUR UNIVERSEL 2.
ACCU2: VAL ACCU2?OFFRAC
ACCU3:: VAL '0048 < COUPLEUR UNIVERSEL 3.
ACCU3: VAL ACCU3?OFFRAC
ACMT1:: VAL '18 < DEROULEUR DE BANDES MAGNETIQUES 1.
ACMT1: VAL ACMT1?OFFRAC
<
<
< POUR CHANGER LA CONFIGURATION, IL FAUT :
<
< 1- MODFIER LA LISTE CI-DESSUS ;
< 2- PATCHER LA TABLE 'DCTIT' (NIVEAUX D'IT) ;
< 3- PATCHER LA TABLE 'TPER' (NOM DES NIVEAUX IT).
<
<
< F O N C T I O N P E R I P H E R I Q U E S :
<
<
FPHIN:: VAL '0 < ENTREE INFORMATION.
FPHOUT:: VAL '1 < SORTIE INFORMATION.
FPHETA:: VAL '2 < ENTREE ETAT.
FPHCMD:: VAL '3 < SORTIE COMMANDE.
FPHDUM:: VAL '4
FPHSAD:: VAL '5 < SORTIE ADRESSE DISQUE...
FPHETB:: VAL '6 < ENTREE MOT D'ETAT B.
FPHCME:: VAL '7 < SORTIE COMMANDE...
PAGE
<
<
< M E M O I R E B A N A L I S E E :
<
<
< DEFINITION :
< LA MEMOIRE BANALISEE CORRESPOND
< AUX PREMIERES ADRESSES DE LA MEMOIRE
< BASSE (DITE ENCORE "MEMOIRE MAITRE",
< PARCE QUE CORRESPONDANT A L'IMPLANTA-
< TION DU SYSTEME) ; ON Y TROUVE UN
< CERTAIN NOMBRE D'INFORMATIONS UTI-
< LISEES PAR LA MICRO-MACHINE...
PROG
<
<
< P O I N T E U R S G E N E R A U X :
<
<
XXNS: WORD XINI < NS INITIAL
XXNL: WORD K < nl.
ALPSTH: WORD PSTH00 < ADRESSE DES 'PSTH'.
WORD PSTS00
WORD SVCMTR < ENTREE SVC MAITRE.
WORD SVCESC < ENTREE SVC ESCLAVE.
WORD PSTH10 < 'PSTH' DU DEFAUT SECTEUR.
WORD RECOV < LE MOT7 DE LA MEMOIRE CONTIENT
< LA VALEUR DE REINITIALISATION DU
< REGISTRE P DU RECOVERY LORS
< DES DEFAUTS SECTEURS.
INICMS: WORD RESTAR < ADRESSE D'INITIALISATION.
WORD ASMST < FAUX REGISTRE S INITIALISE
< EN MODE MAITRE, AU CAS OU
< LA MEMOIRE BASSE ('0) SERAIT
< PRISE POUR UNE DCT (CAS OU
< @DCT=K !!!) ; ALORS ON IRAIT SE
< BRANCHER DANS LE RESTART, D'OU
< UN ACTD ; UNE ANALYSE DU CONTENU
< DES REGISTRES DE LA TACHE,
< DISCRIMINERAIT UN VRAI RESTART
< D'UN FAUX...
<
<
< C O N T R O L E P R O C E S S E U R T V
< B A S S E - D E F I N I T I O N :
<
< ( P R E M I E R E P A R T I E )
<
<
TVENTR: WORD AMEMTV < DONNE LA TRANSLATION A APPORTER DANS
< 'MEMTV' LORS DES OPERATIONS DE LECTURE
< A PARTIR DE 'DKU' (FONCTION 'FONTVR').
< C'EST CETTE CONSTANTE QUI EST UTILISEE
< POUR ENTRELACER LES TROIS COMPOSANTES
< LORS DES TRANSFERTS RAPIDES...
< ETAT INITIAL : MODE 'FAST', C'EST-A-DIRE
< NON ENTRELACE...
XMEMXT:: VAL EXIST < VALEUR DU MOT 'MEMINX' OBLIGEANT TH0/TH2
< A TRAITER LES ALARMES "MEMOIRE INEXIS-
< TANTE" DE L'UTILISATEUR.
XMEMXI:: VAL NEXIST < VALEUR DE 'MEMINX' PERMETTANT A TH0/TH2
< D'IGNORER LES ALARMES "MEMOIRE INEXIS-
< TANTE" DES UTILISATEURS ; CELA EST TRES
< UTILE, CAR EN EFFET, CE TYPE D'ALARME NE
< PEUT SE PRODUIRE AVEC LES UTILISATEURS,
< SAUF AVEC LA 'CDAJ', TANT QUE CELLE-CI
< MERDERA...
IF XMEMXT-XMEMXI,XEIF%,,XEIF%
IF ATTENTION : TEST DISCRIMINATOIRE IMPOSSIBLE !!!
XEIF%: VAL ENDIF
MEMINX: WORD XMEMXI < MOT PERMETTANT A 'TH0' DE SAVOIR S'IL
< DOIT TRAITER OU IGNORER LES ALARMES
< "MEMOIRE INEXISTANTE" DES UTILISATEURS.
XX256:: VAL 256 < FORMAT D'UNE TRAME NUMERIQUE DE FAIBLE
< DEFINITION.
XL256:: VAL XX256 < NOMBRE DE LIGNES D'UNE IMAGE,
XC256:: VAL XX256 < NOMBRE DE COLONNES D'UNE IMAGE.
TVLIMA:: VAL XC256/NBITMO*XL256/LK
< LONGUEUR EN K-MOTS D'UNE TRAME DE
< FAIBLE DEFINITION...
XXTVI:: VAL TVLIMA*LK < 'XXTVI' DEFINIT LE NOMBRE DE DEPLACE-
< MENT MEMOIRE A FAIRE POUR SIMULER LA
< VISUALISATION D'UNE TRAME EN TYPE
< "T1600"...
XXXTVI:: VAL XXTVI < NOMBRE DE MOTS DEPLACES EN UN SEUL
< 'MVTS' OU 'MVTM'.
<*******************************************************************************
TVNITE: WORD XXTVI/XXXTVI < DONNE LE NOMBRE D'ITERATIONS DES 'MVTS'
< EN SIMULATION DE VISUALISATION ; CE
< MOT EST MIS LA PARCE QU'ON NE PEUT PAS
< LE METTRE AILLEURS !!!
TVNITE: @MOT '0@@@@ < MOT CONTENANT LE NOMBRE D'ITERATIONS.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
<
<
< P U P I T R E S E T E N T R E E S - S O R T I E S :
<
<
VINTER: WORD WINTER < DONNE LA LISTE DES VISUS ACCESSIBLES
< EN ENTREE...
< (MIS ICI AFIN DE NE JAMAIS CHANGER SON
< ADRESSE !!!)
ABOX: WORD BOXIPI < RELAI VERS LA BOITE AUX LETTRES...
WSCHED: WORD NILK < MEMOIRE DU MICRO-SCHEDULER.
WORD NILK < MEMOIRE DU PUPITRE 0.
WORD NILK < MEMOIRE DU PUPITRE 1.
WORD NILK < MEMOIRE DU PUPITRE 2.
WORD NILK < MEMOIRE DU PUPITRE 3.
WORD LDC0 < CONTEXTES LDC0.
WORD LDC1 < CONTEXTES LDC1.
WORD LDC2 < CONTEXTES LDC2.
WORD LDC3 < CONTEXTES LDC3.
<
<
< D E F I N I T O N D E L A Z O N E ' C D A ' A C T I V E :
<
<
OCDA: WORD AOCDA < DEBUT DE LA ZONE 'CDA',
ECDA: WORD AECDA < FIN DE LA ZONE 'CDA'
<
<
< D E F I N I T I O N D U R E G I S T R E ' I M ' :
<
<
RIMMST: WORD NILK < MOT CONTENANT EN PERMANENCE LA VALEUR
< A DONNER AU REGISTRE 'IM' DU PROCESSEUR
< MAITRE ; ELLE EST INITIALISEE DANS LA
< PHASE D'INITIALISATION DU SYSTEME ; LE
< REGISTRE 'IM' EST MIS A JOUR EN PERMA-
< NENCE PAR 'IDLE', CE QUI PERMET DE LE
< MODIFIER PAR LE 'DEBUG ABSOLU'...
< (NOTA : CE MOT EST THEORIQUEMENT DESTINE
< A L'OPERATEUR 'VSS')
PAGE
<
<
< C O N T R O L E P R O C E S S E U R T V
< D E B A S S E - D E F I N I T I O N :
<
< ( D E U X I E M E P A R T I E )
<
<
FONTV:: VAL '01 < FONCTION ADRESSABLE A 'DKU' MEME
< S'IL N'EXISTE PAS, ET QUI PERMET
< DE FAIRE EXECUTER UN 'SVCM3' DE
< VISUALISATION EN TELEVISION
< NUMERIQUE.
<*******************************************************************************
TVCTRL: WORD NILK < MOT DE CONTROLE DU PROCESSEUR TV :
< CELUI-CI EST 'OFF' LORSQUE LE MOT
< DE CONTROLE EST NUL ; LES DIFFERENTS
< CHAMPS QU'IL CONTIENT SONT LES
< SUIVANTS :
TVCTRL: @MOT '0@@@@ < MOT DE CONTROLE TV BASSE DEFINITION.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
TVRR:: VAL 'E000 < INUTILISE, MAIS...
TVRV:: VAL '1C00 < INUTILISE, MAIS...
TVRB:: VAL '0380 < INUTILISE, MAIS...
<*******************************************************************************
TVIN:: VAL '0040 < 1=IN (SINON OUT).
TVIN: @VAL '0@@@@ < BIT DISCRIMINANT TV IN/OUT...
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
TVIMAG:: VAL '0020 < VOIR LE NOTA PLUS LOIN...
TVRVB:: VAL '0010 < INUTILISE, MAIS...
TV512:: VAL '0008 < INUTILISE, MAIS...
TVMODE:: VAL TVIN?TVIMAG?TVRVB?TV512
< INUTILISE, MAIS...
TVINV:: VAL '0004 < INUTILISE, MAIS...
XNCOOL:: VAL 3 < NOMBRE DE COULEURS DANS LE SYSTEME
< DE TELEVISION R-V-B...
XWOR%2: VAL -S < POUR UN DECALAGE A DROITE.
XWOR%1: VAL XNCOOL < CONSTANTE DONT ON CHERCHE LE MASQUE
< MINIMAL L'ENGLOBANT.
DO NBITMO
XWOR%1: VAL XWOR%1>XWOR%2=FCPUSH
XWOR%1: VAL I < INITIALISATION DU DECOMPTE,
DO NBITMO
XWOR%1: VAL K=FCPULL=FCSIGN+XWOR%1
<*******************************************************************************
TVSIMU:: VAL BIT>XWOR%1-N < 00=MODE NORMAL,
< XX=MODE SIMULATION DE LA VISUALISATION
< DYNAMIQUE DE TYPE "T1600", AVEC LES
< MOUVEMENTS MEMOIRE SUIVANTS, FONCTION
< DE 'XX' :
< 01 : (TVMEME) --> (TVMEM1),
< 10 : (TVMEME) --> (TVMEM2),
< 11 : (TVMEME) --> (TVMEM3).
TVSIMU: @VAL '0@@@@ < MASQUE DE SELECTION DES COMPOSANTES.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
<*******************************************************************************
TVPOFF:: VAL K < INITIALISATION DU GENERATEUR DES
< NUMEROS DE PROCESSEURS COULEUR.
< ('TVPOFF' SIGNIFIE L'ABSENCE DE
< VISUALISATION...)
TVPR:: VAL '0@@@@+I < NUMERO DU PROCESSEUR 'ROUGE',
TVPV:: VAL '0@@@@+I < NUMERO DU PROCESSEUR 'VERT',
TVPB:: VAL '0@@@@+I < NUMERO DU PROCESSEUR 'BLEU'.
XWOR%2: VAL '0@@@@ < NUMERO DU DERNIER PROCESSEUR
< COULEUR DEFINI...
<*******************************************************************************
IF XWOR%2-XNCOOL,,XEIF%,
IF BIZARRE : LE NOMBRE DE PROCESSEURS N'EGALE
IF PAS LE NOMBRE DE COULEURS !!!
XEIF%: VAL ENDIF
<*******************************************************************************
XWOR%F: VAL TVPR
TVPR: @VAL '0@@@@ < NUMERO DU PROCESSEUR ROUGE.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL TVPV
TVPV: @VAL '0@@@@ < NUMERO DU PROCESSEUR VERT.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL TVPB
TVPB: @VAL '0@@@@ < NUMERO DU PROCESSEUR BLEU.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
XWOR%1: VAL TVSIMU=K
XWOR%1: VAL -XWOR%1 < POUR UN DECALAGE A DROITE...
IF TVSIMU>XWOR%1-XWOR%2,,XEIF%,XEIF%
IF ATTENTION : TROP DE PROCESSEURS COULEUR DEFINIS !!!
XEIF%: VAL ENDIF
MEMTV0:: VAL '3000 < ADRESSE 16-MOTS DU PREMIER STACK
< MEMOIRE RAPIDE UTILISE PAR LE
< SYSTEME DE TELEVISION NUMERIQUE.
TVAR0:: VAL O < ADRESSE RELATIVE DU PREMIER MOT
< VIUALISE DANS 'MEMTV'.
STLIMA:: VAL TVLIMA < LONGUEUR EN K-MOTS DES STACKS MEMOIRE
< UTILISES POUR STOCKER CHAQUE COMPO-
< SANTE D'UNE IMAGE.
XWOR%3: VAL STLIMA*LK>DADR < LONGUEUR EN 16-MOTS D'UN STACK.
XWOR%4: VAL TVSIMU>XWOR%1-Z*XWOR%3+MEMTV0
< ADRESSE 16-MOTS DU DERNIER STACK
< MEMOIRE RAPIDE UTILISE.
XWOR%2: VAL IJIJDX
<*******************************************************************************
TVMEM: EQU $-XWOR%2
TVMEM: @MOT '0@@@@ < ADRESSE-1 DE L'ADRESSE COMPOSANTE 'R'.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
<*******************************************************************************
DO XNCOOL
WORD K=FCDO*XWOR%3)MFFFF+N+XWOR%4
MEMTVE:: VAL '0000000@@@@+XWOR%3
< ADRESSE 16-MOTS DU PREMIER STACK
< INACCESSIBLE A LA TELEVISION...
<*******************************************************************************
TVMEM1: EQU TVMEM+XWOR%2 < ON GARANTIT AINSI, LA CONTIGUITE
TVMEM2: EQU TVMEM1+XWOR%2 < DE 'TVMEM1', 'TVMEM2'
TVMEM3: EQU TVMEM2+XWOR%2 < ET DE 'TVMEM3'...
< (ET CECI, AFIN QUE 'IDLE' FONCTIONNE
< CORRECTEMENT...)
RTLIMA:: VAL 64 < TAILLE EN K-MOTS DE LA MEMOIRE REELLE-
< MENT DISPONIBLE POUR LA TELEVISION
< NUMERIQUE...
IF RTLIMA-LSPACE,XEIF%,XEIF%,
IF ATTENTION : LA 'CDAI' NE PEUT EXCEDER 64 K-MOTS !!!
XEIF%: VAL ENDIF
IF STLIMA*XNCOOL-RTLIMA,XEIF%,XEIF%,
IF LA MEMOIRE DISPONIBLE POUR LA TELEVISION
IF NUMERIQUE EST INSUFFISANTE !!!
XEIF%: VAL ENDIF
XWOR%1: VAL LK=K+DADR
XWOR%1: VAL RTLIMA>XWOR%1 < TAILLE EN DADR-MOTS DE 'RTLIMA'.
MEMTVR:: VAL MEMTV0+XWOR%1 < ADRESSE DU PREMIER DADR-MOT INACCES-
< SIBLE DANS LA MEMOIRE DE 'TV'.
XWOR%1: VAL -DADR < POUR CONVERTIR UNE DADR-ADRESSE EN UNE
< ADRESSE DE MOTS.
XWOR%2: VAL MEMTV0>XWOR%1 < ADRESSE-MOT RELATIVE A 'MEMTV' DU DE-
< BUT DE LA ZONE VISUALISEE.
AMEMTV: EQU ZERO+XWOR%2 < DEPLACEMENT EN MOTS DANS 'MEMTV' POUR
< FAIRE LES LECTURE RAPIDES 'DKU' -->
< 'MEMTV' SANS ENTRELACEMENT.
XXLTV:: VAL MEMTVE-MEMTV0 < LONGUEUR EN DADR-MOTS DE LA ZONE NECES-
< SAIRE A L'ENTRELACAGE DES IMAGES.
XWOR%2: VAL MEMTVR-XXLTV>XWOR%1
< ADRESSE-MOTS RELATIVE A 'MEMTV' DU
< FOND DE LA MEMOIRE ALLOUEE A LA CDAI' ;
< ON PLACE LA ZONE D'ENTRELACAGE TOUT AU
< BOUT DE LA MEMOIRE ('MEMTVR') AFIN DE NE
< PAS PERTUBER LE FONCTIONNEMENT DE PRO-
< GRAMMES QUI UTILISENT LES MOTS SUIVANTS
< 'MEMTV0' POUR DES MASQUES OU DES
< Z-BUFFERS, OU AUTRES...
AMEMTW: EQU ZERO+XWOR%2 < DEPLACEMENT EN MOTS DANS 'MEMTV' POUR
< FAIRE LES LECTURES RAPIDES 'DKU' -->
< 'MEMTV' AVEC ENTRELACEMENT.
IF TVLIMA+TVLIMA*XNCOOL-RTLIMA,XEIF%,XEIF%,
IF ATTENTION : 'MEMTV' EST TROP PETITE POUR
IF FAIRE LES LECTURES RAPIDES 'DKU' --> 'MEMTV'
IF AVEC ENTRELACEMENT !!!
XEIF%: VAL ENDIF
<
< NOTA :
< TVMEM1 : CONTIENT L'ADRESSE DE L'IMAGE A VISUALISER
< SI TVIMAG=1 ; SINON, CONTIENT L'ADRESSE
< DE LA PREMIERE COMPOSANTE, ET DE PLUS
< L'ADRESSE DU RECEPTEUR DE 'TVMEME'
< SI TVSIMU=01.
< TVMEM2 : CONTIENT L'ADRESSE DE LA DEUXIEME COMPOSANTE
< SI TVIMAG=0, ET DE PLUS L'ADRESSE DU RECEPTEUR
< DE 'TVMEME' SI TVSIMU=10.
< TVMEM3 : CONTIENT L'ADRESSE DE LA TROISIEME
< COMPOSANTE SI TVIMAG=0, ET DE PLUS
< L'ADRESSE DU RECEPTEUR DE 'TVMEME'
< SI TVSIMU=11.
<
<
<
< A T T E N T I O N :
< LES ADRESSES CONTENUES DANS 'TVMEM1', 'TVMEM2'
< ET 'TVMEM3' SONT DES ADRESSES 16-MOTS !!!
<
<
<*******************************************************************************
TVMEME: WORD NIL < ADRESSE-MOT DE LA ZONE DONT ON VEUT
< SIMULER LA VISUALISATION DYNAMIQUE ;
< CETTE ADRESSE EST VALIDEE SOFTWAREMENT
< PAR LA TACHE 'IDLE' PAR LE BIT 'TVSIMU'.
< A T T E N T I O N : IL CONVIENT D'Y
< ASSOCIER AUSSI LE MOT 'TVNITE' MIS
< AVANT POUR DES RAISONS D'OCCUPATION
< DE LA MEMOIRE DEBANALISEE.
TVMEME: @MOT '0@@@@ < ADRESSE DE LA ZONE VISUALISEE.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
PAGE
<
<
< D E F I N I T I O N D E L ' I M A G E U R
< D E M O Y E N N E - D E F I N I T I O N :
<
<
< NOTA :
< CET IMAGEUR EST ASSIMILE A
< LA 'CDA' DITE 'CDAJ', QUI EST
< DECOUPEE EN PAGE DE 64K, LE
< PAS DE PASSAGE DE L'UNE A
< L'AUTRE ETANT DE 64K.
< ON NE PEUT MALHEUREUSEMENT
< PLUS UTILISER DES PAGES DE
< 64K AVEC PAS DE PASSAGE DE 32K,
< CAR EN EFFET, LE RECOUVREMENT DES
< PAGES DE 64K IMPLIQUE QU'UNE PAGE
< SUR 2 EST A CHEVAL SUR UNE FRONTIERE
< DE 64K, CE QUI N'EST PAS TOLERE PAR
< LA MICRO-MACHINE !!!
<
<
BMCDAJ:: VAL BITSIG < LA 'CDAJ' EST DEFINIE PAR UNE CARAC-
< TERISTIQUE DES ADRESSES QU'ELLE CONTIENT;
< TOUTE DADR-ADRESSE CONTENANT LE BIT
< 'BMCDAJ' A 1 EST DANS 'CDAJ'.
TMCDAJ:: VAL LSPACE < LONGUEUR D'UNE PAGE EN K-MOTS,
IMCDAJ:: VAL LSPACE < INCREMENT EN K-MOTS DE PASSAGE D'UNE
< PAGE A SES VOISINNES.
MCDAJO:: VAL COSBT?BMCDAJ=FMASK(K=FCINST
< ADRESSE EN DADR-MOTS DE LA PREMIERE
< PAGE DE 'CDAJ',
XWOR%1: VAL LK>DADR*TMCDAJ=K
MCDAJE:: VAL BIT>XWOR%1-Z+MCDAJO
< ADRESSE EN DADR-MOTS DE LA FIN DE LA
< PREMIERE PAGE DE 'CDAJ'.
<
< DEFINITION DES REGISTRES
< D'ACCES A L'IMAGEUR :
<
TEMP68:: VAL '08*W < UNE PETITE TEMPORISATION EST NECESSAIRE
< APRES L'ECRITURE DE CHACUN DES REGIS-
< TRES...
< (*W SI NECESSAIRE, *K DANS LE CAS
< CONTRAIRE...)
XLINV:: VAL MMOT < CAR A CERTAINS ENDROITS DE L'IMAGEUR
< MOYENNE DEFINITION, LA LOGIQUE EST
< INVERSEE...
PAGE68:: VAL 4 < NUMERO DE LA PAGE DE 'TMCDAJ' K-MOTS CON-
< NANT LES REGISTRES DE PROGRAMMATION DE
< L'IMAGEUR MOYENNE DEFINITION :
XRCMD:: MOT 'F800 < REGISTRE DE COMMANDE, DONT L'UNE D'ELLE
< EST :
XPVECT:: VAL 8 < MISE EN FORMAT "PETITS VECTEURS"...
XRASTR:: VAL COSBT?XPVECT=FMASK(K=FCINST)XLINV(MOCD
< COMMANDE A ENVOYER A 'RCMD' POUR TRACER
< EN MODE RASTER (POINT A POINT).
XRXH:: MOT 'F810 < REGISTRE "HIGH-X",
XRXL:: MOT 'F812 < REGISTRE "LOW-X",
XRYH:: MOT 'F814 < REGISTRE "HIGH-Y",
XRYL:: MOT 'F816 < REGISTRE "LOW-Y".
XRNIVO:: MOT 'F820 < REGISTRE CONTENANT LE NIVEAU DE GRIS A
< ATTRIBUER A UN POINT, ET CE ENTRE LES
< LIMITES SUIVANTES :
XXNOIR:: VAL K < NIVEAU MINIMAL,
XXN255:: VAL 256-Z < NIVEAU MAXIMAL...
<
< DEFINITION DE L'EQUIVALENCE
< ENTRE 'CDAI' ET 'CDAJ+4' :
<
PAGEIJ:: VAL PAGE68 < NUMERO DE LA PAGE DE 'TMCDAJ' K-MOTS
< SUPPORTANT L'EMULATION DE LA 'CDAI'
< LORSQUE LA COMMANDE "!CDAI=J" EST
< ACTIVE...
<
< DIMENSIONS DE L'IMAGEUR :
<
XC512:: VAL 512 < IL Y A 512 COLONNES, ET
XL512:: VAL 512 < 512 LIGNES...
PAGE
<
<
< F O N C T I O N S D E C O L O R I A G E D U
< P R O C E S S E U R T V B A S S E - D E F I N I T I O N :
<
<
< NOTA :
< LORSQUE LE 'CU3' EST UTILISE POUR
< ACCEDER AUX COULEURS DE LA TELEVISION
< NUMERIQUE, L'ARGUMENT ENVOYE PAR LE
< MOT2 A LE FORMAT SUIVANT (EN BITS
< OU EN MASQUES) :
<
<
XXCUC0:: VAL 'F000 < ZONE DEVANT ETRE A '0 POUR QUE LA
< SELECTION DES COULEURS SOIT ACTIVEE.
XXCUSC:: VAL 4 < BIT DE SELECTION DU BANK DE REGISTRES
< EN DIFFUSION ; SA VALEUR EST INDIF-
< FERENTE...
XXCUCR:: VAL 7 < BIT A POSITIONNER POUR DIFFUSER SUR
< LE CANAL ROUGE,
XXCUCV:: VAL 6 < DE MEME SUR LE CANAL VERT,
XXCUCB:: VAL 5 < DE MEME ENFIN SUR LE BLEU.
XXCUAD:: VAL '00F0 < ADRESSE DES MEMOIRES DANS LESQUELLES
< IL FAUT ECRIRE : LE PREMIER BIT SELEC-
< TIONNE LE JEU, LES SUIVANTS CORRESPON-
< DENT AUX CONFIGURATIONS DE 3 BITS.
XXCUNI:: VAL '000F < DONNE LE NIVEAU A ECRIRE A L'ADRESSE
< DEFINIE PAR 'XXCUAD' DANS 0, 1, 2 OU 3
< DES CANAUX DE SORTIE.
<
<
< D E F I N I T I O N D E L A M E M O I R E
< D E S C O U L E U R S :
<
<
XWOR%1: VAL XXCUAD=K
XWOR%1: VAL -XWOR%1
XXCULM:: VAL XXCUAD>XWOR%1+N < LONGUEUR DE LA MEMOIRE EN MOTS.
XXCUMR:: VAL '000F < DEFINITION DU CANAL ROUGE,
XXCUMV:: VAL '00F0 < DEFINITION DU CANAL VERT,
XXCUMB:: VAL '0F00 < DEFINITION DU CANAL BLEU.
XWOR%1: VAL XXCUMR?XXCUMV?XXCUMB
XWOR%2: VAL XXCUMR)XXCUMV)XXCUMB
IF XWOR%1-XWOR%2,,XEIF%,
IF ATTENTION : IL Y A DES RECOUVREMENTS DANS
IF LES MASQUES 'XXCUM' !!!
XEIF%: VAL ENDIF
PAGE
<
<
< F I L E S D U M I C R O - S C H E D U L E R :
<
<
FDMS: EQU $
LOFDMS:: VAL NMTS/NBITMO < LONGUEUR EN MOTS DE TOUTES LES FILES
< DE BITS DU MICRO-SCHEDULER.
<
< A S T F :
<
ASTF: EQU $
IF ASTF-ZERO-'20,,XEIF%,
IF CELA M'APPRENDRA A TROP PARAMETRER !!!
XEIF%: VAL ENDIF
DO LOFDMS
WORD K
<
< E S T F :
<
ESTF: EQU $
DO LOFDMS
WORD MMOT
<
< R S T F :
<
RSTF: EQU $
DO LOFDMS
WORD MMOT
PAGE
<
<
< R E C H A R G E M E N T D E C M S 5 :
<
<
< FONCTION :
< CE MODULE PERMET EN FAISANT P <-- 'BOOTIN',
< DE RECHARGER 'CMS5' A PARTIR DU DISQUE 'DKF'
< AUTOMATIQUEMENT ; POUR 'DKM' IL FAUDRA PROCEDER
< "MANUELLEMENT", EN SE BRANCHANT A LA MAIN VERS
< LE BOOTSTRAP CORRESPONDANT...
<
<
BOOTIN: EQU $
LRM C
WORD BOOTAD < ASTUCE...?!???!
BR O,C < ET ON Y VA...
BOOTAD: WORD BTFHDR < POINT D'ENTREE DU BOOTSTRAP DE LECTURE
< SUR LE DISQUE 'DKF'.
PAGE
<
<
< F O R M A T D C T :
<
<
< FONCTION :
< ON APPELLE 'DCT' ("DEVICE
< CONTROL TABLE" POUR DES RAISONS
< HISTORIQUES...) LE CONTEXTE DE
< CHAQUE TACHE DU SYSTEME ; CELLES-
< CIS SONT DECOUPEES EN 2 PARTIES :
<
< 1 - LA PREMIERE, FIXE, POSSEDE UN
< FORMAT COMMUN A TOUTES LES TACHES ;
< ON Y TROUVE PAR EXEMPLE L'ENSEM-
< BLE DES REGISTRES, DES SEMAPHORES,
< UNE FILE D'ATTENTE,... ON PEUT
< DIRE QU'ON TROUVE LA TOUTES LES
< INFORMATIONS NECESSAIRES A LA NO-
< TION DE "PROLOGUE"-"EPILOGUE" QUI
< CARACTERISE L'ENSEMBLE DES TACHES
< (VOIR A CE PROPOS 'CHAND').
<
< 2 - LE DEUXIEME, VARIABLE, CONTIENT
< LES DONNEES SPECIFIQUES A CHAQUE
< TACHE, ET QUI NE RENTRENT DONC PAS
< DANS LE CADRE GENERAL DEFINI CI-
< DESSUS...
<
<
DSEC DCT
XXDEF0:: VAL 'DEF0 < VALEUR GENEREE DANS LES MOTS DE PILES
< RESERVES A UN TRAITEMENT EN CATAS-
< TROPHE DU DEFAUT SECTEUR ; ON NOTERA
< L'ASTUCE DE "DEF"...
XXPILJ:: VAL 6 < VALEUR PRESUMEE DE 'XXPILI'...
XXBAC0:: VAL 'BAC0 < VALEUR GENERE DANS LE DERNIER MOT
< DE CHAQUE PILE...
DCT0: EQU $
<
<
< P S T D E L A T A C H E :
<
<
< NOTA IMPORTANT :
< 'DISPAT' REMPLACE 'HANDLR'
< COMME VALEUR INITIALE DU
< REGISTRE 'P' POUR LES TACHES
< APPELEES "DISPATCHERS"...
<
<
PST: WORD K;K;K;K;COM+DEPCS;DCT0;NIL;PILE;HANDLR;SMST;SO;SE
XXDISW: EQU NIL+D < VALEUR A DONNER AU REGISTRE 'W' DES
< DISPATCHERS AFIN QU'IL NE SOIT PAS NUL,
< POUR QUE LA TRACE SE PASSE BIEN...
IF XXDISW-ZERO,,,XEIF%
IF ATTENTION : LA TRACE DES 'DISPAT' SERA MAUVAISE !!!
XEIF%: VAL ENDIF
XXPSTD:: VAL PST-DCT0 < DEPLACEMENT DE 'DCT0' VERS 'PST'...
IF XXPSTD-K,,XEIF%,
IF ATTENTION : LES 'PST' DOIVENT ETRE TOUJOURS EN
IF TETE DES 'DCT' A CAUSE DE 'DCTSY' QUI EST AUSSI
IF LA LISTE DES 'PST' POUR LE MICRO-SCHEDULER !!!
XEIF%: VAL ENDIF
IF $-PST-XLPSTS,,XEIF%,
IF ATTENTION : LA LONGUEUR DE 'PST' EST MAUVAISE !!!
XEIF%: VAL ENDIF
<
<
< P A R T I E F I X E D E S D C T :
<
<
< N O M E T I N D I C A T E U R S :
<
<
HNAME: EQU $
#@ASCI " NOM" < #SISP CMS5 ASCI#
LHNAME:: VAL $-HNAME < LONGUEUR DU 'NAME'.
IOID: BYTE K;K < FORMAT DE IOID :
< BIT0-7=K OU NSPXXX ASSOCIEE
< DANS UNE CORRESPONDANCE DU TYPE :
< NSPIN-->NSPOUT, ('80 POUR
< UN FICHIER),
< BIT8=K SI AUCUN ESCLAVE N'EST
< ATTACHE A CETTE DCT,
< =1 SI UN ESCLAVE EST ATTACHE,
< OU EN COURS D'ATTACHE-
< MENT PAR JOB-ENTRY,
< BIT9-15=ID DE CET ESCLAVE (S'IL
< EXISTE...
XIOID0:: VAL K < VALEUR INITIALE, OU POUR CEUX QUI NE
< L'UTILISE PAS...
IOIDX:: VAL 8 < BIT D'ATTACHEMENT D'ESCLAVE,
IOIDM:: VAL '7F < MASQUE D'IDENTIFICATEUR D'ESCLAVE.
NOUSER:: VAL CORBT?IOIDX=FMASK(K=FCINST
< VALEUR DU CHAMP IOIDX?IOIDM LORSQU'AUCUN
< UTILISATEUR N'EST ATTACHE A UN PERIPHERI-
< QUE DE TYPE 'IN'...
FILTRE: WORD NIL < ADRESSE D'UNE ROUTINE INDIQUANT
< SI LA DEMANDE DOIT ETRE FILTREE.
SFLITR: WORD NIL < ADRESSE D'UNE ROUTINE INDIQUANT
< S'IL FAUT SUPPRIMER, LEVER OU
< METTRE LE FILTRAGE.
<
<
< S Y S T E M E D E L O C A T I O N D E L A ' D C T ' :
<
<
< FONCTION :
< IL EST POSSIBLE A UNE
< TACHE T(I) DE LOUER (OU
< S'APPROPRIER) UNE TACHE
< T(J) VIA LA DCT(T(J)) ;
< ON RETROUVERA CECI, EN
< PARTICULIER AVEC LA NO-
< TION DE CARTE "!ASSIGN...".
<
<
XTALOC:: VAL K < SIGNIFIE 'DCT LIBRE ET LOUABLE'.
ETALOC: WORD XTALOC < MOT INDIQUANT L'ETAT DE LA
< LOCATION DE LA DCT :
< SI ETALOC>0 : LA DCT N'EST PAS
< LOUABLE, ET EST
< DONC CONSIDEREEE
< COMME TOUJOURS
< PARTAGEABLE.
< SINON :
< BIT0=1 (DCT LOUEE), 0 (DCT LIBRE).
< BIT8-15=NUMERO DE LA TACHE
< LOCATAIRE.
XETLOC:: VAL BITSIG < BIT DE LOCATION DE LA DCT.
XXDCTP:: VAL XTALOC)BIT < VALEUR DE 'ETALOC' POUR UNE 'DCT'
< NON LOUABLE, ET DONC PARTAGEABLE.
IF XXDCTP,,,XEIF%
IF ATTENTION : LA VALEUR DE 'XXDCTP' EST
IF EN CONTRADICTION AVEC LES DEFINITIONS.
XEIF%: VAL ENDIF
IF XTALOC-K,,XEIF%,
IF ATTENTION : DES TAS DE CHOSES VONT MERDER !!!
XEIF%: VAL ENDIF
IF XTALOC-XXDCTP,XEIF%,,XEIF%
IF ATTENTION : CA VA MERDER !!!
XEIF%: VAL ENDIF
IF XETLOC-BITSIG,,XEIF%,
IF ATTENTION : LES TESTS FAITS SUR LES LOCATIONS
IF DE 'DCT' SONT MAUVAIS !!!
XEIF%: VAL ENDIF
SEMLOC: WORD XXLOC0 < SEMAPHORE D'ATTENTE DE
< LOCATION.
DZS LSEM
<
<
< F I L E D ' A T T E N T E D E S D E M A N D E S
< D E S E R V I C E S A L A T A C H E A S S O C I E E :
<
<
<*******************************************************************************
TETE: WORD NIL < TETE DE LA FILE D'ATTENTE SUR CE
< PERIPHERIQUE.
TETE: @MOT '0@@@@ < TETE FILE D'ATTENTE DANS UNE 'DCT'.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
QUEUE: WORD NIL < QUEUE DE CETTE FILE D'ATTEBTE.
SCHVID: WORD XXCHV0 < SEMAPHORE D'ATTENTE SUR FILE
< D'ATTENTE VIDE.
< "OCTET 0 (SCHVID)" EST TOUJOURS
< NUL (VERSION SOLAR). L'INFORMATION
< SE TROUVE MAINTENANT DANS OCTET1(BITSEM).
DZS LSEM
<
<
< S Y N C H R O N I S A T I O N E T E X C L U S I O N
< I N T E R - T A C H E S :
<
<
<*******************************************************************************
SIT: WORD XXSIT0 < SEMAPHORE D'ATTENTE D'IT.
< "OCTET 0 (SIT)" EST TOUJOURS NUL
< (VERSION SOLAR). L'INFORMATION SE TROUVE
< MAINTENANT DANS 'BITSEM', BITS:
< 'B0SIT', 'B1SIT', 'M57SIT'.
SIT: @MOT '0@@@@ < SEMAPHORE D'INTERRUPTION D'UNE 'DCT'.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
DZS LSEM
LSIT:: VAL SIT-DCT0 < DEPLACEMENT PERMETTANT AUX HANDLERS.
< N'UTILISANT PAS SIT, DE TRAVAILLER
< EN RECOUVREMENT DESSUS.
TFONCE:: MOT LSEM-XXLSEM < MOT UTILISE DANS 'SIT' PAR
< CERTAINS HANDLERS (CF. HDLVIS),
< POUR INDIQUER L'EQUIVALENCE
< DE CERTAINES FONCTIONS AVEC
< DES ECRITURES ; ON TROUVE PAR
< GROUPE DE 2 BITS LE NBRE DE
< CARACTERES ECRITS ; SI CELUI-CI
< EST NUL, ON FAIT COMME SI LA
< FONCTION N'ETAIT PAS UNE E/S
< EFFECTIVE.
< ON A :
< BITS2-3 : FONCTION '04,
< BITS0-1 : FONCTION '03,
< BITS4-5 : FONCTION '05,
< BITS6-7 : FONCTION '06,
< BITS8-9 : FONCTION '07.
TFONCF:: MOT TFONCE+D < (VOIR 'TIMOUT').
SPHEX: WORD SPHEX0 < SEMAPHORE D'EXCLUSION DES PHASES
< CRITIQUES.
< "OCTET 0 (SPHEX)" EST TOUJOURS NUL
< (VERSION SOLAR). L'INFORMATION SE TROUVE
< MAINTENANT DANS 'BITSEM': BIT 'B0SPHEX'
DZS LSEM
<
<
< R E L A I S ( P O U R S E R V I C E
< E T I N T E R R U P T I O N ) :
<
<
ES: WORD NIL < ADRESSE D'UNE ROUTINE D'EXECUTION
< DE LA DEMANDE SPECIFIQUE AU PERIPHERIQUE
< CONCERNE.
ARIT: WORD NIL < ADRESSE D'UNE ROUTINE SPECIFIQUE
< A APPELER LORS DE L'IT CORRESPONDANTE.
<
<
< E T A T E T I N D I C A T E U R S :
<
<
ETAT: WORD K;K < DOUBLE-MOT D'INDICATEURS CORRESPONDANT
< PAR EXEMPLE AUX MOTS D'ETAT D'UN COU-
< PLEUR DE PERIPHERIQUE...
<*******************************************************************************
XWOR%F: VAL ETAT-DCT0
ETAT: @MOT '0@@@@ < MOTS D'ETAT DANS UNE 'DCT'.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
ETAT0: EQU ETAT+O
ETAT1: EQU ETAT+D
XBITS0:: VAL K < VALEUR INITIALE DE 'BITSEM' :
BITSEM: WORD K < BITS CONSTITUANT DANS LA VERSION
< 'T1600' LES "ALPHA" DE 'SIT','SPHEX'
< ET 'SCHVID'. EN VERSION SOLAR CES
< INFORMATIONS SONT DANS 'BITSEM'.
B0SIT:: VAL L < A '1' IL SIGNIFIE :
< SI LE BETA(SIT) EST < 0, ET S'IL
< Y A EU UN DEFSEC, ALORS IL FAUT DEBLOQUER
< LE HANDLER CORRESPONDANT.
B1SIT:: VAL B0SIT+BIT < A '1' IL SIGNIFIE :
< UN DEFSEC A EU LIEU, ET LE HANDLER
< CORRESPONDANT N'A PAS
< CORRESPONDANT NE L'A PAS ENCORE ACQUITTE.
M57SIT:: VAL '0700 < CONSTANTE PERMETTANT LES CALCULS
< D'EQUIVALENCE DE DUREE D'E/S :
< CES 3 BITS PERMETTENT LE CALCUL
< EVENTUEL DE LA DUREE D'UNE E/S SUR CETTE
< DCT, CONNAISSANT LE COMPTE D'OCTETS
< (CF. SWAPO). (EN FAIT C'EST UNE AMPLITUDE
< DE DECALAGE A FAIRE SUR CODEM).
B0SPHX:: VAL B1SIT+BIT < A '0' IL SIGNIFIE : FONCTIONNEMENT NORMAL
< DU HANDLER.
< A '1' IL SIGNIFIE: LE HANDLER DOIT ETRE
< DESARME A SON POINT
< D'ENTREE, C-A-D AVANT TOUTE OPERATION
< FAISANT INTERVENIR SON NIVEAU !!
BISOSE:: VAL B0SPHX+BIT < =0 : TRANSMETTRE NORMALEMENT UN NUMERO
< DE PAGE DE 32K (POUR (SLO,SLE))
< DANS 'CHAND',
< =1 : TRANSMETTRE SYSTEMATIQUEMENT LA
< PAGE 0 (CECI EST UTILISE PAR LE
< 'SGF' SAUF LORSQU'IL S'AGIT DES
< ENREGISTREMENTS D'UN FICHIER.
BSEUIL:: VAL MOCD < MASQUE DE DEFINITION DU SEUIL :
< BITS 8-15: CET OCTET CONTIENT
< DANS CERTAINS CAS UN SEUIL QUI,
< LORSQU'IL EST DEPASSE PAR LE BETA(SCHVID)
< IMPLIQUE UNE CERTAINE ACTION.
XWOR%1: VAL COSBT?B0SIT=FMASK(K=FCINST
XWOR%2: VAL COSBT?B1SIT=FMASK(K=FCINST
XWOR%3: VAL COSBT?B0SPHX=FMASK(K=FCINST
XWOR%4: VAL COSBT?BISOSE=FMASK(K=FCINST
XWOR%5: VAL XWOR%1?XWOR%2?XWOR%3?XWOR%4?M57SIT?BSEUIL
XWOR%6: VAL XWOR%1)XWOR%2)XWOR%3)XWOR%4)M57SIT)BSEUIL
IF XWOR%5-XWOR%6,,XEIF%,
IF ATTENTION : FACHEUX RECOUVREMENT !!!
XEIF%: VAL ENDIF
<
<
< S Y S T E M E D E ' R E T R Y ' C ' E S T - A - D I R E
< D ' I T E R A T I O N S U R S E R V I C E A Y A N T
< E C H O U E O U E T E A B O R T E :
<
<
XXNTRY:: VAL IJIJDX < VALEUR DE 'NTRIES' POUR NE FAIRE
< QU'UNE SEULE TENTATIVE...
NTRIES: WORD XXNTRY < NBRE D'ESSAIS MAX SUR CE
< HANDLER POUR UNE DEMANDE.
< N O T A : SI NTRIES=K, LE
< SERVICE EST INHIBE, ET LE
< HANDLER PAS APPELE.
< (DE MEME POUR UN DISPATCHER).
<*******************************************************************************
FRETRY: WORD TRYVID < ADRESSE D'UNE ROUTINE SPECIFIQUE
< TESTANT LE BESOIN DE FAIRE UN
< NOUVEL ESSAI.
FRETRY: @MOT '0@@@@ < ROUTINE D'ITERATION D'UN SERVICE.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
<
<
< S T A T I S T I Q U E S :
<
<
HSTATS: WORD K < COMPTEUR MODULO '10000 DES ACCES A CE
< HANDLER ; CETTE COMPTABILITE EST FAITE
< A CHAQUE PASSAGE DANS 'CHAND' LE REFE-
< RENCANT.
<
<
< T E S T S D E T I M E - O U T :
<
<
< NOTA :
< CES TESTS DE TIME-OUT FAITS PAR L'HORLOGE
< PERIODIQUEMENT NE CONCERNENT QUE LES TACHES
< DE 'NSP' ALLANT DE 1 A 'NSPPER'.
<
<
TESTO: WORD XTESTO < =0 : NE PAS FAIRE DE TEST DE TIME-OUT
< SUR CE HANDLER,
< #0 : FAIRE DES TESTS DE TIME-OUT SUR
< CE HANDLER ; 'TESTO' DONNE ALORS
< LA FREQUENCE DE CES TESTS EXPRIMEE
< EN L'UNITE 'IFRETO' ; POUR ETRE
< SUR DE CETTE DUREE, ON AURA INTE-
< RET A PRENDRE TEST>1 !!!
< NOTA : 'TESTO' PEUT PRENDRE UNE VALEUR
< NEGATIVE : IL FAUT D'ABORD QUE LE BIT
< 'XBTOVI' DE 'MEMV' SOIT A 1, PUIS QU'IL
< S'AGISSE D'UNE 'DCTVIS', PUIS QUE 'CHAND'
< METTE UNE DEMANDE DANS UNE FILE CONTE-
< NANT UNE DEMANDE DE TETE POUR LAQUELLE
< 'ACTIF'=0 ALORS QUE (TESTO)=0 : 'CHAND'
< POSTIONNE 'TESTO' AVEC -'XXTOVI' QUI
< METTRA EN PLACE ULTERIEUREMENT LE DETEC-
< TEUR DE TIME-OUT AVEC LA VALEUR 'XXTOVI',
< VALEUR QUI ETANT NEGATIVE SERA RAZEE
< LORSQUE 'HANDLR' DECHAINERA CETTE FAMEUSE
< DEMANDE DE TETE...
XTESTO:: VAL K < VALEUR DE 'TESTO' POUR NE PAS FAIRE
< DE TEST DE TIME-OUT.
IF XTESTO-K,,XEIF%,
IF ATTENTION : DE NOMBREUX TESTS NE MARCHERONT PAS !!!
XEIF%: VAL ENDIF
TIMOUT: EQU SIT+TFONCF < VALEUR COURANTE DU DECOMPTEUR DES TIME-
< OUT SUR CE HANDLER.
<
<
< L I S T E D E S F O N C T I O N S R E C O N N U E S
< E T " A L T I T U D E " P O S S I B L E P O U R
< L E U R E X E C U T I O N :
<
<
XADCTF:: VAL MMOT < TOUTES LES FONCTIONS POSSIBLES SONT
< RECONNUES : CF. PAR EXEMPLE 'NSPVID'...
XXDCTF:: VAL K < AUCUN TEST DE VALIDITE SUR LES FONCTIONS
< INCIDENTES NE SERA FAIT ; DE PLUS, LE
< 'SVC' DE CONNEXION' NE PEUT PORTER SUR
< CE TYPE DE 'DCT'.
XDDCTF:: VAL XXDCTF < VALEUR BIDON RESERVEE AUX 'DISPAT'...
DCTFON: WORD XADCTF < LISTE DES FONCTIONS ACCESSIBLES : UN
< CERTAIN NOMBRE DE VALEURS PARTICULIERES
< SONT DONNEES CI-DESSUS...
XLDCTF:: VAL $-DCTFON*NBITMO < NOMBRE DE FONCTIONS POSSIBLES.
< A T T E N T I O N : LA DERNIERE (VOIR
< 'FINEX' N'EXISTE PAS, ET JOUE UN ROLE
< SPECIAL A L'ENTREE DE 'HANDLR' DANS
< L'INITIALISATION DE (SLO,SLE).
DCTFUP: DZS XLDCTF/NBITMO < ON CONSACRE UN BIT PAR FONCTION :
< DCTFUP(I)=0 : LA FONCTION 'I' DOIT
< ABSOLUMENT SE DEROULER DANS
< LA MEMOIRE BASSE...
< DCTFUP(I)=1 : LA FONCTION 'I' PEUT SE
< DEROULER EN HAUT...
IF XLDCTF/NBITMO-D,,XEIF%,
IF ATTENTION : LES INITIALISATIONS DE 'DCTFUP'
IF SUR UN MOT SONT MAUVAISES !!!
XEIF%: VAL ENDIF
XFONBA:: VAL K < LORSQUE TOUT DOIT SE DEROULER EN BAS...
<
<
< Z O N E V A R I A B L E E T S P E C I F I Q U E :
<
<
<*******************************************************************************
VAR: EQU $ < ZONE DE LONGUEUR VARIABLE DEPENDANT
< DU PERIPHERIQUE.
VAR: @VAL '0@@@@ < ACCES A LA ZONE VARIABLE DES 'DCT'.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
DCTFIX:: VAL VAR-DCT0 < LONGUEUR DE LA PARTIE FIXE DES 'DCT'...
XWOR%1: VAL DCTFIX < ESPACE DEJA CONSOMME DANS LA 'DCT'.
XWOR%2: VAL DEPBAS-XWOR%1 < ESPACE ENCORE ADRESSABLE DANS LA 'DCT'.
XWOR%3: VAL 100 < MAJORATION...
DZS XWOR%2+XWOR%3 < POUR EVITER LES ENNUIS...
<
<
< P I L E :
<
<
< NOTA :
< LA PILE N'EST DONNEE
< QU'A TITRE INDICATIF ;
< DE PLUS, BIEN QUE SON
< ASSEMBLAGE SUIVE CELUI
< DE LA 'DCT', ELLE EST EN
< GENERAL ASSEMBLEE EN ME-
< MOIRE HAUTE...
<
<
PILE: EQU $-DEPILE
XWPILE: VAL LPILEH+100 < PILE DU HANDLER (OU DU DIS-
< PATCHER, AVEC 'LPILED+35').
CALL #SISP CMS5 GENPIL2#
PAGE
<
<
< F O R M A T D E S D C T D E
< G E S T I O N D E F I C H I E R S :
<
<
< DEFINITION :
< LE SYSTEME VA CONTENIR UN
< "POOL" DE TACHES DITES DE
< "GESTION DE FICHIERS" AUX-
< QUELLES SERONT ATTACHES TEM-
< PORAIREMENT LES FICHIERS
< OUVERTS. ON VA DEFINIR ICI LE
< FORMAT DE LA ZONE SPECIFIQUE
< DE LEURS 'DCT'.
<
<
DSEC DCTF
DCTF0: EQU $
<
<
< Z O N E F I X E D E S ' D C T ' :
<
<
PSTFIL: WORD K;K;K;K;COM+DEPCS;DCTF0;NIL;PILFIL;HANDLR;SMST;SO;SE
IF PSTFIL-DCTF0-XXPSTD,,XEIF%,
IF BIZARRE !!!
XEIF%: VAL ENDIF
IF $-PSTFIL-XLPSTS,,XEIF%,
IF ATTENTION : LA LONGUEUR DE 'PSTFIL' EST MAUVAISE !!!
XEIF%: VAL ENDIF
#@ASCI " FNM" < #SISP CMS5 ASCI#
XLNSGF:: VAL XLASCI < LONGUEUR DU NOM DU HANDLER 'SGF'...
IF LHNAME*NOCMO-W-XLNSGF,,XEIF%,
IF BIZARRE !!!
XEIF%: VAL ENDIF
WORD XIOID0 < IOID.
WORD FFILTR < ROUTINE DE FILTRAGE.
WORD FSFILT < ROUTINE DE S-FILTRAGE.
WORD XTALOC < ETALOC.
WORD XXLOC0 < SEMLOC.
DZS LSEM
WORD NIL < TETE DE LA FILE D'ATTENTE.
WORD NIL < QUEUE.
WORD XXCHV0 < SCHVID.
DZS LSEM
WORD XXSIT0 < SIT (INUTILISE).
DZS LSEM
WORD SPHEX0 < SPHEX.
DZS LSEM
WORD HDLFIL < HANDLER FICHIER.
WORD NIL < PAS DE RIT.
WORD K;K;XBITS0 < ETAT
WORD XXNTRY;TRYVID < NTRIES & FRTRY.
WORD K < HSTATS.
WORD XTESTO < TESTO.
WORD XSGFON < LISTE DES FONCTIONS DU 'SGF'.
WORD XSGFUP < ET LEUR "ALTITUDE" D'EXECUTION...
<
<
< Z O N E V A R I A B L E :
<
<
VARFIL: EQU $
IF VARFIL-DCTF0-DCTFIX,,XEIF%,
IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%: VAL ENDIF
DFILDK:: VAL $-VARFIL < DEMANDE D'ENTREE-SORTIE
< SUR DISQUE.
< ATTENTION : 'AFILDK' EST DEFINI DANS
< LA DSEC 'DEM'...
DZS LDEM1
DFILS:: VAL $-VARFIL < DEMANDE D'ALLOCATION/RELEASE
< DE SECTEUR(S)/BUFFER.
< ATTENTION : 'AFILS' EST DEFINI DANS
< LA DSEC 'DEM'...
DZS LDEM1
CLEFS:: VAL $-VARFIL < SAVE (PEK,PDK).
<*******************************************************************************
XWOR%1: VAL -D < INITIALISATION...
CLEFSE:: MOT '0@@@@+D < PARTIE ENTIERE 'PEK' D'UNE CLEF,
CLEFSD:: MOT '0@@@@+D < PARTIE DECIMALE 'PDK' D'UNE CLEF,
CLEFSL:: MOT '0@@@@+D < LONGUEUR D'UNE CLEF.
<*******************************************************************************
DZS CLEFSL
WORD NIL
BFILDE:: VAL $-D-VARFIL < BUFFER DE DELETE...
WORD NILS
NFILR:: VAL $-D-VARFIL < ADREESE DU PROCHAIN SECTEUR
< A LIRE.
WORD NILS
NFILW:: VAL $-D-VARFIL < ADRESSE DU PROCHAIN SECTEUR
< A ECRIRE.
WORD NILS
AFILT:: VAL $-D-VARFIL < ADRESSE DE LA TETE DE L'ENREGIS-
< TREMENT LOGIQUE.
WORD NILS
AFILQ:: VAL $-D-VARFIL < ADRESSE DE LA QUEUE DE L'ENREGISTREMENT
< LOGIQUE.
WORD NILK
NSPF:: VAL $-D-VARFIL < NSP DE LA DCT.
WORD NILK
FILNOM:: VAL $-D-VARFIL < NOM DIRECT DU FICHIER.
WORD NILK
NSPDDR:: VAL $-D-VARFIL < NSP DU DEMANDEUR
WORD YAPILS,X
APILS:: VAL $-D-VARFIL < POINTEUR DE LA PILE DES SECTEURS
< A LIBERER.
DAPILS:: VAL $-D-DCTF0 < DEPLACEMENT DU POINTEUR DE LA
< PILE DES SECTEURS A LIBERER
< DANS LA DCTF.
LLPILS:: VAL BIT>XXXMOY < LONGUEUR DE LA PILE DE BLOCAGE DES
< SECTEURS A LIBERER; ELLE DOIT ETRE
< UNE PUISSANCE DE 2.
XWOR%1: VAL LLPILS=K
IF BIT>XWOR%1-LLPILS,,XEIF%,
IF ATTENTION : 'LLPILS' DOIT ETRE UNE PUISSANCE DE 2 !!!
XEIF%: VAL ENDIF
YAPILS: EQU $
DZS LLPILS < PILE DES SECTEURS A LIBERER.
<
<
< P I L E :
<
<
PFIL:: VAL $-DEPILE-DCTF0 < DEPLACEMENT DE LA PILE
< HANDLER SGF DANS LA DCTF.
PILFIL: EQU $-DEPILE
XWOR%1: VAL $-DCTF0
XWOR%1: VAL YY7-XWOR%1
XWOR%1: VAL XWOR%1-LPILEH-XXPILJ
XXPFIL:: VAL XWOR%1 < INCREMENT DES PILES 'SGF'.
XWPILE: VAL LPILEH+XXPFIL
CALL #SISP CMS5 GENPIL2#
<
<
< L O N G U E U R D E ' D C T F ' :
<
<
LDCTF:: VAL $-DCTF0 < LONGUEUR D'UNE DCTF.
IF LDCTF-YY7,XEIF%,XEIF%,
IF ATTENTION : 'DCTF' EST TROP LONGUE, ET
IF NE TIENT PAS DANS UN BUFFER !!!
XEIF%: VAL ENDIF
PAGE
<
<
< F O R M A T D C T D E S H A N D L E R S
< D E S E R V I C E :
<
<
< DEFINITION :
< LORSQU'UN UTILISATEUR
< DEMANDERA UN SERVICE AU
< SYSTEME 'CMS5', VIA L'INS-
< TRUCTION 'SVC' PAR EXEMPLE,
< ON LUI ATTRIBUERA TEMPO-
< RAIREMENT UNE TACHE DITE DE
< "SERVICE" QUI GERERA L'EXE-
< CUTION DU SERVICE DEMANDE,
< ET CECI, AFIN QUE CELUI-CI
< NE SE DEROULE PAS SOUS LE
< NIVEAU UTILISATEUR, ET AINSI
< NE LE BLOQUE PAS...
<
<
DSEC DCTSE
<
<
< Z O N E F I X E :
<
<
DCTSER: EQU $
PSTSER: WORD K;K;K;K;COM+DEPCS;DCTSER;NIL;PILSER;HANDLR;SMST;SO;SE
IF PSTSER-DCTSER-XXPSTD,,XEIF%,
IF BIZARRE !!!
XEIF%: VAL ENDIF
IF $-PSTSER-XLPSTS,,XEIF%,
IF ATTENTION : LA LONGUEUR DE 'PSTSER' EST MAUVAISE !!!
XEIF%: VAL ENDIF
#@ASCI " SNM" < #SISP CMS5 ASCI#
WORD XIOID0 < IOID.
WORD NFILTR < FILTRE.
WORD FILTRS < S-FILTRE.
WORD XTALOC < ETALOC.
WORD XXLOC0 < SEMLOC.
DZS LSEM
WORD NIL < TETE.
WORD NIL < QUEUE.
WORD XXCHV0 < SCHVID.
DZS LSEM
WORD XXSIT0 < SIT.
DZS LSEM
WORD SPHEX0 < SPHEX.
DZS LSEM
WORD HDLSER < ES.
WORD ITSERV < ARIT.
WORD K;K;XBITS0 < ETAT.
WORD XXNTRY;TRYVID < NTRIES & FRTRY.
WORD K < STATS.
WORD XTESTO < TESTO.
WORD XXDCTF < 'DCT' NON CONNECTABLE...
XSERUP:: VAL XFONBA < PAS DE FONCTIONS, DONC PAS D'ALTITUDE...
WORD XSERUP
<
<
< Z O N E V A R I A B L E :
<
<
VARSER: EQU $
IF VARSER-DCTSER-DCTFIX,,XEIF%,
IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%: VAL ENDIF
WORD NILX
OTOMAT:: VAL $-D-VARSER < RELAI VERS L'AUTOMATE DE
< SERVICE.
XOTOMA:: VAL K < INDEX DE L'AUTOMATE PERMETTANT D'ACCEDER
< A LA LONGUEUR DE CELUI-CI.
DEMCCI:: VAL $-VARSER < BLOC DE 8 MOTS DESTINES A
< CCI POUR QU'IL PUISSE ADRESSER
< DES DEMANDES AU SYSTEME.
DZS LDEM1
WORD NILK
XBUFGR:: VAL $-D-VARSER < INDEX COURANT DE BUFESC, LORSUE
< LA GRAMMAIRE DU CCI EST EXPLOREE.
WORD NILK
MBUFGR:: VAL $-D-VARSER < VALEUR MAXIMALE AUTORISEE DE (XBUFGR)+1 ;
< ELLE VAUT EN GENERAL 'LCCI' (ACCES AU
< 'CCI' INTERACTIF), OU SINON, LE 'CODEM'
< DE 'DEMESC' (LORS DES APPELS AU 'CCI'
< INTERPRETATIF).
WORD NILX
ABUFGR:: VAL $-D-VARSER < RELAI INDEXE INDIRECT VERS
< BUFESC UTILISE LORS DE L'EXPLORA-
< TION DE LA GRAMMAIRE DU CCI.
WORD SERESC
ASERES:: VAL $-D-VARSER < POUR ATTEINDRE 'SERESC' DANS 'RUNO' LORS
< DE L'EXECUTION EN MEMOIRE HAUTE DE
< CERTAINS SERVICES...
<
< FIN DE LA 'DCT' DE SERVICE :
<
LDCTSN:: VAL $-DCTSER
<
<
< P I L E :
<
<
PILSER: EQU $-DEPILE
XWPILE: VAL LPILEH+100 < LONGUEUR ARBITRAIRE...
CALL #SISP CMS5 GENPIL2#
PAGE
<
<
< F O R M A T D ' U N E D E M A N D E :
<
<
< DEFINITION :
< ON APPELLE "DEMANDE" LE
< MESSAGE QUI EST ENVOYE PAR
< UNE TACHE T(I), DEMANDEUSE
< DE SERVICE, A UNE TACHE T(J) ;
< CETTE DEMANDE SERA MISE EN
< FILE D'ATTENTE DANS DCT(T(J)).
<
<
DSEC DEMAND
DEM0: EQU $
<
<
< D E F I N I T I O N D U D E S T I N A T A I R E
< E T I N D I C A T E U R S :
<
<
NSPTYP: BYTE NILK;NILK < MOT CONTENANT 2 OCTETS :
< NSP ; QUI EST LE NUMERO
< 'SYMBOLIQUE DU PERIPHERIQUE,
< - TYP : QUI CONTIENT LE TYPE ET
< L'ETAT DE LA DEMANDE.
XXNSP:: VAL NSPTYP-DEM0 < DEPLACEMENT D'ACCES A 'NSPTYP'...
MSPTYP:: VAL MOCG < MASQUE DE DEFINITION DU 'NSP'.
BINNSP:: VAL BITSIG < BIT DE 'NSPTYP' PERMETTANT L'INHIBI-
< TION DE LA DEMANDE...
MSKNSP:: VAL CORBT?BINNSP=FMASK(K?MSPTYP=FCINST
< MASQUE DEFINISSANT LE 'NSP' STRICTEMENT..
<
<
< A R G U M E N T S D E L A D E M A N D E :
<
<
LARGDM:: VAL 5 < NOMBRE DE MOTS DE 'ARGDEM'.
ARGDEM: DZS LARGDM < CONTIENT LES ARGUMENTS DE LA DEMANDE
< - SOIT DES ARGUMENTS 'SYMBOLIQUES'
< - SOIT UN PROGRAMME CANAL TOUT
< PREPARE.
IF ARGDEM-DEM0-D,,XEIF%,
IF E R R E U R !!!
IF SI ARGDEM-DEM0 # 1 !!!
XEIF%: VAL ENDIF
T:: VAL ARGDEM-NSPTYP < DEPLACEMENT...
<
< SUITE DE LA DEFINITION DES 'DCTSGF' :
<
AFILDK:: VAL DFILDK+T < ARGUMENTS DE LA DEMANDE 'DFILDK'.
AFILS:: VAL DFILS+T < ARGUMENTS DE LA DEMANDE 'DFILS'.
<
< F O N C T I O N D E M A N D E E :
<
OPDEM:: MOT O < LE 1ER MOT DE LA DEMANDE EST
< LA FONCTION DEMANDEE :
< - SIGNIFICATION DES BITS 14 & 15 :
< (EN GENERAL)
< 0 0 = LECTURE,
< 0 1 = LECTURE DE CONTROLE (DK),
< 1 0 = ECRITURE,
< 1 1 = DEMANDE INEFFECTIVE.
< PLUS UN CERTAINS NBRE DE
< FONCTIONS SPECIFIQUES...
<*******************************************************************************
XWOR%F: VAL T+OPDEM
OPDEM: @MOT '0@@@@ < 'OPDEM' D'UNE DEMANDE.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
MKOPDM:: VAL M000F < MASQUE DE LA FONCTION DESIREE.
XWOR%1: VAL MKOPDM=K
XWOR%1: VAL -XWOR%1
XWOR%2: VAL MKOPDM>XWOR%1
IF NBITMO-XWOR%2,,,XEIF%
IF ATTENTION : ON A PREVU TROP DE FONCTIONS POUR
IF POUVOIR FAIRE DES LISTES SUR UN MOT !!!
XEIF%: VAL ENDIF
MKESEF:: VAL '0007 < MASQUE PERMETTANT DE SAVOIR A PARTIR
< DE LA FONCTION DEFINIE PAR 'MKOPDM'
< SI CETTE DERNIERE EST UNE VERITABLE
< ENTREE-SORTIE (ALORS, SA VALEUR LIMITEE
< A 'MKESEF' EST INFERIEURE OU EGALE
< A 'FGW').
IF MKOPDM?MKESEF-MKOPDM,,XEIF%,
IF ATTENTION : 'MKESEF' DOIT ETRE INCLUS DANS 'MKOPDM' !!!
XEIF%: VAL ENDIF
WAITB:: VAL L < BIT INDIQUANT SI EN CAS DE
< NON SATISFACTION D'UN SERVICE
< PAR UN HANDLER, CE HANDLER DOIT ATTENDRE
< ATTENDRE DE POUVOIR LE SATISFAIRE.
< SIGNIFICATION DE CE BIT :
< 1 : LE HANDLER N'ATTENDRA PAS,
< 0 : LE HANDLER ATTENDRA.
ZBTOVI:: VAL WAITB < BIT UTILISE PAR 'HDLVIS' POUR SPECIFIER
< QUE L'ECHANGE COURANT EST DEMANDE AVEC
< UN TIME-OUT...
EOF:: VAL WAITB < BIT INDICATEUR DE DERNIER
< ECHANGE (UTILISE PAR LES FICHIERS
< SEQUENTIELS).
FINEX:: VAL XLDCTF-Z < FONCTION SPECIALE N'EXISTANT PAS, ET
< ETANT UTILISEE DANS 'DCTFUP' POUR INDI-
< QUER (LORSQU'ELLE EST SEULE), QUE LE
< HANDLER CORRESPONDANT EN 'HANDLR' NE
< POSITIONNE PAS (SLO,SLE)...
IF FINEX-XWOR%2,XEIF%,XEIF%,
IF 'FINEX' EST TROP GRANDE !!!
XEIF%: VAL ENDIF
NOSOSE:: VAL COSBT?FINEX=FMASK(K?XFONBA=FCINST
< VALEUR DE 'DCTFUP' CORRESPONDANTE...
<
< ZONE SPECIFIQUE A 'AL4'/'REL4' :
<
OPMEM4:: VAL '03FF < ZONE DESTINEE A TRANSMETTRE DE 'AL4'
< VERS 'REL4' LA LISTE DES BLOCS DE 2K
< ALLOUES ET A RENDRE...
IF OPMEM4?MKOPDM-OPMEM4,,XEIF%,
IF ATTENTION : 'MKOPDM' DOIT ETRE INCLUS DANS 'OPMEM4' !!!
XEIF%: VAL ENDIF
<
< TRANSMISSION DE LA PAGE
< DE 32K A LAQUELLE APPARTIENT
< LE 'SLO' DE L'APPELANT :
<
XWOR%1: VAL COSBT?EOF=FMASK(K=FCINST
XWOR%1: VAL COSBT?ZBTOVI=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COSBT?WAITB=FMASK(K?XWOR%1=FCINST
IF XWOR%1(MKOPDM-K,,XEIF%,
IF ATTENTION : FACHEUX RECOUVREMENT ENTRE 'MKOPDM',
IF 'EOF' ET 'WAITB' !!!
XEIF%: VAL ENDIF
XMDSLO:: VAL XWOR%1?OPMEM4)MMOT
< CHAMP DE 'OPDEM' DESTINE A TRANSMETTRE
< LE NUMERO DE PAGE DE 32K D'APPARTENANCE
< D'UN 'SLO'...
IF XMDSLO(MKOPDM-K,,XEIF%,
IF ATTENTION : FACHEUX RECOUVREMENT ENTRE
IF 'XMDSLO' ET 'MKOPDM' !!!
XEIF%: VAL ENDIF
XDDSLO:: VAL XMDSLO=K < DECALAGE D'ACCES AU NUMERO DE PAGE DE
< 32K DANS 'XMDSLO'...
XWOR%2: VAL -XDDSLO
XNDSLO:: VAL XMDSLO>XWOR%2 < NOMBRE MAX DE PAGE DE 32K SUPPORTABLES
< PAR LE SYSTEME 'CMS5'...
< NOTA : L'ESPACE EST DECOUPE EN PAGES
< DE 32K-MOTS (ET NON PAS DE 64) CAR LES
< ADRESSES OCTETS NE PEUVENT DEPASSER
< 2*32=64K-OCTETS...
XPESC:: VAL XX64K/NOCMO < TAILLE EN 'K' D'UNE PAGE...
XSLO32:: VAL XPESC>DADR*LK=K < DECALAGE PERMETTANT DE VOIR A QUELLE
< PAGE DE 32K APPARTIENT UN 'SLO'...
ASLO32:: VAL W+E < AFIN DE CALCUL UN 'SLE' A PARTIR D'UN
< 'SLO' DE DEBUT DE PAGE DE 32K (+E
< AFIN QU'UN 'SLO' REEL EN BOUT DE PAGE
< DE 32K NE POSE PAS DE PROBLEMES...).
<
< D E S C R I P T I O N D ' U N E N R E G I S T R E M E N T
< P O U R U N E E N T R E E - S O R T I E :
<
AMDEM:: MOT OPDEM+D < DANS LE CAS D'UNE DEMANDE EFFECTIVE,
< CONTIENT L'ADRESSE OCTETS EN
< MEMOIRE DU BUFFER.
< A T T E N T I O N : SAUF POUR
< L'ALLOCATION MEMOIRE, ET
< L'ALLOCATION DK, OU IL S'AGIT
< D'ADRESSES-MOTS !!!!!!
CODEM:: MOT AMDEM+D < CONTIENT LE NBRE D'OCTETS A ECHANGER.
<*******************************************************************************
XWOR%F: VAL T+CODEM
CODEM: @MOT '0@@@@ < 'CODEM' D'UNE DEMANDE.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
ASDEM:: MOT CODEM+D < CONTIENT DANS LE CAS D'UNE
< DEMANDE SUR DK L'ADRESSE DU
< 1ER SECTEUR A ECHANGER.
<
< E T A T I N S T A N T A N E E T
< C O N D I T I O N S D E R E T O U R :
<
ETADEM:: MOT ASDEM+D < MOT DE ARGDEM, RENVOYANT
< AU DEMANDEUR LES CONDITIONS
< D'EXECUTION.
IF ETADEM+P-OPDEM-LARGDM,,XEIF%,
IF ATTENTION : 'LARGDM' EST MAL INITIALISE !!!
XEIF%: VAL ENDIF
<
< S Y N C H R O N I S A T I O N :
<
WEIO: WORD XXSEM0 < SEMAPHORE D'ATTENTE DE FIN
< DE REALISATION POUR LE
< DEMANDEUR.
X18:: VAL WEIO-DEM0
<
< C H A I N A G E D A N S U N E F I L E D ' A T T E N T E :
<
NEXT: WORD NIL < MAILLON DANS LA FILE D'ATTENTE
< DU SERVICE DEMANDE.
<
< L O N G U E U R D ' U N E D E M A N D E :
<
LDEM0:: VAL $-DEM0 < NBRE DE MOTS OCCUPES PAR
< UN BLOC DE DEMANDE.
IF LDEM1-LDEM0,,XEIF%,
IF A T T E N T I O N : IL FAUT AVOIR LDEM1=LDEM0 !!!
XEIF%: VAL ENDIF
<
<
< I N D I C A T E U R S D E N S P T Y P :
<
<
XWOR%1: VAL MSPTYP=K
XWOR%1: VAL NBITMO-XWOR%1 < PREMIER BIT LIBRE DERRIERE LE 'NSP'.
PRIO:: VAL L+XWOR%1 < 1=LA DEMANDE EST PRIORITAIRE,
< 0=LA DEMANDE N'EST PAS PRIORITAIRE.
XDPRIO:: VAL COSBT?PRIO=FMASK(K=FCINST
ACTIF:: VAL PRIO+BIT < 1=LA DEMANDE EST ACTIVE (TRAITEE PAR
< PAR LE HANDLER,
< 0=LA DEMANDE N'EST PAS ENCORE TRAITEE
< PAR LE HANDLER.
XBABOR:: VAL ACTIF+BIT < BIT INDICATEUR D'UNE DEMANDE D'ABORT DE
< LA DEMANDE COURANTE (CE BIT N'EST AC-
< TUELLEMENT UTILISE QUE DANS 'DEMESC'),
< IL VAUT :
< 0 : ETAT NORMAL (FORCE SYSTEMATIQUEMENT
< EN SORTIE DE 'HDLSER' POUR 'DEMESC'),
< 1 : APRES UN PASSAGE DANS 'SFSERV' POUR
< 'DEMESC'...
< NOTA : 'XBABOR' A PRIS LA PLACE DE
< L'ANCIEN 'SYMCAN' INUTILE...
XDSYM:: VAL K < ON A CONSERVE 'XDSYM' (EN LE RENDANT
< NUL) AFIN DE NE PAS FAIRE TROP D'UPDA-
< TES ; IL CORRESPONDAIT AUTREFOIS A
< UN MASQUE DE 'SYMCAN'...
IF XDSYM-K,,XEIF%,
IF ATTENTION : TOUTES LES REFERENCES A 'XDSYM'
IF VONT CREER DES PROBLEMES !!!
XEIF%: VAL ENDIF
TERMIN:: VAL XBABOR+BIT < 1=LE HANDLER A TERMINE L'EXECUTION
< DE CETTE DEMANDE,
< 0=LE HANDLER N'A PAS ENCORE TERMINE.
ENFILE:: VAL TERMIN+BIT < 0=LA DEMANDE N'EST PAS EN FILE,
< 1=LA DEMANDE EST EN FILE.
BACT:: VAL ENFILE+BIT < 0=FAIRE L'ACT DE FIN DE SERVICE,
< 1=NE PAS FAIRE L'ACT DE FIN DE
< SERVICE ; ON LAISSE DONC AINSI
< EVENTUELLEMENT LE DEMANDEUR
< EN ATTENTE (CF. HANDLR).
VBOX:: VAL BACT+BIT < 1=VALIDE LA PRESENCE D'UN MOT
< FACULTATIF ('BOX') A LA SUITE
< DU CORPS DE LA DEMANDE ; CE MOT
< LORSQU'IL EST PRESENT, EST
< D'UN USAGE ABSOLUMENT LIBRE ;
< IL PERMET PAR EXEMPLE A 2 HANDLER
< D'ECHANGER DE L'INFORMATION (CF.
< PAR EXEMPLE LE RENVOI DES LON-
< GUEURS REELLEMENT ECHANGEES
< DANS LE 'SGN'). LA ROUTINE
< 'STBOX' PERMET DE REMPLIR
< LA BOX EVENTUELLE D'UNE DEMANDE.
TYPAD:: VAL VBOX+BIT < 0 : AMDEM CONTIENT, S'IL S'AGIT D'UNE
< ENTREE-SORTIE, UNE ADRESSE OCTET,
< 1 : AMDEM CONTIENT, S'IL S'AGIT D'UNE
< ENTREE-SORTIE, UNE ADRESSE MOT,
< ET PERMET D'ALLER AU-DELA DE 32K.
XTYPAD:: VAL COSBT?TYPAD=FMASK(K=FCINST
<
<
< M O T F A C U L T A T I F D ' U N E D E M A N D E :
< ( B O X )
<
<
BOX: WORD NILK < BOX FACULTATIF D'UNE DEMANDE ;
< POUR PLUS DE DETAILS, CF. LE BIT
< VBOX DECRIT CI-DESSUS...
XBOX:: VAL BOX-DEM0 < DEPLACEMENT D'ACCES A LA BOX
< D'UNE DEMANDE A PARTIR DE
< SON NSPTYP.
LDEM0B:: VAL $-DEM0 < LONGUEUR D'UNE DEMANDE DE SERVICE AVEC
< UNE 'BOX'.
TABLE
PAGE
<
<
< C O N S T A N T E S G E N E R A L E S
< E T D E F I N I T I O N ' P S T ' :
<
<
TYPTS:: VAL K < TYPE 'TACHE SOFTWARE'.
TYPTH:: VAL TYPTS+I < TYPE 'TACHE HARDWARE'.
TH0:: VAL NTH0 < NIVEAU DE LA TACHE HARDWARE 0.
IF TH0-K,,XEIF%,
IF ATTENTION : SI TH0#0, ALORS ON RISQUE DE GROS
IF ENNUIS,... VOIR EN PARTICULIER DES TESTS QUI
IF SONT FAITS SUR (A) DANS 'SI CMS5 IREST' !!!
XEIF%: VAL ENDIF
NUMDEF:: VAL NMTH < NIVEAU DE LA TACHE DU DEFAUT SECTEUR
< ON NOTERA QU'ELLE EST CONSIDEREE
< COMME LA MOINS PRIORITAIRE, ALORS
< QUE C'EST TOUT LE CONTRAIRE !!!
CICSAV:: VAL XICSA0 < VALEUR INITIALE DE L'INDICATEUR
< DE SAUVEGARDE DES REGISTRES DE LA
< TACHE INTERROMPUE PAR UNE TACHE
< HARDWARE.
DOLARC:: VAL DOLA2 < PREMIERE ADRESSE INACCESSIBLE DE
< LA MEMOIRE.
<
<
< D E F I N I T I O N D U R E G I S T R E ' S T ' :
<
<
<
<
< D E F I N I T I O N D U R E G I S T R E ' S ' :
< ( R E G I S T R E E T A T D E T A C H E )
<
<
< FONCTION :
< LE REGISTE 'S' (APPELE 'SS' DANS 'PSTS',
< ET 'HS' DANS 'PSTH') EST UN SOUS-ENSEMBLE
< DU REGISTRE 'ST' D'ETAT DU PROCESSEUR; A
< LA DIFFERENCE DE 'ST', 'S' APPARTIENT A LA
< 'PST' D'UNE TACHE ('PSTIJ' OU 'PSTH').
< 'S' VA ETRE DEFINI BIT A BIT :
<
<
MS:: VAL 0 < BIT DE MODE D'EXECUTION DE LA
< TACHE :
< MS=K : MODE ESCLAVE,
< =1 : MODE MAITRE.
MODMST:: VAL 1 < 'MODE MAITRE' (CF. 'MS').
MODESC:: VAL 0 < 'MODE ESCLAVE' (CF. 'MS').
SVCS:: VAL 1 < SVCS EST MIS A 1 LORSQU'UN 'SVC'
< EST EXECUTE EN MODE ESCLAVE, ET
< EST REMIS A 0 LORSQU'UN 'RSV'
< EST EXECUTE; SVCS S'IL EST A 1
< EN MODE MAITRE PERMET L'ACTIVA-
< TION DE 'DRPS' LORS DE L'EXECUTION
< DES INSTRUCTIONS 'PSR', 'PLR',
< 'BSR', 'RSR', 'SVC' ET 'RSV'.
V:: VAL 6 < V=1 : - S'IL Y A DEBORDEMENT LORS
< D'INSTRUCTIONS ARITHMETIQUES
< SUR DES ENTIERS ALGEBRIQUES
< (DE -32768 A +32767),
< - SI 2 QUANTITES SONT EGALES
< APRES UNE INSTRUCTION DE
< COMPARAISON,
< - LORS D'UN PASSAGE A '0000
< PAR 'IC' OU 'DC'.
C:: VAL 7 < C=1 : - S'IL Y A REPORT LORS D'INS-
< TRUCTIONS ARITHMETIQUES
< SUR DES ENTIERS POSITIFS
< (DE 0 A +65535),
< - SI LE PREMIER TERME D'UNE
< COMPARAISON EST ALGEBRIQUE-
< MENT INFERIEUR AU SECOND (LE
< BIT0 ETANT ALORS LE BIT
< DE SIGNE).
SMST:: VAL COSBT?MS=FMASK(K=FCINST
< REGISTRE 'S' EN MODE MAITRE...
ASMST: EQU ZERO+SMST < POUR UNE REFERENCE EN AVANT...
<
<
< C A S D E L A T A C H E A L A R M E :
<
<
MALARM:: VAL MOCD < LE CHAMP 'MALARM' DE LA 'PSTH'
< DE LA TACHE ALARME (TACHE HARWARE 0)
< CONTIENT LE NUMERO DE L'ALARME
< EN CAUSE :
ALMX:: VAL K < MEMOIRE INEXISTANTE.
ALPRO:: VAL ALMX+I < PROTECTION 'DRPS' OU 'CDA'.
ALPAR:: VAL ALPRO+I < ERREUR DE PARITE HORS DU
< MODE 'DEBUG'.
ALIX:: VAL ALPAR+I < INSTRUCTION INEXISTANTE.
ALIP:: VAL ALIX+I < INSTRUCTION PRIVILEGIEE EN
< MODE ESCLAVE.
ALSCH:: VAL ALIP+I < 'RQST', 'WAIT' OU 'QUIT' EXECUTEE
< SOUS NIVEAU HARDWARE.
ALIPIX:: VAL ALSCH+I < RECEPTION D'UN 'IPI' DE REVEIL
< INTER-PROCESSEUR.
ALSTEP:: VAL ALIPIX+I < 'STEP'.
ALARR:: VAL ALSTEP+I < POINT D'ARRET EN MODE 'DEBUG'.
ALACTD:: VAL ALARR+I < 'ACTD'.
<
< FAUSSES ALARMES (INVENTEES
< PAR QUI VOUS SAVEZ POUR
< SIMPLIFIER LE TRAVAIL DE
< LA ROUTINE 'DOWN') :
<
ALASTA:: VAL ALACTD+I < INSTRUCTION 'STAR'.
<
< FAUX CODE D'ALARME
< CORRESPONDANT A UNE
< MEMOIRE INEXISTANTE
< DU 'CBJ' TRANSFORMEE
< EN UNE VIOLATION MEMOIRE
< PAR LA TACHE D'INTER-
< RUPTION DU 'CBJ' :
<
ALACBJ:: VAL ALASTA+I < MEMOIRE INEXISTANTE SUR 'CBJ'.
<
<
< D E F I N I T I O N D U R E G I S T R E S T :
< ( R E G I S T R E E T A T P R O C E S S E U R )
<
<
< NOTA IMPORTANT :
< LE REGISTRE 'ST' NE PARTICIPE PAS
< GLOBALEMENT AUX CHANGEMENTS DE CONTEXTES
< GLOBAUX OU PARTIELS; SEULS SES SOUS-
< ENSEMBLES 'SS' ET 'ST' Y PARTICIPENT !!!
<
<
< 'ST' VA ETRE DEFINI BIT A BIT :
<
<
MS: VAL MS < VOIR LE REGISTRE 'S'.
MODMST: VAL MODMST < VOIR LE REGISTRE 'S'.
MODESC: VAL MODESC < VOIR LE REGISTRE 'S'.
SVCS: VAL SVCS < VOIR LE REGISTRE 'S'.
< A T T E N T I O N : DANS CERTAINS
< CAS, 'SVCS' SERA APPELE 'SAUV'
< DANS LE REGISTRE 'ST' : VOIR A
< CE SUJET LA DEFINITION DE 'SCHED' !!!
MYSTR2:: VAL 2 < BIT DONT LA SIGNIFICATION M'ECHAPPE,
< MAIS COMME IL PEUT SERVIR, ON PARAMETRE..
V: VAL V < VOIR LE REGISTRE 'S'.
C: VAL C < VOIR LE REGISTRE 'S'.
LCM:: VAL 3 < LCM=1 : LES INTERRUPTIONS
< DU CANAL 'LDC' SONT
< MASQUEES.
IPM:: VAL 4 < IPM=1 : LES INTERRUPTIONS
< INTERPROCESSEURS (PAR
< 'IPI') SONT MASQUEES.
IOM:: VAL 5 < IOM=1 : TOUTES LES INTERRUPTIONS
< SONT MASQUEES Y COM-
< PRIS LE DEFAUT SECTEUR,
< MAIS A L'EXCEPTION
< DES 'IPI' !!!
DEBUG:: VAL 8 < DEBUG=1 : LES ERREURS DE
< PARITE MEMOIRE SONT
< INTERPRETEES COMME DES
< POINTS D'ARRET.
MAINT:: VAL 10 < MAINT=1 : LES ERREURS DE PARITE
< SONT IGNOREES...
SCHED:: VAL 11 < SCHED=1 : LE PROCESSEUR A ETE
< INTERROMPU DANS LE
< MICRO-SCHEDULER, ET
< ALORS 'SVCS' SIGNIFIE :
< SVCS=1 : LA SAUVEGARDE DU CONTEXTE
< DE LA TACHE SOFTWARE
< ABANDONNEE N'A PAS ETE
< FAITE (ENCORE DANS LES
< REGISTRES ET DANS LE
< CONTEXTE PARTIEL DE LA
< TACHE HARD COURANTE,
< =0 : LA SAUVEGARDE A ETE
< FAITE;
< NOTA : A CETTE OCCASION, ON
< APPELLERA 'SVCS' : 'SAUV' ==>
SAUV:: VAL SVCS < VOIR CE QUI PRECEDE !!!
STOP:: VAL 12 < STOP=1 : LE PROCESSEUR EST A
< L'ETAT ARRET PROGRAMME.
WARNG:: VAL 13 < WARNG=1 : UN DEFAUT SECTEUR EST EN
< COURS DE TRAITEMENT.
POP:: VAL 14 < IL FAUT QUE DEBUG=1; ALORS ::
< POP=1 : LES POINTS D'ARRET
< PROVOQUENT L'ARRET DU
< PROCESSEUR (MISE AU POINT
< PUPITRE),
< =0 : LES POINTS D'ARRET
< PROVOQUENT DES ALARMES
< (MISE AU POINT PROGRAMME).
XWOR%: VAL NBITMO-B-IOM
MIOM:: VAL BIT>XWOR% < MASQUE DU BIT 'IOM'.
XWOR%: VAL NBITMO-B-IPM
MIPM:: VAL BIT>XWOR% < MASQUE DU BIT 'IPM'.
XWOR%: VAL NBITMO-B-SVCS
MSVCS:: VAL BIT>XWOR% < MASQUE DU BIT 'SVCS'.
<
<
< I N I T I A L I S A T I O N P R O C E S S E U R :
<
<
< A L'INITIALISATION D'UN PROCESSEUR, ON A
<
< MS=1,
< LCM=IPM=IOM=1,
< STOP=1,
< AUTRES INDICATEURS=K.
<
<
PAGE
<
<
< P H I L O S O P H I E D E S E S C L A V E S :
<
<
< DEFINITION :
< LE SYSTEME CONTIENT UN CERTAIN
< NOMBRE DE TACHES ESCLAVES UTILI-
< SATRICES ; CES TACHES TRAVAILLENT
< EN "TIME-SHARING", ET A CETTE FIN,
< SE PARTAGENT LE MEME NIVEAU D'EXECU-
< TION 'NSPACT'. LORS D'UNE DEMANDE
< DE SERVICE, ON LEUR ALLOUE UN NIVEAU
< PRIVE (DIT DE "SERVICE") PRIS DANS
< UN POOL DYNAMIQUE ; CETTE ALLOCATION
< DYNAMIQUE FAIT QU'AUCUN UTILISATEUR
< N'EST PRIVILEGIE PAR RAPPORT AUX
< AUTRES VIS A VIS DES PRIORITES
< RELATIVES DES TACHES.
< SEULES LES TACHES ESCLAVES (OU
< UTILISATEURS) SONT SUSCEPTIBLES
< D'ETRE SWAPPEES.
< LES TACHES DE SERVICE FORMANT
< LE POOL D'ALLOCATION DYNAMIQUE
< OCCUPENT LES 'NSP', DE 'NSPSER'
< A 'NSPSER+NESCLA-Z'.
< A L'ENTREE DANS LE SYSTEME, UN
< UTILISATEUR SE VOIT ATTRIBUER PAR
< LE "JOB-ENTRY" ('HDLJE') UN IDEN-
< TIFICATEUR (OU 'ID') QUI SERT A LA
< FOIS D'INDEX D'ACCES A LA TABLE 'TBU',
< ET DE NUMERO DE ZONE DE SWAPPING
< SUR LE PERIPHERIQUE DE SWAPPING
< COURANT.
<
<
< NOTA :
< LES 'ID' COMMENCENT A 0...
<
<
NMESCL:: VAL 12 < NBRE MAX D'ESCLAVES DANS LE
< SYSTEME ; IL S'AGIT DE LA BORNE
< SUPERIEURE DE NESCLA.
NESCLA:: VAL 9 < NOMBRE D'ESCLAVES AUTORISES
< DANS LE SYSTEME.
IF NMESCL-NESCLA,,XEIF%,XEIF%
IF E R R E U R !!!
XEIF%: VAL ENDIF
X30:: VAL 2 < NBRE DE BLOCS DE SWAPPING
< RESERVES AUX PROCESSEURS DE
< BASE DU SYSTEME.
M:: VAL 1 < INCREMENT DU A LA PRESENCE DU SYSTEME.
X20:: VAL NESCLA+M+X30 < NBRE TOTAL DE BLOCS DE SWAPPING
< SUR LE DISQUE DE SWAPPING ;
< LE DEPLACEMENT DE +1 EST DU A
< LA PRESENCE DU SYSTEME LUI-MEME
< EN TETE DE CHAQUE DISQUE DE SWAPPING
<
<
< E N - T E T E D E L ' E S P A C E U T I L I S A T E U R :
<
<
XWOR%1: VAL W < CONSTANTE MULTIPLICATIVE ARBITRAIRE...
SLOESC:: VAL XWOR%1*FADR < TAILLE DE L'EN-TETE DE L'ESPACE
< MEMOIRE DES ESCLAVES : UTILISEE
< LORS DES TRAPPES POUR SAUVE-
< GARDER LES REGISTRES COURANTS.
<
<
< F O R M A T D E L ' E N - T E T E :
<
<
< MOT0 AT (SLO)-SLOESC+0,
< MOT1 BT (SLO)-SLOESC+1,
< MOT2 XT (SLO)-SLOESC+2,
< MOT3 YT (SLO)-SLOESC+3,
< MOT4 CT (SLO)-SLOESC+4,
< MOT5 LT (SLO)-SLOESC+5,
< MOT6 WT (SLO)-SLOESC+6,
< MOT7 KT (SLO)-SLOESC+7,
< MOT8 PT (SLO)-SLOESC+8,
< MOT9 ST (SLO)-SLOESC+9,
< MOT10 @, OU P DE (SLO)-SLOESC+10,
< RETOUR SI ST.
< MOT11 M =(ADRESSE) (SLO)-SLOESC+11,
< MOT12 O =TRANSLATION(@) SOUS LA FORME D'UN 'SLO' EN DEBUG
< ABSOLU,
< MOT13 MOT0 DE L'ESPACE MEMOIRE AVANT 'IMEMY',
< MOT14 MOT1,
< MOT15 MOT2...
<
< (T DESIGNE UN REGISTRE COURANT AU MOMENT
< D'UNE TRAPPE OU D'UN ALT-MODE).
<
<
RAT:: MOT RA < REGISTRE 'A' DE TRAPPE,
RBT:: MOT RB < REGISTRE 'B' DE TRAPPE,
RXT:: MOT RX < REGISTRE 'X' DE TRAPPE,
RYT:: MOT RY < REGISTRE 'Y' DE TRAPPE,
RCT:: MOT RC < REGISTRE 'C' DE TRAPPE,
RLT:: MOT RL < REGISTRE 'L' DE TRAPPE,
RWT:: MOT RW < REGISTRE 'W' DE TRAPPE,
RKT:: MOT RK < REGISTRE 'K' DE TRAPPE,
RPT:: MOT RP < REGISTRE 'P' DE TRAPPE,
RST:: MOT RS < REGISTRE 'S' DE TRAPPE,
BALT2:: VAL MYSTR2 < CE BIT DU REGISTRE 'RST' EST UTILISE
< POUR MEMORISER QU'UN DOUBLE ALT-MODE
< A ETE FRAPPE ; AINSI, LA COMMANDE "G"
< DU 'DEBUG' PERMET DE RELANCER CORREC-
< TEMENT LE PROGRAMME MEME INTERROMPU
< PAR UN DOUBLE ALT-MODE LORS D'UNE SORTIE.
< A T T E N T I O N : ON PREND 'MYSTR2'
< CAR C'EST UN BIT NON UTILISE PAR LE
< SOFTWARE, ET QU'IL N'Y A PAS AINSI DE
< RISQUES D'INTERFERENCES...
XWOR%2: VAL MALARM)MMOT=K
XWOR%2: VAL NBITMO-B-XWOR%2 < DERNIER POSSIBLE POUR 'BALT2' DANS 'S'
< SI L'ON SOUHAITE EVITER DES INTERFE-
< RENCES AVEC 'TH0'...
IF BALT2-XWOR%2,XEIF%,XEIF%,
IF ATTENTION : 'BALT2' SE TROUVE DANS LE CHAMP 'MALARM'
IF POSITIONNE DANS 'ST' PAR 'TH0' !!!
XEIF%: VAL ENDIF
RAD:: MOT RSLO < REGISTRE 'P' DE RETOUR LORS D'UNE
< TRAPPE APPARAISSANT A LA SUITE D'UN
< DOUBLE ALT-MODE ALORS QU'ON EST
< EN 'SVC', OU ADRESSE COURANTE SOUS
< !DEBUG.
RM:: MOT RSLE < REGISTRE MEMOIRE : ((RAD))=(RM).
RSLOT:: MOT RM+D < REGISTRE CONTENANT UNE TRANSLATION A
< APPLIQUER A 'RAD' SOUS DEBUG ABSOLU ;
< CETTE TRANSLATION EST DONNEE SOUS LA
< FORME D'UNE DADR-ADRESSE, AFIN DE POU-
< VOIR ATTEINDRE TOUTE LA MEMOIRE...
RMOT0:: MOT RSLOT+D < MOT0 DE L'ESPACE MEMOIRE UTILISATEUR
< AVANT 'IMEMY',
RMOT1:: MOT RMOT0+D < DE MEME LE MOT1,
RMOT2:: MOT RMOT1+D < ET ENFIN LE MOT 2...
RMOTN:: MOT RMOT2+D < PREMIER EMPLACEMENT LIBRE...
XLRMOT:: VAL RMOTN-RMOT0 < NOMBRE DE MOTS UTILISES DANS L'EN-TETE
< DE L'ESPACE MEMOIRE UTILISATEUR...
IF RMOTN-O-SLOESC,XEIF%,XEIF%,
IF ATTENTION : L'EN-TETE DE L'ESPACE MEMOIRE UTILISATEUR
IF 'SLOESC' EST INSUFFISANTE !!!
XEIF%: VAL ENDIF
<
< NOMS DES REGISTRES "VIRTUELS" :
<
KRAD:: VAL KAROND < REGISTRE 'ADRESSE COURANTE',
KRMEM:: VAL KM < REGISTRE 'MEMOIRE',
KRT:: VAL KT < INDICATEUR DE 'TRAPPE',
KRSLOT:: VAL KO < REGISTRE DE TRANSLATION ABSOLUE,
KRMOT0:: VAL KZERO < MOT0 DE LA MEMOIRE,
KRMOT1:: VAL KUN < MOT1 DE LA MEMOIRE,
KRMOT2:: VAL KDEUX < MOT2 DE LA MEMOIRE.
<
<
< T A B L E D ' A L L O C A T I O N
< D E S B L O C S E S C L A V E S :
<
<
<
<
< NOTA :
< LA TABLE TBU DONNANT L'ADRESSE DES
< DCT-ESCLAVES EST IMPLANTEE DERRIERE DCTSY
< AFIN D'ETRE ACCESSIBLE PAR LA FONCTION
< '1E15 DU RECOVERY !!!
< TBU EST UNE TABLE INDEXXE PAR
< L'IDESC, A PARTIR DE 0.
<
<
< A L L O C A T I O N D E S H A N D L E R S
< D E S E R V I C E :
<
<
XWORK7: VAL NESCLA < NOMBRE D'ESCLAVES...
WORD XWORK7 < POUR LES VALIDATIONS DE 'SOBT'.
TOHDS: EQU $-IJIJDX < TABLE D'OCCUPATION DES
< HANDLERS DE SERVICE.
X12:: VAL NESCLA+NBITMO-E
CALL #SISP CMS5 NBIT1#
<
<
< A L L O C A T I O N D E S ' I D ' :
<
<
WORD XWORK7 < POUR LES VALIDATIONS DE 'SOBT'.
TOESC: EQU $-IJIJDX
CALL #SISP CMS5 NBIT1#
<
<
< NOTE IMPORTANTE :
< IL Y A AUTANT DE HANDLERS DE SERVICE
< QU'IL Y A D'ESCLAVES, CE QUI EXPLIQUE
< L'ABSENCE DE SEMAPHORE D'ALLOCATION.
<
<
< A T T E N T I O N :
< IL EST OBLIGATOIRE QU'IL Y AIT AUTANT
< DE HANDLERS DE SERVICE QUE D'ESCLAVES,
< VOIR EN PARTICULIER LE CAS OU TOUS LES
< UTILISATEURS SE METTENT EN ATTENTE DE
< LECTURE ('CCI' PAR EXEMPLE...) !!!
<
<
PAGE
<
<
< T A B L E D E S S T A T I O N S - S E R V I C E
< A C C E S I B L E S P A R C H A N D :
<
<
< DEFINITION :
< LA TABLE 'DCTSY' QUI SUIT
< DONNE LA LISTE DES TACHES
< ACCESSIBLES VIA 'CHAND' ET
< CECI PAR ODRE DE PRIORITE
< DECROISSANTE ; ON Y TROUVE
< L'ADRESSE DE LA 'DCT' ASSO-
< CIEE.
<
<
< PHILOSOPHIE DU CHOIX DES 'NSP' :
< LE 'NSP' EST A UNE CONSTANTE
< DE TRANSLATION PRES LA PRIORI-
< DE LA TACHE ASSOCIEE (LES PETITS
< NUMEROS CORRESPONDANT AUX FORTES
< PRIORITES). ON UTILISE LES CON-
< VENTIONS SUIVANTES :
<
< 1 - LES SERVICES LENTS (PAR EXEM-
< PLE CEUX ASSOCIES A DES PERIPHE-
< IQUES LENTS : VISUS,...) SONT PLUS
< PRIORITAIRES QUE LES SERVICES RAPIDES
< ET SURTOUT FREQUENTS QUI RISQUERAIENT
< DANS LE CAS CONTRAIRE DE BLOQUER LE
< SYSTEME.
<
< 2 - SI LA TACHE T(I) APPELLE LA
< TACHE T(J), ON TENTERA DE RENDRE
< T(J) PLUS PRIORITAIRE QUE T(J),
< ET CE AFIN DE FAVORISER LE PARAL-
< LELISME :
<
< (T(I) --> T(J)) ==> (I > J).
<
<
< ACCES A CETTE TABLE :
< 1 - PAR LE SYSTEME : IL UTILISE 'BSR ACADCT'.
< 2 - PAR LES UTILISATEURS : A L'AIDE DE LA
< FONCTION '1E15.
<
<
TABLE
<
<
< T A C H E S I N A C C E S S I B L E S :
<
<
E963: EQU $
WORD DCTCHK < DCT DU TRACEUR DE CHANGEMENT
< DE CONTEXTES.
WORD DCTBOT < DCT DU NIVEAU INITIAL.
NSNSP0:: VAL $-E963 < NIVEAU DE LA TACHE DE NSP=K.
<
<
< T A C H E S A C C E S S I B L E S :
<
<
DCTSY: EQU $
WORD DCTVID
NSPVID:: VAL $-D-DCTSY
IF NSPVID-K,,XEIF%,
IF ATTENTION : 'NSPVID' DOIT ETRE NUL !!!
XEIF%: VAL ENDIF
WORD DCTTSI
NSPTSI:: VAL $-D-DCTSY
WORD DCTMUL
NSPMUL:: VAL $-D-DCTSY
WORD DCTPR1
NSPPR1:: VAL $-D-DCTSY < NSP DE LA TACHE DE DIALOGUE ENTRE
< LE PROCESSEUR MAITRE ET LE PRO-
< CESSEUR ESCLAVE 'PR1'.
WORD DCTTYS
NSPTYS:: VAL $-D-DCTSY
WORD DCTSUR
NSPSUR:: VAL $-D-DCTSY
NSPVI0:: VAL $-DCTSY < 'NSP' DE LA PREMIERE VISU.
WORD DCTVI1
<*******************************************************************************
NSPVI1:: VAL $-D-DCTSY
NSPVI1: @VAL '0@@@@ < 'NSP' DE LA PREMIERE VISU.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
WORD DCTVI2
NSPVI2:: VAL $-D-DCTSY
WORD DCTVI3
NSPVI3:: VAL $-D-DCTSY
WORD DCTVI4
NSPVI4:: VAL $-D-DCTSY
WORD DCTVI5
NSPVI5:: VAL $-D-DCTSY
WORD DCTVI6
NSPVI6:: VAL $-D-DCTSY
WORD DCTVI7
NSPVI7:: VAL $-D-DCTSY
WORD DCTVI8
NSPVI8:: VAL $-D-DCTSY
<
< Z O N E D ' I N S E R T I O N D E S V I S U S :
<
<*******************************************************************************
NSPVIN:: VAL $-D-DCTSY < 'NSP' DE LA DERNIERE VISU.
NSPVIN: @VAL '0@@@@ < 'NSP' DE LA DERNIERE VISU.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
<
< A U T R E S P E R I P H E R I Q U E S :
<
WORD DCTCR2
NSPCR2:: VAL $-D-DCTSY
WORD DCTCR1
NSPCR1:: VAL $-D-DCTSY
WORD DCTLP1
NSPLP1:: VAL $-D-DCTSY
<
<
< A T T E N T I O N :
< NSPNP1 DOIT ABSOLUMENT SE TROUVER DERRIERE
< TOUS LES NSP DU TYPE IN & OUT UTILISES
< LORS DU RUNCCI, EN EFFET SINON LORS DE
< L'APPEL D'UN PROCESSEUR (DANS RUNCCI), ON
< ECRASE LE CODEM(DEMSWP) SANS QUE LE
< RELEASE MEMOIRE DE CETTE ZONE AIT ETE
< FAIT ; D'OU LA PERTE D'UNE ZONE MEMOIRE !!!!!
<
<
NSPNP1:: VAL $-D-DCTSY < 1ER NSP NON PRIORITAIRE.
IF NSPNP1-NSPCR1,,,XEIF%
IF E R R E U R !!!
XEIF%: VAL ENDIF
<
< ' S G N ' :
<
WORD DCTTRI
NSPTRI:: VAL $-D-DCTSY
<
<
< A T T E N T I O N :
< DCTDLN,DCTSTN,DCTLON,DCTLNS,DCTLNU,
< DCTNXP,DCTNXS FORMENT UN TOUT INSEPARABLE.
< (CF. L'ASSIGNATION 'SGN').
<
<
NSPSG0:: VAL $-DCTSY < PREMIER 'NSP' DU "SGN"...
WORD DCTDLN
NSPDLN:: VAL $-D-DCTSY
WORD DCTSTN
NSPSTN:: VAL $-D-DCTSY
X123X:: VAL '15-NSPSTN < POUR NOUVELLES VERSIONS
< LE 08/05/78
WORD DCTLON
NSPLON:: VAL $-D-DCTSY
WORD DCTLNS
NSPLNS:: VAL $-D-DCTSY
WORD DCTLNU
NSPLNU:: VAL $-D-DCTSY
WORD DCTNXP
NSPNXP:: VAL $-D-DCTSY
WORD DCTNXS
<*******************************************************************************
NSPNXS:: VAL $-D-DCTSY
NSPNXS: @VAL '0@@@@ < 'NSP' DU NEXT-SERIE DU 'SGN'.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
NSPSGN:: VAL $-D-DCTSY < DERNIER 'NSP' DU "SGN"...
<
< A L L O C A T I O N M E M O I R E C E N T R A L E :
<
WORD DCTRLB
NSPRLB:: VAL $-D-DCTSY
WORD DCTRL1
NSPRL1:: VAL $-D-DCTSY
WORD DCTRL2
NSPRL2:: VAL $-D-DCTSY
WORD DCTRL4
NSPRL4:: VAL $-D-DCTSY
WORD DCTALB
NSPALB:: VAL $-D-DCTSY
WORD DCTAL1
NSPAL1:: VAL $-D-DCTSY
WORD DCTAL2
NSPAL2:: VAL $-D-DCTSY
WORD DCTAL4
NSPAL4:: VAL $-D-DCTSY
<
< D I S Q U E S R E E L S E T V I R T U E L S :
<
WORD DCTDKB
NSPDKB:: VAL $-D-DCTSY
IF NSPDKB-NSPNP1,,,XEIF%
IF JE LAISSE CETTE VALIDATION, MAIS EN FAIT ELLE
IF N'EST UTILE QUE POUR 'DKU' !!!
XEIF%: VAL ENDIF
WORD DCTDKA
NSPDKA:: VAL $-D-DCTSY
DKCMS4:: VAL $-D-DCTSY+Z
DO '23-DKCMS4 < POUR NE PAS AVOIR A MODIFIER DE
WORD ZERO < NOMBREUX PROGRAMMES SYSTEME...
DKCMS4: VAL $-D-DCTSY
NSPDK:: VAL $-D-DCTSY < NSP DU PREMIER DISQUE SUR 'CMS4'
WORD DCTDKU
NSPDKU:: VAL $-D-DCTSY
<*******************************************************************************
NSPDK1:: VAL $-D-DCTSY
NSPDK1: @VAL '0@@@@ < 'NSP' DU PREMIER DISQUE DE 'CMS5'.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
IF NSPDKU-NSPNP1,,,XEIF%
IF ATTENTION : 'DKU' EST UTILISE POUR LA TELEVISION
IF NUMERIQUE AVEC UNE FONCTION UNIQUE 'FONTV' POUR
IF LES ENTREES ET LES SORTIES ; AFIN DE NE PAS TROUBLER
IF 'OMOV1' ET 'OMOV2', IL FAUT NSPDKU>NSPNP1 !!!
XEIF%: VAL ENDIF
WORD DCTDKM
NSPDKM:: VAL $-D-DCTSY < DISQUE A TETES MOBILES.
WORD DCTDKF
NSPDKF:: VAL $-D-DCTSY < DISQUE A TETES FIXES.
NSPDKS:: VAL NSPDKF < DISQUE DE SWAPPING.
DKCMS4: VAL $-D-DCTSY-DKCMS4 < NBRE DE DISQUES ATTENDUS PAR
< LE MONITEUR CMS4.
<
< A L L O C A T I O N M E M O I R E D I S Q U E :
<
WORD DCTREL
NSPREL:: VAL $-D-DCTSY
WORD DCTGET
NSPGET:: VAL $-D-DCTSY
<
< P E R I P H E R I Q U E S D I V E R S :
<
WORD DCTMEM
NSPMEM:: VAL $-D-DCTSY
WORD DCTHOR
<*******************************************************************************
NSPHOR:: VAL $-D-DCTSY
NSPHOR: @VAL '0@@@@ < 'NSP' DE L'HORLOGE DE 'CMS5'.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
WORD DCTCU1
NSPCU1:: VAL $-D-DCTSY
WORD DCTCU2
NSPCU2:: VAL $-D-DCTSY
WORD DCTCU3
NSPCU3:: VAL $-D-DCTSY
WORD DCTMT1
NSPMT1:: VAL $-D-DCTSY
NSPPER:: VAL $-D-DCTSY < DERNIER HANDLER A TESTER EN CAS
< DE DEFSEC. (CF. BIT0 DE SIT).
<
< VALIDATION DE TFONCE RELATIVEMENT A NSPPER :
<
IF TFONCE-XXLSEM*NBITMO-NSNSP0-Z-NSPPER,,XEIF%,XEIF%
IF E R R E U R : LA FILE D'ATTENTE DE CERTAINS
IF SEMAPHORES 'SIT' (CEUX DES DERNIERS PERIPHERIQUES)
IF EST EN RECOUVREMENT AVEC LE MOT 'TFONCE' !!!
XEIF%: VAL ENDIF
<
< ' S G F ' :
<
WORD NIL
NSPFIL:: VAL $-D-DCTSY < NSP DE LA 1ERE DCTF.
NDCTF:: VAL 15 < NBRE DE DCT FICHIERS.
< NOTA : ON PASSE DE 16 A 15 AFIN DE
< RAJOUTER 'NSPMT1', SANS DEPLACER LE
< RESTE DE LA LISTE 'DCTSY'...
DO NDCTF-D
WORD NIL
<
< T A C H E S D E S E R V I C E :
<
WORD DCTS1
NSPSER:: VAL $-D-DCTSY < NSP DU 1ER HANDLER DE SERVICE DES
< ESCLAVES.
WORD DCTS2
WORD DCTS3
WORD DCTS4
WORD DCTS5
WORD DCTS6
WORD DCTS7
WORD DCTS8
WORD DCTS9
<
< G E S T I O N D E S U T I L I S A T E U R S :
<
WORD DCTEJ
NSPEJ:: VAL $-D-DCTSY < NSP DE END-JOB.
WORD DCTJE
NSPJE:: VAL $-D-DCTSY < NSP DU JOB ENTRY.
WORD DCTRUN
NSPRUN:: VAL $-D-DCTSY
WORD NIL
NSPACT:: VAL $-D-DCTSY < NSP D'EXECUTION DES ESCLAVES
WORD DCTSVC
NSPSVC:: VAL $-D-DCTSY
WORD DCTRCF < DCT DU RELEASEUR DES CLEFS D'UN
< FICHIER A DELETER.
NSPRCF:: VAL $-D-DCTSY < NSP DU RELEASEUR DES CLEFS
< D'UN FICHIER DELETE.
WORD DCTSCH
NSPSCH:: VAL $-D-DCTSY < NSP DU SCHEDULER DES ESCLAVES.
IF NSPRUN-NSPACT,XEIF%,,
IF ATTENTION : IL FAUT QUE LA PRIORITE DE
IF 'RUN' SOIT SUPERIEURE A CELLE DE 'ACT' !!!
XEIF%: VAL ENDIF
IF NSPACT-NSPSVC,XEIF%,,
IF ATTENTION : IL FAUT QUE LA PRIORITE DE
IF 'ACT' SOIT SUPERIEURE A CELLE DE 'SVC' !!!
XEIF%: VAL ENDIF
IF NSPSVC-NSPSCH,XEIF%,,
IF ATTENTION : IL FAUT QUE LA PRIORITE DE
IF 'SVC' SOIT SUPERIEURE A CELLE DE 'SCH' !!!
XEIF%: VAL ENDIF
<
<
< L O N G U E U R D E S F I L E S D ' A T T E N T E
< D E S 4 S E M A P H O R E S D E S D C T :
<
<
X10:: VAL $-D-DCTSY+NBITMO-E+NSNSP0
NTRN
LSEMR:: VAL X10/NBITMO < LONGUEUR EN MOTS DES FILES
TRN
< D'ATTENTE DES SEMAPHORES
< D'EXCLUSION. C'EST LA VALEUR
< A DONNER A 'LSEM'.
IF LSEM-LSEMR,,XEIF%,
IF E R R E U R !!!
IF LSEM#LSEMR !!!
XEIF%: VAL ENDIF
<
<
< T A C H E S S P E C I A L E S :
<
<
< LES TACHES SITUEES APRES LE CALCUL
< DE 'LSEMR' ONT UN STATUT SPECIAL ; EN
< EFFET LES FILES D'ATTENTE DES SEMAPHORES
< DES DCT NE POURRONT PAS EN GENERAL
< LES CONTENIR (CECI EST FAIT AFIN DE
< MINIMISER LA LONGUEUR DE CELLES-CI...)
< EN CONSEQUENCES, CES TACHES (IDLE
< ET INI) DEVRONT :
< 1- NE PAS SE METTRE EN ATTENTE SUR UN SIT,
< 2- NE PAS SE METTRE EN ATTENTE SUR UN
< SCHVID (CE NE SONT PAS DES HANDLERS),
< 3- NE PAS LOUER D'AUTRES DCT (PAS
< D'ATTENTE SUR UN SEMLOC),
< 4- ENFIN N'UTILISER 'CHAND' QU'AVEC
< PRUDENCE AFIN DE NE PAS AVOIR DE
< PROBLEMES AVEC LES SEMAPHORES
< D'EXCLUSION DE PHASES CRITIQUES
< (SPHEX).
< A NOTER D'AILLEURS QUE CES TACHES
< N'ONT PAS A PROPREMENT PARLER DE
< DCT. DE PLUS INI QUI UTILISE CHAND
< SIMULE LES ATTENTES DE FIN DE SERVICE
< EN TESTANT LES BETA(WEIO), CE
< QU'IL PEUT FAIRE SANS RISQUE PUISQU'IL
< EST LA TACHE LA MOINS PRIORITAIRE !!!
<
<
WORD DCTIDL
NSPIDL:: VAL $-D-DCTSY < NSP DE LA TACHE IDLE.
WORD DCTINI
NSPINI:: VAL $-D-DCTSY < INITIALISATION DU SYSTEME.
NSPIDS:: VAL NSPINI < NSP DE LA TACHE DE "SUPER-IDLE"...
IF NSPIDS-NSPIDL,,,XEIF%
IF ATTENTION : IL EST IMPERATIF QUE LA TACHE DE
IF "SUPER-IDLE" SOIT MOINS PRIORITAIRE QUE LA
IF TACHE D'IDLE !!!
XEIF%: VAL ENDIF
<
< A C T I V A T I O N D E ' S Y S I N I ' :
<
XWOR%: VAL $-ZERO < SAUVEGARDE DU '$'.
XWOR%1: VAL NSPINI+NSNSP0 < 'NS' DU 'SYSINI'.
XWOR%2: VAL XWOR%1/NBITMO < RANG DU MOT DE 'ASTF' LE CONTENANT.
XWOR%3: VAL XWOR%2*NBITMO-XWOR%1+NBITMO-B
$EQU ASTF+XWOR%2
WORD BIT>XWOR%3 < ACTIVATION DU 'SYSINI'.
$EQU ZERO+XWOR%
<
<
< V A R I A B L E S D E B A S E D E C M S 5 :
<
<
WORD TBU
NSPTBU:: VAL $-D-DCTSY < 'NSP' D'ACCES A LA LISTE DES UTILISATEURS
< PRESENTS DANS LE SYSTEME.
WORD UPDATE
<*******************************************************************************
NSPUPD:: VAL $-D-DCTSY < 'NSP' D'ACCES AU NUMERO DU RELEASE
< COURANT DU SYSTEME...
NSPUPD: @VAL '0@@@@ < 'NSP' D'ACCES AU NUMERO D'UPDATE...
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
WORD MCOLOR
<*******************************************************************************
NSPCOL:: VAL $-D-DCTSY < 'NSP' D'ACCES A LA MEMOIRE DES
< COULEURS ACTIVES DU SYSTEME DE
< TELEVISION NUMERIQUE...
NSPCOL: @VAL '0@@@@ < 'NSP' D'ACCES AUX COULEURS BASSE DEF.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
WORD TEMPO1
NSPT1:: VAL $-D-DCTSY < NSP D'ACCES A LA TEMPORISATION INTER-
< TEST DE SERVICE DU PROCESSEUR
< ESCLAVE 'PR1'; LA DUREE DE CETTE TEMPO-
< RISATION EST EXPRIMEE EN NEGATIF.
WORD LPRO
NSPPRO:: VAL $-D-DCTSY < NSP D'ACCES A LA LISTE DESCRIPTIVE
< DES PROCESSEURS DU SYSTEME.
WORD THESC
NSPHES:: VAL $-D-DCTSY < NSP D'ACCES A LA TABLE D'INITIALISATION
< DES "HORLOGES" DE SWAPPING ESCLAVES.
WORD TOIDLE
NSPTOI:: VAL $-D-DCTSY < NSP D'ACCES AU DETECTEUR DE TIME-OUT
< DE LA TACHE 'IDLE'.
WORD ITERSE
NSPXSE:: VAL $-D-DCTSY < NSP D'ACCES A L'INSTRUCTION DE POSITION-
< NEMENT DU NOMBRE D'ITERATIONS DE 'HDLSER'
< PERMETTANT LE RALENTISSEMENT DU SYSTEME
< DANS LE RAPPORT 'NITERS'...
<
< C O M P A T I B I L I T E ' C M S 4 ' :
<
XWOR%1: VAL $-DCTSY
XWOR%2: VAL '57 < 'NSP' PRESUME DE 'NSPESC'...
DO XWOR%2-XWOR%1
WORD ZERO < POUR LA COMPATIBILITE PROGRAMMES...
<
<
< L I S T E D E S D C T - E S C L A V E S :
<
<
TBU: EQU $
WORD NIL
<*******************************************************************************
NSPESC:: VAL $-D-DCTSY < NSP D'ACCES A L'ESCLAVE ID=K.
NSPESC: @VAL '0@@@@ < 'NSP' D'ACCES A LA LISTE UTILISATEURS.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
IF XWOR%2-NSPESC,,XEIF%,
IF ATTENTION : INCOMPATIBILITE CMS4 !!!
XEIF%: VAL ENDIF
DO NESCLA-D
WORD NIL < ESCLAVES D'ID=1 A ID=NESCLA-1.
WORD ASTREE
NSPAST:: VAL $-D-DCTSY < NSP D'ACCES AU NOMBRE DE NOEUDS LIBRES
< CONTENU DANS L'ARBRE DU SYSTEME.
<
<
< V A R I A B L E S D E B A S E D E C M S 5 :
< ( S U I T E )
<
<
WORD NUSERA
<*******************************************************************************
NSPUSE:: VAL $-D-DCTSY < NSP D'ACCES AU NBRE D'USERS
< ACTIFS, C'EST-A-DIRE ENTRE
< !LOGIN ET !F/!BYE, ET N'AYANT
< PAS FRAPPE !W.
NSPUSE: @VAL '0@@@@ < 'NSP' D'ACCES AU NOMBRE D'UTILISATEURS.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
WORD ANSPS
NSPSWS:: VAL $-D-DCTSY < NSP D'ACCES AU 'DKS'.
WORD BVOLU
NSPVLU:: VAL $-D-DCTSY < NSP D'ACCES AU VOLUME COURANT MONTE
< SUR 'DKU'.
WORD MATX
NSPCM:: VAL $-D-DCTSY < NSP D'ACCES AU 1ER MOT DE LA
< MATRICE DES CONNEXIONS !CM.
WORD TEDF+IJIJDX
NSPEDF:: VAL $-D-DCTSY < NSP D'ACCES A LA TABLE DES ETATS
< DES FICHIERS POTENTIELS ET AUTRES...
< (ACCES AU MOT0...)
XWOR%1: VAL $-DCTSY
XWOR%2: VAL '66 < 'NSPNSL' PRESUME...
DO XWOR%2-XWOR%1
WORD ZERO < POUR COMPATIBILITE CMS4.
WORD NSL
NSPNSL:: VAL $-D-DCTSY < NSP D'ACCES AU NBRE DE SECTEURS
< LIBRES SUR LES DISQUES.
IF XWOR%2-NSPNSL,,XEIF%,
IF ATTENTION : INCOMPATIBILITE CMS4 !!!
XEIF%: VAL ENDIF
WORD TFREQ+NMESCL+Z
NSPSOC:: VAL $-D-DCTSY < NSP D'ACCES A LA TABLE D'
< INITIALISATION DES PATTERNS DE
< SWAPPING OUT CYCLIQUES.
WORD AMAIL
NSPTT:: VAL $-D-DCTSY < NSP D'ACCES AU NOEUD DE LA
< GRAMMAIRE DU CCI A PARTIR DU
< QUEL ON EMET LE MESSAGE
< VARIABLE 'MAIL' AUX ESCLAVES A
< CHAQUE INTERROGATION DU CCI ('?')
< SON OCTET0 CONTIENT LA LONGUEUR
< REELLE DU MESSAGE, ET LE
< MOT1 L'ADRESSE OU METTRE LE
< MESSAGE VARIABLE.
NLS
WORD CTRLC
NSPASS:: VAL $-D-DCTSY < ACCES AU 1ER CARACTERE DU MOT
< DE PASSE DU NUMERO DE COMPTE
< DU SYSTEME (:SYS).
LST
WORD LTIME
<*******************************************************************************
NSPDAT:: VAL $-D-DCTSY < NSP D'ACCES A LA DATE COURANTE,
< MOT0=ANNEE,
< MOT1=MOIS,
< MOT2=JOUR,
< MOT3=HEURE,
< MOT4=MINUTE,
< MOT5=SECONDE ;
< NSPDAT DONNE ACCES AU MOT0 ; LES
< AUTRES MOTS S'OBTIENNENT PAR
< INCREMENETATION...
NSPDAT: @VAL '0@@@@ < 'NSP' D'ACCES A LA DATE A/M/J/H/M/S.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
WORD LZSAVE
<*******************************************************************************
NSPSAV:: VAL $-D-DCTSY < NSP D'ACCES A LA LISTE DES
< INFORMATIONS VITALES A SAUVEGAR-
< DER/RESTAURER LORS DES RESTARTS
< DU DISQUE, ET CONCERNANT L'
< ALLOCATION DISQUE, ET L'ARBRE
< GENERAL DU SYSTEME (SGN).
< IL S'AGIT D'UNE LISTE DE DOUBLE-
< MOTS DU TYPE (@INFORMATION,
< LONGUEUR-MOT DE CETTE
< INFORMATION) ; LA FIN DE LISTE
< EST INDIQUEE PAR UN DOUBLET (K,0)
NSPSAV: @VAL '0@@@@ < 'NSP' D'ACCES A LA LISTE DE COPY.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
WORD COM+DEPCS
NSPCOM:: VAL $-D-DCTSY < NSP D'ACCES A LA VALEUR DE LA
< BASE C DE CMS4.
WORD AZPTCH
NSPAZP:: VAL $-D-DCTSY < NSP D'ACCES A LA 1ERE ADRESSE
< LIBRE COURANTE DE LA ZONE DE
< PATCH DU DEBUG SOUS RECOVERY.
WORD LZPTCH
NSPLZP:: VAL $-D-DCTSY < ADRESSE LIMITE SUPERIEURE DE
< CETTE ZONE DE PATCH.
WORD TFREK
NSPALP:: VAL $-D-DCTSY < NSP D'ACCES A L'ALPHABET VIRTUEL UTILISE
< DANS LE 'SGN' POUR ORDONNANCER LES
< CARACTERES DE L'ARBRE.
NSPALP: @VAL '0@@@@ < 'NSP' D'ACCES A L'ALPHABET VIRTUEL SGN.
CALL #SISP CMS5 GEN DEF#
WORD DCTIT
NSPIT:: VAL $-D-DCTSY < NSP D'ACCES A LA LISTE DES
< CORRESPONDANCES NIVEAU
< D'INTERRUPTION --> DCT.
WORD TOM+IJIJDX
NSPTOM:: VAL $-D-DCTSY < NSP D'ACCES AU MOT0
< DE LA TABLE D'ALLOCATION
< MEMOIRE DE CMS4.
WORD BUINT
NSP2K:: VAL $-D-DCTSY < NSP D'ACCES AUX LISTES 'BUINT'
< ET 'K2INT' INDIQUANT LES BLOCS
< DE 2K INTERDITS LORS DE L'ALLO-
< CATION MEMOIRE.
WORD SAVEX
NSPTRA:: VAL $-D-DCTSY < ACCES A L'INDICATEUR DE TRACE.
WORD ETASYS
NSPETA:: VAL $-D-DCTSY < ACCES A L'ETAT DU SYSTEME.
WORD MEMV
NSPMV:: VAL $-D-DCTSY < ACCES AUX PARAMETRES DE CONTROLE
< DE LA MEMOIRE VIRTUELLE DKB.
WORD TVCTRL
NSPTVC:: VAL $-D-DCTSY < NSP D'ACCES AU MOT DE CONTROLE TV.
WORD TVMEM1
NSPTV1:: VAL $-D-DCTSY < NSP D'ACCES A L'ADRESSE 1ERE IMAGE.
WORD TVMEM2
NSPTV2:: VAL $-D-DCTSY < NSP D'ACCES A L'ADRESSE 2EME IMAGE.
WORD TVMEM3
NSPTV3:: VAL $-D-DCTSY < NSP D'ACCES A L'ADRESSE 3EME IMAGE.
WORD TVMEME
NSPTVE:: VAL $-D-DCTSY < NSP D'ACCES A LA TRAME SIMULEE...
WORD TVNITE
NSPTVI:: VAL $-D-DCTSY < NSP D'ACCES AU NOMBRE D'ITERATIONS
< NECESSAIRES A LA SIMULATION...
WORD ALBKTV
NSPTVK:: VAL $-D-DCTSY < NSP D'ACCES A LA LONGUEUR DES BLOCS
< DE MOTS INSEPARABLES UTILISES LORS
< DES TRANSFERTS ENTRELACES VERS LA
< MEMOIRE 'MEMTV'.
<
<
< Z O N E D E P A T C H D E D C T S Y :
<
<
< NOTA :
< SI CETTE ZONE DE PATCH EST PLEINE, ON
< SE SOUVIENDRA QUE CERTAINES ENTREES DE
< 'DCTSY' SONT PEUT-ETRE VIDES, ET QU'IL
< EST PEUT-ETRE ALORS POSSIBLES DE LES
< COMBLER...
<
<
NSPPAT:: VAL $-DCTSY < NSP D'ACCES A LA ZONE DE PATCH.
DO NMTS-NSPPAT-NSNSP0
WORD NIL < ZONE DE PATCH...
NSPLST:: VAL $-D-DCTSY < DERNIER 'NSP' ; ON LE CALCULE AINSI,
< AFIN QUE LA TABLE 'PSTS00' NE DEPASSE
< PAS 'NMTS' MOTS...
<
<
< R E L A I D E S T A C H E S S O F T :
<
<
PSTS00: EQU DCTSY-NSNSP0
<
<
< N S P D U M M Y :
<
<
NSPDUM:: VAL NMTS < CE NSP 'DUMMY' EST DESTINE
< AUX !ASSIGN .
XWOR%1: VAL MSKNSP=K
XWOR%1: VAL -XWOR%1 < POUR UN DECALAGE A DROITE...
IF MSKNSP>XWOR%1-NSPDUM+N,,XEIF%,
IF ATTENTION : IL Y A INCOMPATIBILITE ENTRE
IF CE MASQUE ET LA VALEUR DE 'NSPDUM' !!!
XEIF%: VAL ENDIF
<
<
< M I S E E N P L A C E D ' U N E F A U S S E
< ' D C T S Y ' E N T E T E D E L A
< M E M O I R E H A U T E A F I N D ' A S S U R E R
< L A C O M P A T I B I L I T E A V E C L A
< F O N C T I O N ' 1 E 1 5 :
<
<
CALL #SISP CMS5 DOL2#
IF DOLAR2-Q8000,,XEIF%,
IF ATTENTION : ON DOIT ETRE EN Q8000 !!!
XEIF%: VAL ENDIF
DZS NSPLST+D < ON BLOQUE UN ESPACE IDENTIQUE
< A CELUI DE 'DCTSY'...
CALL #SISP CMS5 DOL1#
PAGE
<
<
< F O R M A T D C T - E S C L A V E :
<
<
< DEFINITION :
< LA 'DCT-ESCLAVE' A UN
< FORMAT TRES DIFFERENT DES
< AUTRES 'DCT' ; CHAQUE UTILI-
< SATEUR EN POSSEDE UNE ; ON Y
< TROUVE D'ABORD SES REGISTRES
< DE TRAVAIL, DES INDICATEURS,
< UNE SERIE DE DEMANDES PRE-GENE-
< REES ET PERMETTANT PAR EXEMPLE
< L'ALOCATION MEMOIRE, LE SWAP-
< PING,... ET ENFIN UN BUFFER
< (DIT "RESIDENT") ASSURANT
< LE TRANSIT DES ENTREES-SORTIES
< LENTES.
<
<
< NOTA :
< LES DCT-ESCLAVE SONT IMPLANTEES DANS UN
< BUFFER DE YY7 MOTS ALLOUE A CHAQUE ESCLAVE
< LORS DE SON ENTREE DANS LE SYSTEME.
<
<
DSEC DCTE
DCTESC: EQU $
DCTESK:: VAL DCTESC-ZERO
<
<
< P S T D E L ' E S C L A V E :
<
<
PSTESC: DZS XLPSTS < PST DE L'ESCLAVE.
IF PSTESC-DCTESC-XXPSTD,,XEIF%,
IF BIZARRE !!!
XEIF%: VAL ENDIF
<
<
< I N D I C A T E U R S D I V E R S :
<
<
<*******************************************************************************
IDESC: WORD NILK < IDENTIFICATEUR DE L'ESCLAVE.
IDESC: @MOT '0@@@@ < IDENTIFICATEUR DE L'UTILISATEUR.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
<
IDESCS:: VAL L
< SI BIT0=1 : LE SWAPPING NE DOIT
< PAS ETRE BLOQUE LORS D'UN
< 'ALT-MODE' (PERMET DONC LES
< PATCHES MEMOIRE).
IDESCW:: VAL IDESCS+BIT
< SI BIT1=1 : L'ESCLAVE EST
< SUSPENDU DANS CCI PAR SON
< HANDLER DE SERVICE.
IDESCA:: VAL IDESCW+BIT
< SI BIT2=1 : LA FONCTION DU
< 'ALT-MODE' EST INHIBE.
IDESCI:: VAL IDESCA+BIT
< SI BIT3=1 : LE CCI N'EST PAS
< INTERACTIF AU COURS DE CETTE
< INTERROGATION (LE MESSAGE SE
< TROUVE DEJA DANS BUFESC).
MKTRAK:: VAL '0F00
< BIT4-7=0000 : POUR L'EDITION
< DE LA TRACE.
MKIDES:: VAL '007F < MASQUE DE DEFINITION DE L'IDENTIFICATEUR.
FSERV: WORD NIL < ADRESSE D'UNE ROUTINE A APPELER
< EVENTUELLEMENT EN FIN DE SERVICE,
< ENTRE LE TEST DE REACTIVATION
< ET L'APPEL AU SCHEDULER, C'EST-
< A-DIRE LORSQU'ON EST SUR DE
< LA PRESENCE DE L'ESPACE MEMOIRE
< DE L'ESCLAVE.
PRESC: WORD NIL < P DE RELANCE D'UN ESCLAVE LORS
< D'UNE COMMANDE '!' ;
< PRESC<--0 : LORS DU 'JOB-ENTRY',
< PRESC<--0 : LORS DE LA COM-
< MANDE '!',
< PRESC<--ADRESSE-RUN(PROCESSEUR) A
< CHAQUE RUN DE PROCESSEUR
< DE BASE DE CMS4,
< PRESC<--(A) LORS DE L'EXECUTION
< D'UNE INSTRUCTION
< '1EB5.
<
<
< D E M A N D E D ' A C C E S A U X
< T A C H E S D E S E R V I C E S :
<
<
DEMSER: DZS LDEM0 < BLOC DE DEMANDE AUX HANDLERS
< DE SERVICE, ON TROUVE DANS :
< AMDEM=ADRESSE AUTOMATE DE SERVICE.
<
<
< P R O T E C T I O N P A R T I E L L E D E D K U
< P O U R C H A Q U E U T I L I S A T E U R :
<
<
XWOR%1: VAL ARGDEM-NSPTYP+CODEM
LUDKU: EQU DEMSER+XWOR%1 < LISTE DES GROUPES DE CYLINDRE APPARTENANT
< A L'UTILISATEUR ; CHAQUE GROUPE CONTIENT
< 'NCYLP' CYLINDRES ET EST ASSOCIE A UN
< BIT DE LA LISTE DE 'LUDKU' ; UN GROUPE
< DE CYLINDRES APPARTIENT A L'UTILISATEUR
< SI SON BIT ASSOCIE DANS 'LUDKU' EST A 1.
<
<
< D E M A N D E D E S W A P P I N G :
<
<
<*******************************************************************************
DEMSWP: EQU $ < DEMANDE SWAPPING IN/OUT.
DEMSWP: @MOT '0@@@@ < DEMANDE DE SWAPPING DE L'ESCLAVE.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
BYTE NSPDKS;XDSYM < AVEC : BIT8=1 SI SWAPPING OUT,
< =0 SI SWAPPING IN.
< (BIT DE PRIORITE DE DEMSWP)
< SI BIT0=1 : LE SWAPPING EST
< BLOQUE POUR CET ESCLAVE.
WORD NILK < OPDEM=2 SI SWAPPING OUT,
< =0 SI SWAPPING IN.
WORD NIL < ADRESSE-OCTET D'IMPLANTATION DE
< L'ESCLAVE EN MEMOIRE.
WORD NILK < TAILLE EN OCTETS DE L'ESPACE
< MEMOIRE DE L'ESCLAVE.
WORD NILS < ADRESSE-SECTEUR DE LA ZONE
< DE SWAPPING DE L'ESCLAVE SUR LE
< DISQUE DE SWAPPING.
DZS LDEM0+DEMSWP-$
<
<
< D E M A N D E D ' A L L O C A T I O N M E M O I R E :
<
<
DEMMEM: EQU $ < DEMANDE D'ALLOCATION/RELEASE
< D'ESPACE MEMOIRE.
BYTE NILK;NILK < BYTE0=NSP,REL<1,2,4>>
WORD NILK
WORD DEMSWP+T+AMDEM < L'ADRESSE OCTET DE L'ESPACE
< ALLOUE EST A PLACER DIRECTEMENT
< DANS LA DEMANDE DE SWAPPING.
XXALME:: VAL W < NOMBRE DE BLOCS NECESSAIRES !??!?!?
WORD XXALME < DEMANDE D'1 SEUL BLOC DE 1K,
< 2K OU 4K.
DZS LDEM0+DEMMEM-$
<
<
< D E M A N D E D E S C H E D U L I N G :
<
<
DEMSCH: BYTE NSPSCH;XDSYM < BLOC DE DEMANDE DE REACTIVATION
< AU SCHEDULER.
DZS LDEM0+DEMSCH-$
<
<
< I N D I C A T E U R S ( S U I T E ) :
<
<
XWOR%1: VAL ARGDEM-NSPTYP+OPDEM
IDDESC: EQU DEMSCH+XWOR%1 < DEFINITION D'UN MOT DEVANT CONTENIR
< DIVERS INDICATEURS, ET IMPLEMENTE
< DANS L'OPDEM DE 'DEMSCH'.
IDESCJ:: VAL WAITB < BIT PERMETTANT DE COMMUTER LES DEMANDES
< "!CDAI" SUR "!CDAJ" ; CECI A ETE INTRO-
< DUIT AFIN DE PERMETTRE A DES NOMBREUX
< PROGRAMMES MANIPULANT EXPLICITEMENT LA
< 'CDAI' DE TRAVAILLER EN AVEUGLE (ET SANS
< QU'ILS LE SACHENT) DANS LA 'CDAJ+...' :
< =0 : "!CDAI" ==> ACCES A LA 'CDAI',
< =1 : "!CDAI" ==> ACCES A LA 'CDAJ+...'.
XWOR%2: VAL XMDSLO=K
XWOR%3: VAL NBITMO-XWOR%2 < ON INSTALLE LES INDICATEURS 'IDESC'
< DERRIERE LE CHAMP 'XMDSLO', CAR EN
< EFFET CELUI-CI EST CLEARE ET VALIDE PAR
< 'CHAND' ET 'HANDLR'...
IDESC1:: VAL XWOR%3 < INDICATEUR DE DISCRIMINATION DU
< DEBUG TRANSLATABLE (K) ET DU
< DEBUG ABSOLU (1).
IDESC2:: VAL IDESC1+BIT < INDICATEUR MEMORISANT QUE L'ON
< EST SOUS ":SYS", ET N'ETANT UTILISE
< QUE PAR LA COMMANDE SPECIALE !L DE
< CHANGEMENT ON-LINE DES NUMEROS DE
< COMPTE :
< 0 : ON NE S'EST PAS LOGUE SOUS ":SYS",
< 1 : ON S'EST LOGUE SOUS ":SYS", SANS Y
< ETRE PEUT-ETRE A L'HEURE ACTUELLE...
IDESC3:: VAL IDESC2+BIT < BIT UTILISE LORSQUE LES UTILISATEURS
< INTERROMPUS PAR L'HORLOGE (ET DONC
< EN COURS DE "PROCESS") SONT ENVOYES EN
< MEMOIRE HAUTE,
< 1 : ALORS QU'IL EST EN HAUT, L'UTILISA-
< EST DE NOUVEAU INTERROMPU PAR L'HOR-
< LOGE, IL VA RESTER EN HAUT...
< 0 : ALORS QU'IL EST EN HAUT L'UTILISATEUR
< FAIT UN 'SVC', UN 'QUIT', UNE TRAPPE.
IDESC4:: VAL IDESC3+BIT < CE BIT N'A D'INTERET QUE LORSQUE LE
< SYSTEME EST DANS LE MODE RALENTI,
< C'EST-A-DIRE 'NITERS' SUPERIEUR A 1.
< IL EST A MIS A 0 A L'ENTREE DE 'HDLSVC',
< PUIS MIS A 1 LORS DU PREMIER 'STXES'
< QUI SUIT...
IDESC5:: VAL IDESC4+BIT < BIT PERMETTANT DE SAVOIR SI LA COMMANDE
< "!CDAG" A ETE UTILISEE ; IL VAUT :
< 0 : POUR "!CDA", "!CDAP" ET "!CDAI",
< AINSI QU'AU LOGIN...
< 1 : APRES "!CDAG" ; IL EST UTILISE CON-
< JOINTEMENT AVEC LE MOT 'ACDAG' DE LA
< 'DCTSCH' QUI PERMET DE SAVOIR SI UN
< UTILISATEUR A FRAPPE "!CDAG"...
IDESC6:: VAL IDESC5+BIT < BIT PERMETTANT D'INTRODUIRE 2 CLASSES
< DE PRIORITE ENTRE UTILISATEURS :
< 0 : PRIORITE NORMALE (ETAT INITIAL),
< 1 : PRIORITE INFERIEURE (DANS CE CAS,
< L'HORLOGE DE SWAPPING EST INITIALI-
< SEE SYSTEMATIQUEMENT A 1, ET CET
< UTILISATEUR PEUT ETRE INTERROMPU
< S'IL EST ACTIF A LA FIN DU SERVICE
< D'UN AUTRE UTILISATEUR).
< VOIR A CE SUJET "!L0" ET "!L1"...)
IDESC7:: VAL IDESC6+BIT < BIT PERMETTANT DE DISCRIMINER LES 2
< ACTIONS POSIBLES QUE 'DOWN' PEUT EXECU-
< TER POUR LE COMPTE DE 'HDLSVC', PUIS CE
< QUE 'RUNO' DOIT FAIRE :
< 0 : 'DOWN' DOIT DESCENDRE L'ESCLAVE EN
< MEMOIRE BASSE, ET 'RUNO' RENDRE LA
< MAIN...
< 1 : 'DOWN' DOIT LAISSER L'ESCLAVE EN
< MEMOIRE HAUTE (SANS ITERATION DU
< 'SVC'/'QUIT'), ET 'RUNO' FAIRE UN
< 'SERESC' POUR EXECUTER LE SERVICE EN
< MEMOIRE HAUTE, ET ENFIN LE RE-SCHE-
< DULER EN HAUT...
IDESC8:: VAL IDESC7+BIT < INDICATEUR PRECISANT SI L'UTILISATEUR
< A FAIT UNE DEMANDE D'INITIALISATION OU
< DE MONTAGE DE VOLUME :
< 0 : PAS DE MONTAGE DE VOLUME,
< 1 : CET UTILISATEUR A UNE VOLUME MONTE
< SUR LE DISQUE 'DKU' QU'IL S'EST DONC
< ASSIGNE.
IDESC9:: VAL IDESC8+BIT < INDICATEUR PRECISANT SI L'ECHO EST
< DEMANDE SUR UN TERMINAL TEMPS PARTAGE :
< 0 : NON (ETAT INITIAL),
< 1 : OUI (VOIR LES COMMANDES "!ECHO").
<*******************************************************************************
IDESCX:: VAL IDESC9+BIT < INDICATEUR PERMETTANT DE SAVOIR SI UNE
< TRAPPE EST EN COURS DE TRAITEMENT :
< 0 : NON (ETAT INITIAL ET NORMAL),
< 1 : OUI ; IL REPASSE A 1 APRES CHAQUE
< INTERROGATION 'CCI' (JUSTE AVANT
< LA DEMANDE DE LECTURE SUR 'NSPIN'.
IF '0@@@@-NBITMO,XEIF%,,
<*******************************************************************************
IF ATTENTION : TROP D'INDICATEURS ONT ETE
IF DEFINIS DANS 'IDDESC' !!!
XEIF%: VAL ENDIF
XWOR%1: VAL ARGDEM-NSPTYP+CODEM
HORESC: EQU DEMSCH+XWOR%1 < "HORLOGE" DE SWAPPING ESCLAVE :
< CONTIENT UNE VALEUR NUMERIQUE INI-
< TIALISEE A CHAQUE 'SWAPPING IN' EFFEC-
< TIF ; AVANT CHAQUE 'SWAPPING OUT', ELLE
< EST DECREMENTEE : TANT QU'ELLE RESTE
< STRICTEMENT POSITIVE, ON NE TESTE PAS
< LA NECESSITE DE FAIRE DU SWAPPING...
<
<
< G E S T I O N D E L A C D A :
<
<
XWOR%1: VAL ARGDEM-NSPTYP+AMDEM
CDESCO: EQU DEMSCH+XWOR%1 < ADRESSE DE DEBUT DE LA 'CDA' : IL PEUT
< S'AGIR SOIT DE LA 'CDA-COMMUNE', SOIT
< DE LA 'CDA-PRIVEE', SOIT ENFIN DE LA
< 'CDA-TELEVISION'...
XWOR%1: VAL ARGDEM-NSPTYP+ASDEM
CDESCE: EQU DEMSCH+XWOR%1 < ADRESSE DE FIN DE LA 'CDA'...
<
<
< D E M A N D E D E S E R V I C E U T I L I S A T E U R :
<
<
DEMESC: DZS LDEM0B < BLOC RECEVANT LES DEMANDES
< DE L'ESCLAVE AU SYSTEME.
< APRES TRADUCTION DANS LA
< FORME COMPATIBLE AVEC CHAND.
BOXESC: EQU DEMESC+XBOX < LA DEMANDE DEMESC CONTIENT
< LE MOT FACULTATIF 'BOX' ; CELUI-
< CI EST POSITIONNE PAR 'STBOX'
< DANS HDLVIS, HDLLON/LNU/LNS/STN/
< DLN, ET PEUT ETRE RECUPEREE
< PAR LA FONCTION '1E35 DU
< RECOVERY...
<
<
< T R A N S F E R T D E V A L E U R S :
<
<
XWOR%1: VAL ARGDEM-NSPTYP+ASDEM
XWOR%2: VAL DEMSER-DCTESC+XWOR%1
VALESC:: MOT XWOR%2 < 'VALESC' EST UTILISE PAR LE 'CCI' POUR
< TRANSMETTRE UNE VALEUR D'UN MODULE A
< UN AUTRE, PAR EXEMPLE PAR DESSUS UNE
< SUSPENSION DU 'CCI'...
<
<
< S Y S T E M E D ' A S S I G N A T I O N :
<
<
LTASGN:: VAL 6 < LONGUEUR DE TASSGN.
<*******************************************************************************
TASSGN: WORD YASSGN,X < RELAI INDIRECT INDEXE VERS L A
< TABLE D'OCTETS DES ASSIGNATIONS
< DE L'ESCLAVE : NVP-->NSP.
TASSGN: @MOT '0@@@@ < ACCES AU RELAI DE LA LISTE DES ASSIGNS.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
<*******************************************************************************
YASSGN: EQU $
YASSGN: @MOT '0@@@@ < LISTE DES ASSIGNATIONS DANS 'DCTESC'.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
DZS LTASGN < CETTE TABLE PEUT CONTENIR
< '2*LTASGN' NSP. A NOTER QUE LE
< 1ER OCTET EST TOUJOURS NUL
< (CF. NVP=K DANS RUNSVC).
< CHAQUE ENTREE ASSIGNEE CONTIENT
< UN NSP, SAUF DANS LE CAS DES
< !ASSIGN =I/O, POUR LES
< QUELLES, ON TROUVE PHIN/
< PHOUT RESPECTIVEMENT.
XNVPF:: VAL '80 < INDICATEUR SUPPERPOSE AUX 'NSP'
< LORSQU'IL S'AGIT DE FICHIER.
IF XNVPF)MOCD-NSPDUM+N,,XEIF%,
IF ATTENTION : ON RISQUE D'AVOIR DES SURPRISES !!!
XEIF%: VAL ENDIF
PHSER:: VAL K < ENTREE DE SERVICE DANS TASSGN.
PHIN:: VAL PHSER+I < NSP PERIPH IN DE L'ESCLAVE.
PHOUT:: VAL PHIN+I < NSP PERIPH OUT DE L'ESCLAVE.
<*******************************************************************************
XWOR%F: VAL NOCMO*LTASGN-Z
NVP: @VAL '0@@@@ < DERNIER 'NVP' ASSIGNABLE.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL NOCMO*LTASGN-Z
NVPMAX: @VAL '0@@@@ < DERNIER 'NVP' ASSIGNABLE.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
<
<
< I N F O R M A T I O N S D I V E R S E S :
<
<
XXCOMP:: VAL D+D < LONGUEUR DE LA COMPTABILITE.
COMPTA: DZS 2 < COMPTABILITE DE L'ESCLAVE :
< - COMPTA0=NBRE DE SVC EXECUTES
< ENTRE LOGIN ET LOGOUT,
< - COMPTA1=NBRE DE DEMANDES
< DE SCHEDULER ENTRE
< LOGIN ET LOGOUT.
COMPT0: EQU COMPTA+O
COMPT1: EQU COMPTA+XXCOMP-Z
SETRUN: WORD K < LES BITS 5,6,7 SONT UTILISES
< EN PARALLELE DE CEUX DE SYNCUS,
< POUR MEMORISER LES 'TEST & SET'
< AU NIVEAU ESCLAVE.
RECOTO: WORD NILK < INDEX COURANT DE LA GRAMMAIRE
< DU CCI ; SI RECOTO=Q8000, C'EST
< QU'UN LOG-OUT EST DEMANDE.
SRCOTO: WORD K < SAUVEGARDE TEMPORAIRE DE
< L'INDEX COURANT DE LA GRAMMAIRE
< DU CCI LORS DE L'APPEL DE
< SOUS-GRAMMAIRE.
< SI SRCOTO='VALBAC', IL N'Y A PAS
< D'APPEL DE SOUS-GRAMMAIRE
< EN COURS.
YSER: WORD NILK < MOT PERMETTANT DE TRANSMETTRE
< LE REGISTRE Y(HDL-SERVICE) ENTRE
< 2 ROUTINES DU CCI, MEME S'IL
< Y A CHANGEMENT DE NIVEAU DE
< SERVICE EN CAS DE SUSPENSION
< DU CCI (CF. LORS DU DEBUG).
XXACN:: VAL D+D < NOMBRE DE MOTS OCCUPES PAR LES .
U:: VAL XXACN-Z < POUR ATTEINDRE LE DEUXIEME MOT .
IF XXACN-2,,XEIF%,
IF ATTENTION : 'XXACN' DOIT OBLIGATOIREMENT VALOIR 2 !!!
XEIF%: VAL ENDIF
ACNESC: DZS XXACN < NUMERO DE COMPTE DE L'ESCLAVE.
ARGUM: WORD NILK < MOT DE CONTENU VARIABLE; ASSURE
< ENTRE AUTRE :
< - LA TRANSMISSION DE LA LISTE DES
< OCTETS DE ZDC A MODIFIER (VOIR
< LA ROUTINE 'SERESC').
<
<
< B U F F E R R E S I D E N T :
<
<
LDCTES:: VAL YY7 < LONGUEUR D'UNE DCT-ESCALVE.
BUFESC: EQU $
<*******************************************************************************
LBUFES:: VAL DCTESC-BUFESC+LDCTES
LBUFES: @VAL '0@@@@ < LONGUEUR-MOTS DU BUFFER RESIDENT.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
DZS LBUFES < BUFFER DE TRANSIT DE L'ESCLAVE.
IF LDCTES-YY7,,XEIF%,
IF ATTENTION : PLEIN DE CHOSES VONT MERDER !!!
XEIF%: VAL ENDIF
<
<
< L O N G U E U R M A X I M A L E D E S
< M E S S A G E S A U ' C C I ' :
<
<
<*******************************************************************************
LCCI:: VAL KOLON < PAR COMPATIBILITE VISU/CR.
LCCI: @VAL '0@@@@ < LONGUEUR MAXIAMLE DES MESSAGES AU 'CCI'.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
<
<
< A C C E S A U ' C C I ' I N T E R P R E T A T I F :
<
<
LCCINT:: VAL LBUFES*NOCMO < LONGUEUR MAXIMALE DES "CARTES" ENVOYEES
< AU 'CCI' INTERPRETATIF.
PAGE
<
<
< N O M B R E R E E L D ' E S C L A V E S :
<
<
NESCLB:: VAL W < NOMBRE D'UTILISATEURS EN BATCH...
<*******************************************************************************
RESCLA:: VAL NSPVIN-NSPVI0+Z+NESCLB
< RESCLA=NBRE REEL D'ESCLAVES...
< SOIT :
< NSPVIN-NSPVI1+Z POUR LES VISUS,
< +NESCLB POUR LE BATCH (CR1,LP1).
NESCLA: @VAL '0@@@@ < NOMBRE MAXIMAL D'UTILISATEURS.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
PAGE
<
<
< F O R M A T D E S D E M A N D E S
< F O R M U L E E S P A R L E S E S C L A V E S :
< ( A L ' A I D E D E S ' S V C ' )
<
<
< DEFINITION :
< ON VA DEFINIR ICI LE
< FORMAT DES DEMANDES DE
< SERVICE QUE L'UTILISA-
< TEUR ENVOIE AU SYSTEME
< A L'AIDE DE 'SVC' AFIN
< D'EXECUTER UNE CERTAINE
< FONCTION (PAR EXEMPLE
< D'ENTREES-SORTIES,...).
<
<
DSEC FDESC
DEMES0: EQU $
<
< D E S T I N A T A I R E E T F O N C T I O N :
<
NVPFON: BYTE NILK;NILK < BIT4-7=NVP,
< BIT0=K : LE NVP REFERENCE A FAIT
< L'OBJET D'UN !ASSIGN
< EXPLICITE,
< =1 : LE NVP REFERENCE FAIT
< PARTIE DES NVP ASSIGNES
< EXPLICITEMENT PAR LE
< SYSTEME (VOIR EN
< PARTICULIER LE 'SGN'
< DANS HDLSVC).
< BIT12-15=FONCTION DEMANDEE.
XASSIM:: VAL BITSIG < BIT DE DISCRIMINATION DES ASSIGNS
< IMPLICITES (1)/EXPLICITES (K).
MASSIM:: VAL '0F00 < MASQUE DE DEFINITION DU 'NVP'.
MASSFO:: VAL MKOPDM < MASQUE DE DEFINITION DE LA FONCTION.
XWOR%1: VAL MASSFO=K
XWOR%1: VAL -XWOR%1
XWOR%1: VAL MASSFO>XWOR%1
IF XWOR%1-XLDCTF,XEIF%,,
IF ATTENTION : 'DCTFON' N'EST PAS ASSEZ LONG !!!
XEIF%: VAL ENDIF
XWOR%2: VAL MKOPDM=K
XWOR%2: VAL -XWOR%2
XWOR%2: VAL MKOPDM>XWOR%2
IF XWOR%1-XWOR%2,,XEIF%,
IF ATTENTION : 'MKOPDM' ET 'MASSFO' SONT INCOMPATIBLES !!!
XEIF%: VAL ENDIF
MASSFF:: VAL '0007 < IDEM POUR LA FONCTION RESTREINTE...
< (VOIR 'HDLSVC')
IF FONTV(MASSFF-FGX,XEIF%,,
IF ATTENTION : 'FONTV' DOIT ETRE UNE FONCTION
IF D'E/S EFFECTIVE SOUS PEINE D'AVOIR DES
IF ENNUIS AVEC 'HDLSVC' (VOIR LA TRANSLATION
IF DES ADRESSES...) !!!
XEIF%: VAL ENDIF
<
< A R G U M E N T S :
<
AMESC: WORD NIL < @OCTET SI E/S EFFECTIVE.
COESC: WORD NILK < COMPTE D'OCTETS SI E/S EFFECTIVE.
ARGESC: WORD NILK < VALEUR FACULTATIVE A TRANSMETTRE
< EVENTUELLEMENT A UN HANDLER PAR
< L'INTERMEDIAIARE DE ASDEM DE
< DEMESC.
LFDESC:: VAL $-NVPFON < LONGUEUR EN MOTS DE LA DEMANDE ARGUMENT
< D'UN ESCLAVE LORS D'UN 'SVC', OU D'UN
< 'QUIT' ASSIMILE.
<
< Z O N E D E P A T C H :
<
PFDESC:: VAL 10 < LONGUEUR DE LA ZONE DE PATCH...
DZS PFDESC < POUR EXTENSION...
PAGE
<
<
< S E M A P H O R E S C O M M U N S :
<
<
< FONCTION :
< ON VA TROUVER ICI UN CERTAIN
< NOMBRE DE SEMAPHORES PERMET-
< TANT L'EXCLUSION DE CERTAINES
< PHASES CRITIQUES, AINSI QUE LA
< PROTECTION ET L'ALLOCATION DE
< CERTAINES RESSOURCES ('ID',...).
<
<
TABLE
SEXSER: WORD SPHEX0 < SEMAPHORE D'EXCLUSION DES
< PHASES CRITIQUES LORS DE
< 6HALLOCATION DES HANDLERS DE
< SERVICE.
< (NOTA : SERT AUSSI, LORS DE
< L'OCCUPATION DES ESCLAVES).
DZS LSEM
SEMMEM: WORD XXSEM0 < SEMAPHORE DE BLOCAGE DES ALLOCATEURS
< EN ATTENTE DE RELEASE.
DZS LSEM
SEXAR: WORD SPHEX0 < SEMAPHORE GENERAL ET COMMUN
< D'EXCLUSION DE PHASES CRITIQUES
< ENTRE LES ALOOCATEURS/RELEASEURS
< DE MEMOIRE.
DZS LSEM
CSPHEX: WORD SPHEX0 < SEMAPHORE D'EXCLUSION DES PHASES
< CRITIQUES ENTRE L'ALLOCATEUR
< ET LE RELEASEUR D'ESPACE-DISQUE.
DZS LSEM
SAST: WORD XXSEM0 < SEMAPHORE D'ATTENTE D'UN FICHIER
< D'ETAT DONNE.
DZS LSEM
SEXSGF: WORD SPHEX0 < SEMAPHORE D'EXCLUSION DES
< PHASES CRITIQUES DE LA GESTION
< DE FICHIER.
DZS LSEM
SDCTF: WORD NDCTF < SEMAPHORE D'ACCES AUX DCTF.
DZS LSEM
SAESC: WORD NESCLA < SEMAPHORE D'ALLOCATION DES
< IDENTIFICATEURS D'ESCLAVES.
DZS LSEM
SIDESC: WORD SPHEX0 < SEMAPHORE D'EXCLUSION DES PHASES
< CRITIQUES LORS DE L'ALLOCATION
< /RELEASE DES ID ESCLAVES.
DZS LSEM
SDODO: WORD XXSEM0 < SEMAPHORE DE MISE EN SOMMEIL
< DE HANDLERS POUR UNE DUREE
< EXPRIMEE EN SECONDES.
DZS LSEM
SEMCDA: WORD XXSEM0 < SEMAPHORE D'ATTENTE DE SYNCHRONISATION
< SUR 'CDAG0'.
DZS LSEM
NMDE:: VAL NDCTF < NBRE MAX DE DESCRIPTEURS
< D'ENREGISTREMENT.
SEMDE: WORD NMDE < SEMAPHORE D'ACCES AUX DESCRIPTEURS.
DZS LSEM
SMATX: WORD SPHEX0 < EXCLUSION DES PHASES CRITIQUES
< SUR LA ZONE DE DONNEES COMMU-
< NES INTER-ESCLAVES ZDC, AINSI QUE
< SUR LA MATRICE DES CONNEXIONS.
< (ON UTILISE LE MEME SEMAPHORE
< POUR MATX ET ZDC POUR DE SIMPLES
< RAISONS D'ECONOMIE...)
DZS LSEM
SEMSO: WORD SPHEX0 < EXCLUSION DES PHASES CRITIQUES
< ENTRE L'HORLOGE ET LE SWAPPER
< LORS DU TRAVAIL SUR LA LISTE
< CYCLIQUE DES ESCLAVES A
< SWAPPER A PRIORI.
DZS LSEM
PAGE
<
<
< C O M M O N :
<
<
COMMON
COM: EQU $
<
< A T T E N T I O N :
< POUR REDUIRE LA DEPENDENCE DE
< CERTAINS PROCESSEURS VIS A VIS DE
< CERTAINES CONSTANTES DEPENDANTES
< DE L'IMPLANTATION DE CMS4, LE
< RELAI CADCT DOIT ETRE LE 1ER MOT
< DU COMMON, AFIN DE NE PAS BOUGER
< (EN TANT QUE DEPLACEMENT PAR RAPPORT
< A C), LORS DES PATCHES DU COMMON !!!
<
ACADCT: WORD CADCT < MISE DE L'ADRESSE D'UNE 'DCT' DANS 'L'.
< L<--@DCT(X)
IF ACADCT-COM,,XEIF%,
IF ATTENTION : ON RISQUE DE GROS ENNUIS DANS CERTAINS
IF PROGRAMMES UTILISATEURS !!!
XEIF%: VAL ENDIF
<*******************************************************************************
XWOR%F: VAL ACADCT-COM-DEPCS
ACADCT: @VAL '0@@@@ < DEPLACEMENT RELATIF A 'C' DE 'CADCT'.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
<
<
< A C C E S A ' N S ' :
<
<
NS: WORD XXNS < RELAI D'ACCES A 'NS',
ANS: EQU NS < POUR EVITER DES ERREURS...
<
<
< T R A C E D U S Y S T E M E :
<
<
UTRACE:: VAL D+D < NOMBRE DE MOTS PAR ENTREE DE TRACE.
LTRACE:: VAL YY7/UTRACE < NOMBRE D'ENTREES DE LA TRACE...
XWOR%1: VAL LTRACE=K
IF BIT>XWOR%1-LTRACE,,XEIF%,
IF ATTENTION : 'LTRACE' DOIT ETRE UNE PUISSANCE DE 2 !!!
XEIF%: VAL ENDIF
XTRON:: VAL K < INDICATEUR DE TRACE ACTIVE...
TRACEX: WORD K < INDEX DOUBLE-MOTS DE LA TRACE.
TRACE: WORD TTRACE,X < RELAI DE LA TRACE.
SAVEX: WORD XTRON < INDICATEUR D'INHIBITION DE LA TRACE :
< BIT0=K : TRACE,
< BIT0=1 : TRACE INHIBEE.
XBTROF:: VAL BITSIG < BIT D'INHIBITION DE LA TRACE...
IF XBTROF-BITSIG,,XEIF%,
IF ATTENTION : LES TEST D'INHIBITION VONT MERDER...
XEIF%: VAL ENDIF
XTROFF:: VAL COSBT?XBTROF=FMASK(K?XTRON=FCINST
< VALEUR DE 'SAVEX' LORSQUE LA TRACE EST
< INHIBEE...
IF XTRON-K,,XEIF%,XEIF%
IF ATTENTION : ON NE PEUT DISTINGUER L'ETAT DE
IF TRACE INHIBEE DE CELUI OU ELLE EST AUTORISEE
IF PAR LES TESTS 'CPZ' !!!
XEIF%: VAL ENDIF
<
<
< C O N S T A N T E S :
<
<
XXRINI:: VAL -1 < VALEUR DE 'RINI' AVANT INITIALISATION.
IF XXRINI+I,,XEIF%,
IF ATTENTION : LES TESTS SUR 'RINI' NE MARCHERONT PAS !!!
XEIF%: VAL ENDIF
RINI: WORD XXRINI < INDICATEUR D'INITIALISATION
< DU SYSTEME :
< RINI=-1 : INIT PAS ENCORE FAITE,
< RINI=K : INIT FAITE, MAIS DATE
< NON CONVERTIE EN ASCI,
< RINI=1 : OK.
ASCHED: WORD WSCHED < RELAI MEMOIRE DU MICRO-SCHEDULER.
HINSP:: VAL NSPNP1 < PREMIER NSP NON PRIORITAIRE (CF.
< SVC-ESCLAVE POUR PLUS D'INFO.).
HORIDC: WORD K < PATTERN CYCLIQUE DE SWAPPING
< OUT ; LE BIT DE RANG (X) EST
< ASSOCIE A L'ESCLAVE D'ID (X).
< ELLE EST UTILISEE PAR LE SWAPPING
< OUT POUR FAIRE DU SWAPPING OUT
< APRIORI ; QUAND LE BIT DE RANG
< (X) EST A 1, ON SWAPPE OUT
< L'ESCLAVE D'ID (X) MEME SI
< TOUS LES CRITERES DE SWAPPING
< OUT NE SONT PAS REMPLIS.
SOCYCL: WORD K < LISTE CYCLIQUE DES ESCLAVES A
< SWAPPER OUT A PRIORI ; LE BIT
< DE RANG X, EST ASSOCIE A
< L'ESCLAVE D'IDESC (X).
XWOR%7: VAL 256
DMES: WORD XWOR%7 < SEUIL DES DUREES D'ECRITURE.
< (AU-DELA DUQUEL IL FAUT
< SWAPPER OUT).
NUSERA: WORD K < NOMBRE D'ESCLAVES ACTIFS,
< C'EST-A-DIRE SE TROUVANT ENTRE
< LA COMMANDE '!LOGIN' ET UNE
< DES COMMANDES '!BYE'/'!F',
< ET N'AYANY PAS FRAPPE LA
< COMMANDE '!W'.
ARUN: WORD NIL < MOT CONTENANT L'@DCT-ESCLAVE
< A FAIRE RUNNER.
BHRUN: WORD K < PERMET D'EVITER QUE L'HORLOGE
< N'INTERROMPE UN ESCLAVE QUE
< LE RUNNER VIENT JUSTE D'ACTIVER ;
< BHRUN=IBHRUN : LE RUNER VIENT D'
< ACTIVER L'ESCLAVE, ET
< PAS ENCORE D'IT HORLOGE.
< L'HORLOGE DECREMENTE BHRUN,
< ET N'INTERROMPT UN ESCLAVE QUE
< SI BHRUN<0 (=-1).
XBHRUN:: VAL BIT < VALEUR D'INITIALISATION DE 'IBHRUN' ;
< ON PREND 'BIT' CAR UNE OPERATION LOGI-
< QUE EST FAITE DESSUS, MAIS 'I' SERAIT
< BON AUSSI...
IBHRUN: WORD XBHRUN < VALEUR INITIALE DE 'BHRUN' ;
< CETTE VALEUR EST MISE A JOUR A
< CHAQUE FOIS QUE 'NUSERA' EST
< MODIFIE ; IBHRUN VAUT 0
< LORSQU'IL Y A 2 UTILISATEURS
< OU PLUS DANS LE SYSTEME ; ELLE
< VAUT 1 SINON (NUSERA=K,1).
SYNCUS: WORD K < LES BITS 5,6,7 SONT UTILISES
< PAR L'INTERMEDIAIRE DU RECOVERY
< POUR PERMETTRE LES SYNCHRO-
< NISATIONS INTER-UTILISATEURS
< PAR DES PRIMITIVES DU TYPE
< 'TEST & SET' ET 'RESET'.
MOT0: WORD CMOT0 < INSTRUCTION A IMPLANTER EN MOT0
< DE L'ESPACE MEMOIRE UTILISATEUR
< LORS DES INITIALISATIONS, DES
< TRAPPES, DES ALT-MODE ; ON A :
< BIT0=K : GENERATION D'UN SVC,
< BIT0=1 : GENERATION D'UN QUIT.
HTIME: DZS 2 < HEURE COURANTE DANS LE JOUR,
< EXPRIMEE EN SECONDES.
HTIMED: EQU HTIME+D
DIX: WORD BASE10 < POUR DIVISION PAR 10.
<*******************************************************************************
INFINI: WORD Q8000
XWOR%1: VAL '0000000@@@@ < RECUPERATION DE LA VALEUR DE L'INFINI.
<*******************************************************************************
IF XWOR%1-Q8000,,XEIF%,
IF A T T E N T I O N : ON DOIT AVOIR
IF BIT0(INFINI)=1, BIT1(INFINI)=...=BIT15(INFINI)=K !!!
XEIF%: VAL ENDIF
CCBIPI: EQU INFINI < 'CCB' SPECIAL UTILISE POUR LES APPELS
< INTER-PROCESSEURS 'CF. 'HDLPR1').
IF COSBT?BCCBIP=FMASK(K=FCINST-XWOR%1,,XEIF%,
IF ATTENTION : LA VALEUR DE 'CCBIPI' EST INCOMPATIBLE
IF AVEC SA FONCTION !!!
XEIF%: VAL ENDIF
SMASK0:: VAL 0
SMASK: WORD SMASK0 < INDICATEUR DE L'ETAT DE MSAQUAGE DU
< PROCESSEUR ; UNE VALEUR STRICTEMENT
< POSITIVE DONNE LE NOMBRE DE MASQUAGES
< IMBRIQUES.
DEFOK0:: VAL I+I < VALEUR NORMALE DE 'DEFOK' A L'INITIALI-
< SATION, OU APRES UN "BON DEFAUT SECTEUR".
DEFOK: WORD DEFOK0 < NUL EN PERMANENCE, N'EST MIS A QUE
< SI UN DEFAUT SECTEUR A ETE PRIS
< EN COMPTE ET ENTIEREMENT TRAITE.
SAVHV: WORD NILK < DESTINE A LA SAUVEGARDE DU REGISTRE
< 'HV' LORS D'UN DEFAUT SECTEUR.
< DE PLUS CONTIENT MAINTENANT EN PERMA-
< NENCE LE REGISTRE 'HV' ; MAIS N'ETANT
< PAS RAZE (CAR IL FAUDRAIT POUR CELA
< UNE TACHE DE PRIORITE INTERMEDIARE
< ENTRE TH15 ET TS0) CETTE VALEUR N'A
< DE SENS QUE SI LE MOT QUI SUIT (COMPTH)
< N'EST PAS A 0...
COMPTH: WORD K < SI JE NE ME TROMPE PAS, CETTE VARIABLE
< EST BOOLEENNE :
< =0 : PAS D'INTERRUPTIONS EN TRAITEMENT,
< =1 : UNE OU PLUSIEURS INTERRUPTIONS
< SONT EN TRAITEMENT, ET UNE SEULE
< (BIEN ENTENDU) A MASQUE LES
< INTERRUPTIONS...
TYPDEF: WORD -TYPTS-TYPTH < DONNE LE TYPE DE LA TACHE AYANT
< DETECTE UN DEFAUT SECTEUR PAR 'TDEFS'.
IDEDEF: WORD -NMTS-NMTH < DONNE L'IDENTITE DE LA TACHE AYANT
< DETECTE UN DEFAUT SECTEUR PAR 'TDEFS'.
MKDEF: WORD NILK < ZONE DE SAUVEGARDE DE 'SMASK' DANS
< LE PROGRAMME 'TDEFS'.
ALADEF: WORD NILK < PERMET LA SAUVEGARDE DE LA NATURE D'UNE
< ALARME, LORSQUE 'TDEFS' DETECTE UN
< DEFAUT SECTEUR DANS 'TH0'.
ICNUM: WORD NILK < MEMORISATION D'UN 'IC' DANS 'TDEFS'.
KTDEFS: WORD -I < VALEUR INITIALE DES AUTORISATIONS
< D'APPEL DE 'TDEFS'.
LIC: WORD LONGIC < LONGUEUR D'UN 'IC'.
<
<
< C O N F I G U R A T I O N D U S Y S T E M E :
<
<
< INDICATEURS DE CONTROLE DU SYSTEME :
<
TVEXIS:: VAL L < =1 : LE SYSTEME DE TELEVISION NUME-
< RIQUE EST PRESENT,
< BIT NSPDKF-NSPDK : 'DKF' PRESENT (1),
< BIT NSPDKU-NSPDK : 'DKU' PRESENT (1),
< BIT NSPDKM-NSPDK=1 TOUJOURS (DKM PRESENT)
IF NSPDKU-NSPDK-Z,,XEIF%,
IF ATTENTION : LE FORMAT D'ETASYS EST MAUVAIS !!!
XEIF%: VAL ENDIF
IF NSPDKM-NSPDK-2,,XEIF%,
IF ATTENTION : LE FORMAT D'ETASYS EST MAUVAIS !!!
XEIF%: VAL ENDIF
IF NSPDKF-NSPDK-3,,XEIF%,
IF ATTENTION : LE FORMAT D'ETASYS EST MAUVAIS !!!
XEIF%: VAL ENDIF
BRCDKF:: VAL NSPDKF-NSPDK+BIT < 1 : 'DKF' GARDERA LE JEU DE REGISTRES
< 'HDC' QU'IL SE SERA ALLOUE TANT QUE CE
< BIT RESTE A 1.
RECON:: VAL BRCDKF+BIT < CE BIT CONTROLE LE BLOCAGE DE 'TH0'
< SUR UNE 'SYSER' :
< 0 : 'TH0' SE BLOQUERA NORMALEMENT, ET
< LE DEBLOCAGE SE FERA AU PUPITRE
< EN MODIFIANT LE REGISTRE 'P',
< 1 : 'TH0' SE BLOQUERA SUR LECTURE DES
< CLEFS DU PUPITRE, ET FAIRE 'CLEAR'
< PUIS 'MEM' LA DEBLOQUERA...
< (MODE IMPLICITE)
QSHS:: VAL RECON+BIT < CE BIT CONTROLE L'USAGE QU'IL DOIT ETRE
< FAIT DES Q-SECTEURS EN MAUVAIS ETAT
< LORS DE LEUR RELEASE :
< 0 : ON LES REND, ILS SONT DONC RE-
< UTILISABLES,
< 1 : ON NE LES REND PAS, ON NE LES
< RE-UTILISERA PLUS !!!
BTRYDK:: VAL QSHS+BIT < 0 : FAIRE UNE 'SYSER' SUR TROP D'ERREURS
< SUR 'DKF' ET 'DKM' APRES TOUTES LES
< TENTATIVES D'USAGE...
< 1 : APRES TOUTES LES TENTATIVES, ON NE
< FERA PAS DE 'SYSER', ET ON RENVERRA
< UN CODE DE RETOUR OK (K).
OTODLN:: VAL BTRYDK+BIT < CE BIT CONTROLE LES ACTIONS
< DE 'HDLDLN' :
< =1 : LE DELETE D'UN NOM DE FICHIER
< EXISTANT EST AUTORISE,
< =0 : LE DELETE D'UN NOM DE FICHIER
< EXISTANT N'EST PAS AUTORISE...
OTOCOP:: VAL OTODLN+BIT < CE BIT CONTROLE LA COPY DU SYSTEME ::
< =0 : LA COPY EST ON ; CE MODE DOIT
< ETRE LE MODE PERMANENT.
< =1 : LA COPY EST OFF ; CE MODE A
< UTILISER PRUDEMMENT PERMET PAR
< EXEMPLE DE REGENERER LE 'DKF' A
< PARTIR DU 'DKM', Y COMPRIS LA
< ZONE DE COPY...
OTOCFM:: VAL OTOCOP+BIT < CE BIT N'EST VALIDE QUE SI OTOCOP=K,
< ET CONTROLE ALORS LA COPY PERIODIQUE
< DU 'DKF' SUR LE 'DKM' :
< =0 : LA COPY DKF --> DKM EST ON,
< =1 : LA COPY DKM --> DKF EST OFF ;
< ON NOTERA QUE LE MODE "OFF" POURRA
< EST LE MODE COURANT, LE MODE "ON" ETANT
< UTILISE AUX HEURS CREUSES ; EN EFFET
< AVEC UN SYSTEME CHARGE, IL IMPLIQUERAIT
< DE NOMBREUX MOUVEMENTS DE BRAS DU 'DKM'.
MKCOP:: VAL '001C < DEFINITION D'UNE CONSTANTE PERMETTANT
< DE MODIFIER LA FREQUENCE DES COPIES
< DU SYSTEME (CETTE CONSTANTE PEUT ETRE
< MULTIPLIEE PAR 2 SUIVANT LA VALEUR
< DE LA CONSTANTE 'FXHOR') ; ENFIN
< CETTE CONSTANTE EST SIGNEE.
XWOR%1: VAL MKCOP=K-NBITMO+B
XETAIR:: VAL -XWOR%1+BIT < CONTROLE L'INITIALISATION DE LA RACINE,
XETAIA:: VAL XETAIR+BIT < CONTROLE LA REINITIALISATION DE L'ARBRE.
XWOR%1: VAL K
XWOR%1: VAL COIBT?TVEXIS=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL NSPDKU-NSPDK?COIBT=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL NSPDKM-NSPDK?COIBT=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL NSPDKF-NSPDK?COIBT=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COIBT?BRCDKF=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COIBT?RECON=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COIBT?QSHS=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COIBT?BTRYDK=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COIBT?OTODLN=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COIBT?OTOCOP=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COIBT?OTOCFM=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COIBT?XETAIR=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COIBT?XETAIA=FMASK(K?XWOR%1=FCINST
IF XWOR%1)MKCOP-MMOT,,XEIF%,
IF ATTENTION : LES DEFINITIONS SONT MAUVAISES !!!
XEIF%: VAL ENDIF
XWOR%1: VAL COSBT?RECON=FMASK(K=FCINST
XWOR%1: VAL XXRACK?TVEXIS=FMASK(K?XWOR%1=FCINST
ETASYS: WORD XWOR%1
< LISTE DE BITS DES INDICATEURS DE
< CONTROLE DU SYSTEME.
MEMV: BYTE K;K < OCTET0=SEUIL : LORS D'UN OPEN DE
< FICHIER, ON TESTE LA POSITION DU
< 'NVP' DEMANDE PAR RAPPORT A CE
< SEUIL; S'IL EST INFERIEUR, ON
< UTILISERA 'DKM' POUR CE FICHIER,
< SINON 'DKB'.
< OCTET1 : CONTIENT 2 BITS :
XWOR%1: VAL MOCG=K-NBITMO+B
MEMVO:: VAL -XWOR%1+BIT < 1 : OPTIMISER LES LECTURES DU 'SGF'
< EN MEMOIRE VIRTUELLE PAR ANTICIPA-
< TION DES CHARGEMENTS DES PAGES.
XXXJFC:: VAL MEMVO+BIT < 1 : APRES CHAQUE EFFACEMENT DE L'ECRAN
< D'UNE VISU, ON EDITERA LE MESSAGE
< 'JF. COLONNA...' !!! ON N'EST JAMAIS
< TROP PRUDENT (MERCI LES ARTISTES...).
< 0 : MODE NORMAL DU SYSTEME, CE MESSAGE
< NE SORT PAS...
XSYNC0:: VAL XXXJFC+BIT < 1 : MIS A 1 CE BIT INDIQUE QUE 'DKU', ET
< CELA UNIQUEMENT S'IL EXISTE, ET MIS
< MODE FORMATAGE (SYNCHRONISATION SUR
< LE SECTEUR 0).
MEMXXX:: VAL XSYNC0+BIT < 0 : TOUTES LES DIRECTIVES DANGEREUSES
< SONT INTERDITES QUELQUE SOIT LE
< NUMERO DE COMPTE ('1EC5, 'STAR', LE
< 'DEBUG ABSOLU, LE 'SVC-CONNEXION DES
< NSP AU NVP', L'ACCES DIRECT AU PU-
< PITRE POUR CHANGER 'MEMV',...)
< 1 : TOUT EST AUTORISE SOUS ":SYS"...
XBTOVI:: VAL MEMXXX+BIT < 0 : NE PAS UTILISER LE SYSTEME DE DETEC-
< TION DES DEMANDES BLOQUANTES SUR LES
< VISUS (VOIR 'TESTO'),
< 1 : L'UTILISER...
YBTOVI:: VAL XBTOVI+BIT < 0 : NE PAS METTRE EN PLACE DE TIME-OUT
< POUR 'SERESC' SUR LES VISUS DEMAN-
< DEES, LORSQUE CELLES-CI NE CORRES-
< PONDENT PAS A 'PHIN',
< 1 : METTRE CE TIME-OUT LORSQUE LA VISU
< DEMANDEE DIFFERE DE 'PHIN'...
MEMVN:: VAL YBTOVI+BIT < 1 : APPLIQUER DKB AU SGN, SINON DKM.
MEMVF:: VAL MEMVN+BIT < 1 : APPLIQUER DKB AU SGF, SINON DKM.
<
<
< C O N S T A N T E M A G I Q U E :
<
<
MAGIK:: VAL 7 < CONSTANTE MAGIQUE...
IF K*MAGIK/BASE16(K=FCREST-K,,XEIF%,
IF ATTENTION : IL FAUT MAGIK(K)=K POUR
IF SIMPLIFIER LES CHOSES EN BASE 16 !!!
XEIF%: VAL ENDIF
XWOR%3: VAL MAGIK < CONSTANTE MAGIQUE...
XWOR%7: VAL K < INITIALISATION DU CUMUL...
NTRN
DO BASE16
XWOR%7: VAL K=FCDO*XWOR%3/BASE16(K=FCREST?COSBT=FMASK(K?XWOR%7=FCINST
XWOR%8: VAL K < INITIALISATION DU CUMUL...
DO BASE16
XWOR%8: VAL K=FCDO?COSBT=FMASK(K?XWOR%8=FCINST
TRN
IF XWOR%7-XWOR%8,,XEIF%,
IF ATTENTION : LA CONSTANTE MAGIQUE 'MAGIK'
IF N'OPERE PAS UNE PERMUTATION DES 16 CHIFFRES
IF DE 0 A F !!!
XEIF%: VAL ENDIF
IF K*MAGIK/BASE10(K=FCREST-K,,XEIF%,
IF ATTENTION : IL FAUT MAGIK(K)=K POUR
IF SIMPLIFIER LES CHOSES EN BASE 10 !!!
XEIF%: VAL ENDIF
XWOR%3: VAL MAGIK < CONSTANTE MAGIQUE...
XWOR%7: VAL K < INITIALISATION DU CUMUL...
NTRN
DO BASE10
XWOR%7: VAL K=FCDO*XWOR%3/BASE10(K=FCREST?COSBT=FMASK(K?XWOR%7=FCINST
XWOR%8: VAL K < INITIALISATION DU CUMUL...
DO BASE10
XWOR%8: VAL K=FCDO?COSBT=FMASK(K?XWOR%8=FCINST
TRN
IF XWOR%7-XWOR%8,,XEIF%,
IF ATTENTION : LA CONSTANTE MAGIQUE 'MAGIK'
IF N'OPERE PAS UNE PERMUTATION DES 10 CHIFFRES
IF DE 0 A 9 !!!
XEIF%: VAL ENDIF
<
< NOTA :
< DESORMAIS (MEME DANS L'HORLOGE)
< LA CONSTANTE MAGIQUE N'EST UTILISEE
< QUE PAR RAPORT A LA BASE16, ET PLUS
< DU TOUT AVEC LA BASE10...
<
<
<
< O R G A N E D E S W A P P I N G :
<
<
ANSPS: WORD NSPPR1 < ON TROUVE ICI LE 'NSP' DE L'ORGANE
< DE SWAPPING ('NSPDKS' OU 'NSPPR1').
NUSEP1: WORD K < NOMBRE D'UTILISATEURS POUVANT ACCEDER
< AU SWAPPING SUR 'PR1' ; CE NOMBRE EST
< CALCULE LORS DU BALAYAGE DE LA MEMOIRE
< HAUTE AU RESTART DU SYSTEME...
PAGE
<
<
< N U M E R O D E C O M P T E D U S Y S T E M E
< ( E T D E S O N P E R E ) :
<
<
ACNSYS: BYTE XK1;XK2;XK3;XK4
PAGE
<
<
< R E L A I S D E S T A B L E S C O M M U N E S :
<
<
SYSPRO: WORD LPRO,X < LISTE DES PROCESSEURS DU SYSTEME.
AXPSTH: WORD PSTH00,X < RELAI INDEXE VERS LES 'PSTH'.
AXIC: WORD IC00,X < RELAI INDEXE VERS LES 'IC'
ADCTSY: WORD DCTSY,X < RELAI TABLE STATIONS SERVICES.
ARSIM: WORD TRSIM,X < LISTE D'EXECUTION DES 'SVC' IMMEDIATS.
AFOSIM: WORD FOSIM,X < TABLE D'EXECUTION DES FAUX
< SERVICES IMMEDIATS DU SVC.
ATMOB: WORD TTMOB,X < OPERATIONS SUR BITS DANS TABLE.
ARVISU: WORD TRVISU,X < EXECUTION DES FONCTIONS VISUS.
ACFOVI: WORD TCFOVI,X < TABLE DE CODAGE DES FONCTIONS
< ACCESSIBLES SUR LES VISUS.
VISOTO: WORD TVISOT,X < RELAI D'ACCES A L'AUTOMATE
< D'ACCES AUX VISUS.
ACEXTD: WORD CEXTD,X < ADRESSE TABLE DES EXTENSIONS VISUS.
AFCCI: WORD FCCI,X < RELAI DES MODULES DU CCI.
AOTCCI: WORD OTOCCI,X < RELAI VERS LA GRAMMAIRE DU CCI.
ATFREQ: WORD TFREQ,X < TABLE FREQUENCES INT. HORLOGE.
ATHESC: WORD THESC,X < RELAI VERS LA TABLE DES VALEURS
< INITIALES DES "HORLOGES" DE SWAPPING
< DES ESCLAVES.
FREQI: WORD HORINI+T+AMDEM < ADRESSE FREQUENCE REINITIALISATION
< DE L'ORLOGE DANS LA DEMANDE
< HORINI DE SYSINI.
< (IMPLANTEE DANS DCTHOR !!!)
AMATX: WORD MATX,X < RELAI DE LA MATRICE DE CONNEXION.
AZDC: WORD ZDC,X < RELAI INDEXE VERS UNE ZONE DE
< 16 OCTETS FORMANT UNE ZONE DE
< DONNEES COMMUNES INTER-
< ESCLAVES.
AFONX: WORD FONX,X < RELAI VERS LA TABLE DE TRANS-
< CODAGE UTILISEE LORS DES
< CONNEXIONS MATRICIELLES POUR
< CODER LES FONCTIONS A ENVOYER.
IMPASS: WORD TIMPAS,X < RELAI D'ACCES A LA TABLE DES ASSIGNA-
< TIONS IMPLICITES.
<
< R E L A I S V E R S L E S 3 F I L E S
< D U M I C R O - S C H E D U L E R :
<
AASTF: WORD ASTF-IJIJDX,X
AESTF: WORD ESTF-IJIJDX,X
ARSTF: WORD RSTF-IJIJDX,X
PAGE
<
<
< R E L A I S D E S R O U T I N E S C O M M U N E S :
<
<
ROUT5: EQU $
<
<
< R O U T I N E S G E N E R A L E S :
<
<
ATRACE: WORD STRACE < ROUTINE DE TRACE.
ASNAP: WORD SNAP < ROUTINE DE SNAP DU CONTENU DE A.
ACHAND: WORD CHAND < MISE D'UNE DEMANDE EN FILE D'ATTENTE.
ACHAN0: WORD CHAND0 < MISE D'UNE DEMANDE EN FILE D'ATTENTE,
< AVEC PASSAGE PRELIMINAIRE SUR LA PAGE
< '0 DE LA MEMOIRE, AFIN DE FORCER DES
< ENTREES-SORTIES EN BAS DE LA MEMOIRE...
ACHANW: WORD CHANW < ATTENTE DE FIN DE SERVICE, PUIS
< TEST DES CONDITIONS DE RETOUR.
ACANSP: WORD CANSP < CALCUL DU NSP DU DEMANDEUR, OU
< NSPACT SI APPEL PAR HDLSER.
ACBDCT: WORD CBDCT < CALCUL DE L'ADRESSE DE LA DCT ASSOCIEE
< A UN NIVEAU D'INTERRUPTION GENERALISE
< DONNE EN ARGUMENT...
ALODCT: WORD LOCDCT < LOCATION D'UNE DCT.
ADLDCT: WORD DELDCT < DELOCATION D'UNE DCT.
ARVHDL: WORD REVHDL < REVEIL D'UN HANDLER APRES UNE IT.
ARVDEM: WORD REVDEM < REVEIL DU DEMANDEUR EN FIN
< DE SERVICE.
ACSWIT: WORD CSWIT < REMISE A 0 DU BETA(SIT) ET
< ATTENTE D'INTERRUPTION.
ABETA1: WORD BETA1 < ROUTINE DE CALCUL DE BETA(SCHVID).
ABETA2: WORD BETA2 < CALCUL DU BETA(SIT).
ABETA: WORD E753 < BETA D'UN SEMAPHORE QUELCONQUE.
APBS: WORD PBS < TEST DE POSITION DE BETA(SCHVID)
< PAR RAPPORT A SEUIL(SCHVID).
ATEC: WORD TEC
ATIT: WORD TIT < ADRESSE DE LA ROUTINE DE TRAITEMENT
< DES IT D'E/S.
APREDS: WORD PREDS < ROUTINE DE PREVENTION DES DEFSEC.
ATHDS: WORD THDS < ROUTINE DE TEST DES DEFSEC.
AHEXEX: WORD HEXEX < CONVERSION BINAIRE-->ASCI
ADODO: WORD DODO < ROUTINE DE MISE EN SOMMEIL POUR
< UNE DUREE DETERMINEE.
ASOBT: WORD SOBT < ROUTINE DE RECHERCHE D'UN BIT
< A 1 DANS UNE TABLE.
ATMOBT: WORD TMOBT < ROUTINE D'OPERATIONS SUR
< SUR BIT DANS UNE TABLE.
ASEPAR: WORD SEPAR < ROUTINE DE DECONCATENATION
< D'UN NUMERO DE BIT.
AHEXIN: WORD HEXIN < CONVERSION ASCI-->BINAIRE.
ASTBOX: WORD STBOX < ROUTINE RANGEANT LA BOX D'UNE
< DEMANDE, SI CELLE-CI EST
< VALIDEE PAR LE VBOX DU NSPTYP.
ARLSE: WORD RLSE < SOUS-PROGRAMME DE SIMULATION DE
< L'INSTRUCTION 'RLSE'.
ASMMK: WORD SMMK < SOUS-PROGRAMME DE MASQUAGE PROCESSEUR.
ASMDK: WORD SMDK < SOUS-PROGRAMME INVERSE DE 'SMMK'.
ATDEFS: WORD TDEFS < ROUTINE TESTANT LES DEFAUTS SECTEURS
< EN ATTENTE DANS LES PHASES MASQUEES.
ASMPUI: WORD SMPUI < SOUS-PROGRAMME DE LECTURE DES CLEFS
< DU PUPITRE ET DE SON ETAT.
ASMPUO: WORD SMPUO < SOUS-PROGRAMME D'ECRITURE PUPITRE.
ASMTH: WORD SMTH < SOUS-PROGRAMME DE CALCUL DE
< L'ADRESSE D'UNE 'PSTH'.
ASMIC: WORD SMIC < SOUS-PROGRAMME DE CALCUL DE
< L'ADRESSE D'UN 'IC'.
ASYSER: WORD SYSER < SOUS-PROGRAMME DE TRAITEMENT
< DES ERREURS SYSTEME.
<*******************************************************************************
XWOR%F: VAL ASYSER-COM-DEPCS
ASYSER: @VAL '0@@@@ < DEPLACEMENT RELATIF A 'C' DE 'SYSER'.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
ASMWHO: WORD SMWHO < SOUS-PROGRAMME D'IDENTIFICATION DE
< LA TACHE EN COURS.
ASMIT: WORD SMIT < SOUS-PROGRAMME DE TEST DE L'ETAT
< REEL DE MASQUAGE DES INTERRUPTIONS.
AGETOC: WORD GETOC < SOUS-PROGRAMME D'ACCES A UN
< OCTET QUELCONQUE D'INDEX
< DONNE AU-DELA DE 32K.
ASIMUL: WORD SIMUL < SIMULATION DES INSTRUCTIONS DE 'LOAD' ET
< DE 'STORE' DANS TOUTE LA MEMOIRE...
ACHIFR: WORD CHIFRA < CHIFFRAGE/DECHIFFRAGE D'UN MOT...
ATWOE: WORD TWOE < SOUS-PROGRAMME METTANT EN PLACE LES
< REGISTRES (SLO,SLE) ; DU MOINS, IL FAIT
< SEMBLANT, CAR EN GENERAL, IL LAISSE
< CEUX QUI Y SONT DEJA, MAIS EVENTUEL-
< LEMENT EN CHANGEANT (SLE)-(SLO) ;
< CELA PERMET D'ETENDRE LES ANCIENNES
< OPERATIONS 'CDAI' A L'ENSEMBLE DES 'CDA'.
<
<
< R O U T I N E S A T T A C H E E S A U X
< E S C L A V E S :
<
<
AALOHS: WORD ALOHS < ROUTINE D'ALLOCATIO ET D'APPEL
< D'UN HANDLER DE SERVICE.
ARGARM: WORD RGARM < CALCUL DU RANG DE L'ALLOCATEUR/
< RELEASEUR MEMOIRE NECESSAIRE A
< UN ESCLAVE.
ARGAM1: WORD RGAM < POUR ALLOCATION MEMOIRE LORS
< DU CHARGEMENT D'UN PROCESSEUR.
AFSERV: WORD SFSERV < TEST ET RANGEMENT D'UNE ARDREESE
< DE ROUTINE DE FIN DE SERVICE.
ADOWN: WORD DOWN < SOUS-PROGRAMME APPELE A LA SUITE D'UN
< 'SVC' OU UN 'QUIT' RECU, OU BIEN UNE
< UNE TRAPPE, ET QUI REGARDE OU SE TROUVE
< L'ESCLAVE (EN HAUT, OU EN BAS), ET S'IL
< EST EN HAUT, PREPARE SA DESCENTE, AFIN
< QUE TOUTES SES OPERATIONS SOIENT TRAITEES
< EN BAS...
APDADR: WORD PDADR < SOUS-PROGRAMME CONVERTISSANT UN REGISTRE
< 'SLO' EN UNE ARESSE MOT (LORSQUE CELA
< EST LEGAL).
AISWAP: WORD ISWAP < ROUTINE DE FIN DE SERVICE
< D'INVERSION DES CONDITIONS
< DE SWAP DE L'ESCLAVE.
AABORT: WORD ABORT < ROUTINE DE MODIFICATION DE
< L'ESPACE MEMOIRE ESCLAVE
< SUITE A UN ABORT.
ASAVRE: WORD SAVREG < ROUTINE DEPLACANT LES 10 REGIS-
< DE L'ESCLAVE (A,B,X,Y,C,L,W,K,P,
< S) DE DCTESC VERS L'EN-TETE DE
< L'ESPACE MEMOIRE ESCLAVE ; APPE-
< LE PAR 'ABORT' ET 'TRAPPE'.
ARUNP: WORD RUNP < ROUTINE D'INITIALISATION
< DU P DE LANCEMENT D'UN PROCESSEUR.
AGOBPE: WORD GOBPE < ROUTINE DE FIN DE SERVICE DE
< RETOUR AU PROGRAMME ESCLAVE
< PAR 'PRESC'.
AGOON: WORD GOON < ADRESSE ROUTINE DE FIN DE SERVICE
< UTILISEE LORS D'UN PROCEED.
ACHKIN: WORD CHKIN < TEST NSPIN=?NSPOUT ET RENVOI
< DE NSPIN DANS LE REGISTRE A.
ACARAC: WORD CARAC < ACCES AU CARACTERE COURANT DE
< BUFESC PENDANT L'ANALYSE DU CCI.
ACCIF: WORD CCIFIL < INTERFACE GESTION DES NOMS-CCI.
ASTXES: WORD STXES < SOUS-PROGRAMME DE MODIFICATION DU REGIS-
< TRE 'X' DE L'ESCLAVE DANS 'DCTESC' ; IL
< POSSEDE COMME ARGUMENT UNE INSTRUCTION
< DE 'STORE'...
<
<
< E N V O I D ' U N M E S S A G E :
<
<
AMJEEJ: WORD MJEEJ < MESSGE DE EJ ET JE VERS TTYS.
<
<
< R O U T I N E S D I V E R S E S D ' E / S :
<
<
ASDIPI: WORD IPI < SOUS-PROGRAMME EMETTANT A DESTINATION
< UN 'IPI' EN AYANT BIEN ENTENDU AU
< PREALABLE MIS UNE ADRESSE DE 'CCB' DANS
< SA BOITE AUX LETTRES...
AINICV: WORD INICV < ROUTINE D'INITIALISATION DES REGISTRES
< DES COUPLEURS DES VISUS, EN PARTICULIER
< LORS D'UN 'RESTART'.
AMESSO: WORD MESSO < EMISSION D'UN MESSAGE.
AWOGB: WORD WOGB < ECRITURE DK POUR GET/REL DK.
AROGB: WORD ROGB < LECTURE DK POUR ALLOC/REL DK.
ARRSTF: WORD RRSTF < TEST DU MODE D'EXECUTION, ET EPILOGUE
< DES TACHES HARDWARES.
<
<
< R O U T I N E S D U S G F :
<
<
ALOOKF: WORD LOOKF < ROUTINE DE RECHERCHE D'UN FICHIER
< D'ETAT DONNE.
AOPFIL: WORD OPNFIL < OPEN FILE.
ACLFIL: WORD CLSFIL < ROUTINE DE CLOSE FICHIER.
AMTEDF: WORD MTEDF < ROUTINE DE MISE A JOUR DE TEDF.
AACTP: WORD ACTP < ROUTINE DONNANT LA TP D'UN FICHIER
< DE NOM DIRECT DONNE.
ADETP: WORD DETP < ROUTINE SUPPRIMANT UN NOM
< DIRECT DANS TATP.
ARWTP: WORD RWTP < ROUTINE D'ECRITURE D'UN SECTEUR
< DE TATP.
AACTP2: WORD ACTP2 < ACCES A LA TP D'UN FICHIER (SGF).
AWAITR: WORD WAITR < ATTENTE EVENEMENT & LIBERATION
< PROVISOIRE DU SGF.
ACLAS: WORD CLAS < CALCUL DE LA CLASSE D'EQUIVALENCE
< D'UNE CLEF.
APLSC: WORD PLSC < ROUTINE DE PARCOURS D'UNE LISTE
< SEQUENTIELLE DE CLEFS.
AE475: WORD E475 < RELAI-ADRESSE INTERNE A 'PLSC'.
AE261: WORD E261 < RELAI-ADRESSE INTERNE A 'PLSC'.
AINITK: WORD INITK < INITIALISATION DESCRIPTEUR DE CLEF.
AALSC: WORD ALSC < ROUTINE D'ALLOCATION SECTEURS
< POUR PLSC.
AINITS: WORD INITS < INITIALISATION D'UN SECTEUR D'UNE
< LISTE SEQUENTIELLE DE CLEFS.
ADELET: WORD DELETE
AINSER: WORD INSERT
RETCID: WORD E302 < ADRESSE DE RETOUR DE INSERT/DELETE.
ADADF: WORD DADF < ROUTINE DE TRANSFERT DES
< ARG DU SGF VERS DFILDK.
ACLOSK: WORD CLOSK < ROUTINE DE CLOSE SAVE D'UN
< ENREGISTREMENT.
AELWS: WORD ELWS < ECRITURE UN SECTEUR (SGF).
ACLO1: WORD CLO1 < INITIALISATION D'UN CLOSE
< ENREGISTREMENT.
AOPN1: WORD OPN1 < INITIALISATION OPEN ENREGISTREMENT.
AELR1: WORD ELR1 < VALIDATION DES LECTURES SOUS SGF.
AELCH: WORD ELCH < CHAINAGE DES SECTEURS A L'ECRITURE.
AELR2: WORD ELR2 < RECUPERATION DES CHAINAGES
< DES SECTEURS LORS D'UNE LECTURE
< DU SGF.
ARDESC: WORD RDESC < ROUTINE DE RELEASE D'UN
< DESCRIPTEUR D'ENREGISTREMENT.
AADESC: WORD ADESC < ROUTINE D'ALLOCATION
< DESCRIPTEUR D'ENREGISTREMENT.
AELARS: WORD ELARS < ALLOCATION/RELEASE DE SECTEURS.
AELESS: WORD ELESS < E/S SECTEUR DISQUE.
AWSDK: WORD WSDK < ROUTINE D'ECRITURE 1 SECTEUR DK.
ARSDK: WORD RSDK < ROUTINE DE LECTURE 1 SECTEUR DK.
<
<
< R O U T I N E S D I V E R S E S :
<
<
AMEM: WORD MEM < GENERATION D'UN RELAI D'ACCES
< A UN BUFFER ET DE SON INDEX
< A PARTIR DE L'ARGUMENT 'AMDEM' D'UNE
< DEMANDE...
<
<
< R O U T I N E S D E V I S U A L I S A T I O N :
<
<
OACTIV: @
XWOR%1: VAL KOLF=FMASK+KOLTES=FVAL
XWOR%1: VAL KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2: VAL KOLTED=FMASK+KOL0=FVAL
XWOR%2: VAL KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3: VAL XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE 'OACTIV'...
XWOR%4: VAL MSYMBI=FMASK+KOL0=FVAL
XWOR%4: VAL MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
IF XWOR%4=FCSYMT-SYMBX,XEIF%,,XEIF%
OACTIV:: VAL EXIST < SI 'OACTIV' N'EXISTE PAS, ON LE CREE...
< OPTION 'EXIST'/'NEXIST' DE LA VISUALI-
< TION DU TRAFFIC DES DEMANDES INTER-TACHES
XEIF%: VAL ENDIF
IF OACTIV-EXIST,XEIF%8,,XEIF%8
AACTIV: WORD ACTIV < CETTE ROUTINE PERMET DE VISUALISER SUR
< LE SYSTEME MOYENNE DEFINITION LE TRAFIC
< INTER-TACHES ; L'ADRESSE 'ACTIV' EST
< SOIT PAIRE (LE SOUS-PROGRAMME EST ALORS
< INEFFECTIF), SOIT IMPAIRE (LE SOUS-PRO-
< GRAMME EST ALORS ACTIF).
XACTIV:: VAL NBITMO-B < "BIT DE PARITE" CONTROLANT L'ACTIVITE
< DU SOUS-PROGRAMME 'ACTIV'.
XEIF%8: VAL ENDIF
PAGE
<
<
< T A B L E D E S S E M A P H O R E S C O M M U N S :
<
<
ASXSER: WORD SEXSER < ALLOCATION DES HANDLERS DE SERVICE
ASMMEM: WORD SEMMEM < ALLOCATEURS MEMOIRE.
ASEXAR: WORD SEXAR < ALLOCATION/RELEASE MEMOIRE.
ASPHEX: WORD CSPHEX < ALLOCATION/RELEASE ESPACE DISQUE.
ASEMDE: WORD SEMDE < DESCRIPTEURS D'ENREGISTREMENTS.
ASAST: WORD SAST < ATTENTE DE FICHIER :ETAT DONNE.
ASXSGF: WORD SEXSGF < GESTION DE FICHIERS.
ASDCTF: WORD SDCTF < ACCES AUX DCTF.
ASAESC: WORD SAESC < ALLOCATION DES ID. ESCLAVES.
ASIDES: WORD SIDESC < SEMAPHORE D'EXCLUSION D'ALLOC.ID.
ASDODO: WORD SDODO < SEMAPHORE DE MISE EN SOMMEIL.
ASEMCD: WORD SEMCDA < SEMAPHORE DE SYNCHRONISATION SUR 'CDAG0'.
ASMATX: WORD SMATX < PHASES CRITIQUES SUR MATX ET ZDC.
ASEMSO: WORD SEMSO < PHASES CRITIQUES HORLOGE-SWAPPER.
PAGE
<
<
< O C C U P A T I O N D E S E S C L A V E S
< E T D E S H A N D L E R S D E S E R V I C E :
<
<
ATOHDS: WORD TOHDS,X < RELAI DE LA TABLE D'OCCUPATION
< DES HANDLERS DE SERVICE.
ATOESC: WORD TOESC,X < RELAI DE LA TABLE D'OCCUPATION
< DES ESCLAVES (INCLUE DONC
< L'OCCUPATION DE TBU ET DES BLOCS
< DISQUE DE SWAPPING).
ATBU: WORD TBU,X < RELAI DE LA TABLE DES ADRESSES
< DES BLOCS ALLOUES AUX ESCLAVES.
PAGE
<
<
< A L L O C A T I O N M E M O I R E :
<
<
MEMSIZ:: VAL MEMORY-K < TAILLE MEMOIRE ALLOUABLE ;
< (EN DOUBLE-MOTS...)
< LA VALEUR DONNEE ICI EST FARFELUE
< PUISQU'ELLE INCLUT LE SYSTEME.
<
<
<
ATOM: WORD TOM,X < ACCES A TOM EN ADRESSE MOT ET JDX.
ATOMB: WORD TOM+IJIJDX,X < ACCES A TOM EN ADRESSE D'OCTETS.
ATOMP: WORD TOMP,X < ACCES A LA TABLE DES PROPRIETAIRES.
OTOSM: WORD K < SEUIL DE CHANGEMENT DES AUTOMATES
< DE SERVICE NON IMMEDIATS,
< SOIT : NSP>=(HINSP); ON COMPARE
< A CE SEUIL LE NOMBRE D'ALLOCATEURS
< MEMOIRE EN ATTENTE=BETA(SEMMEM).
< (VOIR POUR CELA 'RUNSVC')
<
< TABLE DES BLOCS DE 2K INTERDITS
< AUX BUFFERS : CECI A POUR EFFET D'EVITER
< DES BLOCAGES DU SYSTEME DUS A DES
< IMPLANTATIONS MALHEUREUSES DE DCTESC
< LORS DES LOGIN, ET QUI FINALEMENT
< BLOQUE DES ESPACES 2K, 4K...
<
UMEM2K:: VAL MEMORK/NBITMO < NOMBRE DE BLOCS DE 1K REPRESENTES
< PAR LES TABLES 'BUINT' ET 'K2INT'.
L2K:: VAL LK*UMEM2K < LONGUEUR EN MOTS DES BLOCS DE 2K...
NL2KB:: VAL W < NOMBRE MINIMAL ET PAR DEFAUT DE BLOCS
< DE 2K DANS LESQUELS ON PEUT IMPLANTER
< DES BUFFERS.
BUINT: WORD XXLBM < LISTE DES BLOCS DE 2K AUTORISES :
< '0000-'07FF,
< '0800-'0FFF,
< '1000-'17FF,
< '1800-'1FFF,
< '2000-'27FF,
< '2800-'2FFF,
< '3000-'37FF.
<
< BLOCS DE 2K INTERDITS LORS DES
< ALLOCATIONS 1K, 2K, 4K, 6K, 8K
< (INTERDICTION DUE A DES INTERFERENCES
< FACHEUSES ENTRE L'ALLOCATION
< MEMOIRE UTILISATEUR ET LES DEMANDES
< DE BUFFERS DU SGN) :
<
IF UMEM2K*NBITMO-MEMORK,,XEIF%,
IF ATTENTION : LA LONGUEUR DE LA LISTE EST IMCOMPATIBLE
IF AVEC LA TAILLE DE LA MEMOIRE ALLOUABLE !!!
XEIF%: VAL ENDIF
K2INT: WORD XXLNBM < LISTE DES BLOCS DE 2K AUTORISES :
< '3800-'3FFF,
< '4000-'47FF,
< '4800-'4FFF,
< '5000-'57FF,
< '5800-'5FFF,
< '6000-'67FF,
< '6800-'6FFF,
< '7000-'77FF,
< '7800-'7FFF.
IF K2INT-BUINT-D,,XEIF%,
IF E R R E U R !!!
< SI K2INT#BUINT+1 (CF. LE
< NSP2K D'ACCES A BUINT ET
< K2INT DANS DCTSY).
XEIF%: VAL ENDIF
PAGE
<
<
< A L L O C A T I O N D E L ' E S P A C E
< D I S Q U E A M O V I B L E :
<
<
< PHILOSOPHIE :
< LE DISQUE AMOVIBLE 'DKM' EST DECOUPE
< EN 'NBGB' GRANDS BLOCS 'GB' (NUMEROTES
< A PARTIR DE 1).
< TOUS LES 'GB' SONT ACCESSIBLES A L'ALLO-
< CATEUR DISQUE ; UN SEUL SECTEUR EST INTER-
< DIT : C'EST CELUI QUI CORRESPOND A
< L'INFINI (Q8000) ; CETTE INTERDICTION
< EST REALISEE PAR L'ALLOCATEUR LUI-MEME...
< LE NOMBRE TOTAL DE SECTEURS DISPONIBLES
< SUR 'DKM' EST DONC DE NBGB*NBSPGB-1,
< AVEC : NBGB=NOMBRE TOTAL DE 'GB',
< NBSPGB=NOMBRE DE SECTEURS PAR 'GB'.
<
<
NBGB:: VAL '20-1 < NOMBRE DE GRANDS BLOCS TOTAL ; -1, CAR
< CE DISQUE 50 MEGA-OCTETS NE FAIT PAS
< EXACTEMENT 50 MEGA-OCTETS...
NBSPGB:: VAL YY7*NBITMO < NOMBRE DE SECTEURS PAR 'GB' : AINSI LA
< TABLE D'ALLOCATION D'UN 'GB' OCCUPE
< YY7 MOTS, SOIT UN SECTEUR...
X2:: VAL NBSPGB < NOMBRE DE SECTEURS PAR 'GB'.
NSTO:: VAL NBGB < NOMBRE DE SECTEURS UTILISES PAR LA
< TABLE D'ALLOCATION DE L'ENSEMBLE
< DES 'GB'.
NSDKF: @
XWOR%1: VAL KOLF=FMASK+KOLTES=FVAL
XWOR%1: VAL KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2: VAL KOLTED=FMASK+KOL0=FVAL
XWOR%2: VAL KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3: VAL XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE 'NSDKF'...
XWOR%4: VAL MSYMBI=FMASK+KOL0=FVAL
XWOR%4: VAL MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
IF XWOR%4=FCSYMT-SYMBX,XEIF%,,XEIF%
XWOR%5: VAL 2
NSDKF:: VAL NBSPGB*XWOR%5 < NOMBRE DE SECTEURS DE 'DKF'.
XEIF%: VAL ENDIF
TDKM:: VAL NBGB*NBSPGB
< NOMBRE DE SECTEURS ALLOUABLES SUR 'DKM'.
NTRN
NUQFM:: VAL NSDKF+QUANTA-E/QUANTA+NBSPGB-E/NBSPGB*NBSPGB
TRN
< NOMBRE D'UNITES DE 'QUANTA' SECTEURS
< UTILISES SUR 'DKM' POUR SIMULER 'DKF'.
SDKM:: VAL TDKM-NUQFM < NOMBRE DE SECTEURS RESTANT SUR 'DKM',
< UNE FOIS QU'ON A PRIS EN COMPTE LA ZONE
< DE SIMULATION/COPY DE 'DKF' SUR 'DKM'.
<
<
< E S P A C E L I B R E S U R ' D K M ' :
<
<
NSL: WORD SDKM < ET VOILA...
<
<
< O C C U P A T I O N D U D I S Q U E
< F I X E ' D K F ' :
<
<
< PHILOSOPHIE :
< LE DISQUE FIXE N'EST PAS ALLOUABLE ;
< MALGRE TOUT SA CAPACITE CORRESPOND
< A 2 'GB' :
< 1 - LE PREMIER EST OCCUPE PAR 'TOGB'
< 'TP' ET L'ARBRE DU SYSTEME.
< 2 - LE SECOND CONTIENT LES ZONES DE
< SWAPPING AINSI QUE LES PROCESSEURS
< DE BASE DE CMS5.
<
<
XWOR%1: VAL NBITMO=K < UN 'SB' EST REPRESENTE PAR 1 MOT,
XWOR%2: VAL YY7=K < UN 'GB' EST REPRESENTE PAR UN BUFFER.
DECON:: VAL XWOR%1+XWOR%2 < AMPLITUDE DES DECALAGES DE
< CONCATENATION/DECONCATENATON.
<
< RELAIS DES TABLES :
<
ANSLGB: WORD NSLGB,X
ATOGB: WORD TOGB,X
<
< CONSTANTES D'ALLOCATION/RELEASE :
<
NSMGB: WORD X2 < NBRE DE SECTEURS MAX DANS UN 'GB'.
NUGBC: WORD NBGB < NUMERO+1 DU 'GB' COURANT ;
< INITIALISE SUR LE 'GB0' (1ER
< 'GB' A L'INITIALISATION DU
< SYSTEME).
<
< SEMAPHORE D'ALLOCATION :
<
SGETS: WORD XXSEM0 < SEMAPHORE DE BLOCAGE DE L'ALLOCA-
< TEUR DIQUE LORSQU'IL N'Y A PLUS
< DE SECTEURS LIBRES ; IL ATTEND UN
< REVEIL DU RELEASEUR...
PAGE
<
<
< G R A N D B L O C D E S W A P P I N G :
<
<
TZSCRA:: VAL 40 < NOMBRE DE SECTEURS OCCUPES PAR LA
< ZONE SCRATCH DES UTILISATEURS.
MXMEME:: VAL '8000 < NOMBRE MAXIMAL D'OCTETS ALLOUABLES
< A L'ESPACE MEMOIRE UTILISATEUR.
XWOR%1: VAL YY8=K
XWOR%1: VAL -XWOR%1
XWOR%2: VAL MXMEME>XWOR%1 < NOMBRE DE SECTEURS NECESSAIRES AU
< SWAPPING UTILISATEUR.
TZPROG:: VAL XWOR%2 < NOMBRE DE SECTEURS NECESSAIRES POUR LE
< SWAPPING DE L'ESPACE UTILISATEUR PRO-
< PREMENT DIT.
XWOR%7: VAL YY7*TZPROG/LK < NOMBRE DE K-MOTS UTILISES AU MAXIMUM
< POUR L'ESPACE UTILISATEUR.
NTRN
XWOR%8: VAL XX64K/XWOR%7
TRN
IF XWOR%8*XWOR%7-XX64K,,XEIF%,
IF ATTENTION : LA ZONE DE SWAPPING UTILISATEUR
IF SUR 'PR1' NE DOIT PAS ETRE A CHEVAL SUR DES
IF FRONTIERES DE 64K ; CE TEST SERA COMPLETE
IF DANS 'DCTPR1' PAR UNE VALIDATION IDENTIQUE
IF SUR L'ADRESSE DE DEBUT DE CETTE MEME ZONE !!!
IF (ET CECI A CAUSE DES ENTREES-SORTIES AU-DELA DE 64K...)
XEIF%: VAL ENDIF
TCPROG:: VAL TZPROG < TAILLE DE LA 'CDA' ; CELLE-CI DOIT
< INCLURE LA ZONE PROGRAMME 'TZPROG'...
IF TCPROG-TZPROG,,XEIF%,XEIF%
IF ATTENTION : LA "!CDAP" NE PEUT CONTENIR
IF LA ZONE PROGRAMME 'TZPROG' !!!
XEIF%: VAL ENDIF
XWOR%6: VAL LK=K
XWOR%6: VAL -XWOR%6
XWOR%5: VAL YY7*TCPROG>XWOR%6
XWOR%4: VAL XX64K/XWOR%5 < DONNE LE NOMBRE DE "!CDAP" QUE L'ON
< PEUT METTRE DANS 64K... CE NOMBRE DOIT
< ETRE ENTIER (MERCI 'TRN'/'NTRN').
<*******************************************************************************
TZSWAP:: VAL TZPROG+TZSCRA < NOMBRE DE SECTEURS OCCUPES PAR LA
< ZONE DE SWAPPING DE CHAQUE UTILI-
< SATEUR.
TZSWAP: @VAL '0@@@@ < TAILLE DE LA ZONE DE SWAP UTILISATEUR.
CALL #SISP CMS5 GEN DEF#
<*******************************************************************************
X16:: VAL X20*TZSWAP < NOMBRE DE SECTEURS RESERVES POUR LE
< SWAPPING UTILISATEUR SUR 'DKF'.
ASYS: WORD SECTSY < CONSTANTE DE TRANSLATION DES
< ADRESSES DES ZONES DE SWAPPING
< DES UTILISATEURS (DUE AU FAIT
< QUE LE SYSTEME N'EST PLUS
< IMPLEMENTE A PARTIR DE 0 SUR
< LES DISQUES DE SWAPPING !!!)
IF TVLIMA*LK/YY7-TZSCRA,XEIF%,XEIF%,
IF ATTENTION : LA ZONE SCRATCH NE TIENT MEME PAS UNE TRAME !!!
XEIF%: VAL ENDIF
<
< F O R M A T D ' U N B L O C D E S W A P P I N G :
<
<
< DEFINITION :
< 1 - LES 'TZSWAP'-'TZSCRA' PREMIERS SECTEURS
< CONTIENNENT LA ZONE DE SWAPPING DE L'ESPACE
< MEMOIRE DE CHAQUE UTILISATEUR.
<
< 2 - LES 'TZSCRA' SECTEURS SUIVANTS CONTIEN-
< NENT LA ZONE SCRATCH DE CHAQUE UTILISATEUR ;
< MAIS ATTENTION, CETTE ZONE N'EST RENCONTREE
< QUE SUR 'DKS' ; 'PR1' N'EN DISPOSE PAS AFIN QUE
< LES ZONNES DE SWAPPING (QUI SONT AUSSI LES
< ZONES DE 'RUNO') NE SOIENT PAS A CHEVAL SUR
< DES FRONTIERES DE 64K, ET CECI A CAUSE DES
< ENTREES-SORTIES AU-DELA DES 64 PREMIERS K...
<
<
< NOTA IMPORTANT :
< 'TZSWAP' N'ETANT PAS DIVISIBLE EXACTEMENT
< PAR 32, IL Y A UN DEPHASAGE IMPLICITE DES
< ZONES DE SWAPPING ; CETTE NOTION N'EST DONC
< PLUS EXPLICITEE ACTUELLEMENT.
<
<
XNSPDK:: VAL 32 < NOMBRE DE SECTEURS PAR PISTE SUR 'DKF'.
XWOR%2: VAL XNSPDK
NTRN
XWOR%1: VAL TZSWAP/XWOR%2
TRN
IF XWOR%1*XWOR%2-TZSWAP,XEIF%,,XEIF%
IF A T T E N T I O N : JE MENS !!!
XEIF%: VAL ENDIF
PAGE
<
<
< G E S T I O N D E F I C H I E R S :
<
<
LTEDF:: VAL YY7 < LONGUEUR DE LA TABLE TEDF.
NBITEF:: VAL NBITCX < NOMBRE DE BITS PAR "ETAT FICHIER"...
NMFILE:: VAL LTEDF*NBITMO/NBITEF < NOMBRE MAX DE FICHIERS RECONNUS.
LMTATP:: VAL NDCTF < LONGUEUR MAX EN DOUBLE-MOTS
< DE LA TABLE ASSOCIATIVE TATP.
NMBA:: VAL -1 < NBRE MAX DE BUFFERS LIBRES EN
< STOCK.
MSTOCS:: VAL 8 < NBRE MAX DE SECTEURS QUE PLSC
< EST AUTORISE A STOCKER.
NSTP:: VAL NMFILE < NBRE DE SECTEURS OCCUPES PAR TP.
XXTP1M:: VAL 15 < MARGE DE SECURITE...
< (MAIS A QUOI SERT-ELLE DONC ???)
<
< T A B L E D E S P A R T I T I O N S F I C H I E R S :
<
NUSF:: VAL YM7 < NUMERO /0 DU MOT D'UNE TP
< CONTENANT LE NBRE D'UTILISATEURS
< SIMULTANES SUR UN FICHIER.
ATEDF: WORD TEDF,X
ATADF: WORD TADF-IJIJDX,X < RELAI VERS LA LISTE DE BITS INDI-
< QUANT SI LES FICHIER SONT EN
< ATTENTE OU EN COURS DE DELETE.
AINITP: WORD NILX < RELAI NON REENTRANT D'INITIALISATION
< DE LA TP D'UN FICHIER.
NBATP: WORD K < NBRE COURANT DE BUFFER LIBRES
< EN STOCK (< OU = A NMBA).
LTATP: WORD NILK < LONGUEUR COURANTE DE TATP.
UTATP:: VAL D+D < 'TP' EST UNE TABLE DE DOUBLE-MOTS.
ATATP: WORD TATP < ADRESSE DE TATP.
ATATPI: WORD TATP+UTATP-D < ADRESSE DE TATP+1
ATATP0: WORD TATP,X < RELAI DE TATP POUR ATTEINDRE
< LES ENTREES PAIRE (NOMS DIRECTS
< DES FICHIERS PRESENTS DANS TATP.
ATATP1: WORD TATP+IJIJDX,X < RELAI DE TATP POUR ATTEINDRE
< LES ENTREES IMPAIRES (ADRESSES
< DES BUFFERS ASSOCIEES AUX
< NOMS DIRECTS DES FICHIERS
< PRESENTS DAN SLA TABLE ASSOCIATIVE.
AALBTP: WORD ALBTP < ADRESSE BLOC D'ALLOCATION 1 BUFFER.
ARLBTP: WORD RELBTP < ADRESSE BLOC DE RELEASE 1 BUFFER.
ATNSPF: WORD TNSPF-IJIJDX,X < RELAI DE LA TABLE INDIQUANT
< SI UNE 'DCTF' PEUT AVOIR ACCES
< A LA MEMOIRE VIRTUELLE 'DKB'.
<
< C O N S T A N T E S :
<
NSTOCS: WORD K < NBRE COURANT DE SECTEURS QUE PLSC
< A EN STOCK DANS STOCS.
ASTOCS: WORD STOCS,X < POINTEUR DE LA PILE DE STOCKAGE.
PEK: WORD NILK < PEK DE LA CLEF RECHERCHEE.
PDK: WORD NILK < PDK DE LA CLEF RECHERCHEE.
LIST0: WORD NILK < POUR REPRISE D'UNE EXPLORATION
< SEQUENTIELLE D'UNE TP.
TEST1: WORD NILK < RESULTAT DE PARCOURS DE LA
< LISTE SEQUENTIELLE D'UNE PARTI
< TION.
TEST2: WORD NILS < ADRESSE SECTEUR ASSOCIEE.
NEXPE: WORD NILK < PEK DE LA BORNE SUPERIEURE
< COURANTE D'UNE CLEF.
NEXPD: WORD NILK < PDK DE LA BORNE SUPERIEURE
< COURANTE D'UNE CLEF.
NEXAS: WORD NILS < ADRESSE SECTEUR DE LA BORNE
< SUPERIEURE COURANTE D'UNE CLEF.
NEXW: WORD NIL < ADRESSE DESCRIPTEUR DE LA BORNE
< SUPERIEURE COURANTE D'UNE CLEF.
AADD: WORD NIL < AVANT DERNIER DESCRIPTEUR DE
< CLEF RENCONTRE LORS DE
< L'EXPLORATION D'UNE LISTE
< SEQUENTIELLE.
AADS: WORD NILS < ADRESSE DU SECTEUR DE L'AVANT
< DERNIER DESCRIPTEUR.
NMFIL: WORD NMFILE < NOMBRE MAXIMUM DE FICHIERS SGF
< SUPPORTES PAR CMS4.
C6000: WORD EXXPL8
C7FF: WORD BXXPL4 < MASQUE DU NOM-DIRECT FICHIER.
C1FFF: WORD EMXKE1 < MASQUE DE RECUPERATION DE PEK.
CE000: WORD AMXPL1 < CONSERVATION DES 3 BITS DE TETE.
<
< D E S C R I P T E U R S D ' E N R E G I S T R E M E N T :
<
ATDE: WORD TDE < ADRESSE DU POOL DES DESCRIPTEURS
< D'ENREGISTREMENTS.
ATODE: WORD TODE,X < RELAI VERS LA TABLE D'OCCUPATION
< DES DESCRIPTEURS D'ENREGISTREMENTS.
<
< D C T D E G E S T I O N D E F I C H I E R S :
<
AODCTF: WORD TODCTF,X < RELAI VERS LA TABLE D'OCCUPATION
< DES DCTF.
AFOFIL: WORD FOFIL,X < RELAI DES FONCTIONS 'SGF'.
PAGE
<
<
< B L O C S D E D E M A N D E S
< D E G E T I O N D E T A T P :
<
<
<
< DEMANDE D'ECRITURE D'UN SECTEUR DE 'TP'
< EN MODE PRIORITAIRE SUR 'DKA' :
<
WTP: BYTE NSPDKA;XDPRIO?XDSYM
WORD FGW < ECRITURE,
WORD NIL < ADRESSE OCTET DU 1ER MOT A ECHANGER.
WORD YY8 < ON ECRIT UN SEUL SECTEUR.
WTPAS: WORD NILS < ADRESSE DU PREMIER SECTEUR A ECRIRE.
DZS LDEM0+WTP-$ < ETADEM, WEIO, NEXT.
<
< DEMANDE DE LECTURE D'UN SECTEUR DE 'TP'
< SUR 'DKA' EN MODE PRIORITAIRE :
<
RTP: BYTE NSPDKA;XDPRIO?XDSYM
WORD FGR < LECTURE,
WORD NIL < ADRESSE OCTET DU 1ER MOT A ECHANGER.
WORD YY8 < ON LIT UN SEUL SECTEUR.
WORD NILS < ADRESSE DU 1ER SECTEUR A LIRE.
DZS LDEM0+RTP-$ < ETADEM, WEIO, NEXT.
PAGE
<
<
< D E M A N D E S D ' E / S P R I O R I T A I R E S
< P O U R L E S C L E F S D E S F I C H I E R S :
<
<
<
< BLOC D'ENTREE-SORTIE DISQUE
< EN MODE PRIORITAIRE :
<
PLSCDK: BYTE NILK;XDPRIO?XDSYM
WORD NILK < SENS DE L'OPERATION.
PLSCAM: WORD NIL < ADRESSE OCTET DU BUFFER.
WORD YY8 < YY7 MOTS A ECHANGER.
PLSCAS: WORD NILS < ADRESSE DU SECTEUR.
DZS LDEM0+PLSCDK-$
<
< DEMANDE D'ALLOCATION/RELEASE
< DE L'ESPACE-DISQUE POUR 'PLSC' :
<
XXSSGF:: VAL W < NOMBRE DE SECTEURS A ALLOUER OU
< A RELEASER D'UN COUP DANS 'PLSC'.
RALSC: BYTE K;XDPRIO < NSPGET/NSPREL ; MODE PRIORITAIRE.
WORD K
RASCAM: WORD NIL < ADRESSE MEMOIRE OU METTRE L'ADRESSE
< DU SECTEUR ALLOUE.
WORD XXSSGF < DEMANDE D'1 SECTEUR.
DZS LDEM0+RALSC-$
PAGE
<
<
< Z O N E P A T C H A D R E S S A B L E
< D U C O M M O N :
<
<
PATCH4: EQU $
DO COM-$+DEPCS+DEPCS
WORD K < MOT LIBRE ET ADRESSABLE.
PAGE
<
<
< N O M S D E C E R T A I N S N I V E A U X :
<
<
< NOTA :
< CES NOMS SONT PLACES EN MEMOIRE
< BASSE CAR 'TH0' GENERE DES RELAIS
< INDEXES VERS EUX...
<
<
IF $-ZERO-NSPLST,,,XEIF%
IF ATTENTION : LES ADRESSES DES NOMS VONT RESSEBLER
IF A DES 'NSP', D'OU CONFLIT DANS 'DCTIT' !!!
XEIF%: VAL ENDIF
IF $-ZERO-K,,,XEIF%
IF ATTENTION : LES ADRESSES DES NOMS DOIVENT ETRE
IF DANS L'ESPACE DEFINI PAR 'DOL1' !!!
XEIF%: VAL ENDIF
MXDMP: EQU $
#@ASCI " DMP" < #SISP CMS5 ASCI#
MXTOP: EQU $
#@ASCI " TOP" < #SISP CMS5 ASCI#
MXTRA: EQU $
#@ASCI " TRA" < #SISP CMS5 ASCI#
MXTO: EQU $
#@ASCI " TO " < #SISP CMS5 ASCI#
MXIPI: EQU $
#@ASCI " IPI" < #SISP CMS5 ASCI#
MXCBM: EQU $
#@ASCI " CBM" < #SISP CMS5 ASCI#
MXCBJ: EQU $
#@ASCI " CBJ" < #SISP CMS5 ASCI#
MXXXX: EQU $
#@ASCI " XXX" < #SISP CMS5 ASCI#
<
< ZONE DE PATCH :
<
PATCHI:: VAL 8 < LONGUEUR DE LA ZONE DE PATCH 'DCTIT',
< ET TABLE DES NOMS DE PERIPHERIQUES.
DZS LHNAME*PATCHI < ZONE DE PATCH...
PAGE
<
<
< L I S T E D E S I N T E R R U P T I O N S :
<
<
< FORMAT :
< CETTE TABLE A UN FORMAT DE MOTS,
< CETTE TABLE EST INDEXEE PAR LES NIVEAUX
< GENERALISES D'INTERRUPTIONS (QU'ELLE
< DEFINIT AU PASSAGE) ; ELLE A UN FORMAT
< DE MOT, ET CONTIENT :
< 1 - SOIT UN 'NSP' : LORSQUE LE NIVEAU
< GENERALISE EST CELUI D'UNE INTERRUPTION
< REELLE, ON TROUVE ALORS LE 'NSP' DE LA
< TACHE ASSOCIEE.
< 2 - SOIT UNE ADRESSE (EN MEMOIRE BASSE POUR
< DES RAISONS D'INDEXATION DANS 'TH0') DE
< NOM DE NIVEAU GENERALISE LORSQU'IL
< S'AGIT D'ENTREES SPECIALES DANS LA TRACE.
< DE PLUS CETTE TABLE EST ABSOLUE,
< C'EST-A-DIRE QUE SON ORGANISATION
< EST INDEPENDANTE DES NSP (CONTRAI-
< REMENT A DCTSY), ET EST LIEE A
< LA CONFIGURATION DU CALCULATEUR :
<
<
< NOTA :
< EN COMMENTAIRE, ON DONNE LES
< NIVEAUX D'IT REELS ASSOCIES A
< CHAQUE DCT PERIPHERIQUE.
<
<
< IMPORTANT :
< POUR DES RAISONS DE SIMPLICITE
< DE PARAMETRAGE, POUR TOUS LES
< PERIPHERIQUES UTILISANT LE MODE
< CANAL, ON FAIT :
< SOUS-NIVEAU EXCEPTION = ITN...
<
<
CUMITN:: VAL K < INITIALISATION DU CUMUL DES 'ITN'
< DES PERIPHERIQUES GERES EN MODE CANAL
< 'LDC' ; IL EST EST EVIDENT QU'ILS
< NE PEUVENT ETRE IDENTIQUES 2 A 2 A
< CAUSE DES CONTEXTES...
CALL #SISP CMS5 DOL2#
DCTIT: EQU $
<
< F A U X N I V E A U X :
<
XNDMP:: VAL $-DCTIT < NIVEAU DE 'DUMP'.
WORD MXDMP
FNTOP:: VAL $-DCTIT < NIVEAU DE 'TOP 1 SECONDE'.
WORD MXTOP
XNTRA:: VAL $-DCTIT < NIVEAU 'ENTREE DANS TH0'.
WORD MXTRA
FNTO:: VAL $-DCTIT < NIVEAU 'TIME OUT DETECTE'.
WORD MXTO
<
< D E F I N I T I O N D E S ' C B M ' :
<
NIVCBM:: VAL '01 < 'CBM' DE LA TELEVISION BASSE DEFINITION,
NIVCBJ:: VAL '02 < 'CBJ' DE LA TELEVISION MOYENNE DEFINI-
< TION.
<
< N I V E A U ' 0 4 :
<
NIVTH4:: VAL '04
NTRAN4:: VAL $-DCTIT
WORD NSPCU1 < SOUS-NIVEAU 0.
WORD MXXXX
WORD NSPCU1 < SOUS-NIVEAU 2.
XSNCU1:: VAL $-DCTIT-NTRAN4-D < SOUS-NIVEAU NORMAL D'INTERRUPTION.
WORD MXXXX
WORD NSPCU2 < SOUS-NIVEAU 4.
WORD MXXXX
WORD NSPCU2 < SOUS-NIVEAU 6.
XSNCU2:: VAL $-DCTIT-NTRAN4-D < SOUS-NIVEAU NORMAL D'INTERRUPTION.
<*******************************************************************************
CALL #SISP CMS5 VALITN#
WORD MXXXX
WORD NSPCU3
WORD MXXXX
WORD NSPCU3 < SOUS-NIVEAU 10.
XSNCU3:: VAL $-DCTIT-NTRAN4-D < SOUS-NIVEAU NORMAL D'INTERRUPTION.
YTRAN4:: VAL $-DCTIT-NTRAN4 < NOMBRE DE SOUS-NIVEAUX.
<
< N I V E A U ' 0 6
<
NIVTH6:: VAL '06
NTRAN6:: VAL $-DCTIT
NSNMX1:: VAL 2 < NORMAL+EXCEPTION,
NSNMX2:: VAL 4 < ET 4 SOUS-NIVEAUX PAR COUPLEUR.
NSNMX:: VAL NSNMX1*NSNMX2 < NOMBRE DE SOUS-NIVEAUX PAR COUPLEUR
< 'MXR' : 4 NORMAUX + 4 EXCEPTION.
DO NSNMX
WORD NSPMUL
DO NSNMX
WORD NSPMUL
YTRAN6:: VAL $-DCTIT-NTRAN6 < NOMBRE DE SOUS-NIVEAUX.
<
< N I V E A U ' 0 D :
<
NIVTHD:: VAL '0D
NTRAND:: VAL $-DCTIT < DEPLACEMENT DU NIVEAU '0D
WORD NSPHOR < SOUS-NIVEAU=K.
YTRAND:: VAL $-DCTIT-NTRAND < NOMBRE DE SOUS-NIVEAUX.
<
< N I V E A U ' 0 E :
<
NIVTHE:: VAL '0E
NTRANE:: VAL $-DCTIT < DEPLACEMENT DU NIVEAU '0E
WORD NSPDKF < SOUS-NIVEAU=K.
XSNDKF:: VAL $-DCTIT-NTRANE-D < SOUS-NIVEAU NORMAL D'INTERRUPTION.
WORD NSPDKU < SOUS-NIVEAU=1.
XSNDKU:: VAL $-DCTIT-NTRANE-D < SOUS-NIVEAU NORMAL D'INTERRUPTION.
WORD NSPMT1 < SOUS-NIVEAU=2.
XSNMT1:: VAL $-DCTIT-NTRANE-D < SOUS-NIVEAU NORMAL D'INTERRUPTION.
WORD NSPDKM < SOUS-NIVEAU=3.
XSNDKM:: VAL $-DCTIT-NTRANE-D < SOUS-NIVEAU NORMAL D'INTERRUPTION.
WORD NSPCR1 < SOUS-NIVEAU=4.
XSNCR1:: VAL $-DCTIT-NTRANE-D < SOUS-NIVEAU NORMAL D'INTERRUPTION.
<*******************************************************************************
CALL #SISP CMS5 VALITN#
WORD NSPCR2 < SOUS-NIVEAU=5.
XSNCR2:: VAL $-DCTIT-NTRANE-D < SOUS-NIVEAU NORMAL D'INTERRUPTION.
<*******************************************************************************
CALL #SISP CMS5 VALITN#
WORD MXXXX
WORD NSPLP1 < SOUS-NIVEAU=7.
XSNLP1:: VAL $-DCTIT-NTRANE-D < SOUS-NIVEAU NORMAL D'INTERRUPTION.
<*******************************************************************************
CALL #SISP CMS5 VALITN#
YTRANE:: VAL $-DCTIT-NTRANE < NOMBRE DE SOUS-NIVEAUX.
<
< N I V E A U ' 0 F :
<
NIVTHF:: VAL '0F
NTRANF:: VAL $-DCTIT < DEPLACEMENT DU NIVEAU '0F
WORD NSPTYS < SOUS-NIVEAU=K.
YTRANF:: VAL $-DCTIT-NTRANF < NOMBRE DE SOUS-NIVEAUX.
<
< B I Z A R E R I E :
<
XWOR%1: VAL 9 < ??!??!
DO XWOR%1
WORD MXXXX
<
< D I V E R S :
<
NPIPI:: VAL $-DCTIT < NIVEAU 'IPI' RECU DANS 'TH0'.
WORD MXIPI
NPCBM:: VAL $-DCTIT < NIVEAU 'DEFAUT' SUR LE 'CBM' DE LA
< TELEVISION BASSE DEFINITION.
WORD MXCBM
NPCBJ:: VAL $-DCTIT < NIVEAU 'DEFAUT' SUR LE 'CBJ' DE LA
< TELEVISION MOYENNE DEFINITION.
WORD MXCBJ
<
< S O U S - N I V E A U M U L T I P L E X E U R :
<
DCTITV: EQU $
NPDPR:: VAL DCTITV-DCTIT < CONSTANTE DE TRANSLATION DE PASSAGE
< DES NUMEROS DE VOIES AU NIVEAU GENE-
< RALISE D'INTERRUPTION DES VISUS.
WORD NSPVI1 < (X)=K,
WORD NSPVI2 < (X)=1,
WORD NSPVI3 < (X)=2,
WORD NSPVI4 < (X)=3,
WORD NSPVI5 < (X)=4,
WORD NSPVI6 < (X)=5,
WORD NSPVI7 < (X)=6,
WORD NSPVI8 < (X)=7.
YTRANV:: VAL $-DCTITV < NOMBRE DE SOUS-NIVEAUX.
NTRN
IF YTRANV/NSNMX2(K=FCREST,,XEIF%,
IF PETITE BIZARRERIE DANS LES VISUS ???
XEIF%: VAL ENDIF
TRN
<
< D E R N I E R N I V E A U :
<
X69:: VAL $-D-DCTIT < DERNIER NIVEAU...
DZS PATCHI < ZONE PATCH DE 'DCTIT'.
CALL #SISP CMS5 DOL1#
PAGE
<
<
< S Y S T E M E D ' A S S I G N A T I O N S
< I M P L I C I T E S :
<
<
< FONCTION :
< CETTE TABLE DE MOTS EST UTILISEE
< PAR LES 'SVC' ET PERMET AUX UTILISATEURS
< DE REFERENCER DES 'NSP' QU'ILS N'AURONT
< PAS ASSIGNE EXPLICITEMENT.
<
<
< FORMAT DE LA TABLE :
<
<
XXPAS0:: VAL MOCG < DONNE L'ETAT INITIAL DE CETTE ENTREE.
XXPAS1:: VAL MOCD < DONNE L'ETAT COURANT DE CETTE ENTREE ;
< EN EFFET LORS D'UN !ASSIGN EXPLICITE,
< ON RECHERCHE LE 'NSP' ASSIGNE (S'IL
< N'EST PAS PARTAGEABLE) DANS CETTE TABLE,
< SI ON LE TROUVE, ON L'ENLEVE...
XYPAS0:: VAL XXPAS0=K < POUR LES DECALAGES...
XYPAS1:: VAL XXPAS1=K < POUR LES DECALAGES...
XXPASI:: VAL XASSIM < BIT DE 'XXPAS1' INDIQUANT :
< 0 : (XXPAS1)='NSP',
< 1 : (XXPAS1)='NVP'.
XYPASI:: VAL XXPAS1)MMOT=K+XXPASI
XWOR%1: VAL XYPASI-B
XMPASI:: VAL BIT>XWOR%1 < MASQUE DANS 'XXPAS1' DE DISCRIMINATION
< DES 'NSP' ET DES 'NVP'...
<
<
< PHASES CRITIQUES D'ECRITURE DANS 'TIMPAS' :
< ELLES SONT RESOLUES PAR 'LODCT' ET
< 'DELDCT' A L'AIDE DES SEMAPHORES 'SPHEX'
< DES 'NSP' EN CAUSE...
<
<
TIMPAS: EQU $
NVPSER:: VAL PHSER < POUR LES SERVICES IMMEDIATS PAR 'SVC'.
WORD K < LE 'NVP' NUL N'EXISTE PAS...
XWOR%1: VAL XXPAS0?XXPAS1
XWOR%2: VAL XXPAS0+XXPAS1
IF XWOR%1-XWOR%2,,XEIF%,
IF ATTENTION : LE CODAGE QUI SUIT EST IDIOT !!!
XEIF%: VAL ENDIF
WORD COSWBR=FMASK(K?PHIN?XMPASI=FCPUSH=FCINST=FCPULL
NVPIN:: VAL $-D-TIMPAS < 'NVP' STANDARD D'ENTREE.
IF PHIN-NVPIN,,XEIF%,
IF ATTENTION : LE 'NVP' STANDARD D'ENTREE EST BIZARRE !!!
XEIF%: VAL ENDIF
WORD COSWBR=FMASK(K?PHOUT?XMPASI=FCPUSH=FCINST=FCPULL
NVPOUT:: VAL $-D-TIMPAS < 'NVP' STANDARD DE SORTIE.
IF PHOUT-NVPOUT,,XEIF%,
IF ATTENTION : LE 'NVP' STANDARD DE SORTIE EST BIZARRE !!!
XEIF%: VAL ENDIF
WORD COSWBR=FMASK(K?NSPDLN=FCPUSH=FCINST=FCPULL
NVPDLN:: VAL $-D-TIMPAS < 'NVP' D'ACCES A 'HDLDLN'.
WORD COSWBR=FMASK(K?NSPSTN=FCPUSH=FCINST=FCPULL
NVPSTN:: VAL $-D-TIMPAS < 'NVP' D'ACCES A 'HDLSTN'.
WORD COSWBR=FMASK(K?NSPLON=FCPUSH=FCINST=FCPULL
NVPLON:: VAL $-D-TIMPAS < 'NVP' D'ACCES A 'HDLLON'.
WORD COSWBR=FMASK(K?NSPLNS=FCPUSH=FCINST=FCPULL
NVPLNS:: VAL $-D-TIMPAS < 'NVP' D'ACCES A 'HDLLNS'.
WORD COSWBR=FMASK(K?NSPLNU=FCPUSH=FCINST=FCPULL
NVPLNU:: VAL $-D-TIMPAS < 'NVP' D'ACCES A 'HDLLNU'.
WORD COSWBR=FMASK(K?NSPNXP=FCPUSH=FCINST=FCPULL
NVPNXP:: VAL $-D-TIMPAS < 'NVP' D'ACCES A 'HDLNXP'.
WORD COSWBR=FMASK(K?NSPNXS=FCPUSH=FCINST=FCPULL
NVPNXS:: VAL $-D-TIMPAS < 'NVP' D'ACCES A 'HDLNXS'.
WORD COSWBR=FMASK(K?NSPDKU=FCPUSH=FCINST=FCPULL
NVPDKU:: VAL $-D-TIMPAS < 'NVP' STANDARD D'ACCES A 'DKU'.
WORD COSWBR=FMASK(K?NSPCU3=FCPUSH=FCINST=FCPULL
NVPCU3:: VAL $-D-TIMPAS < 'NVP' STANDARD D'ACCES A 'CU3'.
NSPVDK:: VAL NSPVI4 < 'NSP' STANDARD D'ACCES AU DISQUE VIDEO.
WORD COSWBR=FMASK(K?NSPVDK=FCPUSH=FCINST=FCPULL
NVPVDK:: VAL $-D-TIMPAS < 'NVP' STANDARD D'ACCES AU DISQUE VIDEO.
<
< ZONE DE PATCH DE LA TABLE 'TIMPAS' :
<
XWOR%1: VAL $-ZERO
WORD COSWBR=FMASK(K?PHIN?XMPASI=FCPUSH=FCINST=FCPULL
WORD COSWBR=FMASK(K?PHOUT?XMPASI=FCPUSH=FCINST=FCPULL
PIMPAS:: VAL $-ZERO-XWOR%1 < LONGUEUR DE LA ZONE DE PATCH...
LIMPAS:: VAL $-TIMPAS < NOMBRE D'ENTREES DE 'TIMPAS'...
PAGE
<
<
< A L L O C A T I O N D E L ' E S P A C E - M E M O I R E :
<
<
< FONCTION :
< LA TABLE 'TOM' DONNE L'ETAT
< D'ALLOCATION DE LA PREMIERE
< MOITIE DE LA MEMOIRE MAITRE,
< A RAISON D'UN BIT PAR BUFFER
< DE 128 MOTS.
<
<
XWORK7: VAL MEMORY/YY7*UMEM < NOMBRE DE BUFFERS TOTAL...
WORD XWORK7 < POUR LES VALIDATIONS DE 'SOBT'...
TOM: EQU $-IJIJDX
CALL #SISP CMS5 NBIT1#
< L'ESPACE MEMOIRE DISPONIBLE,
< PUISQU'ON VOIT LE RESIDENT
< ALLOUABLE.
<
<
< T A B L E D E S P R O P R I E T A I R E S :
<
<
< FONCTION :
< CETTE TABLE CONTIENT UNE ENTREE (MOT)
< PAR ESPACE DE LONGUEUR 'PLK' POSSIBLE ;
< CHAQUE ENTREE MEMORISE :
< 1 - DANS 'MOCG' : L'IDESC DU PROPRIETAIRE,
< 2 - DANS 'MOCD' : NUMERO RELATIF DE CET ESPACE
< DANS L'ESPACE TOTAL ALLOUE A
< L'UTILISATEUR DE CET IDESC.
< SI CET ESPACE DE 'PLK' MOTS EST UTILISE PAR
< AU MOINS UN BUFFER, L'ENTREE EST INVALIDEE PAR
< XXTOMP...
<
<
XXTOMP:: VAL MMOT < VALEUR D'INVALIDATION DE 'TOMP'.
XITOMP:: VAL MOCG < MASQUE D'IDESC,
XNTOMP:: VAL MOCD < MASQUE DE NUMERO RELATIF.
XWOR%1: VAL XITOMP=K
XWOR%1: VAL -XWOR%1 < POUR FAIRE UN DECALAGE A DROITE...
XWOR%2: VAL XXTOMP>XWOR%1 < MASQUE SUPERIEUR A 'MKIDES' ???
XWOR%3: VAL MKIDES=K
XWOR%3: VAL -XWOR%3
XWOR%4: VAL MKIDES>XWOR%3 < MASQUE D'UN IDESC DANS DCTESC.
IF XWOR%2-XWOR%4,,,XEIF%
IF ATTENTION : 'XITOMP' EST MAUVAIS !!!
XEIF%: VAL ENDIF
TOMP: EQU $
XWOR%2: VAL XXXMOY < PARCEQUE 'MEMORK' TIENT MAL SUR 15 BITS !
NTRN
IF MEMORK/XWOR%2*XWOR%2-MEMORK,,XEIF%,
IF ATTENTION : 'MEMORK' NON DIVISIBLE PAR 'XWOR%2' !!!
XEIF%: VAL ENDIF
TRN
DO MEMORK/XWOR%2*LK/PLK*XWOR%2
WORD XXTOMP
PAGE
<
<
< A L L O C A T I O N D E S D I S Q U E S :
<
<
< DEFINITION :
< LA TABLE 'TOGB' DONNE L'ETAT
< D'ALLOCATION DES Q-SECTEURS
< DU SYSTEME A RAISON D'UN BIT
< PAR Q-SECTEUR (1=LIBRE) ; ETANT
< TROP GRANDE, CETTE TABLE EST
< GEREE EN OVERLAY SUR 'DKA'...
<
< 1=LIBRE,
< 0=OCCUPE.
<
< O C C U P A T I O N D U ' G B ' C O U R A N T :
<
<
TOGB: EQU $-IJIJDX
DO YY7
WORD MMOT < INITIALISATION SUR GB1 LIBRE.
<
<
< E T A T D ' O C C U P A T I O N D E C H A Q U E ' G B ' :
<
<
< FONCTION :
< CETTE TABLE DONNE LE NOMBRE DE Q-SECTEURS
< LIBRES DANS CHAQUE 'GB'.
<
<
< NOTA IMPORTANT :
< POUR INTERDIRE L'ALLOCATION DANS UN
< 'GB' DONNE (PAR EXEMPLE POUR FORCER
< L'IMPLANTATION D'UN FICHIER A UN
< ENDROIT BIEN PRECIS DU DISQUE) IL
< SUFFIT DE FAIRE :
<
< BIT0(NSLGB(DE CE 'GB')) <-- 1... (ENTREE NEGATIVE)
<
<
XXINGB:: VAL BITSIG < BIT D'INTERDICTION D'UN 'GB'...
NSLGB: EQU $-IJIJDX
XWOR%1: VAL NUQFM/NBSPGB
DO XWOR%1
WORD COSBT?XXINGB=FMASK(K=FCINST < ZONE SIMULATION DU 'DKF'.
XDKSYM:: VAL $-IJIJDX-NSLGB-XWOR%1
< NUMERO PAR RAPPORT A 0 DU 'GB'
< UTILISE PAR LA SIMULATION DE
< 'DKF' SUR 'DKM'.
IF XDKSYM,,XEIF%,
IF ATTENTION : 'XDKSYM' DOIT ETRE NUL !!!
XEIF%: VAL ENDIF
DO NBGB-XWOR%1
WORD NBSPGB < TOUT LIBRE INITIALEMENT...
<
<
< T A B L E P E R M E T T A N T D E S A V O I R
< S U R ' D K M ' L E S ' G B ' L E S P L U S
< U T I L I S E S :
<
<
< FORMAT :
< 'TLRUGB' EST UNE TABLE D'OCTETS,
< DONT CHAQUE ENTREE CONTIENT UN
< NUMERO DE 'GB'-1 (1=IJIJDX) ; A
< CHAQUE FOIS QU'UN 'GB' DE NUMERO
< N+1 EST REFERENCE DANS 'DKB', ON
< LE FAIT SE RAPPROCHER DE LA TETE
< DE 'TLRUGB' PAR PERMUTATION AVEC
< SON PREDECESSEUR (S'IL EXISTE...) ;
< ON FINIT AU BOUT D'UN CERTAIN TEMPS
< A CLASSER LES 'GB' PAR ORDRE DE PLUS
< GRANDE UTILISATION LE PLUS RECEMMENT ;
< ON FORCERA L'ALLOCATION DISQUE LORSQUE
< CELA EST POSSIBLE DANS LES 'GB' LES
< PLUS UTILISES AFIN DE MINIMISER LES
< DEPLACEMENTS DES BRAS DE 'DKM'...
<
<
< NOTA :
< CETTE TABLE EST MISE A JOUR PAR
< 'DKB' ET LUE UNIQUEMENT PAR L'ALLO-
< CATEUR DISQUE ; ON N'INTRODUIT DONC
< PAS DE PHASE CRITIQUE DESSUS...
<
<
TLRUGB: EQU $
NTRN
XWOR%1: VAL NBGB+NOCMO-E/NOCMO
XWOR%2: VAL NBGB/NOCMO(K=FCREST
TRN
XWOR%3: VAL NBGB+XWOR%2 < INCREMENT DES OCTETS GAUCHES,
XWOR%4: VAL XWOR%3+NOCMO-Z < INCREMENT DES OCTETS DROITS.
<*******************************************************************************
DO XWOR%1
BYTE K=FCDO)MFFFF+N-Z*NOCMO+XWOR%3;K=FCDO)MFFFF+N-Z*NOCMO+XWOR%4
XWOR%5: VAL '0000000@@@@ < RECUPERATION DU DERNIER MOT,
<*******************************************************************************
IF XWOR%2-K,,XEIF%,
XWOR%5: VAL XWOR%5(MOCG < DANS LE CAS D'UNE TABLE DE LONGUEUR
< IMPAIRE, ON EFFACE LE DERNIER OCTET
< GENERE,
$EQU $-D < ON REVIENT D'UN MOT EN ARRIERE,
WORD XWOR%5 < ET ON REGENERE LE DERNIER MOT...
XEIF%: VAL ENDIF
PAGE
<
<
< T A B L E S D U S G F :
<
<
< T E D F : TABLE RESIDENTE DES ETATS SUR 4 BITS DES FICHIERS
< ACCEDEE PAR NOM DIRECT OU PAR TYPE.
<
< ETATS INTERESSANTS :
<
< '0 : INEXISTANT JAMAIS OUVERT,
< '4 : INEXISTANT OUVERT AU MOINS 1 FOIS,
< '7 : EXISTANT FERME,
< 'C : CLOSE, EN ATTENTE DE DELETE,
< 'F : OPEN.
<
<
< T A D F : TABLE DE BITS INDIQUANT POUR CHAQUE FICHIER,
< SI CELUI-CI EST EN ATTENTE (OU EN COURS
< DE DELETE) PAR UN BIT A 1, OU BIEN S'IL EST
< OUVERT (OU FERME EN SAVE) PAR UN BIT A 0.
< L'INDEX DE BIT DE CETTE TABLE EST LE NOM
< DIRECT DU FICHIER.
<
<
< T A T P : C'EST UNE TABLE ASSOCIATIVE,
< METTANT EN CORRESPONDANCE LES NOMS
< DIRECTS DES FICHIERS ET LES ADRESSES DES
< BUFFERS QUI SONT ALLOUES A LEUR 'TP'.
<
< FORMAT D'UNE ENTREE :
<
< - MOT0 : NOM-DIRECT,
< - MOT1=ADRESSE BUFFER ALLOUE A LA TP DU FICHIER DONT
< LE NOM-DIRECT PRECEDE.
<
<
XTATPN:: MOT O < ENTREE NOM-DIRECT DU FICHIER,
XTATPB:: MOT XTATPN+D < ADRESSE DU BUFFER DE SA TP...
<
<
< T A B L E D E S E T A T S D E S F I C H I E R S :
<
<
TEDF: EQU $-IJIJDX
DZS LTEDF < INITIALISATION TELLE QUE :
< TOUS LES FICHIERS SONT :
< - INEXISTANTS,
< - CLOSE,
< - PARTAGEABLES.
< (ET DONC ENCORE JAMAIS
< OUVERTS...)
<
<
< T A B L E D E S A T T E N T E S D E D E L E T E :
<
<
TADF: EQU $
DZS NMFILE/NBITMO < INITIALEMENT AUCUN FICHIER N'EST EN
< ATTENTE DE DELETE (OU EN COURS...).
<
<
< T A B L E A S S O C I A T I V E D E S
< P A R T I T I O N S :
<
<
TATP: EQU $
DZS UTATP*LMTATP < TABLE DE DOUBLE-MOTS.
<
<
< P I L E D E S S E C T E U R S L I B E R A B L E S :
<
<
STOCS: EQU $-IJIJDX
DZS MSTOCS < PILE DE STOCKAGE DES SECTEURS
< DE PLSC.
<
<
< D E S C R I P T E U R S D ' E N R E G I S T R E M E N T :
<
<
DEMO0:: MOT O < PREMIER MOT D'UN DESCRIPTEUR D'ENREGIS-
< TREMENT : TETE DE L'ENREGISTREMENT.
DEMO1:: MOT DEMO0+D < DEUXIEME MOT : QUEUE DE L'ENREGISTREMENT,
DEMO2:: MOT DEMO1+D < TROISIEME MOT : ADRESSE DU SECTEUR
< AUQUEL APPARTIENT LA CLEF OUVERTE DE
< CET ENREGISTREMENT, MAIS
< A T T E N T I O N : 'DEMO2' N'A DE
< SENS QUE POUR LES FICHIERS 'OLD' !!!
DENI:: MOT DEMO2+D < QUATRIEME MOT : NOM INTERNE DU FICHIER
< POSSEDANT CET ENREGISTREMENT.
UDE:: VAL DENI+D < LONGUEUR D'UN DESCRIPTEUR D'ENREGIS-
< TREMENT...
XWOR%1: VAL UDE=K
IF BIT>XWOR%1-UDE,,XEIF%,
IF ATTENTION : 'UDE' DOIT ETRE UNE PUISSANCE DE 2
IF A CAUSE DES DECALAGES UTILISANT UDE=K !!!
XEIF%: VAL ENDIF
TDE: DZS UDE*NMDE < POOL DES DESCRIPTEURS
< D'ENREGISTREMENTS.
XWOR%1: VAL TDE-ZERO < ADRESSE DU PREMIER MOT DE 'TDE',
XWOR%2: VAL UDE*NMDE+XWOR%1 < ADRESSE DU PREMIER MOT N'APPAR-
< TENANT PAS A 'TDE'.
IF XWOR%1,,XEIF%,XEIF%
IF ATTENTION : 'TDE' DOIT ETRE EN TETE !!!
XEIF%: VAL ENDIF
IF XWOR%2,,XEIF%,XEIF%
IF ATTENTION : 'TDE' DOIT ETRE EN TETE !!!
XEIF%: VAL ENDIF
XWOR%3: VAL XDKSYM*NBSPGB < ADRESSE DU PREMIER SECTEUR DU
< 'GB' DE SIMULATION DE 'DKF' SUR
< 'DKM'.
XWOR%4: VAL XWOR%3+NBSPGB < ADRESSE DU PREMIER SECTEUR N'APPAR-
< TENANT PAS AU 'GB' DE SIMULATION.
IF XWOR%3,,XEIF%,XEIF%
IF ATTENTION : LE 'GB' DE SIMULATION DOIT ETRE EN TETE !!!
XEIF%: VAL ENDIF
IF XWOR%4,,XEIF%,XEIF%
IF ATTENTION : LE 'GB' DE SIMULATION DOIT ETRE EN TETE !!!
XEIF%: VAL ENDIF
<
< NOTA IMPORTANT :
< VERIFIONS QUE (XWOR%1,XWOR%2) EST
< INCLUS DANS (XWOR%3,XWOR%4) ; EN EFFET,
< LORS D'UN DEFAUT SECTEUR TROP LONG (PAR
< EXEMPLE) ON RISQUE DE SE RETROUVER AVEC
< DES FICHIERS OUVERTS NON FERMABLES DANS
< LESQUELS LES ADRESSES DE DEBUT ET DE FIN
< D'ENREGISTREMENT SONT REMPLACEES PAR LES
< ADRESSES DE DESCRIPTEUR DE CLEF. SI LA
< RELATION PRECEDDENTE EST VERIFIEE, SACHANT
< DE PLUS QU'UN SECTEUR NE PEUT ETRE ALLOUE
< DANS LE 'GB' DE SIMULATION, ON POURRA, EN
< TESTANT PAR EXEMPLE L'ADRESSE PRESUMEE DE
< DEBUT D'ENREGISTREMENT SAVOIR S'IL S'AGIT
< BIEN D'UNE ADRESSE DISQUE, OU ALORS D'UNE
< ADRESSE DE DESCRIPTEUR...
<
IF XWOR%1-XWOR%3,,XEIF%,XEIF%
IF ATTENTION : LES ADRESSES DE 'TDE' ET
IF DU 'GB' DE SIMULATION PEUVENT ENTRAI-
IF NEES DES CONFUSIONS !!!
XEIF%: VAL ENDIF
IF XWOR%2-XWOR%4,XEIF%,XEIF%,
IF ATTENTION : VOIR COMMENTAIRE CI-DESSUS !!!
XEIF%: VAL ENDIF
<
<
< O C C U P A T I O N D E S D E S C R I P T E U R S
< D ' E N R E G I S T R E M E N T :
<
<
XWORK7: VAL NMDE < NOMBRE DE DESCRIPTEURS D'ENREGISTREMENT.
WORD XWORK7 < POUR LES VALIDATIONS DE 'SOBT'...
TODE: EQU $-IJIJDX < TABLE D'OCCUPATION DES
< DESCRIPTEURS D'ENREGISTREMENTS.
X7:: VAL NMDE+NBITMO-E
CALL #SISP CMS5 NBIT1#
<
<
< O C C U P A T I O N D E S ' D C T F ' :
<
<
XWORK7: VAL NDCTF < NOMBRE DE 'DCTF' RECONNUES.
WORD XWORK7 < POUR LES VALIDATIONS DE 'SOBT'.
TODCTF: EQU $-IJIJDX < TABLE D'OCCUPATION DES DCTF.
X8:: VAL NDCTF+NBITMO-E
CALL #SISP CMS5 NBIT1#
<
<
< A C C E S A ' D K B ' :
<
<
TNSPF: EQU $ < TABLE INDIQUANT SI UNE DCTF
< DE NSP DONNE PEUT AVOIR ACCES
< A LA MEMOIRE VIRTUELLE 'DKB'
< (BIT(NSPF)=1), OU BIEN SI ELLE
< ACCEDERA SYSTEMATIQUEMENT LE
< DISQUE 'DKM' (BIT(NSPF)=K).
DZS LSEM
IF NSNSP0,,XEIF%,XEIF%
IF ATTENTION : LA TABLE PRECDENTE EST
IF MAL GENEREE PAR CE 'DZS'...
XEIF%: VAL ENDIF
<
<
< L I S T E D E S M O D U L E S ' S G F ' :
<
<
FOFIL: WORD ELRS;ELRDS;ELWS;OPNEXT;OPNNK;OPNOK;CLORK;CLOSK
<
<
< D E M A N D E S ' S G F ' " E X C L U S I V E S " :
<
<
<
< DEMANDE D'ALLOCATION BUFFER :
<
XXBSGF:: VAL W < NOMBRE DE BUFFERS NECESSAIRES.
ALBTP: BYTE NSPALB;XDPRIO?XDSYM
XWOR%1: VAL COSBT?WAITB=FMASK(K=FCINST
WORD XWOR%1 < D'UNE MANIERE GENERALE LE HANDLER
< D'ALLOCATION NE SE METTRA PAS EN ATTENTE
< ATTENTE S'IL N'Y A PAS DE BUFFER
< LIBRE A ALLOUER POUR TP.
WORD NIL < ADRESSE MOT DE LA ZONE
< OU METTRE L'ADRESSE MEMOIRE DE
< L'EVENTUEL BUFFER ALLOUE A TP.
WORD XXBSGF < NBRE DE BUFFERS DEMANDES.
DZS LDEM0+ALBTP-$
<
< DEMANDE DE RELEASE BUFFER :
<
RELBTP: BYTE NSPRLB;XDPRIO?XDSYM
WORD K
WORD NIL < MOT OU METTRE L'ADRESSE-MOT
< DE LA ZONE OU SE TROUVE L'ADDRESSE
< DU BUFFER A RELEASER.
WORD XXBSGF < 1 BUFFER A RELEASER.
DZS LDEM0+RELBTP-$
<
<
< C O N S T A N T E S D I V E R S E S ' S G F ' :
<
<
NLSTS:: VAL K < VALEUR FORCEE DANS LE PREMIER MOT D'UN
< ENREGISTREMENT QUI N'EST PAS LE DERNIER
< DANS LA LISTE (SINON, ON TROUVE LA
< VALEUR 'INFINI').
<
< FONCTIONS D'ACCES AU 'SGF' :
<
FOFW:: VAL FGW < ECRITURE.
FOFONX:: VAL FOFW+I < OPEN NEXT,
FOFON:: VAL FOFONX+I < OPEN NEW,
FOFOO:: VAL FOFON+I < OPEN OLD,
FOFCR:: VAL FOFOO+I < CLOSE RELEASE,
FOFCS:: VAL FOFCR+I < CLOSE SAVE,
FOFR:: VAL FOFCS+I < LECTURE,
FOFRD:: VAL FOFR+I < LECTURE-DELETE,
XWOR%1: VAL K
XWOR%1: VAL COSBT?FOFONX=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COSBT?FOFON=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COSBT?FOFOO=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COSBT?FOFCR=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COSBT?FOFCS=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COSBT?FOFR=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COSBT?FOFRD=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COSBT?FOFW=FMASK(K?XWOR%1=FCINST
XSGFON:: VAL XWOR%1 < LISTE DES FONCTIONS 'SGF' RECONNUES.
<
< "ALTITUDE" D'EXECUTION DES FONCTIONS 'SGF' :
<
XWOR%1: VAL K < INITIALISATION...
XWOR%1: VAL COSBT?FOFONX=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COSBT?FOFON=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COSBT?FOFOO=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COSBT?FOFCR=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COSBT?FOFCS=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COSBT?FOFR=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COSBT?FOFRD=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COSBT?FOFW=FMASK(K?XWOR%1=FCINST
XSGFUP:: VAL XWOR%1 < POUR INITIALISER LES 'DCTSGF'...
<
< CODES D'ERREUR DU 'SGF' :
<
ECZERO:: VAL K < PAS D'ERREUR...
ECFC:: VAL 1 < FICHIER DEJA FERME LORS D'UN CLOSE,
ECEO:: VAL 2 < OPEN ENREGISTREMENT EN COURS LORS
< D'UN CLOSE,
ECCED:: VAL Q8000 < LA CLEF EXISTE DEJA EN OPEN NEW,
ECLV:: VAL '6000 < LA LISTE DES CLEFS EST VIDE,
ECCI1:: VAL '2000 < CLEF INEXISTANTE,
ECCI2:: VAL '4000 < CLEF INEXISTANTE,
ECEPO:: VAL 3 < ECRITURE DEMANDEE SANS OPEN,
ECEPOV:: VAL 12 < ECRITURE DEMANDEE, ALORS QU'IL N'Y
< A PLUS DE PLACE SUR "DKM"...
ECRPO:: VAL 4 < LECTURE DEMANDEE SANS OPEN,
ECDPO:: VAL 5 < DELETE DEMANDE SANS OPEN,
ECLEV:: VAL 6 < LECTURE D'UN ENREGISTREMENT VIDE,
ECEC1:: VAL 8 < MAUVAISE CLEF,
ECEC2:: VAL 9 < MAUVAISE CLEF,
ECEN:: VAL 10 < LE DEMANDEUR N'EST PAS L'OUVREUR.
ECDSYS:: VAL 11 < OPEN ENREGISTREMENT IMPOSSIBLE
< DEFINITIVEMENT : IL FAUDRA RENDRE LE
< FICHIER INACCESSIBLE EN DETRUISANT
< SON NOM EXTERNE UNIQUEMENT...
<
< ETATS DES FICHIERS (SUR 4 BITS) :
<
XWOR%1: VAL NBITEF-Z < A CAUSE DU SOUS-PROGRAMME 'SEPAR' QUI
< EST UTILISE DANS LE 'SGF'...
XWOR%1: VAL NBITMO-B-XWOR%1
XBITF1:: VAL XWOR%1 < BIT D'OPEN (1) / CLOSE (K).
XBITF2:: VAL XBITF1+BIT < BIT PARTAGEABLE.
XBITF3:: VAL XBITF2+BIT < NATURE DU
XBITF4:: VAL XBITF3+BIT < FICHIER ; NOTA :
< (XBITF3,XBITF4)=(00) : FICHIER LIBRE,
< (XBITF3,XBITF4)=(11) : FICHIER OCCUPE.
XEFX:: VAL K < INEXISTANT JAMAIS OUVERT,
XWOR%1: VAL XEFX
XWOR%1: VAL COSBT?XBITF2=FMASK(K?XWOR%1=FCINST
XEF1:: VAL XWOR%1 < INEXISTANT OUVERT AU MOINS 1 FOIS,
XWOR%1: VAL XEFX
XWOR%1: VAL COSBT?XBITF2=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COSBT?XBITF3=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COSBT?XBITF4=FMASK(K?XWOR%1=FCINST
XEFF:: VAL XWOR%1 < EXISTANT FERME,
XWOR%1: VAL XEFX
XWOR%1: VAL COSBT?XBITF1=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COSBT?XBITF2=FMASK(K?XWOR%1=FCINST
XEFCD:: VAL XWOR%1 < CLOSE EN ATTENTE DE DELETE,
XWOR%1: VAL XEFX
XWOR%1: VAL COSBT?XBITF1=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COSBT?XBITF2=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COSBT?XBITF3=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COSBT?XBITF4=FMASK(K?XWOR%1=FCINST
XEFO:: VAL XWOR%1 < OPEN.
XWOR%1: VAL COSBT?XBITF1=FMASK(K=FCINST
IF XEFCD(XWOR%1,XEIF%,,XEIF%
IF ATTENTION : 'XECFD' ET 'XBITF1' INCOMPATIBLES !!!
XEIF%: VAL ENDIF
IF XEFO(XWOR%1,XEIF%,,XEIF%
IF ATTENTION : 'XEFO' ET 'XBITF1' INCOMPATIBLES !!!
XEIF%: VAL ENDIF
<
< ARGUMENTS DES OPEN/CLOSE :
<
XWOR%9: VAL K
XWOR%9: VAL COSBT?XBITF1=FMASK(K?XWOR%9=FCINST
XWOR%9: VAL CORBT?XBITF2=FMASK(K?XWOR%9=FCINST
< NOTA : TOUS LES 'XEF...' POSSEDENT LE
< BIT 'XBITF2', C'EST POURQUOI ON LE
< CLEAR DANS LE MASQUE 'XWOR%9'...
XWOR%9: VAL COSBT?XBITF3=FMASK(K?XWOR%9=FCINST
XWOR%9: VAL COSBT?XBITF4=FMASK(K?XWOR%9=FCINST
< DEFINITION DU MASQUE 'XWOR%9'...
MTSGF:: VAL K>NBITEF?K < POUR OBTENIR L'ETAT D'UN FICHIER.
XWOR%1: VAL XEFX?XEF1(XWOR%9
MEFX:: VAL XWOR%9>NBITEF?XWOR%1
< RECHERCHE D'UN FICHIER CLOSE INEXISTANT.
XWOR%8: VAL K
XWOR%8: VAL CORBT?XBITF1=FMASK(K?XWOR%8=FCINST
XWOR%8: VAL CORBT?XBITF2=FMASK(K?XWOR%8=FCINST
XWOR%8: VAL COSBT?XBITF3=FMASK(K?XWOR%8=FCINST
XWOR%8: VAL COSBT?XBITF4=FMASK(K?XWOR%8=FCINST
XWOR%1: VAL XEFCD(XWOR%8
MCFR:: VAL XWOR%8>NBITEF?XWOR%1
< DEMANDE DE CLOSE RELEASE.
XWOR%8: VAL XWOR%9)XWOR%8
XWOR%1: VAL CORBT?XBITF1=FMASK(K=FCINST
MCFS:: VAL XWOR%8>NBITEF?XWOR%1
< DEMANDE DE CLOSE SAVE.
XWOR%1: VAL COSBT?XBITF1=FMASK(K=FCINST
MCOI:: VAL XWOR%9>NBITEF?XWOR%1
< DEMANDE D'OPEN INEXISTANT.
XWOR%1: VAL CORBT?XBITF1=FMASK(K=FCINST
MCIN:: VAL XWOR%9>NBITEF?XWOR%1
< SPECIAL POUR 'HDLRCF'...
BITRFE:: VAL BITSIG < BIT INDICATEUR D'UNE RECHERCHE D'UN
< FICHIER D'ETAT DONNE A OUVRIR.
BITCFN:: VAL BITSIG < BIT INDICATEUR DE CLOSE D'UN FICHIER
< DONT ON DONNE LE 'NSP' COURANT.
<
<
< S E C T E U R D ' U N E N R E G I S T R E M E N T :
<
<
XCHSGF:: MOT O < LE PREMIER MOT DE CHAQUE Q-SECTEUR
< CONTIENT UN CHAINAGE VERS LE SECTEUR
< SUIVANT... (OU L'INFINI...)
PAGE
<
<
< G E N E R A T I O N D E S ' P S T H ' E T D E S ' I C '
<
<
CALL #SISP CMS5 PSTH-IC#
PAGE
<
<
< I N I T I A L I S A T I O N S T R A T E G I Q U E
< D E L ' H O R L O G E :
<
<
< FONCTION :
< CETTE TABLE DONNE EN FONCTION
< DU NOMBRE D'UTILISATEURS ACTIFS
< LA FREQUENCE DE L'HORLOGE ; IL
< CONVIENT DE NOTER QU'IL Y AIT 0
< OU 1 UTILISATEUR, L'HORLOGE DOIT
< QUAND MEME "TOURNER" DE FACON A
< ENTRETENIR LE MOUVEMENT, ET METTRE
< A JOUR LA DATE ET L'HEURE, MEME
< SI L'ON PENALISE AINSI LEGEREMENT
< L'EVENTUEL UTILISATEUR UNIQUE...
<
<
< NOTA :
< LES FREQUENCES SONT EXPRIMEES
< EN MILLI-SECONDES.
<
<
XXHINI:: VAL 100 < FREQUENCE A DONNER A L'HORLOGE LORSQU'
< IL N'Y A PAS D'ESCLAVES...
XH1000:: VAL 1000
XH200:: VAL 200
XH100:: VAL 100
TFREQ: EQU $
WORD XXHINI < PAS D'ESCLAVES DANS LE SYSTEME.
WORD XH1000 < 1 ESCLAVE.
WORD XH100 < 2 ESCLAVES.
WORD XH100 < 3 ESCLAVES.
WORD XH100 < 4 ESCLAVES.
WORD XH100 < 5 ESCLAVES.
WORD XH100 < 6 ESCLAVES.
WORD XH100 < 7 ESCLAVES.
WORD XH100 < 8 ESCLAVES.
WORD XH100 < 9 ESCLAVES.
WORD XH100 < 10 ESCLAVES.
WORD XH100 < 11 ESCLAVES.
WORD XH100 < 12 ESCLAVES.
<
<
< I N I T I A L I S A T I O N S T R A T E G I Q U E
< D E L A P A T T E R N C Y C L I Q U E
< D E S W A P P I N G O U T :
<
<
< FONCTION :
< CETTE TABLE RELAYEE PAR LE MEME
< RELAI QUE LA TABLE PRECEDENTE (ATFREQ)
< A LA TRANSLATION 'NMESCL+1' DE L'INDEX
< PRES PERMET UNE INITIALISATION DE
< LA PATTERN CYCLIQUE DE SWAPPING OUT
< (HORIDC) EN FONCTION DE LA CHAGRGE DU
< SYSTEME EN ESCLAVE ACTIF, C'EST-A-DIRE
< SE TROUVANT ENTRE LA COMMANDE '!LOGIN'
< ET L'UNE DES COMMANDES '!BYE'/'!F', ET
< N'AYANY PAS FRAPPE '!W'.
<
<
< A T T E N T I O N :
< LE BIT15 DE CHAQUE ENTREE EST
< UTILISE POUR LE CALCUL DYNAMIQUE DE
< 'IBHRUN' A CHAQUE MODIFICATION DE
< 'NUSERA' ; ON A :
< BIT15=K : NUSERA=K,1
< IBHRUN=1.
< BIT15=1 : NUSERA>1
< IBHRUN=K.
<
<
IF $-TFREQ-NMESCL,,,XEIF%
IF E R R E U R !!!
XEIF%: VAL ENDIF
<
<
XWOR%4: VAL '1111 < 1 BIT SUR 4,
XWOR%2: VAL '5555 < 1 BIT SUR 2...
WORD '0000 < PAS D'ESCLAVE DANS LE SYSTEMME.
WORD '0000 < 1 ESCLAVE.
WORD '0001 < 2 ESCLAVES.
WORD '0001 < 3 ESCLAVES.
WORD '0101 < 4 ESCLAVES.
WORD '0101 < 5 ESCLAVES.
WORD XWOR%4 < 6 ESCLAVES.
WORD XWOR%2 < 7 ESCLAVES.
WORD XWOR%2 < 8 ESCLAVES.
WORD XWOR%2 < 9 ESCLAVES.
WORD XWOR%2 < 10 ESCLAVES.
WORD XWOR%2 < 11 ESCLAVES.
WORD XWOR%2 < 12 ESCLAVES.
<
<
< T A B L E D E S H O R L O G E S D E
< S W A P P I N G U T I L I S A T E U R S :
<
<
< FONCTION :
< DANS LA 'DCTESC', ON INTRODUIT UNE
< HORLOGE DE DECOMPTAGE 'HORESC' DESTINEE
< A REDUIRE LES SWAPPINGS DES GROS PROGRAMMES,
< PUISQUE SI LEUR TAILLE EST TELLE QU'ILS
< RESIDENT SEULS EN MEMOIRE, MALGRE LA
< MULTIPROGRAMMATION, LES DUREES DE
< SWAPPING SONT PERDUES POUR LES AUTRES
< UTILISATEUR. AINSI, ON A LA GESTION
< SUIVANTE DE 'HORESC' :
< 1 - 'JOB ENTRY' : HORESC <-- 1 (VALEUR
< INITIALE ARBITRAIRE DESTINEE AU PREMIER
< SWAPPING OUT.
< 2 - AVANT CHAQUE TRAITEMENT DE 'SVC'
< HORESC <-- (HORESC)-1 ; TANT QUE 'HORESC'
< RESTE STRICTEMENT POSITIVE, ALORS ON
< LAISSE EN PLACE LES AUTOMATES DE TYPE
< MEMOIRE 'FREE', SINON, A CHAQUE PASSAGE
< DE 'HORESC' PAR 0, ON LES REMPLACERA,
< SUIVANT LE NOMBRE D'ALLOCATEURS EN
< ATTENTE DE MEMOIRE, PAR LES AUTOMATES
< MEMOIRE 'OCCUPEE', ET DE PLUS,
< HORESC <-- F(TAILLE MEMOIRE COURANTE
< DE L'ESCLAVE); 'F' EST DONNEE PAR LA
< TABLE 'THESC'.
<
<
THESC: EQU $
WORD 1 < 1K MOTS.
WORD 1 < 2K MOTS.
WORD 1 < 4K MOTS.
WORD 1 < 6K MOTS.
WORD 4/4 < 8K MOTS.
WORD 6/6 < 10K MOTS.
WORD 8/8 < 12K MOTS.
WORD 10/10 < 14K MOTS.
WORD 12/12 < 16K MOTS.
< NOTA : ON EST REVENU A DES HORLOGES
< UNITAIRES POUR TOUTES LES TAILLES D'ALLO-
< CATION MEMOIRE DEPUIS QU'EXISTE LA
< NOTION DE 'RUNO'...
PROG
PAGE
<
<
< D E F I N I T I O N D E S C O N T E X T E S ' L D C ' :
<
<
< DEFINITION :
< ON TROUVE ICI LES CONTEXTES
< ASSOCIES A CHAQUE CANAL 'LDC'.
< ETANT DONNE QU'IL N'Y A QU'UN
< SEUL PROCESSEUR 'IOP' ('PROIOP'),
< ON RECOUVRE LES CONTEXTES 'LDC'
< DES 4 PROCESSEURS QUE L'ON
< PEUT METTRE SUR 1 BUS...
<
<
CALL #SISP CMS5 DOL2#
LDC0: EQU $ < DEFINITION DES CONTEXTES 'LDC' :
LDC1: EQU LDC0 < ON N'UTILISE QU'UN
LDC2: EQU LDC0 < SEUL IOP, ON PEUT DONC
LDC3: EQU LDC0 < RECOUVRIR LES 4 CONTEXTES...
XLODC:: VAL 8 < LONGUEUR DES CONTEXTES 'LDC'.
DZS XLODC < ITN=K.
DZS XLODC < ITN=1.
DZS XLODC < ITN=2.
DZS XLODC < ITN=3.
DZS XLODC < ITN=4 (LECTEUR DE CARTES 1).
DZS XLODC < ITN=5 (LECTEUR DE CARTES 2).
DZS XLODC < ITN=6 (CU2 EN MODE CANAL).
DZS XLODC < ITN=7 (IMPRIMANTE).
LOLDC:: VAL $-LDC0 < LONGUEUR DES CONTEXTES LDC.
PAGE
<
<
< L I S T E D E S P R O C E S S E U R S :
<
<
< DEFINITION :
< ON TROUVE DANS LE SYSTEME
< TROIS TYPES DE PROCESSEURS
< REPRESENTES PHYSIQUEMENT PAR
< DEUX PROCESSEURS REELS :
<
< 1 - LE PROCESSEUR MAITRE : C'EST
< SUR LUI QUE TOURNE LE SYSTEME
< ET LES UTILISATEURS.
<
< 2 - LE PROCESSEUR ESCLAVE : C'EST
< LUI QUI SUPPORTE LE SWAPPING
< ESCLAVE EN MEMOIRE HAUTE, ET LA
< MISE A JOUR DE LA COPIE :
<
< 3 - LE PROCESSEUR D'ENTREES-SORTIES :
< C'EST LUI QUI SUPPORTE TOUS LES
< CANAUX ; A NOTER QUE LES ENTREES-
< SORTIES "NON CANALES" (VISUS PAR
< EXEMPLE) SONT SUR LE PROCESSEUR
< MAITRE.
<
<
PROCE0:: VAL K < LE PROCESSEUR DE NUMERO 0 EST OBLIGATOIRE
< A CAUSE DES MICRO-PROGRAMMES...
NPRO:: VAL NMPROC < NOMBRE MAXIMUM DE PROCESSEURS DANS
< UN SYSTEME SOLAR 16.65.
PRINEX:: VAL -1 < NUMERO DONNE A UN PROCESSEUR INEXISTANT.
IF PRINEX,XEIF%,,
IF ATTENTION : PRINEX DOIT ETRE NEGATIF !!!
XEIF%: VAL ENDIF
CALL #SISP CMS5 DOL1#
LPRO: EQU $ < LISTE DES PROCESSEURS.
<
<
< M A I T R E :
<
<
PROMST:: VAL $-LPRO < PROCESSEUR MAITRE : C'EST LUI SUR
< LEQUEL S'EXECUTE TOUTES LES TACHES
< DU SYSTEME, ET QUI GERE LES INTER-
< RUPTIONS, ALARMES ET DEFAUT SECTEUR.
YROMST:: VAL PROCE0
WORD YROMST < PROCESSEUR MAITRE...
<
<
< E S C L A V E :
<
<
PROESC:: VAL $-LPRO < PROCESSEUR ESCLAVE : C'EST UN PRO-
< CESSEUR BETE QUI TESTE CYCLIQUEMENT
< SI LE MAITRE NE LUI SOUMET RIEN,
< QUI NE TRAVAILLE SOUS AUCUN NIVEAU
< DEFINI (AFIN DE NE PAS AVOIR DE
< PROBLEMES DE CHANGEMENTS DE CONTEXTES)
< QUI TESTE PERIODIQUEMENT LE DEFAUT
< SECTEUR, ET QUI PARTAGE LA MEMOIRE
< DU MAITRE.
YROESC:: VAL YROMST+I < ON PREND LE PROCESSEUR SUIVANT...
WORD YROESC < PROCESSEUR ESCLAVE...
<
<
< I O P :
<
<
PROIOP:: VAL $-LPRO < PROCESSEUR D'ENTREES-SORTIES : C'EST
< LUI QUI GERE LES CANAUX DU SYSTEME
< (DISQUES, LECTEURS DE CARTES,
< IMPRIMANTES,...).
YROIOP:: VAL YROESC < ON PREND L'ESCLAVE OU UN 'IOP', MAIS
< DE PREFERENCE, PAS LE MAITRE, AFIN DE
< LE DECHARGER...
WORD YROIOP < PROCESSEUR IOP...
<
<
< V A L I D A T I O N S :
<
<
IF YROIOP-PRINEX,XEIF%,,XEIF%
IF ATTENTION : IL FAUT UN IOP !!!
XEIF%: VAL ENDIF
IF YROMST-PRINEX,XEIF%,,XEIF%
IF ATTENTION : IL FAUT UN MAITRE !!!
XEIF%: VAL ENDIF
IF YROMST-PROCE0,,XEIF%,
IF YROESC-PROCE0,,XEIF%,
IF ATTENTION : SOIT LE MAITRE, SOIT L'ESCLAVE
IF DOIVENT ETRE LE PROCESSEUR OBLIGATOIRE (PROCE0) !!!
XEIF%: VAL ENDIF
IF YROMST-YROESC,XEIF%,,XEIF%
IF ATTENTION : LE MAITRE NE PEUT ETRE L'ESCLAVE !!!
XEIF%: VAL ENDIF
CALL #SISP CMS5 DOL2#
PAGE
<
<
< B O I T E A U X L E T T R E S :
<
<
< DEFINITION :
< ON TROUVE ICI LES BOITES
< A LETTRE DESTINEES AUX
< DIALOGUES INTER-PROCESSEURS
< ('IPI') ET EN PARTICULIER
< AUX ENTREES-SORTIES "CANALES".
<
<
WORD K < ZONE RESERVEE PAR PRUDENCE, A CAUSE
< DE PRINEX QUI VAUT -1...
BOXIPI: EQU $
DZS NPRO
<
<
< V E R R O U D E S B O I T E S A U X L E T T R E S :
<
<
VLOCK:: VAL K)MFFFF < VALEUR D'UN VERROU VERROUILLE.
VERROU: DZS NPRO < IL Y A UN VERROU PAR BOITE AUX
< LETTRES INITIALISE A L'ETAT NON
< VERROUILLE.
XVEROU:: VAL VERROU-BOXIPI < DEPLACEMENT D'ACCES A L'AIDE DE
< BASE 'W' LORSQU'ELLE POINTE 'BOXIPI'.
PAGE
<
<
< G E N E R A T I O N D U F I C H I E R D E S
< C O N S T A N T E S G E N E R A L E S
< U T I L I S E P A R L E S P R O C E S S E U R S :
<
<
<*******************************************************************************
XWOR%F: VAL K
K: @VAL '0@@@@ < POUR CLEARER, RAZER...
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL NILK
NILK: @VAL '0@@@@ < VALEUR INITIALE DE MOTS NON DEFINIS...
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL ENDIF
ENDIF: @VAL '0@@@@ < FIN D'UN "IF".
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL NOCMO
NOCMO: @VAL '0@@@@ < NOMBRE D'OCTETS PAR MOT.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL NBITMO
NBITMO: @VAL '0@@@@ < NOMBRE DE BITS PAR MOT.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL BIT
BIT: @VAL '0@@@@ < ELEMENT BINAIRE.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL D
D: @VAL '0@@@@ < LONGUEUR D'UN "WORD"...
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL DFLOT
DFLOT: @VAL '0@@@@ < LONGUEUR D'UN "FLOAT"...
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL Z
Z: @VAL '0@@@@ < POUR CE QUI COMMENCE A 0...
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL B
B: @VAL '0@@@@ < POUR TENIR COMPTE DU RANG DU PREMIER BIT.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL I
I: @VAL '0@@@@ < INCREMENT...
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL E
E: @VAL '0@@@@ < POUR LES DIVISIONS PAR EXCES (Y+X-E/X).
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL S
S: @VAL '0@@@@ < POUR LES DECALAGES D'UN CRAN.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL L
L: @VAL '0@@@@ < RANG DU BIT DE GAUCHE D'UN MOT.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL O
O: @VAL '0@@@@ < ELEMENT COURANT.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL W
W: @VAL '0@@@@ < ELEMENT UNIQUE.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL XXXMOY
XXXMOY: @VAL '0@@@@ < POUR FAIRE DES MOYENNES.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL BITSIG
BITSIG: @VAL '0@@@@ < RANG DU BIT DE SIGNE.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL Q8000
Q8000: @VAL '0@@@@ < INFINI, OU BIEN INDICATEUR DE FIN...
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL XXQUIT
XXQUIT: @VAL '0@@@@ < CODE DU 'QUIT' D'APPEL DU 'CCI'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL MFFFF
MFFFF: @VAL '0@@@@ < MASQUE GLOBAL.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL N
N: @VAL '0@@@@ < POUR LES PASSAGES MASQUE <--> 2**N...
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL BITX
BITX: @VAL '0@@@@ < RANG DU BIT D'INDEXATION.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL BASE10
BASE10: @VAL '0@@@@ < BASE 10...
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL BASE16
BASE16: @VAL '0@@@@ < BASE 16...
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL NBITCX
NBITCX: @VAL '0@@@@ < NOMBRE DE BITS PAR CHIFFRE HEXA-DECIMAL.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL LK
LK: @VAL '0@@@@ < DEFINITION D'UN K...
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL IJIJDX
IJIJDX: @VAL '0@@@@ < POUR GERER LES INDEX DES 'JDX'/'JIX'...
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL DEPILE
DEPILE: @VAL '0@@@@ < POUR GENERER CORRECTEMENT LES PILES.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL DEPBAS
DEPBAS: @VAL '0@@@@ < DEPLACEMENT DES BASES 'C' ET 'L'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL NEXIST
NEXIST: @VAL '0@@@@ < INDICATEUR D'INEXISTENCE.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL EXIST
EXIST: @VAL '0@@@@ < INDICATEUR D'EXISTENCE.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL MOCD
MOCD: @VAL '0@@@@ < MASQUE DE L'OCTET DROIT D'UN MOT.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL MOCG
MOCG: @VAL '0@@@@ < MASQUE DE L'OCTET GAUCHE D'UN MOT.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL MMOT
MMOT: @VAL '0@@@@ < MASQUE D'UN MOT.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL KEOT
KEOT: @VAL '0@@@@ < CARACTERE 'CTRL-D'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL KCR
KCR: @VAL '0@@@@ < CARACTERE 'CTRL-M' ().
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL K6D
K6D: @VAL '0@@@@ < CARACTERE "EXTENSION" +.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL KSP
KSP: @VAL '0@@@@ < CARACTERE D'ESPACEMENT.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL KDP
KDP: @VAL '0@@@@ < CARACTERE 'DOUBLE-POINT' ":".
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL KESC
KESC: @VAL '0@@@@ < CARACTERE 'ESCAPE' (POUR 4014...).
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL KCCI
KCCI: @VAL '0@@@@ < "INTRODUCTION" DES COMMANDES AU 'CCI'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL FMASK
FMASK: @VAL '0@@@@ < DEFINITION DU MASQUE COURANT.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL FVAL
FVAL: @VAL '0@@@@ < CADRAGE DE 'VALEUR' SUIVANT 'FMASK'...
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL FCGET
FCGET: @VAL '0@@@@ < RECUPERATION D'UN OCTET EN "CD".
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL FCSTO
FCSTO: @VAL '0@@@@ < RANGEMENT D'UN OCTET EN "CD".
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL FCMOV
FCMOV: @VAL '0@@@@ < MOUVEMENT D'UNE CHAINE D'OCTETS.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL KOLTES
KOLTES: @VAL '0@@@@ < FONCTION DE RECHERCHE D'UN CARCATERE.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL KOLTED
KOLTED: @VAL '0@@@@ < DEFINITION PREMIER CARACTERE CHAINE.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL KOLTEF
KOLTEF: @VAL '0@@@@ < DEFINITION DERNIER CARACTERE CHAINE+1.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL KOLF
KOLF: @VAL '0@@@@ < MASQUE DE LA FONCTION DEMANDEE.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL KOLC
KOLC: @VAL '0@@@@ < DEFINITION DU CARACTERE A INSERER.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL KOL0
KOL0: @VAL '0@@@@ < NUMERO DE LA PREMIERE COLONNE DE CARTE.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL KOL1
KOL1: @VAL '0@@@@ < NUMERO DE LA COLONNE 'COMMANDE'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL KOL2
KOL2: @VAL '0@@@@ < NUMERO DE LA COLONNE 'ARGUMENT'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL KOL3
KOL3: @VAL '0@@@@ < NUMERO DE LA COLONNE 'COMMENTAIRE'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL KOLON
KOLON: @VAL '0@@@@ < LONGUEUR D'UNE CARTE.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL FCTES
FCTES: @VAL '0@@@@ < RECHERCHE D'UN OCTET DANS UNE CHAINE.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL FCDO
FCDO: @VAL '0@@@@ < ACCES A L'INDEX D'UN 'DO' NORMAL.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL FCDOF
FCDOF: @VAL '0@@@@ < ACCES A L'INDEX D'UN 'DO' SUR 'CALL'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL FCSYMT
FCSYMT: @VAL '0@@@@ < TEST DE L'ETAT D'UN SYMBOLE.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL MSYMBI
MSYMBI: @VAL '0@@@@ < INDEX DU PREMIER CARACTERE D'UN SYMBOLE.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL MSYMBL
MSYMBL: @VAL '0@@@@ < NOMBRE DE CARACTERES D'UN SYMBOLE.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL MSYMBN
MSYMBN: @VAL '0@@@@ < SYMBOLE REFERENCE MAIS NON DEFINI.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL FCSYMM
FCSYMM: @VAL '0@@@@ < MODIFICATION DE L'ETAT D'UN SYMBOLE.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL FCBA
FCBA: @VAL '0@@@@ < CONVERSION BINAIRE --> ASCI.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL FCAB
FCAB: @VAL '0@@@@ < CONVERSION ASCI --> BINAIRE.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL FCTA
FCTA: @VAL '0@@@@ < CONVERSION TRANSLATABLE --> ABSOLU.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL FCAT
FCAT: @VAL '0@@@@ < CONVERSION ABSOLU --> TRANSLATABLE.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL FCINST
FCINST: @VAL '0@@@@ < EXECUTION D'UNE INSTRUCTION MACHINE...
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL COSBT
COSBT: @VAL '0@@@@ < CODE DU 'SBT'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL CORBT
CORBT: @VAL '0@@@@ < CODE DU 'RBT'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL FCEXSP
FCEXSP: @VAL '0@@@@ < EXECUTION D'UN SOUS-PROGRAMME EN "CD".
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL FCPUSH
FCPUSH: @VAL '0@@@@ < EMPILEMENT.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL FCPULL
FCPULL: @VAL '0@@@@ < DEPILEMENT SIMPLE.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL FCPEXU
FCPEXU: @VAL '0@@@@ < DEPILEMENT ET EXECUTION DE LA FONCTION.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL FCREST
FCREST: @VAL '0@@@@ < ACCES AU RESTE D'UNE DIVISION.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL FCSIGN
FCSIGN: @VAL '0@@@@ < ACCES AU SIGNE COURANT.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL HZERO
HZERO: @VAL '0@@@@ < CHIFFRE DECIMAL "0".
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL HNEUF
HNEUF: @VAL '0@@@@ < CHIFFRE DECIMAL "9".
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL HA
HA: @VAL '0@@@@ < CHIFFRE HEXA-DECIMAL "A".
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL HF
HF: @VAL '0@@@@ < CHIFFRE HEXA-DECIMAL "F".
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL BITPAR
BITPAR: @VAL '0@@@@ < BIT DE PARITE CARACTERE DANS UN MOT.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL XNCOOL
XNCOOL: @VAL '0@@@@ < NOMBRE DE COULEURS PRIMAIRES.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL PAGE68
PAGE68: @VAL '0@@@@ < NUMERO DE LA PAGE 'CDAJ' D'ACCES '68000'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL XRCMD
XRCMD: @VAL '0@@@@ < REGISTRE DE COMMANDE ET D'ETAT DU '365'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL XPVECT
XPVECT: @VAL '0@@@@ < BIT DE MISE EN FORMAT "PETITS VECTEURS".
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL XRASTR
XRASTR: @VAL '0@@@@ < COMMANDE DE TRACE "RASTER" POUR 'XRCMD'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL XRXH
XRXH: @VAL '0@@@@ < REGISTRE DE POIDS FORTS DES 'X'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL XRXL
XRXL: @VAL '0@@@@ < REGISTRE DE POIDS FAIBLES DES 'X'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL XRYH
XRYH: @VAL '0@@@@ < REGISTRE DE POIDS FORTS DES 'Y'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL XRYL
XRYL: @VAL '0@@@@ < REGISTRE DE POIDS FAIBLES DES 'Y'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL XRNIVO
XRNIVO: @VAL '0@@@@ < REGISTRE DE NIVEAU DE GRIS DU TRACER..
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL XXNOIR
XXNOIR: @VAL '0@@@@ < NIVEAU DE NOIR EN MOYENNE DEFINITION.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL XXN255
XXN255: @VAL '0@@@@ < NIVEAU DE BLANC EN MOYENNE DEFINITION.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL XC512
XC512: @VAL '0@@@@ < NOMBRE DE COLONNES EN MOYENNE DEFINITION.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL XL512
XL512: @VAL '0@@@@ < NOMBRE DE LIGNES EN MOYENNE DEFINITION.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL LCCINT
LCCINT: @VAL '0@@@@ < LONGUEUR MAX DES CARTES 'CCI' INTERP.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL NVPSER
NVPSER: @VAL '0@@@@ < 'NVP' RESERVE AUX SERVICES IMMEDIATS.'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL NVPFON-DEMES0
NVPFON: @MOT '0@@@@ < 'NVP' ET FONCTION D'UNE 'DEMESC'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL XASSIM+NBITOC
XASSIM: @VAL '0@@@@ < BIT(OCTET) D'ASSIGNATION IMPLICITE.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL AMESC-DEMES0
AMESC: @MOT '0@@@@ < ADRESSE-OCTET DU BUFFER D'UNE 'DEMESC'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL COESC-DEMES0
COESC: @MOT '0@@@@ < LONGUEUR-OCTET DU BUFFER D'UNE 'DEMESC'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL ARGESC-DEMES0
ARGESC: @MOT '0@@@@ < ARGUMENT VARIABLE D'UNE 'DEMESC'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL NVPIN
NVPIN: @VAL '0@@@@ < 'NVP' STANDARD D'ENTREE.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL NVPOUT
NVPOUT: @VAL '0@@@@ < 'NVP' STANDARD DE SORTIE.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL NVPDLN
NVPDLN: @VAL '0@@@@ < 'NVP' D'ACCES A 'DLN' DU 'SGN'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL NVPSTN
NVPSTN: @VAL '0@@@@ < 'NVP' D'ACCES A 'STN' DU 'SGN'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL NVPLON
NVPLON: @VAL '0@@@@ < 'NVP' D'ACCES A 'LON' DU 'SGN'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL NVPLNS
NVPLNS: @VAL '0@@@@ < 'NVP' D'ACCES A 'LNS' DU 'SGN'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL NVPLNU
NVPLNU: @VAL '0@@@@ < 'NVP' D'ACCES A 'LNU' DU 'SGN'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL NVPNXP
NVPNXP: @VAL '0@@@@ < 'NVP' D'ACCES A 'NXP' DU 'SGN'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL NVPNXS
NVPNXS: @VAL '0@@@@ < 'NVP' D'ACCES A 'NXS' DU 'SGN'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL NVPDKU
NVPDKU: @VAL '0@@@@ < 'NVP' D'ACCES A 'DKU'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL NVPCU3
NVPCU3: @VAL '0@@@@ < 'NVP' D'ACCES A 'CU3'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL NVPVDK
NVPVDK: @VAL '0@@@@ < 'NVP' D'ACCES AU DISQUE VIDEO.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL RA
RA: @VAL '0@@@@ < REGISTRE 'A'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL RB
RB: @VAL '0@@@@ < REGISTRE 'B'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL RX
RX: @VAL '0@@@@ < REGISTRE 'X'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL RY
RY: @VAL '0@@@@ < REGISTRE 'Y'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL RC
RC: @VAL '0@@@@ < REGISTRE 'C'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL RL
RL: @VAL '0@@@@ < REGISTRE 'L'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL RW
RW: @VAL '0@@@@ < REGISTRE 'W'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL RK
RK: @VAL '0@@@@ < REGISTRE 'K'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL RP
RP: @VAL '0@@@@ < REGISTRE 'P'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL RS
RS: @VAL '0@@@@ < REGISTRE 'S'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL RAD
RAD: @VAL '0@@@@ < REGISTRE 'ADRESSE MEMOIRE'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL RM
RM: @VAL '0@@@@ < REGISTRE 'MEMOIRE'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL KRA
KRA: @VAL '0@@@@ < NOM DU REGISTRE 'A'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL KRB
KRB: @VAL '0@@@@ < NOM DU REGISTRE 'B'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL KRX
KRX: @VAL '0@@@@ < NOM DU REGISTRE 'X'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL KRY
KRY: @VAL '0@@@@ < NOM DU REGISTRE 'Y'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL KRC
KRC: @VAL '0@@@@ < NOM DU REGISTRE 'C'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL KRL
KRL: @VAL '0@@@@ < NOM DU REGISTRE 'L'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL KRW
KRW: @VAL '0@@@@ < NOM DU REGISTRE 'W'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL KRK
KRK: @VAL '0@@@@ < NOM DU REGISTRE 'K'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL KRP
KRP: @VAL '0@@@@ < NOM DU REGISTRE 'P'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL KRSTAT
KRSTAT: @VAL '0@@@@ < NOM DU REGISTRE 'S'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL KRAD
KRAD: @VAL '0@@@@ < NOM DU REGISTRE 'ADRESSE MEMOIRE'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
<*******************************************************************************
XWOR%F: VAL KRMEM
KRMEM: @VAL '0@@@@ < NOM DU REGISTRE 'MEMOIRE'.
CALL #SISP CMS5 GEN CTE#
<*******************************************************************************
Copyright (c) Jean-François Colonna, 2011-2013.
Copyright (c) CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2011-2013.