< S I S C M S 5 11
PAGE
PAGE
<
<
< D C T D U R U N N E R D E S E S C L A V E S :
<
<
CALL #SISP CMS5 CHECK#
CALL #SISP CMS5 DOL1#
DCTRUN: EQU $
PSTRUN: WORD K;K;NSPACT;K;COM+DEPCS;DCTRUN;XXDISW;PILRUN;DISPAT;SMST
WORD SO;SE
#@ASCI " RUN" < #SISP CMS5 ASCI#
WORD XIOID0 < IOID.
WORD NFILTR < FILTRE.
WORD FILTRS < S-FILTRE.
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 RUNESC < ES.
WORD NIL
WORD K;K < ETAT.
WORD XBITS0 < BITSEM.
WORD XXNTRY;TRYVID
WORD K < HSTATS.
WORD XTESTO < TESTO.
WORD XDDCTF < 'DCT' NON CONNECTABLE...
WORD XFONBA < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< ZONE VARIABLE :
<
VARRUN: EQU $
IF VARRUN-DCTRUN-DCTFIX,,XEIF%,
IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%: VAL ENDIF
<
< PILE DU RUNNER :
<
CALL #SISP CMS5 DOL2#
PILRUN: EQU $-DEPILE
XWPILE: VAL LPILED+5
CALL #SISP CMS5 GENPIL2#
CALL #SISP CMS5 CHECK#
PAGE
<
<
< R U N N E R D E S E S C L A V E S :
<
<
< FONCTION :
< CE DISPATCHER A A SA CHARGE
< LA MISE A JOUR DE 'DCTSY' AVEC
< L'ADRESSE DE LA 'DCTESC' DE
< L'HEUREUX ELU, PUIS L'ARMEMENT
< DU NIVEAU ESCLAVE 'NSPACT'.
<
<
< A T T E N T I O N :
< POUR QUE TOUT FONCTIONNE
< CORRECTEMENT, IL FAUT RESPECTER
< LA HIERARCHIE SUIVANTE :
<
< NSPRUN < NSPACT < NSPSCH...
<
<
< ARGUMENT :
< (X)=NSPACT.
<
<
RUNESC: EQU $
<
< HDLSCH VIENT DE SYNCHRONISER RUNESC PAR SIT :
<
LY IBHRUN < RECUPERATION DE LA VALEUR
< INITIALE DE BHRUN FONCTION DE
< LA CHARGE DU SYSTEME.
STY BHRUN < BHRUN=1 SI NUSERA=K OU 1,
< BHRUN=K SI NUSERA>1, EN VUE DE
< LA PROCHAINE ET EVENTUELLE
< IT HORLOGE SUR L'ESCLAVE QUE
< L'ON FAIT RUNNER.
LA ARUN < RECUPERATION DE @DCT-ESCLAVE A
< FAIRE RUNNER.
STA &ADCTSY < MISE A JOUR DE DCTSY.
ARM NSNSP0+NSPACT < ARMEMENT DU NIVEAU ESCLAVE,
< QUI NE PREND PAS LA MAIN IMMEDIA-
< TEMENT (CF. LES PRIORITES).
RSR < ALLONS PASSER LA MAIN A L'ESCLAVE.
PAGE
<
<
< D C T S C H E D U L E R E S C L A V E S :
<
<
CALL #SISP CMS5 CHECK#
CALL #SISP CMS5 DOL1#
DCTSCH: EQU $
PSTSCH: WORD K;K;K;K;COM+DEPCS;DCTSCH;NIL;PILSCH;HANDLR;SMST;SO;SE
#@ASCI " SCH" < #SISP CMS5 ASCI#
WORD XIOID0 < IOID.
WORD NFILTR < FILTRE.
WORD FILTRS < POUR LE SCHEDULER, ON EST OBLIGE
< DE METTRE SYSTEMATIQUEMENT LE
< FILTRE, EN EFFET SA FILE
< D'ATTENTE EST PRESQUE TOUJOURS
< PLEINE, ET SI ON LA VIDE SANS
< FILTRER, ON SAUTE DES
< 'RQST SCHVID', ET RAPIDEMENT
< LE 'BETA' DE SCHVID DEVIENT
< NEGATIF, EN PASSANT PAR '+INFINI'
< CE QUI BLOQUE DONC LE SYSTEME...
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 HDLSCH < SCHEDULER DES ESCLAVES.
WORD NIL < PAS DE RIT.
WORD K;K < ETAT.
XBITS1:: VAL '0001 < SEUIL POUR 'SCH' :
WORD XBITS1 < BITSEM.
WORD XXNTRY;TRYVID < NTRIES-FRTRY.
WORD K < HSTATS.
WORD XTESTO < TESTO.
WORD XXDCTF < 'DCT' NON CONNECTABLE...
WORD XFONBA < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< ZONE VARIABLE :
<
VARSCH: EQU $
IF VARSCH-DCTSCH-DCTFIX,,XEIF%,
IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%: VAL ENDIF
<
< OUTILS DE SYNCHRONISATION :
<
WORD DCTSVC+LSIT < SYNCHRONISATION DE HDLSCH
< ET DU RECEPTEUR DES SVC.
SESVC:: VAL $-D-VARSCH
WORD DCTRUN+LSIT < SYNCHRONISATION DE HDLSCH
< ET DU RUNNER DES ESCLAVES.
SRUN:: VAL $-D-VARSCH
<
< DEFINITION DE QUELQUES 'CDA' :
<
WORD OCDA
SCHCDO:: VAL $-D-VARSCH < ACCES A L'ORIGINE DE LA 'CDA',
WORD ECDA
SCHCDE:: VAL $-D-VARSCH < ACCES A LA FIN DE LA 'CDA'.
WORD MEMTV0
SCHCDI:: VAL $-D-VARSCH < POUR SAVOIR SI L'UTILISATEUR ACCEDE
< A LA "CDA-IMAGE"...
WORD AOCDA2
SCHCDA:: VAL $-D-VARSCH < POUR SAVOIR SI L'UTILISATEUR ACCEDE
< A LA "CDA-PRIVEE", ON REGARDERA S'IL
< N'ACCEDE NI A LA "CDA-IMAGE", NI A
< LA "CDA-COMMUNE"...
ACDAG: WORD XCDAGL
ACDAG1: EQU ACDAG < A CAUSE
ACDAG2: EQU ACDAG < DE L'ASSEMBLEUR...
SACDAG:: VAL $-D-VARSCH < INDICATEUR PERMETTANT DE SAVOIR SI LA
< 'CDA-COMMUNE PRIVEE' EST LIBRE (ACDAG=
< XCDAGL), OU BIEN OCCUPEE (ACDAG=XCDAGO).
ACDAJ: WORD XCDAJL
ACDAJ1: EQU ACDAJ < A CAUSE
ACDAJ2: EQU ACDAJ < DE
ACDAJ3: EQU ACDAJ < L'ASSEMBLEUR...
ACDAJ4: EQU ACDAJ < IDEM...
ACDAJ5: EQU ACDAJ < IDEM...
SACDAJ:: VAL $-D-VARSCH < INDICATEUR PERMETTANT DE SAVOIR SI LA
< 'CDA' IMAGE MOYENNE-DEFINITION EST
< LIBRE (ACDAJ=XCDAJL) OU BIEN OCCUPEE
< (ACDAJ=XCDAJO).
<
< DONNEES POUR L'UTILISATEUR :
<
WORD RETSVC
RETSCH:: VAL $-D-VARSCH < VALEUR DU REGISTRE 'P' DE L'UTILISATEUR
< LORSQUE CELUI-CI A EXECUTE UN 'SVC'...
<
< PILE DU SCHEDULER :
<
CALL #SISP CMS5 DOL2#
PILSCH: EQU $-DEPILE
XWPILE: VAL LPILEH+8
CALL #SISP CMS5 GENPIL2#
CALL #SISP CMS5 CHECK#
PAGE
<
<
< S C H E D U L E R D E S E S C L A V E S :
<
<
< PHILOSOPHIE :
< LE SCHEDULER EST UN HANDLER COMME
< LES AUTRES ; LORSQU'UN ESCLAVE EST
< REACTIVABLE (EN FIN DE SERVICE,
< QUELQU'IL SOIT), LE HANDLER DE SER-
< VICE QUI LUI ETAIT ASSOCIE (SUITE
< A UN 'SVC' , OU UNE INTERRUPTION
< D'HORLOGE) DEPOSE PAR 'CHAND' UNE
< DEMANDE DE SCHEDULING POUR CET
< UTILISATEUR. LE SCHEDULER PRO-
< VOQUE ENSUITE L'ACTIVATION DE
< L'UTILISATEUR DE TETE DE SA FILE
< D'ATTENTE ; AU PREALABLE, IL
< POSITIONNE LES MOTS 'AOCDA' ET
< 'AECDA' ASSOCIE A CET UTILISATEUR,
< EN PRENANT EN COMPTE LES PRO-
< BLEMES D'EXCLUSION...
<
<
< ARGUMENT :
< (A)=NSPTYP DE LA DEMANDE DE SCHEDULING,
< EN MODE PRIRITAIRE OU NON PRIORITAIRE,
< (W)=ADRESSE DEMANDE SCHEDULING (DONC @DCT(ESCLAVE)
< A UNE CONSTANTE DE TRANSLATION PRES).
<
<
USE W,DEM0
USE L,DCT0
HDLSCH: EQU $
RBT PRIO < RAZ DU BIT PRIORITAIRE DE
< LA DEMANDE A PRIORI.
STA NSPTYP < MAJ DU NSPTYP DE LA DEMANDE.
IC COMPT1-DEMSCH,W < COMPTABILISATION DES DEMANDES
< DE SCHEDULING DE CET ESCLAVE.
<
< MISE EN PLACE DE LA 'CDA' :
<
LA CDESCO-DEMSCH,W < (A)=ORIGINE DE LA "CDA" UTILISATEUR,
LB CDESCE-DEMSCH,W < (B)=EXTREMITE DE LA "CDA" UTILISATEUR.
ACCBJ: @
XWOR%1: VAL KOLF=FMASK+KOLTES=FVAL
XWOR%1: VAL KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2: VAL KOLTED=FMASK+KOL0=FVAL
XWOR%2: VAL KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3: VAL XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE 'ACCBJ'...
XWOR%4: VAL MSYMBI=FMASK+KOL0=FVAL
EACCBJ:: VAL MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
IF EACCBJ=FCSYMT-SYMBX,XEIF%9,,XEIF%9
TBT BMCDAJ < EST-CE LA 'CDAJ' ???
JC Z730X8 < OUI...
XEIF%9: VAL ENDIF
CP VAR+SCHCDI < NON, ALORS VEUT-ON LA 'CDAI' ???
JE Z730X3 < OUI, ACCES A LA "CDA-IMAGE", DONC
< REGARDER DE PRES LE 'DKU'...
CP VAR+SCHCDA < NON, ALORS ACCEDE-T'IL A LA "CDA-COMMUNE"
JNE Z730X1 < NON, PAS DE PROBLEMES...
< (C'EST DONC LA "CDAP")
< NOTA : IL EST POSSIBLE QUE LA CARTE
< "!CDAP" AIT ETE FRAPPEE JUSTE AVANT
< ALORS QUE L'UTILISATEUR ETAIT DONC
< SWAPPE OUT ET PEUT-ETRE DE PLUS SUR
< 'PR1' ; MAIS CELA N'A AUCUNE IMPORTANCE
< CAR EN EFFET, LORS DU PROCHAIN SWAPPING
< OUT ON TESTERA L'UTILISATION DE LA "CDAP"
< ET ON FORCERA L'UTILISATION DE 'DKS'...
<
< CAS DE "!CDA" OU "!CDAG" :
<
CPZ VAR+SACDAG < LA 'CDA-COMMUNE' EST-ELLE PRIVATISEE ???
JE Z730X1 < NON, OK PAS DE PROBLEMES...
IF XCDAGL-K,,XEIF%,
IF ATTENTION : LE TEST QUI PRECEDE EST IDIOT !!!
XEIF%: VAL ENDIF
PSR A
LA IDDESC-DEMSCH,W < OUI,
TBT IDESC5 < EST-CE L'UTILISATEUR COURANT QUI A FAIT
< "!CDAG" ???
PLR A
JNC Z730X4 < NON, DONC LA 'CDA-COMMUNE' EST INACCES-
< SIBLE POUR LUI (C'EST UN COMBLE !!!).
JMP Z730X1 < OUI, IL PEUT DONC Y ACCEDER...
IF EACCBJ=FCSYMT-SYMBX,XEIF%9,,XEIF%9
<
< CAS DE !CDAJ :
<
Z730X8: EQU $
PSR A,X
LXI PROMST
LA &SYSPRO
LR A,Y < ET SAVE :
< (Y)=NUMERO DU PROCESSEUR MAITRE...
LXI PROIOP
CP &SYSPRO < EST-CE QUE LE PROCESSEUR MAITRE EST
< AUSSI CELUI D'ENTREES-SORTIES ???
PLR A,X
JE Z730X4 < OUI, ALORS L'ACCES A LA 'CDAJ' EST
< INTERDIT POUR EVITER DES ERREURS DE
< CADENCE SUR LES CANAUX D'ENTREES-SORTIES
< DUES AU BLOCAGE DU SOLAR MAITRE LORS
< DIALOGUES AVEC LE '68000'...
IF YROMST-K,,XEIF%,
IF ATTENTION : LE TEST SUIVANT EST IDIOT !!!
XEIF%: VAL ENDIF
CPZR Y < LE PROCESSEUR MAITRE EST-IL BIEN LE
< PROCESSEUR 0 ('YROMST') ???
JNE Z730X4 < NON, LA 'CDAJ' NE PEUT ETRE ATTEINTE PAR
< UN AUTRE PROCESSEUR QUE LE PROCESSEUR 0 !
JMP Z730X1 < NON, ALORS ON PEUT SE PERMETTRE DE BLO-
< QUER LE MAITRE DE TEMPS EN TEMPS...
XEIF%9: VAL ENDIF
<
< CAS DE !CDAI :
<
Z730X7: EQU $ < CAS OU 'DKU' N'EST PAS ASSIGNE...
PSR A < SAUVEGARDE DE 'OCDA'...
LA LUDKU-DEMSCH,W < (A)=LISTE DES GROUPES DE CYLINDRES
< APPROPRIES PAR L'UTILISATEUR,
EORR X,A < ON FAIT UN.EOR. AVEC LA LISTE DES
< GROUPES APPROPRIES (X) POUR 'DKU'...
TBT BLDKTV < TEST DU BIT PROTEGEANT LE DERNIER GROUPE
< ET LA TV :
PLR A < RESTAURATION DE 'OCDA'...
JC Z730X4 < LSDK=1 ET LUDKU=0 : ACCES INTERDIT ;
< (A NOTER QUE LSDK=0 ET LUDKU=1 EST UN
< CAS INEXISTANT...)
JMP Z730X1 < LSDK=LUDKU (=0 OU =1) : L'ACCES EST LIBRE
< POUR TOUT LE MONDE (=0), OU RESERVE POUR
< CET UTILISATEUR (=1), "!CDAI" PASSE
< DONC...
Z730X3: EQU $
PSR A,L
LXI NSPDKU
BSR ACADCT < (L)=ADRESSE DE 'DCTDKU',
WORD LXLSDK < (X)=LISTE GENERALE DES GROUPES DE CYLIN-
< DRES APPROPRIES DE 'DKU' (IL S'AGIT
< D'UNE INSTRUCTION "EN AVANT", CAR
< 'LSDK' N'EST PAS ENCORE DEFINI...).
CPZ ETALOC < 'DKU' EST-IL LOUE ???
PLR A,L
IF XETLOC-BITSIG,,XEIF%,
IF ATTENTION : LE TEST SUIVANT EST IDIOT !!!
XEIF%: VAL ENDIF
JGE Z730X7 < NON, DONC ALLONS VOIR SI L'ACCES A LA
< TELEVISION N'EST PAS SEUL PROTEGE PAR
< UNE COMMANDE "!Q..." ???
LXI NOCMO*LTASGN-Z < OUI, 'DKU' EST LOUE ; REGARDONS SI
< L'UTILISATEUR QUE L'ON ACTIVE EN EST
< L'HEUREUX LOCATAIRE...
Z730X2: EQU $
PSR A
LBY &TASSGN-DEMSCH,W
CPI NSPDKU < ALORS ???
PLR A
JE Z730X1 < OUI, ALORS SON "!CDAI" EST ACCEPTE...
JDX Z730X2 < ON NE SAIT PAS... AU NVP SUIVANT...
<
< GENERATION DE LA DEFINITION DE LA 'CDA' :
< (ACCESSIBLE EN 'Z730X1', ET
< INACCESSIBLE EN 'Z730X4')
<
Z730X4: EQU $
XR A,B < ET BIEN NON, DANS SES CONDITIONS,
< ON REFUSE SON "!CDA..." PROVISOIREMENT,
< EN PERMUTANT LES ADRESSES DE DEBUT ET
< FIN, EN PROVOQUANT AINSI UNE TRAPPE
< S'IL TENTE D'Y ACCEDER...
< DE MEME LORS DE !CDAP ALORS QU'IL
< EST SWAPPE SUR 'PR1'...
Z730X1: EQU $
STA &VAR+SCHCDO < MISE EN PLACE DE 'OCDA',
STB &VAR+SCHCDE < ET DE 'ECDA'...
<
< PETIT TRUANDAGE SUR LE REGSITRE
< 'S' AU CAS OU L'UTILISATEUR
< SORTIRAIT DU 'DEBUG' :
<
LA PSTESC-DEMSCH+RS,W
TBT MS < L'UTILSATEUR EST-IL EN MODE MAITRE ???
< C'EST-A-DIRE VIENT-IL D'UN 'SVC' ???
JC Z730X6 < OUI, MAITRE, RIEN A FAIRE...
RBT SVCS < NON, IL EST EN MODE ESCLAVE ; ON RAZE
< DONC A PRIORI 'SVCS' AU CAS OU SUITE
< A UN 'SVC', IL SERAIT ENTRE DANS LE
< 'DEBUG' ET AURAIT REMIS A ZERO SON
< REGISTRE 'S' ; ON SAIT QU'ALORS ON
< MEMORISE L'APPEL PAR 'SVC' EN LAISSANT
< LE BIT 'SVCS' INTACT...
STA PSTESC-DEMSCH+RS,W < ET ON MET 'S' A JOUR...
JMP Z730X9 < VERS LA SYNCHRONISATION DU 'RUNER'...
Z730X6: EQU $
LA VAR+RETSCH < L'UTILISATEUR EST EN MODE MAITRE :
CP PSTESC-DEMSCH+RP,W
< VALIDONS DONC SON REGISTRE 'P'...
JE Z730XA < OK, IL FAUT 'RETSVC'...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< COMPRENDRE COMMENT, L'UTILISATEUR
< ETANT EN MODE MAITRE, PEUT AVOIR UN
< REGISTRE 'P' DONT LA VALEUR DIFFERE
< DE LA VALEUR D'UN RETOUR DE 'SVC'...
<
STA PSTESC-DEMSCH+RP,W
< ET ENFIN, ON CORRIGE 'RP'...
Z730XA: EQU $
Z730X9: EQU $
<
< CALCUL DE L'ADRESSE DE 'DCTESC' :
<
LR W,A < (A)=@DEMANDE DE SCHEDULING.
ADRI DCTESC-DEMSCH,A < (A)=@DCT ESCLAVE.
<
< A T T E N T I O N :
< POUR DES RAISONS D'ININTERRUPTIBLITE,
< ON NE PEUT DISSOCIER LA MISE A JOUR DE
< DCTSY AVEC ADRESSE DCTESC, DE L'ARMEMENT
< DU NIVEAU ESCLAVE...
<
STA ARUN < TRANSMISSION DE @DCT-ESCLAVE
< A RUNESC.
LAD &VAR+SRUN < SYNCHRONISATION DU RUNNER
BSR ARLSE < DES ESCLAVES
<
< A T T E N T I O N :
< L'EXECUTION DE LA SEQUENCE
< D'INSTRUCTIONS QUI SUIT N'EST
< EXECUTEE QUE LORSQUE LE NIVEAU
< ESCLAVE REND LA MAIN (AU PLUS TOT !!!)
<
<
<
< N A T U R E D U P A S S A G E D E
< M A I N D E L ' E S C L A V E :
<
<
LXI NSPACT
CPZ &ADCTSY < L'ADRESSE-DCT-ESCLAVE FIGURE-
< T'ELLE TOUJOURS DANS DCTSY ???
JE Z730 < NON, L'ESCLAVE A DONC PASSE
< LA MAIN PAR IT-HORLOGE, OU
< A FAIT UN SVC.
JG SYSRA1 < OK.
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< APRES AVOIR EVENTUELLEMENT MODIFIE
< 'DCTSY', ON FERA UN 'JMP Z730'...
<
SYSRA1: EQU $
<
<
< R E C U P E R A T I O N D E S Q U I T
< E X E C U T E P A R L ' E S C L A V E :
<
<
LAD &VAR+SESVC
BSR ARLSE < LES QUIT EXECUTES DANS UN
< PROGRAMME ESCLAVE SONT ASSIMILES
< A DES SVC ; ON SYNCHRONISE
< DONC LE RECEPTEUR DES SVC QUI
< RECUPERA DANS LE REGISTRE A
< L'ADRESSE DES ARGUMENTS...
Z730: EQU $
RSR < ATTENTION : CE RSR N'EST EXECUTE
< AU PLUS TOT QUE LORSQUE L'ESCLA-
< VE REND LA MAIN.
PAGE
<
<
< A L L O C A T I O N E T A P P E L
< D ' U N H A N D L E R D E S E R V I C E :
<
<
< FONCTION :
< CE SOUS-PROGRAMME ALLOUE UN
< HANDLER DE SERVICE A UN UTILI-
< SATEUR SUITE A UN 'SVC' OU BIEN
< A UNE INTERRUPTION D'HORLOGE ;
< ENSUITE, IL MET A JOUR 'DCTESC'
< ('DEMSER'), PUIS ENFIN MET 'DEMSER'
< DANS LA FILE D'ATTENTE DU 'HDLSER'
< QUI A ETE ALLOUE A CET UTILISATEUR ;
< ON NOTERA QU'EN FAIT CET UTILI-
< SATEUR, DE PAR LE MECANISME D'ALLO-
< CATION, EST FORCEMENT LE SEUL DANS
< LA FILE D'ATTENTE...
<
<
< ARGUMENTS :
< (L)=ADRESSE DCT(ESCLAVE),
< (B)=ADRESSE AUTOMATE DE SERVICE.
<
<
USE L,DCTESC
USE W,DEM0
ALOHS: EQU $
PSR A,X,W
<
< VALIDATION DE LA DEMANDE 'DEMSER' ANTERIEURE :
<
LA DEMSER+XXNSP
TBT ACTIF < EST-ELLE ENCORE ACTIVE ???
JC ALOHSY < OUI !!!
TBT ENFILE < EST-ELLE ENCORE EN FILE ???
JNC ALOHSZ < NON, TOUT EST BON, ON PEUT DEMANDER
< UN NOUVEAU NIVEAU DE SERVICE...
ALOHSY: EQU $
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< COMPRENDRE (COMME TOUJOURS...) !!!
<
JMP ALOHSX < ET ON SORT...
ALOHSZ: EQU $
<
< ALLOCATION D'UN HANDLER DE SERVICE :
<
LAD ATOHDS < RELAI DE LA TABLE D'OCCUPATION
< DES HANDLERS DE SERVICE.
NTRN
LXI X12/NBITMO < LONGUEUR DE LA TABLE.
TRN
RQST &ASXSER <<<<PHASE CRITIQUE.
BSR ASOBT < ALLOCATION DU 1ER HANDLER DE
< SERVICE LIBRE.
JNE SYSRA2 < OK.
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< JE NE SAIS PAS ; CELA PEUT SIGNIFIER
< QUE LE NOMBRE DE HANDLERS DE SERVICE
< EST INFERIEUR AU NOMBRE D'UTILISATEURS
< POTENTIELS, AUQUEL CAS, LE SYSTEME
< EST A MODIFIER... EN TOUT CAS, ON
< FERA UN 'JMP ALOHSX'...
<
JMP ALOHSX < ET ON SORT...
SYSRA2: EQU $
<
< ON A ICI :
< (A)=NUMERO PAR RAPPORT A 0 DU 'HDLSER' ALLOUE.
<
CPI RESCLA < CE HANDLER EXISTE-T'IL ???
JL SYSRA3 < OUI, OK.
BSR ASYSER < E R R E U R S Y S T E M E ...
SYSRA3: EQU $
PSR A
LAD &ASXSER
BSR ARLSE
PLR A
ADRI NSPSER,A < (A)=NSP DU HANDLER DE SERVICE.
SWBR A,A < GENERATION DE L'EN-TETE DE
< LA DEMANDE DE SERVICE.
STA DEMSER+XXNSP < MAJ DE DEMSER DANS DCT ESCLAVE.
<
< ENVOI DE LA DEMANDE DE SERVICE :
<
LR L,W
ADRI DEMSER-DCTESC,W < (W)=@DEMSER.
STB ARGDEM+AMDEM < 'AMDEM' DE 'DEMSER' RECOIT
< L'ADRESSE DE L'AUTOMATE DE
< SERVICE.
BSR ACHAND < ENVOI DE LA DEMANDE SANS
< ATTENTE...
ALOHSX: EQU $
PLR A,X,W
RSR
PAGE
<
<
< C O N S T A N T E S G E N E R A L E S :
<
<
XXSER1:: VAL 33 < INCREMENT DES LONGUEURS DES PILES
< DES HANDLERS DE SERVICE.
PAGE
<
<
< D C T H A N D L E R D E S E R V I C E 1 :
<
<
CALL #SISP CMS5 CHECK#
CALL #SISP CMS5 DOL1#
DCTS1: EQU $
PSTS1: WORD K;K;K;K;COM+DEPCS;DCTS1;NIL;PILS1;HANDLR;SMST;SO;SE
#@ASCI " S1 " < #SISP CMS5 ASCI#
WORD XIOID0 < IOID.
WORD NFILTR < FILTRE.
WORD FILTRS < S-FILTRE.
WORD XTALOC < ETALOC.
WORD XXLOC0 < SEMLOC.
DZS LSEM
WORD NIL < TETE.
WORD NIL < QUEUE.
WORD XXCHV0 < SCHVID.
DZS LSEM
WORD XXSIT0 < SIT.
DZS LSEM
WORD SPHEX0 < SPHEX.
DZS LSEM
WORD HDLSER < ES.
WORD ITSERV < ARIT.
WORD K;K < ETAT.
WORD XBITS0 < BITSEM.
WORD XXNTRY;TRYVID < NTRIES & FRTRY.
WORD K < HSTATS.
WORD XTESTO < TESTO.
WORD XXDCTF < 'DCT' NON CONNECTABLE...
WORD XSERUP < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< ZONE VARIABLE :
<
VARS1: EQU $
IF VARS1-DCTS1-DCTFIX,,XEIF%,
IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%: VAL ENDIF
WORD NILX < RELAI DE L'AUTOMATE.
DZS LDEM0 < RESERVE POUR LES DEMANDES DU CCI.
WORD NILK;NILK;NILX < POUR LE 'CCI' : (XBUFGR,MBUFGR,ABUFGR).
WORD SERESC < POUR 'RUNO' PUISSE APPELER 'SERESC'...
<
< PILE :
<
IF $-DCTS1-LDCTSN,,XEIF%,
IF ATTENTION : LES 'DCT' DE SERVICE SONT MAL GENEREES !!!
XEIF%: VAL ENDIF
XWPILE: VAL LPILEH+XXSER1
PILS1: #@EQU $-DEPILE < #SISP CMS5 GENPIL1#
PAGE
<
<
< D C T H A N D L E R D E S E R V I C E 2 :
<
<
DCTS2: EQU $
PSTS2: WORD K;K;K;K;COM+DEPCS;DCTS2;NIL;PILS2;HANDLR;SMST;SO;SE
#@ASCI " S2 " < #SISP CMS5 ASCI#
WORD XIOID0 < IOID.
WORD NFILTR < FILTRE.
WORD FILTRS < S-FILTRE.
WORD XTALOC < ETALOC.
WORD XXLOC0 < SEMLOC.
DZS LSEM
WORD NIL < TETE.
WORD NIL < QUEUE.
WORD XXCHV0 < SCHVID.
DZS LSEM
WORD XXSIT0 < SIT.
DZS LSEM
WORD SPHEX0 < SPHEX.
DZS LSEM
WORD HDLSER < ES.
WORD ITSERV < ARIT.
WORD K;K < ETAT.
WORD XBITS0 < BITSEM.
WORD XXNTRY;TRYVID < NTRIES & FRTRY.
WORD K < HSTATS.
WORD XTESTO < TESTO.
WORD XXDCTF < 'DCT' NON CONNECTABLE...
WORD XSERUP < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< ZONE VARIABLE :
<
VARS2: EQU $
IF VARS2-DCTS2-DCTFIX,,XEIF%,
IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%: VAL ENDIF
WORD NILX < AUTOMATE.
DZS LDEM0 < RESERVE POUR LES DEMANDES DU CCI.
WORD NILK;NILK;NILX < POUR LE 'CCI' : (XBUFGR,MBUFGR,ABUFGR).
WORD SERESC < POUR 'RUNO' PUISSE APPELER 'SERESC'...
<
< PILE :
<
XWPILE: VAL LPILEH+XXSER1
PILS2: #@EQU $-DEPILE < #SISP CMS5 GENPIL1#
PAGE
<
<
< D C T H A N D L E R D E S E R V I C E 3 :
<
<
DCTS3: EQU $
PSTS3: WORD K;K;K;K;COM+DEPCS;DCTS3;NIL;PILS3;HANDLR;SMST;SO;SE
#@ASCI " S3 " < #SISP CMS5 ASCI#
WORD XIOID0 < IOID.
WORD NFILTR < FILTRE.
WORD FILTRS < S-FILTRE.
WORD XTALOC < ETALOC.
WORD XXLOC0 < SEMLOC.
DZS LSEM
WORD NIL < TETE.
WORD NIL < QUEUE.
WORD XXCHV0 < SCHVID.
DZS LSEM
WORD XXSIT0 < SIT.
DZS LSEM
WORD SPHEX0 < SPHEX.
DZS LSEM
WORD HDLSER < ES.
WORD ITSERV < ARIT.
WORD K;K < ETAT.
WORD XBITS0 < BITSEM.
WORD XXNTRY;TRYVID < NTRIES & FRTRY.
WORD K < HSTATS.
WORD XTESTO < TESTO.
WORD XXDCTF < 'DCT' NON CONNECTABLE...
WORD XSERUP < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< ZONE VARIABLE :
<
VARS3: EQU $
IF VARS3-DCTS3-DCTFIX,,XEIF%,
IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%: VAL ENDIF
WORD NILX < AUTOMATE.
DZS LDEM0 < RESERVE POUR LES DEMANDES DU CCI.
WORD NILK;NILK;NILX < POUR LE 'CCI' : (XBUFGR,MBUFGR,ABUFGR).
WORD SERESC < POUR 'RUNO' PUISSE APPELER 'SERESC'...
<
< PILE :
<
XWPILE: VAL LPILEH+XXSER1
PILS3: #@EQU $-DEPILE < #SISP CMS5 GENPIL1#
PAGE
<
<
< D C T H A N D L E R D E S E R V I C E 4 :
<
<
DCTS4: EQU $
PSTS4: WORD K;K;K;K;COM+DEPCS;DCTS4;NIL;PILS4;HANDLR;SMST;SO;SE
#@ASCI " S4 " < #SISP CMS5 ASCI#
WORD XIOID0 < IOID.
WORD NFILTR < FILTRE.
WORD FILTRS < S-FILTRE.
WORD XTALOC < ETALOC.
WORD XXLOC0 < SEMLOC.
DZS LSEM
WORD NIL < TETE.
WORD NIL < QUEUE.
WORD XXCHV0 < SCHVID.
DZS LSEM
WORD XXSIT0 < SIT.
DZS LSEM
WORD SPHEX0 < SPHEX.
DZS LSEM
WORD HDLSER < ES.
WORD ITSERV < ARIT.
WORD K;K < ETAT.
WORD XBITS0 < BITSEM.
WORD XXNTRY;TRYVID < NTRIES & FRTRY.
WORD K < HSTATS.
WORD XTESTO < TESTO.
WORD XXDCTF < 'DCT' NON CONNECTABLE...
WORD XSERUP < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< ZONE VARIABLE :
<
VARS4: EQU $
IF VARS4-DCTS4-DCTFIX,,XEIF%,
IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%: VAL ENDIF
WORD NILX < AUTOMATE.
DZS LDEM0 < RESERVE POUR LES DEMANDES DU CCI.
WORD NILK;NILK;NILX < POUR LE 'CCI' : (XBUFGR,MBUFGR,ABUFGR).
WORD SERESC < POUR 'RUNO' PUISSE APPELER 'SERESC'...
<
< PILE :
<
XWPILE: VAL LPILEH+XXSER1
PILS4: #@EQU $-DEPILE < #SISP CMS5 GENPIL1#
PAGE
<
<
< D C T H A N D L E R D E S E R V I C E 5 :
<
<
DCTS5: EQU $
PSTS5: WORD K;K;K;K;COM+DEPCS;DCTS5;NIL;PILS5;HANDLR;SMST;SO;SE
#@ASCI " S5 " < #SISP CMS5 ASCI#
WORD XIOID0 < IOID.
WORD NFILTR < FILTRE.
WORD FILTRS < S-FILTRE.
WORD XTALOC < ETALOC.
WORD XXLOC0 < SEMLOC.
DZS LSEM
WORD NIL < TETE.
WORD NIL < QUEUE.
WORD XXCHV0 < SCHVID.
DZS LSEM
WORD XXSIT0 < SIT.
DZS LSEM
WORD SPHEX0 < SPHEX.
DZS LSEM
WORD HDLSER < ES.
WORD ITSERV < ARIT.
WORD K;K < ETAT.
WORD XBITS0 < BITSEM.
WORD XXNTRY;TRYVID < NTRIES & FRTRY.
WORD K < HSTATS.
WORD XTESTO < TESTO.
WORD XXDCTF < 'DCT' NON CONNECTABLE...
WORD XSERUP < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< ZONE VARIABLE :
<
VARS5: EQU $
IF VARS5-DCTS5-DCTFIX,,XEIF%,
IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%: VAL ENDIF
WORD NILX < AUTOMATE.
DZS LDEM0 < RESERVE POUR LES DEMANDES DU CCI.
WORD NILK;NILK;NILX < POUR LE 'CCI' : (XBUFGR,MBUFGR,ABUFGR).
WORD SERESC < POUR 'RUNO' PUISSE APPELER 'SERESC'...
<
< PILE :
<
XWPILE: VAL LPILEH+XXSER1
PILS5: #@EQU $-DEPILE < #SISP CMS5 GENPIL1#
PAGE
<
<
< D C T H A N D L E R D E S E R V I C E 6 :
<
<
DCTS6: EQU $
PSTS6: WORD K;K;K;K;COM+DEPCS;DCTS6;NIL;PILS6;HANDLR;SMST;SO;SE
#@ASCI " S6 " < #SISP CMS5 ASCI#
WORD XIOID0 < IOID.
WORD NFILTR < FILTRE.
WORD FILTRS < S-FILTRE.
WORD XTALOC < ETALOC.
WORD XXLOC0 < SEMLOC.
DZS LSEM
WORD NIL < TETE.
WORD NIL < QUEUE.
WORD XXCHV0 < SCHVID.
DZS LSEM
WORD XXSIT0 < SIT.
DZS LSEM
WORD SPHEX0 < SPHEX.
DZS LSEM
WORD HDLSER < ES.
WORD ITSERV < ARIT.
WORD K;K < ETAT.
WORD XBITS0 < BITSEM.
WORD XXNTRY;TRYVID < NTRIES & FRTRY.
WORD K < HSTATS.
WORD XTESTO < TESTO.
WORD XXDCTF < 'DCT' NON CONNECTABLE...
WORD XSERUP < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< ZONE VARIABLE :
<
VARS6: EQU $
IF VARS6-DCTS6-DCTFIX,,XEIF%,
IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%: VAL ENDIF
WORD NILX < AUTOMATE.
DZS LDEM0 < RESERVE POUR LES DEMANDES DU CCI.
WORD NILK;NILK;NILX < POUR LE 'CCI' : (XBUFGR,MBUFGR,ABUFGR).
WORD SERESC < POUR 'RUNO' PUISSE APPELER 'SERESC'...
<
< PILE :
<
XWPILE: VAL LPILEH+XXSER1
PILS6: #@EQU $-DEPILE < #SISP CMS5 GENPIL1#
PAGE
<
<
< D C T H A N D L E R D E S E R V I C E 7 :
<
<
DCTS7: EQU $
PSTS7: WORD K;K;K;K;COM+DEPCS;DCTS7;NIL;PILS7;HANDLR;SMST;SO;SE
#@ASCI " S7 " < #SISP CMS5 ASCI#
WORD XIOID0 < IOID.
WORD NFILTR < FILTRE.
WORD FILTRS < S-FILTRE.
WORD XTALOC < ETALOC.
WORD XXLOC0 < SEMLOC.
DZS LSEM
WORD NIL < TETE.
WORD NIL < QUEUE.
WORD XXCHV0 < SCHVID.
DZS LSEM
WORD XXSIT0 < SIT.
DZS LSEM
WORD SPHEX0 < SPHEX.
DZS LSEM
WORD HDLSER < ES.
WORD ITSERV < ARIT.
WORD K;K < ETAT.
WORD XBITS0 < BITSEM.
WORD XXNTRY;TRYVID < NTRIES & FRTRY.
WORD K < HSTATS.
WORD XTESTO < TESTO.
WORD XXDCTF < 'DCT' NON CONNECTABLE...
WORD XSERUP < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< ZONE VARIABLE :
<
VARS7: EQU $
IF VARS7-DCTS7-DCTFIX,,XEIF%,
IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%: VAL ENDIF
WORD NILX < AUTOMATE.
DZS LDEM0 < RESERVE POUR LES DEMANDES DU CCI.
WORD NILK;NILK;NILX < POUR LE 'CCI' : (XBUFGR,MBUFGR,ABUFGR).
WORD SERESC < POUR 'RUNO' PUISSE APPELER 'SERESC'...
<
< PILE :
<
XWPILE: VAL LPILEH+XXSER1
PILS7: #@EQU $-DEPILE < #SISP CMS5 GENPIL1#
PAGE
<
<
< D C T H A N D L E R D E S E R V I C E 8 :
<
<
DCTS8: EQU $
PSTS8: WORD K;K;K;K;COM+DEPCS;DCTS8;NIL;PILS8;HANDLR;SMST;SO;SE
#@ASCI " S8 " < #SISP CMS5 ASCI#
WORD XIOID0 < IOID.
WORD NFILTR < FILTRE.
WORD FILTRS < S-FILTRE.
WORD XTALOC < ETALOC.
WORD XXLOC0 < SEMLOC.
DZS LSEM
WORD NIL < TETE.
WORD NIL < QUEUE.
WORD XXCHV0 < SCHVID.
DZS LSEM
WORD XXSIT0 < SIT.
DZS LSEM
WORD SPHEX0 < SPHEX.
DZS LSEM
WORD HDLSER < ES.
WORD ITSERV < ARIT.
WORD K;K < ETAT.
WORD XBITS0 < BITSEM.
WORD XXNTRY;TRYVID < NTRIES & FRTRY.
WORD K < HSTATS.
WORD XTESTO < TESTO.
WORD XXDCTF < 'DCT' NON CONNECTABLE...
WORD XSERUP < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< ZONE VARIABLE :
<
VARS8: EQU $
IF VARS8-DCTS8-DCTFIX,,XEIF%,
IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%: VAL ENDIF
WORD NILX < AUTOMATE.
DZS LDEM0 < RESERVE POUR LES DEMANDES DU CCI.
WORD NILK;NILK;NILX < POUR LE 'CCI' : (XBUFGR,MBUFGR,ABUFGR).
WORD SERESC < POUR 'RUNO' PUISSE APPELER 'SERESC'...
<
< PILE :
<
XWPILE: VAL LPILEH+XXSER1
PILS8: #@EQU $-DEPILE < #SISP CMS5 GENPIL1#
PAGE
<
<
< D C T H A N D L E R D E S E R V I C E 9 :
<
<
DCTS9: EQU $
PSTS9: WORD K;K;K;K;COM+DEPCS;DCTS9;NIL;PILS9;HANDLR;SMST;SO;SE
#@ASCI " S9 " < #SISP CMS5 ASCI#
WORD XIOID0 < IOID.
WORD NFILTR < FILTRE.
WORD FILTRS < S-FILTRE.
WORD XTALOC < ETALOC.
WORD XXLOC0 < SEMLOC.
DZS LSEM
WORD NIL < TETE.
WORD NIL < QUEUE.
WORD XXCHV0 < SCHVID.
DZS LSEM
WORD XXSIT0 < SIT.
DZS LSEM
WORD SPHEX0 < SPHEX.
DZS LSEM
WORD HDLSER < ES.
WORD ITSERV < ARIT.
WORD K;K < ETAT.
WORD XBITS0 < BITSEM.
WORD XXNTRY;TRYVID < NTRIES & FRTRY.
WORD K < HSTATS.
WORD XTESTO < TESTO.
WORD XXDCTF < 'DCT' NON CONNECTABLE...
WORD XSERUP < DCTFUP ("ALTITUDES" DES FONCTIONS).
<
< ZONE VARIABLE :
<
VARS9: EQU $
IF VARS9-DCTS9-DCTFIX,,XEIF%,
IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!!
XEIF%: VAL ENDIF
WORD NILX < AUTOMATE.
DZS LDEM0 < RESERVE POUR LES DEMANDES DU CCI.
WORD NILK;NILK;NILX < POUR LE 'CCI' : (XBUFGR,MBUFGR,ABUFGR).
WORD SERESC < POUR 'RUNO' PUISSE APPELER 'SERESC'...
<
< FIN DES 'DCT' DE SERVICE :
<
LNDCTS:: VAL $-DCTS1 < LONGUEUR DE TOUTES LES 'DCT' DE SERVICE
< EN MEMOIRE BASSE...
<
< PILE :
<
CALL #SISP CMS5 DOL2#
PILS9: EQU $-DEPILE
XWPILE: VAL LPILEH+XXSER1
CALL #SISP CMS5 GENPIL2#
PAGE
<
<
< V A L I D A T I O N D U N O M B R E
< D E H A N D L E R S D E S E R V I C E :
<
<
XWOR%9: VAL LNDCTS/LDCTSN < NOMBRE DE 'DCT' DE SERVICE GENEREE.
IF RESCLA-XWOR%9,XEIF%,XEIF%,
IF E R R E U R : PAS ASSEZ DE 'DCT DE SERVICE' !!!
XEIF%: VAL ENDIF
CALL #SISP CMS5 CHECK#
PAGE
<
<
< H A N D L E R S D E S E R V I C E :
<
<
< PHILOSOPHIE :
< LORSQU'UN ESCLAVE UTILISATEUR DU SYSTEME,
< FAIT UNE DEMANDE DE SERVICE AU SYSTEME
< (IL EST DONC SUR LE NIVEAU 'NSPACT'),
< ON FAIT PRENDRE EN CHARGE CETTE
< DEMANDE DE SERVICE PAR UN HANDLER DIT
< DE 'SERVICE'. LA CORRESPONDANCE
< ESCLAVE<-->HANDLER DE SERVICE, EST
< DYNAMIQUE, ET PAR CONSEQUENT, LE NIVEAU
< D'EXECUTION DU SERVICE N'EST PAS FIGE DANS
< LE TEMPS ; AINSI STATITIQUEMENT, AUCUN
< ESCLAVE N'EST FAVORISE PAR RAPPORT
< A UN AUTRE.
<
<
< NOTION D'AUTOMATE :
< L'AUTOMATE EST EN FAIT UN ENCHAINEMENT
< DE ROUTINES REALISANT UN CERTAIN SERVICE
< POUR L'UTILISATEUR (ESCLAVE).
< ON TROUVERA ENTRE AUTRE CHOSE DANS
< L'AUTOMATE LE SWAPPING IN/OUT, LE
< MOVE DES BUFFERS,...
<
<
< FORMAT D'UN AUTOMATE :
< MOTS 0 A L-1 : @ROUTINES DE SERVICE,
< MOT (L)=-L.
< SI LA LONGUEUR 'L' EST NULLE,
< IL S'AGIT D'UNE REACTIVATION
< SEULE...
<
<
< UTILISATION DE 'B' PAR UN AUTOMATE :
< LE REGISTRE 'B' EST UTILISE POUR LA
< TRANSMISSION DE PARAMETRES ET
< D'INDICATEURS AU TRAVERS DES
< ROUTINES COMPOSANT UN AUTOMATE.
< BIT0(B)=1 : SWAP (ET DONC ALL/REL MEM) A FAIRE,
< =0 : SWAP (ET DONC ALL/REL MEM) NON NECESSAIRE.
< BIT1(B)=1 : L'ESPACE MEMOIRE DE L'UTILISATEUR NE
< S'EST PAS DEPLACE D'UN SWAP A L'AUTRE.
< BITS8-13(B)=K,
< BIT14-15(B)=RANG DE L'ALLOCATEUR/RELEASEUR MEMOIRE.
<
<
BBSOSI:: VAL BITSIG < BIT(B) INDIQUANT SI LES SWAPPINGS
< ONT ETE FAITS...
BBMOVE:: VAL BBSOSI+I < 0=L'ESPACE MEMOIRE S'EST DEPLACE,
< 1=IL NE S'EST PAS DEPLACE...
BBTOP:: VAL BBMOVE+I < BIT INDIQUANT SI ON A FAIT UN 'RUNO' :
< 0 : NON,
< 1 : OUI, 'RUNO', DONC IL FAUT FAIRE
< UN SWAPPING IN INTEGRAL...
MKRGM:: VAL MOCD < MASQUE CONTENANT LE RANG DE
< L'ALLOCATEUR/RELEASEUR MEMOIRE.
<
<
< ADRESSE DE L'AUTOMATE=ADRESSE DU MOT CONTENANT 'L'.
<
<
< ARGUMENTS :
< (W)=DEMANDE DE DEMANDE DE SERVICE, AVEC :
< (SOIT (W)=ADRESSE DEMSER(DCT(ESCLAVE)))
< OPDEM=K : REACTIVATION DE L'ESCLAVE EN FIN
< DE SERVICE,
< #0 : PAS DE REACTIVATION (CF. END-JOB).
< AMDEM=ADRESSE AUTOMATE DE SERVICE.
< (SI LA LONGUEUR DE L'AUTOMATE EST
< NULLE, ON NE FAIT QUE LA REACTIVATION
< DE L'ESCLAVE).
<
<
< NOTA :
< (W)=ADRESSE DE 'DEMSER',
< DONNE DONC A UNE CONSTANTE
< DE TRANSLATION PRES, L'ADRESSE
< DE LA 'DCTESC' DE L'UTILISATEUR...
<
<
USE W,DEM0
USE L,DCT0
HDLSER: EQU $
CALL #SISP CMS5 PSRSLO#
LA ARGDEM+AMDEM < ACCES A L'ADRESSE DE L'AUTOMATE
< REALISANT LE SERVICE DEMANDE.
TBT BITX < VALIDATION DE L'AUTOMATE :
JNC E736X7 < OK...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< VOIR D'OU VIENT CET AUTOMATE !!!
<
E736X7: EQU $
SBT BITX < GENERATION D'UN RELAI INDIRECT
< INDEXE VERS L'AUTOMATE.
STA VAR+OTOMAT
<
< VALIDATION DE L'AUTOMATE :
<
LRM A
WORD OTOSP,X
CP VAR+OTOMAT < NE SERAIT-ON PAS EN PRESENCE DE L'AUTO-
< MATE DES SERVICES SWAPPABLES ???
JNE E736X8 < NON...
RDOE < OUI :
CPI SO < EST-ON BIEN ALORS DANS LA PAGE 0 ???
JE E736X9 < OUI, OUF...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< COMPRENDRE COMMENT ON EN ARRIVE ICI !!!
< LE PIRE C'EST QUE PAR 'OMOV1'/'OMOV2'
< ON ATTEINT DES BUFFERS QUI SONT DANS
< 'DCTESC' ET DONC DANS LA PAGE 0 !!!
<
CALL #SISP CMS5 PAGE0#
E736X9: EQU $
E736X8: EQU $
<
< POSITIONNEMENT SUR 'DCTESC' :
<
ADRI DCTESC-DEMSER,W < (W)=ADRESSE DE LA DCT(ESCLAVE)...
<
< PREPARATION DE L'ITERATION DU SERVICE
< DANS LE BUT EVENTUEL DE RALENTIR LE
< FONCTIONNEMENT DU SERVICE (PAR EXEM-
< PLE POUR FILMER EN IMAGE/IMAGE L'ECRAN
< DE TELEVISION NUMERIQUE) ; POUR CE
< FAIRE ON ITERE 'NITERS' FOIS CE
< QUE FAIT 'HDLSER' EN FAISANT ATTEN-
< TION AUX MODIFICATIONS DU REGISTRE
< X(ESCLAVE) QUI NE DOIT ETRE MODIFIE
< QU'A LA PREMIERE ITERATION (VOIR
< PAR EXEMPLE LE CAS OU IL S'AGIT D'UN
< APPEL A 'HDLDLN' : SI LA PREMIERE
< ITERATION EST BONNE, LES SUIVANTES
< SERONT ERRONNEES...) :
<
LA IDDESC-DCTESC,W
RBT IDESC4 < PREMIERE ITERATION DU SERVICE...
STA IDDESC-DCTESC,W
NITERS:: VAL W < A PRIORI, UNE SEULE ITERATION !!!
IF NITERS-K,,,XEIF%
IF NON MAIS, CA VA PAS ?!??!
XEIF%: VAL ENDIF
ITERSE: EQU $ < POUR PERMETTRE L'ACCES PAR 'DCTSY'...
LXI NITERS < (X)=NOMBRE D'ITERATIONS DE 'HDLSER'...
IF CCISNP-CCISP,,XEIF%,
IF ATTENTION : IL Y A DEUX AUTOMATES POSSIBLES
IF POUR LE 'CCI' !!!
XEIF%: VAL ENDIF
XWOR%1: VAL CCISNP-ZERO
XWOR%2: VAL CCISP-ZERO
XWOR%3: VAL XWOR%1?XWOR%2
LRM A,B,Y
WORD ZERO+XWOR%3,X < (A)=ADRESSE INDEXEE DE L'AUTOMATE 'CCI',
WORD OTOJE,X < (B)=ADRESSE DE L'AUTOMATE DE 'LOG-IN',
WORD OTOEJ,X < (Y)=ADRESSE DE L'AUTOMATE DE 'LOG-OUT'.
CP VAR+OTOMAT < L'UTILISATEUR VA-T'IL DANS LE 'CCI'
< INTERACTIF ???
< NOTA : ON A RAJOUTE CE TEST COMPLIQUE
< PARCE QUE NSPTYP(DEMESC) ETAIT AUSSI LE
< MOT 'VALESC', ET QUE CELA RISQUE DE
< FOUTRE LA MERDE AU NIVEAU DU LOG-OUT !!!
JE E736X5 < OUI, DONC SANS HESITER, ON NE PEUT ITERER
< LE SERVICE !!!
LA VAR+OTOMAT < (A)=ADRESSE INDEXEE DE L'AUTOMATE COURANT
CPR A,B < EST-CE UN 'LOG-IN' ???
JE E736X5 < OUI, PAS D'ITERATION !!!
CPR A,Y < EST-CE UN LOG-OUT ???
JE E736X5 < OUI, PAS D'ITERATION !!!
LBY DEMESC-DCTESC+XXNSP,W < (A)='NSP' DU SERVICE DEMANDE,
JANE E736X3 < OK, IL N'EST PAS IMMEDIAT, IL PEUT
< BENEFICIER DE L'ITERATION DE SERVICE...
LA DEMESC-DCTESC+T+OPDEM,W
< LORSQUE LE SERVICE EST IMMEDIAT, ON
< REGARDE LA FONCTION (A) DEMANDEE :
CPI FONDOR < EST-CE LE 'DODO' ???
JE E736X3 < OUI, LUI AUSSI PEUT BENEFICIER DE
< L'ITERATION DE SERVICE...
IF FONDOR-K,XEIF%,,XEIF%
IF ATTENTION : 'RUNSVC' REMET 'OPDEM' A 0 ET LE LAISSE
IF A 0 POUR CERTAINS SERVICE IMMEDIATS, EN PARTICULIER
IF L'APPEL DU 'CCI' INTERACTIF, IL Y A DONC RISQUE
IF DE CONFUSION AVEC 'FONDOR' !!!
XEIF%: VAL ENDIF
E736X5: EQU $
LXI W < DANS TOUS LES AUTRES CAS, ON NE PEUT
< ITERER LE SERVICE (ON RISQUE EN EFFET
< QUELQUES ENNUIS, AVEC LE 'CCI' EN
< PARTICULIER...).
E736X3: EQU $
CPZR X < VALIDONS LE NOMBRE D'ITERATIONS DE
< CHAQUE SERVICE, PUISQU'ON PEUT LE
< MODIFIER MANUELLEMENT...
JG E736X4 < OK, AU MOINS 1...
BSR ASYSER < E R R E U R S Y S T E M E ...
JMP E736X5 < ET ON FORCE UNE ITERATION...
E736X4: EQU $
E736X1: EQU $
LA DEMESC-DCTESC+T+OPDEM,W
PSR A,X < SAUVEGARDE DE L''OPDEM' DE 'DEMESC',
< AINSI QUE DU COMPTE DES ITERATIONS...
LA DEMESC-DCTESC+T+AMDEM,W
LB DEMESC-DCTESC+T+CODEM,W
LX DEMESC-DCTESC+T+ASDEM,W
PSR A,B,X < SAUVEGARDE DE 'AMDEM', 'CODEM' ET 'ASDEM'
< DE 'DEMESC'...
<
< ACCES A L'AUTOMATE :
<
LXI XOTOMA < INDICE D'ACCES A -LONGUEUR DE L'AUTOMATE.
LX &VAR+OTOMAT < (X)=-LONGUEUR AUTOMATE.
<
< ON A DONC ICI :
< (W)=ADRESSE DCT(ESCLAVE) DEMANDEUR DE SERVICE.
<
CPZR X
JE E736 < IL S'AGIT D'UNE REACTIVATION.
JL SYSRA4 < OK.
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< VERIFIER L'ADRESSE DE L'AUTOMATE,
< PUIS L'AUTOMATE LUI-MEME... ENSUITE
< FERA PEUT-ETRE COMME S'IL S'AGISSAIT
< D'UNE RE-ACTIVATION...
<
SYSRA4: EQU $
XWOR%1: VAL CORBT?BBSOSI=FMASK(K=FCINST
XWOR%1: VAL CORBT?BBMOVE=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL CORBT?BBTOP=FMASK(K?XWOR%1=FCINST
LBI XWOR%1 < PREPARATION DE B POUR L'AUTOMATE.
XXSER3:: VAL 1 < INDICATEUR INTERRUPTION 'HORLOGE'.
XXSER2:: VAL -1 < INDICATEUR : FONCTION>='FONFR'.
LYI XXSER3 < INITIALISATION DE Y A 1, (CETTE
< INITIALISATION DE Y EST DESTINEE
< A SWAPO DANS LE CAS D'UN APPEL
< POUR HORLOGE-QUANTUM EXPIRE) ;
< CETTE VALEUR DE 1 EST CELLE
< CORRESPONDANT A UN SERVICE
< DE TYPE 'ECRITURE'.
E701: EQU $
PSR X,W < SAVE INDEX AUTOMATE & @DCT ESCLAVE.
BSR &VAR+OTOMAT < APPEL D'UNE ROUTINE DE L'AUTOMATE.
PLR X,W < RESTAURE X,W.
<
< NOTA IMPORTANT :
< LES EVENTUELS 'WAIT WEIO' SONT
< A LA CHARGE DES ROUTINES DE
< SERVICE...
<
JIX E701 < ROUTINE SUIVANTE...
<
< FIN DE SERVICE :
<
E736: EQU $
<
< ITERATION EVENTUELLE :
<
LA IDDESC-DCTESC,W
SBT IDESC4 < CA Y EST, ON A FAIT LA PREMIERE
< ITERATION...
STA IDDESC-DCTESC,W
PLR A,B,X < REMISE DE 'DEMESC' DANS L'ETAT INITIAL
< A L'EXCEPTION DE 'BOX'...
STX DEMESC-DCTESC+T+ASDEM,W
STB DEMESC-DCTESC+T+CODEM,W
STA DEMESC-DCTESC+T+AMDEM,W
PLR A,X
STA DEMESC-DCTESC+T+OPDEM,W
CPZ FSERV-DCTESC,W < Y-A-T'IL UNE ROUTINE DE FIN DE SERVICE
< DE POSITIONNEE ???
JG E736X2 < OUI, ON ARRETE LA LES ITERATIONS...
JDX E736X1 < NON, ON ITERE SI NECESSAIRE...
E736X2: EQU $
LA IDDESC-DCTESC,W
RBT IDESC4 < PAR PUR SOUCI D'HYGIENE,...
STA IDDESC-DCTESC,W
LA IDESC-DCTESC,W < ACCES A L'IDESC DE L'UTILISATEUR,
RBT IDESCI < DONT ON RAZE A PRIORI LE BIT
< 'CCI INTERPRETATIF' ; EN EFFET,
< LORS D'UNE TELLE DEMANDE, SI
< SES ARGUMENTS SONT ERRONNES,
< CET INDICATEUR RESTE POSITIONNE,
< CE QUI CONSTITUE UNE ERREUR
< AU NIVEAU SYSTEME !!!!
STA IDESC-DCTESC,W
<
< AUTO-RELEASE DU HANDLER DE SERVICE :
< NOTA : IL N'EST PAS DANGEREUX QU'UN HANDLER SE
< RELEASE LUI-MEME, PUISQUE SON ACCES EST PROTEGE
< PAR UNE FILE D'ATTENTE. IL INDIQUE AINSI, QU'IL PEUT
< PRENDRE EN CHARGE UN NOUVEL ESCLAVE...
<
LX &NS < ACCES AU NIVEAU DU HANDLER
< DE SERVICE.
ADRI -NSPSER-NSNSP0,X < (X)=NUMERO DU HANDLER DE SERVICE
< PAR RAPPORT A 0.
LYI FONSB1 < FONCTION SET BIT A 1.
LAD ATOHDS < @RELAI DE LA TABLE D'OCCUPATION
< DES HANDLERS DE SERVICE.
RQST &ASXSER <<<<PHASE CRITIQUE AVEC L'ALLOCATION
<<<<DES HANDLERS DE SERVICE.
BSR ATMOBT < RELEASE.
LAD &ASXSER
BSR ARLSE
<
< TEST DE REACTIVATION :
<
ADRI DEMSER-DCTESC,W < (W)=@DEMANDE DE SERVICE.
LA ARGDEM+OPDEM < TEST POUR SAVOIR S'IL Y A LIEU
< DE REACTIVER L'ESCLAVE.
JANE E737 < PAS DE REACTIVATION...
<
< A P P E L E V E N T U E L D E L A
< R O U T I N E D E F I N D E S E R V I C E :
<
<
< NOTA IMPORTANT :
< LE HANDLER DE SERVICE BOUCLE SUR
< L'APPEL DE LA ROUTINE DE FIN DE
< SERVICE TANT QUE FSERV>0 ; AINSI
< DES ROUTINES DE FIN DE SERVICE
< PEUVENT S'ENCHAINER (CF. GOBPE QUI
< MET EN PLACE ABORT LORSQUE LE
< SWAPPING EST BLOQUE) ; LA FIN DE CE BOUCLAGE
< SE PRODUIT DES QUE FSERV<=K.
<
<
< A T T E N T I O N :
< LE REGISTRE 'Y' EST DESTRUCTIBLE !!!
<
<
BSR ASMMK < M A S Q U A G E...
< EN EFFET : ON SOUHAITE EVITER DES
< PHENOMENES ASYNCHRONES...
LA DEMESC-DEMSER+XXNSP,W
RBT XBABOR < ET LE BIT 'XBABOR' DE 'DEMESC' EST REMIS
< A 0 SYSTEMATIQUEMENT...
STA DEMESC-DEMSER+XXNSP,W
Z1501: EQU $ < ITERATION DE L'APPEL DE LA
< ROUTINE DE FIN DE SERVICE (OU
< DES ROUTINES !!!).
LA FSERV-DEMSER,W < TEST D'EXISTENCE DE CETTE
< ROUTINE DE FIN DE SERVICE...
JAE E795 < ELLE N'EXISTE PAS, OU BIEN ELLE N'EXISTE
< PLUS, CAR ON VIENT DE LA TRAITER...
JAG E795X2 < ELLE EXISTE, ET SON ADRESSE EST BONNE...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< VOIR QUELLE EST LA ROUTINE DE
< FIN DE SERVICE QUI SE TROUVE EN
< MEMOIRE HAUTE, ET LA REDESCENDRE !!!
<
JMP E795 < PUIS ON SORT (OU PAS ???)...
E795X2: EQU $
LA IDDESC-DEMSER,W < (A)=LISTE DES INDICATEURS SECONDAIRES,
TBT IDESCX < Y-A-T'IL UNE TRAPPE EN COURS DE TRAI-
< TEMENT (C'EST-A-DIRE N'EST-ON PAS ENCORE
< ARRIVE AU RETOUR 'CCI' ASSOCIE ???
JC E795X1 < OUI, ON IGNORE ALORS LA ROUTINE DE FIN
< DE SERVICE ; CE PHENOMENE PEUT SE PRO-
< DUIRE DE LA FACON SUIVANTE :
< 1 - UN ALT-MODE SOLITAIRE HORS-ECHANGE
< A ETE RECU ; CECI A PROVOQUE LA MISE
< EN PLACE DE 'GOBPE' DANS 'FSERV' QUI
< ATTEND POUR ETRE EXECUTE (IL ATTEND UNE
< IT D'HORLOGE POUR EXPIRATION DE QUANTUM,
< OU BIEN LA FIN DU PROCHAIN SERVICE QUE
< L'UTILISATEUR DEMANDERA).
< 2 - PENDANT CE TEMPS LE PROGRAMME UTILI-
< SATEUR CONTINUE A SE DEROULER, ET IL
< EMET UN 'ACTD' DE CHANGEMENT DU CARAC-
< TETE D'ABORT.
< 3 - OR LE ALT-MODE SOLITAIRE HORS-
< ECHANGE A MIS LA VISU CORRESPONDANTE
< DANS L'ETAT 'FIVALT' QUI NE SERA ANNULE
< QU'A L'ECHANGE SUIVANT...
< 4 - EN CONSEQUENCE DE QUOI, 'TH0' REFUSE
< CET 'ACTD', ET EN FAIT UNE TRAPPE, CE QUI
< PROVOQUE L'APPEL DE 'ADOWN' ; SI L'UTI-
< LISATEUR TOURNE EN MEMOIRE HAUTE, CET
< APPEL DE 'ADOWN' PREPARE LE REVEIL DU
< NIVEAU DE SERVICE ASSOCIE.
< 5 - 'TH0', VIA 'IMEMY' GENERE DANS L'ES-
< PACE MEMOIRE UTILISATEUR LE MINI PRO-
< GRAMME DE TRAPPE... PUIS REND LA MAIN ;
< 6 - C'EST ALORS LE NIVEAU DE SERVICE
< PRECEDEMMENT REVEILLE QUI LA PREND (A DES
< NIVEAUX PLUS PRIORITAIRES PRES...) ET
< QUE FAIT-IL ??? ET BIEN IL VA EXECUTER
< LE 'GOBPE' EN 'FSERV' ANNULANT AINSI
< TOUS LES EFFETS DE 'TH0' ET DE 'IMEMY'...
< 7 - ET BIEN, C'ETAIT LA MERDE MON VIEUX !
LA FSERV-DEMSER,W < ET BIEN C'EST PLUS SIMPLE, ON VA EXECU-
< TER 'FSERV', ET PAR PRUDENCE, ON RESTAURE
< (A)=ADRESSE DE LA ROUTINE DE 'FSERV'...
PSR W < SAVE @DEMSER.
BSR FSERV-DEMSER,W < APPEL DE LA ROUTINE DE FIN DE
< SERVICE AVEC :
< (W)=@DEMSER.
PLR W < RESTAURE (W)=@DEMSER.
JMP Z1501 < ITERATION TANT QUE FSERV>0 !!!
<
< CAS DES TRAPPES "EN COURS" :
< (VOIR LE LUXUEUX COMMENTAIRE
< CI-DESSUS...)
<
E795X1: EQU $
STZ FSERV-DEMSER,W < IL FAUT BIEN QUE QUELQU'UN LE FASSE...
<
< FIN DE SERVICE :
<
E795: EQU $
BSR ASMDK < D E M A S Q U A G E...
<
< DEMANDE DE REACTIVATION DE L'ESCLAVE :
<
ADRI DEMSCH-DEMSER,W < (W)=@DEMANDE DE SCHEDULING.
WAIT WEIO < CETTE ATTENTE, PERMET D'EVITER
< QU'UNE DEMSCH QUI EST ENCORE
< EN TETE DE LA FILE DU SCHEDULER
< NE SOIT REMISE DANS CETTE FILE
< AVANT D'EN AVOIR ETE ENLEVEE...
BSR ACHAND < ENVOI DE LA DEMANDE DE
< REACTIVATION.
<
< NOTA IMPORTANT :
< A PRIORI LA DEMANDE DE REACTIVATION EST
< NON PRIORITAIRE, MAIS UNE ROUTINE DE
< SERVICE DE L'AUTOMATE A PU EN DECIDER
< AUTREMENT. ON PEUT DONC AINSI JOUER SUR
< LES PRIORITES...(CF. DE MEME LE FILTRAGE...)
<
ADRI DEMSER-DEMSCH,W < RESTAURE (W)=@DEMANDE DE SERVICE.
<
< PEUT-ON FAVORISER L'ESCLAVE COURANT ???
<
LRM A
WORD ATSUSP,X < (A)=ADRESSE DE L'AUTOMATE DE SUSPENSION
< SUR QUANTUM EXPIRE PAR L'HORLOGE.
CP VAR+OTOMAT < L'UTILISATEUR COURANT A-T'IL ETAIT
< INTERROMPU PAR L'HORLOGE ???
JE E737X1 < OUI, CELA VEUT DIRE QU'IL FAIT CERTAI-
< NEMENT BEAUCOUP DE PROCESS, ON NE VA PAS
< LE FAVORISER, MAIS PLUTOT CEUX QUI FONT
< BEAUCOUP DE DEMANDES DE SERVICES, ET
< DONC D'ENTREES-SORTIES...
LXI NSNSP0+NSPACT
LYI FONTB
LAD AASTF
BSR ATMOBT < LE NIVEAU ESCLAVE EST-IL ACTIF ???
< ON NOTERA QUE L'ON NE MASQUE PAS LES
< INTERRUPTIONS POUR ALLER PLUS VITE...
JNC E737X1 < NON, RIEN A FAIRE...
BSR ASMMK < OUI, MASQUAGE DES INTERRUPTIONS...
BSR ATMOBT < ON REGARDE DE NOUVEAU S'IL Y A UN ESCLAVE
< ACTIF, CAR EN EFFET DEPUIS L'HORLOGE A
< PU PASSER !!!
JNC E737X2 < ET OUI, L'HORLOGE EST PASSEE...
<
< CAS OU UN UTILISATEUR EST ACTIF :
<
PSR L
LXI NSPACT
BSR ACADCT < (L)=ADRESSE DE LA 'DCTESC' DE L'ESCLAVE
< PRESENTEMENT ACTIF...
LRM A
<*******************************************************************************
WORD KSIMS>DADR*LK < (A)=PLUS PETIT 'SLO' EN MEMOIRE HAUTE.
XWOR%3: VAL '0000000@@@@
<*******************************************************************************
SLOMIN: EQU ZERO+XWOR%3 < PLUS PETIT 'SLO' EN MEMOIRE HAUTE (MIS
< EN TRANSLATABLE, CAR IL EST REFERENCE
< EN AVANT).
SLOM1N: EQU SLOMIN < A CAUSE DE
SLOM2N: EQU SLOMIN < L'ASSEMBLEUR...
SLOM3N: EQU SLOMIN < (...)
CP PSTESC-DCTESC+RSLO,L
< L'UTILISATEUR ACTIF EST-IL EN MEMOIRE
< HAUTE ???
JLE E737X4 < OUI, IL EST EN HAUT, ON PEUT L'INTER-
< ROMPRE...
LA IDDESC-DCTESC,L < NON, ALORS
TBT IDESC6 < QUELLE EST SA PRIORITE ???
JNC E737X3 < NORMALE (IDESC6=0) : DONC, ON NE PEUT
< L'INTERROMPRE...
E737X4: EQU $
<
< CAS OU UN UTILISATEUR EST ACTIF EN HAUT :
< (OU BIEN IL A UNE PRIORITE INFERIEURE : IDESC6=1)
<
LXI NSPHOR
BSR ACADCT < (L)=ADRESSE DE LA 'DCTHOR'...
BSR ABETA2 < (A)=BETA(SIT(HORLOGE)) :
JAGE E737X3 < L'HORLOGE N'EST PAS SUR SON 'SIT', ELLE
< ATTEND SUREMENT UN EVENEMENT...
STZ RA+XXPSTD,L
DC RA+XXPSTD,L < A(HORLOGE)=-1,
LAD SIT
BSR ARLSE < ON PROVOQUE AINSI UNE FAUSSE INTERRUP-
< TION D'HORLOGE ET AINSI L'HORLOGE VA
< PRENDRE LA MAIN ET INTERROMPRE CET
< UTILISATEUR EN MEMOIRE HAUTE, ET AINSI
< AMELIORER LE TEMPS DE REPONSE DE
< L'UTILISATEUR POUR LEQUEL ON EST EN
< FIN DE SERVICE...
E737X3: EQU $
PLR L
E737X2: EQU $
BSR ASMDK < DEMASQUAGE DES INTERRUPTIONS...
E737X1: EQU $
<
< SORTIE DE 'HDLSER' :
<
E737: EQU $
CALL #SISP CMS5 PLRSLO#
RSR
<
<
< ' I N T E R R U P T I O N ' D E S E R V I C E :
<
<
ITSERV: EQU $
<
< ON A ICI :
< (L)=ADRESSE DCT(SERVICE).
<
BSR ARVHDL < REVEIL DU HANDLER DE SERVICE.
RSR
PAGE
<
<
< M O D I F I C A T I O N D U R E G I S T R E
< X ( E S C L A V E ) :
<
<
< FONCTION :
< X(ESCLAVE) CONTIENT TOUJOURS LES
< CONDITIONS DE RETOUR DE TOUT SERVICE.
< MALHEUREUSEMENT, LORSQU'ON ITERE PAR
< 'NITERS' LES HANDLERS 'HDLSER', IL SE
< PEUT QUE LES CONDITIONS DE RETOUR
< DES ITERATIONS SECONDES, TROISIEMES,..
< DIFFERENT DE LA PREMIERE (VOIR UN
< 'DLN' DU 'SGN').
< DANS CES CONDITIONS IL NE FAUT POSI-
< TIONNER X(ESCLAVE) QU'A LA PREMIERE
< ITERATION ; A CETTE FIN 'HDLSVC'
< POSITIONNE L'INDICATEUR 'IDESC4'
< DANS 'IDDESC' A 0 ; PUIS TOUS LES
< 'STORE' SUR X(ESCLAVE) SONT PIEGES,
< ET INTERPRETES PAR 'STXES', CAR EN
< EFFET ILS DIFFERENT TOUS PAR LA BASE
< ET LE DEPLACEMENT UTILISES, D'OU
< L'USINE A GAZ QUI SUIT...
<
<
< ARGUMENT :
< L'INSTRUCTION QUI SUIT LE 'BSR' D'APPEL...
<
<
CALL #SISP CMS5 CHECK#
STXES: EQU $
XKREG: VAL K < POUR COMPTER LE NOMBRE DE REGISTRES
< EMPILES A L'ENTREE...
#@PSR A,B,Y < #SISP CMS5 KREG#
#@PSR L,W < #SISP CMS5 KREG#
XKREG: VAL -XKREG < CE QUI DONNE LE NOMBRE DE REGISTRES
< EMPILES.
<
< IDENTIFICATION D'UNE INSTRUCTION
< VARIABLE DE TEST DE X(ESCLAVE) :
<
<*******************************************************************************
STXES1: LAD O,C < SEUL LE CODE DU 'LAD' NOUS INTERESSE :
XWOR%1: VAL '0000000@@@@ < CODE DU 'LAD' SUR LA BASE 'C'...
<*******************************************************************************
XWOR%2: VAL $-STXES1 < LONGUEUR D'UNE INSTRUCTION ; ON N'ARRETE
< PAS LE PROGRES...
IF XWOR%2-D,,XEIF%,
IF C'EST BIEN BEAU DE PARAMETRER, SAUF
IF QUAND ON SE FOUT DEDANS !!!
XEIF%: VAL ENDIF
$EQU STXES1 < ANNULATION DU CODE DU 'LAD'.
<
< RECUPERATION DE L'INSTRUCTION ARGUMENT :
<
LR K,W < 'W' BASE LA PILE :
LA -XKREG-XWOR%2+DEPILE,W
< (A)=REGISTRE 'P' DE RETOUR D'UN 'BSR'
< EXECUTE "NORMALEMENT"...
DO XWOR%2
IC -XKREG-XWOR%2+DEPILE,W
< MAIS VOILA, IL N'EST PAS NORMAL, PUISQUE
< L'INSTRUCTION QUI SUIT LE 'BSR' D'APPEL
< DE 'STXES' EST EXECUTE ICI, IL FAUT DONC
< LA SAUTER...
LR A,W < 'W' BASE L'INSTRUCTION ARGUMENT,
LY O,W < (Y)=INSTRUCTION ARGUMENT, QUI DOIT ETRE
< UN 'STORE', ET QUE L'ON NE VALIDE PAS
<
< X(ESCLAVE) A-T'IL ETE DEJA POSITIONNE ???
< (NOTONS QU'ON NE SAIT PAS TRES BIEN
< QUELLE EST LA BASE UTILE, NI CE QU'ELLE
< POINTE...)
<
XWOR%3: VAL 'E0FF < XWOR%3 EST UN MASQUE PERMETTANT DE RECU-
< PERER LA BASE ET LE DEPLACEMENT INDEPEN-
< DEMMENT DU CODE-OPERATION...
XWOR%4: VAL XWOR%3)MMOT(XWOR%1
LRM A,B,L,W
WORD XWOR%4 < (A)=CODE-OPERATION D'UN 'LAD' TOUT NU...
WORD XWOR%3 < (B)=MASQUE DE RECUPERATION DE LA BASE ET
< DU DEPLACEMENT INDEPENDEMMENT DU CODE
< OPERATION...
WORD INSTV1 < (L)=ADRESSE DE L'INSTRUCTION DE CALCUL
< DE L'ADRESSE DE X(ESCLAVE)...
WORD INSTV2 < (W)=ADRESSE DE L'INSTRUCTION VARIABLE DE
< MODIFICATION DE X(ESCLAVE).
ANDR Y,B < (B)=BASE ET DEPLACEMENT DE L'INSTRUCTION
< ARGUMENT...
ORR A,B < (B)=INSTRUCTION DE CALCUL DE L'ADRESSE DE
< X(ESCLAVE) UTILISANT LA MEME BASE ET
< MEME DEPLACEMENT QUE L'INSTRUCTION AR
BSR ASMMK < ON EST OBLIGE MALHEUREUSEMENT DE MAS-
< QUER TOUTES LES INTERRUPTIONS, CAR ON
< MODIFIE LE CODE DU SYSTEME, CE QUI
< FAIT QUE 'STXES' N'EST PAS REENTRANT,
< QUEL SCANDALE !!!
STB O,L < MISE EN PLACE DU 'LAD'...
STY O,W < MISE EN PLACE DE L'INSTRUCTION VARIABLE
< DE MODIFICATION DE X(ESCLAVE).
PLR L,W < RESTAURATION DES BASES D'ACCES,
INSTV1: NOP < INSTRUCTION VARIABLE D'ACCES A L'ADRESSE
< DU REGISTRE X(ESCLAVE) :
XWOR%5: VAL IDDESC-DCTESC
XWOR%6: VAL PSTESC-DCTESC+RX
< (A)=ADRESSE DU 'X' DE CET UTILISATEUR
< PUISQUE LE 'LAD' NOUS A DONNE L'ADRES
< DE SON X(ESCLAVE),
PSR W < NOUVELLE SAUVEGARDE DE LA BASE 'W'...
LR A,W < (W)=ADRESSE DU REGISTRE X(ESCLAVE),
LA XWOR%5-XWOR%6,W < ET ACCES A 'IDDESC' :
TBT IDESC4 < EST-CE LA PREMIERE ITERATION DU SERVICE ?
PLR W
PLR A,B,Y < PUIS ON RESTAURE TOUS LES REGISTRES
< CAR ON NE SAIT LEQUEL VA SERVIR A LA
< MODIFICATION DE X(ESCLAVE)...
JC STXES2 < IDESC4(IDDESC)=1 : DONC CE N'EST PLUS
< LA PREMIERE ITERATION DU SERVICE...
<
< MODIFICATION DE X(ESCLAVE) LA PREMIERE FOIS :
<
INSTV2: NOP < IDESC4(IDDESC)=0 : C'EST LA PREMIERE
< ITERATION : ON POSITIONNE X(ESCLAVE)...
STXES2: EQU $
BSR ASMDK < ET ENFIN, ON DEMASQUE...
RSR < OUF...
CALL #SISP CMS5 CHECK#
PAGE
<
<
< R U N E N M E M O I R E H A U T E D ' U N
< P R O G R A M M E U T I L I S A T E U R :
<
<
< PHILOSOPHIE :
< ON CONSIDERE QU'UN UTILISATEUR INTERROMPU
< PAR L'HORLOGE FAIT PLUS DE "PROCESS" QUE
< D'ENTREES-SORTIES. L'AUTOMATE UTILISE PAR
< L'HORLOGE, LORSQUE LE PROGRAMME UTILISATEUR
< A RENDU SON ESPACE MEMOIRE ('SWAPO'+'RLMESC'),
< ON REGARDE S'IL A ETE SWAPPE EN MEMOIRE OU
< SUR DISQUE ; S'IL S'AGIT DE LA MEMOIRE ON
< LE SCHEDULE IMMEDIATEMENT.
< AINSI LE PROGRAMME TOURNE EN MEMOIRE HAUTE ;
< A PARTIR DE LA 3 EVENEMENTS PEUVENT SE PRO-
< DUIRE :
< 1 - UNE NOUVELLE INTERRUPTION D'HORLOGE :
< IL SUFFIT D'ITERER LE SCHEDULING "HAUT"...
< 2 - UN 'SVC' OU UN 'QUIT' A ETE RENCONTRE
< DANS LE PROGRAMME : ON FAIT RECULER LE PROGRAMME
< D'UN PAS, PUIS EVIDEMMENT, IL FAUT LE FAIRE
< REDESCENDRE, ET L'AUTOMATE REPREND LA MAIN.
< AINSI LE 'SVC' OU LE 'QUIT' SERA REEXCUTE
< MAIS CETTE FOIS EN MEMOIRE BASSE, CE QUI
< SIMPLIFIE BIEN LES CHOSES...
< 3 - UNE TRAPPE : DE MEME QUE CI-DESSUS SI CE
< N'EST QU'ON LAISSE SUBSISTER LA CONDITION
< DE TRAPPE AFIN QU'ELLE SE REPRODUISE UNE FOIS
< LE PROGRAMME RETOURNE EN MEMOIRE BASSE.
<
<
< FONCTION :
< 'RUNO' (POUR "RUN" EN MEMOIRE "HAUTE"),
< SI L'ESCLAVE A ETE SWAPPE OUT EN MEMOIRE
< HAUTE, POSITIONNE SES REGISTRES 'SLO'
< ET 'SLE' SUR CETTE MEMOIRE HAUTE ; PUIS
< IL LE SCHEDULE, ET LE 'HDLSER' ASSOCIE
< SE MET ATTENTE SUR SON 'SIT' ; LORSQU'UN
< DES 3 EVENEMENTS MENTIONNES CI-DESSUS
< APPARAIT, 'HDLSER' REPREND LA MAIN :
< DANS LE CAS DE L'HORLOGE, IL ITERE LE
< SCHEDULING "HAUT", DANS LES AUTRES CAS
< IL REPREND L'AUTOMATE EN FAISANT AINSI
< DESCENDRE L'ESCLAVE EN BAS...
<
<
< ARGUMENT :
< (W)=ADRESSE DE LA DCT-ESCLAVE.
< BIT0(B)=1 : UN RELEASE MEMOIRE A ETE FAIT.
<
<
< DETRUIT :
< LES REGISTRES 'A' ET 'X'.
<
<
RUNO: EQU $
TBT NBITMO+BBSOSI < UN RELESAE MEMOIRE A-T'IL ETE FAIT ???
JNC RUNO1 < NON, DONC IL N'Y A RIEN A FAIRE...
LBY DEMSWP-DCTESC+XXNSP,W
< OUI, MAIS LE SWAPPING OUT ASSOCIE
< A-T'IL EFFECTUE SUR 'PR1' ???
CPI NSPPR1 < ???
JNE RUNO1 < NON, SUR 'DKF', DONC RIEN A FAIRE...
<
< CAS OU LE SWAPPING OUT A ETE
< EFFECTUE SUR 'PR1', LE PROGRAMME
< UTILISATEUR EST DONC EN MEMOIRE
< HAUTE :
<
LR B,X < SAUVEGARDE DE 'B' DANS 'X',
CALL #SISP CMS5 PSRSLO#
< SAUVEGARDE DE (SLO,SLE) D'APPEL...
LR X,B < ET RESTAURE 'B'...
PSR B,Y,W
<
< INITIALISATION DES REGISTRES 'SLO' ET 'SLE' :
<
LA PSTESC-DCTESC+RSLE,W
SB PSTESC-DCTESC+RSLO,W
LR A,Y < (Y)=LONGUEUR DE L'ESPACE MEMOIRE DE
< L'UTILISATEUR EN DADR-MOTS.
LA DEMSWP-DCTESC+T+ASDEM,W
< (A)=ADRESSE DISQUE DE LA ZONE DE SWAPPING
SB ASYS < QUE L'ON VA CONVERTIR EN UNE ADRESSE
< MEMOIRE EN DADR-MOTS :
XWOR%2: VAL XXXMOY
XWOR%1: VAL TZSWAP/XWOR%2
IF XWOR%1*XWOR%2-TZSWAP,,XEIF%,
IF ATTENTION : 'TZSWAP' N'EST PAS MULTIPLE DE 2 !!!
XEIF%: VAL ENDIF
DO XWOR%2*M
ADRI -XWOR%1,A
LR A,B < ET SAUVEGARDE DANS 'B'...
PSR X,L
LXI NSPPR1
BSR ACADCT < (A)=(L)=ADRESSE DE 'DCTPR1', CAR EN EFFET
< ELLE CONTIENT 2 CONSTANTES VACHEMENT
< UTILES...
LR B,A < (A)=PREMIERE ADRESSE ACCESSIBLE (EXPRI-
< PRIMEE EN SECTEURS PAR RAPPORT AU '0
< DU PREMIER UTILISATEUR...
MP VAR+TAPROG < PAR CE CALCUL ON PASSE D'UNE ZONE DE
DV VAR+TASWAP < SWAPPING A ZONE SCRATCH ('DKS') A UNE
< ZONE DE SWAPPING SANS ('PR1')...
CPZR B < LE RESTE DOIT ETRE NUL...
JE RUNO6 < OUI, OK...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< COMPRENDRE COMMENT LE RESTE DE
< CETTE DIVISION PEUT ETRE NON NUL !!!
<
RUNO6: EQU $
PLR X,L
SLLS YY7>DADR=K < (A)=ADRESSE EN DADR-MOTS RELATIVE A
< L'ORIGINE DE LA MEMOIRE DE SWAPPING
< DE LA ZONE UTILISATEUR.
XWOR%1: VAL KSIMS>DADR*LK < ADRESSE EN DADR-MOTS DE LA ZONE GENERALE
< DE SWAPPING,
XWOR%2: VAL SLOESC>DADR < TRANSLATION DANS CHAQUE ZONE DE
< SWAPPING DES PROGRAMMES UTILISATEURS.
LRM B
WORD XWOR%1+XWOR%2 < (B)=ADRESSE EN DADR-MOTS DE LA ZONE
< GENERALE DE SWAPPING TRANSLATEE +'SLO
ADR B,A < (A)='SLO' EN MEMOIRE HAUTE,
ADR A,Y < (Y)='SLE' EN MEMOIRE HAUTE.
STA PSTESC-DCTESC+RSLO,W
STY PSTESC-DCTESC+RSLE,W
LR Y,B < (A)=(SLO) ET (B)=(SLE),
WOE < ON DONNE A CE NIVEAU DE SERVICE LES
< REGISTRES (SLO,SLE) EN MEMOIRE HAUTE
< DE L'UTILISATEUR, AFIN QUE LES DEMANDES
< QU'IL EMETTRA TRANSMETTENT CORRECTEMENT
< LE FAMEUX NUMERO DE PAGE DE 32K...
<
< SCHEDULING "HAUT" :
<
RUNO5: EQU $ < (ASTUCE ?!??!) POINT D'ENTREE RESERVE
< AUX ITERATIONS DE SCHEDULING EN HAUT,
< SUITE A UN 'SERESC' LOCAL A 'RUNO'...
ADRI DEMSCH-DCTESC,W < (W)=ADRESSE DE LA DEMANDE DE SCHEDULING..
RUNO2: EQU $
WAIT WEIO < AU CAS OU LA DEMANDE DE SCHEDULING
< NE SERAIT PAS ENCORE DECHAINEE...
LA IDDESC-DEMSCH,W
RBT IDESC3 < A PRIORI, ON EST PROPRE...
STA IDDESC-DEMSCH,W
BSR ACHAND < ET ON SCHEDULE L'UTILISATEUR EN
< MEMOIRE HAUTE.
RQST SIT < ET ON ATTEND QU'IL RENDE LA MAIN POUR
< UNE DES RAISONS EVOQUEES PRECEDEMMENT :
CPZ FSERV-DEMSCH,W < Y-A-T'IL PAR EXEMPLE UNE ROUTINE DE
< FIN DE SERVICE POSITIONNEE ???
JNE RUNO3 < OUI (PAR UN DOUBLE ALT-MODE OU BIEN
< LA COMMANDE !X, OU BIEN ENCORE LE
< SIMPLE ALT-MODE,...). DANS CES CONDI-
< TIONS ON N'ITERE PAS BIEN SUR !!!
LA IDDESC-DEMSCH,W
TBT IDESC7 < ALORS EST-CE UNE DEMANDE DE 'SERESC'
< EN MEMOIRE HAUTE ???
JNC RUNO4 < (RUNO4 GTL, ASCTUCE ?!??!) NON...
<
< CAS D'UN SERVICE POUVANT SE DEROULER
< EN MEMOIRE HAUTE DE L'UTILISATEUR :
<
RBT IDESC7
STA IDDESC-DEMSCH,W < ON EST PROPRE (COMME LA RUNO4 GTL...).
PLR B,Y,W < RESTAURATION DES REGISTRES,
PSR W < EN EFFET, 'SERESC' FAIT QUELQUES DEGATS!
BSR VAR+ASERES < ET ON FAIT COMME SI LE 'SERESC' ETAIT
< DANS L'AUTOMATE 'OTSUSP' DE L'HORLOGE...
PLR W < RESTAURATION, ENTRE AUTRES CHOSES DE :
< (W)=ADRESSE DE 'DCTESC'...
PSR B,Y,W < ET EN FIN DE SERVICE EN HAUT,
ADRI DEMSCH-DCTESC,W < (W)=ADRESSE DE LA DEMANDE DE SCHEDULING,
CPZ FSERV-DEMSCH,W < Y-A-T'IL EU UNE ROUTINE DE FIN DE SER-
< VICE POSITIONNEE PAR LE SERVICE PRECE-
< DENT ???
< A NOTER, QUE CE TEST EST PREFERABLE A
< CELUI QUI SE TROUVE DERRIERE LE
< 'RQST SIT' PRECEDENT, CAR EN EFFET, UN
< SCHEDULING SEPARE ALORS LA DEMANDE DE
< FIN DE SERVICE DE SON TEST, ET CELA
< RISQUE DE MERDER SOUVENT : PAR EXEMPLE :
< 1 - LA VISU DE DIALOGUE EST SUR UNE DE-
< MANDE D'ENTREE,
< 2 - UN ALT-MODE SOLITAIRE APPARAIT,
< CE QUI POSITIONNE 'AGOBPE',
< 3 - MAIS ON FAIT MALGRE CELA UN COUP
< DE SCHEDULING, CE QUI FAIT QUE LE PRO-
< GRAMME UTILISATEUR REVIENT D'UNE LECTURE
< VISU AVEC 'ALT-MODE' DANS SON BUFFER,
< ET UN CODE D'ERREUR DANS 'X', MAIS CE
< N'EST QU'AU COUP SUIVANT QUE LE 'GOBPE'
< AURA LIEU ; OR 'PRESC' A PU CHANGER
< ENTRE TEMPS PUISQUE LE PROGRAMME A REPRIS
< LA MAIN QUELQUES INSTANTS...
JNE RUNO3 < OUI, DONC ON N'ITERE PAS !!!
JMP RUNO2 < ON REFAIT UN SCHEDULING HAUT...
<
< AUTRES CAS :
<
RUNO4: EQU $ < (EFFECTIVEMENT UNE 'RUNO4' COUTE TRES
< CHER, C'EST POURQUOI "MON GARAGISTE
< EST RICHE"...)
TBT IDESC3 < EST-CE UNE NOUVELLE INTERRUPTION
< D'HORLOGE ???
JC RUNO2 < OUI, ON ITERE DONC LE SCHEDULING...
<
< AUTRES CAS : ON VA FAIRE REDESCENDRE
< L'UTILISATEUR EN MEMOIRE BASSE EN
< REPRENANT L'AUTOMATE :
<
RUNO3: EQU $
LA IDDESC-DEMSCH,W
RBT IDESC3 < SOYONS
RBT IDESC7 < PROPRES...
STA IDDESC-DEMSCH,W
PLR B,Y,W
LR B,X < SAUVEGARDE DE 'B' DANS 'X',
< ET RESTAURATION DE (SLO,SLE) D'APPEL :
CALL #SISP CMS5 PLRSLO#
LR X,B < ET ENFIN RESTAURATION DE 'B'...
SBT NBITMO+BBTOP < AINSI, ON INDIQUE QU'ON A FAIT 'RUNO',
< AINSI, DONC :
< ON SWAPPERA INTEGRALEMENT L'ESPACE
< MEMOIRE, CE QUI EST NORMAL PUISQUE
< LE RUN EN MEMOIRE HAUTE (DURANT LE
< SWAPPING OUT) MODIFIE CE MEME ESPACE !!!
<
< SORTIE :
<
RUNO1: EQU $
RSR
PAGE
<
<
< D E T E C T I O N D E L ' A L T I T U D E
< D ' U N E S C L A V E :
<
<
< FONCTION :
< LORSQU'UN PROGRAMME ESCLAVE EST EN
< MEMOIRE HAUTE, IL EST POUR DES RAISONS
< EVIDENTES DIFFICILE A ATTEINDRE PAR
< LE SYSTEME ; OR IL FAUT BIEN Y ACCEDER
< DE TEMPS EN TEMPS...
< CE SOUS-PROGRAMME EST REFERENCE EN
< UN CERTAIN NOMBRE DE POINTS NEVRALGI-
< QUES DU SYSTEME :
< 1 - LORS D'UNE TRAPPE ('RECMST' EN PARTICULIER),
< 2 - A LA RECEPTION D'UN 'SVC' OU D'UN 'QUIT',
< 3 - LORS D'UNE INTERRUPTION HORLOGE.
< CE SOUS-PROGRAMME DETERMINE D'ABORD
< L'IDENTITE DE L'APPELANT A PARTIR
< DE LAQUELLE IL DEDUIT CELLE DE L'ESCLAVE
< EN CAUSE. IL PEUT ALORS CALCULER SON
< "ALTITUDE" (MEMOIRE HAUTE OU BASSE)...
< 1 - S'IL EST EN BAS, RIEN A FAIRE...
< 2 - S'IL EST EN HAUT, ET SAUF S'IL S'AGIT
< DE L'HORLOGE, IL FAUT LE FAIRE REDESCENDRE
< (EN REPASSANT LA MAIN A L'AUTOMATE),
< ET LUI FAIRE REFAIRE CE QU'IL AVAIT
< FAIT ('SVC', 'QUIT' OU TRAPPE).
<
<
< ARGUMENT :
< (L)=ADRESSE DCT-ESC DANS LE CAS DE L'HORLOGE,
< DU 'SVC' ET DU 'QUIT'.
<
<
< RESULTAT :
< LE SOUS-PROGRAMME POSITIONNE LES
< INDICATEURS AFIN QU'ON PUISSE FAIRE
< AU RETOUR :
< JE <ESCLAVE EN MEMOIRE HAUTE>,
<OU : JNE <ESCLAVE DEJA EN MEMOIRE BASSE>.
<
<
< A T T E N T I O N :
< 'DOWN' SUPPOSE BIEN ENTENDU QUE
< LA 'PSTESC' EST INTEGRE ; C'EST POURQUOI,
< 'TH0' FAIT 'ASIPST' QUI RECONSTITUE LA
< 'PSTESC' A PARTIR DE SON CONTEXTE
< PARTIEL ET DE SA PILE... EN FAIT IL
< N'Y A QUE 'SLO' ET 'SLE' DONT ON EST
< SUR !!!
<
<
DOWN: EQU $
PSR A,B,X,Y
PSR L
<
< IDDENTIFICATION DU DEMANDEUR :
<
BSR ASMWHO < RENVOIE :
< (A)=TYPE ('HARDWARE' OU 'SOFTWARE'),
< (B)=NUMERO ('NSP' PAR EXEMPLE).
PSR A,B < QUE L'ON MEMORISE...
CPI TYPTH < EST-CE UNE TACHE 'HARDWARE' (EN
< FAIT LA TACHE ALARME) ???
JE DOWN1 < OUI, IL S'AGIT D'UNE TRAPPE, DONC
< 'NSPACT' EST BON...
<
< CAS DES TACHES 'SOFTWARES' :
<
XR A,B
CPI NSPHOR < EST-CE L'HORLOGE ???
JE DOWN20 < OUI, LA BASE 'L' EST DEJA BONNE...
CPI NSPSVC < EST-CE LE RECEPTEUR DES 'SVC' ET 'QUIT' ?
JE DOWN20 < OUI, LA AUSSI 'L' EST BONNE...
DOWN4: EQU $
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< VOIR QUEL EST CE CAS NON PREVU !!!
< 1 - 'NSP' NON PREVU,
< 2 - OU 'DCTESC' D'ADRESSE ANORMALE.
<
PLR A,B
JMP DOWN8 < ET ON SORT... (OU ON FAIT AUTRE CHOSE)
<
< CAS DE L'HORLOGE, DU 'SVC' ET DU 'QUIT' :
<
DOWN20: EQU $
LR L,A < (A)=ADRESSE DE LA 'DCT' DE L'ESCLAVE...
JMP DOWN7
<
< AUTRES CAS (TRAPPE,
< ET C'EST TOUT J'ESPERE...) :
<
DOWN1: EQU $
LXI NSPACT < (X)='NSP' DU NIVEAU ESCLAVE, ET
BSR ACADCT < (A)=(L)=ADRESSE DE LA <DCTESC>.
<
< ACCES A L'ESCLAVE EN CAUSE :
<
DOWN7: EQU $
JALE DOWN4 < E R R E U R S Y S T E M E...
LR A,L < (L)=ADRESSE DE LA <DCTESC>.
LRM A
WORD SLOMIN < (A)=PLUS PETIT 'SLO' POSSIBLE EN MEMOIRE
< HAUTE,
CP PSTESC-DCTESC+RSLO,L
< EST-ON EN HAUT ???
PLR A,B
JG DOWN8 < RIEN A FAIRE, CAR LE PROGRAMME EST EN
< BAS : (SLO)<KSIMS...
<
< CAS OU L'ESCLAVE EST EN MEMOIRE HAUTE :
<
CPI TYPTH < EST-CE UNE ALARME ???
LR B,A < (A)=NUMERO DU DEMANDEUR,
LB IDDESC-DCTESC,L
RBT NBITMO+IDESC3 < REMISE A 0 A PRIORI DE 'IDESC3', ON
< ESPERE QUE CE N'EST PAS L'HORLOGE...
JE DOWN30 < OUI C'EST UNE ALARME (OU TRAPPE)...
CPI NSPSVC < NON, EST-CE UN 'SVC' (OU 'QUIT') ???
JE DOWN10 < OUI C'EST UN 'SVC'...
CPI NSPHOR < NON, EST-CE L'HORLOGE ???
JNE DOWN9 < NON, IL S'AGIT DE L'UN QUELCONQUE DES
< AUTRES CAS...
<
< CAS DE L'HORLOGE :
<
SBT NBITMO+IDESC3 < ON MEMORISE QU'IL S'AGIT DE L'HORLOGE
< AFIN D'ITERER LE SCHEDULING...
JMP DOWN9 < VERS LE REVEIL DU NIVEAU DE SERVICE...
<
< CAS DES ALARMES :
< (DANS LE CAS DE 'RECMST',
< ON VA REVENIR EN ARRIERE
< AFIN DE LE REFAIRE EN
< MEMOIRE BASSE)
<
DOWN30: EQU $
CPI TH0 < EST-CE BIEN 'TH0' ???
JE DOWN31 < OUI...
DOWN60: EQU $
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< DEUX CAS DE PRESENTENT :
< 1 - CE N'EST PAS 'TH0',
< 2 - C'EST 'TH0', MAIS CE N'EST PAS 'NSPACT'
< QUI EST LA TACHE ACTIVE (VOIR 'NS' ALORS) !!!
<
JMP DOWN8 < ET ON SORT...
DOWN31: EQU $
LA &ANS < (A)=NIVEAU DE LA TACHE 'SOFTWARE' ACTIVE
CPI NSPACT+NSNSP0 < EST-CE LE NIVEAU ESCLAVE ???
JNE DOWN60 < NON, E R R E U R S Y S T E M E...
LA IDESC-DCTESC,L
ANDI MKIDES < (A)=<IDESC> DE L'UTILISATEUR,
IF MKIDES=K-K,,XEIF%,
IF ATTENTION : LA RECUPERATION DE <IDESC> EST IDIOTE !!!
XEIF%: VAL ENDIF
ADRI NSPESC+NSNSP0,A < QUE L'ON CONVERTIT EN UN NIVEAU 'SOFT'
< AFIN D'ATTEINDRE 'TBU' COMME UNE LISTE
< DE TACHES "NORMALES"...
STA &ANS < EN EFFET, ON VA RAZER DCTSY(NSPACT),
< DONC LE CHANGEMENT DE CONTEXTE PARTIEL
< EN SORTIE DE 'TH0' VA MAL SE PASSER,
< SAUF SI L'ON CHANGE 'NS'...
XWOR%1: VAL MALARM)MFFFF=K/NBITOC < NUMERO DE L'OCTET 'MALARM'.
LXI LPSTH0+TH0S*NOCMO+XWOR%1 < POUR ACCEDER AU 2EME OCTET DE
< S DANS LA PSTH0,CET OCTET
< CONTENANT LE N0 D'ALARME
LBY &AXPSTH < (A)=NUMERO DE L'ALARME,
LXI LPSTH0+TH0P < (A)=INDEX DU REGISTRE 'P' DE LA TACHE
< TRAPPANTE DANS 'PSTH0',
CPI ALASTA < EST-CE UNE PSEUDO-ALARME 'STAR' ???
JNE DOWN70 < NON...
<
< CAS DE LA PSEUDO-ALARME 'STAR' :
<
DC &AXPSTH < ON CONTRAINT L'UTILISATEUR AYANT EXECUTE
< L'INSTRUCTION 'STAR' A L'ITERER EN
< MEMOIRE BASSE...
JMP DOWN50 < VERS SON DESARMEMENT...
<
< CAS DES VRAIES ALARMES :
<
DOWN70: EQU $
CPI ALACTD < EST-CE "ACTD" ???
JNE DOWN50 < NON, LE PROGRAMME VA REDESCENDRE EN
< EN BAS, ET L'UTILISATEUR SUSPENDU
< JUSQU'AU PROCHAIN SCHEDULING...
DC &AXPSTH < A PRIORI, ON REVIENT EN ARRIERE...
PSR B < SAUVEGARDE DE 'IDDESC',
CALL #SISP CMS5 PSRSLO#
< ET DE (SLO,SLE) COURANT...
LA PSTESC-DCTESC+RSLO,L
LB PSTESC-DCTESC+RSLE,L
WOE < ET MISE EN PLACE DE (SLO,SLE) ESCLAVE.
SBR A,B < (B)=(SLE)-(SLO)=TAILLE DE L'ESPACE
< MEMOIRE...
LY &AXPSTH < (Y)='P' COURANT DU PROGRAMME,
LR Y,A
SLRS -DADR < (A)='P' DE L'ESCLAVE EN DADR-MOTS,
CPR B,A < ALORS, 'P' EST-IL EN VIOLATION ???
JLE DOWN71 < NON, OK...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< COMPRENDRE COMMENT ON
< PEUT ETRE ICI (AVEC CE TYPE
< D'ALARME "ACTD"...) TOUT
< EN AYANT UN 'P' EN VIOLATION...
< N'Y-A-T'IL PAS EU UN DEFAUT
< SECTEUR JUSTE AVANT !!!
<
LRM A
WORD XACTD < (A)=CODE DE 'ACTD' SIMPLE...
JMP DOWN72 < ET ON SAUE LE 'LAR' QUI SUIT, AVEC 'A'
< POSITIONNE DE TELLE FACON QUE 'P' SOIT
< REINCREMENTE...
DOWN71: EQU $
LAR < ET (A)=INSTRUCTION EN CAUSE...
DOWN72: EQU $
XWOR%1: VAL MKSL=K
XWOR%2: VAL XXXMST>XWOR%1
LRM B
WORD XACTD?XWOR%2 < (B)=CODE DE L'INSTRUCTION SPECIALE
< D'EXECUTION DES SOUS-PROGRAMMES
< EN MODE MAITRE,
CPR A,B < EST-CE 'RECMST' ???
< RESTAURATION DE (SLO,SLE) :
CALL #SISP CMS5 PLRSLO#
PLR B < ET DE 'IDDESC',
JE DOWN50 < OUI, C'EST 'RECMST', LE REGISTRE 'P'
< ET BON : IL POINT SUR L'INSTRUCTION...
< ON VA INTERROMPRE L'UTILISATEUR, ET
< AINSI LE 'RECMST' SERA REINTERE EN
< MEMOIRE BASSE...
IC &AXPSTH < NON, ON REMET 'P' COMME IL FAUT...
<
< DESARMEMENT DE L'UTILISATEUR :
<
DOWN50: EQU $
LXI NSPACT < (X)='NSP' DU NIVEAU UTILISATEUR,
LYI FONRB0 < (Y)=FONCTION DE REMISE A 0 D'UN BIT,
LAD AASTF < (A)=ADRESSE DU RELAI D'ACCES A 'ASTF',
BSR ASMMK < P H A S E C R I T I Q U E...
STZ &ADCTSY < L'UTILISATEUR DISPARAIT DE LA LIST
< DES 'DCT' ACTIVABLES...
LXI NSNSP0+NSPACT < (X)=NIVEAU 'NS' DES UTILISATEURS,
BSR ATMOBT < ET ON LE DESACTIVE...
BSR ASMDK < F I N D E P H A S E C R I T I Q U E
JMP DOWN9 < VERS LE REVEIL DU NIVEAU DE SERVICE
< ASSOCIE A CET UTILISATEUR...
<
< CAS DES 'SVC' OU DES 'QUIT' :
< (IL FAUT QUE CETTE OPERATION
< SOIT REPETEE, AFIN QU'ELLE
< AIT LIEU EN MEMOIRE BASSE)
<
DOWN10: EQU $
TBT NBITMO+IDESC7 < EST-CE UNE DEMANDE DE 'SERESC' EN HAUT ??
JC DOWN12 < OUI, ON NE PREPARE DONC PAS L'ITERATION
< DU 'SVC'/'QUIT', ON LAISSE 'IDESC7' A 1
< POUR 'RUNO', ET ENFIN, ON VA REVEILLER
< LE NIVEAU DE SERVICE ASSOCIE...
CPZ PSTESC-DCTESC+RS,L
< QUEL EST LE MODE DE L'ESCLAVE ???
JL DOWN11 < MAITRE : DONC UN 'SVC'...
DC PSTESC-DCTESC+RP,L
< ESCLAVE : DONC UN 'QUIT', ET LE REGISTRE
< 'P' DE L'ESCLAVE EST SIGNIFICATIF...
< ON REVIENT DONC SUR LE 'QUIT'.
JMP DOWN12
DOWN11: EQU $
PSR B < SAUVEGARDE DE 'IDDESC'...
CALL #SISP CMS5 PSRSLO#
< SAUVEGARDE DU (SLO,SLE) COURANT.
LA PSTESC-DCTESC+RSLO,L
LB PSTESC-DCTESC+RSLE,L
WOE < UTILISATION DU (SLO,SLE) UTILISATEUR...
LY PSTESC-DCTESC+RK,L
< (Y)=REGISTRE 'K' DE L'ESCLAVE DANS SON
< ESPACE RELATIF,
LAR
ADRI -D,A < DECREMENTATION D'UNE UNITE DE LA VALEUR
< DU REGISTRE 'P' DE RETOUR DU 'SVC'.
STAR
< RESTAURATION DE (SLO,SLE) COURANT :
CALL #SISP CMS5 PLRSLO#
PLR B
DOWN12: EQU $
<
< REVEIL DU NIVEAU DE SERVICE
< ASSOCIE A CET UTILISATEUR :
<
DOWN9: EQU $
STB IDDESC-DCTESC,L < TRANSMISSION DU DISCRIMINATEUR ('IDESC3')
< ENTRE L'HORLOGE ET LES AUTRES CAS...
LBY DEMSER-DCTESC+XXNSP,L
< (A)='NSP' DU NIVEAU DE SERVICE,
LR A,X
BSR ACADCT < (L)=ADRESSE DE LA 'DCT' DE SERVICE,
BSR ABETA2 < RENVOIE : (A)=BETA(SIT) :
IF XXSIT0-K,,XEIF%,
IF ATTENTION, LE TEST SUIVANT EST IDIOT !!!
XEIF%: VAL ENDIF
JAL DOWN40 < OK, LE NIVEAU DE SERVICE ATTEND...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< REGARDER OU EST CE NIVEAU DE
< SERVICE !!!
<
DOWN40: EQU $
BSR ARIT < QUE L'ON REVEILLE...
XWOR%9: VAL K
LAI XWOR%9 < AFIN DE POSITIONNER LES INDICATEURS...
<
< SORTIE GENERALE :
<
DOWN13: EQU $
CPZR A < POSITIONNEMENT DES INDICATEURS...
PLR L
PLR A,B,X,Y
RSR
<
< CAS OU L'ON ETAIT EN BAS :
<
DOWN8: EQU $
LAI XWOR%9)MFFFF < AFIN DE POSITIONNER LES INDICATEURS...
JMP DOWN13 < ET ON SORT...
PAGE
<
<
< R A N G D E L ' A L L O C A T E U R -
< R E L E A S E U R M E M O I R E :
<
<
< FONCTION :
< CE SOUS-PROGRAMME DETERMINE
< EN FONCTION DE LA TAILLE-OCTET
< DE L'ESPACE MEMOIRE UTILISATEUR
< (CONNUE PAR 'DEMSWP') LE RANG
< (IDENTIFICATEUR) DE L'ALLOCATEUR
< ET RELEASEUR MEMOIRE NECESSAIRE
< ('B1', 'B2' OU 'B4') SUIVANT LE
< TABLEAU :
<
< TAILLE OCTET : RANG ALLOCATEUR/RELEASEUR :
<
< <=2KO ('800) 0 : NSP<AL,RL>1,
< <=4KO ('1000) 1 : NSP<AL,RL>2,
< <=8KO ('2000) 2 : NSP<AL,RL>4 & ASDEM=2,
< <=12KO ('3000) 2 : NSP<AL,RL>4 & ASDEM=3,
< <=16KO ('4000) 2 : NSP<AL,RL>4 & ASDEM=4.
< <=20KO ('5000) 2 : NSP<AL,RL>4 & ASDEM=5,
< <=24KO ('6000) 2 : NSP<AL,RL>4 & ASDEM=6.
< <=32KO ('7000) 2 : NSP<AL,RL>=4 & ASDEM=7,
< <=32KO (Q8000) 2 : NSP<AL,RL>=4 & ASDEM=8.
<
<
< ARGUMENT :
< (W)=ADRESSE DEMANDE DE SWAP (DEMSWP).
<
<
< RESULTAT :
< (A)=BITS14-15(B)=RANG ALLOCATEUR/RELEASEUR MEMOIRE
< NECESSAIRE A L'ESCLAVE.
< DANS LE CAS DU RANG 2, ASDEM=2,3,4, SUIVANT
< LA TAILLE MEMOIRE NECESSAIRE (8KO, 12KO, 16KO).
<
<
USE W,DEM0
RGARM: EQU $
STZ DEMMEM-DEMSWP+T+ASDEM,W
< PAR PRUDENCE, ET A PRIORI.
LA ARGDEM+CODEM < (A)=TAILLE-OCTET DE L'ESPACE
< MEMOIRE DE L'ESCLAVE.
ADRI -N,A < POUR INCLURE LES TAILLES QUI
< SONT DEJA DES PUISSANCES DE 2.
JALE E712 < E R R E U R S Y S T E M E...
DBT
XWOR%1: VAL PLK*NOCMO=K
LAI NBITMO-XWOR%1
SBR X,A < CALCUL DU RANG, A PARTIR DU
< NUMERO DU 1ER BIT A 1 DANS
< LA TAILLE MEMOIRE.
CPI Z
JLE E713 < OK, ALLOCATEUR 0 OU 1.
CPI NBITMO-XWOR%1-E < TEST D'EXISTENCE DE L'ALLOCATEUR/
< RELEASEUR NECESSAIRE.
JG E712 < E R R E U R S Y S T E M E ...
<
< CAS DES ALLOCATIONS 4K , 6K , 8K :
< ET DE CELLES DE 10, 12, 14 ET 16K :
<
LA ARGDEM+CODEM < (A)=TAILLE-OCTET NECESSAIRE.
SLRS YY8*NBITMO=K < (A)=NBRE DE BLOCS DE 2K-MOTS
< NECESSAIRES.
STA DEMMEM-DEMSWP+T+ASDEM,W
< ET TRANSMISSION A MALOC4/MREL4.
LAI NSPAL4-NSPAL1 < C'EST L'ALLOCATEUR/RELEASEUR
< DE RANG 2 QUI EST NECESSAIRE.
JMP E714 < OK.
E712: EQU $
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< RECALCULER LE RANG DE L'ALLOCATEUR...
<
E713: EQU $
JAGE E714 < CAS DES TAILLES SUPERIEURES
< OU EGALES A 2KO.
<
< CAS OU LA TAILLE MEMOIRE EST INFERIEURE A 2KO : ON FORCE 2KO.
<
LAI NSPAL1-NSPAL1 < ON FORCE L'ALLOCATEUR/RELEASEUR
< DE RANG 0.
E714: EQU $
ORR A,B < MISE DU RANG DE L'ALLOCATEUR/
< RELEASEUR MEMOIRE NECESSAIRE EN
< BITS 14-15 DE B.
RSR
PAGE
<
<
< 1 E R E A L L O C A T I O N M E M O I R E :
<
<
< FONCTION :
< CE SOUS-PROGRAMME EST APPELE
< LORS DE LA PREMIERE ALLOCATION
< MEMOIRE (APRES 'JE') POUR FORCER
< LE RANG DU PREMIER ALLOCATEUR
< MEMOIRE NECESSAIRE...
<
<
< ARGUMENT :
< (W)=ADRESSE DCT(ESCLAVE).
< (W DESTRUCTIBLE).
<
<
< RESULTAT :
< BIT0(B)=1 : ALLOCATION NECESSAIRE,
< BIT1-15(B)=RANG DE L'ALLOCATEUR.
<
<
USE W,DEM0
RGAM: EQU $
ADRI DEMSWP-DCTESC,W < (W)=@DEMSWP.
BSR ARGARM < DETERMINATION DU RANG DE
< L'ALLOCATEUR MEMOIRE NECESSAIRE.
SBT NBITMO+BBSOSI < INDIQUONS AINSI QU'UNE ALLOCATION
< EST DEMANDEE.
RSR
PAGE
<
<
< A L L O C A T I O N / R E L E A S 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 :
< CES DEUX SOUS-PROGRAMMES
< ALLOUE ET RELEASE (RESPECTI-
< VEMENT) L'ESPACE MEMOIRE DE
< L'UTILISATEUR...
<
<
< ARGUMENT :
< (W)=ADRESSE DCT(ESCLAVE).
< BIT0(B)=1 : ALLOCATION/RELEASE A FAIRE,
< =0 : RIEN A FAIRE.
< BITS8-13(B)=K,
< BIT14-15(B)=RANG DE L'ALLOCATEUR/RELEASEUR
< MEMOIRE NECESSAIRE A L'ESCLAVE.
<
<
< RESULTAT :
< 'RL' : BBMOVE <-- 0,
< 'AL' : BBMOVE <-- 0 S'IL L'ESPACE MEMOIRE S'EST DEPLACE,
< 1 SINON...
<
<
USE L,DCT0
USE W,DEM0
<
< R E L E A S E M E M O I R E :
<
RLMESC: EQU $
LAI NSPRL1 < RELEASEUR 2KO (RANG 0).
LYI NIL-ZERO*NOCMO+E < 'AL' : (Y)=ADRESSE D'UN ESPACE MEMOIRE
< INALLOUABLE : ON PREND POUR
< CELA UNE ADRESSE-OCTET
< IMPAIRE...).
JMP E716
<
< A L L O C A T E U R M E M O I R E :
<
ALMESC: EQU $
LAI NSPAL1 < ALLOCATEUR 2KO (RANG 0).
LY DEMSWP-DCTESC+T+AMDEM,W
< 'RL' : (Y)=ADRESSE DE L'ESPACE MEMOIRE
< ALLOUE AU COUP PRECEDENT...
<
< TRONC COMMUN :
<
E716: EQU $
<
< TEST SUR LA NECESSITE D'UNE ALLOCATION/RELEASE MEMOIRE :
<
TBT NBITMO+BBSOSI < UN SWAP-OUT A-T'IL ETE FAIT...
JNC E717 < NON, DONC RIEN A FAIRE...
<
< CAS OU L'ALLOCATION/RELEASE EST NECESSAIRE :
<
ADRI DEMMEM-DCTESC,W < (W)=@DEMANDE MEMOIRE DANS
< DCT-ESCLAVE.
ADR B,A
ANDI MKRGM < (A)=NSP<AL<1,2,4>,<REL<1,2,4>>.
SWBR A,A < GENERATION DE L'EN-TETE DE DEMMEM
STA NSPTYP < MAJ NSPTYP.
BSR ACHAND < ENVOI DE LA DEMANDE D'ALLOCATION/
< RELEASE.
BSR ACHANW < ATTENTE DE FIN D'ALLOCATION/
< RELEASE...
RBT NBITMO+BBMOVE < A PRIORI : IL Y A DEPLACEMENT...
TBT NBITMO+BBTOP < Y-A-T'IL EU 'RUNO' ???
JC E717 < OUI, IL FAUT DONC SWAPPER INTEGRALEMENT !
LA DEMSWP-DEMMEM+T+AMDEM,W
< (A)=ADRESSE DE L'ESPACE MEMOIRE ALLOUE
< OU RELAESE (SI 'RL')...
CPR Y,A < Y-A-T'IL EU DEPLACEMENT ???
JNE E717 < NON, OU BIEN IL S'AGIT DE 'RL'...
SBT NBITMO+BBMOVE < OUI, BMOVE <-- 1...
E717: EQU $
RSR
PAGE
<
<
< M O U V E M E N T D E S B U F F E R S
< D E S E S C L A V E S :
<
<
< FONCTION :
< CES DEUX SOUS-PROGRAMMES SONT
< APPELES PAR L'INTERMEDIAIRE DE
< L'AUTOMATE 'OTOSP' (EST-IL LE
< SEUL ???) ; ILS ONT A LEUR CHARGE
< DE DEPLACER LES BUFFERS ESCLAVES
< (APPARTENANT A L'ESPACE MEMOIRE
< UTILISATEUR) VERS OU A PARTIR DU
< BUFFER RESIDENT 'BUFESC', ET CECI
< QUAND L'ESPACE MEMOIRE EST RESI-
< DENT (AVANT LE SWAPPING OUT POUR
< UNE ECRITURE, ET APRES LE SWAPPING
< IN POUR UNE LECTURE).
<
<
< RAPPEL :
< OPDEM.AND.'MKESEF'=0,1 ==> OPERATION DE LECTURE,
< =2 ==> OPERATION D'ECRITURE,
< >2 ==> CE N'EST PAS UNE E/S EFFECTIVE.
<
<
< ARGUMENT :
< (W)=ADRESSE DCT(ESCLAVE).
< (B)=A NE PAS DETRUIRE...
<
<
< RESULTAT :
< (Y)=K : LECTURE OU OPERATION N'ETANT PAS UNE
< E/S EFFECTIVE,
< #0 : ECRITURE.
< LA VALEUR CONTENUE DANS Y EST LE NSPTYP
< DU SERVICE DEMANDE PAR L'ESCLAVE.
< (CETTE VALEUR DE Y EST DESTINE A SWAPO).
<
<
<
<
< A V A N T L E S S W A P O U T :
<
<
OMOV1: EQU $
LYI FGR < MODE NON-ECRITURE A PRIORI.
<
< TEST SUR LA FONCTION DEMANDEE :
<
LA DEMESC-DCTESC+T+OPDEM,W
ANDI MKESEF < AFIN DE SAVOIR S'IL S'AGIT
< D'UNE E/S EFFECTIVE.
CPI FGX
JG Z650 < C'EST UNE FONCTION ; ALLONS VOIR
< SI ELLE EST EQUIVALENTE A
< UNE ECRITURE.
<
< DANS LE CAS D'UNE E/S EFFECTIVE, IL FAUT DEPLACER LES
< BUFFERS, ET ON FAIT APPEL POUR CELA A HDLMEM,
< DONT ON VA PREPARER LES ARGUMENTS ICI :
<
LX DEMESC-DCTESC+T+AMDEM,W
STX DEMESC-DCTESC+T+ASDEM,W
<
< CALCUL DE L'AMDEM DE DEMESC :
<
LR W,X < (X)=@DCT-ESCLAVE.
ADRI BUFESC-DCTESC,X < (X)=@BUFESC.
ADR X,X < (X)=@OCTET DE BUFESC.
IF NOCMO-2,,XEIF%,
IF ATTENTION : 'ADR X,X' EST MAUVAIS !!!
XEIF%: VAL ENDIF
STX DEMESC-DCTESC+T+AMDEM,W
<
< LE MOVE BUFFER DOIT IL AVOIR LIEU
< AVANT LE SWAP OUT, OU APRES LE SWAP IN...
<
CPI FGW < EST-CE UNE ECRITURE...
JNE E747 < DANS LE CAS D'UNE LECTURE, LE
< MOVE EST FAIT APRES LE SWAP
< IN DANS OMOV2.
LXI FGR < DEMANDE DE LECTURE SUR 'MEM'.
<
< CAS D'UNE ECRITURE POUR OMOV1 OU D'UNE
< LECTURE POUR OMOV2 :
<
E749: EQU $
<
< GENERATION DE LA DEMANDE VERS HDLMEM,
< AVEC SAUVEGARDE DES ARGUMENTS DU SERVICE :
<
LA DEMESC-DCTESC+T+OPDEM,W
STX DEMESC-DCTESC+T+OPDEM,W
LY DEMESC-DCTESC+XXNSP,W < SAVE NSPTYP DU SERVICE DEMANDE.
LXI NSPMEM < NSP DE HDLMEM.
SWBR X,X
STX DEMESC-DCTESC+XXNSP,W < NSPTYP DE LA DEMANDE SUR HDLMEM.
<
< ON A ICI :
< (A)=OPDEM DU SERVICE DEMANDE,
< (Y)=NSPTYP DU SERVICE DEMANDE.
<
ADRI DEMESC-DCTESC,W < (W)=@DEMESC.
<
< ON A ICI :
< (W)=ADRESSE DEMANDE VERS 'HDLMEM',
< OPDEM=K POUR OMOV1 ==> BUFFER-->'BUFESC',
< =2 POUR OMOV2 ==> 'BUFESC'-->BUFFER.
< AMDEM=ADRESSE OCTET DE BUFESC,
< ASDEM=ADRESSE OCTET DU BUFFER DE L'ESCLAVE.
< (Y)=NSPTYP DU SERVICE DEMANDE.
<
BSR ACHAND < ENVOI DE LA DEMANDE VERS HDLMEM.
BSR ACHANW < ATTENTE DE FIN DE MOVE...
<
< REGENERATION DU SERVICE DEMANDE :
<
USE W,DEM0
STY NSPTYP
STA ARGDEM+OPDEM
E747: EQU $
RSR
<
<
< T R A I T E M E N T D E S F O N C T I O N S :
< ( T E S T D ' E Q U I V A L E N C E
< A U N E E C R I T U R E )
<
<
Z650: EQU $
LR A,X < (X)=FONCTION DEMANDEE.AND.'7.
LBY DEMESC-DCTESC+XXNSP,W < (A)=NSP DEMANDE.
JAE E747 < C'EST UNE FONCTION MONITEUR ;
< ELLE N'EST PAS CONSIDEREE COMME
< UNE E/S EFFECTIVE ; D'AILLEURS,
< EN GENERAL, IL FAUT ABSOLUMENT
< SWAPPER OUT AVANT DE LES
< EXECUTER (CF. LE CHANGEMENT DE
< TAILLE MEMOIRE...)
TBT MSKNSP=K+BINNSP < TEST DE BLOCAGE DU SWAPPING ???
JC E747 < PAS LA PEINE DE SE FATIGUER,
< LE SWAPPING EST BLOQUE POUR
< CET UTILISATEUR.
PSR X,L < SAVE FONCTION DEMANDEE.AND.'7,
< ET L'@DCT-SERVICE.
LR A,X < (X)=NSP DU SERVICE DEMANDE.
BSR ACADCT < RENVOIE : (L)=@DCT(SERVICE
< DEMANDE(X)).
LA SIT+TFONCE < (A)=TABLE D'EQUIVALENCE DES
< FONCTIONS 3 A 7 DU SERVICE
< DEMANDE.
PLR X,L < RESTAURE (X)=FONCTION.AND.'7, ET
< (L)=@DCT-SERVICE.
JAE E747 < LA TABLE D'EQUIVALENCE ETANT
< NULLE, LA FONCTION DEMANDEE
< N'EST PAS CONSIDEREE COMME
< UNE E/S EFFECTIVE.
ADR X,X < (CHAQUE FONCTION OCCUPE 2 BITS)
XWOR%1: VAL 2 < LE CODAGE TIENT SUR 2 BITS...
XWOR%2: VAL FGX*XWOR%1 < ON NE COMMENCE QU'APRES LA FONCTION 'FGW'
SCLS NBITMO-XWOR%2,X < RECUPERATION DE L'EQUIVALENCE
< DE LA FONCTION (X).
ANDI BIT>XWOR%1-N < (A)=NBRE DE CARACTERES ECRITS
< PAR CETTE FONCTION.
JAE E747 < LA FONCTION (X) N'EST PAS
< CONSIDERRE COMME UNE E/S
< EFFECTIVE, SOIT QU'ELLE NE LE
< SOIT VRAIMENT PAS, SOIT QUE
< LE NBRE DE CARACTERES QU'ELLE
< ECRIVE SOIT TROP GRAND (CF.
< L'ERASE DES VISUS...).
<
< MISE EN PLACE D'UN CODEM(DEMESC) :
<
STA DEMESC-DCTESC+T+CODEM,W
< ON POURRA AINSI DANS LE SWAPPING
< OUT, APPLIQUER A CETTE FONCTION
< LES CRITERES DE SWAPP UTILISES
< POUR LES ECRITURES.
LY DEMESC-DCTESC+XXNSP,W < (Y)=NSPTYP#0 : LA FONCTION EST
< DONC ASSIMILEE A UNE ECRITURE
< EXPLICITE.
JMP E747 < ET C'EST TOUT...
<
<
< A P R E S L E S S W A P I N :
<
<
< ARGUMENT :
< (Y)=TRANSLATION EN MOT SUBIE PAR LE PROGRAMME.
< (TRANSMIS PAR ISLOE).
<
<
OMOV2: EQU $
<
< TEST DE LA FONCTION DEMANDEE :
<
LA DEMESC-DCTESC+T+OPDEM,W
ANDI MKESEF
CPI FGW < EST-CE UNE LECTURE...
IF FGX-FGW,,XEIF%,
IF ATTENTION, CE QUI PRECEDE EST IDIOT !!!
XEIF%: VAL ENDIF
JGE E747 < NON RIEN A FAIRE...
<
< CAS D'UNE LECTURE, IL FAUT MOVER LE BUFFER :
< (A CONDITION QUE TOUT SE SOIT BIEN PASSE...)
<
LXI FGW < DEMANDE D'ECRITURE SUR 'MEM'.
<
< TRANSLATION DE L'ADRESSE-OCTET DU BUFFER :
<
LA DEMESC-DCTESC+T+ASDEM,W
ADR Y,A < TRANSLATION.
ADR Y,A < TRANSLATION.
IF NOCMO-2,,XEIF%,
IF ATTENTION : LES 2 'ADR' PRECEDENTS SONT MAUVAIS !!!
XEIF%: VAL ENDIF
STA DEMESC-DCTESC+T+ASDEM,W
CPZ DEMESC-DCTESC+T+ETADEM,W
JNE E747 < LE SERVICE DEMANDE S'ETANT MAL
< EXECUTE, IL N'Y A PAS DE
< MOVE DES BUFFERS A EXECUTER !!!
JMP E749
PAGE
<
<
< S W A P P I N G I N & O U T :
<
<
< PHILOSOPHIE :
< 1- L'ORDONNANCEMENT DES DEMANDES DE SWAP
< IN & OUT EST FAIT AUTOMATIQUEMENT PAR CHAND.
< 2- LE SWAPPING-OUT EST EXECUTE EN MODE
< PRIORITAIRE (CONTRAIREMENT AU SWAPPING-IN) ; EN E
< EFFET, PLUS VIDE LE SWAPPING-OUT EST FAIT,
< PLUS VITE LA LIBERATION DE L'ESPACE MEMOIRE
< DE L'ESCLAVE EST FAITE, CE QUI A POUR RESULTAT
< D'AUGEMENTER LE DEBIT DU SYSTEME.
<
<
< BLOCAGE DU SWAPPING ESCLAVE :
< ON A LA POSSIBILITE DE BLOQUER POUR
< UN ESCLAVE DETERMINE LE SWAPPING.
< IL SUFFIT POUR CELA DE METTRE
< A 1 LE BIT0 DE NSPTYP(DEMSWP) :
< BIT0(NSPTYP(DEMSWP))=K : SWAPPING AUTORISE,
< =1 : SWAPPING BLOQUE POUR
< CET ESCLAVE.
<
<
< OPTIMISATION DES SWAPPINGS 'IN' :
< LA TABLE 'TOMP' DE L'ALLOCATEUR MEMOIRE EST
< UTILISEE POUR OPTIMISER LES SWAPPINGS 'IN' ; ELLE
< MEMORISE PAR BLOC DE 'PLK' K-MOTS (DIT "BK"), D'UNE
< PART L'<IDESC> DE L'UTILISATEUR QUI LE POSSEDE, OU
< QUI LE POSSEDAIT EN DERNIER, ET D'AUTRE PART LE
< NUMERO RELATIF (A PARTIR DE 0) QU'IL POSSEDE OU
< POSSEDAIT DANS L'ESPACE DE CET UTILISATEUR. LORSQU'ON
< PROCEDE A UN SWAPPING 'IN', ON NE SWAPPE PAS LES
< "BK" DE TETE DE L'ESPACE UTILISATEUR TELS QU'ILS
< N'ONT APPARTENUS A PERSONNE D'AUTRE...
< ON NOTERA ENFIN QU'IL N'Y A PAS D'ACCES CRITIQUE A
< CETTE TABLE, CAR EN EFFET SI ON TOUCHE A TOMP("BK"),
< C'EST QUE CE BLOC "BK" NOUS APPARTIENT !!!
<
<
< ARGUMENT :
< (W)=ADRESSE DCT(ESCLAVE).
< (DESTRUCTIBLE)
< DEMSWP(DCT-ESCLAVE) : DEMANDE DE SWAPPING
< IN/OUT SUR NSPDKS.
< (Y)=K : LECTURE,
< E/S NON EFFECTIVE,
< SERVICE NON PRIORITAIRE (NSP>=(HINSP)),
< LORS D'1NE GROSSE CHAGRE MEMOIRE.
< =NSP (#0) : SERVICES IMMEDIATS (NSP< (HINSP)),
< =1 : CAS DES QUANTUM D'HORLOGE EXPIRES.
<
<
< C H A R G E M E N T D ' U N P R O C E S S E U R :
< C'EST UN SWAPPING IN OU L'ADRESSE DISQUE
< N'EST PAS CELLE DE LA ZONE DE SWAPPING
< DE L'ESCLAVE...
<
<
< CHOIX ENTRE SWAP-IN ET LOAD-PROCESSEUR :
< OPDEM=K : SWAP-IN,
< OPDEM#0 : LOAD PROC D'@DK (OPDEM).
<
<
< UTLISATION DU REGISTRE B :
< BIT0(B)=1 : IL FAUT FAIRE DU SWAPPING,
< =0 : LE SWAPPING N'EST PAS NECESSAIRE.
< BIT14-15(B)=RANG DE L'ALLOCATEUR/RELEASEUR MEMOIRE.
<
<
USE L,DCT0
USE W,DEM0
<
<
< S W A P P I N G I N :
<
<
SWAPI: EQU $
ADRI DEMSWP-DCTESC,W < (W)=@DEMANDE DE SWAP DANS DCT-ESCLAVE.
TBT NBITMO+BBSOSI < LE SWAP-OUT A-T'IL ETE FAIT...
JNC E711 < NON, DONC PAS DE SWAP-IN...
LA NSPTYP < MAJ DE L'EN-TETE DE LA DEMANDE.
RBT PRIO < UN SWAP-IN EST EXECUTE
< EN MODE NON PRIORITAIRE.
STA NSPTYP
LA ARGDEM+AMDEM < (A)=ADRESSE OCTET DU BLOC ALLOUE,
SLRS PLK*NOCMO=K
LR A,Y < (Y)=NUMERO PAR RAPPORT A 0 DU PREMIER
< 'PLK'-BLOC ALLOUE...
LA ARGDEM+CODEM < (A)=LONGUEUR OCTET DE CET ESPACE,
SLRS PLK*NOCMO=K
LR A,X < (X)=NOMBRE DE 'PLK'-BLOCS ALLOUES.
LA IDESC-DEMSWP,W
ANDI MKIDES < (A)=<IDESC> DE CET UTILISATEUR.
IF MKIDES=K-K,,XEIF%,
IF ATTENTION : CE QUI PRECEDE EST FAUX !!!
XEIF%: VAL ENDIF
SWBR A,A < (A)=IDESC/0 (K=NUMERO DU PREMIER 'PLK'
< BLOC ALLOUE).
XWOR%1: VAL MOCG=K
XWOR%2: VAL XITOMP=K
IF XWOR%1-XWOR%2,,XEIF%,
IF ATTENTION : CE QUI PRECEDE EST FAUX !!!
XEIF%: VAL ENDIF
<
< CHOIX ENTRE SWAP-IN ET LOAD-PROCESSOR :
<
CPZ ARGDEM+OPDEM
JE E710X < OPDEM=K : C'EST UN SWAP-IN
< VERITABLE.
<
<
< L O A D - P R O C E S S O R :
<
<
E710XE: EQU $
XR X,Y
STA &ATOMP < OCCUPATION DU 'PLK' BLOC COURANT,
XR X,Y
ADRI I,A < PROGRESSION DU NUMERO RELATIF DU
< 'PLK'-BLOC COURANT DANS L'ESPACE
< UTILISATEUR,
ADRI I,Y < PROGRESSION DU NUMERO ABSOLU DE
< 'PLK'-BLOC,
JDX E710XE < AU SUIVANT, S'IL EXISTE...
LA ARGDEM+OPDEM < (A)=ADRESSE DISQUE DU PROCESSEUR DE
< BASE A CHARGER...
LX ARGDEM+ASDEM < SAVE L'ADRESSE DE LA ZONE DE
< SWAPPING DE L'ESCLAVE DANS X.
STA ARGDEM+ASDEM < ET MISE A LA PLACE DE L'ADRESSE
< DU PROCESSEUR SUR LE DISQUE DE
< SWAPPING.
LAI NSPDKS < DANS LE 'LOAD PROCESSOR', ON PREND
STBY NSPTYP < SYSTEMATIQUEMENT 'DKF'...
STZ ARGDEM+OPDEM < LE LOAD-PROC EST UNE LECTURE.
BSR ACHAN0 < ENVOI DE LA DEMANDE DE CHARGE-
< MENT DU PROCESSEUR AVEC PASSAGE TEMPO-
< RAIRE SUR LA PAGE0...
WAIT WEIO < ATTENTE DE FIN DE CHARGEMENT.
STX ARGDEM+ASDEM < RESTAURE L'ADRESSE DE LA ZONE
< DE SWAPPING DE L'ESCLAVE EN FIN
< DE CHARGEMENT DU PROCESSEUR.
CPZ ARGDEM+ETADEM < VALIDATION DU LOAD PROCESSOR...
JE SYSRA5 < OK BIEN EFFECTUE...
BSR ASYSER < E R R E U R S Y S T E M E ...
< (PROCESSEUR SUPERIEUR A 8K...)
<
< QUE FAIRE ???
< IL S'AGIT PROBABLEMENT D'UNE
< ERREUR SUR 'DKF', ALORS...
<
SYSRA5: EQU $
JMP E955 < AND NOW GO BACK...
<
< OPTIMISATION DES SWAPPINGS 'IN' :
<
E710X: EQU $
TBT NBITMO+BBMOVE < Y-A-T'IL EU DEPLACEMENT DE L'ESPACE ???
PSR B
LBI K < (B)=COMPTEUR DES 'PLK'-BLOCS DEJA LA
< PROPRIETE DE CET UTILISATEUR.
JNC E710XB < OUI, DONC IL FAUT SUREMENT TOUT
< SWAPPER IN...
PSR A
LBY DEMESC-DEMSWP+XXNSP,W < (A)=NVP DU SERVICE DEMANDE,
CPI NSPVID < EST-CE UN SERVICE IMMEDIAT ???
PLR A
JE E710XB < OUI, ALORS ON SWAPPE IN A PRIORI,
< VOIR EN PARTICULIER LES RISQUES
< LORS DES CHANGEMENTS DE TAILLE DE
< L'ESPACE MEMOIRE, ET RETOUR A UNE
< TAILLE ANTERIEURE !!!
E710XA: EQU $
XR X,Y
CP &ATOMP < MEME PROPRIETAIRE, ET MEME POSITION
< RELATIVE DANS L'ESPACE ???
XR X,Y
JNE E710XB < NON, ON ARRETE ICI LE TEST...
ADRI I,B < OUI, COMPTAGE DES IDENTITES,
ADRI I,A < COMPTAGE DES NUMEROS RELATIFS DES
< 'PLK'-BLOCS DANS L'ESPACE UTILISATEUR,
ADRI I,Y < (Y)=NUMERO DU 'PLK'-BLOC SUIVANT,
JDX E710XA < S'IL EXISTE...
PLR B
JMP E711 < LE SWAPPING 'IN' EST INUTILE, CAR ON EST
< RETOMBE SUR LE MEME ESPACE TOUJOURS
< INTACT...
E710XB: EQU $
E710XD: EQU $
XR X,Y
STA &ATOMP < MEMORISATION DU PROPRIETAIRE, ET DU
< NUMERO RELATIF, N'OUBLIONS PAS QU'IL N'Y
< A PAS D'ACCES CRITIQUE A TOMP('PLK')
< PUISQU'ON POSSEDE CE BLOC 'PLK'.
XR X,Y
ADRI I,A < OCCUPATION DU BLOC SUIVANT, MEME SI ON
< L'AVAIT DEJA...
ADRI I,Y < (Y)=NUMERO DU 'PLK'-BLOC SUIVANT...
JDX E710XD
SLLD PLK/YY7=K < (B)=CONSTANTE DE TRANSLATION EXPRIMEE
< EN ADRESSE-SECTEURS SUR 'DKF'.
LA ARGDEM+ASDEM
PSR A < SAUVEGARDE DE L'ADRESSE DE SWAPPING
< "NORMALE"...
ADR B,A
STA ARGDEM+ASDEM < OPTIMISATION DE L'ASDEM...
SLLD YY8=K < (B)=CONSTANTE DE TRANSLATION EXPRIMEE
< EN OCTETS...
LX ARGDEM+AMDEM
ADR B,X
STX ARGDEM+AMDEM < OPTIMISATION DE 'AMDEM',
LY ARGDEM+CODEM
SBR B,Y
STY ARGDEM+CODEM < ET OPTIMISATION DU 'CODEM'.
BSR ACHAN0 < LANCEMENT DU SWPPING 'IN' AVEC PASSAGE
< TEMPORAIRE SUR LA PAGE0...
ADR B,Y
SBR B,X
WAIT WEIO < ET ATTENTE DE FIN...
STY ARGDEM+CODEM < RESTAURATION DU 'CODEM',
STX ARGDEM+AMDEM < DE L''AMDEM',
PLR A
STA ARGDEM+ASDEM < ET ENFIN DE L''ASDEM'...
PLR B
JMP E710XC < VERS LE TEST DES CONDITIONS DE RETOUR...
<
<
< E X E C U T I O N D U S W A P P I N G O U T :
<
<
E710: EQU $
BSR ACHAN0 < ENVOI DE LA DEMANDE DE SWAP OUT, AVEC
< PASSAGE TEMPORAIRE SUR LA PAGE0...
WAIT WEIO < ATTENTE DE LA FIN DE SWAP OUT...
<
<
< T E S T D E S C O N D I T I O N S D E R E T O U R :
<
<
E710XC: EQU $
CPZ ARGDEM+ETADEM < VALIDATION DU SWAP IN/OUT...
JE E711 < OK, TOUT S'EST BIEN PASSE.
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< IL S'AGIT SOIT D'UNE ERREUR SUR
< 'DKF', SOIT D'UN TIME OUT SUR 'PR1',
< AUQUEL CAS, ON PEUT RETENTER L'ECHANGE...
<
<
< RETOUR COMMUN DES SWAPPING IN ET OUT :
<
E711: EQU $
STZ ARGDEM+OPDEM < NETTOYAGE...
<
< A T T E N T I O N :
< QUAND ON SORT DU SWAPPER (IN, OU,
< LOAD-PROC), ON A OPDEM=K !!!!
<
E955: EQU $
RSR < ET C'EST TOUT...
<
<
< S W A P P I N G O U T :
<
<
SWAPO: EQU $
ADRI DEMSWP-DCTESC,W < (W)=@DEMANDE DE SWAP DANS DCT-ESCLAVE.
LRM A
WORD SLOM3N < (A)=PLUS PETIT 'SLO' POSSIBLE EN MEMOIRE
< DE SWAPPING,
CP PSTESC-DEMSWP+RSLO,W
< ALORS L'ESCLAVE EST-IL EN MEMOIRE BASSE,
< OU EN MEMOIRE HAUTE (C'EST-A-DIRE DE
< SWAPPING) ???
JG E711X1 < L'ESCLAVE EST EN BAS, ON PEUT EXAMINER
< LA NECESSITE DU SWAPPING OUT...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< COMPRENDRE COMMENT IL SE FAIT
< QUE L'ESCLAVE SOIT DEJA SWAPPE
< EN MEMOIRE HAUTE, ET QU'ON CHERC-
< CHE DE NOUVEAU A LE SWAPPER OUT
< (VOIR EN PARTICULIER L'AUTOMATE
< COURANT DU NIVEAU DE SERVICE) !!!
<
JMP E711 < ET ON SORT...
< (A NOTER : (B)=K)
E711X1: EQU $
LA NSPTYP
IF BINNSP-BITSIG,,XEIF%,
IF ATTENTION : LE 'JAL' SUIVANT EST IDIOT !!!
XEIF%: VAL ENDIF
JAL E711 < LE SWAPPING EST BLOQUE POUR
< CET ESCLAVE (NOTER : (B)=K).
BSR ARGARM < CALCUL DANS A & B DU RANG DE
< L'ALLOCATEUR/RELEASEUR NECESSAIRE.
< NOTER QUE BIT0(B)=K.
LR A,X < (X)=RANG DU RELEASEUR MEMOIRE.
<
< TEST SUR LE SWAPPING OUT CYCLIQUE (ET A PRIORI) :
< AFIN DE NE PAS BLOQUER L'ALLOCATION
< MEMOIRE PAR DES PHENOMENES DIFFICILEMENT
< CONTROLABLES, ON SWAPPE OUT A PRIORI
< ET PERIODIQUEMENT LES ESCLAVES DU SYSTEME,
< A L'AIDE DE LA LISTE CYCLIQUE 'SOCYCL'
< GEREE PAR L'HORLOGE.
<
PSR B,X < SAVE LE RANG DE L'ALLOCATEUR/
< RELEASEUR MEMOIRE NECESSAIRE.
< AINSI QUE B
LX IDESC-DEMSWP,W < OCTET1(X)=ID-ESCLAVE.
RQST &ASEMSO <<<<PHASE CRITIQUE ENTRE LES
< SWAPPERS ET L'HORLOGE.
LA SOCYCL < ACCES A LA LISTE CYCLIQUE
< COURANTE.
LR A,B < POUR LE TEST DE L'ESCLAVE
< COURANT,D'IDESC (X).
RBT 0,X < ET RAZ A PRIORI.
STA SOCYCL < MAJ DE LA LISTE CYCLIQUE.
PSR A
LAD &ASEMSO
BSR ARLSE
PLR A
TBT NBITMO+L,X < TEST DE L'ESCLAVE COURANT
< D'IDESC (X)
PLR B,X < RESTAURE LE RANG DE L'ALLOCATEUR/
< RELEASER MEMOIRE AINSI QUE B
JC E735 < L'ESCLAVE COURANT DOIT ETRE
< SWAPPE A PRIORI : C'EST SON TOUR.
<
< TEST SUR LES FAUX SERVICES IMMEDIATS, EN
< EFFET, LES FAUX SERVICES IMMEDIATS (CF.
< CHANGEMENT DE TAILLE DE L'ESPACE MEMOIRE
< DE L'UTILISATEUR,...) DOIVENT ETRE
< EXECUTES, ALORS QUE L'UTILISATEUR EST
< SAWPPE OUT. EN CONSEQUENCES, DANS LE CAS
< D'UN FAUX SERVICE IMMEDIAT, ON TESTE LA FONCTION
< DANS LA LISTE 'LSFIM' POUR SAVOIR SI LE SWAPPING
< EST OBLIGATOIRE (0 : IL EST FACULTATIF ET FONCTION
< DE LA CHARGE DU SYSTEME, 1 : IL EST OBLIGATOIRE) :
<
LBY DEMESC-DEMSWP+XXNSP,W < ACCES AU NSP DU SERVICE ESCLAVE.
JANE Z1970 < CAS DES SERVICES NON IMMEDIATS.
<
< CAS DES SERVICES IMMEDIATS :
<
PSR X < JAMAIS ASSEZ PRUDENT...
LX DEMESC-DEMSWP+T+OPDEM,W
< (X)=FONCTION DEMANDEE,
XWOR%1: VAL K < CLEAR DE LA LISTE...
XWOR%1: VAL COSBT?FONEJ=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COSBT?FONCCI=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COSBT?FOCCIM=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COSBT?FONNSP=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COSBT?FONMEM=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COSBT?FONDOR=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COSBT?FONSCH=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COSBT?FONFR=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COSBT?FONFW=FMASK(K?XWOR%1=FCINST
LSFIM:: VAL XWOR%1 < LISTE INDIQUANT SI UN FAUX-SERVICE
< IMMEDIAT DOIT ETRE OBLIGATOIREMENT
< SWAPPE OUT (1) OU FACULTATIVEMENT (0).
LRM A
WORD LSFIM < (A)=LISTE DES FAUX SERVICES IMMEDIATS
< RECLAMANT UN SWAPPING OUT,
TBT L,X < ALORS LE SERVICE COURANT (X) DOIT-IL
< ETRE SWAPPE ???
PLR X < ET ON RESTAURE...
LAI NSPVID < RESTAURE : (A)=K=NSPVID (EN EFFET
< ON ACCEDE PLUS LOIN A LA DCT
< DU SERVICE DEMANDE; DANS LE CAS
< DES SERVICES IMMEDIATS, ON ACCEDE
< A 'DCTVID'.
JC E735 < FAUX-SERVICE IMMEDIAT POUR LEQUEL LE
< SWAPPING OUT EST OBLIGATOIRE...
LYI XXSER2 < FAUX-SERVICE POUR LEQUEL LE SWAPING OUT
< EST FACULTATIF, ET FONCTION DE LA CHARGE
< DU SYSTEME...
<
< CAS DES SERVICES SWAPPABLES :
<
Z1970: EQU $
<
< TEST SUR LA NATURE DE L'ACTION REALISEE
< POUR L'ESCLAVE : EN EFFET DANS LE CAS D'UNE ECRITURE
< ON PEUT SWAPPER OUT OU PAS, PAR CONTRE
< DANS LE CAS D'UNE LECTURE (CF. VISUS), ON FAIT
< DU SWAPPING OBLIGATOIRE (CF. VISUS OU LORS
< D'UNE LECTURE ON NE SAIT QUAND ARRIVERA
< LE OU LES CARACTERES )
<
<
< ON A ICI :
< (Y)=K : LECTURE OU PAS E/S EFFECTIVE,
< OU SERVICE NON PRIORITAIRE (NSP>=(HINSP)),
< (CAS DES GROSSES CHARGES MEMOIRE)
< (Y)#0 : ECRITURE (=NSPTYP SERVICE DEMANDE),
< INTERRUPTION D'HORLOGE (=1),
< SERVICE IMMEDIAT DE FONCTION>='FONFR' (=-1).
< (A)=NSP DU SERVICE DEMANDE PAR L'ESCLAVE.
<
CPZR Y < TEST DU MODE DU SERVICE.
JE E735 < DANS LE CAS D'UNE LECTURE OU
< D'UNE OPERATION QUI N'EST PAS
< UNE E/S EFFECTIVE, ON SWAPPE
< A PRIORI.
<
< TEST SUR LA NECESSITE DE FAIRE DU SWAP :
<
PSR L < SAVE @DCT-SERVICE.
PSR X < SAVE LE RANG DU RELEASEUR MEM.
XWOR%1: VAL MSKNSP=K
XWOR%1: VAL -XWOR%1 < POUR UN DECALAGE A DROITE...
ANDI MSKNSP>XWOR%1
LR A,X < (X)=NSP DU SERVICE DEMANDE PAR
< L'ESCLAVE.
BSR ACADCT < (L)=@DCT DU SERVICE DEMANDE.
LBY BITSEM
XWOR%1: VAL M57SIT=K
XWOR%1: VAL -XWOR%1 < POUR UN DECALAGE A DROITE...
ANDI M57SIT>XWOR%1
LR A,X < CALCUL DU NBRE DE DECALAGES A
< FAIRE SUR LE COMPTE OCTETS DE
< L'ECHANGE POUR CONNAITRE A UNE
< CONSTANTE MULTIPLICATIVE PRES,
< LA DUREE DE L'ECRITURE DEMANDEE.
LA DEMESC-DEMSWP+T+CODEM,W
SLLS L,X < (A)=DUREE*CONSTANTE.
PLR X < RESTAURE (X)=RANG RELEASEUR MEMOIRE.
CP DMES < COMPARAISON DE LA DUREE PREVUE
< POUR L'E/S A UN SEUIL AU DELA
< DUQUEL, IL VAUT MIEUX SWAPPER.
JG Z754 < LA DUREE DE L'ECRITURE SERA
< TROP GRANDE : SWAP-OUT !!!!!
ADRI NSPAL1,X < CALCUL DU NSP DE L'ALLOCATEUR
< MEMOIRE ASSOCIE.
BSR ACADCT < (L)=@DCT ALLOCATEUR ASSOCIE.
BSR APBS < TEST DE LA FILE D'ATTENTE SUR
< L'ALLOCATEUR MEMOIRE.
JGE Z754 < IL Y A TROP DE DEMANDES EN
< ATTENTE SUR L'ALLOCATEUR, IL
< FAUT SWAPPER.
<
< CAS OU L'ON EST INDECIS : EN FAIT SI L'ON EST ICI,
< C'EST QUE L'HORLOGE A INTERROMPU UN ESCLAVE.
< SI CET ESCLAVE EST SEUL OU PRESQUE A ETRE
< ACTIVABLE, IL SERAIT STUPIDE DE LE SWAPPER
< EN AFFET IL VA SERVIR DE TACHE IDLE...
<
LXI NSPSCH
BSR ACADCT < (L)=@DCT-SCHEDULER.
BSR APBS < TEST DE LA FILE D'ATTENTE SUR
< LE SCHEDULER.
PLR L < RESTAURE (L)=@DCT-SERVICE.
JLE E711 < IL N'EST PAS NECESSAIRE DE SWAPPER
< OU BIEN IL N'EST PAS JUDICIEUX DE
< SWAPPER (CF. CAS SCHEDULER).
< NOTA :
< BIT0(B)=K...
<
<
< CAS OU LE SWAPPING EST NECESSAIRE :
<
E735: EQU $
SBT NBITMO+BBSOSI < COMMUNIQUONS AUX AUTRES
< ROUTINES DE L'AUTOMATE QU'UN
< SWAPPING OUT EST FAIT...
LX ANSPS < (X)='NSP' DE L'ORGANE DE SWAPPING...
IF BMCDAJ-BITSIG,,XEIF%,
IF ATTENTION : LE TEST SUIVANT EST INSUFFISANT !!!
XEIF%: VAL ENDIF
CPZ CDESCO-DEMSWP,W < LA 'CDA' COURANTE DE L'UTILISATEUR
< EST-ELLE LA 'CDAJ' ???
JL Z70X1 < OUI, ON PEUT DONC SWAPPER OUT SUR 'PR1'.
LRM A
WORD MEMTV0 < (A)=ORIGINE DE LA 'CDA-IMAGE',
CP CDESCO-DEMSWP,W < EST-CE "!CDAI" ???
JE Z70X1 < OUI, DONC ON PEUT AVOIR DROIT AU
< SWAPPING OUT SUR 'PR1'...
LRM A < NON,
WORD AOCDA4 < (A)=ORIGINE DE LA 'CDA-COMMUNE',
CP CDESCO-DEMSWP,W < EST-CE "!CDA" OU "!CDAG" ???
JNE Z70X2 < NON, IL S'AGIT DONC DE "!CDAP", AUQUEL
< CAS LE SWAPPING OUT NE PEUT QU'AVOIR
< LIEU SUR 'DKS'...
Z70X1: EQU $ < ICI, IL S'AGIT DONC DE "!CDAI", "!CDA"
< OU "!CDAG", AUQUEL CAS LE SWAPPING
< SUR 'PR1' PEUT ETRE ENVISAGEE...
LA IDESC-DEMSWP,W
ANDI MKIDES < (A)='IDESC' DE L'UTILISATEUR...
CP NUSEP1 < A PRIORI, A-T'IL DROIT A 'PR1' ???
JL Z70 < OUI, ON CONSERVE (X)=(ANSPS)...
Z70X2: EQU $ < ICI, OU BIEN IL S'AGIT DE "!CDAP",
< OU BIEN D'UN UTILISATEUR QUI N'A PAS
< DE ZONE DE SWAPPING SUR 'PR1', AUQUEL
< CAS E SWAPPING OUT SUR 'DKS' S'IMPOSE...
LXI NSPDKS < NON, ON FORCE DONC (X)='NSPDKS'...
<
< GENERATION DU NSPTYP DE LA DEMANDE DE SWAPPING :
<
Z70: EQU $
SWBR X,A < NSP DU NSPTYP.
SBT PRIO < UN SWAPPING OUT EST EXECUTE EN
< MODE PRIORITAIRE.
STA NSPTYP
LAI FGW
STA ARGDEM+OPDEM < UN SWAP-OUT EST UNE ECRITURE.
JMP E710 < VERS LE TRONC COMMUN SWAP IN/OUT.
<
< SWAPPING OUT NECESSAIRE :
<
Z754: EQU $
PLR L < RESTAURE (L)=@DCT-SERVICE.
JMP E735 < VERS L'EXECUTION DU SWAPPING OUT.
<
<
< S W A P P I N G O U T A P R I O R I :
<
<
< FONCTION :
< CETTE ENTREE DU 'SWAP',
< FAIT DU SWAPPING OUT A PRIORI,
< SANS EN TESTER LA NECESSITE...
<
<
SWAPOP: EQU $
ADRI DEMSWP-DCTESC,W < (W)=@DEMANDE DE SWAP DANS DCT-ESCLAVE.
LA NSPTYP
JAL E711 < LE SWAPPING EST BLOQUE POUR
< CET ESCLAVE (NOTER : (B)=K).
BSR ARGARM < (B)=RANG DU RELEASEUR MEMOIRE.
JMP E735 < ALLONS FAIRE LE SWAP OUT.
PAGE
<
<
< I N I T I A L I S A T I O N D E S L O & S L E :
<
<
< ARGUMENTS :
< BIT0(B)=1 : INITIALISER SLO & SLE,
< =0 : NE PAS LES INITIALISER.
< (W)=ADRESSE DCT(ESCLAVE).
< ('W' DESTRUCTIBLE).
< AMDEM(DEMSWP)=ADRESSE OCTET DE L'ESPACE MEMOIRE ESCLAVE,
< CODEM(DEMSWP)=TAILLE OCTET DE L'ESPACE MEMOIRE
< ESCLAVE.
<
<
< DETRUIT A & X.
<
<
< RESULTAT :
< (Y)=TRANSLATION EN MOT SUBIE PAR LE PROGRAMME.
<
<
USE W,DEM0
ISLOE: EQU $
LXI K < PAR PRUDENCE !!!???.!!.
TBT NBITMO+BBSOSI < L'INITIALISATION EST-ELLE
< NECESSAIRE...
JNC E723 < NON.
<
< INITIALISATION DE SLO :
<
ADRI DEMSWP-DCTESC,W < (W)=@DEMSWP.
LA ARGDEM+AMDEM
SLRS NOCMO=K < @MOT DE L'ESPACE MEMOIRE ESCLAVE.
ADRI SLOESC,A < VALEUR DE SLO*16
SLRS -DADR < VALEUR DE SLO
<
< CALCUL DE LA TRANSLATION SUBIE PAR
< LE PROGRAMME ESCLAVE :
<
LX PSTESC-DEMSWP+RSLO,W < SAVE (X)=SLO.AVANT,
SBR A,X < (X)=SLO.AVANT-SLO.APRES.
NGR X,X < (X)=SLO.APRES-SLO.AVANT.
XR A,X
BSR APDADR
XR A,X < X EST MAINTENANT EN MOTS
<
< A T T E N T I O N :
< MEME SI (X)=K, IL FAUT FAIRE
< LES OPERATIONS QUI SUIVENT, EN EFFET
< SINON, DANS LES CAS OU LA TAILLE
< DE L'ESPACE MEMOIRE ESCLAVE
< CHANGE (CF. LOAD-PROCESSOR), ON
< COURT A LA CATASTROPHE ?!!!...?
<
STA PSTESC-DEMSWP+RSLO,W < MAJ DE SLO DANS LA PST
< ESCLAVE.
<
< INITIALISATION DE SLE :
<
BSR APDADR < MISE DE A EN ADRESSE MOTS
ADRI -SLOESC-Z,A
LR A,Y < SAVE A DANS Y.
LA ARGDEM+CODEM
SLRS NOCMO=K < TAILLE MOT DE L'ESPACE MEMOIRE
< ESCLAVE.
ADR Y,A < VALEUR DE SLE*16
SLRS -DADR < VALEUR DE SLE
STA PSTESC-DEMSWP+RSLE,W < MAJ DE SLE DANS LA PST
< ESCLAVE.
E723: EQU $
<
< TRANSMISSION EVENTUELLE DE LA TRANSLATION
< SUBIE PAR LE PROGRAMME A OMOV2 :
<
LR X,Y < TRANSLATION EN MOTS.
RSR
PAGE
<
<
< E X E C U T I O N D E S D E M A N D E S
< D E S E R V I C E E S C L A V E :
<
<
< FONCTION :
< CE SOUS-PROGRAMME APPELE PAR
< UN AUTOMATE EST CHARGE DE RECU-
< PERER LA DEMANDE ESCLAVE ('DEMESC'),
< ET DE LA ENVOYER, VIA 'CHAND', A
< LA TACHE CONCERNEE PAR LE SERVICE
< RECLAME PAR L'ESCLAVE, PUIS D'AT-
< TENDRE LA FIN DE SERVICE...
<
<
< ARGUMENTS :
< (W)=ADRESSE DCT(ESCLAVE).
< (DESTRUCTIBLE)
< DEMESC(DCT ESCLAVE)=DEMANDE DE SERVICE ESCLAVE.
< (DANS LE FORMAT 'CHAND'...)
<
<
< RESULTAT :
< (Y)=K : AU CAS OU SERESC SERIAT APPELE PAR
< L'AUTOMATE OTOSNP AVEC CHAGRE MEMOIRE
< (SOIT 'OTOMO'), AFIN DE FORCER UN SWAPP
< OUT LORS DU PASSAGE QUI VA SUIVRE
< DANS 'SWAPPO'.
<
<
< A T T E N T I O N :
< SI NSP(DEMESC)=K : LE SERVICE DEMANDE, EST
< EN FAIT UN RESIDU DE SERVICE IMMEDIAT.
<
<
USE W,DEM0
SERESC: EQU $
<
< CHOIX ENTRE LES SERVICES-ESCLAVES ET LES FAUX SERVICES IMMEDIATS :
<
LBY DEMESC-DCTESC+XXNSP,W < ACCES AU NSP DE DEMESC.
JAE Z62 < C'EST UN FAUX SERVICE IMMEDIAT.
<
<
< S E R V I C E E S C L A V E :
<
<
ADRI DEMESC-DCTESC,W < (W)=@DEMANDE DE SERVICE ESCLAVE.
LX ARGDEM+OPDEM
PSR X < SAUVEGARDE DE 'OPDEM' AVANT LE SERVICE...
CPI NSPVI0 < EST-CE UNE VISU QUI EST DEMANDEE ???
JL Z62X1 < NON...
CPI NSPVIN < EST-CE UNE VISU QUI EST DEMANDEE ???
JG Z62X1 < NON...
LXI PHIN
CPBY &TASSGN-DEMESC,W < OUI, C'EST UNE VISU ; EST-CE AUSSI
< LE PERIPHERIQUE D'ENTREE ???
JE Z62X1 < OUI, C'EST LE PERIPHERIQUE D'ENTREE...
LA MEMV < NON...
TBT YBTOVI < ALORS FAUT-IL METTRE UN TIME-OUT ???
JNC Z62X1 < NON...
<
< CAS OU L'ECHANGE DEMANDE UNE VISU QUI
< EST DIFFERENTE DU PERIPHERIQUE D'ENTREE,
< ET YBTOVI=1 DANS 'MEMV' :
<
LA ARGDEM+OPDEM
SBT ZBTOVI < ON DEMANDE UN TIME-OUT
STA ARGDEM+OPDEM < DANS 'OPDEM'...
Z62X1: EQU $
PLR X < RESTAURE : (X)='OPDEM' AVANT.
<
< ENVOI DE LA DEMANDE DE L'ESCLAVE :
<
BSR ACHAND < ENVOI DE LA DEMANDE ESCLAVE.
LAI MKOPDM
ANDR X,A < (A)='OPDEM' AVANT L'ENVOI...
WAIT WEIO < ATTENTE DE LA FIN DE SERVICE
< ESCLAVE.
<
< RENVOI DES CONDITIONS DE FIN D'EXECUTION
< DU SERVICE A L'ESCLAVE DANS SON REGISTRE 'X' :
<
LY ARGDEM+ETADEM < ACCES AUX CONDITIONS DE RETOUR.
<*******************************************************************************
BSR ASTXES < EXECUTION DU STORE X(ESCLAVE) SUIVANT :
STY PSTESC-DEMESC+RX,W < MISE DANS LE REGISTRE 'X'
< DE L'ESCLAVE.
<*******************************************************************************
CPZR Y < LE SERVICE DE L'ESCLAVE S'EST-IL
< BIEN TERMINE ???
JNE E926 < NON, IL EST DONC INUTILE DE
< TESTER LE SYSTEME DE CONNEXIONS.
<
< EXPLOITATION EVENTUELLE DES
< CONNEXIONS MATRICIELLES :
<
PSR X
SVC SVCM8 < DUPLICATION EVENTUELLE DE LA DEMANDE
< COURANTE (W) SUR LES PERIPHERIQUES
< CONNECTES AU PERIPHERIQUE COURANT...
< (A)=FONCTION AVANT LE 'CHAND',
< (W)=ADRESSE DE LA DEMANDE COURANTE...
PLR X
<
< SORTIE DE 'SERESC' :
<
E926: EQU $
LYI FGR < AU CAS OU 'SWAPPO' SUIVRAIT...
RSR
PAGE
<
<
< R E S I D U D E S E R V I C E I M M E D I A T :
<
<
< FONCTION :
< PERMET L'EXECUTION DE SERVICE IMMEDIAT
< DONT UNE COMPOSANTE NE PEUT ETRE EXECUTEE
< DANS LE RUN-SVC, POUR DES RAISONS
< D'ALLOCATION MEMOIRE PAR EXEMPLE...
<
<
< ARGUMENT :
< (W)=ADRESSE DCT(ESCLAVE).
<
<
Z62: EQU $
<*******************************************************************************
BSR ASTXES < EXECUTION DU STORE X(ESCLAVE) SUIVANT :
STZ PSTESC-DCTESC+RX,W < RAZ DU REGISTRE 'X' DE L'ESCLAVE.
<*******************************************************************************
< POUR LUI INDIQUER UN RETOUR OK.
LA DEMESC-DCTESC+T+OPDEM,W
JAGE SYSRA6 < OK.
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< LE MIEUX EST DE FAIRE UN 'JMP E926'...
<
SYSRA6: EQU $
CPI NFON < VALIDATION FONCTION DEMANDEE.
JL SYSRA7 < OK.
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< LE MIEUX EST DE FAIRE UN 'JMP E926'...
<
SYSRA7: EQU $
LR A,X < (X)=FONCTION DEMANDEE (ANCIEN
< SERVICE IMMEDIAT (DE NVP=K).
BSR &AFOSIM < EXECUTION DU RESIDU DE SERVICE
< IMMEDIAT.
JMP E926 < GO BACK.
<
<
< F O N C T I O N S I N E X I S T A N T E S :
<
<
Z64: EQU $
BSR ASYSER < E R R E U R S Y S T E M E ...
<
<
< C A S D E S R E S I D U S V I D E S :
<
<
< FONCTION :
< CERTAINES FONCTIONS POURRAIENT
< NECESSITER UN PASSAGE PAR LES MODULES
< OMOV1/2, ET DONC UN PASSAGE DANS SERESC,
< MAIS ARRIVANT DANS SERESC, IL N'Y A PLUS
< RIEN OU ENCORE RIEN A FAIRE, ET L'ON EN
< SORT DONC IMMEDIATEMENT !!!
<
<
FOSIMV: EQU $
RSR
PAGE
<
<
< T A B L E D E S F A U X S E R V I C E S
< I M M E D I A T S :
<
<
CALL #SISP CMS5 DOL1#
FOSIM: EQU $
WORD Z64 < 0 : ERREUR SYSTEME.
WORD Z64 < 1 : ERREUR SYSTEME.
WORD RUNCCJ < 2 : CCI NON INTERACTIF.
IF $-FOSIM-D-FOCCIM,,XEIF%,
IF ATTENTION : LA TABLE 'FOSIM' EST MAUVAISE !!!
XEIF%: VAL ENDIF
WORD Z64 < 3 : ERREUR SYSTEME.
WORD Z63 < 4 : CHANGEMENT TAILLE MEMOIRE.
WORD Z320 < 5 : FAIT DODO MON PETIT ESCLAVE.
IF $-FOSIM-D-FONDOR,,XEIF%,
IF ATTENTION : LA TABLE 'FOSIM' EST MAUVAISE !!!
XEIF%: VAL ENDIF
WORD Z64 < 6 : ERREUR SYSTEME.
WORD Z64 < 7 : ERREUR SYSTEME.
WORD Z1932 < 8 : FAUSSE LECTURE ET ACCES ZDC.
IF $-FOSIM-D-FONFR,,XEIF%,
IF ATTENTION : LA TABLE 'FOSIM' EST MAUVAISE !!!
XEIF%: VAL ENDIF
WORD Z64 < 9 : ERREUR SYSTEME.
WORD Z1932 < A : FAUSSE ECRITURE ET MAJ ZDC.
IF $-FOSIM-D-FONFW,,XEIF%,
IF ATTENTION : LA TABLE 'FOSIM' EST MAUVAISE !!!
XEIF%: VAL ENDIF
PAGE
<
<
< A C C E S A U ' C C I ' I N T E R P R E T A T I F :
<
<
< FONCTION :
< AU LIEU DE SE BRANCHER DIREC-
< TEMENT A 'RUNCCI', ON INSERE AU
< PREALABLE, AU BOUT DE LA CARTE
< ARGUEMENT UN <EON>, AFIN DE
< RESOUDRE LE PROBLEME DES CARTES
< INCOMPLETES (IL Y MANQUE UN <EOM>
< EN QUEUE) ET DE LA REMANENCE DE
< 'BUFESC' (IL N'EST JAMAIS CLEARE).
< CECI AVAIT POUR CONSEQUENCES POUR
< LES CARTES "!ASSIGN <FILE>", ET
< LES CARTES COMPORTANT DES <CHAINE-
< HEXA-DECIMALE> D'INVENTER DES NOMS
< DE FICHIERS, OU BIEN DES CONSTANTES
< NON DESIREES, ET FONCTION DU CON-
< TENU ANTERIEUR DU 'BUFESC'...
<
<
< ARGUMENT :
< (W)=ADRESSE DE 'DCTESC'.
<
<
RUNCCJ: EQU $
<
< INSERTION D'UN <EON> EN BOUT DE CARTE :
<
LAD BUFESC-DCTESC,W
SBT BITX
STA VAR+ABUFGR < GENERATION D'UN RELAI INDEX VERS LE
< 'BUFESC' DE L'UTILISATEUR,
LA DEMESC-DCTESC+T+CODEM,W
< (A)=INDEX DU PREMIER CARACTERE SUIVANT
< LA CARTE ARGUMENT,
CPI LBUFES*NOCMO < N'Y-A-T'IL PAS DEBORDEMENT ???
JGE RUNCC7 < OUI, DONC ON NE FAIT RIEN, SOUS PEINE
< DE SORTIR DE 'DCTESC'...
LR A,X < NON,
< (X)=INDEX D'UN <EON> A FORCER...
IF Z-I,,XEIF%,
IF ATTENTION : (X) EST MAUVAIS !!!
XEIF%: VAL ENDIF
LAI EON
STBY &VAR+ABUFGR < ET ON FORCE UN <EON> EN QUEUE...
RUNCC7: EQU $
<
< BRANCHEMENT AU 'CCI' :
<
LRM A
WORD RUNCCI
PSR A
RSR < ET AINSI, ON SIMULE UN SAUT EN 'RUNCCI'.
PAGE
<
<
< C H A N G E M E N T D E L A T A I L L E
< M E M O I R E D ' U N E S C L A V E :
<
<
< ARGUMENT :
< CODEM(DEMESC)=NBRE D'OCTETS DEMANDES.
<
<
CALL #SISP CMS5 DOL2#
Z63: EQU $
LA DEMESC-DCTESC+T+CODEM,W
STA DEMSWP-DCTESC+T+CODEM,W
LBI K < REINITIALISATION DE B EN VUE
< DU CALCUL DU RANG DE L'ALLOCA-
< TEUR MEMOIRE SUIVANT.
BSR ARGAM1 < CHANGEMENT DU NUMERO D'ALLOCATEUR
< MEMOIRE ESCLAVE POUR LE SWAPPING
< IN SUIVANT.
RSR < MAINTENANT QUE LA DEMANDE
< DE SWAPPING EST MODIFIEE, ON
< A TERMINE CE DUR LABEUR.
PAGE
<
<
< M I S E E N S O M M E I L D E L ' E S C L A V E :
<
<
< FONCTION :
< 1 - CODEM(DEMESC)=DODCDA :
< L'UTILISATEUR EST MIS EN ATTENTE
< D'UNE VALEUR POSITIVE SUR LE MOT
< 'CDAG0' DE LA 'CDAG', OU BIEN SUR
< LE CHANGEMENT DE MINUTE (PSEUDO
< TIME-OUT..).
< 2 - 1<=CODEM(DEMESC)<=60 :
< CE MODULE MET EN SOMMEIL L'ESCLAVE
< POUR LA DUREE DONNE PAR CODEM(DEMESC) PAR
< L'INTERMEDIAIRE DU HANDLER DE
< SERVICE.
<
< CETTE MISE EN SOMMEIL EST DONC
< ININTERRUPTIBLE PAR ALT-MODE, CELUI-CI
< ETANT PRIS EN COMPTE EN FIN DE SERVICE...
<
<
< ARGUMENT :
< CODEM(DEMESC)=DUREE DE SOMMEIL EN SECONDES.
<
<
Z320: EQU $
LX DEMESC-DCTESC+T+CODEM,W
IF DODCDA-K,,XEIF%,
IF ATTENTION : 'DODCDA' EST INCOMPATIBLE
IF AVEC LES DUREES DE SOMMEIL REEL AINSI
IF QU'AVEC LE TEST QUI SUIT !!!
XEIF%: VAL ENDIF
CPZR X < ALORS SOMMEIL OU SYNCHRONISATION ???
JG Z320X1 < VRAI SOMMEIL...
JE Z320X3 < SYNCHRONISATION...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< COMPRENDRE, CAR 'HDLSVC' A
< ELIMINER LES DEMANDES AVEC UN
< 'COESC' NEGATIF !!!
<
JMP Z320X2 < ET ON SORT...
<
< SYNCHRONISATION SUR LE
< MOT 'CDAG0' DE LA 'CDAG' :
<
Z320X3: EQU $
RQST &ASEMCD < ET ON SE BLOQUE JUSQU'A :
< 1 - UN CHANGEMENT DE MINUTE,
< 2 - OU BIEN UNE VALEUR POSITIVE
< DE 'CDAG0' ; ON NOTERA QUE CETTE
< METHODE N'EST PAS SURE A 100%,
< EN EFFET CES CHANGEMENTS SONT
< DETECTES PAR 'IDLE' A CHAQUE
< FOIS QU'ELLE PREND LA MAIN,
< MAIS 'CDAG0' PEUR CHANGER DE
< VALEUR A UN RYTHME PLUS ELEVE...
< C'EST POURQUOI, EN PARTICULIER
< ON INTRODUIT LES PSEUDOS-
< TIME-OUT A CHAQUE CHANGEMENT
< DE MINUE...
JMP Z320X2 < ET C'EST TOUT...
<
< VRAI SOMMEIL :
<
Z320X1: EQU $
BSR ADODO < MISE EN SOMMEIL POUR LA
< DUREE (X).
<
< SORTIE DE LA MISE EN SOMMEIL :
<
Z320X2: EQU $
RSR < GO BACK LORS DU REVEIL.
PAGE
<
<
< F A U S S E S L E C T U R E S / E C R I T U R E S :
<
<
< FONCTION :
< CE RESIDU PERMET UN ACCES/MAJ EVENTUEL
< DE LA ZDC CONCERNANT QUELQUES UNS DES 15
< PREMIERS OCTETS DE BUFESC ET ZDC :
< 1- FONCTION '08 : FAUSSE LECTURE AVEC ACCES
< EVENTUEL AU PREALABLE A ZDC,
< 2- FONCTION '0A : FAUSSE ECRITURE SUIVIE
< D'UNE EVENTUELLE MODIFICATION DE ZDC.
< DE PLUS, SI LE BIT 'XTBFRW' EST A 1
< L'OPERATION EST PRECEDEE D'UNE TEMPO-
< RISATION DE 2 SECONDES...
<
<
< ARGUMENT :
< ARGUM(DCTESC)=LISTE DE VALIDATION DES 15 PREMIERS
< OCTETS DE BUFESC ET ZDC ; LE DERNIER
< BIT ('XTBFRW') INDIQUE S'IL FAUT TEM-
< PORISER (=1) OU PAS (=0) PENDANT 2
< SECONDES AVANT L'OPERATION DEMANDEE.
<
<
Z1932: EQU $
<
< RECUPERATION DES ARGUMENTS :
<
PSR B < SAVE LE REGISTRE DE PASSAGE DES
< CONDITIONS DE SWAP.
LYI MKESEF < MASQUE D'ACCES AUX BITS 13 A 15.
ANDR X,Y < (Y)=K : IL S'AGIT D'UNE LECTURE,
< =2 (#0) : C'EST UNE ECRITURE.
LB ARGUM-DCTESC,W < ACCES A LA LISTE DE VALIDATION
< DES OCTETS DE BUFESC ET ZDC.
<
< TEMPORISATION EVENTUELLE :
<
XTBFRW:: VAL NBITMO-B < LE DERNIER BIT DE LA LISTE ARGUMENT NE
< DESIGNE PAS UN OCTET DE LA 'ZDC', MAIS
< EST UN INDICATEUR DE TEMPORISATION :
< 0 : PAS DE TEMPORISATION AVANT LES OPE-
< RATIONS,
< 1 : ON TEMPORISERA 2 SECONDES AVANT
< L'OPERATION DEMANDEE.
XTDFRW:: VAL W+W < DUREE DE LA TEMPORISATION DE PRE-OPE-
< RATION...
IF XTDFRW-W,,,XEIF%
IF ATTENTION : POUR ETRE SUR DE LA DUREE, IL
IF FAUT QUE CELLE-CI SOIT SUPERIEURE A 1 SECONDE !!!
XEIF%: VAL ENDIF
TBT NBITMO+XTBFRW < UNE TEMPORISATION EST-ELLE DEMANDEE ???
RBT NBITMO+XTBFRW < (ON LA CLEAR A PRIORI...)
JNC Z1932X < NON...
LXI XTDFRW < OUI :
BSR ADODO < ON FAIT UN DODO DE 2 SECONDES...
<
< PREPARATION DE L'ACCES 'ZDC' :
<
Z1932X: EQU $
LAD BUFESC-DCTESC,W < (A)=@BUFESC.
SBT BITX < POSITIONNEMENT DU BIT INDEX.
STA VAR+ABUFGR < GENERATION D'UN RELAI VERS
< LE BUFFER ESCLAVE 'BUFESC'.
RQST &ASMATX <<<< PHASE CRITIQUE SUR ZDC.
<
< BOUCLE DE TRAITEMENT DES OCTETS VALIDES :
<
Z1930: EQU $
LR B,A < ACCES A LA LISTE DE VALIDATION
< COURANTE (B).
JAE Z1934 < IL N'Y A PLUS D'OCTETS A TRAITER.
DBT < (X)=NUMERO DE L'CTET A TRAITER.
RBT NBITMO+L,X < ET MEMORISATION DANS B DE SON
< TRAITEMENT.
CPZR Y < TEST DU SENS LECTURE (Y=K) OU
< ECRITURE (Y#0).
JNE Z1931 < ECRITURE : BUFESC-->ZDC.
<
< TRAITEMENT DES MODOFICATIONS DE BUFESC PAR ZDC :
< (ZDC-->BUFESC)
<
LBY &AZDC < ACCES A ZDC,
STBY &VAR+ABUFGR < ET MODIFICATION DE ZDC.
JMP Z1930 < A L'OCTET SUIVANT...
<
< CAS DES MODIFICATIONS DE ZDC PAR BUFESC :
< (BUFESC-->ZDC)
<
Z1931: EQU $
LBY &VAR+ABUFGR < ACCES A BUFESC,
STBY &AZDC < ET MODIFICATION DE ZDC.
JMP Z1930 < A L'OCTET SUIVANT.
<
< FIN DES FAUSSE LECTURES/ECRITURES :
<
Z1934: EQU $
PSR A
LAD &ASMATX
BSR ARLSE <<<< FIN DE PHASE CRITIQUE SUR ZDC
PLR A
PLR B < RESTAURE LE REGISTRE DE PASSAGE
< DES CONDITIONS DE SWAP.
RSR < ET C'EST TOUT...
<
<
< Z O N E D E D O N N E E S C O M M U N E S :
< ( ' Z D C ' )
<
<
CALL #SISP CMS5 CHECK#
CALL #SISP CMS5 DOL1#
ZDC: EQU $
LOZDC:: VAL XTBFRW < LONGUEUR DE LA 'ZDC'... (EN OCTETS)
NTRN
DZS LOZDC+NOCMO-E/NOCMO
TRN
PAGE
<
<
< M A T R I C E D E C O N N E X I O N :
<
<
< NOTA :
< CETTE MATRICE DE CONNEXION
< INTER-NSP EST RESERVEE AUX
< 32 (2*16) PREMIERS 'NSP' DU
< SYSTEME, ET ASSURE DES FONC-
< TIONS DE DUPLICATION ET D'ES-
< PIONNAGE...
<
<
MATX: EQU $
DO NBITMO*UMATCO
DZS UMATCO < 2 MOTS PAR NSP : 32 CONNEXIONS.
PAGE
<
<
< T R A N S C O D A G E D E S F O N C T I O N S :
<
<
< UTILISATION :
< CETTE TABLE DE TRANSCODAGE EST
< INDEXEE PAR LA FONCTION ARGUMENT D'UNE
< DEMANDE ; ELLE DONNE DANS L'OCTET INDEXE
< LA FONCTION TRANSCODEE A UTILISER
< SUR LES NSP CONNECTES A NSP1 ; SI
< LA FONCTION TRANSCODEE EST 'FF, CELA
< SIGINIFIE QUE LA FONCTION ARGUMENT
< N'EST PAS CONNECTABLE (PAR EXEMPLE
< LA LECTURE DU CURSEUR GRAPHIQUE SUR
< LES VISUS).
< CETTE TABLE EST CONSTRUITE EN FAIT
< A PARTIR DES FONCTIONS ACCESSIBLES
< SUR LES VISUS, ET QUI PROFITENT
< PRESQUE EXCLUSIVEMENT DES CONNEXIONS
< MATRICIELLES.
<
<
FONX: EQU $
BYTE FGW;FGW < LA LECTURE ALPHA-NUMERIQUE
< AVEC OU SANS ECHO EST TRANSCODEE
< SOUS FORME D'UNE ECRITURE
< ALPHA-NUMERIQUE ('02).
BYTE FGW;FAVOG < L'ECRITURE ALPHA-NUMERIQUE ET
< L'OPEN GRAPHIQUE SONT TRANSCODES
< TELS QUELS.
BYTE FAVCG;FAVER < DE MEME LE CLOSE GRAPHIQUE ET
< L'EFFACEMENT DE L'ECRAN.
BYTE FIMATC;FAVWD < L'AFFICHAGE DU CURSEUR GRAPHIQUE
< ('06) EST REFUSEE, ET L'ECRITURE
< DIRECTE SUBSISTE.
BYTE FIMATC;FAVCG < LA LECTURE DU CURSEUR ALPHA-
< NUMERQIE EST REFUSEE, ET LA
< LECTURE DU CURSEUR GRAPHIQUE
< EST TRANSCODEE EN UN CLOSE
< GRAPHIQUE ('04).
BYTE FAVWG;K < L'ECRITURE GRAPHIQUE SUBSISTE.
Copyright © Jean-François COLONNA, 2011-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2011-2024.