< S I S C M S 5 5 PAGE PAGE < < < D C T D E D I A L O G U E < M A I T R E --> E S C L A V E : < < DCTPR1: EQU $ DCTPP1: EQU DCTPR1 < CREE POUR DES RAISONS D'ASSEMBLAGE < ET D'EDITION DE LIENS. PSTPR1: WORD K;K;K;K;COM+DEPCS;DCTPR1;NIL;PILPR1;HANDLR;SMST;SO;SE #@ASCI " PR1" < #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 HDLPR1 < HANDLER DE DIALOGUE MAITRE --> ESCLAVE. WORD ITPR1 < TRAITEMENT DES IT (PAR 'IPI'). WORD K;K < ETAT. WORD XBITS0 < BITSEM. WORD XXNTRY;TRYVID < NTRIES & FRTRY. WORD K < HSTATS. WORD 8 < TESTO#0 : TESTER LES TIME-OUT... WORD XXDCTF < 'DCT' NON CONNECTABLE... WORD XFONBA < DCTFUP ("ALTITUDES" DES FONCTIONS). < < < Z O N E V A R I A B L E : < < VARPR1: EQU $ IF VARPR1-DCTPR1-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF < < FONCTIONS RECONNUES : < XWOR%1: VAL K < INITIALISATION DU CUMUL. FPRIN:: VAL FGR < FONCTION 'MVTM' : MOUVEMENT DE ZONES < RELATIVES VERS DES ZONES ABSOLUES. XWOR%1: VAL COSBT?FPRIN=FMASK(K?XWOR%1=FCINST FPROUT:: VAL FGW < FONCTION 'MVTS' : MOUVEMENT DE ZONES < ABSOLUES VERS DES ZONES RELATIVES. XWOR%1: VAL COSBT?FPROUT=FMASK(K?XWOR%1=FCINST WORD XWOR%1 PRFON:: VAL $-D-VARPR1 < LISTE DES FONCTIONS DE DIALOGUE < MAITRE --> ESCLAVE RECONNUES. WORD PRSP,X APRSP:: VAL $-D-VARPR1 < LISTE DES MODULES SPECIFIQUES. < < SYNCHRONISATION MAITRE --> ESCLAVE : < XXRAF0:: VAL K < CODE "RIEN A FAIRE POUR L'ESCLAVE"... IF XXRAF0-K,,XEIF%, IF ATTENTION : CA VA MERDER !!! XEIF%: VAL ENDIF WORD XXRAF0 < 0 : RIEN A FAIRE POUR L'ESCLAVE, < -1 : FIN DE SERVICE NON ENCORE < ACQUITTE PAR LE MAITRE, < +1 : QUELQUE CHOSE A FAIRE POUR < L'ESCLAVE (DEMANDE DE TETE). PRIND:: VAL $-D-VARPR1 < MOT DE SYNCHRONISATION DU MAITRE < ET DE L'ESCLAVE. WORD NIL PRSAVW:: VAL $-D-VARPR1 < POUR TRANSMETTRE L'ADRESSE DE LA < DEMANDE DE TETE... < < SYNCHRONISATION DE L'ESCLAVE SUR L'HORLOGE : < WORD EATCOP FATCOP:: VAL $-D-VARPR1 < RELAI VERS LA PATTERN CYCLIQUE DE < L'HORLOGE INDIQUANT LE TYPE DE COPY < A FAIRE A L'INSTANT T. WORD NILK SATCOP:: VAL $-D-VARPR1 < SAUVEGARDE DE LA PATTERN CYCLIQUE < PRECEDENTE. < < ACCES AU 'CBJ' DU SYSTEME < 'TV' MOYENNE DEFINITION : < WORD ACCBJ?FPHIN PRCBJ:: VAL $-D-VARPR1 < LECTURE DU MOT D'ETAT2 DU 'CBJ'. WORD ACCBJ?FPHETB PRCBJI:: VAL $-D-VARPR1 < LECTURE DU MOT D'ETAT1 DU 'CBJ'. WORD ACCBJ?FPHCMD PRCBJC:: VAL $-D-VARPR1 < ENVOI D'UNE COMMANDE AU 'CBJ'. < < PREPARATION DU 'IM' MAITRE : < WORD RIMMST PIMMST:: VAL $-D-VARPR1 < ADRESSE DE LA VALEUR DU REGISTRE 'IM' < DU PROCESSEUR MAITRE ; EN GENERAL, SEUL < LE PUPITRE EST MASQUE, MAIS IL SE PEUT < AUSSI QUE LE 'CBJ' LE SOIT, S'IL EST < ABSENT OU EN DEFAUT... < < ACCES AU 'CBM' DU SYSTEME < 'TV' BASSE DEFINITION : < WORD ACCBM?FPHIN PRCBM:: VAL $-D-VARPR1 < LECTURE DU MOT D'ETAT2 DU 'CBM'. WORD ACCBM?FPHETB PRCBMI:: VAL $-D-VARPR1 < LECTURE DU MOT D'ETAT1 DU 'CBM'. WORD ACCBM?FPHCMD PRCBMC:: VAL $-D-VARPR1 < ENVOI D'UNE COMMANDE AU 'CBM'. < < TRAITEMENT DES 'SYSERS' SUR LE PROCESSEUR ESCLAVE : < WORD SYSEP ASYSEP:: VAL $-D-VARPR1 < SOUS-PROGRAMME DES SYSERS ESCLAVE... < < TRAITEMENT DU DEFAUT SECTEUR, ET COPY : < WORD PRDEF APRDEF:: VAL $-D-VARPR1 < SOUS-PROGRAMME DE TEST DES DEFAUTS < SECTEUR EN ATTENTE ET TRAITEMENT DE < CELUI-CI PUIS RESTART DE L'ESCLAVE. WORD PRDEF1 APRDE1:: VAL $-D-VARPR1 < BRANCHEMENT AU CAS OU IL N'Y A PAS < DE DEFAUT SECTEUR EN ATTENTE... WORD PILPT1 PRSAVK:: VAL $-D-VARPR1 < ZONE DE SAUVEGARDE DU REGISTRE 'K' < LORS D'UN DEFAUT SECTEUR, ET VALEUR < INITIALE DU REGISTRE 'K' DE L'ESCLAVE < POUR LE PREMIER RESTART. XWOR%1: VAL COSBT?MS=FMASK(K=FCINST XWOR%1: VAL COSBT?WARNG=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?IOM=FMASK(K?XWOR%1=FCINST SAVST0:: VAL XWOR%1 < BITS OBLIGATOIREMENT A 1 DANS 'ST' APRES < UN DEFAUT SECTEUR SUR LE PROCESSEUR < ESCLAVE. WORD SAVST0 PRSAVS:: VAL $-D-VARPR1 < VALEUR DE 'ST' LORS D'UN DEFAUT SECTEUR. WORD KOPY APCOPY:: VAL $-D-VARPR1 < SOUS-PROGRAMME DE PREPARATION DES < INFORMATIONS DE COPY. < < DONNEES DES 'MOVE' : < K64:: VAL XX64K < DEFINIE LA CONSTANTE 64K... KSIMS:: VAL XX64K/2+XX64K < DEFINITION DU DEBUT DE LA ZONE DE < SIMULATION DU SWAPPING EN MEMOIRE. XWOR%1: VAL XPESC < TAILLE EN 'K-MOTS' DES STACKS UTILISES < POUR LA MEMOIRE... WORD KSIMS>DADR*LK XWOR%7: VAL KSIMS NTRN XWOR%8: VAL XWOR%7/XPESC TRN IF XWOR%8*XPESC-XWOR%7,,XEIF%, IF ATTENTION : LE DEBUT DE LA ZONE DE SWAPPING IF SUR 'PR1' DOIT AU MOINS ETRE A UNE FRONTIERE IF DE 32K, AFIN QUE LES ESPACES UTILISATEURS EN IF MEMOIRE HAUTE NE SOIENT PAS A CHEVAL SUR DES IF FRONTIERES DE 64K !!! XEIF%: VAL ENDIF PRMEM:: VAL $-D-VARPR1 < PREMIERE ADRESSE MEMOIRE SUPERIEURE < A 64K DISPONIBLE POUR LE SWAPPING < MEMOIRE-MEMOIRE EN MULTIPLE DE 16 MOTS. IF KSIMS-K64,,XEIF%,XEIF% IF ATTENTION : LA DEFINITION DU DEBUT DE LA ZONE IF DE SIMULATION DU SWAPPING EN MEMOIRE EST MAUVAISE !!! XEIF%: VAL ENDIF WORD XKMEMX>DADR*LK PRMAX:: VAL $-D-VARPR1 < ADRESSE PRESUMEE DE LA PREMIERE < MEMOIRE INEXISTANTE ; CETTE VALEUR < EST EN FAIT DETERMINEE LORS DE LA < PROCEDURE DE RESTART... WORD LK PR1K:: VAL $-D-VARPR1 < 1K MOTS... WORD NILK PRLON:: VAL $-D-VARPR1 < 'YY7' MOTS OU 1K MOTS... WORD TCPROG*YY7>DADR PRLZE:: VAL $-D-VARPR1 < LONGUEUR EN DADR-MOTS DE LA ZONE DE < SWAPPING D'UN ESCLAVE. WORD TZSWAP TASWAP:: VAL $-D-VARPR1 < NOMBRE DE SECTEURS OCCUPES PAR LA ZONE < DE SWAPPING D'UN UTILISATEUR SUR 'DKS', WORD TCPROG TAPROG:: VAL $-D-VARPR1 < NOMBRE DE SECTEURS OCCUPES PAR LA ZONE < DE SWAPPING D'UN UTILISATEUR SUR 'PR1'. < < LISTE DES SOUS-PROGRAMMES SPECIFIQUES (FONCTIONS) : < PRSP: EQU $ IF $-PRSP-FPRIN,,XEIF%, IF ATTENTION : LA VALEUR 'FPRIN' EST MAUVAISE !!! XEIF%: VAL ENDIF WORD PRMOV < 'FPRIN' WORD PRDEF IF $-PRSP-FPROUT,,XEIF%, IF ATTENTION : LA VALEUR 'FPROUT' EST MAUVAISE !!! XEIF%: VAL ENDIF WORD PRMOV < 'FPROUT' WORD PRDEF WORD PRDEF WORD PRDEF WORD PRDEF WORD PRDEF WORD PRDEF WORD PRDEF WORD PRDEF WORD PRDEF WORD PRDEF WORD PRDEF WORD PRDEF WORD PRDEF < < < P I L E D U D I A L O G U E < M A I T R E --> E S C L A V E : < < CALL #SISP CMS5 DOL2# PILPR1: EQU $-DEPILE XWPILE: VAL LPILEH+8 CALL #SISP CMS5 GENPIL2# CALL #SISP CMS5 CHECK# PAGE < < < D I A L O G U E M A I T R E --> E S C L A V E : < < < FONCTION : < CE HANDLER RECOIT LES DEMANDES DE < SERVICE QUE LE PROCESSEUR MAITRE DESIRE < SOUMETTRE AU PROCESSEUR ESCLAVE ; SA < FONCTION EST SIMPLE : IL POSITIONNE < UN INDICATEUR ('PRIND') SUR LEQUEL LE < PROCESSEUR ESCLAVE VIENT SE SYNCHRONISER, < PUIS SE MET EN ATTENTE DE FIN DE SERVICE < (SUR 'SIT'), ET C'EST TOUT. < SI LE PROCESSEUR ESCLAVE EST < ABSENT ('PRINEX'), C'EST 'HDLPR1' < QUI EXECUTE DIRECTEMENT LES < MODULES SPECIFIQUES CONCERNES. < < < FONCTIONS RECONNUES : < FPRIN : MOVE 'MVTM' ; IL PERMET DE SIMULER < EN MEMOIRE LES SWAPPINGS 'IN'. < FPROUT : MOVE 'MVTS' ; IL PERMET DE SIMULER < EN MEMOIRE LES SWAPPINGS 'OUT'. < < < RESULTAT : < ETAT0=K : TOUT EST OK... < -1 : TIME OUT SUR L'ESCLAVE (IL DOIT < ETRE ABSENT, LE PAUVRE...). < +1 : FONCTION INEXISTANTE... < < < PASSAGE DES ARGUMENTS MAITRE --> ESCLAVE : < L'ESCLAVE PREND SES ARGUMENTS DANS < LA DEMANDE DE TETE SUR 'HDLPR1', DONT < L'ADRESSE EST TRANSMISE PAR 'PRSAVW' < PLUTOT QUE PAR 'TETE', ON NE SAIT JAMAIS... < < USE L,DCT0 USE W,DEM0 HDLPR1: EQU $ STZ ETAT0 < REINITIALISATION A PRIORI (A CAUSE < DE LA DETECTION DES TIME OUT). < < DEFINITION DES CODES DE SYNCHRONISATION : < XPRCSI:: VAL K < L'ESCLAVE EST 'IDLE'... IF XPRCSI-K,,XEIF%, IF ATTENTION : 'XPRCSI' DOIT ETRE NUL !!! XEIF%: VAL ENDIF XPRCSA:: VAL 1 < L'ESCLAVE A DU TRAVAIL ('ACTIF'). XPRCSF:: VAL -1 < L'ESCLAVE A FINI (NON ACQUITTE). < < VALIDATION DE LA DEMANDE : < LA VAR+PRFON < LISTE DES FONCTIONS RECONNUES, LX ARGDEM+OPDEM < (X)=FONCTION DEMANDEE, TBT L,X < EXISTE-T'ELLE ??? JC PR0001 < OUI, C'EST BON... BSR ASYSER < E R R E U R S Y S T E M E ... JMP PR0003 < ET ON ARRETE LA... < < SYNCHRONISATION MAITRE --> ESCLAVE : < PR0001: EQU $ LXI PROESC CPZ &SYSPRO < LE PROCESSEUR ESCLAVE EXISTE-T'IL ??? IF PRINEX-K,XEIF%,, IF ATTENTION : 'PRINEX' DOIT ETRE NEGATIF !!! XEIF%: VAL ENDIF JGE PR0010 < OUI... < < < P R O C E S S E U R E S C L A V E A B S E N T : < < LX ARGDEM+OPDEM < (X)=FONCTION DEMANDEE, BSR &VAR+APRSP < VERS LES MODULES SPECIFIQUES... JMP PR0004 < VERS LA SORTIE... < < < P R O C E S S E U R E S C L A V E P R E S E N T : < < PR0010: EQU $ CPZ VAR+PRIND < L'ESCLAVE EST-IL BIEN LIBRE ??? JE PR0002 < OUI, OK... BSR ASYSER < E R R E U R S Y S T E M E ... STZ VAR+PRIND < REINITIALISATION DE L'INDICATEUR. PR0002: EQU $ LR W,A < (A)=ADRESSE DE LA DEMANDE ARGUMENT, STA VAR+PRSAVW < QUE L'ON TRANSMET A L'ESCLAVE... LAI XPRCSA STA VAR+PRIND < +1 : ON AVERTIT L'ESCLAVE, QUI < PRENDRA SES ARGUMENTS DANS LA < DEMANDE DE TETE. RQST SIT < ET ON ATTEND : SOIT LA FIN DE SERVCE < (INTERUPTION 'IPI'), SOIT UNE < DETECTION DE TIME OUT... < < SORTIES DIVERSES : < PR0004: EQU $ RSR PR0003: EQU $ EPFI:: VAL '01 < FONCTION INEXISTANTE. LAI EPFI STA ETAT0 < CODE D'ERREUR... JMP PR0004 < ET C'EST TOUT... < < < R O U T I N E D E S I N T E R R U P T I O N S : < < < FONCTION : < CETTE ROUTINE EST APPELEE PAR < DEUX MODULES DIFFERENTS : < 1 - PAR L'HORLOGE, SUR DETECTION DE < TIME OUT ET ALORS (B)=1, < 2 - A CHACUNE DES SORTIES DE 'TH0' < QU'ELLE AIT DETECTE UN 'IPI' OU < PAS, ET CECI AFIN D'EVITER UN ALEAS < DU A LA GESTION DES INTERRUPTIONS < 'IPI' ET ALORS (B)=K. < CETTE ROUTINE REVEILLE LE < HANDLER SI CELA EST NECESSAIRE < (L'ESCLAVE A TERMINE UN SERVICE < NON ENCORE ACQUITTE PAR LE MAITRE). < < < ARGUMENT : < (B)=1 : APPEL POUR TIME OUT (HORLOGE), < 0 : APPEL NORMAL POUR 'IPI' (TH0). < < ITPR1: EQU $ CPZR B < EST-CE UN TIME OUT (B=K) ??? JNE PR0006 < OUI, ON REVEILLE DONC LE HANDLER DE < DIALOGUE QUELQUE SOIT 'PRIND'... < (NORMAL PARCEQUE L'ESCLAVE N'EST < PAS LA...) LA VAR+PRIND < ACCES A LA VARIABLE DE SYNCHRO, JAGE PR0005 < L'ESCLAVE N'A RIEN A FAIRE (K), < OU BIEN IL EST EN COURS DE SERVICE (1). PR0006: EQU $ STZ VAR+PRIND < ACQUITTEMENT DE FIN DE SERVICE. BSR ARVHDL < ET REVEIL DU HANDLER... PR0005: EQU $ RSR PAGE < < < P I L E P R O C E S S E U R E S C L A V E : < < < FONCTION : < CETTE PILE CONTRAIREMENT A SON < NOM NE SERT PAS A ALIMENTER LE < PROCESSEUR ESCLAVE EN ELECTRICITE... < ELLE CONTIENT DES VALEURS INI- < TIALES PERMETTANT D'ASSIMILER LA < PREMIERE INITIALISATION A UNE < REAPPARITION DU SECTEUR... < < CALL #SISP CMS5 CHECK# PILPS1: EQU $ WORD PRESC2 < (P)=ADRESSE DE RETOUR (EN VUE D'UN 'RSR') < LORS DE LA PREMIERE INITIALISATION. WORD K < A, WORD K < B, WORD K < X, WORD K < Y, WORD COM+DEPCS < (C)=BASE DU SYSTEME. WORD DCTPR1 < (L)=BASE DE LA DCT DE DIALOGUE. WORD NIL < W, WORD NIL;NIL < SLO & SLE. PILPT1: EQU $-DEPILE < VALEUR INITIALE A DONNER AU REGISTRE 'K' < DU PROCESSEUR ESCLAVE A LA PREMIERE < INITIALISATION. XWPILE: VAL 20-XXPILI < ON TRICHE UN PEU POUR GENERER LA < PILE DU PROCESSEUR ESCLAVE ; ON UTILISE < 'GENPIL2' QUI GENERE UNE ZONE A L'USAGE < DU DEFAUT SECTEUR DU PROCESSEUR MAITRE < C'EST POURQUOI, ON RETRANCHE 'XXPILI'... CALL #SISP CMS5 GENPIL2# CALL #SISP CMS5 CHECK# PAGE < < < S Y S E R S E S C L A V E : < < < FONCTION : < CE SOUS-PROGRAMME BLOQUE SUR LE < TEST DU DEFAUT SECTEUR LE PROCESSEUR < ESCLAVE LORSQUE CELUI-CI SE DETECTE < EN DEFAUT ; LE DEBLOQUAGE ETANT MANUEL ; < DE PLUS, LORSQUE LE PROCESSEUR ESCLAVE < EST AUSSI L'"IOP", ON MASQUE TOUTES < LES INTERRUPTIONS, AFIN QUE LE < PROCESSEUR MAITRE DETECTE LE DEFAUT... < DANS LE CAS OU LE PROCESSEUR ESCLAVE < EST ABSENT, C'EST QU'ON SUR LE PROCESSEUR < MAITRE SUR 'HDLPR1' ; C'EST ALORS UNE < VRAIE 'SYSER' QUE L'ON FAIT... < < < NOTA : < IL EST DES "JMP $" QUI SUBSISTENT : < IL S'AGIT DE CEUX QUI SONT SITUES DANS < LE SOUS-PROGRAMME 'PRDEF' LUI-MEME < BIEN ENTENDU... < < SYSEP: EQU $ PSR A,B,X LBI K < A PRIORI, (B)=K... LXI PROESC LA &SYSPRO IF PRINEX-K,XEIF%,, IF ATTENTION : 'PRINEX' DOIT ETRE NEGATIF !!! XEIF%: VAL ENDIF JAL SYSEP4 < LE PROCESSEUR ESCLAVE EST ABSENT... < < CAS OU LE PROCESSEUR ESCLAVE EST PRESENT : < LXI PROIOP CP &SYSPRO < L'ESCLAVE EST-IL L'"IOP" ??? JNE SYSEP3 < NON, (B)=K... SBT NBITMO+IPM < OUI, SBT NBITMO+LCM < ON FORCE 'IPM' ET 'LCM'... SYSEP3: EQU $ LR B,A SST < MASQUAGE EVENTUEL DES 'IPI' ET 'LDC'... < (SI L'ESCLAVE EST L'"IOP" AFIN DE CREER < UN DEFAUT SUR LE MAITRE...) SYSEP1: EQU $ BSR VAR+APRDEF < TEST DU DEFAUT SECTEUR... SYSEP2: EQU $ < ADRESSE DE DEBLOCAGE MANUEL... JMP SYSEP1 < ET ON SE BLOQUE... LR B,A < (A)=LISTE DES BITS A DEMASQUER, RST < ET ON EFFACE EVENTUELLEMENT LE MASQUAGE < DES INTERRUPTIONS 'IPI' ET 'LDC'. SYSEP5: EQU $ PLR A,B,X RSR < < CAS OU LE PROCESSEUR ESCLAVE EST ABSENT : < SYSEP4: EQU $ BSR ASYSER < E R R E U R S Y S T E M E ... JMP SYSEP5 < VERS LA SORTIE... PAGE < < < T E S T D E S D E F A U T S S E C T E U R S < S U R U N E S C L A V E : < < < FONCTION : < TOUS LES PROCESSEURS DE CMS5 ONT < LA MEME MEMOIRE DEBANALISEE AFIN < D'ASSURER LEUR DIALOGUE, EN CONSEQUENCE < DE QUOI, UN SEUL D'ENTRE EUX PEUT < UTILISER LES CONTEXTES (TACHES SOFTS, < ET INTERRUPTIONS) : C'EST LE PROCESSEUR < MAITRE. LES PROCESSEURS ESCLAVES NE < SERONT DONC PAS AVERTIS DES DEFAUTS < SECTEUR (LEURS INTERRUPTIONS SONT < MASQUEES) : ILS DEVRONT EUX-MEMES < LES DETECTER, ET LES TRAITER !!! < CE SOUS-PROGRAMME REGARDE DONC SI < UN DEFAUT SECTEUR EST EN ATTENTE ; < SI OUI, IL PREPARE LE RESTART, PUIS < ARRETE SES CANAUX, EN PARTICULIER LES < CANAUX 'HDC' (MEME S'ILS SONT DEJA < INACTIFS...), ET ENFIN SE MET EN < ATTENTE ('HALT')... < < < ATTENTION : < CE SOUS-PROGRAMME DEVRA DONC < ETRE APPELE REGULIEREMENT (AU MOINS < TOUTES LES 5MS) !!! < < PRDEF: EQU $ XKREG: VAL K < INITIALISATION DU CUMUL DU NOMBRE < DES REGISTRES EMPILES. #@PSR A < #SISP CMS5 KREG# CPZ DEFOK < Y-A-T'IL DEFAUT SECTEUR ??? JNE PRDEFF < OUI, ON LE TRAITE... BR VAR+APRDE1 < NON, ON S'EN VA... PRDEFF: EQU $ CALL #SISP CMS5 RST# < OUI, ON LIT 'ST', STA VAR+PRSAVS < QUE L'ON SAUVE IMMEDIATEMENT... < < D E F A U T S E C T E U R : < XWOR%1: VAL COSBT?LCM=FMASK(K=FCINST XWOR%1: VAL COSBT?IPM=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?IOM=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?DEBUG=FMASK(K?XWOR%1=FCINST LRM A WORD XWOR%1 SST < ON FORCE LES BITS 'LCM', 'IPM', 'IOM', ET < 'DEBUG' POUR FAIRE COMME SI UN DEFAUT < SECTEUR AVAIT ETE VERITABLEMENT DETECTE < AINSI, ON BLOQUE LE CANAL 'LDC', ET < 'WARNG'+'DEBUG' INDIQUE QU'IL Y A < DEFAUT SECTEUR EN TRAITEMENT... #@PSR B,X,Y,C,L,W < #SISP CMS5 KREG# RDOE #@PSR A,B < #SISP CMS5 KREG# LRM L WORD DCTPR1 < A PRIORI : (L)=BASE DCTPR1. LR K,A STA VAR+PRSAVK < SAUVEGARDE DE LA PILE 'K'. XKREG: VAL -XKREG IF PILPT1-PILPS1+DEPILE-D-XKREG,,XEIF%, IF ATTENTION : LA PILE INITIALE 'PILPS1' EST MAUVAISE !!! XEIF%: VAL ENDIF < < ARRET EVENTUEL DES CANAUX 'HDC' DE L'ESCLAVE : < NRHDC:: VAL 2 < NOMBRE DE JEUX DE REGISTRES 'HDC'. XWOR%1: VAL COSBT?0=FMASK(K=FCINST XWOR%1: VAL CORBT?4=FMASK(K?XWOR%1=FCINST LXI NRHDC < NOMBRE DE CONTEXTES. PRDEFA: EQU $ PSR X LR X,A SLLS S < DECALAGE POUR LE 'ROMB'... LR A,X < ON INDIQUE DANS 'X' QUEL EST LE < CONTEXTE 'HDC' A INHIBER... LRM A,B,Y WORD PRDEFB < EN EFFET 'A' ET 'P' SONT ECHANGES !!! WORD XWOR%1 < (B)=MOT D'INVALIDATION CANAL 'HDC'. WORD ISPIE < (Y)=ADRESSE DU MICRO-PROGRAMME. ROMB < ET ON ARRETE LES CANAUX 'HDC'... PRDEFB: EQU $ < ADRESSE DE L'INSTRUCTION SUIVANT < LE 'ROMB'... PLR X JDX PRDEFA < AU SUIVANT... < < ATTENTE DE LA DISPARITION DU COURANT : < CALL #SISP CMS5 RST# STA VAR+PRSAVS < ON SAUVEGARDE 'ST' JUSTE AVANT LE 'HALT' < AINSI, ON L'A SAUVEGARDE 2 FOIS DE < SUITE; LES DIFFERENCES DE BITS A 1 PER- < METTENT DE SAVOIR SI TOUT S'EST BIEN < PASSE... LXI K < (X)=INFINI... PRDEFC: EQU $ HALT < ET ON ATTEND LE DEFAUT SECTEUR, JMP PRDEFC < ???!??!?? < < R E S T A R T O U I N I T I A L I S A T I O N : < RESPR1: EQU $ < < PREPARATION DU REGISTRE < 'IM' DU MAITRE : < LA INFINI IF BITPUP-BITSIG,,XEIF%, IF ATTENTION : CE QUI PRECEDE EST IDIOT !!! XEIF%: VAL ENDIF STA &VAR+PIMMST < ET TRANSMISSION... < < MISE EN OEUVRE DU 'CBJ' : < (COUPLEUR DU SYSTEME DE < TELEVISION MOYENNE DEFINITION) < SLOCBM:: VAL 'FF00 < VALEUR D'UN 'SLO' SPECIAL DESTINE A < POSITIONNER LE FILTRE D'ADRESSE DU 'CBM', SLECBM:: VAL SLOCBM+I < ET VALEUR DU 'SLE' ASSOCIE... LRM A,B WORD SLOCBM < (A)='SLO' SPECIAL DU 'CBM', WORD SLECBM < (B)='SLE' SPECIAL DU 'CBM', WOE < POSITIONNEMENT DE 'SLO' ET 'SLE'. PRDEGH: EQU $ < ITERATION SUR ATTENTE DE JONCTION... SIO VAR+PRCBJ < LECTURE DU MOT D'ETAT2. CBMDIS:: VAL '00F0 < ARGUMENT D'UN ORDRE DE DISJONCTION, LAI CBMDIS SIO VAR+PRCBJC < ON DISJOINT LE 'CBJ'. CBMJON:: VAL K < ARGUMENT D'UN ORDRE DE JONCTION, LAI CBMJON SIO VAR+PRCBJC < ON JOINT LE 'CBJ'. SIO VAR+PRCBJ < LECTURE DU MOT D'ETAT2, TBT ETAOPE < LE 'CBJ' EST-IL JOINT ET PRESENT ??? JC PRDEGG < OUI, OK... JMP $ < NON, ATTENTE DE PASSAGE EN AUTOMATIQUE < S'IL EST PRESENT... JMP PRDEGH < ET LORSQU'IL EST PASSE EN AUTOMATIQUE, < ON RETENTE LA JONCTION... <******************************************************************************* LA &VAR+PIMMST < SI ON VEUT SAUTER LE 'STAR', ON VA XWOR%1: VAL '0000000@@@@ < (RECUPERATION DU CODE GENERE) <******************************************************************************* LAIMST: EQU ZERO+XWOR%1 < (INSTRUCTION EN AVANT...) SBT NIVCBJ < DECLARER LE 'CBJ' ABSENT, EN LE STA &VAR+PIMMST < MASQUANT DANS LE REGISTRE 'IM' DU < MAITRE... JMP PRDEGI < OU ALORS ON SAUTE LE 'STAR' POUR < EVITER LES ALARMES, LORSQU'IL EST < ABSENT... PRDEGG: EQU $ LAI K < (A)=VALEUR ARBITRAIRE... LYI K < (Y)=ADRESSE RELATIVE DANS (SLO,SLE), STAR < ON ECRIT AINSI LE FILTRE D'ADRESSE... SIO VAR+PRCBJI < LECTURE DU MOT D'ETAT1 AFIN DE DESARMER < UNE EVENTUELLE INTERRUPTION PUPITRE... SIO VAR+PRCBJ < ON RELIT LE MOT D'ETA2 : RBT ETAOPE < A PRIORI, CE N'EST PAS UN DEFAUT... JANE $ < BIZARRE ??? PRDEGI: EQU $ < CAS DU 'CBJ' ABSENT... < < NETTOYAGE DES PARITES MEMOIRE AU DELA < DE 64K, LA MICRO-MACHINE NE LE FAISANT PAS : < < < MISE EN OEUVRE DU 'CBM' : < (COUPLEUR DU SYSTEME DE < TELEVISION BASSE DEFINITION) < LRM A,B WORD SLOCBM < (A)='SLO' SPECIAL DU 'CBM', WORD SLECBM < (B)='SLE' SPECIAL DU 'CBM', WOE < POSITIONNEMENT DE 'SLO' ET 'SLE'. PRDEFH: EQU $ < ITERATION SUR ATTENTE DE JONCTION... SIO VAR+PRCBM < LECTURE DU MOT D'ETAT2. LAI CBMDIS SIO VAR+PRCBMC < ON DISJOINT LE 'CBM'. LAI CBMJON SIO VAR+PRCBMC < ON JOINT LE 'CBM'. SIO VAR+PRCBM < LECTURE DU MOT D'ETAT2, TBT ETAOPE < LE 'CBM' EST-IL JOINT ET PRESENT ??? JC PRDEFG < OUI, OK... JMP $ < NON, ATTENTE DE PASSAGE EN AUTOMATIQUE < S'IL EST PRESENT... JMP PRDEFH < ET LORSQU'IL EST PASSE EN AUTOMATIQUE, < ON RETENTE LA JONCTION... JMP PRDEFI < OU ALORS ON SAUTE LE 'STAR' POUR < EVITER LES ALARMES, LORSQU'IL EST < ABSENT... PRDEFG: EQU $ LAI K < (A)=VALEUR ARBITRAIRE... LYI K < (Y)=ADRESSE RELATIVE DANS (SLO,SLE), STAR < ON ECRIT AINSI LE FILTRE D'ADRESSE... SIO VAR+PRCBMI < LECTURE DU MOT D'ETAT1 AFIN DE DESARMER < UNE EVENTUELLE INTERRUPTION PUPITRE... SIO VAR+PRCBM < ON RELIT LE MOT D'ETA2 : RBT ETAOPE < A PRIORI, CE N'EST PAS UN DEFAUT... JANE $ < BIZARRE ??? < < MISE DE L'ESCLAVE EN MODE DEBUG : < (POUR EVITER LES ALARMES...) < PRDEFI: EQU $ < CAS DU 'CBM' ABSENT... LAI COSBT?DEBUG=FMASK(K=FCINST SST < MODE DEBUG DANS 'ST'. < < METTONS EN SERVICE LA TELEVISION NUMERIQUE A PRIORI : < (SI NECESSAIRE, ON PEUT FAIRE ULTERIEUREMENT < LORS DU PASSAGE DANS 'TH0' UN PATCH LE RE- < EFFACANT...) < LA ETASYS SBT TVEXIS < A PRIORI... STA ETASYS < < PREMIER TOUR DE BALAYAGE DE LA MEMOIRE : < (CE PREMIER TOUR NE TRAVAILLE QU'AU-DELA < DE 64K, AFIN DE FAIRE CE QUE L''INI' < PUPITRE, C'EST-A-DIRE CALCULER UNE BONNE < PARITE POUR CHAQUE MOT DE LA MEMOIRE, NE < FAIT PAS MEME SI LE CONTENU DE CELUI-CI < EST ALEATOIRE, ET FIXE PAR UNE MISE SOUS < TENSION...) < LRM A,B,X XWORK1: VAL 1 < LONGUEUR EXPRIMEE EN K-MOTS DES BLOCS < MEMOIRE EXPLORES A CHAQUE ITERATION. XWOR%1: VAL XWORK1*LK>DADR < DISTANCE (SLE)-(SLO). XWOR%2: VAL XKMEMX>DADR*LK < DERNIERE MEMOIRE A TESTER. WORD XWOR%2-XWOR%1 < VALEUR INITIALE DE 'SLO', WORD XWOR%2 < VALEUR INITIALE DE 'SLE', WORD XWOR%1 < DECREMENT DE 'SLO' ET 'SLE'. STB VAR+PRMAX < ON REINITIALISE A PRIORI L'ADRESSE < DE LA PREMIERE MEMOIRE INEXISTANTE... JMP PRDEF8 < VERS L'INITIALISATION 'SLO'/'SLE'... PRDEF4: EQU $ LRM Y XWOR%3: VAL XWORK1*LK-N IF XWOR%3,,,XEIF% IF ATTENTION : L'ADRESSE DU DERNIER MOT EST MAUVAISE !!! XEIF%: VAL ENDIF WORD XWOR%3 < ADRESSE RELATIVE A (SLO,SLE) DU < DERNIER MOT DU BLOC MEMOIRE COURANT. PRDEF5: EQU $ DBP < RECHERCHE DE LA PREMIERE PARITE, < OU DE LA PREMIERE MEMOIRE INEXISTANTE. JNCV PRDEF6 < C=V=Y=K : FIN DU BLOC COURANT... JNV PRDEFD < V=K, ON AURA CERTAINEMENT C=1, < C'EST-A-DIRE UNE PARITE MEMOIRE... RDOE < V=1 : IL S'AGIT D'UNE MEMOIRE INEXIS- < TANTE, ON MET DONC 'PRMAX' A JOUR... LR A,B < (B)=(SLO), LR Y,A < (A)=ADRESSE MOT DE LA MEMOIRE INEXISTANTE < RELATIVEMENT A 'SLO'. SLRS -DADR < (A)=ADRESSE 16-MOTS DE LA MEMOIRE < INEXISTANTE EN VALEUR INFERIEURE, ADR A,B < (B)=ADRESSE 16-MOTS ABSOLUE DE LA < MEMOIRE INEXISTANTE, STB VAR+PRMAX < QUI PERMET DE METTRE 'PRMAX' A JOUR... < < LA TELEVISION NUMERIQUE EST-ELLE POSSIBLE ??? < LA TVMEM1-ZERO,W CPR A,B JL PRDEF7 < L'ADRESSE INEXISTANTE EST INFERIEURE < A 'TVMEM1', OK... LRM A WORD MEMTVE < (A)=PREMIERE ADRESSE INACCESSIBLE < A LA TELEVISION NUMERIQUE, CPR A,B JGE PRDEF7 < L'ADRESSE INEXISTANTE EST SUPERIEURE < A LA PREMIERE ADRESSE INACCESSIBLE, OK... LA ETASYS < ET BIEN, L'ADRESSE INEXISTANTE EST RBT TVEXIS < DANS LA MEMOIRE DE TELEVISION NUMERIQUE, STA ETASYS < ON INHIBE DONC CELLE-CI... JMP PRDEF7 < PASSONS AU MOT PRECEDENT... PRDEFD: EQU $ < PASSONS AUX PARITES... JNC $ < ???? RBP < ON EFFACE LA PARITE DU MOT COURANT < D'ADRESSE RELATIVE (Y). PRDEF7: EQU $ SIO VAR+PRCBMI < ELIMINATION D'EVENTUELLES INTERRUPTIONS < MANUELLES SUR LE 'CBM'... SIO VAR+PRCBM < LECTURE DU MOT D'ETAT DU 'CBM' : RBT ETAOPE < ON EFFACE LE BIT 'CBM' OPERATIONNEL ; < LES BITS 2 ET 3 SIGNIFIENT EN PARTICULIER < 'MEMOIRE INEXISTANTE'... DEFCBM: JANE $ < OUAHHH... IL FAUT DECONNECTER LE < 'CBM' MANUELLEMENT AVANT DE RELANCER !!! ADRI -P,Y < SAUTONS LE MOT QUE L'ON VIENT < DE TRAITER... CPZR Y < A-T'ON FINI LE BLOC COURANT ??? JGE PRDEF5 < NON, IL EN RESTE... < < PASSAGE AU BLOC PRECEDENT : < PRDEF6: EQU $ RDOE < RECUPERATION DE 'SLO' ET 'SLE'. SBR X,A < ET PASSAGE AU SBR X,B < BLOC PRECEDENT... PRDEF8: EQU $ WOE < ON MODIFIE 'SLO' ET 'SLE'. BSR ASMPUO < VISUALISATION DE (SLO). LR B,A < (A)=(SLE), SLRS LK=K+DADR < CONVERSION DE (SLE) EN UN NOMBRE DE K. CPI K64 < A-T'ON FINI... JG PRDEF4 < NON, ON RECOMMENCE... < < DETERMINATION DE 'PRMAX', ET DU < NOMBRE D'UTILISATEURS POUVANT < ACCEDER A 'PR1' POUR LE SWAPPING : < LA TVMEM1-ZERO,W < ADRESSE DE LA PEMIERE MEMOIRE DE 'TV', CP VAR+PRMAX < Y-A-T'IL UN TROU ??? JG PRDEFE < OUI, 'PRMAX' EST BON... STA VAR+PRMAX < NON, DONC IL FAUT REDUIRE 'PRMAX'... PRDEFE: EQU $ LA VAR+PRMAX SB VAR+PRMEM < (A)=ESPACE DISPONIBLE POUR LE SWAPPING < SUR 'PR1'... JAL $ < B I Z A R R E ... SARD NBITMO < EFFECTIVEMENT, SANS CE 'SARD' CELA < NE MARCHE PAS !!! DV VAR+PRLZE STA NUSEP1 < (A)=NOMBRE PAR DEFAUT D'UTILISATEURS < POUVANT ACCEDER A 'PR1' POUR LE < SWAPPING... < < DEUXIEME TOUR DE BALAYAGE DE LA MEMOIRE : < (CE DEUXIEME TOUR PORTE SUR LA TOTALITE < DE LA MEMOIRE AFIN DE DETECTER CETTE FOIS-CI < LES DEFAUTS REELS DE LA MEMOIRE, ET NON < PLUS CEUX CAUSES PAR LA MISE SOUS-TENSION < DE CELLE-CI...) < LRM A,B,X XWORK1: VAL 1 < LONGUEUR EXPRIMEE EN K-MOTS DES BLOCS < MEMOIRE EXPLORES A CHAQUE ITERATION. XWOR%1: VAL XWORK1*LK>DADR < DISTANCE (SLE)-(SLO). XWOR%2: VAL XKMEMX>DADR*LK < DERNIERE MEMOIRE A TESTER. WORD XWOR%2-XWOR%1 < VALEUR INITIALE DE 'SLO', WORD XWOR%2 < VALEUR INITIALE DE 'SLE', WORD XWOR%1 < DECREMENT DE 'SLO' ET 'SLE'. JMP PQDEF8 < VERS L'INITIALISATION 'SLO'/'SLE'... PQDEF4: EQU $ LRM Y XWOR%3: VAL XWORK1*LK-N IF XWOR%3,,,XEIF% IF ATTENTION : L'ADRESSE DU DERNIER MOT EST MAUVAISE !!! XEIF%: VAL ENDIF WORD XWOR%3 < ADRESSE RELATIVE A (SLO,SLE) DU < DERNIER MOT DU BLOC MEMOIRE COURANT. PQDEF5: EQU $ DBP < RECHERCHE DE LA PREMIERE PARITE, < OU DE LA PREMIERE MEMOIRE INEXISTANTE. JNCV PQDEF6 < C=V=Y=K : FIN DU BLOC COURANT... JV PQDEF1 < V=1 : MEMOIRE INEXISTANTE, ON LA SAUTE... JC $ < PARITE DANS LE MOT D'ADRESSE (Y) RELA- < TIVEMENT A (SLO)... SIO VAR+PRCBMI < ELIMINATION D'EVENTUELLES INTERRUPTIONS < MANUELLES SUR LE 'CBM'... SIO VAR+PRCBM < LECTURE DU MOT D'ETAT DU 'CBM' : RBT ETAOPE < ON EFFACE LE BIT 'CBM' OPERATIONNEL ; < LES BITS 2 ET 3 SIGNIFIENT EN PARTICULIER < 'MEMOIRE INEXISTANTE'... DEFCBN: JANE $ < OUAHHH... IL FAUT DECONNECTER LE < 'CBM' MANUELLEMENT AVANT DE RELANCER !!! PQDEF1: EQU $ < CAS DES MEMOIRES INEXISTANTES... ADRI -P,Y < SAUTONS LE MOT QUE L'ON VIENT < DE TRAITER... CPZR Y < A-T'ON FINI LE BLOC COURANT ??? JGE PQDEF5 < NON, IL EN RESTE... < < PASSAGE AU BLOC PRECEDENT : < PQDEF6: EQU $ RDOE < RECUPERATION DE 'SLO' ET 'SLE'. SBR X,A < ET PASSAGE AU SBR X,B < BLOC PRECEDENT... PQDEF8: EQU $ WOE < ON MODIFIE 'SLO' ET 'SLE'. LR B,A < (A)=(SLE), BSR ASMPUO < VISUALISATION DE (SLE). XWOR%7: VAL LK=K+DADR < POUR CONVERTIR UNE ADRESSE EN UN < NOMBRE DE K... SLRS XWOR%7 < CONVERSION DE (SLE) EN UN NOMBRE DE K. XWOR%8: VAL -XWOR%7 < POU DECALER A DROITE... XWOR%9: VAL ZERO-ZERO>XWOR%8 CPI XWOR%9 < A-T'ON FINI (DANS CETTE DEUXIEME BOUCLE < ON BALAYE TOUTE LA MEMOIRE) ??? JG PQDEF4 < NON, ON RECOMMENCE... CALL #SISP CMS5 PAGE0# < COMME CA, PAR PROPRETE... < < OUI, ANNULATION DU MODE DEBUG : < BLOCK1: EQU $ < ADRESSE DE BLOCAGE LORS DE LA RELANCE < SUITE A UN DEFAUT SECTEUR NON PRIS EN < COMPTE... LAI COSBT?DEBUG=FMASK(K=FCINST RST < ON EFFACE LE BIT DEBUG DE 'ST'... < < EST-ON EN REALITE SUR LE MAITRE ??? < LXI PROESC CPZ &SYSPRO < L'ESCLAVE EXISTE-T'IL ??? JGE PRDEF9 < OUI, ON EST DESSUS... ACQ < NON, ON EST DONC SUR LE MAITRE, < ON QUITTE DONC LA FAUSSE 'TH0', AFIN < DE POURSUIVRE LE 'RESTART' APRES CE < NETTOYAGE DE LA MEMOIRE HAUTE. JMP $ < ON NE SAIT JAMAIS... PRDEF9: EQU $ < < REDEMARRAGE DE L'ESCLAVE : < LRM A,B WORD PSTH00 < (A)=VALEUR REELLE DU RELAI DES 'PSTH'. WORD SAVST0 < (B)=BITS OBLIGATOIRES DANS 'PRSAVS'. STA ALPSTH-ZERO,W < MISE EN PLACE DU RELAI REEL VERS < LES 'PSTH' QUI A ETE DETRUIT POUR < METTRE LE PROCESSEUR ESCLAVE SUR < LE NIVEAU TH0 ; A NOTER QUE < (W)=ZERO... LA VAR+PRSAVS < 'ST' AVANT LE PRECEDENT DEFAUT SECTEUR, ANDR B,A CPR A,B < Y-A-T'IL TOUS LES BITS NECESSAIRES ??? JNE $ < E R R E U R S Y S T E M E ... STZ VAR+PRSAVS < OK... STZ DEFOK < ET ON SYNCHRONISE LE MAITRE S'IL < ATTENDAIT... LA VAR+PRSAVK < 'L' EST BONNE (CF. LE RESTART). LR A,K < RESTAURATION DE LA PILE 'K'. < RESTAURATION DE (SLO,SLE) : CALL #SISP CMS5 PLRSLO# LA INFINI < BIT0=1, BITS1-15=K. IF BITPUP-BITSIG,,XEIF%, IF ATTENTION : CE QUI SUIT EST IDIOT !!! XEIF%: VAL ENDIF XIMR A < MASCAGE DU PUPITRE. LBI K SBT NBITMO+LCM < BIT DU MASQUE INTERRUPTIONS 'LDC'. LXI PROESC LA &SYSPRO < (A)=NUMERO DE L'ESCLAVE, LXI PROIOP CP &SYSPRO < EST-IL AUSSI UN 'IOP' ??? LAI K JNE PRDEF2 < NON, SBT NBITMO+IPM < OUI, IL FAUT DONC MALHEUREUSEMENT < DEMASQUER LES INTERRUPTIONS 'IPI', < POUR PERMETTRE L'INITIALISATION < DES CANAUX... SBT MAINT < C'EST DOMMAGE, MAIS IL FAUT BIEN LE < FAIRE : SI 'IOP'='ESC', ALORS ON < INHIBE LES DEFAUTS DE PARITE SUR LE < PROCESSEUR ESCLAVE AFIN QU'IL NE < PASSE PAS EN ALARME !!! MAIS ALORS PLUS < AUCUNE PARITE NE SERA DETECTEE... DE < PLUS, SI LE MAITRE ETAIT L'IOP, ON < NE LE FERAIT PAS, CAR IL FAUT BIEN < POUVOIR DETECTER LES PARITES MEMOIRE < SI ELLES EXISTENT, MALGRE LE RISQUE < QUE LE MAITRE A DE PASSER EN ALARME < AUSSI LORS D'UNE PARITE, SI PAR < MALHEUR L'ECHANGE A LIEU ALORS < QU'IL EST SOUS 'TH0'... PRDEF2: EQU $ SST < FORCONS EVENTUELLEMENT LE BIT 'MAINT' < D'INHIBITION DES PARITES MEMOIRE SI < 'IOP'='ESC'... LR B,A < (A)=MASQUE DE DEMASQUAGE DES IT... RST < DEMASQUAGE DES APPELS 'LDC' ET 'IPI' SI < L'ON EST SUR UN 'IOP' (=ESCLAVE). PLR B,X,Y,C,L,W < SUITE DE LA RESTAURATION... < < RETOUR : < PRDEF1: EQU $ PLR A RSR PAGE < < < P R O C E S S E U R E S C L A V E : < < < FONCTION : < ETANT DONNEE LA MICRO-PROGRAMMATION < MERDIQUE DU SOLAR QUE CE SOIT EN < CONTEXTE MONO (CONTEXTES PARTIELS, < DEMASQUAGE DES INTERRUPTIONS INTEM- < PESTIFS,...) OU MULTI (PAS DE MEMOIRE < DEBANALISEE COMMUNE,...) LE PROCESSEUR < ESCLAVE NE PEUT TRAVAILLER QU'AVEC SES < INTERRUPTIONS MASQUEES, NE PEUT UTILISER < LES INSTRUCTIONS MODIFIANT LA MEMOIRE < DEBANALISEE (MICRO-SCHEDULER,...), < NE PEUT FAIRE DE CHANGEMENTS DE CONTEXTES, < ET DOIT DONC DETECTER DE LUI-MEME < LES DEFAUTS SECTEURS. < UN PROCESSEUR ESCLAVE NE PEUT DONC < EXECUTER QUE DES TRAITEMENTS SIMPLES, < SEQUENTIELS, ET SURTOUT PERIODIQUEMENT < TESTER LES DEFAUTS SECTEUR EN ATTENTE !!! < DE PLUS POUR EVITER QUE LORS D'ALARMES < EVENTUELLES (PARITE MEMOIRE,...) LE < PROCESSEUR NE FASSE UN CHANGEMENT DE < CONTEXTE (VERS LA TACHE ALARME TH0), < A L'INITIALISATION ON LUI FORCE LE < BIT0(HV) LUI FAISANT AINSI CROIRE QU'IL < EST DEJA SOUS NIVEAU TH0 !!! < < < SYNCHRONISATION MAITRE : < LA VARIABLE 'PRIND' DE LA DCT 'DCTPR1' < SUIVANT SA VALEUR INDIQUE A L'ESCLAVE < QUE LE MAITRE VEUT LUI SOUMETTRE QUEL- < QUE CHOSE : < PRIND=K : RIEN A FAIRE, < PRIND=+1 : L'ESCLAVE A DU TRAVAIL, < PRIND=-1 : L'ESCLAVE A FINI SON TRAVAIL, < MAIS LE MAITRE N'A PAS ACQUITTE... < EN FIN DE SERVICE, L'ESCLAVE ENVOIE UN 'IPI' < AU MAITRE, QUI NOTONS-LE, TESTE A CHAQUE < SORTIE DE 'TH0' DE TELS 'IPI'... < ENFIN ON NOTERA QUE POUR LES RAISONS < EVOQUES PREALABLEMENT, LE MAITRE NE < PEUT ENVOYER D'IPI A L'ESCLAVE (CF. LES < CHANGEMENTS DE CONTEXTE)... < < < ARGUMENT : < LES ARGUMENTS SONT DANS LA DEMANDE < DE TETE SUR 'DCTPR1' QUE L'ON RECUPERE < DANS 'PRSAVW' ET NON DANS 'TETE', ON < NE SAIT JAMAIS... < < PRESC1: EQU $ BSR VAR+APRDEF < TEST CYCLIQUE D'UN DEFAUT SECTEUR < ET ATTENTE DE RESTART S'IL Y A LIEU. PRESC2: EQU $ < < DEFINITION DES INSTANTS CYCLIQUES DE COPY : < <******************************************************************************* XWOR%1: VAL -I < INITIALISATION DU GENERATEUR DES 'PATXXX' PATMF1:: VAL '0@@@@+I < COPY 1 : MEMOIRE --> DKF, PATF:: VAL '0@@@@+I < LECTURE SECTEUR COURANT 'DKF', PATMF2:: VAL '0@@@@+I < COPY 2 : MEMOIRE --> DKF, PATM:: VAL '0@@@@+I < ECRITURE SECTEUR COURANT SUR 'DKM', <******************************************************************************* < NOTA : 'PATMF1' ET 'PATMF2' CONSTITUENT < DEUX ZONE DE 'COPY' EN BASCULE UTILISEES < POUR S'AUTO-VALIDER... NSCOPY:: VAL 2 < NOMBRE DE ZONES DE 'COPY'. < < SYNCHRONISATION APPROXIMATIVE SUR LE MAITRE : < (ON ATTEND D'UNE PART, SI LA COPY EST ON, < QUE LA PATTERN CYCLIQUE AIT CHANGE, MAIS < AUSSI, ON ESSAYE D'EVITER LES INSTANTS DE < COPY MEMOIRE --> DKF, C'EST-A-DIRE 'PATMF1' < ET 'PATMF2', AFIN QUE LA GENERATION DE LA < ZONE DE COPY NE SOIT PAS EN RECOUVREMENT AVEC < L'ENTREE-SORTIE ELLE-MEME QUI CRERAIT AINSI < UNE COPY AVEC UN MAUVAIS CHECK-SUM...) < LA ETASYS TBT OTOCOP < LA COPY EST-ELLE ON ??? JC PRESC6 < NON, RIEN A FAIRE, MAIS QUEL DANGER !!! LA &VAR+FATCOP < (A)=PATTERN CYCLIQUE COURANTE, CP VAR+SATCOP < EST-CE CELLE DU TEST PRECEDENT ??? JE PRESC6 < OUI, ON NE FAIT RIEN... STA VAR+SATCOP < NON, ELLE A CHANGE, DONC ON LA < MEMORISE, ET ON VA PREPARER LA < COPY DU SYSTEME. TBT PATMF1 JC PRESC6 < ON EVITE LES INSTANTS D'ECRITURE TBT PATMF2 JC PRESC6 < DE LA COPY SUR LE 'DKF'... BSR VAR+APCOPY < PREPARATION DES INFORMATIONS DE < COPY DU SYSTEME. PRESC6: EQU $ LRM X TEMPO1: WORD -'400 < (X)=-NOMBRE DE THALT-MICRO-SECONDES < D'ATTENTE DANS LE HALT. BSR ADODO < ATTENTE VOLONTAIRE DE QUELQUES MICRO- < SECONDES DESTINEE A NE PAS SURCHARGER < LE BUS MEMOIRE... < < TEST DES DEMANDES DE SERVICE SUR CET ESCLAVE : < LA VAR+PRIND < ACCES AU MOT DE SYNCHRONISATION... JALE PRESC1 < RIEN A FAIRE (K), OU SERVICE < PRECEDENT NON ENCORE ACQUITTE (-1) < PAR LE MAITRE. CPI XPRCSA < PETITE VALIDATION... JE SYSE01 < OK... BSR VAR+ASYSEP < E R R E U R S Y S T E M E : A NOTER < QU'ON NE PEUT FAIRE DE 'SYSER' A CAUSE < DES CHANGEMENTS DE CONTEXTES... SYSE01: EQU $ < < PRISE EN COMPTE D'UNE DEMANDE DE SERVICE : < LA VAR+PRSAVW JANE SYSE02 < OK... BSR VAR+ASYSEP < E R R E U R S Y S T E M E ... SYSE02: EQU $ LR A,W < (W)=ADRESSE DE LA DEMANDE COURANTE. LX ARGDEM+OPDEM < (X)=FONCTION DEMANDEE (A NOTER QU'ELLE A < DEJA ETE VALIDEE PAR LE MAITRE...). BSR &VAR+APRSP < APPEL DU MODULE D'EXECUTION SPECIFIQUE. < < TRAITEMENT DES FINS DE SERVICE : < LAI XPRCSF < MODIFICATION DE LA STA VAR+PRIND < VARIABLE DE SYNCHRONISATION... LXI PROMST LA &SYSPRO < (A)=NUMERO DU MAITRE, JAGE SYSE03 < OK... BSR VAR+ASYSEP < E R R E U R S Y S T E M E ... SYSE03: EQU $ LRM W WORD BOXIPI < (W)=ADRESSE DES BOITES AUX LETTRES. ADR A,W < (W)=ADRESSE DE LA BOITE DU MAITRE. LAI VLOCK PRESC4: EQU $ BSR VAR+APRDEF < TEST DU DEFAUT SECTEUR... XM XVEROU,W < ON TENTE DE VERROUILLER L'ACCES A < LA BOITE AUX LETTRES... JANE PRESC4 < IMPOSSIBLE, ON ATTEND... LAD CCBIPI < (A)=ADRESSE DE 'INFINI', QUI EST AUSSI < UN 'CCB' INTER-PROCESSEUR... STA O,W < QUE L'ON MET DANS LA BOITE DU MAITRE... IPI < AVERTISSEMENT DU MAITRE... PRESC5: EQU $ BSR VAR+APRDEF < TEST DU DEFAUT SECTEUR... CPZ VAR+PRIND < LE MAITRE A-T'IL ACQUITTE ??? JL PRESC5 < -1 : NON, DONC ON L'ATTEND... STZ XVEROU,W < OUI, DONC ON PEUT DEVERROUILLER < SA BOITE AUX LETTRES... JMP PRESC1 < VERS L'ATTENTE D'UN NOUVEAU SERVICE... PAGE < < < S I M U A L T I O N D U D I S Q U E F I X E < D A N S L A M E M O I R E H A U T E : < < < FONCTION : < CE MODULE INCLUE LES FONCTIONS 'FPRIN' < ET 'FPROUT' ; ELLE PERMET DE SIMULER < LE SWAPPING PAR BLOC DE 1K MOTS DANS LA < MEMOIRE HAUTE DU SYSTEME ; CE PROCEDE A < DEUX AVANTAGES : < 1 - LE DEPLACEMENT DE ZONES PAR DES MOVES < ('MVTM' ET 'MVTS') EST 2 FOIS PLUS RAPIDE < QUE LES ECHANGES DISQUE FIXE. < 2 - LORS DE LEUR SWAPPING OUT, SI CELUI-CI < EST FAIT EN MEMOIRE, LES PROGRAMMES PEUVENT < Y ETRE EXECUTES... < < < ARGUMENT : < (W)=ADRESSE DE LA DEMANDE DONT LE < FORMAT EST IDENTIQUE A CELUI < UTILISE POUR 'DKF'. < < PRMOV: EQU $ CALL #SISP CMS5 PSRSLO# < SAUVEGARDE DU (SLO,SLE) COURANT... < < PREPARATION DE L'ADRESSE "MEMOIRE" : < LA NSPTYP TBT TYPAD < EST-CE UNE AMDEM DE MOT (1) OU OCTET (K). LA ARGDEM+AMDEM JC PRMOV1 < (A)=ADRESSE DE MOT, SLRS NOCMO=K < (A)=ADRESSE D'OCTET. JNC SYSE04 < OK... BSR VAR+ASYSEP < E R R E U R S Y S T E M E : L'AMDEM < N'EST PAS A UNE FRONTIERE DE MOT. SYSE04: EQU $ PRMOV1: EQU $ PSR A < SAUVEGARDE DE L'ADRESSE "MEMOIRE". < < PREPARATION DE L'ADRESSE "SECTEUR" : < LA ARGDEM+ASDEM < (A)=ADRESSE SECTEUR REELLE, SB ASYS < A LAQUELLE ON RETRANCHE L'ADRESSE DE CMS5 XWOR%2: VAL XXXMOY XWOR%1: VAL TZSWAP/XWOR%2 IF XWOR%1*XWOR%2-TZSWAP,,XEIF%, IF ATTENTION : TZSWAP NON DIVISIBLE PAR 2 !!! XEIF%: VAL ENDIF DO XWOR%2*M ADRI -XWOR%1,A < PUIS LA TAILLE D'UN UTILISATEUR < (A)=DEPLACEMENT EN SECTEUR PAR RAPPORT < AU '0 DE L'UTILISATEUR D'IDESC=K. SARD NBITMO < CADRAGE DANS (A,B) : DV VAR+TASWAP < ON RECUPERE : < (A)=NUMERO DE PARTITION (CF. 'IDESC'), < (B)=DEPLACEMENT DANS CETTE PARTITION < (EXPRIME EN SECTEURS). PSR B < ON SAUVEGARDE CE DEPLACEMENT (RESTE DE < LA DIVISION...). MP VAR+TAPROG < ON RAMENE AINSI UN ESPACE DE SWAPPING < AVEC ZONE SCRATCH (SUR 'DKS'), A UN < ESPACE SANS (SUR 'PR1'). PLR A ADR B,A < (A)=DEPLACEMENT EN SECTEURS PAR RAPPORT < A L'UTILISATEUR D'"IDESC"=0, DANS < UN ESPACE SANS ZONE SCRATCH... XWOR%5: VAL XKMEMX < TAILLE MAX DE LA MEMOIRE EN K. XWOR%4: VAL YY7 < TAILLE D'UN SECTEUR. XWOR%1: VAL XWOR%4>DADR < PARCEQUE 'SLO' & 'SLE' CONTIENNENT < DES ADRESSES MULTIPLES DE 'FADR'. SLLS XWOR%1=K < CONVERSION EN UN DEPLACEMENT EN < MULTIPLE DE 'FADR' MOTS. AD VAR+PRMEM < (A)=ADRESSE ABSOLUE EN MEMOIRE EN < MULTIPLE DE 'FADR' MOTS. XWOR%3: VAL LK/XWOR%4 < NOMBRE DE SECTEURS PAR K-MOTS. IF M+NESCLA*TCPROG/XWOR%3+KSIMS-XWOR%5,XEIF%,, IF LA MEMOIRE EST TROP PETITE POUR SIMULER IF LE SWAPPING DE TOUS LES UTILISATEURS !!! XEIF%: VAL ENDIF LR A,B PSR A,B LA ARGDEM+CODEM < (A)=NOMBRE D'OCTETS A ECHANGER, XWOR%1: VAL -DADR XWOR%2: VAL NOCMO=XWOR%1 ADRI FADR*NOCMO-E,A < (A)=NOMBRE D'OCTETS MAJORES POUR < UNE DIVISION PAR EXCES : SLRS XWOR%2 < (A)=NOMBRE DE DADR-MOTS A ECHANGER, ADRI -E,A < (SANS OUBLIER QUE 'SLO' ET 'SLE' SONT < DANS L'ESPACE QU'ILS DELIMITENT...) LR A,Y < QUE L'ON MET DANS 'Y', PLR A,B ADR Y,A < (A)=FUTUR 'SLE' : CP VAR+PRMAX < VALIDATION DE 'SLE' : JL SYSE05 < OK... BSR VAR+ASYSEP < E R R E U R S Y S T E M E : < (SLE)>=PREMIERE MEMOIRE INEXISTANTE !!! SYSE05: EQU $ XR A,B < (A)=ADRESSE DE DEBUT DE LA ZONE, < (B)=ADRESSE DE FIN MAJOREE (LES 2 EN < MULTIPLES DE 'FADR' MOTS). WOE < QUE L'ON MET DANS 'SLO' & 'SLE' AFIN < DE PERMETTRE L'EXECUTION DES INSTRUC- < TIONS 'MVTM' & 'MVTS'. < < CALCUL DU NOMBRE DE BLOCS DE 1K MOTS : < LA ARGDEM+CODEM < (A)=NOMBRE D'OCTETS DEMANDES. LBI K < CLEAR DE 'B'. XWOR%1: VAL NOCMO=K XWOR%1: VAL LK=XWOR%1 < AFIN DE CONVERTIR EN UN NOMBRE < DE K-MOTS. SLRD XWOR%1 < (A)=NOMBRE DE 1K-MOTS, ET < (B)=NOMBRE D'OCTETS RESIDUELS... LY VAR+PR1K < (Y)=1K A PRIORI (LONGUEUR DES BLOCS < UNITAIRES). JANE PRMOVN < IL Y A AU MOINS 1K DE DEMANDE... < < CAS OU MOINS D'UN K-MOTS EST DEMANDE : < LYI YY7 < (Y)=LONGUEUR D'UN BUFFER A PRIORI... SLRD NOCMO=NBITMO-XWOR%1 < (B)=NOMBRE DE MOTS RESIDUELS (A NOTER < QUE LE CONTENU ETAIT NUL). LAI W < (A)=POUR FAIRE UN ECHANGE D'UN BUFFER. JC PRMOVO < OH !!! LE NOMBRE D'OCTETS EST IMPAIR !!! CPR B,Y < OK, MAIS EST-CE UN BUFFER QUI A ETE < DEMANDE ??? JE PRMOVP < OUI (C'EST DONC 'HDLJE' POUR L'INITIA- < LISATION DE L'ESPACE DE SWAPPING). PRMOVO: EQU $ BSR VAR+ASYSEP < E R R E U R S Y S T E M E ... JMP PRMOVP < < CAS OU PLUS D'UN K-MOTS EST DEMANDE : < PRMOVN: EQU $ CPZR B < DANS CE CAS Y-A-T'IL DES OCTETS < RESIDUELS ??? JNE PRMOVO < OUI, TRES TRES MAUVAIS... < < CAS OU L'ECHAGE DEMANDE EST VALIDE : < PRMOVP: EQU $ STY VAR+PRLON < PRLON=NOMBRE DE MOTS A ECHANGER... LR A,X < (X)=NOMBRE DE BLOCS DE 1K-MOTS. < < PRISE EN COMPTE DU SENS : < LA ARGDEM+OPDEM < (A)=FONCTION, LR A,Y < SAUVEGARDEE DANS 'Y'. CPI FPRIN < EST-CE UN SWAPPING IN ??? PLR A < A PRIORI (A)=EMETTEUR ABSOLU SI OUT... LBI ZERO-ZERO < ET (B)=RECEPTEUR RELATIF... JNE PRMOV5 < NON, SWAPPING OUT... XR A,B < OUI, SWAPPING IN : < (A)=EMETTEUR RELATIF, < (B)=RECEPTEUR ABSOLU. PRMOV5: EQU $ < < BOUCLE D'ECHANGE DES BLOCS DE 1K-MOTS : < PRMOV2: EQU $ PSR X < SAUVEGARDE DU NOMBRE D'ITERATIONS. LX VAR+PRLON < (X)=NOMBRE DE MOTS (1K OU YY7 MOTS). XR A,Y < (A)=FONCTION DEMANDEE, CPI FPRIN < IN ??? XR A,Y < RESTAURE A ET Y. JE PRMOV3 < OUI, IN... MVTS < NON, OUT... JMP PRMOV4 PRMOV3: EQU $ MVTM < IN... PRMOV4: EQU $ XR A,B AD VAR+PRLON < PROGRESSION DU RECEPTEUR, XR A,B AD VAR+PRLON < PROGRESSION DE L'EMETTEUR. LXI PROESC CPZ &SYSPRO < MAIS AU FAIT, 'PROESC' EST-IL LA ??? PLR X IF PRINEX-K,XEIF%,, IF ATTENTION : 'PRINEX' DOIT ETRE NEGATIF !!! XEIF%: VAL ENDIF JL PRMOVQ < NON, ON EST DONC DANS 'HDLPR1', ET IL < N'Y A PAS DE TEST DE DEFAUT SECTEUR < A FAIRE... BSR VAR+APRDEF < OUI, DONC ATTENTION, TOUS LES 1K-MOTS, < IL FAUT TESTER LE DEFAUT SECTEUR, < ET QUI SAIT S'ARRETER... PRMOVQ: EQU $ JDX PRMOV2 < AU 1K-MOTS SUIVANTS... < < FIN DU MODULE DE SIMULATION : < < RESTAURATION DE (SLO,SLE) : CALL #SISP CMS5 PLRSLO# RSR CALL #SISP CMS5 CHECK# CALL #SISP CMS5 DOL1# PAGE < < < D A T E E X P R I M E E E N A S C I : < < XWOR%7: VAL MOCG=K XWOR%7: VAL -XWOR%7 < POUR UN DECALAGE A DROITE... XWOR%4: VAL -NOCMO < POUR CALCULER 'XWOR%2', XWOR%3: VAL XWOR%4+NOCMO-E < POUR CALCULER 'XWOR%1'. DATE: EQU $ < MESSAGE DE DATE ET HEURE. <******************************************************************************* WORD " J" XWOR%8: VAL '0000000@@@@ < RECUPERATION DU CODE GENERE... <******************************************************************************* XWOR%1: VAL XWOR%8(MOCG>XWOR%7-KJ=FCSIGN(BIT*XWOR%3 XWOR%2: VAL XWOR%8(MOCD-KJ=FCSIGN(BIT*XWOR%4 XWOR%5: VAL XWOR%1-XWOR%2=FCSIGN(BIT)BIT*XWOR%4 XXDATJ:: VAL $-DATE*NOCMO+XWOR%1+XWOR%2+XWOR%5 WORD "J/" <******************************************************************************* WORD "MM" XWOR%8: VAL '0000000@@@@ < RECUPERATION DU CODE GENERE... <******************************************************************************* XWOR%1: VAL XWOR%8(MOCG>XWOR%7-KM=FCSIGN(BIT*XWOR%3 XWOR%2: VAL XWOR%8(MOCD-KM=FCSIGN(BIT*XWOR%4 XWOR%5: VAL XWOR%1-XWOR%2=FCSIGN(BIT)BIT*XWOR%4 XXDATN:: VAL $-DATE*NOCMO+XWOR%1+XWOR%2+XWOR%5 WORD "/1" XXDAT9:: VAL $-DATE < VALEUR UTILISEE PAR 'TH0'... <******************************************************************************* WORD "9A" XWOR%8: VAL '0000000@@@@ < RECUPERATION DU CODE GENERE... <******************************************************************************* XWOR%1: VAL XWOR%8(MOCG>XWOR%7-KA=FCSIGN(BIT*XWOR%3 XWOR%2: VAL XWOR%8(MOCD-KA=FCSIGN(BIT*XWOR%4 XWOR%5: VAL XWOR%1-XWOR%2=FCSIGN(BIT)BIT*XWOR%4 XXDATA:: VAL $-DATE*NOCMO+XWOR%1+XWOR%2+XWOR%5 WORD "A-" <******************************************************************************* WORD "HH" XWOR%8: VAL '0000000@@@@ < RECUPERATION DU CODE GENERE... <******************************************************************************* XWOR%1: VAL XWOR%8(MOCG>XWOR%7-KH=FCSIGN(BIT*XWOR%3 XWOR%2: VAL XWOR%8(MOCD-KH=FCSIGN(BIT*XWOR%4 XWOR%5: VAL XWOR%1-XWOR%2=FCSIGN(BIT)BIT*XWOR%4 XXDATH:: VAL $-DATE*NOCMO+XWOR%1+XWOR%2+XWOR%5 <******************************************************************************* WORD "/M" XWOR%8: VAL '0000000@@@@ < RECUPERATION DU CODE GENERE... <******************************************************************************* XWOR%1: VAL XWOR%8(MOCG>XWOR%7-KM=FCSIGN(BIT*XWOR%3 XWOR%2: VAL XWOR%8(MOCD-KM=FCSIGN(BIT*XWOR%4 XWOR%5: VAL XWOR%1-XWOR%2=FCSIGN(BIT)BIT*XWOR%4 XXDATM:: VAL $-DATE*NOCMO+XWOR%1+XWOR%2+XWOR%5 WORD "M/" <******************************************************************************* WORD "SS" XWOR%8: VAL '0000000@@@@ < RECUPERATION DU CODE GENERE... <******************************************************************************* XWOR%1: VAL XWOR%8(MOCG>XWOR%7-KS=FCSIGN(BIT*XWOR%3 XWOR%2: VAL XWOR%8(MOCD-KS=FCSIGN(BIT*XWOR%4 XWOR%5: VAL XWOR%1-XWOR%2=FCSIGN(BIT)BIT*XWOR%4 XXDATS:: VAL $-DATE*NOCMO+XWOR%1+XWOR%2+XWOR%5 <******************************************************************************* BYTE KCR;KLF XWOR%1: VAL '000000000@@=FCSIGN-SIGNP <******************************************************************************* LKDATE:: VAL $-DATE*NOCMO+XWOR%1 IF LBUFES*NOCMO-LKDATE,,XEIF%,XEIF% IF ATTENTION : 'LODATE' NE PEUT ETRE EMIS SUR IF ATTENTION LE PERIPHERIQUE 'OUT' !!! XEIF%: VAL ENDIF MKLOM:: VAL COSBT?BITPAR=FMASK(K=FCINST < AFIN DE FORCER LE BIT DE PARITE SUR LA < LONGUEUR DES MESSAGES AFIN D'EVITER DES < AMBIGUITES SUR LES AUTO-RELAIS... LODATE:: VAL LKDATE?MKLOM PAGE < < < D C T H O R L O G E : < < FXHOR:: VAL 10 < FREQUENCE DE L'HORLOGE EN HERTZ. DCTHOR: EQU $ PSTHOR: WORD K;K;K;K;COM+DEPCS;DCTHOR;NIL;PILHOR;HANDLR;SMST;SO;SE #@ASCI " HOR" < #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 HDLHOR < HANDLER HORLOGE. WORD ITHOR WORD K;K < ETAT. WORD XBITS0 < BITSEM. WORD XXNTRY;TRYVID < NTRIES & FRTRY. WORD K < HSTATS. WORD XTESTO < TESTO... WORD XXDCTF < 'DCT' NON CONNECTABLE... WORD XFONBA < DCTFUP ("ALTITUDES" DES FONCTIONS). < < < Z O N E V A R I A B L E D E L ' H O R L O G E : < < VARHOR: EQU $ IF VARHOR-DCTHOR-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF < < REARMEMENT EVENTUEL DE HANDLERS : < WORD NILK < CONTIENT EVENTUELLEMENT LE NSP < D'UN HANDLER A ARMER ; CE MOT < EST UTILISE CONJOINTEMENT AVEC < LE BIT0(SPHEX) DE CE HANDLER. < PERMET AUSSI D'ARMER LE SYSTEME < DE VISUALISATION VIDEO SI CELUI- < CI EXISTE... < A NOTER QUE S'IL N'EXISTE PAS, < SON RELAI DE DCT EST NUL, ET < QUE L'ON VA TOMBER DANS LE < RESTART D'OU UN 'ACTD'... NSPUP:: VAL $-D-VARHOR < NSP HANDLER A ARMER. < < CONSTANTES DE FREQUENCE DE L'HORLOGE : < WORD NILK FREHOR:: VAL $-D-VARHOR < FREQUENCE COURANTE DE L'HORLOGE. WORD K NBITH:: VAL $-D-VARHOR < COMPTEUR DES INTERRUPTIONS. WORD -FXHOR KMSHOR:: VAL $-D-VARHOR < DECOMPTEUR DE MILLI-SECONDES, < PASSE PAR 0 A CHAQUE SECONDE. WORD YECFRE,X DECFRE:: VAL $-D-VARHOR < TABLE DES FREQUENCES REELLES < DE L'HORLOGE, EXPRIMEES EN < MULTIPLE DE 100 MS YECFRE: EQU $ BYTE FXHOR/1;FXHOR/2;FXHOR/5;FXHOR/10;0;0 < < COMPOSANTES DE LA DATE : < WORD LTIME-IJIJDX,X < INDEXATION A PARTIR DE 1. DATHOR:: VAL $-D-VARHOR < TABLE CONTENANT EN BINAIRE < LA DATE ET L'HEURE AVEC LA < VALEUR MAX DE CHAQUE COMPOSANTE. < < A T T E N T I O N : LE 1ER OCTET INDIQUE LA VALEUR QUE < NE PEUT ATTEINDRE LE 2EME OCTET. < XXMAXT:: VAL MOCG < OCTET CONTENANT LE MAXIMUM D'UNE < COMPOSANTE. XXDX:: VAL XXMAXT=K/NBITOC < POUR ATTEINDRE LA VALEUR COURANTE. IF XXMAXT)MMOT-MOCD,,XEIF%, IF ATTENTION : LA VALEUR COURANTE DOIT ETRE SUR 'MOCD' !!! XEIF%: VAL ENDIF LTIME: EQU $ < ADDRESSE DES 6 COMPOSANTES DE < LA DATE/HEURE POUR NSPDAT. XXDAT0:: VAL K < NUMEROS COMMENCANT A 0... XXDAT1:: VAL K+I < NUMEROS COMMENCANT A 1... BYTE 98;XXDAT0 < ANNEE. XXHANE:: VAL $-D-LTIME < INDEX DES ANNEES. XXNMOI:: VAL 12 < ET OUI, IL Y A 12 MOIS DANS L'ANNEE... BYTE XXNMOI+I;XXDAT1 < MOIS. XXHMOI:: VAL $-D-LTIME < INDEX DES MOIS. BYTE K;XXDAT1 < LA VALEUR MAX DES JOURS EST < VARIABLE ET FONCTION DU MOIS < DANS LEQUEL ON SE TROUVE (CF. < LA TABLE 'TMOIS' QUI DONNE LE < NBRE DE JOURS DE CHAQUE MOIS). XXHJOU:: VAL $-D-LTIME < INDEX DES JOURS. BYTE 24;XXDAT0 < HEURE. XXHHEU:: VAL $-D-LTIME < INDEX DES HEURES. HEURE:: VAL 60 < NOMBRE DE MINUTES DANS UNE HEURE. BYTE HEURE;XXDAT0 < MINUTE. XXHMIN:: VAL $-D-LTIME < INDEX DES MINUTES. BYTE MINUTE;XXDAT0 < SECONDE. XXHSEC:: VAL $-D-LTIME < INDEX DES SECONDES. LOTIME:: VAL $-LTIME < LONGUEUR DE LA TABLE 'LTIME'. < < TABLE DES NOMBRES DE JOURS DE CHAQUE MOIS : < WORD TMOIS,X MOIHOR:: VAL $-D-VARHOR < TABLE DONNANT POUR CHAQUE MOIS < LE NOMBRE DE JOURS+1 DE CELUI-CI; < LE NUMERO DU MOIS (1-12) EST < L'INDEX D'OCTET DE CETTE TABLE). FEVRIE:: VAL 2 < FEVRIER EST LE DEUXIEME MOIS... FEVR28:: VAL 28+I < FEVRIER (ANNEE NORMALE), FEVR29:: VAL 29+I < FEVRIER (ANNEE BISSEXTILE). BISSEX:: VAL 4 < LES ANNEES BISSEXTILES SONT DIVISIBLES < PAR 'BISSEX'... XWOR%1: VAL BISSEX=K IF BIT>XWOR%1-BISSEX,,XEIF%, IF ATTENTION : 'BISSEX' DOIT ETRE UNE PUISSANCE DE 2 !!! XEIF%: VAL ENDIF XWOR%1: VAL XXHMOI+IJIJDX+NBITOC XWOR%2: VAL XXHJOU+IJIJDX+NBITOC XWOR%3: VAL COSBT?XWOR%1=FMASK(K=FCINST XWOR%3: VAL COSBT?XWOR%2=FMASK(K=FCINST?XWOR%3 XXX30:: VAL 30+I < POUR LES MOIS DE 30 JOURS, XXX31:: VAL 31+I < ET CEUX DE 31 JOURS... TMOIS: EQU $ BYTE XWOR%3;XXX31 BYTE FEVR28;XXX31 BYTE XXX30;XXX31 BYTE XXX30;XXX31 BYTE XXX31;XXX30 BYTE XXX31;XXX30 BYTE XXX31 IF $-TMOIS-D*NOCMO-XXNMOI,,XEIF%, IF ATTENTION : LA LONGUEUR DE 'TMOIS' EST MAUVAISE !!! XEIF%: VAL ENDIF MINHOR:: VAL TMOIS-VARHOR < L'OCTET0 DE TMOIS CONTIENT < LES VALEURS D'INITIALISATION < DE CHAQUE COMPOSANTE DE LA DATE : < A LA COMPOSANTE DE NUMERO (X), < EST ASSOCIE LE BIT DE RANG (X) : < OCTET0=K0110000 (SEULS LES MOIS < ET LES JOURS SONT INITIALISES < A 1, LES AUTRES A 0). IF NBITOC-LOTIME,,XEIF%,XEIF% IF ATTENTION : LA LISTE DES BITS DANS 'XWOR%3' IF NE TIENT PAS SUR UN OCTET !!! XEIF%: VAL ENDIF < < DATE EXPRIMEE EN ASCI : < WORD DATE,X ADATE:: VAL $-D-VARHOR < RELAI VERS LE MESSAGE ASCI DE < LA DATE ET DE L'HEURE (CF. CCI). WORD YEDATE,X EDATE:: VAL $-D-VARHOR < POSITION DES DIFFERENTES < COMPOSANTES DE LA DATE ET DE < L'HEURE DANS LE MESSAGE < (EXPRIME EN NUMERO DE CARACTERES) NLS WORD SECRET PASSD:: VAL $-D-VARHOR < RELAI D'ACCES AU CARACTERE < VARIABLE DU MOT DE PASSE < SOUS :SYS. LST < < CONSTANTES DIVERSES ET RELAIS : < WORD SPBIS ASPBIS:: VAL $-D-VARHOR < MODULE DE TRAITEMENT SPECIFIQUE DES < CHANGEMENTS DE MOIS, D'ANNEES... WORD E707 AE707:: VAL $-D-VARHOR < ROUTINE D'ARRET DE L'HORLOGE. WORD BETA3 ABETA3:: VAL $-D-VARHOR < ROUTINE DE CALCUL DU BETA < DU SEMAPHORE SDODO. WORD CFHOR ACFHOR:: VAL $-D-VARHOR < ROUTINE DE CALCUL DE LA FRQUENCE < EN MULTIPLE DE 100 MS WORD ACHOR?FPHCMD < SORTIE COMMANDE SUR L'HORLOGE; < IL NE PEUT S'AGIR QUE D'UNE < VALIDATION OU D'UNE DEVALIDATION < DES IT HORLOGES. OPHOR:: VAL $-D-VARHOR < OPERANDE DE LA SIO DE FONCTION. WORD ACHOR?FPHETA < ENTREE ETAT SUR L'HORLOGE ETAHOR:: VAL $-D-VARHOR < UTILISE POUR FAIRE RETOMBER < L'IT DANS L'ARIT HORLOGE WORD ATSUSP OTSUSP:: VAL $-D-VARHOR < AUTOMATE DE SUSPENSION DES < ESCLAVES. XC3FF:: VAL '03FF < POUR LE RAZ DES BITS 0 A 5. WORD XC3FF C3FF:: VAL $-D-VARHOR < RAZ BIT 0-5. < < CONSTANTES DE TIMED-OUT : < IFRETO:: VAL 2 < PERIODE EN SECONDES DES TESTS < SUR LES TIMED OUT DE CERTAINS < HANDLERS PERIPHERIQUES. WORD IFRETO FRETO:: VAL $-D-VARHOR < GENERATEUR DE LA PERIODE DES < TESTS DE TIMED OUT ; CE < DECOMPTEUR EST DECREMENTE A < CHAQUE SECONDE. WORD SPTO ASPTO:: VAL $-D-VARHOR < SOUS-PROGRAMME DE DETECTION ET DE < TRAITEMENT DES TIME-OUT. < < DEMANDE D'INITIALISATION DE L'ORLOGE POUR 'SYSINI' : < HORINI: EQU $ BYTE NSPHOR;XDSYM < DEMANDE D'INITIALISATION DE < L'HORLOGE. WORD E < INITIALISATION. WORD XXHINI < 100 MILLI-SECONDES DZS LDEM0+HORINI-$ < < DONNEES NECESSAIRES A LA COPY PERIODIQUE DU SYSTEME : < WORD KOPY AHCOPY:: VAL $-D-VARHOR < SOUS-PROGRAMME DE PREPARATION DES < INFORMATIONS DE COPY. DCOPY2:: VAL $-VARHOR BYTE NSPDKF;XDSYM?XTYPAD < SYMBOLIQUE ET ADRESSE MOT. WORD FGW < DEMANDE D'ECRITURE. WORD BCOPY WORD LCOPY2 WORD SCOPY < ADRESSE DISQUE DE 'COPY' (1 OU 2)... DZS LDEM0+VARHOR-$+DCOPY2 PCOPY:: VAL 2*FXHOR/10 < DEFINITION DE LA PERIODE DES COPY < EXPRIMEE EN UNITE 'QUANTUM DE TEMPS < UTILISATEUR' ; CETTE PERIODE EST < DONC FONCTION DE LA CHARGE DU SYSTEME ; < ENFIN, CETTE CONSTANTE EST MODULEE < A L'AIDE DU CHAMP 'MKCOP' DE 'ETASYS'. XWOR%1: VAL MKCOP=K XWOR%1: VAL -XWOR%1 < POUR UN DECALAGE A DROITE... XWOR%1: VAL MKCOP>XWOR%1 < MAJORANT DE LA PLUS GRANDE CONSTANTE < QUE L'ON PEUT METTRE DANS 'MKCOP'. IF PCOPY,,,XEIF% IF A T T E N T I O N : 'PCOPY' DOIT ETRE POSITIF !!! XEIF%: VAL ENDIF IF PCOPY-XWOR%1,,,XEIF% PCOPY: VAL PCOPY+XWOR%1 < AFIN DE GARANTIR UNE PERIODE DE < COPY STRICTEMENT POSITIVE... XEIF%: VAL ENDIF WORD PCOPY CCOPY:: VAL $-D-VARHOR < GENERATEUR DE LA PERIODE DES COPY < DU SYSTEME SUR 'DKF'. WORD '1111 PATCOP:: VAL $-D-VARHOR < PATTERN CYCLIQUE INDIQUANT A CHAQUE < PERIODE DE COPY, QUELLE TYPE DE < COPY DOIT ETRE FAITE, SUIVANT LES < BITS QUI SUIVENT : EATCOP: EQU VARHOR+PATCOP < ADRESSE REFERENCEE PAR LE < PROCESSEUR ESCLAVE. WORD K VALCFM:: VAL $-D-VARHOR < CETTE CONSTANTE PERMET DE SAVOIR SI < UNE LECTURE 'DKF' A EU LIEU, ET EST < EXPLOITEE PAR L'ECRITURE SUR 'DKM' : < =0 : PAS DE LECTURE 'DKF' (DONC NE PAS < FAIRE D'ECRITURE 'DKM', < =1 : IL Y A EU LECTURE 'DKF'... WORD NIL COPS1:: VAL $-D-VARHOR < ADRESSE DU PREMIER SECTEUR DE 'DKF' < A LIRE, WORD NSDKF-Z+I COPS2:: VAL $-D-VARHOR < ADRESSE DU PREMIER SECTEUR DE 'DKF' A < A NE PAS SAUVEGARDER SUR 'DKM'. CALL #SISP CMS5 DOL2# BUFCOP: EQU $ DZS YY7 < BUFFER DE TRANSIT DKF --> DKM. DCOPYF:: VAL $-VARHOR < DEMANDE DE LECTURE SUR 'DKF' :: BYTE NSPDKF;XDSYM?XTYPAD < ADRESSE MOT... WORD FGR < LECTURE, WORD BUFCOP WORD YY8 < 1 SECTEUR, WORD NSDKF-I < ADRESSE DU SECTEUR COURANT. WORD NILK WORD XXSEM0+I < WEIO : AFIN DE COMMENCER PAR UN 'WAIT'... WORD NIL DCOPYM:: VAL $-VARHOR < DEMANDE D'ECRITURE SUR 'DKM' :: BYTE NSPDKM;XDSYM?XTYPAD < ADRESSE MOT... WORD FGWQ < ECRITURE AVEC QUANTA=1, WORD BUFCOP WORD YY8 < 1 SECTEUR DE QUANTA=1, WORD NILS < ADRESSE DU SECTEUR COURANT. WORD NILK WORD XXSEM0+I < WEIO : AFIN DE COMMENCER PAR UN 'WAIT'... WORD NIL CALL #SISP CMS5 DOL1# < < PURGE DE LA MEMOIRE VIRTUELLE : < DPURGE:: VAL $-VARHOR < DEMANDE DE PURGE... BYTE NSPDKB;K < DE LA MEMOIRE VIRTUELLE DKB. FOPURG:: VAL '05 < FONCTION DE PURGE DE 'DKB'. WORD FOPURG < 'OPDEM'. DZS LDEM0+VARHOR-$+DPURGE WORD PURGE APURGE:: VAL $-D-VARHOR < SOUS-PROGRAMME DE PURGE ; C'EST < UN SOUS-PROGRAMME POUR EVITER LES < SAUTS DE LA MORT (>YY7 MOTS...). < < PREVENTION DES INTER-BLOCAGES SUR ATTENTE DE BUFFERS : < NPREBB:: VAL 8 < NOMBRE MAXIMUM DE BUFFERS QUE < L'HORLOGE PEUT STOCKER. NPREB0:: VAL NPREBB/XXXMOY < NOMBRE MAXIMUM DE BUFFERS QUE L'HORLOGE < EST AUTORISEE A NE PAS LIBERER ; CECI < AFIN DE DEBLOQUER D'EVENTUELS INTER- < BLOCAGE DU SYSTEME : PAR EXEMPLE LORS- < QU'IL Y A BEAUCOUP DE FICHIERS OUVERTS, < UNE NOUVELLE DEMANDE D'OPEN, QUI A LIEU < FORCEMENT EN MEMOIRE BASSE, SI ELLE EST < EMISE PAR UN GROS PROGRAMME PEUT BLOQUER < LE SYSTEME ; LA SOLUTION EST ALORS DE < FAIRE : < 1 - UN ABORT SUR QUELQUES VISUS (PAR < 'ALT-MODE'), < 2 - MODIFIER LE MOT 'CPIB0' (EN REDUI- < SANT LA VALEUR DU PARAMETRE 'NPREB0), < 3 - LE SYSTEME DOIT ALORS SE DEBLOQUER < DE LUI-MEME... IF NPREB0-NPREBB,XEIF%,, IF ATTENTION : LES PARAMETRES 'NPREBB' ET IF 'NPREB0' SONT INCOMPATIBLES !!! XEIF%: VAL ENDIF WORD K KPREBB:: VAL $-D-VARHOR < COMPTEUR DES BUFFERS EN STOCK. DPREBB:: VAL $-VARHOR < DEMANDE D'ALLOCATION/RELEASE BUFFER. BYTE NSPRLB;K WORD COSBT?WAITB=FMASK(K=FCINST < OPDEM : CONTIENT LE BIT 'WAITB' < AFIN QUE LE RETOUR AIT LIEU SI < LA DEMANDE NE PEUT ETRE SATISFAITE. WORD PPREBB-P < CE MOT EST VARIABLE ET POINTE L'ADRESSE < DU BUFFER ALLOUE AU COUP PRECEDENT. WORD W < ON DEMANDE/RELEASE 1 BUFFER A LA FOIS. DZS LDEM0+VARHOR-$+DPREBB < < PILE DES BUFFERS MIS AU CHAUD PAR L'HORLOGE : < PPREBB: EQU $ DZS NPREBB YEDATE: EQU $ BYTE K;XXDATA;XXDATN;XXDATJ;XXDATH;XXDATM;XXDATS;K < < AUTOMATE D'INTERRUPTION HORLOGE DES ESCLAVES : < EOTO7: WORD SWAPO;RLMESC;RUNO;ALMESC;SWAPI;ISLOE ATSUSP: WORD EOTO7-$ < < < P I L E D E L ' H O R L O G E : < < < NOTA : < C'EST DONC UNE HORLOGE < ELECTRIQUE... < < CALL #SISP CMS5 DOL2# PILHOR: EQU $-DEPILE XWPILE: VAL LPILEH+8+8 CALL #SISP CMS5 GENPIL2# CALL #SISP CMS5 CHECK# PAGE < < < H A N D L E R H O R L O G E : < < < FONCTION : < CE HANDLER EST CHARGE DE GERER < L'HORLOGE (ET EN PARTICULIER LA < LA DATE ET L'HEURE), ET TOUTES < LES ACTIONS PERIODIQUES (LES < COPYS, LES TESTS DE MANQUE DE < BUFFERS,...). < < USE L,DCT0 USE W,DEM0 HDLHOR: EQU $ LA ARGDEM+OPDEM < RECUPERATION DE LA FONCTION A < REALISER SUR L'ORLOGE. JANE E702 IF E-K,XEIF%,,XEIF% IF ATTENTION : LA FONCTION 'INITIALISATION EST MAUVAISE !!! XEIF%: VAL ENDIF < < D E S A R M E M E N T D E L ' H O R L O G E : < E707: EQU $ LAI K < MOT DE COMMANDE DEVALIDATION < DES IT HORLOGE SIO VAR+OPHOR < SIO DE COMMANDE RSR < ET C'EST TOUT... < < < ( R E - ) I N I T I A L I S A T I O N D E L ' H O R L O G E : < < < FONCTION : < ON VALIDE D'ABORD LES INTER- < RUPTIONS D'HORLOGE, ET ON INI- < TIALISE A 0 LE COMPTEUR 'NBITH' ; < CELUI-CI SERA UTILISE POUR COMP- < TABILISER MODULO 'N' LES INTER- < RUPTIONS D'HORLOGE, ET AINSI PAL- < LIER AU FAIT QUE LA FREQUENCE DE < L'HORLOGE N'EST PAS PROGRAMMABLE... < LA CONSTANTE 'N' EST FONCTION < DE LA FREQUENCE COURANTE 'FREQI' < QUE L'ON SOUHAITE ; LORS DE LA < RECEPTION D'UNE INTERRUPTION < D'HORLOGE PAR 'ITHOR', ON FERA : < < NBITH <-- (NBITH)+1, < SI (NBITH)=N, ALORS ON TRANSMET CETTE < INTERRUPTION D'HORLOGE < A 'HDLHOR' COMME INTER- < RUPTION DE FIN DE PERIODE. < < E702: EQU $ BSR VAR+ACFHOR < RENVOIE : (A)=FREQUENCE EXPRIMEE < EN UNITE MULTIPLE DE 100 MS E729: EQU $ STA VAR+FREHOR < SAVE POUR LE DECOMPTE DE LA < DATE ET DE L'HEURE. STZ VAR+NBITH < RAZ COMPTEUR D'IT LAI -FXHOR STA VAR+KMSHOR < REINITIALISATION DU DECOMPTEUR < DE SECONDES. E703: EQU $ < < < V A L I D A T I O N D E S I T H O R L O G E < < < NOTA : < ON VALIDE LES INTERRUPTIONS A CHAQUE FOIS QU'UNE < INTERRUPTION A ETE RECUE ET TRAITEE ; EN EFFET, LA < LA LECTURE DU MOT D'ETAT DANS 'ARIT' FAIT RETOMBER < LE SOUS-NIVEAU, MAIS AUSSI DEVALIDE LES INTER- < RUPTIONS !!! < MAIS ATTENTION, A LA SORTIE DE 'ITHOR', < ON LES REVALIDE AUSSI, AFIN DE DETECTER < LES BLOCAGES DE L'HORLOGE (PAR EXEMPLE EN < ATTENTE SUR UN DISQUE EN TIME-OUT, ALORS < QUE LE SYSTEME NE PASSE JAMAIS EN 'IDLE'... < < LAI MOMINT < MOT DE COMMANDE DE VALIDATION < DES IT HORLOGE SIO VAR+OPHOR < SIO DE COMMANDE < < < T E S T D ' A R R E T D U C A L C U L A T E U R : < < < NOTA : < ETANT DONE LA FREQUENCE ET SURTOUT < LA PERIODICITE IMPLACABLE DES IT < DE L'ORLOGE, IL FAUT PRENDRE < MILLE PRECAUTIONS POUR ARRETER < LE CALCULATEUR : L'ARRET SERA < PROGRAMME : EN POSITIONNANT LA CLEF 0 < DU PUPITRE, HDLHOR POURRA DECIDER < CET ARRET ; ALORS IL STOPERA L' < HORLOGE, ET PASSERA LA MAIN < AU RECOVERY ; AU RETOUR, IL REINITIALISERA < L'HORLOGE. < < BSR ASMPUI < LECTURE PUPITRE RENVOIE < (A)=MOT LU < (B)=ETAT PUPITRE < (CARY)=INFORMATION VALIDE (1). JNC E730 < NON, RIEN A FAIRE... BSR VAR+APURGE < PEUT-ETRE FAUT-IL PURGER LE BEBE ??? JAGE E730 < EN TOUT CAS, IL NE FAUT PAS ARRETER < LE SYSTEME... < < ARRET DU CALCULATEUR : BIT0=1 : < BSR VAR+AE707 < ARRET DE L'HORLOGE. < < BOUCLE DE BLOCAGE DES TACHES DU SYSTEME < DE PRIORITE INFERIEURE A CELLE DE L'HORLOGE : < E730XX: EQU $ LXI K HALT < ON LAISSE AINSI TOUTES LES ENTREES- < SORTIES EN COURS SE TERMINER TRAN- < QUILLEMENT... CPZR X < S'EST-IL PASSE QUELQUECHOSE? JNE E730XX < OUI ALORS IL POURRAIT S'EN < PASSER ENCORE... < < BLOCAGE DE TOUT LE SYSTEME : < BSR ASYSER < < RELANCE DU SYSTEME : < JMP E702 < RELANCE DU CALCULATEUR. < < ATTENTE DES IT 'HORLOGE' : < E730: EQU $ < < A NOTER QU'AVANT L'ATTENTE DE L'IT-HORLOGE, ON < A ICI : < A>=K !!! < RQST SIT < ATTENTE IT. JAL Z800 < (A)<0 : C'EST UNE FAUSSE IT < HORLOGE, PROVOQUEE SOIT PAR < 'TEST & SET' NEGATIF, SOIT < PAR 'RESET' POSITIF (CF. LE < RECOVERY). < < < T R A I T E M E N T D E S I T H O R L O G E : < < < NOTA : < ON SE SOUVIENT QUE LA FREQUENCE < DE L'HORLOGE N'EST PAS PROGRAMMABLE ; < CETTE PROGRAMMABILITE EST SIMULE A < L'AIDE DU COMPTEUR 'NBITH', QUI PASSE < PAR 0 LORSQUE L'INTERRUPTION REELLE- < MENT GENEREE PAR L'HORLOGE PEUT ETRE < CONSIDEREE COMME UNE FIN DE PERIODE < PROGRAMMEE... < < CPZ VAR+NBITH < FIN DE PERIODE ??? JNE E703 < NON LA HORIDC < ACCES A LA PATTERN CYCLIQUE < COURANT DES ESCLAVES A SWAPPER < OUT A PRIORI. SCRS S < MODIFICATION CIRCULAIRE DE < CET INDICATEUR, STA HORIDC < ET MISE A JOUR. RQST &ASEMSO <<<<PHASE CRITIQUE AVEC LE < SWAPPER OUT. OR SOCYCL < MODIFICATION DE LA LISTE < CYCLIQUE DES ESCLAVES A < SWAPPER OUT A PRIORI. STA SOCYCL < ET MAJ. LAD &ASEMSO BSR ARLSE < < DECOMPTE DU TEMPS ECOULE : < LA VAR+FREHOR < (A)=FREQUENCE DE L'HORLOGE. AD VAR+KMSHOR < DECOMPTE DES 1/10 DE SECONDES JAL E704 < 1 SECONDE NE S'EST PAS ENCORE < ECOULEE. < < < 1 S E C O N D E S ' E S T E C O U L E E : < M A J D A T E & H E U R E : < < LXI LOTIME < POUR PARCOURS DE LA TABLE < DATHOR EN COMMENCANT PAR LES < SECONDES. IC HTIME+D < COMPTABILISATION JOURNALIERE < DES SECONDES. JNE E904 IC HTIME < PASSAGE DE HTIME+1 A 0. E904: EQU $ LA &VAR+DATHOR ADRI I,A < COMPTABILISATION. SWBR A,B < (B)=OCTETS DE A INVERSES. CPR A,B < SI (A)=(B) C'EST QUE LES 2 OCTETS < DE A SONT EGAUX ET QUE DONC CETTE < ENTREE A ATTEINT SON MAX. JNE E903 < NON, ELLE N'A PAS ATTEINT < SON MAX. < < CAS OU L'ENTREE COURANTE A ATTEINT SON < MAX, IL FAUT LA REINITIALISER, < ET PASSER A LA PRECEDENTE : < SLLS XXMAXT=K < OCTET0(A)=MAX DE L'ENTREE (X). < ET OCTET1(A)=K. LB VAR+MINHOR < ACCES A LA TABLE DES VALEURS < D'INITIALISATION DES COMPOSANTES < DE LA DATE. TBT NBITMO+L,X < LE BIT DE RANG (X) DONNE LA < VALEUR INITIALE DE LA COMPO- < SANTE DE RANG (X). ADCR A < OCTET1(A)=VALEUR INITIALE (K/1). STA &VAR+DATHOR < REINITIALISATION ENTREE COURANTE. JDX E904 < ENTREE PRECEDENTE. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < SURTOUT NE PAS CONTINUER EN SEQUENCE, < CAR EN EFFET : (X)=K... PEUT-ETRE < FAIRE UN 'JMP Z402'... < E903: EQU $ STA &VAR+DATHOR < MAJ ENTREE COURANTE. BSR VAR+ASPBIS < TRAITEMENT DES FINS DE JOUR, DE MOIS < ET D'ANNEE... Z402: EQU $ < < CONVERSION EN ASCI DE LA DATE POUR < LA GRAMMAIRE DU CCI, EN NE MODIFIANT < DANS LE MESSAGE 'CCI' QUE LA PARTIE < DE LA DATE/HEURE QUI A ETE MODIFIEE : < LA RINI < OU EN EST-ON DE L'INITIALISQATION < DU SYSTEME ???? JAG E905 < C'EST FAIT. JAE SYSR31 < OK. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < PEUT-ETRE UN 'JMP Z402', AU CAS < OU 'RINI' AURAIT ETE MODIFIE < A LA MAIN... < JMP Z402 < ATTENDONS L'ENTREE DE LA DATE... SYSR31: EQU $ < < CAS OU LA DATE EST BONNE, MAIS NON CONVERTIEE EN ASCI : < IC RINI < MISE DE RINI A 1. LXI I < TOUTE LA DATE EST A CALCULER < EN ASCI. IF I-IJIJDX,,XEIF%, IF ATTENTION : LE 'LXI' CI-DESSUS EST MAUVAIS !!! XEIF%: VAL ENDIF IF XXHANE+IJIJDX-I,,XEIF%, IF ATTENTION : LE MEME INDEX NE PEUT SERVIR POUR IF 'EDATE' ET 'DATHOR' SIMULTANEMENT !!! XEIF%: VAL ENDIF E905: EQU $ LBY &VAR+EDATE LR A,Y < (Y)=RANG DU 1ER CARACTERE DE < L'ENTREE COURANTE DANS LE < MESSAGE DATE & HEURE. LA &VAR+DATHOR < ENTREE COURANTE DATE & HEURE. ANDI XXMAXT)MMOT < ON NE CONSERVE QUE LA PARTIE < COMPTABILITE (RAZ DU MAX). LR A,B < (B)=COMPTABILITE. LAI K DV DIX < (A)=QUOTIENT, (B)=RESTE DE LA < DIVISION PAR 10 DE LA COMPTABILITE ORI HZERO < CONVERSION ASCI DU QUOTIENT. XR X,Y < (X)=RANG DU QUOTIENT CODE EN ASCI < DANS LE MESSAGE DATE & HEURE. STBY &VAR+ADATE < MAJ DATE & HEURE. ADRI I,X < CARACTERE SUIVANT DU MESSAGE. LR B,A ORI HZERO < CONVERSION ASCI DU RESTE. STBY &VAR+ADATE < ET MISE DANS LE MESSAGE DATE & < HEURE. LR Y,X < RESTAURE INDEX DE DATHOR. ADRI I,X < ENTREE SUIVANTE EVENTUELLE. LYI LOTIME+E CPR X,Y JNE E905 < BOUCLAGE JUSQU'A L'ENTREE < DES SECONDES (ENTREE 6). PAGE NLS < < < G E N E R A T I O N D U T O M E D E S S A P < D Y N A M I Q U E S O U S : S Y S : < < LXI XXDATM+I < INDEX DU 2EME CIFFRE DES MINUTES. LBY &VAR+ADATE < RECUPERATION DU 2EME < CHIFFRE DU NOMBRE DE MINUTES. XWOR%2: VAL M0001 < MASQUE FACULTATIF D'INVERSION DES < BITS CORRESPONDANT A LA VALEUR BAINAIRE < DU CHIFFRE DES UNITES. IF BIT>NBITCX-N-XWOR%2,,XEIF%,XEIF% IF ATTENTION : LE MASQUE FACULTATIF EST TROP GRAND !!! XEIF%: VAL ENDIF EORI HZERO?XWOR%2 < AINSI, SIMULTANEMENT, ON DECODE L'ASCI, < ET ON INVERSE DES BITS DE LA VALEUR < BINAIRE... BSR ACHIFR < CHIFFRAGE DU CHIFFRE DES UNITES... CPI BASE10-Z < LA CONVERSION EST-ELLE EN CHIFFRE ? JLE E905X1 < OUI, C'EST UN CHIFFRE. ADRI HA-HNEUF-Z,A < CAS D'UNE LETTRE. XWOR%6: VAL BASE10-Z+HZERO XWOR%7: VAL BASE10-Z?HZERO IF XWOR%6-XWOR%7,,XEIF%, IF ATTENTION : ICI ET AILLEURS (CF. HEXEX) IF LES CODAGES BINAIRES --> ASCI VONT MERDER !!! XEIF%: VAL ENDIF E905X1: EQU $ ADRI HZERO,A < QUE L'ON RECODE EN ASCI... STBY &VAR+PASSD < QUE L'ON MET DIRECTEMENT COMME < 3EME CARACTERE DU TOM ED < ESSAP DE LOGIN SOUS :SYS !!!! LST < < < R E A R M E M E N T E V E N T U E L < D ' U N H A N D L E R : < < < PHILOSOPHIE : < UTILISE CONJOINTEMENT AVEC < AVEC LE BIT0(SPHEX) D'UN HANDLER ; < ON FERA DANS L'ORDRE : < 1- BIT0(SPHEX)<--0, < 2- NSPUP<--NSP(HANDLER). < ON PEUT DONC AINSI PERMUTER LES < NIVEAUX DES HANDLERS EN LES < DESARMANT, PUIS EN LES RE-ARMANT < A L'AIDE DE L'HORLOGE. < < LX VAR+NSPUP < (X)=NSP EVENTUEL. CPZR X < Y-A-T'IL UN HANDLER A REARMER ??? JLE Z704 < NON. ARM NSNSP0,X < OUI, REARMONS LE HANDLER < DE NSP=(X). STZ VAR+NSPUP < MEMORISATION DU REARMENT < EFFECTUE. < < < T E S T D E S T I M E D O U T : < < Z704: EQU $ DC VAR+FRETO < GENERATION DE LA PERIODE DE < TEST DES TIMED-OUT. JE Z1250 < C'EST LE MOMENT DE TESTER < LES TIMED-OUT... Z1251: EQU $ < PAS ENCORE DE TEST DE TIMED OUT, < OU RETOUR DE CE MEME TEST. < < < T R A C E D U T O P 1 S E C O N D E : < < LXI K XR X,W < SAVE & RAZ W. LAI FNTOP < NIVEAU D'IT 1 (FAUX NIVEAU TOP < 1 SECONDE). BSR ATRACE LR X,W < RESTAURE (W)=@DEMANDE HORLOGE. < < < A T T E N T I O N : < MANQUE LA COMPTABILITE DES ESCLAVES... < JE N'AURAI JAMAIS EU LE COURAGE < DE L'IMPLEMENTER !!! < < LAI -FXHOR E704: EQU $ STA VAR+KMSHOR < M-A-J DU DECOMPTEUR DE 1/10 SEC < < < T E S T D E S U S P E N S I O N < D E L ' E C L A V E C O U R A N T : < < < CONVENTION : < < DCTSY(NSPACT) DONNE EN PERMANENCE L'ADRESSE < DE LA DCT DE L'ESCLAVE ACTIF. SI CETTE ADRESSE < EST NULLE, CELA SIGNIFIE QU'IL N'Y A PAS < D'ESCLAVE ACTIF... < MAIS, ATTENTION, TOUTES LES < RECIPROQUES DE CETTE PROPOSI- < TION SONT FAUSSES !!! < < DCTSY(NSPACT)<--ADRESSE DCTESC : PAR LE 'RUNNER', < DCTSY(NSPACT)<--0 : PAR 'RUNSVC', < DCTSY(NSPACT)<--0 : PAR 'HDLHOR'. < DCTSY(NSPACT)<--0 : PAR 'DOWN' LORSQU'UN ESCLAVE < DESCEND DE LA MEMOIRE HAUTE. < < < A T T E N T I O N : < ETANT DONNE QUE L'ON NE PEUT MASQUER LES < INTERRUPTIONS DANS LE SCHEDULER DE TELLE < FACON QUE LE 'STA &ADCTSY' ET LE < 'ARM NSNSP0+NSPACT' SOIENT INDISSOCIABLES, < LE TEST A FAIRE SUR LA L'ACTIVITE DES < ESCLAVES PORTERA SUR 'ASTF'... < < LYI FONTB < FONCTION TEST BIT. LXI NSNSP0+NSPACT < NIVEAU SOFT DES ESCLAVES. LAD AASTF < @ DU RELAI D'ACCES A ASTF. BSR ATMOBT < CETTE PHASE EST INTERRUPTIBLE, < CAR ON NE FAIT QUE TESTER ASTF, < ET ENCORE POUR UN NIVEAU MOINS < PRIORITAIRE. JNC E705 < LE NIVEAU D'EXECUTION ESCLAVE < EST INACTIF, IL N'Y A DONC < RIEN A FAIRE... < < CAS OU LE NIVEAU ESCLAVE EST ACTIF : < < < TEST D'UN RUN ESCLAVE JUSTE INITIALISE : < DC BHRUN IF XBHRUN-I,,XEIF%, IF ATTENTION : LE TEST SUIVANT EST IDIOT !!! XEIF%: VAL ENDIF JGE E705 < SI BHRUN>=K, ON CONSIDERE QUE < RUNER VIENT JUSTE D'INTIALISER < L'ESCLAVE QUI EST ACTIF, ET < ON ATTEND L'IT SUIVANTE POUR < AGIR EVENTUELLEMENT (EN EFFET, < ENTRE TEMPS CET ESCLAVE PEUT < OU EST DEJA EN 'SVC'). < < CAS D'UN 'TEST & SET' NEGATIF, < OU D'UN 'RESET' POSITIF : < Z800: EQU $ < < CAS DE LA 2EME IT HORLOGE POUR < UN MEME ESCLAVE (BHRUN=-1), < OU CAS DES FAUSSES INTERRUPTIONS < D'HORLOGE ('TH0' OU 'HDLSER') : < LB VAR+OTSUSP PSR L < SAVE @DCT-HORLOGE. LXI NSPACT BSR ACADCT < (L)=@DCT-ESCLAVE (OU RECOVERY < DANS LES AUTRES CAS... LA RS+XXPSTD,L < TEST DU REGISTRE S DE L'ESCLAVE < COURANT. JAL E706 < L'ESCLAVE ETANT EN MODE MAITRE, < C'EST QU'IL EST DANS SVCESC, < 'SVCESC' ET 'RUNSVC' VONT < DESARMER LE NIVEAU ET METTRE A < JOUR DCTSY. LAI NSPHOR < NSP BIDON QUE L'ON MET DANS < DEMESC, AFIN QUE SWAPO NE SE < TRANSFORME PAS EN SWAPOP, POUR < 'FAUX SERVICE IMMEDIAT'... STBY DEMESC-DCTESC+XXNSP,L STZ DEMESC-DCTESC+T+CODEM,L < (EN VUE DU PASSAGE DANS SWAPO...) < < SUSPENSION DE L'ESCLAVE COURANT (MODE ESCLAVE) : < < ON A ICI : < (X)=NSPACT, < (L)=ADRESSE DCT(ESCLAVE) ACTIF (EN EXECUTION). < (B)=ADRESSE AUTOMATE DE SUSPENSION. < < DESARMEMENT DU NIVEAU D'EXECUTION ESCLAVE : < LYI FONRB0 < FONCTION RESET (A 0). LAD AASTF < RELAI D'ACCES A ASTF. BSR ASMMK <<<< MASQUAGE GENERAL DES IT < < P H A S E I N I N T E R R U P T I B L E : < STZ &ADCTSY < EN RAZANT DCTSY(NSPACT), ON < MEMORISE QU'IL N'Y A PLUS < D'ESCLAVE EN EXECUTION. LXI NSNSP0+NSPACT < (X)=NIVEAU SOFT D'EXECUTION-ESCLAVE. BSR ATMOBT < ASTF(NSNSP0+NSPACT)=K. BSR ASMDK <<<< DEMASQUAGE GENERAL DES IT BSR ADOWN < OU EST L'ESCLAVE ??? JE E706 < IL EST EN MEMOIRE DE SWAPPING HAUTE, < DONC, IL A DEJA UN NIVEAU DE SERVICE < QUE 'ADOWN' A D'AILLEURS REVEILLE... BSR AALOHS < DEMANDE D'ALLOCATION D'UN < HANDLER DE SERVICE POUR L'ESCLAVE < EN EXECUTION : < (L)=@DCT-ESCLAVE, < (B)=@AUTOMATE DE SUSPENSION. E706: EQU $ PLR L < RESTAURE (L)=@DCT-HORLOGE. E705: EQU $ < < < A T T E N T I O N : < LA SEQUENCE QUI SUIT EST EXECUTEE < QU'IL S'AGISSE D'UNE VRAIE INTERRUP- < TION D'HORLOGE, OU QU'IL S'AGISSE D'UNE < FAUSSE (VOIR L'ACTION DE 'TH0' SUR LA < TACHE HORLOGE) !!! < < BSR VAR+ACFHOR < RENVOIE : < (A)=FREQUENCE EXPRIMEE EN UNITES MUL- < TIPLES DE 100 MS... CP VAR+FREHOR < EST-CE LA FREQUENCE D'INITIALISATION. JNE E729 < NON, C'EST DONC QU'UNE RE- < INITIALISATION DE L'HORLOGE A < ETE DEMANDEE. CPZ VAR+CCOPY < FAUT-IL FAIRE UNE COPY DU SYSTEME ??? JLE Z1250A < ET OUI... Z1250B: EQU $ JMP E703 < VERS LA REVALIDATION DES IT HORLOGE < ET L'ATTENTE DE L'IT SUIVANTE RSR < ...NE SERA JAMAIS EXECUTE... PAGE < < < T R A I T E M E N T D E S C H A N G E M E N T S < D E J O U R S , D E M O I S E T D ' A N N E E S : < < < FONCTION : < CE MODULE MIS EN SOUS-PROGRAMME POUR < EVITER DES PROBLEMES DE SAUTS SUPERIEURS < A 128 MOTS, A POUR FONCTION : < 1 - SI UNE ANNEE S'EST ECOULEE, ON REGARDE < SI LA NOUVELLE EST BISSEXTILE, AFIN DE < PREVOIR LE CAS DU MOIS DE FEVRIER. < 2 - SI UN MOIS S'EST ECOULE, ON MET EN < PLACE LE NOMBRE DE JOURS DU NOUVEAU MOIS. < 3 - SI UN JOUR S'EST ECOULE, ON REINI- < TIALISE LE COMPTEUR QUOTIDIEN. < 4 - SI UNE MINUTE S'EST ECOULE, < ELLE DEBLOQUE SYSTEMATIQUEMENT < LES UTILISATEURS QUI SE TROUVE- < RAIENT BLOQUES SUR 'SEMCDA' ; LA < DUREE DU "TIME-OUT" SUR 'SEMCDA' < EST DONC EXTREMENT VARAIBLE (DE < 0 A 59 SECONDES...) MAIS C'EST < COMME CELA ET PAS AUTREMENT POUR < DES RAISONS EVIDENTES DE SIMPLI- < CITE... < < < ARGUMENT : < (X)=NUMERO DE LA DERNIERE COMPOSANTE DE LA < DATE MISE A JOUR (LA MISE A JOUR SE < FAISANT DES SECONDES VERS LES ANNEES). < < SPBIS: EQU $ XKREG: VAL K < INITIALISATION DU CUMUL DES REGISTRES... #@PSR X < #SISP CMS5 KREG# < (PAR COMPATIBILITE AVEC 'TOCDAG'...) REGBIS:: VAL -XKREG < NOMBRE DE REGISTRES EMPILES... LR X,A < (A)=NUMERO DE LA DERNIERE COMPOSANTE MODI < FIEE DANS LA DATE COURANTE (N'OUBLION < PAS QU'ON MODIFIE LA DATE A REBROUSSE < POILS : DES SECONDES VERS LES ANNEES. CPI XXHMIN+IJIJDX < UNE MINUTE S'EST-ELLE ECOULEE ??? JE TOCDA1 < OUI, ALLONS EMETTRE UN TIME-OUT SUR LA < SYNCHRONISATION SUR 'CDAG0'... < EN FAIT, ON NE SE CASSE PAS LA < NENETTE... A CHAQUE CHANGEMENT < DE MINUTE, ON REVEILLE A PRIORI < LES UTILISATEURS (VIA 'HDLSER') < QUI SONT BLOQUES SUR 'SEMCDA'... < < TRAITEMENT DES JOURS, MOIS ET ANNEES : < CPI XXHJOU+IJIJDX < UN JOUR S'EST-IL ECOULE ??? JG SPBIS4 < NON, C'EST FINI... IF XXHJOU-XXHANE,,,XEIF% IF ATTENTION : LES TESTS SONT MAUVAIS !!! XEIF%: VAL ENDIF IF XXHJOU-XXHMOI,,,XEIF% IF ATTENTION : LES TESTS SONT MAUVAIS !!! XEIF%: VAL ENDIF < < CAS D'UN JOUR (OU UN MOIS, OU UNE ANNEE) QUI S'EST ECOULE : < STZ HTIME < REINITIALISATION STZ HTIME+D < DU COMPTEUR QUOTIDIEN... CPI XXHANE+IJIJDX < UNE ANNEE S'EST-ELLE ECOULEE ??? JG SPBIS1 < NON, MAIS PEUT-ETRE UN MOIS... < < CAS DU "NOUVEL AN" (BONNE ANNEE LA "SEMS"...) : < PSR A,X LXI XXHANE+IJIJDX*NOCMO+XXDX LBY &VAR+DATHOR < (A)=NOUVELLE ANNEE, XWOR%1: VAL BISSEX=K SLLS NBITMO-XWOR%1 CPI K < EST-ELLE BISSEXTILE ??? LAI FEVR29 < OUI A PRIORI... JE SPBIS2 < ET OUI... LAI FEVR28 < ET NON... SPBIS2: EQU $ LXI FEVRIE STBY &VAR+MOIHOR < DANS TOUS LES CAS, ON MODIFIE LE NOMBRE < DE JOURS DU MOIS DE FEVRIER... PLR A,X SPBIS1: EQU $ CPI XXHMOI+IJIJDX < UN MOIS S'EST-IL ECOULE ??? JG SPBIS3 < NON... < < CAS OU UN MOIS (OU UNE ANNEE) S'EST ECOULE : < PSR A,X LXI XXHMOI+IJIJDX*NOCMO+XXDX LBY &VAR+DATHOR < (A)=MOIS COURANT, LR A,X LBY &VAR+MOIHOR < (A)=NOMBRE DE JOURS DU MOIS (X), XWOR%1: VAL XXMAXT)MMOT=K/NBITOC IF XXMAXT-MOCG,,XEIF%, IF ATTENTION : 'XXMAXT' DOIT ETRE 'MOCG' !!! XEIF%: VAL ENDIF LXI XXHJOU+IJIJDX*NOCMO+XWOR%1 STBY &VAR+DATHOR < QUE L'ON MET EN LIMITATION DU NUMERO < DU JOUR... PLR A,X SPBIS3: EQU $ < < SORTIE : < SPBIS4: EQU $ PLR X < (PAR COMPATIBILITE AVEC 'TOCDAG'...) RSR PAGE < < < D E B L O Q U A G E A P R I O R I D E < L A 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 ' : < < < FONCTION : < CE MODULE EST REFERENCE PAR < DEUX DEMANDEURS DISTINCTS : < 1 - L'HORLOGE A CHAQUE CHAN- < GEMENT DE MINUTES ; < 2 - LE 'CCI' SUITE A LA COMMANDE < "!CDAX". < CE MODULE DEBLOQUE A PRIORI < LES TACHES EN ATTENTE DES VALEURS < POSITIVES DE 'CDAG0', QUELQUE < SOIT LA VALEUR DE 'CDAG0'... < < < A T T E N T I O N : < AUX 'PSR' EFFECTUES A < L'ENTREE DE 'SPBIS' QUI < DOIVENT CORRESPONDRE A < CEUX DE 'TOCDAG !!! < < TOCDAG: EQU $ XKREG: VAL K < INITIALISATION DU CUMUL DES REGISTRES. #@PSR X < #SISP CMS5 KREG# < SAVE L'INDEX DE LA GRAMMAIRE 'CCI'... XWOR%7: VAL -XKREG < NOMBRE DE REGISTRES EMPILES... IF REGBIS-XWOR%7,,XEIF%, IF ATTENTION : IL Y A INCOMPATIBILITE ENTRE IF LES POINTS D'ENTREE DE 'SPBIS' ET 'TOCDAG' !!! XEIF%: VAL ENDIF < < POINT D'ENTREE DE 'SPBIS' : < TOCDA1: EQU $ < < DEBLOCAGE DE 'SEMCDA' : < BSR ASMMK < M A S Q U A G E I N T E R R U P T I O N < (A CAUSE DE 'ITHOR' QUI EXECUTE LE < 'SVC' MAITRE 'SVCM9'...). TOCDA6: EQU $ LA &ASEMCD < (A)=MOT0 DE 'SEMCDA', BSR ABETA < (A)=BETA(SEMCDA) : IF XXSEM0-K,,XEIF%, IF ATTENTION : LE TEST QUI SUIT EST IDIOT !!! XEIF%: VAL ENDIF JAGE TOCDA7 < ET BIEN, IL N'Y A RIEN A FAIRE PUISQUE < PERSONNE N'EST BLOQUE DESSUS... LAD &ASEMCD < IL Y A AU MOINS UN UTILISATEUR BLOQUE, BSR ARLSE < ON FAIT UN RELASE DU SEMAPHORE 'SEMCDA', < DONT L'ADRESSE EST DANS 'A'... JMP TOCDA6 < VERS L'EVENTUEL UTILISATEUR BLOQUE < SUIVANT SUR 'SEMCDA'... TOCDA7: EQU $ BSR ASMDK < D E M A S Q U A G E... < < SORTIE DU MODULE : < PLR X < RESTAURE 'X'... RSR < THAT'S ALL FOLK ??!?! PAGE < < < T E S T D E S T I M E D - O U T : < < < FONCTION : < CE MODULE IMPLEMENTE ICI POUR DES < RAISONS D'ASSEMBLAGE (SAUTS RELATIFS < LIMITES A YY7 MOTS), PERMET DE < TESTER LES TIMED-OUT SUR CERATINS < HANDLERS PERIPHERIQUES. SI LE TEST < DE TIMED OUT N'EST PAS INHIBE POUR UN < HANDLER (TESTO#0) ; LORSQU'A CHQUA PASSAGE < LE BETA(SIT) DE CE HANDLER EST NEGATIF, < ELLE DECREMENTE LE COMPTEUR COURANT DE < TIMED OUT (TIMOUT), ET LORSQUE CELUI-CI < PASSE PAR 0, ELLE PROVOQUE UNE FAUSSE < INTERRUPTION SUR CE HANDLER, AFIN < DE LE REVEILLER. < < Z1250: EQU $ < < TEST DES TIME-OUT : < LAI IFRETO STA VAR+FRETO < REINITIALISATION DU GENERATEUR < DE LA PERIODE DE TEST DES < TIMED OUT. BSR VAR+ASPTO < DETECTION ET TRAITEMENT DES TIME-OUT. < < FAUT-IL METTRE EN PLACE LE BIT 'MAINT' DANS 'ST', OU L'ENLEVER ??? < (IL S'AGIT, RAPPELONS-LE DU BIT QUI < PERMET D'IGNORER LES DEFAUTS DE PARITE < RENCONTRES ; ON POURRA DONC LE FORCER < A LA MAIN POUR PASSER UN CAP DIFFICILE < SUR 'MEMTV' EN PARTICULIER...) < RDSI ANDI MSBOOT XWOR%1: VAL MSBOOT=K SLRS XWOR%1 < (A)=POSITION DU SELECTEUR DE BOOTSTRAP... CPI HORROM < FAUT-IL FORCER 'MAINT' ??? LAI COSBT?MAINT=FMASK(K=FCINST JNE Z1250U < NON, IL FAUT RAZER 'MAINT'... PSR A < OUI, LA MEMV TBT MEMXXX < MAIS EST-CE AUTORISE ??? PLR A JNC Z1250U < NON, DONC ON LE RAZE (NE PAS OUBLIER QUE < 'SVCM3' TESTE AUSSI 'HORROM' SUR LE SE- < LECTEUR DE BOOTSTRAP LORS DE LA SIMULA- < TION DES ENTREES...). SST < OUI, QUEL DANGER, MAIS N'OUBLIONS PAS < QUE 'IDLE' VISUALISE CE FAIT AU < PUPITRE COMME 'MEMXXX' !!! JMP Z1251 < VERS LA SUITE DU TRAITEMENT DES < INTERRUPTIONS DE SECONDE... Z1250U: EQU $ < OUI, RST < ET ON EFFACE 'MAINT' DANS 'ST'... JMP Z1251 < VERS LA SUITE DU TRAITEMENT < DES INTERRUPTIONS DE SECONDE. PAGE < < < C O P Y P E R I O D I Q U E D U S Y S T E M E : < < Z1250A: EQU $ XWOR%5: VAL K < A PRIORI LA CONSTANTE CONTENUE DANS < MKCOP(ETASYS) EST PRISE TELLE QUELLE. IF FXHOR/10-4,XEIF%,, XWOR%5: VAL S < SI LA FREQUENCE REELLE DE L'HORLOGE EST < TROP ELEVEE, LA CONSTANTE MKCOP(ETASYS) < SERA DECALEE DE XWOR%5... XEIF%: VAL ENDIF LA ETASYS ANDI MKCOP < (A)=CONSTANTE MAL CADREE, XWOR%1: VAL MKCOP=K XWOR%2: VAL BIT>XWOR%1-N)MFFFF XWOR%3: VAL MKCOP)MFFFF(XWOR%2 XWOR%4: VAL XWOR%3=K SLLS NBITMO-XWOR%4 < CADRAGE DE RECUPERATION DU BIT DE SIGNE, SARS NBITMO-XWOR%4+XWOR%1-XWOR%5 < (A)=MODULATION SIGNEE DE LA PERIODE < DES COPY... Z1250Q: EQU $ ADRI PCOPY,A < (A)=PERIODE DES COPY EXPRIMEE EN UNITE < 'QUANTUM DE TEMPS UTILISATEUR'. JAG Z1250R < OK... BSR ASYSER < E R R E U R S Y S T E M E ... JMP Z1250Q < ET PUIS ON ITERE... Z1250R: EQU $ STA VAR+CCOPY < REINITIALISATION DU GENERATEUR DES < PERIODE DE COPY DU SYSTEME. PSR W LB ETASYS TBT OTOCOP+NBITMO < LA COPY EST-ELLE ON ??? JC Z1250K < NON (MAIS QUEL DANGER !!!). < < ROTATION DE L'INDICATEUR < 'PATCOP' ET AIGUILLAGE : < LA VAR+PATCOP SCRS S < ROTATION DE LA PATTERN CYCLIQUE... STA VAR+PATCOP LRM Y WORD SCOPY1 < (Y)=ADRESSE 'DKF' DE LA PREMIERE ZONE < DE 'COPY'. TBT PATMF1 < ??? JC Z1250M < C'EST LA COPY 1 MEMOIRE --> DKF... TBT PATF < ??? JC Z1250O < C'EST LA LECTURE 'DKF'... LRM Y WORD SCOPY2 < (Y)=ADRESSE 'DKF' DE LA DEUXIEME ZONE < DE 'COPY'. TBT PATMF2 < ??? JC Z1250M < C'EST LA COPY 2 MEMOIRE --> DKF... TBT PATM < ??? JC Z1250N < C'EST L'ECRITURE SUR 'DKM'... JMP Z1250K < RIEN QUELLE JOIE... < < LECTURE DU SECTEUR COURANT DE 'DKF' : < Z1250O: EQU $ STZ VAR+VALCFM < A PRIORI PAS DE LECTURE 'DKF'... TBT OTOCFM+NBITMO < LA COPY 'DKF' --> 'DKM' EST-ELLE ON ??? JC Z1250K < NON, RIEN A FAIRE... TBT NSPDKF-NSPDK+NBITMO < DKF PRESENT ??? JNC Z1250K < NON, DONC PAS DE COPIE DKF --> DKM... IC VAR+VALCFM < IL Y A LECTURE 'DKF'... LRM W WORD VARHOR+DCOPYM < OUI, BSR ACHANW < ATTENTE EVENTUELLE DU 'DKM'... ADRI DCOPYF-DCOPYM,W < PASSAGE SUR LA DEMANDE 'DKF', LA ARGDEM+ASDEM ADRI I,A < PASSAGE AU SECTEUR SUIVANT, CP VAR+COPS2 < MAIS EST-IL VALIDE ??? JL Z1250P < OUI, IL EST BON... LA VAR+COPS1 < NON, ON RECOMMENCE AU DEBUT... Z1250P: EQU $ STA ARGDEM+ASDEM < MISE EN PLACE DU SECTEUR COURANT... BSR ACHAND < ET ENVOI DE LA DEMANDE... JMP Z1250K < ET C'EST TOUT... < < ECRITURE DU SECTEUR COURANT SUR 'DKM' : < Z1250N: EQU $ CPZ VAR+VALCFM < Y-A-T'IL EU LECTURE 'DKF' ??? JE Z1250K < NON, DONC PAS D'ECRITURE 'DKM'... TBT NSPDKF-NSPDK+NBITMO < DKF PRESENT ??? JC Z1250T < OUI, DONC COPIE DKF --> DKM... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < VOIR POURQUOI IL Y A EU UNE LECTURE < SUR 'DKF', ALORS QUE LE VRAI 'DKF' < EST ABSENT (VOIR 'ETASYS') !!! < JMP Z1250K < ET ON NE FAIT RIEN... Z1250T: EQU $ LRM W WORD VARHOR+DCOPYF < OUI, LA ARGDEM+ASDEM < (A)=ADRESSE DU SECTEUR COURANT, BSR ACHANW < ATTENTE DU 'DKF' EVENTUELLEMENT... ADRI DCOPYM-DCOPYF,W < PASSAGE SUR LA DEMANDE A 'DKM', JMP Z1250P < VERS LA MISE A JOUR DE L'ADRESSE < DU SECTEUR COURANT A ECRIRE SUR 'DKM', ET < L'ENVOI DE LA DEMANDE... Z1250S: JMP Z1250B < RELAI... < < COPY MEMOIRE --> 'DKF' : < Z1250M: EQU $ LXI PROESC CPZ &SYSPRO < Y-A-T'IL UN PROCESSEUR ESCLAVE ??? JGE Z1250D < OUI, C'EST LUI QUI PREPARE LES < INFORMATIONS DE COPY. BSR VAR+AHCOPY < NON, C'EST A L'HORLOGE DE LE FAIRE. Z1250D: EQU $ LAD VAR+DCOPY2 LR A,W < (W)=ADRESSE DE LA DEMANDE DE COPY. LA NSPTYP < ACCES A SON 'NSPTYP', TBT ENFILE < NE SERAIT-ELLE PAS ENCORE EN FILE < D'ATTENTE ??? CELA PEUT SE PRODUIRE < DANS LE CAS OU 'DKF' SERAIT EN < TRAIN D'ITERER SUR UN DEFAUT... JC Z1250K < ET OUI, ON PASSE LA MAIN... STY ARGDEM+ASDEM < SELECTION DE LA ZONE DE 'COPY'... BSR ACHAND < ENVOI DE LA DEMANDE DE COPY, MAIS < SANS ATTENTE, C'EST INUTILE DE < BLOQUER L'HORLOGE !!! Z1250K: EQU $ < < < P R E V E N T I O N D E S I N T E R B L O C A G E S < S U R A T T E N T E D E B U F F E R S : < < < PHILOSOPHIE : < A LA FREQUENCE DES COPIES DU SYSTEME, < L'HORLOGE EXAMINE BETA(SCHVID(HDLALB)) ; SI < ELLE VOIT QUE CETTE TACHE N'A RIEN A < FAIRE (BETA=-1), ET SI ELLE N'A PAS < EMMAGASINEE UN MAXIMUM ('NPREBB') DE BUFFERS, < ELLE ENVOIE UNE DEMANDE A 'HDLALB' AVEC < ATTENTE ; SI LE BUFFER N'EST PAS DISPONIBLE, < ON DEMANDE UN RETOUR IMMEDIAT AFIN DE < NE PAS BLOQUER LE SYSTEME. ENFIN LE TEST < DU 'BETA', ET LE DEBUT DE L'ENVOI DE LA < DEMANDE PAR 'CHAND' SE FAIT AVEC LES < INTERRUPTIONS MASQUEES AFIN DE GARANTIR < LA DISPONIBILITE DE 'HDLALB' (ELLES SE < RETROUVENT DEMASQUEES LORS DU PREMIER < 'RQST SPHEX' FAIT PAR 'CHAND' !!!). < A CETTE MEME FREQUENCE, SI ON VOIT QUE < DES DEMANDES SONT EN ATTENTE DE BUFFERS < (BETA>=K), ALORS ON LIBERE UN BUFFER DE LA < PILE DE STOCKAGE SI CELA EST POSSIBLE. < < PSR L LAD VAR+DPREBB LR A,W < (W)=@DEMANDE ALLOCATION/RELEASE. LXI NSPALB BSR ACADCT < RENVOIE : (L)=@DCT(HDLALB). BSR ASMMK < MASQUAGE DES INTERRUPTIONS AFIN < DE GARANTIR LA VALEUR DE BETA... BSR ATEC < Y-A-T'IL DES DEMANDES CHAINEES ??? PLR L JNE Z1250E < CAS DEFAVORABLE... YA DU MONDE... < < CAS FAVORABLE : 'HDLALB' EST LIBRE ; < SI ON N'A PAS ASSEZ DE BUFFERS EN < STOCK, ON VA EN DEMANDER UN... < LA VAR+KPREBB < COMBIEN EN A-T'ON ??? CPI NPREBB < LE MAXIMUM ??? JE Z1250F < OUI, RIEN A FAIRE ON SORT... JL Z1250I < NON, ON PEUT EN REDEMANDER. BSR ASYSER < E R R E U R S Y S T E M E ... JMP Z1250F < ET ON ABANDONNE... Z1250I: EQU $ LAI NSPALB STBY NSPTYP < DEMANDE D'ALLOCATION. IC ARGDEM+AMDEM < PROGRESSION DE L'ADRESSE STOCKAGE. BSR ACHAND < DEMANDE D'ALLOCATION D'UN BUFFER SANS < BLOCAGE SI NON DISPONIBLE... < < < A T T E N T I O N : < ON NE DEMASQUE PAS LES INTERRUPTIONS, < CAR LE MICRO-SCHEDULER L'A DEJA FAIT (!!!) < LORS DE L'APPEL DE 'CHAND'... < < WAIT WEIO < ATTENTE DE FIN DE SERVICE... LA ARGDEM+ETADEM < TEST DES CONDITIONS DE RETOUR. JAE Z1250J < OK, UN BUFFER A ETE ALLOUE. DC ARGDEM+AMDEM < ET NON, ON ANNULE CE QU'ON AVAIT FAIT. JMP Z1250F < ET C'EST TOUT... Z1250J: EQU $ IC VAR+KPREBB < ET UN BUFFER DE PLUS... JMP Z1250F < C'EST FINI... < < CAS DEFAVORABLE : 'HDLALB' EST TRES < OCCUPE, ON VA EN RENDRE UN : < Z1250E: EQU $ BSR ASMDK < DEMASQUAGE DES INTERRUPTIONS... LA VAR+KPREBB < (A)=NOMBRE DE BUFFERS "AU CHAUD" : JAGE Z1250H < OK, (A) EST VALIDE... BSR ASYSER < E R R E U R S Y S T E M E ... STZ VAR+KPREBB < ET ON CLEAR 'KPREBB'... JMP Z1250F < VERS LA SORTIE... Z1250H: EQU $ CPIB0: CPI NPREB0 < PEUT-ON EN LIBERER UN ??? JLE Z1250F < NON, DONC ON SORT... DC VAR+KPREBB < OUI, ET UN BUFFER DE MOINS... LAI NSPRLB STBY NSPTYP < DEMANDE DE RELEASE 1 BUFFER, BSR ACHAND < ENVOI DE LA DEMANDE... WAIT WEIO < ATTENTE DE FIN DE RELEASE. DC ARGDEM+AMDEM < ET DEPILEMENT DE L'ADRESSE < DU BUFFER RENDU... < < FIN : < Z1250F: EQU $ BSR ASMIT < LES INTERRUPTIONS SONT-ELLES RESTEES < MASQUEES ??? JAE Z1250L < NON, ELLES SE SONT DEMASQUEES PAR UN < CHANGEMENT DE CONTEXTE (VOIR LE MICRO- < SCHEDULER), ET NON PAR 'DMMK' ; EN < EFFET, ON VEUT GARANTIR LE BETA DE < 'HDLALB'... BSR ASMDK < OUI, ALORS ON DEMASQUE... Z1250L: EQU $ PLR W JMP Z1250S < ET C'EST TOUT... PAGE < < < P R E P A R A T I O N D E L A C O P Y : < < < FONCTION : < CE SOUS-PROGRAMME, EN FONCTION < DE LA LISTE POINTEE PAR 'NSPSAV', < REGROUPE DANS LE BUFFER 'BCOPY' < LES INFORMATIONS A COPIER. < IL EST APPELE PERIODIQUEMENT PAR < LE PROCESSEUR ESCLAVE S'IL EXISTE, < ET PAR L'HORLOGE SINON, ET ENFIN < PAR LE 'SVC' MAITRE 'SVCM7' QUI < FORCE DES COPIES SYNCHRONES... < < < ATTENTION : DETRUIT LE REGISTRE 'X' !!! < < KOPY: EQU $ MOPY: EQU KOPY < A CAUSE DE L'ASSEMBLEUR... PSR Y,L,W < PRUDENCE... LRM Y WORD BCOPY < (Y)=ADRESSE DU BUFFER DE COPY. IF MNUBUS?MNUPRO=K-K,,XEIF%, IF ATTENTION : ICI ET AILLEURS, IL MANQUE UN IF DECALAGE DE RECADRAGE DU NUMERO DE PROCESSEUR !!! XEIF%: VAL ENDIF RDSI ANDI MNUBUS?MNUPRO < (A)=IDENTITE DU PROCESSEUR COURANT, LXI PROESC CP &SYSPRO < EST-CE L'ESCLAVE ??? JE KOPY7 < OUI, 'L' GARDE SA VALEUR ('DCTPR1')... EORR L,L < NON, POUR LE MAITRE : 'L'=K... XWOR%1: VAL '1234 < ???!???!?!!!???! IF XWOR%1)XWOR%1-K,,XEIF%, IF ET BIEN CA ALORS !!! XEIF%: VAL ENDIF KOPY7: EQU $ < < < A T T E N T I O N : < DANS LE CAS DU PROCESSEUR MAITRE, LA BASE < 'L' EST MISE A 0 AFIN DE DISCRIMINER LE < MAITRE DE L'ESCLAVE (L=ADRESSE DCTPR1) ; < DANS CES CONDITIONS, 'L' NE DOIT PAS ETRE < UTILISEE POUR ACCEDER 'DCTHOR' PAR EXEMPLE !!! < < < < TEST DE VERROUILLAGE DU BUFFER LORS DE < L'INITIALISATION DU SYSTEME : EN EFFET, < SI LE PROCESSEUR ESCLAVE PART AVANT LE < MAITRE, IL ECRIT DANS LE BUFFER DE COPY < LES VALEURS INITIALES (D'ASSEMBLAGE), < ALORS QUE LE MAITRE SIMULTANEMENT RELIT < LA ZONE 'DKF' DE COPY, D'OU UN CONFLIT... < LR Y,W < (W)=ADRESSE DU BUFFER DE COPY. SYNCOP:: MOT -D < DEPLACEMENT PAR RAPPORT A L'ORIGINE < DU BUFFER DE COPY PERMETTANT L'ACCES < AU MOT D'EXCLUSION DU MAITRE ET DE < L'ESCLAVE A L'INITIALISATION DU < SYSTEME. KOPY3: EQU $ CPZ SYNCOP,W < L'INITIALISATION EST-ELLE FINIE ??? JE KOPY4 < OUI, ON PEUT PREPARER LA COPIE... CPZR L < EST-CE LE PROCESSEUR ESCLAVE ??? JE KOPY3 < NON, DONC LES INTERRUPTIONS SONT < DEMASQUEE, ON PEUT SE METTRE DANS < UNE BOUCLE D'ATTENTE... BSR VAR+APRDEF < DANS LE CAS DU PROCESSEUR ESCLAVE, < ON EST CONTRAINT DE TESTER LE DEFAUT < SECTEUR EN ATTENTE... JMP KOPY3 < PUIS ON REBOUCLE... KOPY4: EQU $ PSR L < SAUVEGARDE DE 0/'DCTPR1'... LXI NSPSAV BSR ACADCT < RENVOIE DANS 'L' L'ADRESSE DE LA < LISTE DE 'NSP'=NSPSAV. LR L,W < (W)=ADRESSE DE LA LISTE DE SAUVEGARDE. PLR L < RESTAURE LE DISCRIMINATEUR MAITRE/ < ESCLAVE... < < BOUCLE DE RECUPERATION DES ELEMENTS DE LA LISTE : < XCOPAD:: MOT O < RANG DU MOT CONTENANT L'ADRESSE, XCOPLO:: MOT XCOPAD+D < RANG DU MOT CONTENANT LA LONGUEUR. XLCOPY:: VAL XCOPLO-XCOPAD+Z < LONGUEUR D'UNE ENTREE DE LA LISTE. KOPY1: EQU $ LA XCOPAD,W < (A)=ADRESSE DE L'ELEMENT COURANT, JAE KOPY2 < 0=FIN DE LISTE... LR Y,B < (B)=ADRESSE DE SAUVEGARDE COURANTE. LX XCOPLO,W < (X)=NOMBRE DE MOTS DE L'ELEMENT COURANT. CPZR X < CET ELEMENT SERA-T'IL A VALIDER ??? JGE KOPY5 < OUI, (X)>=K... NGR X,X < NON, ALORS (X)<0... KOPY5: EQU $ ADR X,Y < PREPARATION DE LA SAUVEGARDE SUIVANTE. MOVE < SAUVEGARDE DE L'ELEMENT COURANT... ADRI XLCOPY,W < PASSAGE A L'ELEMENT SUIVANT... CPZR L < MAITRE OU ESCLAVE ??? JE KOPY1 < MAITRE : ON CONTINUE LA COPIE... BSR VAR+APRDEF < ESCLAVE : IL FAUT TESTER LE DEFAUT < SECTEUR EN ATTENTE... JMP KOPY1 < < CALCUL DU CHECKSUM DE LA COPY : < KOPY2: EQU $ LRM X,W WORD LCOPY1-D < (X)=NOMBRE DE MOTS SUR LESQUELS PORTE < LE CALCUL DU CHECKSUM, WORD BCOPY < (W)=ADRESSE DU BUFFER DE COPY. LAI K < (A)=CUMUL DU CHECKSUM... KOPY6: EQU $ EOR O,W < CALCUL DU CHECKSUM PAR 'EOR', ADRI D,W < PASSAGE AU MOT SUIVANT JDX KOPY6 < S'IL EXISTE... STA O,W < LE CHECKSUM EST MIS AU BOUT DU BUFFER. < < RETOUR DU SOUS-PROGRAMME : < PLR Y,L,W RSR PAGE < < < P U R G E D E L A M E M O I R E < V I R T U E L L E D K B : < < < FONCTION : < CE SOUS-PROGRAMME, APRES AVOIR FAIT < QUELQUES VERIFICATIONS D'USAGE ESSAYE < DE RECUPERER LES INDICATEURS DE 'MEMV' < AU PUPITRE, PUIS, LORSQUE TOUT LE MONDE < EST D'ACCORD, IL ENVOIE UNE DEMANDE DE < PURGE A 'DKB'. < ON NOTERA QUE DES DEMANDES D'ACCES < A 'DKB' PEUVENT MALGRE TOUT SUIVRE LA < DEMANDE DE PURGE, MALGRE TOUTES LES < PRECAUTIONS (PAR EXEMPLE VENANT DE 'RCF'...) ; < C'EST POURQUOI, 'DKB' TESTE LUI-MEME < 'MEMV', PUIS TRANSMET D'UNE MANIERE TRANS- < PARENTE LES DEMANDES QUI POURRAIENT ETRE < MASQUEES PAR UN BIT DE 'MEMV'... < < < ATTENTION : < LE BIT 'MEMXXX' DE 'MEMV' AUTORISE < LORSQU'IL EST A 1 CETTE FONCTION DE < PURGE, ET SURTOUT DE MODIFICATION < DE 'MEMV' LUI-MEME !!! < < PURGE: EQU $ PSR A < SAVE 'MEMV' DEMANDE... LA MEMV < (A)='MEMV' COURANT : TBT MEMXXX < A-T'ON DROIT A CETTE FONCTION ??? PLR A JNC PURGE3 < NON, RIEN N'EST FAIT... JAL PURGE1 < BIT0=1 : C'EST EN FAIT UNE DEMANDE < D'ARRET DU SYSTEME... CP MEMV < DEMANDE-T'ON CE QUE L'ON A DEJA ??? JE PURGE1 < RIEN A FAIRE... < < BOUCLE D'ATTENTE D'UN MEMV DE QUALITE : < LR A,X < (X)=SAUVEGARDE DU 'MEMV' PRESUME... BSR ASMPUO < ON LE REAFFICHE... PURGE4: EQU $ BSR ASMPUI < LECTURE D'UN ACQUITTEMENT. < CARY=INFORMATION VALIDE (1)... JNC PURGE4 < PAS ENCOIRE... JAE PURGE5 < OK, ON PREND (X)... PURGE7: EQU $ BSR ASMPUI < NON, IL FAUT DONC RELIRE... < (CARY)=INFORMATION VALIDE (1)... JNC PURGE7 < NON, ON ATTEND... JMP PURGE < OK, ON RECOMMENCE LES VALIDATIONS... < < PURGE PROPREMENT DITE (C'EST BEAUCOUP DIRE...) : < PURGE5: EQU $ STX MEMV < MISE EN PLACE DES INDICATEURS... LAD VAR+DPURGE XR A,W BSR ACHAND < ENVOI DE LA DEMANDE DE PURGE... BSR ACHANW < ET ON ATTEND QUE CELA SOIT FAIT... XR A,W < < RETOURS DIVERS : < PURGE3: EQU $ LAI K < AFIN DE NE PAS ARRETER LE SYSTEME. PURGE1: EQU $ RSR PAGE < < < T R A I T E M E N T D E S T I M E - O U T : < < < FONCTION : < CE SOUS-PROGRAMME DETECTE ET TRAITE < LES TACHES EN TIME-OUT; IL EST EN GENE- < RAL REFERENCE PAR L'HORLOGE, MAIS IL PEUT < ARRIVER QUE L'HORLOGE SOIT BLOQUEE EN < ATTENTE DE 'DKF' OU 'DKM' (EUX-MEMES EN < DEFAUT...) ; EN CONSEQUENCES, LA TACHE < 'IDLE' PEUT DETECTER CE PHENOMENE, ET TRAITER < LES TIME-OUT, DEBLOQUANT AINSI LE SYSTEME... < < SPTO: EQU $ PSR A,B,X,Y PSR L,W CALL #SISP CMS5 W TRACE# < (W)=0, AU CAS OU UNE TRACE < D'UN TIMED OUT SERAIT FAITE. LXI NSPPER < (X)=NSP DU DERNIER HANDLER < PERIPHERIQUE A TESTER. < < BOUCLE DE TEST DES HANDLERS PERIPHERIQUES : < Z1247: EQU $ LA &ADCTSY < ACCES A DCTSY SANS PASSER PAR < LA ROUTINE CADCT, CAR EN EFFET < SI LA VIDEO EST ABSENTE, ON < VA RENCONTERER SON RELAI A 0 !!! JAE Z1246 < ON ESTIME QU'IL S'AGIT DU < RELAI DE LA VIDEO ET QU'ELLE < EST ABSENTE !!! LR A,L < SINON, (L)=@DCT(HANDLER(X)). CPZ TESTO < LE TIMED OUT EST-IL A TESTER < SUR LE HANDLER COURANT ??? JE Z1246 < NON, AU PRECEDENT... BSR ABETA2 < SI OUI, CALCULONS : < (A)=BETA(SIT(HANDLER(X))). JAGE Z1246 < OK, BETA(SIT)>=K, PAS D'IT < EN ATTENTE... DC TIMOUT < DANS LE CAS OU UNE IT EST < ATTENDUE (BETA(SIT)<0), ON < DECREMENTE LE COMPTEUR COURANT < DE TIMED OUT. JG Z1246 < CELUI-CI N'EST PAS ENCORE A 0. < < < C A S D ' U N T I M E D O U T D E T E C T E : < < XTOSIT:: VAL XXSIT0-I < VALEUR DE 'ETAT0' LORS D'UN TIME-OUT. PSR A < SAUVEGARDE DE 'XTOSIT' !!! LA TESTO STA TIMOUT < RE-INITIALISATION DU COMPTER < COURANT DE TIMED OUT, AU < CAS OU LE HANDLER CONCERNE < NE FERAIT PAS UNE FIN DE < SERVICE A LA RECEPTION DE L'IT, < MAIS RE-ITERER L'OPERATION. LAI FNTO < (A)=FAUX NIVEAU DE TRACE (TO). BSR ATRACE < TRACE DU TIMED OUT (W=K). LBI TYPITX < ON SIMULE DES IT EXCEPTION. BSR ASMMK < ON MASQUE LES INTERRUPTIONS AFIN QUE < 'ARIT' ET LA MODIFICATION DE 'ETAT0' < AIENT LIEU SIMULTANEMENT... BSR ARIT < SIMULATION D'UNE IT SUR CE < HANDLER AFIN DE LE REVEILLER. PLR A < AFIN DE MODIFIER 'ETAT0' ; ON LE FAIT < APRES 'ARIT', CAR IL EST SUR QUE 'ARIT' < MODIFIE 'ETAT0'... STA ETAT0 < ETAT0<--(BETA(SIT)) ; ON < MEMORISE AINSI PAR ETAT0<0 < QUE L'IT QUE L'ON VA PROVOQUER < EST EN FAIT UN TIMED-OUT... BSR ASMDK < DEMASQUAGE DES INTERRUPTIONS... < < PASSAGE AU HANDLER PRECEDENT : < Z1246: EQU $ JDX Z1247 < AU PRECEDENT. PLR L,W PLR A,B,X,Y RSR PAGE < < < F R E Q U E N C E D E L ' H O R L O G E < E N M U L T I P L E D E L A P E R I O D E : < < < RESULTAT : < (A)=FREQUENCE EXPRIMEE EN MULTIPLE DE 100 MS < (X)=NUMERO - 6 DU PREMIER BIT A 1 < < CFHOR: EQU $ LA ARGDEM+AMDEM < RECUPERATION DE LA FREQUENCE < DEMANDEE (EN MS.). AND VAR+C3FF < RAZ DES BITS 0-5. JAG SYSR32 < OK. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < LA CONSTANTE 'C3FF' EST SUREMENT < MAUVAISE, IL FAUT DONC LA CORRIGER, < PUIS FAIRE 'JMP CFHOR'... < SYSR32: EQU $ DBT < RECHERCHE DU 1ER BIT A 1 : < (X)=6,7,...,14,15. XWOR%1: VAL XC3FF)MFFFF=K ADRI XWOR%1-NBITMO,X LBY &VAR+DECFRE < (A)=FREQUENCE REELLE DE L'HORLOGE < EXPRIMEE EN MULTIPLE DE 100 MS JAE CFHOR1 < NULLE, ERREUR... CPI FXHOR < VALIDATION SUPERIEURE : JLE CFHOR2 < OK, LA FREQUENCE DEMANDEE EST DANS < LES LIMITES RECONNUES... CFHOR1: EQU $ BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE COMMENT LA FREQUENCE < DEMANDEE EST MAUVAISE : SOIT LA < DEMANDE 'HORINI' A ETE MODIFIEE, < SOIT LA TABLE 'TFREQ' !!! < LAI FXHOR < ET ON FORCE UNE VALEUR ARBITRAIRE... CFHOR2: EQU $ RSR PAGE < < < R O U T I N E D E S I T H O R L O G E : < < ITHOR: EQU $ SIO VAR+ETAHOR < ENTREE MOT D'ETAT HORLOGE POUR < FAIRE RETOMBER L'IT BSR ARVHDL < REVEIL SYSTEMATIQUE DU HANDLER < HORLOGE < < RAPPEL : < LA FREQUENCE DE L'HORLOGE N'ETANT < PAS PROGRAMMABLE, ON SIMULE LA PRO- < GRAMMABILITE A L'AIDE DU COMPTEUR < 'NBITH' ; TOUTES LES 100MS, IL EST < INCREMENTE, LORSQU'IL ATTEINT SON < MAXIMUM ('FREHOR'), ON LE REMET A < 0, ET 'HDLHOR' TRAITERA CETTE IN- < TERRUPTION COMME IL SE DOIT... < IC VAR+NBITH < COMPTAGE DES IT LA VAR+FREHOR < FREQUENCE COURANTE EN < MULTIPLE DE 100 MS CP VAR+NBITH < FIN DE PERIODE? JG E932 < FIN DE PERIODE STZ VAR+NBITH < RAZ COMPTEUR D'IT HORLOGE. DC VAR+CCOPY < GENERATION DES PERIODE DE COPY < DU SYSTEME... < < < S Y N C H R O N I S A T I O N S U R L E S V A L E U R S < P O S I T I V E S D E ' C D A G 0 ' : < < SVC SVCM9 < ET VOILA LE TRAVAIL ; EN EFFET IL NE < SUFFIT PAS DE LA FAIRE DANS 'IDLE', CAR < EN EFFET UN PROGRAMME FAISANT BEAUCOUP < DE PROCESS INHIBE L'IDLE, ET DONC PAR LA < MEME OCCASION CETTE SYNCHRONISATION... < D'OU SA PLACE DANS 'ARIT' DE L'HORLOGE... < < < T E S T D E S H A N D L E R S E N D O D O : < < < A T T E N T I O N : < CE REVEIL NE PEUT SE FAIRE DANS < 'HDLHOR' : EN EFFET, LE 'RLSE' < SUR LE SEMAPHORE 'SDODO', LORS- < QU'IL PORTE SUR DES TACHES PLUS < PRIORITAIRES QUE 'HDLHOR' RISQUE- < RAIT DE CREER UN BOUCLAGE AU CAS < OU CES DERNIERES SE REMETTRAIENT < IMMEDIATEMENT EN 'DODO'... < < LA VAR+KMSHOR CPI -FXHOR < ON REGARDE SI LE DECOMPTEUR < VAUT -FXHOR, AUQUEL CAS IL S'EST < ECOULE UNE SECONDE JNE E932 < ET NON... < < CAS D'UNE IT DE 'SECONDE' : < BSR VAR+ABETA3 < RENVOIE (A)=BETA(SDODO). JAE E932 < BETA(SDODO)=K : PERSONNE (OU < PLUS PERSONNE) A REVEILLER. JAL SYSR33 < IL Y A AU MOINS UN HANDLER < EN DODO A REVEILLER. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < LE MIEUX PARAIT DE FAIRE UN 'JMP E932'... < SYSR33: EQU $ LR A,X < (X)=BETA(SDODO) SUR 16 BITS. E933: EQU $ LAD &ASDODO BSR ARLSE < REVEIL D'UN HANDLER JIX E933 < AU SUIVANT... E932: EQU $ LAI MOMINT SIO VAR+OPHOR < ON REVALIDE LES INTERRUPTIONS TOUT DE < SUITE, AU CAS OU 'HDLHOR' SERAIT < BLOQUEE !?!??!? RSR PAGE < < < R E I N I T I A L I S A T I O N D E L ' H O R L O G E < E T 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 ROUTINE A 2 POINTS D'ENTREE EST < APPELEE A CHAQUE FOIS QUE LA CHARGE < DU SYSTEME EN UTILISATEURS ACTIFS < CHANGE : < 1- AVWAIT : < AVANT LA COMMANDE '!W', < AVANT LA COMMANDE '!BYE'/'!F'. < 2- APWAIT : < APRES LA COMMANDE '!W', < APRES LA COMMANDE '!LOGIN'. < ELLE CALCULE LE NBRE D'ESCLAVES ACTIFS < (NUSERA), PUIS RE-INITIALISE EVENTUEL- < LEMENT LA FREQUENCE DE L'HORLOGE, ET < ENFIN MODIFIE LA PATTERN CYCLIQUE DE < SWAPPING OUT. < < < D I M I N U T I O N D E N U S E R A : < < AVWAIT: EQU $ DC NUSERA < ON DECREMENTE D'UNE UNITE < LE NBRE D'ESCLAVES ACTIFS. JMP INITH < VERS LES RE-INITIALISATIONS. < < < A U G M E N T A T I O N D E N U S E R A : < < APWAIT: EQU $ IC NUSERA < ON INCREMENTE D'UNE UNITE LE < NOMBRE D'ESCLAVES ACTIFS. < < < R E I N I T I A L I S A T I O N S E V E N T U E L L E S : < < INITH: EQU $ PSR A,X LA NUSERA < ACCES AU NBRE D'ESCLAVES ACTIFS. JAL Z901 < ERREUR NUSERA EST NEGATIF. CPI NESCLA < VALIDATION DE NUSERA. JLE SYSR34 < OK, NUSERA EST DANS LES < LIMITES (K,NESCLA). Z901: EQU $ BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < LE MIEUX PARAIT DE FAIRE UN 'JMP Z901X'... < SYSR34: EQU $ LR A,X < (X)=NOMBRE D'ESCLAVES ACTIFS. LA &ATFREQ < (A)=FREQUENCE DE RE-INITIALISATION < DE L'HORLOGE. STA &FREQI < MAJ EVENTUELLE DE HORINI DANS < SYSINI ; SI CETTE FREQUENCE EST < DIFFERENTE DE LA FREQUENCE < PRECEDENTE, ON SAIT QUE HDLHOR < VA CHANGER LA FREQUENCE DE < L'HORLOGE. ADRI NMESCL+Z,X < TRANSLATION DE L'INDEX POUR < ACCEDER A LA TABLE DES REINITIA- < LISATIONS DE LA PATTERN CYCLIQUE < DE SWAPPING OUT. LA &ATFREQ < (A)=NOUVELLE PATTERN CYCLIQUE < DE SWAPPING OUT. STA HORIDC < MISE EN PLACE DE LA NOUVELLE < PATTERN CYCLIQUE DE SWAPPING OUT. EORI MMOT < INVERSION DU BIT15 (ENTRE AUTRE). ANDI XBHRUN < (A)=.NOT.BIT15(HORIDC), SOIT : < (A)=K SI NUSERA>1, < (A)=1 SI NUSERA=K OU 1. STA IBHRUN < MISE A JOUR DYNAMIQUE DE < 'IBHRUN' EN FONCTION DE LA < CHARGE DU SYSTEME. < IBHRUN=1 : NUSERA=K OU 1, < IBHRUN=K : NUSERA>1. Z901X: EQU $ PLR A,X RSR PAGE < < < R O U T I N E D E M I S E E N S O M M E I L < D ' U N H A N D L E R P O U R U N E < D U R E E D E T E R M I N E E : < < < FONCTION : < CE SOUS-PROGRAMME BLOQUE LE < DEMANDEUR POUR UNE DUREE DETER- < MINEE EXPRIMEE EN SECONDES (SI (X)>0), < OU 'THALT'-MICRO-SECONDES (SI (X)<0). < < < ARGUMENT : < (X)=NBRE DE SECONDES SI (X)>0, < (X)=-NOMBRE DE 'THALT'-MICROSECONDES SI (X)<0. < < < A T T E N T I O N : < CE SOUS-PROGRAMME DETRUIT 'X' !!! < < DODO: EQU $ CPZR X < VALIDATION DU NBRE DE SECONDES. JE Z385 < 0 SECONDE DEMANDE, IL N'Y A < DONC RIEN A FAIRE. PSR X JG E931 < COMPTAGE EN SECONDES... < < CAS D'UNE TEMPORISATION EXPRIMEE EN 'THALT'-MICROSECONDES : < NGR X,X E931X: EQU $ HALT < ON ATTEND... CPZR X < LE TEMPS DEMANDE S'EST-IL ECOULE ??? JNE E931X < NON, CE QUI EST POSSIBLE A CAUSE DES < INTERRUPTIONS ET DES APPELS 'LDC'... JMP E931Y < ET C'EST FINI... < < CAS DES TEMPORISATIONS EXPRIMEES EN SECONDES : < E931: EQU $ RQST &ASDODO < MISE EN SOMMEIL DU HANDLER < APPELANT POUR 1 SECONDE. JDX E931 < BOUCLAGE A CHAQUE SECONDE, < JUSQU'A CE QUE LE QUANTUM DE < TEMPS DEMANDE SOIT EPUISE. E931Y: EQU $ PLR X Z385: EQU $ RSR < LE QUANTUM EST EPUISE... PAGE < < < D C T E N D - J O B : < < CALL #SISP CMS5 CHECK# CALL #SISP CMS5 DOL1# DCTEJ: EQU $ PSTEJ: WORD K;K;K;K;COM+DEPCS;DCTEJ;WRLBEJ;PILEJ;DISPAT;SMST;SO;SE #@ASCI " EJ " < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR WORD FILTRS WORD XTALOC < ETALOC. WORD XXLOC0 < SEMLOC. DZS LSEM WORD NIL WORD NIL WORD XXCHV0 DZS LSEM WORD XXSIT0 < SIT. DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLEJ < DISPATCHER END-JOB. WORD NIL WORD K;K < ETAT. WORD XBITS0 < BITSEM. WORD XXNTRY;TRYVID WORD K < HSTATS. WORD XTESTO < TESTO. WORD XXDCTF < 'DCT' NON CONNECTABLE... WORD XFONBA < DCTFUP ("ALTITUDES" DES FONCTIONS). < < ZONE VARIABLE : < VAREJ: EQU $ IF VAREJ-DCTEJ-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF WORD NIL ADCTEJ:: VAL $-D-VAREJ < MOT CONTENANT L'ADRESSE DU BUFFER < AYANT CONTENU LA DCT-ESCLAVE. WORD TBU-IJIJDX,X ATBUEJ:: VAL $-D-VAREJ < RELAI VERS TBU, INDEXE < PAR RAPPORT A 1. WRLBEJ: BYTE NSPRLB;XDSYM < BLOC DE RELEASE BUFFER. RLBEJ:: VAL $-D-VAREJ < BLOC DE RELEASE BUFFER. WORD K WORD VAREJ+ADCTEJ < ADRESSE DE L'ADRESSE OCTET DU < BUFFER A RELEASER. WORD W < 1 BUFFER A RELEASER. DZS LDEM0+VAREJ-$+RLBEJ BYTE NSPTYS;XDSYM EJTYS:: VAL $-D-VAREJ < DEMANDE D'E/S SUR TTYS AU EJ. WORD FGW < ECRITURE. WORD NIL < AMDEM. XLNHDL:: VAL LHNAME*NOCMO-NOCMO+I < LONGUEUR DES NOMS DES HANDLERS. < (+I A CAUSE DE LA LONGUEUR EN TETE) WORD XLNHDL < LE NOM DU PERIPH.IN FAIT 3 OCTETS. DZS LDEM0+VAREJ-$+EJTYS EOTO8: WORD RGAM;RLMESC;EOTO8-$ OTOEJ: EQU $-D < AUTOMATE DE 'LOG-OUT'... OTOFIN:: VAL $-D-VAREJ < AUTOMATE DE END-JOB. < < PILE : < CALL #SISP CMS5 DOL2# PILEJ: EQU $-DEPILE XWPILE: VAL LPILED+16 CALL #SISP CMS5 GENPIL2# CALL #SISP CMS5 CHECK# PAGE < < < E N D - J O B : < < < FONCTION : < 'EJ' EST UN DISPATCHER SYNCHRO- < NISE PAR CHAQUE 'SVC' 'END-JOB' ; < IL A SA CHARGE DE RELEASER L'IDEN- < TIFICATEUR 'ID' ET LE BUFFER < 'BUFESC'. < LE OU LES UTILISATEURS A RELEASER < SONT INDIQUES PAR LE BIT 'BITX' < DE LEUR ENTREE DE LA TABLE 'TBU' < A 1. < < < NOTA : < LORSQUE L'UTILISATEUR EST INTERACTIF, < C'EST-A-DIRE QU'IL TRAVAILLE SUR UNE < VISU, ON REGARDE S'IL N'Y A PAS UN AUTRE < UTILISATEUR "EMPILE" PAR "!U" SUR CETTE < VISU ; SI OUI, ON LE DEPILE, ET IL SE < RETROUVE DANS UNE ETAT IDENTIQUE A CELUI < QU'IL AURAIT A LA SUITE D'UNE COMMANDE < "!W"... < < USE L,DCT0 USE W,DEM0 HDLEJ: EQU $ LXI NESCLA < INDEX DE PARCOURS DE TBU < JUSQU'A 1. E763: EQU $ LA &VAR+ATBUEJ JAL E764 < OK, ON A TROUVE UNE ENTREE < NEGATIVE, C'EST LA (OU UNE DES < ) DCT A RELEASER. JDX E763 < SUIVANTE. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < LE MIEUX PARAIT DE FAIRE UN 'JMP E764X'... < < < CAS OU ON A TROUVE UN ESCLAVE A RELEASER : < E764: EQU $ STZ &VAR+ATBUEJ < MAJ DE TBU. SLLS NOCMO=K < CONVERSION DE L'@DCT-ESCLAVE < EN UNE ADRESSE D'OCTET, ET AU < PASSGE RAZ DU BIT0. STA VAR+ADCTEJ < EN VUE DU RELEASE DE BUFFER, SON < ADRESSE OCTET EST MEMORISEE. SLRS NOCMO=K < (A)=@MOT DE LA DCT-ESCLAVE. LR A,B < SAVE (B)=@DCT-ESCLAVE. LAD VAR+OTOFIN < (A)=@AUTOMATE DE END-JOB. PSR L < SAVE @DCTEJ. LR B,L < (L)=@DCT-ESCLAVE. LR A,B < (B)=@AUTOMATE DE END-JOB. < < MISE A JOUR DE LA DCT(NSPIN) : < LXI PHIN LBY &TASSGN-DCTESC,L LXI NSPDUM-N < MASQUE LE BIT 8 DE A. ANDR A,X < (X)=NSPIN. PSR L < SAVE @DCT-ESCLAVE. BSR ACADCT < (L)=@DCT(NSPIN). LBY IOID < (A)=NSPOUT ASSOCIE AU NSPIN. CPR A,X < EST-CE UN ESCLAVE INTERACTIF ??? < (SOIT NSPIN=NSPOUT ???) JNE E764X1 < NON... < < CAS D'UN UTILISATEUR INTERACTIF : < LY VAR+APILID < (Y)=ADRESSE DE LA PILE DE RECURSION "!U", PULL < ET TENTATIVE DE DEPILEMENT D'UN < UTILISATEUR : JV E764X4 < IL N'Y EN A PAS D'AUTRES SUR CETTE < CONSOLE DE VISUALISATION... < < CAS D'UN UTILISATEUR EMPILE PAR "!U" : < STA IOID < ET RESTAURATION DE 'IOID', ET DONC DE < L'AUTRE UTILISATEUR... JMP E764X3 < < CAS OU IL N'Y A PLUS D'UTILISATEURS < EMPILES SUR UNE VISU : ON VA REINITIA- < LISER CERTAINES CHOSES : CECI EST < MAINTENANT RENDU NECESSAIRE PAR LA < DEMANDE DU TOM ED ESSAP APRES LES < COMMANDES "!W..." ET "!U" LORS D'UN < LOGIN INITIAL SOUS ":SYS", OR SI LE TOM ED < ESSAP DONNE EST MAUVAIS, IL Y A UNE COMMANDE < "!F" EMISE IMPLICITEMENT, SANS REPASSER < AU 'CCI' QUI FAIT D'HABITUDE CES < OPERATIONS... < E764X4: EQU $ LYI KALTM STY VAR+CARALT < REINITIALISATION DU 'CARALT' COURANT, STZ TESTO < INHIBITION DU TIME-OUT SUR ENTREES, STZ VAR+INEXEX < ET AUTORISATION DES EXTENSIONS ET < DES EXPANSIONS... IF NMAGIC-K,,XEIF%, IF ATTENTION : LE 'STZ' EST IDIOT !!! XEIF%: VAL ENDIF STZ VAR+VMAGIC < INHIBITION DU CODE MAGIQUE... < < CAS D'UN UTILISATEUR 'BATCH' (OU DONC < D'UN UTILISATEUR VISU "NON EMPILE") : < E764X1: EQU $ SWBR A,A < BIT0-7(A)=NSPOUT, < BIT8-15(A)=K. STA IOID < RESTAURE IO, ET RAZ ID DANS < LA DCT(NSPIN). E764X3: EQU $ LR L,Y < (Y)=@DCT-PERIPH.IN. PLR L < RESTAURE (L)=@DCT-ESCLAVE. < < SUPPRESION DE LA REACTIVATION DE L'ESCLAVE < PAR MISE A 1 DE L'OPDEM DE DEMSER : < IC DEMSER-DCTESC+T+OPDEM,L BSR AALOHS < ENVOI DE LA DEMANDE DE SERVICE < DE END-JOB POUR L'ESCLAVE. < (=RELEASE DE L'ESPACE MEMOIRE < SANS REACTIVATION). < < RELEASE DE L'ID DE L'ESCLAVE : < LX IDESC-DCTESC,L LAI MKIDES ANDR A,X < (X)=ID. ESCLAVE. LAD ATOESC < RELAI VERS LA TABLE D'ALLOCATION < DES ID ESCLAVES. PSR Y < SAVE @DCT-PERIPH.IN. LYI FONSB1 < FONCTION SET A 1. RQST &ASIDES <<<<PHASE CRITIQUE. BSR ATMOBT < RELEASE DE L'ID. LAD &ASIDES BSR ARLSE LAD &ASAESC BSR ARLSE < RELEASE ID AVEC DEBLOCAGE < EVENTUEL DE JOB ENTRY. PLR Y < RESTAURE (Y)=@DCT-PERIPH.IN. < < ATTENTE DE FIN DE SERVICE : EN EFFET, HDL-SERVICE < TRAVAILLE AVEC LA DCT-ESCLAVE, ET IL FAUT DONC < ATTENDRE LA FIN DE SERVICE, POUR POUVOIR RELESAER < LE BUFFER CONTENANT DCT-ESCLAVE. < WAIT DEMSER-DCTESC+X18,L < < LAISSONS PASSER EVENTUELLEMT LE SCHEDULER : < EN EFFET, LE SCHEDULER A BESOIN DE DCTESC < SI LA DEMSCH N'EST PAS ENCORE DECHAINEE, DE < PLUS IL NE FAUDRAIT PAS QUE LE BUFFER < CORRESPONADNT SOIT REALLOUE POUR FAIRE UNE < NOUVELLE DCTESC ALORS QUE LE SCHEDULER N'EST < PAS ENCORE PASSE, CAR ON AURAIT DANS SA FILE < D'ATTENTE 2 DEMANDES DE MEME ADRESSE !!!!! < WAIT DEMSCH-DCTESC+X18,L < < RELEASE DU BUFFER CONTENANT DCT-ESCLAVE : < BSR ACHAND < ON A : (W)=@WRLBEJ (DEMANDE DE < RELEASE BUFFER). PLR L < RESTAURE (L)=@DCTEJ. BSR ACHANW < ATTENTE DE FIN DE RELEASE DU < BUFFER. < < ENVOI DU MESSAGE '!!EJVIX' SUR TTYS : < PSR W < SAVE @DEMANDE DE RELB. LAD VAR+EJTYS LR A,W < (W)=@DEMANDE D'ECRITURE SUR TTYS. < ON A ICI : < (Y)=ADRESSE DCT(PERIPHERIQUE-IN). BSR AMJEEJ < ENVOI DU MESSAGE A TTYS. PLR W < RESTAURE (W)=DEMANDE RELB. E764X: EQU $ RSR < ET C'EST TOUT... PAGE < < < D C T J O B E N T R Y : < < CALL #SISP CMS5 CHECK# CALL #SISP CMS5 DOL1# DCTJE: EQU $ PSTJE: WORD K;K;K;K;COM+DEPCS;DCTJE;NIL;PILJE;HANDLR;SMST;SO;SE #@ASCI " JE " < #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 HDLJE < HANDLER DE JOB ENTRY. WORD NIL < PAS DE RIT. WORD K;K < ETAT. WORD XBITS0 < BITSEM. WORD XXNTRY;TRYVID < NTRIES & FRTRY. WORD K < HSTATS. WORD XTESTO < TESTO. WORD XXDCTF < 'DCT' NON CONNECTABLE... WORD XFONBA < DCTFUP ("ALTITUDES" DES FONCTIONS). < < ZONE VARIABLE : < VARJE: EQU $ IF VARJE-DCTJE-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF WORD NIL ADCTES:: VAL $-D-VARJE < @OCTET DE LA DCT ESCLAVE, < DESTINEE A L'ALLOCATEUR MEMOIRE. BYTE NSPALB;XDSYM < DEMANDE D'ALLOCATION BUFFER, < EN VUE DE GENERER LA DCT ESCLAVE. ALBJE:: VAL $-D-VARJE < DEMANDE D'ALLOCATION BUFFER. WORD K WORD VARJE+ADCTES < AMDEM DE LA DEMANDE. WORD W < DEMANDE D'1 BUFFER. DZS LDEM0+VARJE-$+ALBJE BYTE NSPTYS;XDSYM JETYS:: VAL $-D-VARJE < DEMANDE D'ECRITURE SUR TTYS < DU NUMERO DU PERIPH.IN EN JE. WORD FGW < ECRITURE. WORD NIL < AMDEM. WORD XLNHDL < 'HNAME' DU PERIPH. IN. DZS LDEM0+VARJE-$+JETYS EOTO9: WORD RGAM;ALMESC;SWAPI;ISLOE;IMEMES;RZMEM;EOTO9-$ OTOJE: EQU $-D < AUTOMATE DE 'LOG-IN'... OTOINI:: VAL $-D-VARJE < AUTOMATE D'INITIALISATION DE < L'ESCLAVE. < < DONNEES DE CLEAR DE L'ESPACE DISQUE UTILISATEUR : < XWOR%1: VAL MSPTYP=K < POUR CADRER LE 'NSPDKF'... XWOR%2: VAL NSPDKF>XWOR%1 XWOR%2: VAL COSBT?TYPAD=FMASK(K?XWOR%2=FCINST WORD XWOR%2 DDKFJE:: VAL $-D-VARJE < DEMANDE D'ECRITURE POUR NETTOYER LA < ZONE 'DKF' ATTRIBUEE A L'UTILISATEUR... WORD FGW WORD NIL < ADRESSE MOT (VARIABLE) DU BUFFER DE < NETTOYAGE, QUI EST EN FAIT LA DCT- < ESCLAVE ELLE-MEME AVANT INITIALISATION. WORD LDCTES*NOCMO WORD NILS < ADRESSE DISQUE (VARIABLE). DZS LDEM0+VARJE-$+DDKFJE WORD NILK IDESJE:: VAL $-D-VARJE < 'IDESC' ATTRIBUE A L'UTILISATEUR... < < PILE : < CALL #SISP CMS5 DOL2# PILJE: EQU $-DEPILE XWPILE: VAL LPILEH+10 CALL #SISP CMS5 GENPIL2# CALL #SISP CMS5 CHECK# PAGE < < < H A N D L E R J O B E N T R Y : < < < FONCTION : < CE HANDLER ('HANDLR') EST CHARGE < DE L'INITIALISATION DES UTILISATEURS < DU SYSTEME, EN LEUR ATTRIBUANT UN < 'ID', UNE 'DCTESC' (ET EN L'INITIALI- < SANT) ET EN NETTOYANT LEUR ESPACE < DE SWAPPING ET SCRATCH... < ENFIN, ELLE LANCE LA PREMIERE < DEMANDE DE SCHEDULING. < < < I M P O R T A N T : < 'RECOTO' EST MIS A 0 !!! < < < ARGUMENTS : < (AMDEM)=NSP DU PERIPHERIQUE IN DE L'ESCLAVE, < (CODEM)=TAILLE OCTET DE L'ESPACE MEMOIRE NECESSAIRE < A L'ESCLAVE. < < USE L,DCT0 USE W,DEM0 HDLJE: EQU $ < < ALLOCATION D'UN IDENTIFICATEUR 'ID' A L'ESCLAVE : < RQST &ASAESC < ALLOCATION AVEC ATTENTE EVEN- < TUELLE DE LA LIBERATION D'UN ID. < PAR UN AUTRE ESCLAVE. LAD ATOESC < @RELAI VERS LA TABLE D'OCCUPATION < DES IDENTIFICATEURS D'ESCLAVES. NTRN LXI X12/NBITMO < LONGUEUR DE TOESC. TRN RQST &ASIDES <<<<PHASE CRITIQUE. BSR ASOBT < RECHERCHE DU 1ER 'ID' LIBRE. JNE SYSR36 < OK. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < JE NE SAIS PAS, MAIS ATTENTION, < IL Y A DEJA EU UN 'RQST' SUR < LE SEMAPHORE 'SAESC'... < SYSR36: EQU $ LR A,X < SAVE L'ID DE L'ESCLAVE DANS X. STA VAR+IDESJE LAD &ASIDES BSR ARLSE < < ON A ICI : < (X)='ID' (/0) ALLOUE A L'ESCLAVE. < PSR W < SAVE @DEMANDE DE JOB-ENTRY. LAD VAR+ALBJE LR A,W < (W)=@DEMANDE 1 BUFFER EN VUE DE < CREER LA DCT-ESCLAVE. BSR ACHAND BSR ACHANW < ATTENTE D'ALLOCATION DU BUFFER. < < ACCES A LA DCT-ESCLAVE : < LA VAR+ADCTES SLRS NOCMO=K < (A)=@MOT DE LA DCT-ESCLAVE. STA &ATBU < ON MET @DCT-ESCLAVE DANS TBU(ID). LR A,W < (W)=@DCT-ESCLAVE < < ON A ICI : < (L)=ADRESSE DCT(HDLJE), < (W)=ADRESSE DCT(ESCLAVE). < < < RAZ DE LA DCT ALLOUEE A L'ESCLAVE : < ADRI -IJIJDX,A < POUR INDEXATION JUSQU'A 1. SBT BITX < GENERATION D'UN RELAI INDEXE. STA VAR+ADCTES < RELAI INDIRECT INDEXE VERS DCT < ESCLAVE. LXI LDCTES < LA DCT-ESCLAVE FAIT LDCTES=YY7 MOTS... E718: EQU $ STZ &VAR+ADCTES < RAZ DCT-ESCLAVE. JDX E718 < < NETTOYAGE DE LA ZONE 'DKF' DE L'UTILISATEUR : < LA VAR+IDESJE < (A)=<ICDESC>, CP NUSEP1 < A-T'IL EVENTUELLEMENT DROIT A 'PR1' ??? LA ANSPS < OUI, A PRIORI : (A)=ORGANE COURANT < DE SWAPPING... JL E718Y < OUI... LAI NSPDKS < NON, DONC DANS TOUS LES CAS : < (A)=DISQUE DE SWAPPING. E718Y: EQU $ LRM X WORD TCPROG+TZSCRA < (X)=NOMBRE D'ECHANGES DE NETTOYAGE, < EN SUPPOSANT A PRIORI QU'IL S'AGIT < DE 'PR1' ; 'TCPROG' CORRESPOND ALORS < A LA ZONE DE SWAPPING (QUI EST AUSSI < LA "!CDAP"), ET 'TZCSRA' CORRESPOND < A LA ZONE SCRATCH SUR 'DKS'. CPI NSPPR1 < ALORS EST-CE 'PR1' ??? JE E718Y1 < OUI... LXI TZSWAP < (X)=NOMBRE D'ECHANGES DE NETTOYAGE A < FAIRE SUR 'DKS'... E718Y1: EQU $ STBY VAR+DDKFJE+XXNSP < MISE EN PLACE DE L'UNITE DE SWAPPING... LAI TZSWAP MP VAR+IDESJE LR B,A XWOR%2: VAL XXXMOY XWOR%1: VAL TZSWAP/XWOR%2 IF XWOR%1*XWOR%2-TZSWAP,,XEIF%, IF ATTENTION : TZSWAP NON DIVISIBLE PAR 2 !!! XEIF%: VAL ENDIF DO XWOR%2*M ADRI XWOR%1,A < ON SAUTE AINSI LE SYSTEME LUI-MEME... AD ASYS < TRANSLATION DE L'ADRESSE DE < SAWPPING DANS LE 'GB' DU < SYSTEME. LR A,B < (B)=ADRESSE DE LA ZONE DE SWAP (ET DE LA < ZONE SCRATCH QUI LA SUIT). PSR W < SAUVEGARDE DE L'ADRESSE 'DCTESC'. LAD VAR+DDKFJE XR A,W < (W)=ADRESSE DE LA DEMANDE A 'DKF', ET < (A)=ADRESSE-MOT DE LA 'DCTESC' (QUI EST < DONC LE BUFFER DE NETTOYAGE), STA ARGDEM+AMDEM < QUE L'ON MET DANS LA DEMANDE, STB ARGDEM+ASDEM < AINSI QUE L'ADRESSE DISQUE. E718X: EQU $ LBY VAR+DDKFJE+XXNSP CPI NSPPR1 < EST-ON SUR 'PR1' ??? JNE E718A < NON, SUR 'DKS', ALLONS ENVOYER LA DEMANDE < DE NETTOYAGE... LR X,A < OUI, ALORS CPI TZSCRA < EN EST-ON A LA ZONE SCRATCH ??? JLE E718B < OUI, ELLE N'EXISTE PAR SUR 'PR1', ALLONS < NETTOYER SEULEMENT CELLE DE 'DKS'... E718A: EQU $ BSR ACHAND < DEMANDE DE NETTOYAGE, BSR ACHANW < ET ATTENTE... LBY VAR+DDKFJE+XXNSP CPI NSPPR1 < A-T'ON INITIALISE 'PR1' ??? JNE E718Z < NON 'DKS', OK... E718B: EQU $ LAI NSPDKS < OUI, IL FAUT DONC AUSSI NETTOYER 'DKS', < POUR PREPARER EN PARTICULIER LA ZONE < SCRATCH DE L'UTILISATEUR... STBY VAR+DDKFJE+XXNSP BSR ACHAND < ENVOI DE LA DEMANDE A 'DKS', BSR ACHANW < ET ATTENTE... LAI NSPPR1 < PUIS RESTAURE 'PR1'... STBY VAR+DDKFJE+XXNSP E718Z: EQU $ IC ARGDEM+ASDEM < PUIS PASSAGE AU SECTEUR SUIVANT, JDX E718X < S'IL EXISTE... PLR W < RESTAURE : (W)=ADRESSE 'DCTESC'. < < INITIALISATION DE LA 'DCTESC' : < LA VAR+IDESJE STA IDESC-DCTESC,W < MISE EN PLACE DE L'IDESC, STB DEMSWP-DCTESC+T+ASDEM,W < AINSI QUE DE L'ADRESSE DE SWAPPING... < < INTIALISATION DE LA GRAMMAIRE DU CCI : < LA CE000 STA SRCOTO-DCTESC,W < RECOTO=K & SRCOTO='E000. < < GENERATION DE L'EN-TETE DE DEMSWP : < LAI NSPDKF < INITIALISATION DE L'ESCLAVE < SUR LE DISQUE DE SWAPPING < LE 1ER DISQUE DE SWAPPING. SWBR A,A STA DEMSWP-DCTESC+XXNSP,W < EN-TETE DE DEMSWP. LR W,A < (A)=@DCT-ESCLAVE. ADRI DEMSWP-DCTESC+T+AMDEM,A < (A)=ADRESSE DU MOT AMDEM(DEMSWP). STA DEMMEM-DCTESC+T+AMDEM,W LAI XXALME < EN VUE DE L'ALLOCATION D'1 < BLOC MEMOIRE A L'ESCLAVE. STA DEMMEM-DCTESC+T+CODEM,W STA HORESC-DCTESC,W < INITIALISATION ARBITRAIRE DE L' < "HORLOGE" DE SWAPPING DE L'ESCLAVE. < (A 1) < < GENERATION DE L'EN-TETE DE DEMSCH : < LAI NSPSCH XWOR%1: VAL MSPTYP=K < INUTILE, MAIS ON NE SAIT JAMAIS... SWBR A,A STA DEMSCH-DCTESC+XXNSP,W < EN-TETE DE DEMSCH. < < INITIALISATION DES ADRESSES DE 'CDA' : < LRM A,B WORD AOCDA1 WORD AECDA1 STA CDESCO-DCTESC,W < ORIGINE, ET STB CDESCE-DCTESC,W < FIN DE LA 'CDA' DE CET UTILISATEUR < INITIALISEE SUR LA 'CDA-COMMUNE'... < < INITIALISATION DE WEIO(DEMSCH) EN VUE DE LA 1ERE < DEMANDE DE SCHEDULING SUR CET ESCLAVE : < IC DEMSCH-DCTESC+X18,W < MISE A 1 DE WEIO(DEMSCH). LAD VAR+OTOINI LR A,B < (B)=@AUTOMATE DE 1ERE ALLOCATION < MEMOIRE. LR W,A < (A)=@DCT-ESCLAVE. PLR W < RESTAURE (W)=@DEMANDE DE 'JOB < ENTRY'. PSR L < SAVE @DCT-'JOB ENTRY'. LR A,L < < ON A ICI : < (L)=ADRESSE DCT(ESCLAVE), < (W)=ADRESSE DEMANDE('JOB-ENTRY'). < < < INITIALISATION DE TASSGN : < LR L,A < (A)=@DCT-ESCLAVE. XWOR%1: VAL YASSGN-TASSGN ADRI TASSGN-DCTESC+XWOR%1,A SBT BITX < GENERATION D'UN RELAI INDIRECT < ET INDEXE VERS TASSGN. STA TASSGN-DCTESC,L < MISE DU RELAI DANS DCT-ESCLAVE. LA ARGDEM+AMDEM < RECUPERATION DU NSP DU PERIPHERI- < QUE IN DE L'ESCLAVE. LXI PHIN STBY &TASSGN-DCTESC,L < NVP=1 --> NSP=NSP DU PERIPHERIQUE < IN DE L'ESCLAVE. < < MISE A JOUR DE LA DCT DE NSPIN : < LR A,X < (X)=NSPIN. LY IDESC-DCTESC,L LAI NSPDUM-N ANDR A,X < (X)=NSPIN. ANDR A,Y < (Y)=ID. ESCLAVE. PSR L < SAVE @DCT-ESCLAVE. BSR ACADCT < (L)=@DCT(NSPIN). LA IOID < ACCES A L'IOID DE LA DCT(NSPIN). TBT IOIDX < UNE DEMANDE DE JOB-ENTRY A-T' < ELLE BIEN ETE FAITE SUR NSPIN... JC SYSR37 < OUI : OK. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < PEUT-ETRE METTRE A 1 LE BIT 'IOIDX'... < SYSR37: EQU $ ORR Y,A < ON MET DANS IOID, L'ID DE < L'ESCLAVE. STA IOID < MAJ DE DCT(NSPIN). LBY IOID < (A)=NSPOUT ASSOCIE A NSPIN. A < NOTER QUE CE 'LBY' EST PLUS < RAPIDE QU'1N 'SLRS 8'. LR L,Y < SAVE DANS Y @DCT-PERIPH.IN. PLR L < RESTAURE (L)=@DCT-ESCLAVE. CPI XNVPF < EST-CE UN FICHIER... JNE E779 < NON. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ALORS CA, JE N'EN SAIS RIEN !!! < < < FIN DE CALCUL DE TASSGN : < E779: EQU $ LXI PHOUT STBY &TASSGN-DCTESC,L < NVP=2 --> NSP=NSPOUT, < < ESPACE MEMOIRE NECESSAIRE A L'ESCLAVE : < LA ARGDEM+CODEM < TAILLE OCT NECESSAIRE A < L'ESPACE MEMOIRE ESCLAVE. STA DEMSWP-DCTESC+T+CODEM,L < < ON A ICI : < (L)=ADRESSE DCT(ESCLAVE), < (B)=ADRESSE AUTOMATE DE PREMIERE ALLOCATION. < < < 'LANCEMENT' DE L'ESCLAVE : < BSR AALOHS < 1ERE ALLOCATION HANDLER DE SERVICE. PLR L < RESTAURE (L)=@DCT JOB ENTRY. < < ENVOI DU MESSAGE '!!JEVIX' SUR TTYS : < PSR W < SAVE @DEMANDE DE JE. LAD VAR+JETYS LR A,W < (W)=@DEMANDE D'E/S SUR TTYS. < < ON A ICI : < (Y)=ADRESE DCT(PERIPHERIQUE-IN). < BSR AMJEEJ < ENVOI DU MESSAGE VERS TTYS < ET ATTENTE. PLR W < RESTAURE (W)=@DEMANDE JE. RSR PAGE CALL #SISP CMS5 DOL1# < < < I N I T I A L I S A T I O N D E L ' E S P A C E < M E M O I R E D E L ' E S C L A V E : < < < FONCTION : < CE SOUS-PROGRAMME EST APPELE < PAR L'AUTOMATE DE 'JOB-ENTRY'. < IL INITIALISE L'ESPACE MEMOIRE < DE L'UTILISATEUR AVEC LE PRO- < GRAMME SUIVANT : < < < 1- SI BIT0(MOT0)=K : < <@0: SVC K < APPEL AU CCI. <@1: BYTE 0;FONCCI < ARGUMENT DU SVC : APPEL CCI. <@2: WORD NILK < PILE POINTEE PAR K. XMOT0:: MOT O < INDEX DU MOT0, XMOT1:: MOT XMOT0+D < INDEX DU MOT1. XMOT2:: MOT XMOT1+D < INDEX DU MOT2. LXMOT:: VAL XMOT2+D-XMOT0 < LONGUEUR MAXIMUM DU PROGRAMME D'INITIA- < LISATION. IF XLRMOT-LXMOT,,XEIF%, IF ATTENTION : L'EN-TETE DE L'ESPACE MEMOIRE IF UTILISATEUR DIFFERE DES BESOINS !!! XEIF%: VAL ENDIF < < ET : < P<--XMOT0, < A<--XMOT1, < K<--XMOT2-DEPILE. < < < 2- SI BIT0(MOT0)=1 : < <@0: WORD '1E16 < QUIT D'APPEL DIRECT DU CCI. < < ET : < P<--XMOT0. < < < NOTA : < LES ADRESSES DONNEES ICI < SONT EVIDEMMENT RELATIVES < AU REGISTRE 'SLO'... < < < ARGUMENT : < (W)=ADRESSE DCT(ESCLAVE). < (DESTRUCTIBLE). < < < A T T E N T I O N : < C'EST 'RUNSVC' QUI SE CHARGE < DE FAIRE BOUCLER L'UTILISATEUR < SUR LE 'SVC' 'CCI'... < < IMEMES: EQU $ PSR B,Y CALL #SISP CMS5 PSRSLO# < SAUVEGARDE DE (SLO,SLE) COURANT. LA RSLO+XXPSTD,W LB RSLE+XXPSTD,W WOE < MISE EN PLACE DE (SLO,SLE) ESCLAVE. CPZ MOT0 < IMPLANTE-T'ON UN SVC OU UN QUIT??? JL IMEMX < DANS LE CAS OU L'ON IMPLANTE < UN QUIT, LES REGISTRES NE < SONT PAS (RE-)INITIALISES, < MIS A PART LE REGISTRE P... < < CAS OU L'ON IMPLANTE UN 'SVC', < INITIALISATION DES REGISTRES : < (ON A DEJA (P)=0...) < IC RA+XXPSTD,W < A(ESCLAVE)<--XMOT1. IC RK+XXPSTD,W < K(ESCLAVE)<--XMOT2-DEPILE. IF XMOT2-DEPILE-I,,XEIF%, IF ATTENTION : LE 'IC' SUR 'RK' EST IDIOT !!! XEIF%: VAL ENDIF IF XMOT1-I,,XEIF%, IF ATTENTION : LE 'IC' SUR 'RA' EST IDIOT !!! XEIF%: VAL ENDIF < < GENERATION DU MINI-PROGRAMME D'INITIALISATION : < IMEMX: EQU $ < ENTREE RESERVEE A LA ROUTINE < D'ABORT DES ESCLAVES. LA MOT0 < ACCES A L'INSTRUCTION (QUIT/ < SVC) A IMPLANTER EN MOT0. TBT BMOT0 < DISCRIMINATION QUIT/SVC A < L'AIDE DU CARY (C=1 SI QUIT). RBT BMOT0 < ARZ BIT0(MOT0) A PRIORI. LYI XMOT0 < (Y)=ADRESSE RELATIVE DU MOT0... STAR < MISE EN PLACE DU SVC/QUIT CCI < DANS LE MOT0 DE L'ESPACE < MEMOIRE UTILISATEUR. < (EN (SLO)+0). JC E872 < DANS LE CAS D'UN QUIT, IL < N'Y A RIEN D'AUTRE A INITIALISER. < < CAS DU SVC : GENERATION DE < L'ARGUMENT D'APPEL DU CCI : < LAI FONCCI LYI XMOT1 < (Y)=ADRESSE RELATIVE DU MOT1... STAR < MISE DE L'ARGUMENT DU SVC < EN (SLO)+1. E872: EQU $ < RESTAURATION DE (SLO,SLE) : CALL #SISP CMS5 PLRSLO# PLR B,Y RSR < ET C'EST TOUT... < < < R E I N I T I A L I S A T I O N D E L ' E S P A C E < M E M O I R E E S C L A V E S U I T E < A U N A B O R T : < < < FONCTION : < LORS DE LA RECEPTION D'UN < DOUBLE 'ALT-MODE' D'UN UTILI- < SATEUR (OU DE "!X..."), LE < PROGRAMME EN COURS EST IN- < TERROMPU, ET LA MAIN EST DON- < NEE AU 'CCI' ; POUR CE FAIRE, < IL FAUT UN MINI-PROGRAMME < D'APPEL DU 'CCI' : C'EST LE < BUT DE CE SOUS-PROGRAMME < APPELE EN TANT QUE 'FSERV'. < < < ARGUMENT : < (W)=ADRESSE DE 'DEMSER'. < < ABORT: EQU $ ADRI DCTESC-DEMSER,W < (W)=@DCT-ESCLAVE. PSR B BSR ASAVRE < SAUVEGARDE DES REGISTRES < COURANTS DE L'ESCLAVE AU < MOMENT DE L'ABORT. PLR B < < SUPPRESSION DE LA ROUTINE DE FIN DE SERVICE : < STZ FSERV-DCTESC,W < < PREPARATION DES REGISTRES DE L'ESCLAVE : < LXI XMOT2-DEPILE < PREPARATION DE LA REINITIALISATION < DES REGISTRES ESCLAVES. LA PSTESC-DCTESC+RS,W < TEST DU MODE DE L'ESCLAVE (S). JAGE E803 < L'ESCLAVE EST EN MODE 'ESCLAVE'. < < CAS OU L'ESCLAVE EST EN MODE 'MAITRE',DONC < SUITE A UN SVC : DEUX CAS SE PRESENTENT : < < 1 - MOT0='SVC' : ON LAISSE LA PILE < INTACTE, ET ON MODIFIE LE REGISTRE < 'K' AVEC 'XMOT2', MOT2 DANS LEQUEL < ON MET UN 'P' DE RETOUR' NUL ; DE < PLUS LE MOT 'RAD' CONTIENT DIRECTEMENT < LE 'P' DE RETOUR DU 'SVC'... < < 2 - MOT0='QUIT' : IL N'Y A PAS < DE PILE GENEREE, DONC LA ON DOIT < MODIFIER LA PILE, EN Y METTANT LE < REGISTRE 'P' DE RETOUR DU 'SVC' AVEC < 'XMOT0' ; LA 'RAD' CONTIENT L'ANCIEN < 'P' DE RETOUR, CE QUI EST OBLIGATOIRE, < SINON ON PERD UNE INFORMATION... < PSR L LA PSTESC-DCTESC+RSLO,W < (A)=(SLO(ESCLAVE)). BSR APDADR < MULTIPLICATION PAR 16 DE (SLO). LR A,L < (L)=SLO*16 AD PSTESC-DCTESC+RK,W XR A,L < (L)=K ABSOLU < (A)=SLO*16 LY O,L < 'P' DE RETOUR XR A,W < SAVE @DCT-ESCLAVE DANS A, ET < (W)=(SLO-ESCLAVE). STY RAD-SLOESC,W < L'OPERANDE '@' DU DEBUG UTILI- < SATEUR RECOIT LE P DE RETOUR DU < SVC QUI SE TROUVAIT AU SOMMET < DE LA PILE POINTEE PAR K. CPZ MOT0 < QUE DOIT-ON GENERER ??? JG E804X < UN 'SVC'... JL E804Y < UN 'QUIT'... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < VOIR POURQUOI LE 'MOT0' EST RAZE !!! < JMP E804X < ON FAIT COMME POUR LES 'SVC'... < < CAS D'UN 'QUIT' A GENERER : < E804Y: EQU $ XR A,W < RESTAURE (W)=@DCT-ESCLAVE. STZ O,L < RAZ DU P DE RETOUR < DE L'ESCLAVE DANS SON PROGRAMME. PLR L LARMO2:: VAL K < VALEUR INDIQUANT DANS 'A' QU'UN 'LAR' < D'ACCES AU MOT2 EST POSSIBLE ET DONNERA < BIEN LA VALEUR CORRECTE DU MOT2 ; CETTE < VALEUR EST INDISTINGUABLE D'UNE VALEUR < ANTERIEUREMENT NULLE DU MOT2, CE QUI EST < BIEN... LAI LARMO2 < (A)=LARMO2 : ON POURRA FAIRE UN 'LAR'... JMP IMEMY < VERS LA GENERATION DU MINI-PROGRAMME... < < CAS D'UN 'SVC' A GENERER : < E804X: EQU $ PSR X < SAUVEGARDE DU FUTUR REGISTRE 'A' < DE L'UTILISATEUR... LX XMOT2,W < (X)=VALEUR ANTERIEURE DU MOT2 ; A NOTER < QUE SI CELLE-CI EST NULLE, ON TOMBE < SUR 'LARMO2', MAIS COMME ON VA RAZER < LE MOT2, SA VALEUR NE VA PAS CHANGER, < ET DONC ON PEUT FAIRE UN 'LAR', BIEN < QUE LE MOT2 AIT ETE CHANGE... IF LARMO2-K,,XEIF%, IF ATTENTION : LA VALEUR DE 'LARMO2' EST INCOMPATIBLE IF AVEC LA VALEUR DE REINITIALISATION DU MOT2 ; IF EN EFFET, IL FAUT QUE 'LARMO2' VAILLE CETTE IF VALEUR DE REINITIALISATION, SI L'ON VEUT QUE IF LE 'LAR' DONNE UN RESULTAT CORRECT LORSQUE IF (A)=LARMO2 !!! XEIF%: VAL ENDIF STZ XMOT2,W < AINSI, ON RAZE LE 'P' DE RETOUR DU 'SVC' < COURANT DANS LA PILE QUE L'ON GENERE... IF XMOT0-K,,XEIF%, IF ATTENTION : LE 'P' DE RETOUR EST MAL INITIALISE !!! XEIF%: VAL ENDIF XR A,W < RESTAURE : (W)=ADRESSE DE 'DCTESC'... LAI XMOT2 STA PSTESC-DCTESC+RK,W < INITIALISATION DU REGISTRE 'K' TEL < QUE LA PILE 'K' CONTIENNE LE 'P' DE < RETOUR DU 'SVC' COURANT... LR X,A < (A)=VALEUR ANTERIEURE DU MOT2... PLR X < (X)=FUTUR REGISTRE 'A' UTILISATEUR... PLR L JMP E804 < VERS L'INITIALISATION DU REGISTRE 'A'... < < CAS OU L'ESCLAVE EST EN MODE 'ESCLAVE', < DONC EN EXECUTION OU INTERROMPU PAR < L'HORLOGE OU EN TRAPPE : < E803: EQU $ STZ PSTESC-DCTESC+RP,W < RAZ DU REGISTRE 'P' COURANT DE < L'ESCLAVE. LAI LARMO2 < (A)=LARMO2, INDIQUANT AINSI QU'UN 'LAR' < D'ACCES AU MOT2 EST REALISABLE... CPZ MOT0 < DISCRIMINATION QUIT/SVC. JL IMEMY < QUIT : PAS D'INIT REGISTRES. < < CAS DU SVC : INITIALISATION DE A & K : < STX PSTESC-DCTESC+RK,W < K(ESCLAVE) <-- XMOT2-DEPILE. E804: EQU $ IF XMOT2-DEPILE-XMOT1,,XEIF%, IF ATTENTION : L'INITIALISATION DE 'A' NE PEUT SE IF FAIRE AVEC CELLE DU REGISTRE 'K' !!! XEIF%: VAL ENDIF STX PSTESC-DCTESC+RA,W < A(ESCLAVE) <-- XMOT1. < < < S A U V E G A R D E P U I S I N T I A L I S A T I O N < D E S M O T S 0 , 1 E T 2 D E L ' E S P A C E < M E M O I R E D E L ' U T I L I S A T E U R : < < < ARGUMENT : < (A)=LARMO2 OU K (MAIS A NOTER QUE LARMO2=K) : UN < 'LAR' D'ACCES AU MOT2 EST POSSIBLE, < CAR SOIT ON N'A PAS MODIFIE LE < MOT2 (LARMO2), SOIT ON L'A MODIFIE < MAIS EN LE METTANT A 0 (K)... < #K : LE MOT2 A ETE MODIFIE, ET SA < VALEUR ANTERIEURE EST DANS 'A', < ET DIFFERENTE DE K... < < IMEMY: EQU $ < ENTRY UTILISEE PAR 'TH0'... PSR B,Y LR A,X < (X)=INDICATEUR DE 'LAR' SUR LE MOT2... CALL #SISP CMS5 PSRSLO# < SAUVEGARDE DE (SLO,SLE) COURANT. < < MEMORISATION DE L'ETAT ANTERIEUR < DE L'ESPACE MEMOIRE UTILISATEUR : < LA RSLO+XXPSTD,W LB RSLE+XXPSTD,W XWOR%9: VAL SLOESC>DADR ADRI -XWOR%9,A WOE < MISE EN PLACE D'UN (SLO,SLE) ENCADRANT < L'ESPACE MEMOIRE UTILISATEUR, Y COMPRIS < SON EN-TETE... LYI SLOESC+XMOT0 LAR LYI RMOT0 STAR < MEMORISATION DU MOT0, LYI SLOESC+XMOT1 LAR LYI RMOT1 STAR < DU MOT1, LR X,A < (A)=INDICATEUR DE 'LAR' A FAIRE, ET < VALEUR ANTERIEURE DU MOT2 SI #0... IF LARMO2-K,,XEIF%, IF ATTENTION : LE 'JANE' EST IDIOT !!! XEIF%: VAL ENDIF JANE E804X1 < LE 'LAR' N'EST PAS A FAIRE, ET 'A' < DONNE LA VALEUR ANTERIEURE DU MOT2... LYI SLOESC+XMOT2 < (A)=LARMO2 : LAR < (A)=VALEUR DU MOT2 (QUI A ETE MODIFIE < PAR UN 'STZ', OU PAS MODIFIE...). E804X1: EQU $ LYI RMOT2 STAR < ET DU MOT2. < < PREPARATION DE L'INITIALISATION : < LA RSLO+XXPSTD,W LB RSLE+XXPSTD,W WOE < MISE EN PLACE DE (SLO,SLE) ESCLAVE. JMP IMEMX < ALLONS GENERER LE MINI- < PROGRAMME D'APPEL A CCI. CALL #SISP CMS5 DOL2# PAGE < < < S A U V E G A R D E D E S R E G I S T R E S < D ' U N E S C L A V E E N T E T E < D E L ' E S P A C E M E M O I R E : < < < FONCTION : < CETTE ROUTINE DEPLACE LES 10 REGISTRES < DE L'ESCLAVE (A,B,X,Y,C,L,W,K,P,S) DE < DCTESC VERS L'EN-TETE DE L'ESPACE MEMOIRE < LORS DES ABORT (ALT-MODE) ET DES TRAPPES. < < < A T T E N T I O N : < CETTE ROUTINE NE PEUT ETRE APPELEE QUE < SI L'ESPACE MEMOIRE DE L'ESCLAVE EST < RESIDENT !!!!! < < < ARGUMENT : < (W)=ADRESSE DCT(ESCLAVE). < < < DETRUIT A,B,X. < < SAVREG: EQU $ CALL #SISP CMS5 PSRSLO# < SAUVEGARDE DE (SLO,SLE) COURANT... LA RSLO+XXPSTD,W LB RSLE+XXPSTD,W XWOR%9: VAL SLOESC>DADR ADRI -XWOR%9,A WOE < INITIALISATION DE (SLO,SLE) EN TETE < DU BLOC MEMOIRE QUI LUI EST ATTRIBUE, < COMPTE TENU DE 'SLOESC'... LAD PSTESC-DCTESC,W < (A)=ADRESSE ABSOLUE DES REGISTRES DANS < LA 'DCTESC', LBI RAT < (B)=ADRESSE RELATIVE A 'SLO' DU PREMIER < REGISTRE DE TRAPPE... LXI RS-RA+Z < (X)=NOMBRE DE REGISTRES A DEPLACER, A < SAVOIR (A,B,X,Y,C,L,W,K,P,S). MVTS < SAUVEGARDE DES REGISTRES DE TRAPPE... < RESTAURATION DE (SLO,SLE) : CALL #SISP CMS5 PLRSLO# RSR PAGE < < < I N I T I A L I S A T I O N D E L ' E N - T E T E < D E L ' E S P A C E M E M O I R E E S C L A V E : < < < FONCTION : < CETTE ROUTINE APPELEE PAR UN HANDLER < DE SERVICE LORS DU JOB ENTRY A A SA < CHARGE DE REMETTRE A 0 LES MOTS DE < L'EN-TETE DE L'ESPACE MEMOIRE ESCLAVE, < SOIENT LES MOTS ALLANT DE (SLO)-SLOESC A < (SLO)-1 ; CES MOTS SONT DESTINES A < SAUVEGARDER LE CONTEXTE ESCLAVE (A,B,X,Y, < C,L,W,K,P,S) LORS DES TRAPPES DE CET ESCLAVE. < < < ARGUMENT : < (W)=ADRESSE DCT(ESCLAVE). < (DESTRUCTIBLE). < < RZMEM: EQU $ LXI SLOESC < NBRE DE MOTS A RAZER. LA RSLO+XXPSTD,W < (A)=SLO DE L'ESCLAVE. BSR APDADR < MULTIPLLICATION PAR 16 DE (SLO). LR A,W < (W)=SLO. Z310: EQU $ ADRI -P,W STZ O,W < RAZ DE CHAQUE MOT. JDX Z310 RSR < ET C'EST TOUT...