< 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.