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