< 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 <K<K<K DFLOT:: VAL $-ZERO2 < LONGUEUR D'UN "MOT" FLOTTANT !!! <******************************************************************************* $EQU ZERO2 < ANNULATION DU CODE GENERE... P:: VAL D < PASSAGE A UN ELEMENT PRECEDENT. Z:: VAL 1 < POUR CE QUI COMMENCE A 0... B:: VAL Z < PARCEQUE LE PREMIER BIT D'UN MOT < A LE RANG 0... I:: VAL 1 < POUR LES INCREMENTATIONS/DECREMENTATIONS. E:: VAL 1 < POUR LES DIVISIONS PAR EXCES (Y+X-E/X). S:: VAL BIT < POUR LES DECALAGES D'UN CRAN. L:: VAL 0 < RANG DU BIT DE GAUCHE ('LEFT') D'UN MOT. O:: VAL ZERO-ZERO < ELEMENT COURANT,... W:: VAL 1 < ELEMENT UNIQUE... XXXMOY:: VAL W+W < POUR FAIRE UNE MOYENNE... J:: VAL 0 < VARIABLE DE TRAVAIL... XWOR%1: VAL NOCMO=K IF BIT>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 : < <XXX: VAL <EXPRESSION AVEC 'FMASK', 'FVAL',...>?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 : < <XXX: VAL MSYMBN?MSYMBM=FMASK+MSYMBN=FVAL(K?YYY=FOSYMM < (OU 'YYY' DESIGNE UNE VARIABLE DEFINIE < A L'AIDE DES MASQUES 'MSYMBI' ET 'MSYMBL' < PRECISANT LA POSITION DU SYMBOLE DANS LA < CARTE DYNAMIQUE COURANTE) < < AUTRE EXEMPLE: ON POURRA RENDRE < UN SYMBOLE QUELCONQUE EQUIVALENT AU < COMPTEUR D'ASSEMBLAGE "$" EN ECRIVANT : <XXX: VAL MSYMBM=FMASK(K?YYY=FOSYMM < (OU 'YYY' A LE MEME SENS QUE CI DESSUS, < ET CONCERNE LE SYMBOLE A RENDRE < EQUIVALENT AU "$"). < < < NOTA IMPORTANT : < BIEN EVIDEMMENT, LA PLUS GRANDE < PRUDENCE SERA REQUISE LORS DE L'UTI- < LISATION DE CES FONCTIONS !!! < < FOSYMB:: VAL 'F7 < FONCTION DE GESTION D'UN SYMBOLE. < < DEFINITION DES SOUS-FONCTIONS : < FSSYMT:: VAL '00 < PERMET DE TESTER L'ETAT DU SYMBOLE. FSSYMM:: VAL '01 < PERMET DE MODIFIER L'ETAT D'UN < SYMBOLE ARGUMENT (CARTE DYNAMIQUE). < < DEFINITION DES MASQUES DE DEUXIEME OPERANDE DE "=" : < KOLSYM:: VAL M00FF < DEFINITION DE LA SOUS-FONCTION. < < DEFINITION DES FONCTIONS COMPLETES : < XWOR%1: VAL KOLF=FMASK+FOSYMB=FVAL FOSYMT:: VAL KOLSYM=FMASK+FSSYMT=FVAL?XWOR%1 < FONCTION DE TEST DE L'ETAT < DU SYMBOLE ARGUMENT. FOSYMM:: VAL KOLSYM=FMASK+FSSYMM=FVAL?XWOR%1 < FONCTION DE MODIFICATION DE L'ETAT < DU SYMBOLE ARGUMENT. FCSYMT:: VAL FOSYMT < DEFINITION DES FCSYMM:: VAL FOSYMM < FONCTIONS-SYNONYMES. < < DEFINTION DES MASQUES DU PREMIER OPERANDE DE "=" : < MSYMBI:: VAL MFF00 < DEFINITION DE L'INDEX DU PREMIER CARAC- < TERE DU SYMBOLE DANS LA ZONE DYNAMIQUE. MSYMBL:: VAL M00FF < DEFINITION DU NOMBRE DE CARACTERES < DU SYMBOLE. < < RESULTAT : LA VALEUR RENVOYEE (A LAQUELLE A ETE < AJOUTEE L'OCTET SUIVANT LA FONCTION 'FOSYMB' < DANS LE DEUXIEME OPERANDE DE "=") EST LA < SUPERPOSITION D'UN CERTAIN NOMBRE DE MASQUES < DEFINIS CI-APRES ; ON NOTERA ENFIN QU'UNE < VALEUR NULLE CORRESPOND A UN SYMBOLE INEXISTANT... < MSYMBX:: VAL '8000 < CE MASQUE INDIQUE QU'UNE INDEXATION A < ETE DEMANDEE SUR CE SYMBOLE ALORS < QU'IL N'EST PAS ENCORE DEFINI. MSYMB1:: VAL '4000 < CE MASQUE, LORSQU'IL EST PRESENT < INDIQUE QUE LE SYMBOLE N'A ETE < REFERENCE EN AVANT QU'UNE SEULE < FOIS ; POUR LES REFERENCES EN < AVANT SUIVANTES, IL EST ABSENT, < AINSI QU'APRES SA DEFINITION. MSYMBS:: VAL '3F00 < CE MASQUE DONNE LE NUMERO DE SECTION < LORSQUE LE SYMBOLE EXISTE (DEFINI), ET < EST TRANSLATABLE ; UN NUMERO NUL < EST RENVOYE DANS LES AUTRES CAS... MSYMBN:: VAL '0080 < CE MASQUE SIGNIFIE QUE LE SYMBOLE < A ETE REFERENCE SANS ETRE ENCORE < DEFINI (IL SERA DONC TRANSLATABLE). MSYMBA:: VAL '0040 < CE MASQUE INDIQUE QUE LE SYMBOLE A < ETE DEFINI DE MANIERE ABSOLUE (DONC < PAR UNE DIRECTIVE 'VAL'). MSYMBR:: VAL '0020 < CE MASQUE INDIQUE QUE LE SYMBOLE < A ETE REFERENCE PAR UNE DIREC- < TIVE 'REF'. MSYMBD:: VAL '0010 < CE MASQUE INDIQUE QUE LE SYMBOLE < EST TRANSLATABLE, ET DEJA DEFINI < DANS UNE 'DSEC'. MSYMBC:: VAL '0008 < CE MASQUE INDIQUE QUE LE SYMBOLE EST < DEJA CHAINE (IL EST RENCONTRE ASSOCIE < AU MASQUE 'MSYMBN'). MSYMBF:: VAL '0004 < CE MASQUE INDIQUE QUE LE SYMBOLE A < ETE REFERENCE DANS UNE DIRECTIVE 'DEF'. < (QU'IL SOIT DEFINI, OU REFERENCE < EN AVANT). MSYMBM:: VAL '0003 < CE MASQUE DONNE LE NOMBRE DE MOTS < UTILISES POUR RANGER LE NOM DU < SYMBOLE ; BIEN QU'INUTILE, CE MASQUE < DEVRA TOUJOURS ETRE UTILISE LORS < DES DEFINITIONS DES MASQUES DE MODI- < FICATION DES ETATS DE SYMBOLES, PUISQU' < EN EFFET, LES FONCTIONS 'FMASK' ET 'FVAL' < PROVOQUENT UN CADRAGE A GAUCHE DE LA < VALEUR FONCTION DE LA POSITION DU < MASQUE DONNE. IF MSYMBM=K-K,,XEIF%, IF A T T E N T I O N : LE MASQUE IF 'MSYMBM' DOIT ETRE CADRE A DROITE !!! XEIF%: VAL ENDIF SYMBX:: VAL K < CETTE VALEUR EST RENVOYEE LORSQUE LE < SYMBOLE EST INEXISTANT (NI DEFINI, < NI REFERENCE...). 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 C O N V E R S I O N S H E X A - D E C I M A L E S : < < < FONCTION : < CES FONCTIONS DE L'ASSEMBLEUR, < PERMETTENT DE CONVERTIR UN CHIFFRE < ASCI HEXA-DECIMAL EN BINAIRE ('FOCAB'), < OU BIEN UN OU DEUX CHIFFRES BINAIRES EN < DEUX CARACTERES ASCI HEXA-DECIMAUX. < DE PLUS, ELLES PERMETTENT DORENAVANT < LA CONVERSION D'EXPRESSIONS ABSOLUES < EN EXPRESSIONS TRANSLATABLES, ET < INVERSEMENT... < < FOCONV:: VAL 'FA < FONCTION DE CONVERSION. < < DEFINITION DES SOUS-FONCTIONS : < FSBA:: VAL '00 < CONVERSION DE UN OU DEUX CHIFFRES < BINAIRE EN DEUX CARACTERES ASCI. FSAB:: VAL '01 < CONVERSION D'UN CARACTERE ASCI HEXA- < DECIMAL EN BINAIRE. FSTA:: VAL '02 < CONVERSION TRANSLATABLE --> ABSOLU, FSAT:: VAL '03 < CONVERSION ABSOLU --> TRANSLATABLE. < < MASQUE DE SOUS-FONCTION : < KOLCON:: VAL M00FF < DEFINITION DU MASQUE DE SOUS-FONCTION < DANS L'OPERANDE DROIT DE "=". < < DEFINITION DES FONCTIONS COMPLETES : < XWOR%1: VAL KOLF=FMASK+FOCONV=FVAL FOCBA:: VAL KOLCON=FMASK+FSBA=FVAL?XWOR%1 < CONVERSION DE UN OU DEUX CHIFFRES < BINAIRES EN DEUX CARACTERES ASCI. FOCAB:: VAL KOLCON=FMASK+FSAB=FVAL?XWOR%1 < CONVERSION DE UN CARACTERE ASCI < EN UN NOMBRE BINAIRE. FCBA:: VAL FOCBA < DEFINITION DES FCAB:: VAL FOCAB < FONCTIONS-SYNONYMES. FCTA:: VAL KOLCON=FMASK+FSTA=FVAL?XWOR%1 < FONCTION COMPLETE DE CONVERSION < TRANSLATABLE --> ABSOLU. FCAT:: VAL KOLCON=FMASK+FSAT=FVAL?XWOR%1 < FONCTION COMPLETE DE CONVERSION < ABSOLU --> TRANSLATABLE. PAGE < < < V A L I D A T I O N D E ' Z E R O ' : < < IF ZERO=FCTA-K,,XEIF%, IF ATTENTION : TOUT VA MERDER LAMENTABLEMENT !!! XEIF%: VAL ENDIF PAGE < < < F O N C T I O N D E R E F E R E N C E < A U N E I N S T R U C T I O N : < < < FONCTION : < CETTE FABULEUSE FONCTION PERMET < D'APPLIQUER A UNE VALEUR CALCULEE < UNE INSTRUCTION QUELCONQUE DU LANGAGE < MACHINE. < ON NOTERA QUE LES REGISTRES DE L'ASSEMBLEUR < AVANT L'EXECUTION DE CETTE INSTRUCTION < SONT AINSI POSITIONNES : < 'A' <-- L'OPERANDE GAUCHE DE "=", < 'B' <-- 0, < 'X' <-- 0, < 'Y' <-- L'OCTET SUIVANT LA FONCTION 'FOINST. < L'INSTRUCTION A EXECUTER AURA ETE DEFINIE < PAR SA VALEUR, DANS LA MEME EXPRESSION < PAR LA FONCTION 'FMASK' (ET OUI !?!?!??). < APRES EXECUTION, L'ASSEMBLEUR EFFECTUERA < LES OPERATIONS SUIVANTES : < 'A' <-- ('A').EOR.('B'), < 'A' <-- ('A').EOR.('X'), < PERMETTANT SI L'INSTRUCTION EXECUTEE NE < MODIFIE QUE L'UN DES 3 REGISTRES 'A', < 'B' OU 'X' DE RECUPERER CE RESULTAT DANS < LE REGISTRE 'A', PUIS DANS L'EXPRESSION < COURANTE EN FAISANT EVENTUELLEMENT UN < 'EOR' PERMETTANT DE RE-SEPARER LE BON < RESULTAT. < < FOINST:: VAL 'FB < FONCTION D'EXECUTION DE L'INSTRUCTION < DONT LE CODE EST DONNE PAR L'OPERANDE < GAUCHE DE L'OPERATEUR "=". KOLY:: VAL M00FF < DEFINITION DU MASQUE PERMETTANT < DE DONNER L'OCTET A METTRE AU PREALABLE < DANS LE REGISTRE 'Y'. < < DEFINITION DE LA FONCTION COMPLETE (SI NECESSAIRE) : < FCINST:: VAL KOLF=FMASK+FOINST=FVAL < EXECUTION DE L'INSTRUCTION DONT LE < CODE EST DONNE PAR L'OPERANDE GAUCHE < DE "=", AVEC 'Y' <-- 0. < < < Q U E L Q U E S I N S T R U C T I O N S < U T I L E S : < < < NOTA : < LES INSTRUCTIONS DEFINIES CI-DESSOUS < TRANSFORMENT LE CONTENU DU REGISTRE 'A' < EN GENERAL ; ON NOTERA POUR 'COSBT', < 'CORBT' ET 'COIBT', POUR ATTEINDRE < UN BIT DE RANG DIFFERENT DE '0', IL < SUFFIT D'AJOUTER CE RANG AU CODE < DE L'INSTRUCTION... < < PROG XWOR%1: VAL $-ZERO < SAUVEGARDE DU "$", EN EFFET ON VA < GENERER DU CODE INUTILE... <******************************************************************************* SCLS K COSCLS:: VAL '0000000@@@@ < DECALAGE CIRCULAIRE A GAUCHE SIMPLE. <******************************************************************************* <******************************************************************************* SARS K COSARS:: VAL '0000000@@@@ < DECALAGE ARITHMETIQUE A DROITE SIMPLE. <******************************************************************************* <******************************************************************************* WORD '1E45 COIDES:: VAL '0000000@@@@ < RECUPERATION DE L'IDENTIFICATEUR < SYSTEME A L'ASSEMBLAGE ('IDESC'). <******************************************************************************* <******************************************************************************* WORD '1E15 COGETM:: VAL '0000000@@@@ < ACCES ABSOLU A LA MEMOIRE, 'BITX' < PERMETTANT DE DISCRIMINER LES 'NSP' < DES ADRESSES MEMOIRE ABSOLUES. <******************************************************************************* <******************************************************************************* SWBR A,A COSWBR:: VAL '0000000@@@@ < PERMUTATION DES OCTETS DE 'A'. <******************************************************************************* <******************************************************************************* SBT L COSBT:: VAL '0000000@@@@ < MISE A '1' DU BIT '0' DE 'A'. <******************************************************************************* <******************************************************************************* RBT L CORBT:: VAL '0000000@@@@ < MISE A '0' DU BIT '0' DE 'A'. <******************************************************************************* <******************************************************************************* IBT L COIBT:: VAL '0000000@@@@ < INVERSION DU BIT '0' DE 'A'. <******************************************************************************* <******************************************************************************* DBT CODBT:: VAL '0000000@@@@ < MISE DANS LE REGISTRE 'X', DU NUMERO < DU PREMIER BIT A '1' DANS 'A'. <******************************************************************************* < < ANNULATION DU CODE GENERE : < XWOR%2: VAL $-ZERO XWOR%2: VAL XWOR%2-XWOR%1 < LONGUEUR DU CODE GENERE... $EQU ZERO+XWOR%1 DZS XWOR%2 < ON LE REMET A '0000, ET ON RECULE : $EQU ZERO+XWOR%1 < ET VOILA... < < MASQUE IMPORTANT : < M8000:: VAL COSBT?BITSIG=FMASK(K=FCINST PAGE < < < F O N C T I O N S D E ' T M O B T ' : < < < NOTA : < 'TMOBT' EST UN SOUS-PROGRAMME < D'ACTION SUR 1 BIT PARMI UN < CHAMP DONNE ; IL RECOIT DANS < LE REGISTRE 'Y' LA FONCTION < 'FONXXX' A EXECUTER, CHOISIE < PARMI LES SUIVANTES : < < <******************************************************************************* FONTB:: VAL K < TEST BIT, FONSB1:: VAL '0@@@@+I < SET BIT AVEC VERIFICATION, FONRB0:: VAL '0@@@@+I < RESET BIT AVEC VERIFICATION, FONIB:: VAL '0@@@@+I < INVERSION BIT, FONRB:: VAL '0@@@@+I < RESET BIT, FONSB:: VAL '0@@@@+I < SET BIT. <******************************************************************************* PAGE < < < F O N C T I O N D ' E X E C U T I O N < D ' U N S O U S - P R O G R A M M E < G E N E R E D Y N A M I Q U E M E N T : < < < FONCTION : < CETTE FONCTION AUX POSSIBILITES < INSOUPCONNEES, PERMET D'EXECUTER < UN SOUS-PROGRAMME GENERE EN LANGAGE < BINAIRE DANS LA CARTE DYNAMIQUE ; < CETTE GENERATION AURA ETE FAITE < AU PREALABLE A L'AIDE D'APPLICA- < TIONS DE LA FONCTION 'KOLSTO' QUI < PERMET DE METTRE UN OCTET QUELCONQUE < EN UN ENDROIT QUELCONQUE DU CODE < DE L'ASSEMBLEUR (ET EN PARTICULIER < DANS LA CARTE DYNAMIQUE). < CE SOUS-PROGRAMME EST APPELE PAR < UN 'BSR' EXECUTE PAR L'ASSEMBLEUR, < L'ADRESSE DU SOUS-PROGRAMME ETANT < EGALE A L'ADRESSE DE LA CARTE DYNA- < MIQUE TRANSLATEE DE LA VALEUR DE < L'OCTET SUIVANT LA FONCTION 'FOEXSP' < (TOUTES ADRESSES EXPRIMEES EN MOTS). < DE PLUS, CE SOUS-PROGRAMME RECOIT < COMME ARGUMENT DANS LE REGISTRE 'A' < L'OPERANDE GAUCHE DE "=". AU RETOUR < L'ASSEMBLEUR SUPPOSE QUE LE REGISTRE < 'A' CONTIENT LE RESULTAT QU'IL AFFECTERA < A L'EXPRESSION COURANTE. < BIEN ENTENDU, CE SOUS-PROGRAMME < DOIT SE TERMINER PAR UN 'RSR'... < < FOEXSP:: VAL 'FC < FONCTION D'EXECUTION D'UN SOUS- < PROGRAMME DYNAMIQUE. KOLSP:: VAL M00FF < DEFINITION DU MASQUE PERMETTANT DE < DONNER LA TRANSLATION A OPERER SUR < L'ADRESSE DE LA CARTE DYNAMIQUE POUR < OBTENIR LE POINT D'ENTREE DU SOUS- < PROGRAMME. < < DEFINITION DE LA FONCTION COMPLETE (SI NECESSAIRE) : < FCEXSP:: VAL KOLF=FMASK+FOEXSP=FVAL PAGE < < < P U S H / P U L L : < < < FONCTION : < CES 2 FONCTIONS COMPLETES PERMETTENT < D'ATTEINDRE LES FONCTIONS D'EMPILEMENT < ('PUSH')/DEPILEMENT ('PULL') DE L'ASSEM- < BLEUR ; LE 'PUSH' PERMET DE SAUVEGARDER < LA VALEUR DE L'EXPRESSION SITUEE A < GAUCHE DE "=", ALORS QUE 'PULL' AJOUTE < A L'EXPRESSION COURANTE L'ENTREE COURANTE < DE LA PILE (ON NOTERA QUE POUR FAIRE UN < DEPILEMENT SANS ADDITION, IL SUFFIT QUE < L'OPERANDE GAUCHE DE "=" AIT UNE VALEUR < NULLE). < < FOPILE:: VAL 'FE < FONCTION GENERALE D'EMPILEMENT < ET DE DEPILEMENT. < < SOUS-FONCTIONS : < FSPUSH:: VAL '00 < EMPILEMENT DE LA PARTIE GAUCHE DE "=". FSPULL:: VAL '01 < DEPILEMENT, ET ADDITION A LA PARTIE < GAUCHE DE "=". FSPEXU:: VAL '02 < DEPILEMENT ; L'OPERANDE GAUCHE DE < L'OPERATEUR "=" SUBSISTE, ALORS < QUE LA PARTIE IMMEDIATEMENT A DROITE < (C'EST-A-DIRE LA FONCTION 'FCPEXU') < EST REMPLACEE PAR LA VALEUR DEPILEE ; < L'OPERATEUR "=" EST ENSUITE REINTER- < PRETE ; AINSI ON 'EXECUTE' LA VALEUR < DEPILEE... < < MASQUE DE SOUS-FONCTION : < KOLPIL:: VAL M00FF < LA SOUS-FONCTION EST DONNEE A LA SUITE < DE LA FONCTION. < < DEFINITION DES FONCTIONS COMPLETES : < XWOR%1: VAL KOLF=FMASK+FOPILE=FVAL FOPUSH:: VAL KOLPIL=FMASK+FSPUSH=FVAL?XWOR%1 < EMPILEMENT DE LA PARTIE GAUCHE DE "=". FOPULL:: VAL KOLPIL=FMASK+FSPULL=FVAL?XWOR%1 < DEPILEMENT, ET ADDITION A LA PARTIE < GAUCHE DE "=". FOPEXU:: VAL KOLPIL=FMASK+FSPEXU=FVAL?XWOR%1 < DEPILEMENT, PUIS RE-EXECUTION DE "=", < AVEC COMME OPERANDE DROIT LA VALEUR < DEPILEE. FCPUSH:: VAL FOPUSH < DEFINITION DES FCPULL:: VAL FOPULL < FONCTIONS-SYNONYMES. FCPEXU:: VAL FOPEXU PAGE < < < R E S T E D ' U N E D I V I S I O N : < < < FONCTION : < CETTE FONCTION PERMET DE RECU- < PERER LE RESTE DE LA DERNIERE < DIVISION ENTIERE EFFECTUEE DANS < L'EXPRESSION COURANTE, OU BIEN < UNE VALEUR NULLE S'IL N'Y A PAS < EU DE DIVISION ; CE RESTE EST < AJOUTE A LA PARTIE GAUCHE DE "=", < AINSI QU'A L'OCTET SUIVANT L'OCTET < DE FONCTION. < < FOREST:: VAL 'FD < RESTE D'UNE DIVISION ENTIERE. < < DEFINITION DE LA FONCTION COMPLETE (SI NECESSAIRE) : < FCREST:: VAL KOLF=FMASK+FOREST=FVAL PAGE < < < S I G N E D ' U N E E X P R E S S I O N : < < < FONCTION : < CETTE FONCTION PERMET DE CALCULER < LE SIGNE DE L'EXPRESSION FIGURANT A < GAUCHE DE "=" ; CE SIGNE EST DONNE < PAR UNE VALEUR NUMERIQUE ('SIGN.'), < AUQUEL EST AJOUTE L'OCTET SUIVANT < L'OCTET DE FONCTION. < < FOSIGN:: VAL 'FF < SIGNE DE LA PARTIE GAUCHE DE "=". < < DEFINITION DE LA FONCTION COMPLETE (SI NECESSAIRE) : < FCSIGN:: VAL KOLF=FMASK+FOSIGN=FVAL < < DEFINITION NUMERIQUE DU SIGNE : < SIGN0:: VAL K < CETTE EXPRESSION EST NULLE. SIGNM:: VAL SIGN0-I < L'EXPRESSION FIGURANT A GAUCHE DE "=" < EST NEGATIVE (STRICTEMENT). SIGNP:: VAL SIGN0+I < CETTE EXPRESSION EST STRICTEMENT < POSITIVE. PAGE < < < C A R A C T E R E S H E X A - D E C I M A U X : < < HZERO:: VAL 0=FCBA(MOCD < 0, HNEUF:: VAL BASE10-Z=FCBA(MOCD < 9, HA:: VAL BASE10=FCBA(MOCD < A, HF:: VAL BASE16-Z=FCBA(MOCD < F. PAGE < < < D E F I N I T I O N D ' U N E P I L E < " P U S H " / " P U L L " : < < XLMPIL:: VAL MOCG < DONNE LA LONGUEUR MAXIMALE EN MOTS DE < LA PILE (NON COMPRIS LE POINTEUR QUE < L'ON DECRIT ICI). XLCPIL:: VAL MOCD < DONNE LA LONGUEUR COURANTE DE LA PILE ; < ELLE EST EN GENERAL NULLE INITIALEMENT. PAGE < < < D E F I N I T I O N D E C H E C K - S U M S < S U R L E C O D E D U S Y S T E M E : < < < FONCTION : < ON VA DISTINGUER LES < PARTIES MODIFIABLES DE < 'CMS5' (OU "RAM") DES < PARTIES NON MODIFIABLES < (OU "ROM") ; LE SYSTEME < EST DONC DECOUPE EN BLOCS < DE TYPE "ROM" ALTERNANT < AVEC DES BLOCS DE TYPE "RAM" < REPERES AVEC DES CHAINAGES, < DONT LE FORMAT EST : < < CHAINA:: MOT O < CHAINAGE ARRIERE VERS LE BLOC PRECEDENT < QUI EST FORCEMENT DE L'AUTRE TYPE QUE < LE BLOC COURANT. CHAINX:: MOT CHAINA+D < CHECK-SUM ('EOR') DU BLOC COURANT ; CE < MOT N'EST LA QUE POUR LES BLOCS DE < TYPE "RAM". < < < LE FORMAT DU SYSTEME EST < DONC DORENAVANT, SACHANT < QUE L'ON COMMENCE ET QUE < L'ON FINIT SUR <ROM> : < < CHAINA < FIN DE CHAINE. < <ROM> < CHAINA < CHAINX < CHECK-SUM DE <ROM> CI-DESSUS. < <RAM> < CHAINA < <ROM> < CHAINA < CHAINX < CHECK-SUM DE <ROM> CI-DESSUS. < <RAM> < CHAINA < <ROM> < CHAINA < DEBUT DE CHAINE. < CHAINX < CHECK-SUM DE <ROM> 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 <CHAINA>, OU BIEN < <CHAINA><CHAINX> 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 <ACN> DOIVENT < ETRE CONCATENES AUX <NOMS>. 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 <VALEUR> SUIT IMMEDIATEMENT < LE <NOM>. 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<MODE-MAITRE>. < 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... < < (<NOM>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 <DUMMY>. 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 '!<R/C>' ; < PRESC<--0 : LORS DU 'JOB-ENTRY', < PRESC<--0 : LORS DE LA COM- < MANDE '!<EOT>', < 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<AL<1,2,4>,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 <NVP>=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 <ACN>. U:: VAL XXACN-Z < POUR ATTEINDRE LE DEUXIEME MOT <ACN>. 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' (<RETURN>). CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL K6D K6D: @VAL '0@@@@ < CARACTERE "EXTENSION" <R/C>+<LF>. 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# <*******************************************************************************