< S I S C M S 5 7 PAGE PAGE < < < T A C H E A L A R M E : < < < FONCTION: < CETTE TACHE RECUPERE TOUTES LES ALARMES,ET EN < PARTICULIER LES ACTD.LORSQU'UN HANDLER SE TROUVE < EN ERREUR (INFORMATION ERRONEE,ETC...),IL < APPELLE LA TACHE ALARME PAR ACTD.L'AVANTAGE DE < CELUI-CI SUR LE JMP/JC/JE...$ EST QUE L'ACTD < ARME LA TACHE LA PLUS PRIORITAIRE DU SYSTEME, < ET LES AUTRES IT (NIVEAUX 1 A 15) ATTENDENT. < L'ETAT DU SYSTEME SE TROUVE AINSI FIGE CE QUI < FACILITE LE DEBUG. < MAIS N'OUBLIONS PAS QUE DEFSEC PEUT PASSER LORS < D'UN APPEL A TDEFS (DETECTION DEFAUT SECTEUR). < MAIS CELUI-CI TRAVAILLE TRES PROPREMENT ET NE < NOUS GENE NULLEMENT.DE PLUS CETTE TACHE < RECUPERE LES ACTD ESCLAVES: < 1E1D : (STAR) EST LE COMPLEMENT DE '1E15, < ET PERMET DE RANGER UNE CERTAINE VALEUR < 'V' A L'ADRESSE CONTENUE DANS A, OU < BIEN DANS DCTSY SI A CONTIENT UN 'NSP'+Q8000 ; < V=(B) SI (Y)=K (MODE ABSOLU), < V=(B)+(SLO)*16 SI (Y)#0 (MODE TRANSLATABLE). < 1EF5 : 'TEST & SET' SYNCHRO-USER 7, < 1EE5 : 'TEST & SET' SYNCHRO USER 6, < 1ED5 : 'TEST & SET' SYNCHRO USER 5, < 1EC5 : EXECUTION D'UN SOUS-PROGRAMME MODE-MAITRE !!! < 1EB5 : PRESC<--(A(ESCLAVE)), < SI (A(ESCLAVE))<0 : ON INHIBE LES ALT-MODES < SOLITAIRES. < 1EA5 : SI (A(ESCLAVE)) EST UN CARACTERE ASCI < ACCESSIBLE AU CLAVIER DE LA VISU, IL < DEVIENT LE CARACTERE D'ABORT COURANT, < SI BIT0=1 ET BIT1=K DANS A(ESCLAVE), LES < BITS2-15 DEVIENNENT LA VALEUR INITIALE DU < DETECTEUR DE TIME OUT DE LA VISU, < SI BIT0=BIT1=1 : LES BITS2-15 DEVIENNENT < L'AUTORISATEUR/INHIBITEUR DES EXPANSIONS/ < EXTENSIONS DE LA VISU, < 1E95 : RENVOI DANS A(ESCLAVE) DU NSPOUT < CONCATENE AVEC LE NSPVI1, < 1E85 : RENVOI DANS A(ESCLAVE) DE L'HEURE < EXPRIMEE EN MULTIPLE DE 2 SECONDES, < 1E75 : 'RESET' SYNCHRO USER 7, < 1E65 : 'RESET' SYNCHRO USER 6, < 1E55 : 'RESET' SYNCHRO USER 5, < 1E45 : RENVOI DANS A(ESCLAVE) DE 'IDESC', < 1E35 : A(ESCLAVE)<--LA TAILLE DE L'ESPACE < MEMOIRE DE L'ESCLAVE A CET INSTANT, ET < B(ESCLAVE)<--(BOX(DEMESC)) COURANTE, < 1E25 : RENVOI DANS A,B(ESCLAVE) DE L'ACNESC, < 1E15 : RENVOIE DANS B(ESCLAVE) LE CONTENU < DU MOT DONT L'ADRESSE EST CALCULEE < COMME SUIT : < 1- (A)>=K : B<--((A)), < 2- (A)<0 : B<--(DCTSY((A).AND.'7FFF)), < (B) EST ALORS EN FAIT UN RELAI... < 1E05 : TRAPPE. < < < NOTA : < POUR PALLIER A UN DEFAUT DE 'CDAJ', < 'TH0' PEUT IGNORER LES ALARMES "MEMOIRE < INEXISTANTE" DES UTILISATEURS, ET CECI < EN FONCTION DU MOT 'MEMINX' DE LA < MEMOIRE DEBANALISEE... < < PAGE < < < D E F I N I T I O N D E Q U E L Q U E S C O D E S < O P E R A T I O N U T I L E S : < < CALL #SISP CMS5 DOL1# SAVE1: EQU $ < SAUVEGARDE DU '$'... <******************************************************************************* ACTD K XACTD:: VAL '0000000@@@@ < CODE DE L'ACTD. <******************************************************************************* <******************************************************************************* ACTD 15 XACTDF:: VAL '0000000@@@@ < CODE DU DERNIER 'ACTD' UTILISATEUR. <******************************************************************************* <******************************************************************************* QUIT XQUIT:: VAL '0000000@@@@ < CODE DU QUIT. <******************************************************************************* <******************************************************************************* STAR XSTAR:: VAL '0000000@@@@ < CODE DU STAR. <******************************************************************************* $EQU SAVE1 < ANNULATION DU CODE GENERE... MKSL:: VAL XACTD)XACTDF < MASQUE D'IDENTIFICATION DES INSTRUCTIONS. IF MKSL-XXZOP,,XEIF%, IF ATTENTION : 'MKSL' EST PEUT-ETRE MAUVAIS !!! XEIF%: VAL ENDIF PAGE < < < L O C A L : < < LOCAL LOCTH0: EQU $ < LOCAL TH0... < < QUELQUES CODES OPERATION : < ACTDSL: WORD XACTD < ACTD ESCLAVE (POUR TEST INSTRUCTION < ESCLAVE). RSTSL: WORD XQUIT < 1EX6 ESCLAVE... XWOR%1: VAL MKSL)MFFFF < COMPLEMENTATION... STARSL: WORD XSTAR(XWOR%1 < CODE DU 'STAR' A '0 PRES (EN FAIT '1E1D). < < RELAIS D'ACCES A LA < PILE DE 'TH0' : < AXPLH0: WORD PILTH0+DEPILE,X < RELAI INDEXE SUR LA PILE TH0 < POUR ACCEDER AUX REGISTRES < A, B, X, Y, L, W, SLO, SLE DE LA < TACHE SOFT APPELANTE... APLH0: WORD PILTH0+DEPILE < IDEM MAIS NON INDEXE... APSTHS: WORD PSTH00+HS-HC < RELAI D'ACCES AU REGISTRE S < DE LA TACHE INTERROMPUE < PAR TH0... < < EXECUTION DES ACTD ESCLAVES : < ACTDU: WORD AZ401,X AZ401: WORD Z401 < 1E05. WORD RECABS < 1E15. XXXABS:: VAL $-D-AZ401 WORD RECACN < 1E25. XXXACN:: VAL $-D-AZ401 WORD RECSIZ < 1E35. XXXSIZ:: VAL $-D-AZ401 WORD RECID < 1E45. XXXID:: VAL $-D-AZ401 WORD RECRST < 1E55 (X=5). XXXRT1:: VAL $-D-AZ401 WORD RECRST < 1E65 (X=6). XXXRT2:: VAL $-D-AZ401 WORD RECRST < 1E75 (X=7). XXXRT3:: VAL $-D-AZ401 WORD RECDAT < 1E85. XXXTIM:: VAL $-D-AZ401 WORD RECOUT < 1E95. XXXOUT:: VAL $-D-AZ401 WORD RECALT < 1EA5. XXXALT:: VAL $-D-AZ401 WORD RECPRE < 1EB5. XXXPRE:: VAL $-D-AZ401 WORD RECMST < 1EC5. XXXMST:: VAL $-D-AZ401 WORD RECSET < 1ED5 (X=5+8). XXXST1:: VAL $-D-AZ401 WORD RECSET < 1EE5 (X=6+8). XXXST2:: VAL $-D-AZ401 WORD RECSET < 1EF5 (X=7+8). XXXST3:: VAL $-D-AZ401 XWOR%1: VAL $-AZ401 < LONGUEUR DE LA LISTE DES 'ACTD'. XWOR%2: VAL MKSL=K XWOR%2: VAL -XWOR%2 < POUR UN DECALAGE A DROITE... XWOR%3: VAL MKSL>XWOR%2+Z < NOMBRE DE 'ACTD' UTILISATEUR (+1 CAR < CEUX-CI COMMENCENT A '0). IF XWOR%1-XWOR%3,,XEIF%, IF ATTENTION : CONFLITS DANS LA LISTE DES 'ACTD' !!! XEIF%: VAL ENDIF XWOR%1: VAL MKSL=K IF XXXABS>XWOR%1?XACTD-COGETM,,XEIF%, IF ATTENTION : 'COGETM' EST MAUVAIS !!! XEIF%: VAL ENDIF IF XXXID>XWOR%1?XACTD-COIDES,,XEIF%, IF ATTENTION : 'COIDES' EST MAUVAIS !!! XEIF%: VAL ENDIF <******************************************************************************* XWOR%F: VAL XXXABS XXXABS: @VAL '0@@@@ < LECTURE ABSOLUE DE LA MEMOIRE. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL XXXACN XXXACN: @VAL '0@@@@ < RECUPERATION DE. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL XXXSIZ XXXSIZ: @VAL '0@@@@ < RECUPERATION DE LA 'BOX' ENTRE AUTRES. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL XXXID XXXID: @VAL '0@@@@ < RECUPERATION DE 'IDESC'. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL XXXTIM XXXTIM: @VAL '0@@@@ < ACCES A L'HEURE EN MULTIPLE DE 2S. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL XXXOUT XXXOUT: @VAL '0@@@@ < ACCES A / . CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL XXXALT XXXALT: @VAL '0@@@@ < CHANGEMENT DU CARACERE D'ABORT COURANT. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL XXXPRE XXXPRE: @VAL '0@@@@ < CHANGEMENT DU 'PRESC'. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL XXXMST XXXMST: @VAL '0@@@@ < EXECUTION D'UN PROGRAMME MODE MAITRE. CALL #SISP CMS5 GEN CTE# <******************************************************************************* ASTAR: WORD STAR < TRAITEMENT DU 'STAR' ESCLAVE. < < POUR TRAITER LES ALARMES "MEMOIRE < INEXISTANTE" DES UTILISATEURS : < AMEMX: WORD MEMINX < ADRESSE DE L'INDICATEUR EN MEMOIRE < DEBANALISEE. AAOCDA: WORD OCDA < POUR TESTER LA 'CDA' COURANTE... < < RELAIS DES ROUTINES DU RECOVERY : < ADUMP: WORD DUMP < DUMP 32 K MOTS. AIMPB: WORD IMPB < ROUTINE D'IMPRESSION DE (B). AIMPM: WORD IMPM < ROUTINE D'IMPRESSION MESSAGE. AIMPLF: WORD IMPLF < ROUTINE IMPRIMANT UN 'LF'. AIMPRC: WORD IMPRC < ROUTINE IMPRIMANT UN 'RC'. AIMPSP: WORD IMPSP < @ROUTINE IMPRIMANT UNE SUITE < DE 'SPACE'. ADBGV: WORD DBGV < ROUTINE DE VALIDATION DE < L'ADRESSE COURANTE. AIMPK: WORD IMPK < IMPRESSION D'1 CARACTERE. ALIRK: WORD LIRK < ROUTINE LECTURE 1 CARACTERE SUR < TTYS AVEC ELIMINATION DES < SPACE ET DU BIT0 DU CARACTERE. ABASK: WORD BASK < BASCULEMENT DES ARGUMENTS < DE SIO LP1/TTY1 AE812: WORD E812 < REBLOCAGE DU RECOVERY (JMP $). AE890: WORD E890 < VERS LA TRACE/DEBUG. ATRAPH: WORD TRAPH < RECUPERATION DES REGISTRES DE L'ESCLAVE < EN CAS DE TRAPPE... ASIPST: WORD SIPST < RECONSTITUTION D'UNE 'PSTESC'. AIMEMY: WORD IMEMY AFITH0: WORD FITH0 < EPILOGUE SPECIFIQUE DE 'TH0'. ARCABS: WORD RCABS < SOUS-PROGRAMME EXECUTANT LA FONCTION < 'RECABS' (MIS EN S/P A CAUSE DES SAUTS < DE LA MORT...). < < CONSTANTES DU RECOVERY : < PUPTH0: WORD ACPUP?FPHCME < POUR ATTEINDRE LES VOYANTS DU BAS < DU PUPITRE... XXTYLP:: VAL K < DISCRIMINATEUR TTY/LP1... IF XXTYLP-K,,XEIF%, IF ATTENTION : CA VA MERDER !!! XEIF%: VAL ENDIF IMPTTY: WORD XXTYLP < INDICATEUR TTY/LP1 (POUR < IMPK)=K LP1;#0 SI TTY IMPC: WORD ACLP1?FPHOUT < SORTIE INFORMATION EN MODE < PROGRAMME SIMPLE SUR LP1 IMPI: WORD ACLP1?FPHCMD < SORTIE COMMANDE SUR LP1 IMPETA: WORD ACLP1?FPHETA < ENTREE MOT D'ETAT TTYE: WORD ACTTY1?FPHIN < ENTREE INFORMATION TTYS TTYC: WORD ACTTY1?FPHOUT < SORTIE INFORMATION TTYS TTYI: WORD ACTTY1?FPHCMD < SORTIE COMMANDE TTYS TTYETA: WORD ACTTY1?FPHETA < ENTREE MOT ETAT TTYS CLESPU: WORD NILK < CLES DU PUPITRE DBGCP: WORD NILK < MEMORISATION DE LA COMMANDE < PRECDENTE DU DEBUG. DBGMC: WORD NILK < NBRE COURANT LU OU EN COURS < DE LECTURE (ET D'ASSEMBLAGE). DBGADC: WORD NIL < ADRESSE COURANTE TRAITEE EN < MEMOIRE. < < RELAIS DE TABLES : < IMPA: WORD NIL < RELAI INDIRECT-INDEX VERS LE < MESSAGE COURANT. ASPMST: EQU IMPA < RELAI TEMPORAIRE VERS UN SOUS- < PROGRAMME A EXECUTER EN MODE < MAITRE !!! IMPDAT: WORD DATE+XXDAT9 < ADRESSE D'UNE PARTIE DU < MESSAGE DE DATE CMS4. < < CONSTANTES DE PATCH DU SYSTEME : < AZPTCH: WORD ZPATCH < @COURANTE DE LA ZONE DE PATCH, < INTIALISEE SUR ZPATCH. LZPTCH: WORD LPATCH < LIMITE SUPERIEURE DE LA ZONE < DE PATCH. GRTRAP: WORD ARTRAP < INDEX DE LA GRAMMAIRE DU CCI < EN CAS DE TRAPPE D'UN ESCLAVE. < < MESSAGES : < IMPTD: EQU $ @BYTE " ";KCR;KLF;KD;KE;KB;KU;KG;KCR;KLF CALL #SISP CMS5 BYTE# IMPT: EQU $ @BYTE " ";KCR;KFF;KCR;KLF;KSP;KT;KR;KA;KC;KE;KSP;KSP;KSP;KCR CALL #SISP CMS5 BYTE# IMPX: EQU $ @BYTE " ";KSP;KSP;KSP;KX;KEGAL CALL #SISP CMS5 BYTE# IMPIT: EQU $ @BYTE " ";KI;KT;KSP CALL #SISP CMS5 BYTE# IMPID: EQU $ @BYTE " ";KI;KD;KL;KE;KSP;KSP;KSP CALL #SISP CMS5 BYTE# IMPCH: EQU $ @BYTE " ";KC;KH;KA;KN;KD;KSP CALL #SISP CMS5 BYTE# IMPV: EQU $ @BYTE " ";KMOINS;KMOINS;KSUP;KSP CALL #SISP CMS5 BYTE# IMPHDL: EQU $ @BYTE " ";KH;KD;KL CALL #SISP CMS5 BYTE# IMPNUL: EQU $ @BYTE " ";KAROND;KEGAL;KZERO CALL #SISP CMS5 BYTE# IMPCAL: EQU $ @BYTE " ";KA;KC;KT;KD;KSP;KB;KY;KSP CALL #SISP CMS5 BYTE# IMPAD: EQU $ @BYTE " ";KSP;KAROND;KSP CALL #SISP CMS5 BYTE# IMPDMP: EQU $ @BYTE " ";KCR;KFF;KCR;KLF;KD;KU;KM;KP;KCR CALL #SISP CMS5 BYTE# < < TABLES D'INITIALISATION DE LA DATE : < DATM: EQU $ @BYTE " ";KCR;KLF;KPE;KD;KA;KT;KE;KPI;KSP CALL #SISP CMS5 BYTE# INTDAT: WORD YNTDAT,X YNTDAT: EQU $ ASCI " AMJHMS " DATINI: WORD VARHOR+DATHOR,X < RELAI VERS DATHOR DE HDLHOR. DATMAX: WORD TMOIS,X < ACCES A LA TABLE DONNANT LE < NOMBRE DE JOURS DE CHAQUE MOIS. IF MINUTE-HEURE,,XEIF%, IF ATTENTION : LA CONSTANTE SUIVANTE N'A PAS DE SENS !!! XEIF%: VAL ENDIF DAT60: WORD MINUTE < POUR FAIRE DES CALCULS EN < SECONDES SUR LA DATE. < < TABLE DE COMMANDE DU DEBUG : < DBGC0:: VAL KET < 1ERE COMMANDE DU DEBUG. XWOR%1: VAL COSBT?BITPAR=FMASK(K=FCINST NTRN DBGC00:: VAL DBGC0/XWOR%1*XWOR%1 < CALCUL DU BIT DE PARITE. TRN DBGVAL: WORD YBGVAL,X YBGVAL: EQU $ WORD DBGNCP;E892;DBGAP;DBGMAP WORD DBGIND;DBGP;DBGST;DBGM;DBGIMP;DBGCL XWOR%3: VAL BASE10 DO XWOR%3 WORD Z=FCDO-XWOR%3)MFFFF+N WORD DBGCLA;DBGFIN;DBGST;DBGIAC WORD DBGIMP;IRSTF;DBGADR XWOR%2: VAL BASE16-XWOR%3 DO XWOR%2 WORD Z=FCDO-XWOR%2)MFFFF+N+XWOR%3 PROG CALL #SISP CMS5 DOL2# < < < P I L E D E ' T H 0 ' : < < < NOTA : < ETANT ATTEINTE PAR DES RELAIS < INDIRECTS-INDEXES, CELLE-CI < DOIT ETRE EN MEMOIRE BASSE ; ELLE < A ETE IMPLEMENTEE DEVANT LA < GRAMMAIRE DU 'CCI'... < < PAGE < < < R E C O V E R Y - D E B U G - T R A C E : < < DEPL0:: VAL DEPBAS < DEPLACEMENT DE LA BASE 'L' DE 'TH0'. XWKNIV: VAL TH0 < NIVEAU TACHE HARD CALL #SISP CMS5 THDEB# < PROLOGUE TACHE HARD PAGE < < < D E F I N I T I O N D E S R E G I S T R E S < D A N S L A P I L E D E ' T H 0 ' : < < RH0A:: MOT O < REGISTRE 'A', RH0B:: MOT RH0A+D < REGISTRE 'B', TH0X:: MOT RH0B+D < REGISTRE 'X', TH0Y:: MOT TH0X+D < REGISTRE 'Y', TH0L:: MOT TH0Y+D < REGISTRE 'L', TH0W:: MOT TH0L+D < REGISTRE 'W', TH0SLO:: MOT TH0W+D < REGISTRE 'SLO', IF THDSLO-DEPILE-TH0SLO,,XEIF%, IF ATTENTION : 'THDSLO' EST MAUVAISE !!! XEIF%: VAL ENDIF TH0SLE:: MOT TH0SLO+D < REGISTRE 'SLE'. < < < D E F I N I T I O N D E S R E G I S T R E S < D A N S ' P S T H 0 ' : < < RH0C:: MOT HC-PSTH < REGISTRE 'C', TH0K:: MOT HK-PSTH < REGISTRE 'K', TH0P:: MOT HP-PSTH < REGISTRE 'P', TH0S:: MOT HS-PSTH < REGISTRE 'S'. LPSTH0:: VAL NTH0*LPSTH < TRANSLATION D'ACCES A 'PSTH0'. PAGE < < < I N I T I A L I S A T I O N D E S B A S E S : < < LRM L,W WORD LOCTH0+DEPL0 < (L)=BASE LOCAL TH0, WORD K < (W)=K POUR LA TRACE. USE L,LOCTH0+DEPL0 RECOV: EQU TH00 < < T R A C E D U R E C O V E R Y : < LAI XNTRA < FAUX NIVEAU D'IT 2 (TRACE). BSR ATRACE PAGE < < < T R A I T E M E N T D E S P A R I T E S M E M O I R E : < < 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 < NUMERO D'ALARME... CPI ALPAR < EST-CE UNE PARITE HORS DU MODE 'DEBUG'??? JNE E601X1 < NON... PSR A < OUI, ESSAYONS DE L'EFFACER, LAI K RST < LECTURE DU REGISTRE 'ST'...'. TBT DEBUG < EST-ON DEJA EN MODE 'DEBUG' ??? JNC SYSE10 < NON, OK... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ATTENTION, A LA SORTIE DE < 'TH0' PUISQU'ON EFFACE CE < MODE : DONC LES POINTS D'AR- < RET ANTERIEURS AURONT DISPARUS !!! < SYSE10: EQU $ LAI K SBT DEBUG SST < PASSAGE AU MODE 'DEBUG'... LRM A,B,Y WORD SO < 'SLO'='ZERO', WORD SE < 'SLE'=64K, WORD K64-Z*LK+LK-Z < (Y)=ADRESSE DU DERNIER MOT. WOE < INITIALISATION DE 'SLO' ET 'SLE'... E601X2: EQU $ DBP < RECHERCHE DE LA PREMIERE PARITE, JNCV E601X3 < C'EST FINI... JNV SYSE11 < OK... BSR ASYSER < M E M O I R E I N E X I S T A N T E ?!? < < QUE FAIRE ??? < IL CONVIENT DE NOTER < L'ADRESSE DE CETTE MEMOIRE < INEXISTANTE, ET VERIFIER < SI CELA EST VRAI !!! < SYSE11: EQU $ JC SYSE12 < OK... BSR ASYSER < P A S D E P A R I T E ???!??!! < < QUE FAIRE ??? < COMPRENDRE COMMENT L'ALARME < A PU APPARAITRE, ET NE PLUS < EN TROUVER LA CAUSE !!! < SYSE12: EQU $ RBP < ESSAYONS D'EFFACER LA PARITE... ADRI -P,Y < ET PASSAGE AU MOT PRECEDENT, CPZR Y < EXISTE-T'IL ??? JGE E601X2 < OUI... E601X3: EQU $ < NON, C'EST FINI... LAI K SBT DEBUG RST < EFFACEMENT DU MODE DEBUG... PLR A E601X1: EQU $ PAGE < < < T R A I T E M E N T D E S A P P E L S E N T R E < L E P R O C E S S E U R E S C L A V E E T < M A I T R E : < < LR A,Y < ...DANS Y CPI ALIPIX < EST-CE UNE ALARME IPI? JNE E601 < < UN 'IPI' A ETE RECU ESCLAVE --> MAITRE : < CALL #SISP CMS5 W TRACE# LAI NPIPI BSR ATRACE JMP E823 PAGE < < < D I S C R I M I N A T I O N E N T R E L E S N I V E A U X < ' H A R D ' E T ' S O F T ' : < < E601: EQU $ RDHV < LECTURE HV POUR CONNAITRE LA < LISTE DES TACHES HARD EN COURS < DE TRAITEMENT RBT NTH0 < RAZ DU TRAITEMENT DE TH0 (RECO- < VERY FORCEMENT MONTE, PUISQU' < ACTIF... JAE E600 < SI (A)=K, C'EST QU'UNE TACHE < SOFT A APPELEE. < < < C A S D ' U N E T A C H E ' H A R D ' : < < DBT < RECHERCHE DU NIVEAU DE LA TACHE < HARD APPELANTE. LR X,A XXBTHS:: VAL BITSIG < BIT UTILISE POUR DISCRIMINER LES < TACHES HARD DES TACHES SOFT... SBT XXBTHS < ON MET DANS 'A' : < BIT0(A)=1, < BIT1-15(A)=NUMERO DE LA TH. JMP Z236 < VERS TRAPPE SYSTEME ARECOV: JMP RECOV < RELAI VERS 'RECOV' : ON NE PEUT UTILISER < UN MOT DU LOCAL, CAR LORSQU'ON A BESOIN < DE CE RELAI, LA BASE 'L' EST MAUVAISE... < < < C A S D ' U N E T A C H E ' S O F T ' : < < E600: EQU $ LX &NS ADRI -NSNSP0,X < NSP TACHE SOFT APPELANTE LB &ADCTSY < ACCES A L'ADRESSE DE LA DCT LR B,W < DANS W LR X,A < DANS A ON A: < BIT0(A)=K < BITS1-15(A)=NSP TACHE SOFT CPI NSPACT < EST-CE UN ESCLAVE ??? CE TEST EST < PREFERABLE A CELUI DU BIT DE MODE < DU REGISTRE 'S', CAR EN EFFET, PAR < EXEMPLE A LA SUITE D'UNE VIOLATION < MEMOIRE LORS DE L'EXECUTION DE < L'INSTRUCTION 'SVC', L'ESCLAVE SE < RETROUVE EN MODE MAITRE !!! JNE Z236 < NON, DONC IL S'AGIT < D'UNE ERREUR SYSTEME,OU < D'UN ARRET CALCULATEUR SUR < HORLOGE. PAGE < < < T R A P P E S E S C L A V E S : < < < FONCTION : < DISCRIMINE LES TRAPPES ESCLAVES VOLONTAIRES < DE CELLES QUI NE LE SONT PAS. LORSQU'UNE TRAPPE < EST INVOLONTAIRE, LE CONTROLE EST RENDU AU CCI, < POUR L'ENVOI DU MESSAGE ' ' ; LES TRAPPES < SONT VOLONTAIRES LORSQU'ELLES SONT CAUSEES PAR < UN 'ACTD' : < '1E05 : TRAPPE, < '1E15 : 1- (A(ESCLAVE))>=K : < B(ESCLAVE)<--((A(ESCLAVE))), < 2- (A(ESCLAVE))<0 : < B(ESCLAVE)<--(DCTSY((A(ESCLAVE)) < .AND.'7FFF)), < '1E25 : A,B(ESCLAVE)<--'ACNESC', < '1E35 : A(ESCLAVE)<--(SLE)-(SLO)+1, ET < B(ESCLAVE)<--(BOX(DEMESC)), < '1E45 : A(ESCLAVE)<--'IDESC', < '1E55 : RESET 5, < '1E65 : RESET 6, < '1E75 : RESET 7, < '1E85 : A(ESCLAVE)<--HEURE EXPRIMEE EN MULTIPLES < DE 2 SECONDES (ATTENTION : SUR 16 BITS !!!). < '1E95 : OCTET0(A(ESCLAVE))<--NSPOUT, < OCTET1(A(ESCLAVE))<--NSPVI1, < '1EA5 : 1- (A(ESCLAVE)) EST UN CODE ASCI ACCESSIBLE < AU CLAVIER DE LA VISU : < CARACTERE D'ABORT<--(A(ESCLAVE)), < 2- SI BIT0=1 ET BIT1=K DANS A(ESCLAVE) : < LE DETECTEUR DE TIME OUT DE LA < VISU RECOIT LES BITS2-15 DE < A(ESCLAVE), CEUX-CI POUVANT ETRRE < NULS ET SUPPRIMANT AINSI LA < DETECTION DES TIME OUT, < 3- SI BIT0=BIT1=1 DANS A(ESCLAVE) : < L'INHIBITEUR/AUTORISEUR DES < EXPANSIONS/EXTENSIONS RECOIT LES < BITS2-15 DE (A(ESCLAVE), CEUX-CI < POUVANT ETRE NULS (=AUTORISATION), < '1EB5 : PRESC<--(A(ESCLAVE)) SANS VERIFICATIONS !! < SI (A(ESCLAVE))<0 : ON INHIBE LES ALT- < MODES SOLITAIRES. < '1EC5 : EXECUTION D'UN SOUS-PROGRAMME EN MODE < MAITRE SOUS :SYS, DONT L'ADRESSE < RELATIVE EST DANS A(ESCLAVE). < '1ED5 : TEST & SET 5, < '1EE5 : TEST & SET 6, < '1EF5 : TEST & SET 7. < '1E1D : ('STAR') EST LE COMPLEMENT DE '1E15, ET < PERMET DE RANGER UNE VALEUR 'V' A UNE < ADRESSE 'A' : < V=(B) SI (Y)=K, < V=(B)+(SLO)*16 SI (Y)#0, < (A)=(DCTSY) SI (A)='NSP'+Q8000, < (A)=((A)) SINON. < '1E16 : APPEL 'CCI' ('RST' EN MODE ESCLAVE...). < < < NOTA : LES REGISTRES A,B,X,W SONT DESTRUCTIBLES... < < < REMARQUES IMPORTANTES : < < 1 - LORSQU'UN ESCLAVE EXECUTE '1EX5 < AVEC 'X' PAIR, ON TOMBE SUR UNE ALAR- < ME 9 ('ACTD'), ET ON AGIT EN CONSE- < QUENCE... < < 2 - LORSQU'UN ESCLAVE EXECUTE '1EX5 < AVEC 'X' IMPAIR, ON TOMBE SUR UNE ALAR- < ME 4 (INSTRUCTION PRIVILEGIEE : ICI < UN 'SST' EN MODE ESCLAVE), ET ON AGIT < EN CONSEQUENCE... < < 3 - MAIS ATTENTION, L'ALARME PRECE- < DENTE PEUT AUSSI MONTER LORSQUE L'ES- < CLAVE EXECUTE '1E16 ('RST') QUI EST LA < FONCTION D'APPEL DIRECT DU 'CCI' < ("BREAK-POINTS")... < < EN CONSEQUENCE DE QUOI, LORS DE < LA RECEPTION D'UNE ALARME, IL CON- < VIENT DE FAIRE LE TRI, AVANT DE < DECLARER A UNE EVENTUELLE "TRAPPE"... < < < NOTA : < LE CODE 6 ('IPI') A ETE TRAITE < EN AMONT BIEN ENTENDU (SALUT < MARCEL...). < < LR Y,A < (A)=CAUSE DE LA TRAPPE ESCLAVE. < < < D I S C R I M I N A T I O N D E S C A U S E S < D E S C A U S E S D ' A P P E L : < < CPI ALACTD < EST-CE UN ACTD (1EX5 AVEC 'X' PAIR) ??? JE Z402Z < OUI... CPI ALMX < EST-CE UNE "MEMOIRE INEXISTANTE" POUR < L'UTILISATEUR ??? JE Z401X1 < OUI, D'AILLEURS CELA NE PEUT SE PRODUIRE < QUE POUR LA 'CDAJ'... CPI ALPRO < EST-CE UNE ALARME PROTECTION MEMOIRE ??? JE Z401X5 < OUI, ALLONS VOIR SI EN FAIT CE N'EST PAS < UNE MEMOIRE INEXISTANTE SUR LA 'CDAJ' ; < VOIR A CE PROPOS CE QUE FAIT LA TACHE < D'INTERRUPTION DU 'CBJ'... CPI ALIP < EST-CE UNE INSTRUCTION PRIVILEGIEE? < (PAR EXEMPLE SST=1EX5 AVEC X IMPAIR < OU RST(1E16)...) JNE Z401 < C'EST FORCEMENT UNE TRAPPE "PURE" Z402Z: EQU $ < EST-CE BIEN UN 1EX5? LXI TH0SLO LA &AXPLH0 < (A)=SLO(ESCLAVE), LXI TH0SLE LB &AXPLH0 < (B)=SLE(ESCLAVE), WOE < MISE EN PLACE DE (SLO,SLE) ESCLAVE... SBR A,B < (B)=(SLE)-(SLO)=TAILLE EN DADR-MOTS < DE L'ESPACE MEMOIRE UTILISATEUR... LXI LPSTH0+TH0P LY &AXPSTH < (Y)=REGISTRE 'P' DE L'ESCLAVE, < MAIS, A T T E N T I O N : < SUIVANT LA CAUSE DE L'ENTREE DANS 'TH0', < C'EST (P) OU (P)-D QUI EST BON !!! < EN PARTICULIER, ET C'EST UN COMBLE, < SUIVANT L'INSTRUCTION QUI PROVOQUE LA < TRAPPE "INSTRUCTION PRIVILEGIEE", C'EST < LA AUSSI (P) OU (P)-D QUI EST L'ADRESSE < DE CETTE INSTRUCTION ; MAIS HEUREUSEMENT, < POUR "SST" ('1E15), "RST" ('1E16) ET < "STAR" ('1E1D) C'EST SYSTEMATIQUEMENT < (P)-D... LR Y,A SLRS -DADR < (A)=VALEUR DU REGISTRE 'P' EXPRIMEE EN < DADR-MOTS, CPR B,A < ET VALIDATION PAR RAPPORT A (SLO,SLE) : JLE ZX401A < OK : (P) <= TAILLE DE L'ESPACE... BSR ASYSER < < QUE FAIRE ??? < COMPRENDRE COMMENT AVEC < UN 'P' DE TYPE "VIOLATION < MEMOIRE" ON PEUT EN ARRIVER < LA !!! < JMP Z401 < ET ON SAUTE LE 'LAR' AFIN D'EVITER UNE < ALARME... ZX401A: EQU $ ADRI -D,Y < ET RETOUR SUR L'INSTRUCTION "ACTD", "SST" < "RST" OU "STAR", CPZR Y < ON FAIT CE TEST, CAR EN EFFET SI C'ETAIT < (P) QUI ETAIT BON, ET QUE PAR MALHEUR < IL ETAIT DEJA NUL, ON PROVOQUERAIT AVEC < "LAR", ETANT DANS 'TH0' UNE ALARME... XWOR%8: VAL NOCMO=K XWOR%8: VAL -XWOR%8 IF MXMEME>XWOR%8-K,,,XEIF% IF ATTENTION : LE REGISTRE 'P' D'UN ESCLAVE PEUT IF ETRE NEGATIF, VUE LA TAILLE DE L'ESPACE IF MEMOIRE !!! XEIF%: VAL ENDIF JL Z401 < EFFECTIVEMENT, ON NE PEUT ETRE EN < PRESENCE DE "ACTD", "SST", "RST" OU < "STAR"... LAR < QUE L'ON CHARGE DANS 'A', MAIS N'OUBLIONS < PAS QUE CE PEUT ETRE L'INSTRUCTION < PRECEDENTE, MAIS QUE FAIRE ??? ANDI MKSL)MFFFF CP ACTDSL < 'ACTD' ESCLAVE ??? JE Z401A < OUI, LE TRAITER... CP RSTSL < EST-CE '1EX6 (AVEC 'X'#0) ??? JE ZX401 < OUI, C'EST '1E16. CP STARSL < EST-CE UN 'STAR' ESCLAVE ??? JNE Z401 < NON, VERS UNE TRAPPE... BR ASTAR < OUI, ALLONS LE TRAITER... ZX401: EQU $ < < < C A S D E S ' 1 E X 6 : < < < NOTA : < LES '1EX6 SONT TOUS ASSIMILES < A DES 'SVC', C'EST POURQUOI, ON < FAIT COMME SI UN 'SVC' AVAIT ETE < RECU : ON DESARME LE NIVEAU UTILI- < SATEUR EN AGISSANT SUR 'ASTF'... < < LYI FONRB0 < FONCTION RESET(MISE A 0) LAD AASTF < RELAI D'ACCES A LA FILE ASTF LXI NSNSP0+NSPACT < (X)=NIVEAU SOFT D'EXECUTION < DE L'ESCLAVE, BSR ATMOBT < ASTF(NSNSP0+NSPACT)=0, < L'ESCLAVE EST DONC DESARME... JMP Z237 < SORTIE DE LA TH0 < < < C A S D E S ' A C T D ' : < < Z401A: EQU $ LAR < REMISE DE L'INSTRUCTION DANS 'A'... ANDI MKSL < RECUPERATION DE LA ZONE ARGUMENT < DE L'ACTD ESCLAVE. < (BITS 8-11). SLRS MKSL=K < CADRAGE A DROITE DE LA FONCTION. LR A,X < (X)=FONCTION DE 0 A 15. < < EXECUTION DE LA FONCTION DEMANDEE : < (X=K,1,...,15). < LA &APLH0 < 'A' RECOIT A PRIORI LE A(ESCLAVE) BR &ACTDU PAGE < < < C A S D E S V R A I E S T R A P P E S : < < < < CAS OU UNE VIOLATION MEMOIRE < A ETE RECUE PAR L'UTILISATEUR : < Z401X5: EQU $ IF BMCDAJ-BITSIG,,XEIF%, IF ATTENTION : LE TEST SUIVANT EST IDIOT !!! XEIF%: VAL ENDIF CPZ &AAOCDA < EST-ON BIEN ACTUELLEMENT SUR LA 'CDAJ' ?? JGE Z401X6 < NON ; NOTONS BIEN QU'IL S'AGIT-LA D'UN < TEST INCOMPLET CAR CE N'EST PEUT-ETRE < PAS UNE INSTRUCTION 'WCDA'/'RCDA' QUI < EST EN CAUSE, MAIS C'EST DIFFICILE A < TESTER, D'OU CE TEST SIMPLISTE ; ON < PEUT EN TOUT CAS SAVOIR SI LA 'CDAJ' < EST UTILISEE PAR CET UTILISATEUR... < < CAS DE LA 'CDAJ' : < (ON SAIT QUE LA TACHE < D'INTERRUPTION DU 'CBJ' < TRANSFORME LES MEMOIRES < INEXISTANTES DE 'CDAJ' < EN VIOLATION MEMOIRE EN < PERMUTANT 'CDESCO' ET < 'CDESCE', SEULE FACON DE < PROVOQUER UNE ALARME ; < MAIS NOTONS BIEN QUE LA < MEMOIRE INEXISTANTE EST < DEVENUE UNE VIOLATION MEMOIRE...) < LA CDESCO-DCTESC,W < (A)=ORIGINE DE LA 'CDAJ', LB CDESCE-DCTESC,W < (B)=EXTREMITE DE LA 'CDAJ', CPR A,B < SONT-ELLES DANS LE BON ORDRE ??? JGE Z401X6 < OUI... < NON, IL Y A DONC EU UNE INTERRUPTION < MEMOIRE INEXISTANTE DE LA PART DU 'CBJ' < DE L'IMAGEUR MOYENNE DEFINITION... STA CDESCE-DCTESC,W < ET ON RESTAURE STB CDESCO-DCTESC,W < LA 'CDAJ'... 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 : LAI ALACBJ < (A)=NUMERO DE L'ALARME MEMOIRE INEXIS- < TANTE DU 'CBJ' TRANSFORMEE EN UNE < VIOLATION MEMOIRE DIFFEREE (CF. < L'ASYNCHRONISME : ON DETECTE CETTE < MEMOIRE INEXISTANTE A L'ACCES SUIVANT < A LA 'CDAJ'...). STBY &AXPSTH < QUE L'ON MET DANS 'PSTH0' POUR AVERTIR < L'UTILISATEUR... < < TRAITEMENT DE L'ALARME 'VIOL' : < Z401X6: EQU $ JMP Z401 < VERS LE TRAITEMENT GENERAL DES ALARMES... < < UNE ALARME "MEMOIRE INEXISTANTE" < A ETE RECUE POUR L'UTILISATEUR : < Z401X1: EQU $ IF BMCDAJ-BITSIG,,XEIF%, IF ATTENTION : LE TEST SUIVANT EST IDIOT !!! XEIF%: VAL ENDIF CPZ &AAOCDA < EST-ON BIEN ACTUELLEMENT SUR LA 'CDAJ' ?? JL Z401X2 < OUI ; NOTONS BIEN QU'IL S'AGIT-LA D'UN < TEST INCOMPLET CAR CE N'EST PEUT-ETRE < PAS UNE INSTRUCTION 'WCDA'/'RCDA' QUI < EST EN CAUSE, MAIS C'EST DIFFICILE A < TESTER, D'OU CE TEST SIMPLISTE ; ON < PEUT EN TOUT CAS SAVOIR SI LA 'CDAJ' < EST UTILISEE PAR CET UTILISATEUR... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < BIEN NOTER LES ADRESSES < DE LA 'CDA' EN CAUSE, ET < VOIR SI CELA EST NORMAL !!! < Z401X2: EQU $ IF XMEMXI-K,,XEIF%, IF ATTENTION : LE TEST SUIVANT EST IDIOT !!! XEIF%: VAL ENDIF CPZ &AMEMX < PEUT-ON IGNORER CETTE ALARME ??? JE Z237 < OUI (EN ESPERANT QU'IL S'AGIT BIEN DE < LA 'CDAJ') ; ON SORT IMMEDIATEMENT DE < 'TH0'... < < TRAITEMENT DES TRAPPES VRAIES ET PURES : < Z401: EQU $ BSR ADOWN < ON FAIT TOUT POUR QUE LA TRAPPE SOIT < TRAITEE EN MEMOIRE BASSE... LA SRCOTO-DCTESC,W < VERIFICATION QU'IL N'Y A PAS < D'APPEL DE SOUS-GRAMMAIRE < EN COURS. CP CE000 JE SYSE13 < OK... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ESSAYER DE COMPRENDRE < CES APPELS DE SOUS-GRAMMAIRES < IMBRIQUES !!! < JMP Z830 < ET IL VAUT MIEUX SAUTER CE QUI SUIT... SYSE13: EQU $ LA RECOTO-DCTESC,W CP INFINI < Y-A-T'IL UN LOG-OUT EN COURS ??? JE Z830 < OUI, ON IGNORE DONC LA TRAPPE < QUI EST DONC SUREMENT DU A UNE < ERREUR HARD DES DISQUES (!!!). CP GRTRAP < Y-A-AURAIT-IL UNE TRAPPE EN COURS ??? JE Z830 < OUI, ON L'IGNORE FINALEMENT (AU POINT DE < VUE GRAMMAIRE) ; CELA PEUT SE PRODUIRE < PAR EXEMPLE LORSQUE LE 'SVC''CCI' IMPLAN- < TE SUITE A UNE TRAPPE FAIT PAR EXEMPLE < UNE PARITE MEMOIRE... STA SRCOTO-DCTESC,W < SAUVEGARDE DE RECOTO DANS < SRCOTO POUR SIMULER UN APPEL < DE SOUS-GRAMMAIRE. < NOTA : LORSQUE L'ESCLAVE TRAPPE, < RECOTO CONTIENT L'INDEX COURANT < DE LA GRAMMAIRE DU CCI... LA GRTRAP STA RECOTO-DCTESC,W < MODIFICATION DE < L'INDEX DE LA GRAMMAIRE DU CCI < DE CETE ESCLAVE. Z830: EQU $ < CAS DES ERREURS HARD DISQUES < LORS D'UN LOG-OUT. BSR ATRAPH < PREPARATION DES REGISTRES UTILISATEURS, < ET GENERATION DU PROGRAMME MINIMUM < DE TRAPPE... JMP Z237 < SORTIE DU RECOVEY IMMEDIAT. PAGE < < < T R A P P E S S Y S T E M E : < < Z236: EQU $ LR Y,X < RESTAURE DANS X LA CAUSE DE < L'APPEL. XWOR%2: VAL '0F00 < MASQUE DU NUMERO D'ALARME, XWOR%3: VAL MOCD < MASQUE D'IDENTIFICATION DE LA TACHE. XWOR%4: VAL MOCG=K < A CAUSE DU 'SWBR' QUI SUIT... XWOR%4: VAL -XWOR%4 < POUR FAIRE UN DECALAGE A DROITE... XWOR%1: VAL CORBT?XXBTHS=FMASK(K?XWOR%2?XWOR%3)MMOT=FCINST>XWOR%4 XR A,Y < (A)=NUMERO DE L'ALARME, (Y)=IDENTIFICATIO ORI XWOR%1 < MISE EN PLACE DE L'INDICATIF, SWBR A,A < ET CADRAGE DANS L'OCTET GAUCHE DE 'A', ORR Y,A < PUIS CONCATENATION DE L'IDENTIFICATION < DE LA TACHE EN CAUSE. < < AFFICHAGE PUPITRE & AVERTISSEMENT OPERATEUR : < BSR ASMPUO < AFFICHAGE PUPITRE DE A E812: EQU $ PSR A LB ETASYS < (B)='ETASYS', TBT NBITMO+RECON < QUEL EST LE MODE DE BLOCAGE DE 'TH0' ??? JC E812XY < PAR 'CLEAR'+'STEP'... C'EST PLUS FACILE.. E812XX: EQU $ BSR ATDEFS < B L O C A G E... < < ON A ICI : < BIT0(A)=1 : TACHE HARD APPELANTE, < =0 : TACHE SOFT APPELANTE, < BIT1-3='7 (MASQUE DISTINCTIF FORMANT UNE ADRESSE < QUI NE PEUT ETRE CELLE D'UNE 'DCT'). < BIT4-7=NUMERO DE L'ALARME (REGISTRE 'X'). < BIT1-15(A)=NUMERO (NIVEAU) DE LA TACHE APPELANTE, < (NSP SI TACHE SOFT), < (W)=ADRESSE DCT(TACHE APPELANTE), SI TACHE SOFT, < (B)=ETASYS, < (X)=0 MEMOIRE INEXISTANTE < =1 PROTECTION DRPS OU CDA < =2 ERREUR DE PARITE (HORS DU MODE DEBUG) < =3 INSTRUCTION OPTIONNELLE INEXISTANTE < =4 INSTRUCTION PRIVILEGIEE < =5 RQST,WAIT,QUIT SOUS NIVEAU HARD < =6 APPEL D'UNE AUTRE UT PAR IPI < =7 STEP < =8 POINT D'ARRET (MODE DEBUG) < =9 ACTD < ZRECOV: EQU $ < ADRESSE DE BOUCLAGE SUR SYSER < AVEC INTERRUPTIONS NON MASQUEES. JMP E812XX < ATTENTE DU DEBLOCAGE MANUEL EN FAISANT : < P <-- ZRECOV+1. PAGE < < < S O R T I E D E ' T H 0 ' : < < E812XY: EQU $ < DEBLOCAGE PAR 'CLEAR'+'STEP'. < < TRAITEMENT D'UNE PETITE ANOMALIE FAISANT < QUE LES TACHES SYSTEMES QUI TOURNENT EN < MODE MAITRE PEUVENT SE RETROUVER EN MODE < ESCLAVE (VOIR PAR EXEMPLE L'IDLE QUI < UTILISE L'INSTRUCTION 'MVTS' QUI PROVOQUE < AVEC SES ALARMES UN PASSAGE EN MODE < ESCLAVE) : < LA &APSTHS < (A)=REGISTRE 'S' DE LA TACHE APPELANTE, SBT MS < QUE L'ON FORCE EN MODE MAITRE, ET STA &APSTHS < QUE L'ON MET A JOUR DANS 'PSTH0'. PSR B,X E812B: EQU $ BSR ASMPUI < LECTURE DU PUPITRE POUR SAVOIR < S'IL FAUT SORTIR DE LA TACHE 0 ??? < CARY=INFORMATION VALIDE (1). JNC E812B < ON ATTEND QUE L'INFORMATION VENANT < DU PUPITRE SOIT VALIDE... LXI LPSTH0+TH0P LA &AXPSTH < (A)=REGISTRE 'P' DE LA TACHE PLANTEE. IF TH0-K,,XEIF%, IF ATTENTION : CE QUI PRECEDE EST MAUVAIS !!! XEIF%: VAL ENDIF BSR ASMPUO < VISUALISATION DU REGISTRE 'P'... E812AX: EQU $ BSR ASMPUI < LECTURE DU PUPITRE POUR SAVOIR QUOI < FAIRE ??? JNC E812AX < RIE, ON CONTINUE D'ATTENDRE... STA CLESPU < STOCKAGE POUR DEBUG/TRACE EVENTUEL XCLEF0:: VAL L < CLEF 0 DU PUPITRE, XCLEF1:: VAL XCLEF0+I < CLEF 1 DU PUPITRE. IF XCLEF0-BITSIG,,XEIF%, IF ATTENTION : 'XCLEF0' EST MAUVAIS !!! XEIF%: VAL ENDIF TBT XCLEF0 < TEST CLE 0 LAI '0000 SIO PUPTH0 < ON RAZE LES VOYANTS DU BAS... PLR A,B,X JNC E822 < CLEF0=K : SORTIE DU RECOVERY. BR AE890 < CLEF0=1 : UNE DEMANDE DE TRACE < ET EVENTUELLEMENT DE DEBUG EST < FAITE. < < < D E S A R M E M E N T D E ' T H 0 ' : < < E823: EQU $ E822: EQU E823 Z237: EQU $ < SORTIE TRAPPES ESCLAVES. BSR AFITH0 < TEST DES 'IPI' EN ATTENTE, TEST < DU MODE D'EXECUTION, ET EPILOGUE... JMP ARECOV < VERS NOUVELLE ALARME PAGE < < < E X E C U T I O N D E S A C T D D E F O N C T I O N : < < < ARGUMENT : < (A)=A(ESCLAVE), < (W)=ADRESSE DCT(ESCLAVE). < < < NOTA : < 'A', 'B', 'X' ET 'W' SONT DESTRUCTIBLES... < < < REMARQUE : < 'W' CONTIENT L'ADRESSE DE LA < 'DCTESC' DE L'ESCLAVE EN CAUSE ; < LORS DES ALARMES (ET INTERRUP- < TIONS) LE CHANGEMENT DE CON- < TEXTE N'ETANT QUE PARTIEL, LES < REGISTRES UTILISATEURS (ET EN < PARTICULIER 'A' ET 'B'), SONT, < NON PAS DANS 'DCTESC', MAIS DANS < LA PILE DE 'TH0', D'OU LES RELAIS < D'ACCES QUE L'ON A IMPLANTE < ('AXPSTH' DANS LE 'COMMON', ET < 'APSTHS' DANS LE 'LOCAL' DE < 'TH0'). < < < < RENVOI DE NSPOUT/NSPVI1 DANS A ('1E95) : < (X=9). < RECOUT: EQU $ LXI PHOUT LBY &TASSGN-DCTESC,W < OCTET1(A)=NSPOUT. SWBR A,A < OCTET0(A)=NSPOUT. ORI NSPVI0 < OCTET1(A)=NSPVI1. JMP Z820 < VERS LE RENVOI DANS A(ESCLAVE). < < RENVOI DE L'HEURE A L'ESCLAVE ('1E85) : < (X=8). < RECDAT: EQU $ XXXDAT:: VAL 2 < L'HEURE EST EXPRIMEE EN MULTIPLE DE < 2 SECONDES POUR TENIR DANS UN MOT... LA HTIME LB HTIMED < (A,B)=HEURE DANS LE JOUR EN < SECONDES. SLRD XXXDAT=K < CONVERSION EN UN MULTIPLE < DE 2 SECONDES (SUR 16 BITS). STB &APLH0 < A(ESCLAVE)=HEURE DANS LE JOUR < EN MULTIPLE DE 2 SECONDES JMP Z1950 < VERS LA SIMULATION D'UNE FAUSSE < IT D'HORLOGE, PUIS LA SORTIE OK. < < RENVOI A L'ESCLAVE DE SON IDENTIFICATEUR SYSTEME ('1E45) : < (X=4). < RECID: EQU $ LA IDESC-DCTESC,W ANDI MKIDES < (A)=IDESC. Z820: EQU $ < ENTRY 'RENVOI DANS A(ESCLAVE)'. STA &APLH0 < A(ESCLAVE)=IDESC < =NSPOUT/NSPVI1 JMP Z1950 < VERS LA SIMULATION D'UNE FAUSSE < IT D'HORLOGE, PUIS LA SORTIE OK. < < RENVOI A L'ESCLAVE DE LA TAILLE EN MOTS DE SON ESPACE MEMOIRE : < ET DE LA BOX COURANTE DE DEMESC : < (X=3). < RECSIZ: EQU $ LXI TH0SLE LA &AXPLH0 < (A)=SLE(ESCLAVE) LXI TH0SLO SB &AXPLH0 < (A)=SLE(ESCLAVE)-SLO(ESCLAVE) ADRI FADR>DADR,A < (A)=TAILLE EN MULTIPLE DE 16 MOTS SLLS -DADR < (A)=TAILLE EN MOTS DE L'ESPACE < MEMOIRE DE L'ESCLAVE IF RH0A-K,,XEIF%, IF ATTENTION : CE QUI SUIT EST IDIOT !!! XEIF%: VAL ENDIF STA &APLH0 < ET RENVOI DANS A(ESCLAVE) LA BOXESC-DCTESC,W < RECUPERATION DANS A DE LA < BOX COURANTE DE DEMESC. JMP Z731 < VERS LE RENVOI DE LA BOX COURANTE < PAR LE REGISTRE B(ESCLAVE). < < RENVOI DE L'ACN A L'ESCLAVE ('1E25) : < (X=2). < RECACN: EQU $ LA ACNESC-DCTESC,W STA &APLH0 < A(ESCLAVE)<--- ACN1 LA ACNESC-DCTESC+U,W Z731: EQU $ < ENTRY DESTINEE A RECABS. < (ET RECSIZ) LXI RH0B STA &AXPLH0 < B(ESCLAVE) <---ACN2 < OU : B(ESCLAVE)<--(BOX(DEMESC)), < OU : B(ESCLAVE)<--((A(ESCLAVE))). JMP Z1950 < VERS LA SIMULATION D'UNE FAUSSE < IT D'HORLOGE, PUIS LA SORTIE OK. < < ACCES MEMOIRE ABSOLU ('1E15) : < (X=1). < < 1- SI (A)>=K : (A) EST UNE ADRESSE MEMOIRE ABSOLUE, < 2- SI (A)<0 : (A).AND.'7FFF EST UN NVP D'ACCES A DCTSY. < RECABS: EQU $ XXBNSP:: VAL BITSIG < BIT DE DISCRIMINATION DES 'NSP' DES < ADRESSES ABSOLUES. IF XXBNSP-BITSIG,,XEIF%, IF ATTENTION : LES TESTS SUIVANTS SONT IDIOTS !!! XEIF%: VAL ENDIF BSR ARCABS < EXECUTION CONDITIONNELLE DES ACCES < DIRECTS A LA MEMOIRE ; ON APPELLE UN < SOUS-PROGRAMME A CAUSE DES SAUTS SUPE- < RIEURS A 128 MOTS... < LE RESULTAT EST DANS 'A'... JMP Z731 < VERS LE RENVOI DU CONTENU DU MOT MEMOIRE < OU DU RELAI DEMANDE DANS B(ESCLAVE). PAGE < < < S Y N C H R O N I S A T I O N < I N T E R - U T I L I S A T E U R S : < < < PHILOSOPHIE : < LE SYSTEME DECRIT CI-DESSOUS EST < DESTINE A PERMETTRE L'EXCLUSION DE < PHASES CRITIQUES ENTRE UTILISATEURS < DU SYSTEME (CF. LE CAS DE LA MISE A < JOUR DE LA VALEUR ASSOCIEE A UN NOM, CELUI- < CI ETANT COMMUN A PLUSIEURS UTILISATEURS < DE MEME NUMERO DE COMPTE). < ON DISPOSE DE 2 PRIMITIVES : < - 'TEST & SET' : P-OPERATION, < - 'RESET' : V-OPERATION. < < < SOIT (X)=5,6,7 (MODULO 8), ON A ALORS LES 2 PRIMITIVES : < < 'TEST & SET S(X)' : < SI S(X)=K : S(X)<--1 ; CARRY(ESCLAVE)<--0. < SI S(X)=1 : CARRY(ESCLAVE)<--1. < < RESET S(X)' : < SI S(X)=1 : S(X)<--0 ; CARRY(ESCLAVE)<--0. < SI S(X)=K : CARRY(ESCLAVE)<--1. < < < NOTA : < 'S' DESIGNE 'SYNCUS', ET MEMORISE < AU NIVEAU GLOBAL DU SYSTEME, LES < 'TEST & SET' EN COURS ; UNE MEMORI- < SATION LOCALE (AU NIVEAU DE CHAQUE < ESCLAVE) EST FAITE DANS 'SETRUN(DCTESC)'. < ENFIN, SEUL L'ESCLAVE AYANT EXECUTE < UN 'TEST & SET' PEUT FAIRE LE 'RESET' < ASSOCIE... < < < < 'TEST & SET' ('1EF5, '1EE5, '1ED5) : < (X=7+8, 6+8, 5+8). < XSET:: VAL 8 < DROLE DE PARAMETRAGE... RECSET: EQU $ LA SYNCUS < ACCES A SYNCUS. LB &APSTHS < ACCES AU REGISTRE S(ESCLAVE) TBT NBITMO+XSET,X < LE 'TEST & SET' DEMANDE EST-IL < DEJA ACTIF ??? JC Z801 < OUI, CELUI-CI DOIT DONC ETRE < IGNORE. SBT NBITMO+XSET,X < DANS LE CAS CONTRAIRE, IL < EST PRIS EN COMPTE. STA SYNCUS < MEMORISATION DE 'TEST & SET' AU < NIVEAU GENERAL DU SYSTEME. LA SETRUN-DCTESC,W SBT NBITMO+XSET,X < MEMORISATION LOCALE DU 'TEST < & SET' AU NIVEAU ESCLAVE. STA SETRUN-DCTESC,W < MAJ DE SETRUN. RBT NBITMO+C < CARY(ESCLAVE)<--0. < < RETOUR A L'ESCLAVE DEMANDEUR : < Z803: EQU $ Z805: EQU $ STB &APSTHS < MISE A JOUR S(ESCLAVE) JMP Z1950 < VERS LA SIMULATION D'UNE FAUSSE < IT D'HORLOGE, PUIS LA SORTIE OK. Z801: EQU $ SBT NBITMO+C < CARY(ESCLAVE)<--1. JMP Z803 < VERS LA MAJ DE S(ESCLAVE). < < 'RESET' ('1E75, '1E65, '1E55) : < (X=7, 6, 5). < RECRST: EQU $ LA SETRUN-DCTESC,W < ON COMMENCE PAR SETRUN (ET NON < PAS PAR SYNCUS), AFIN QUE < SEUL L'ESCLAVE QUI A FAIT LE < 'TEST & SET' PUISSE DEMANDER < LE 'RESET' ASSOCIE. LB &APSTHS < ACCES AU REGISTRE S(ESCLAVE) SBT NBITMO+C < CARY(ESCLAVE)<--1 A PRIORI. TBT XSET-XSET,X < TEST DE L'EXISTENCE DU 'TEST & < SET' DONT ON DEMANDE LE 'RESET'. JNC Z803 < ERREUR : L'ESCLAVE N'A PAS FAIT < LE 'TEST & SET' ASSOCIE, OU < BIEN A APPELE LE CCI INTER- < ACTIF ENTRE TEMPS. RBT XSET-XSET,X < OK, RESET. STA SETRUN-DCTESC,W < RESET AU NIVEAU DE L'ESCLAVE. LA SYNCUS RBT XSET-XSET,X < 'RESET' DANS SYNCUS. STA SYNCUS < RESET AU NIVEAU GLOBAL < DU SYSTEME. RBT NBITMO+C < CARY(EESCLAVE)<--0. JMP Z805 < VERS LA SIMULATION D'UN IT < D'HORLOGE. PAGE < < < C H A N G E M E N T D U C A R A C T E R E < C O U R A N T D ' A B O R T : < < < FONCTION : < SI LE CONTENU DE A(ESCLAVE) EST UN < CARACTERE ASCI ACCESSIBLE A PARTIR DU < CLAVIER D'UNE VISU, CE MODULE LE MET < CARACTERE D'ABORT, SUIVANT : < < BITS4-7 : ILS DONNENT LE 'NVP' AUQUEL EST < ASSIGNE LA VISU DONT ON DESIRE < MODIFIER DES PARAMETRES ; S'ILS < SONT A '0, ALORS ON UTILISE LA < VISU IN/OUT. < < 1- (A(ESCLAV))=CARACTERE ASCI : IL DONNE < ALORS LE CARACTERE D'ABORT COURANT, < (SI CELUI-CI EST NUL, ON PREND 'KALTM'...) < < 2- BIT0=1 ET BIT1=K DANS A(ESCLAVE) : < TESTO(VISU)<--(BITS2-15(A(ESCLAVE))), < < 3- BIT0=BIT1=1 DANS A(ESCLAVE) : < INEXEX(VISU)<--(BITS2-15(A(ESCLAVE))), < < XXALT0:: VAL K < =0 : ON CHANGE LE CARACTERE 'CARALT', < =1 : VOIR ALORS LE BIT 'XXALT1'... IF XXALT0-BITSIG,,XEIF%, IF ATTENTION : LES TESTS SUIVANTS SONT MAUVAIS !!! XEIF%: VAL ENDIF XXALT1:: VAL 1 < =0 : MODIFICATION DE 'TESTO', < =1 : MODIFICATION DE 'INEXEX'. XXALTC:: VAL MOCD < ARGUMENT ('CARALT', TEMPO,...). XXALTN:: VAL '0F00 < 'NVP' AUQUEL EST ASSIGNEE LA VISU < DESIREE. RECALT: EQU $ JAL Z893 < DEMANDE DE MODIFICATION DU < DETECTEUR DE TIME OUT VISU. CPI KALTM < EST-CE LE CODE DU 'ALT-MODE' ??? JE Z893 < OUI, C'EST BON. CPI ALTMAX < SINON, VALIDATION DU CARACTERE < DEMANDE PAR RAPPORT AU CODE < DE LA 1ERE MINUSCULE ASCI. JG Z890 < ERREUR : CARACTERE INACCESSIBLE!! Z893: EQU $ XWOR%7: VAL XXALTN=K XWOR%7: VAL -XWOR%7 < POUR FAIRE UN DECALAGE A DROITE... SLRS -XWOR%7 ANDI XXALTN>XWOR%7 < (A)=NVP DE LA VISU A MODIFIER... JAE Z893X < SI L'ON EST EN TIME-SHARING, C'EST < LA VISU IN/OUT QUI SERA UTILISEE. CPI NOCMO*LTASGN < VALIDATION DU NVP... JGE Z890 < ERREUR, IL N'EXISTE PAS... LR A,X < (X)=NVP AUQUEL LA VISU EST ASSIGNEE. LBY &TASSGN-DCTESC,W < (A)=NSP PRESUME DE LA VISU DESIREE. CPI NSPVI0 < EST-CE UNE VISU ??? JL Z890 < NON, ERREUR... CPI NSPVIN < EST-CE UNE VISU ??? JG Z890 < NON, ERREUR... JMP Z893Y < OK, (A)=NSP DE LA VISU DESIREE. Z893X: EQU $ < CAS OU IN/OUT EST DEMANDE... BSR ACHKIN < TEST DU MODE DE L'UTILISATEUR, < EN TESTANT NSPIN PAR RAPPORT < A NSPOUT, ET EN RENVOYANT : < (A)=NSPIN. JNE Z1950 < VERS LA SIMULATION D'UNE FAUSSE < IT D'HORLOGE, PUIS LA SORTIE OK. < LA DEMANDE EST RENDUE INEFFECTIVE < CAR L'UTILISATEUR N'EST PAS SUR < UNE CONSOLE DU TEMPS PARTAGE... < < OK, EXECUTION DE CE QUI EST DEMANDE : < Z893Y: EQU $ LR A,X < (X)=NSPIN DE LA CONSOLE. USE L,DCT0 PSR L,W < SAVE @DCT-RECOVERY. LR L,W < W BASE LA DCT DE 'TH0'... USE W,LOCTH0+DEPL0 BSR ACADCT < RENVOIE : (L)=@DCT(NSPIN). LA &APLH0 < (A)=A(ESCLAVE) JAL Z1600 < DEMANDE SUR LE TIME OUT VISU. < < CHANGEMENT DU CARACTERE D'ABORT COURANT : < JANE Z893XY < OK, CARACTERE NON NUL... LAI KALTM < SI LE CARACTERE EST NUL, ON REPREND < L'ETAT INITIAL 'KALTM'... Z893XY: EQU $ STA VAR+CARALT < (A) EST UN CODE ASCI ACCESSIBLE. LXI FIVALT LA &VISOTO < (A)=ETAT SUITE A UN "ALT-MODE", CP ETAT1 < L'ETAT COURANT DE LA VISU NE SERAIT-IL < PAS CELUI QUI SUIT LA RECEPTION D'UN < PREMIER "ALT-MODE" ??? JNE Z1601 < NON, VERS LES RESTAURATION NORMALES... PLR L,W < OUI, IL Y A DONC UN "ALT-MODE" EN COURS < DE TRAITEMENT (ATTENTE DU SECOND...), JMP Z890 < ON REFUSE LE CHANGEMENT DE 'CARALT', ET < ON FAIT UNE VRAIE TRAPPE ; EN EFFET, LE < RISQUE EST LE SUIVANT : UN PREMIER "ALT- < MODE" EST RECU, ET PENDANT LA PERIODE < D'ATTENTE D'UN EVENTUEL DEUXIEME "ALT- < MODE", LE PROGRAMME UTILISATEUR, QUI < LUI CONTINU A TOURNER (JUSQU'A EPUISE- < MENT DE LA TEMPORISATION) EMET UNE DEMAN- < DE CHANGEMENT DE 'CARALT', MAIS IL EST < TROP TARD !!! < < CHANGEMENT DU DETECTEUR DE TIME-OUT DE LA VISU, OU < DE L'AUTORISATEUR/INHIBITEUR DES EXPANSIONS/EXTENSIONS < DE SA VISU : < Z1600: EQU $ TBT XXALT1 < DISCRIMINATION TESTO/INEXEX. ANDI XXALTC < ON NE GARDE QUE L'ESSENTIEL. JC Z1901 < BIT1=1 : CAS INEXEX. CPI W < EST-CE LA FATIDIQUE VALEUR 'W' ??? JE Z1601 < OUI, LA FONCTION EST CONSIDEREE COMME < INEFFECTIVE, CE QUI PERMET AU PASSAGE < DE PREVOIR UNE EXTENSION ULTERIEURE !!! STA TESTO < MISE EN PLACE DANS TESTO (REGISTRE < SLO DE LA DCT(NSP)) DE LA VALEUR < INITIALE DU DETECTEUR DE < TIME OUT. < (CELUI-CI POUVANT ETRE NUL) < < RESTAURATIONS ET SORTIE : < Z1601: EQU $ PLR L,W < RESTAURE : (L)=@DCT-RECOVERY. JMP Z1950 < VERS LA SIMULATION D'UNE FAUSSE < IT D'HORLOGE, PUIS LA SORTIE OK. < < CHANGEMENT DE INEXEX : < Z1901: EQU $ STA VAR+INEXEX < MISE EN PLACE DE INEXEX, < CELUI-CI POUVANT ETRE NUL. JMP Z1601 < VERS LA SORTIE... < < TRAITEMENT DES ERREURS DE RECALT ET DE RECMST : < Z890: EQU $ USE L,LOCTH0+DEPL0 USE W,DEM0 BR AZ401 < VERS UNE VRAIE TRAPPE ('1E05) !!! PAGE < < < C H A N G E M E N T D E P R E S C : < < < ARGUMENT : < A>=K : (A) DONNE LE PRESC DE RETOUR A LA SUITE < D'UN ALT-MODE SOLITAIRE, < A<0 : INDIQUE QUE LES ALT-MODES SOLITAIRES DOIVENT < ETRE IGNORES PAR LE SYSTEME... < < < NOTA : < LE CHANGEMENT DE PRESC EST FAIT SANS < VERIFICATIONS (D'INCLUSION DANS < L'INTERVALLE SLO-SLE) D'UNE PART < PARCEQU'IL N'Y A PAS LA PLACE D'INSERER < CETTE VALIDATION, ET D'AUTRE PART < PARCEQUE LE BRANCHEMENT VERS UNE < ADRESSE EXTERIEURE A SLO-SLE EN MODE < ESCLAVE PROVOQUERA UNE TRAPPE !!! < < RECPRE: EQU $ STA PRESC-DCTESC,W < QUE L'ON MET DANS LE PRESC < SANS VERIFICATIONS !!! < < < S I M U L A T I O N D ' U N E I T D ' H O R L O G E : < < < FONCTION : < CE MODULE PERMET APRES CHAQUE 'ACTD' < DE FONCTION ESCLAVE, DE FAIRE CROIRE < AU SYSTEME QU'UNE EXPIRATION DU QUANTUM < DE L'ESCLAVE DEMANDEUR EST APPARUE, < ET AINSI DE LUI FAIRE PERDRE LA < MAIN, ET AINSI NE PAS RIQUER DE FREINER < LE SYSTEME... < CETTE SIMULATION NE SERA FAITE < QUE SI LE MASQUE IM=Q8000 (AUCUNE IT MASQUEE), < RAPPEL : LE BIT0 DE IM N'A RIEN A VOIR AVEC LES IT... < TOT CECI N'A DE CONSEQUENCES QU'EN FIN DE TACHE 0 < CAR DANS LA TACHE 0 ON A IOM=IPM=1 !!! < < < Z1950: EQU $ USE L,DCT0 PSR L < SAVE (L)=ADRESSE LOCTH0 LXI NSPHOR < (X)=NSP(HDLHOR). BSR ACADCT < RENVOIE : (L)=@DCT-HORLOGE. BSR ABETA2 < RENVOIE : (A)=BETA(SIT(HDLHOR)). < < NOTA : < BETA(SIT(HORLOGE)) PEUT ETRE < POSITIF OU NUL A CE MOMENT ; EN < EFFET CE PHENOMENE RARE CORRESPOND < AU CAS OU L'HORLOGE, BIEN QUE PLUS < PRIORITAIRE QUE LES UTILISATEURS < EST EN ATTENTE D'UNE FIN DE SERVICE < D'ENTREES-SORTIES PAR EXEMPLE... < JAGE Z237XL < ET BIEN, SAUTER LA MODIFICATION < DE SON REGISTRE 'A' QUAND 'HDLHOR' < N'EST PAS SUR SON 'SIT'... STZ RA+XXPSTD,L DC RA+XXPSTD,L < A(HDLHOR)=-1 : AINSI HDLOR < EST AVERTI QUE C'EST UNE < FAUSSE IT QUI EST MONTEE, ET < QU'IL N'A PAS DE TEMPS A < DECOMPTER. LAD SIT BSR ARLSE < FAUSSE IT D'HORLOGE Z237XL: EQU $ PLR L < RESTAURE (L)=ADRESSE LOCTH0 USE L,LOCTH0+DEPL0 Z237X1: EQU $ JMP Z237 < VERS LA SORTIE IMMEDIATE < DU RECOVERY. PAGE < < < E X E C U T I O N E N M O D E M A I T R E D ' U N < S O U S - P R O G R A M M E S O U S : S Y S : < < < FONCTION : < CET ACTD ESCLAVE EST EXTREMEMENT < DANGEREUX A UTILISER ; C'EST POURQUOI < IL EST RESERVE A :SYS. IL PERMET < D'EXECUTER UN S/P DONT L'ADRESSE RELATIVE < EST DANS A(ESCLAVE) EN MODE MAITRE ; < AINSI PAR EXEMPLE !GE POURRA REGENERE < LES PROCESSEURS DE BASE DE CMS4 EN < STAND-ALONE... < < < NOTA : < CET 'ACTD' EST INTERDIT A ":SYS" < LORSQUE LE BIT 'MEMXXX' DE 'MEMV' < EST A '0 !!! < < < A T T E N T I O N : < AUCUNE VERIFICATION N'EST FAITE QUANT < AU CONTENU DE A ; EN EFFET CELA SERAIT < ILLUSOIRE ETANT DONNE QUE L'ON NE < PEUT VALIDER AUSSI CE QUE FERA LE S/P !!!! < < < ARGUMENT : < (C)=ADRESSE COMMON(CMS5), < (W)=ADRESSE DCT(ESCLAVE). < < RECMST: EQU $ BSR ASIPST < RECONSTITUTION DE 'PSTESC' ; EN EFFET < POUR FACILITER LA PROGRAMMATION DES < SOUS-PROGRAMMES MAITRES, ON FAIT COMME < SI LE CHANGEMENT DE CONTEXTE ENTRE < LE PROGRAMME UTILISATEUR, ET 'TH0' < N'ETAIT PAS PARTIEL... BSR ADOWN < MAIS OU EST L'ESCLAVE ??? JE Z237X1 < EN HAUT, ON RESSORT DONC IMMEDIATEMENT < ET LORSQU'IL SERA EN BAS, NON REVIENDRA < ICI... PSR A < IL CONTIENT A(ESCLAVE) C-A-D < ADRESSE DU S/P A EXECUTER LXI TH0SLO < RELATIVE A SLO(ESCLAVE) LA &AXPLH0 < ACCES AU SLO(ESCLAVE) BSR APDADR < QU'ON MET EN MOTS PLR X ADR X,A < ABSOLUTISATION DE L'ADRESSE < DU SOUS-PROGRAMME A L'AIDE < DE SLO(ESCLAVE). STA ASPMST < ON RANGE L'ADRESSE ABSOLUE A < PRIORI DANS ASPMST. < < VALIDATION DE L'ACN DU DEMANDEUR : < LA ACNESC-DCTESC,W CP ACNSYS < EST-CE :SYS ??? JNE Z890 < NON : REFUSE, ON VA RENVOYER < UNE VRAIE TRAPPE ('1E05) !!!! LA ACNESC-DCTESC+U,W CP ACNSYS+U < EST-CE :SYS ???? JNE Z890 < NON REGUSE... < VERS UNE VRAIE TRAPPE ('1E05) !!! LA MEMV TBT MEMXXX < ET ":SYS" ALORS ??? JNC Z890 < IL N'Y A PAS DROIT NON PLUS !!! < < CAS D'UN DEMANDEUR SOUS :SYS : < LA PSTESC-DCTESC+RSLO,W < (A)=(SLO). PSR A,C,L,W BSR APDADR STA PSTESC-DCTESC+RSLO,W < COMPATIBILITE AVEC T1600; SI 'INI' < AU COURS DU PROG ESCLAVE EN < MODE MAITRE,ALORS L'ESCLAVE < TRAPPERA CAR ON AURA < SLO > SLE !!OK BSR ASPMST < VERS LE SOUS-PROGRAMME, QUI < EST, IL FAUT LE NOTER RESIDENT < EN MEMOIRE (CF. L'EXECUTION < DES ACTD). PLR A,C,L,W STA PSTESC-DCTESC+RSLO,W < RESTAURATION INUTILE DE 'SLO' < CAR LE VRAI SLO EST DANS LA < PILE TH0!! JMP Z1950 < VERS LA SIMULATION D'UNE FAUSSE < IT D'HORLOGE, PUIS LA SORTIE OK. PAGE < < < ' S T A R ' E S C L A V E : < < < FONCTION : < L'EXECUTION D'UN 'STAR' EN MODE < ESCLAVE A POUR EFFET LORSQU'ON EST < SOUS :SYS, DE RANGER LE CONTENU DE < B(ESCLAVE) TRANSLATE DU CONTENU < DE SLO(ESCLAVE)*16 SUR 16 BITS SI (Y(ESCLAVE))#0 < DANS 'DCTSY' A L'INDEX DONNE PAR < (A).AND.'7FFF SI (A)=NSP+Q8000, ET < DANS LA MEMOIRE D'ADRESSE (A) SINON. < < < NOTA : < 'STAR' EST INTERDIT A ":SYS" < LORSQUE LE BIT 'MEMXXX' DE 'MEMV' < EST A '0 !!! < < < ARGUMENTS : < A(ESCLAVE)=ADRESSE OU NSP+Q8000, < B(ESCLAVE)=CONTENU A RANGER, < Y(ESCLAVE)=K SI (B) EST ABSOLU, < #0 SI (B) EST A TRANSLATER DE (SLO(ESCLAVE))*16. < (W)=ADRESSE DCT(ESCLAVE). < < STAR: EQU $ LA ACNESC-DCTESC,W CP ACNSYS < EST-CE :SYS ??? JNE Z890 < NON, VERS UNE TRAPPE... LA ACNESC-DCTESC+U,W CP ACNSYS+U < EST-CE :SYS ??? JNE Z890 < NON, VERS UNE TRAPPE... BSR ASIPST < RECONSTITUTION DE 'PSTESC' ; EN EFFET < POUR L'EXECUTION DE 'DOWN', ON FAIT COMME < SI LE CHANGEMENT DE CONTEXTE ENTRE < LE PROGRAMME UTILISATEUR, ET 'TH0' < N'ETAIT PAS PARTIEL... < < VILAIN TRUANDAGE (PERMETTANT < A 'DOWN' DE FAIRE ITERER LES < INSTRUCTIONS 'STAR' EN MEMOIRE < HAUTE) : < 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 : LAI ALASTA < (A)=NUMERO D'UNE PSEUDO-ALARME CORRES- < PONDANT A LA RECEPTION D'UNE < INSTRUCTION 'STAR', STBY &AXPSTH < QUE L'ON MET DANS 'PSTH0' POUR FACILITER < LE TRAVAIL DE 'DOWN'... < < OU EST L'UTILISATEUR ??? < BSR ADOWN < OU EST CE PAUVRE ESCLAVE ??? JE Z237X1 < EN HAUT, ON VA LE FAIRE REDESCENDRE < UNIQUEMENT A CAUSE DU MODE TRANSLATABLE ! LA MEMV TBT MEMXXX < ET ":SYS" ALORS ??? JNC Z890 < IL N'Y A PAS LE DROIT NON PLUS !!! LXI TH0Y LA &AXPLH0 < (A)=Y(ESCLAVE). JAE RECSTA < CAS DU MODE ABSOLU. < < MODE TRANSLATABLE : (Y(ESCLAVE))#0 : < LXI TH0SLO LA &AXPLH0 < (A)=(SLO(ESCLAVE)). BSR APDADR < (A)=TRANSLATION A DONNER A (B). < < MODES ABSOLU ((Y(ESCLAVE))=K) OU TRANSLATABLE : < RECSTA: EQU $ LXI RH0B AD &AXPLH0 < ON AJOUTE (B(ESCLAVE)). LR A,B < (B)=(B(ESCLAVE))+TRANS EVENTUELLEMENT 0. < < EXECUTION DU STORE : < LA &APLH0 < (A)=(A(ESCLAVE)). JAL RECST2 < C'EST PEUT-ETRE UN 'NSP'... < < CAS DES STORES ABSOLUS : < RECST3: EQU $ XR A,W < (A)=@DCTESC, (W)=@DE RANGEMENT. STB O,W < ET C'EST FAIT !??!!???! XR A,W < RESTAURE TOUT... JMP Z1950 < VERS LA SIMULATION IT HORLOGE. < < DISCRIMINATION DES 'NSP' : < RECST2: EQU $ XWOR%1: VAL Q8000=K < ACCES AU BIT0... RBT NBITMO-B-XWOR%1 CPI NSPLST < EST-CE UN 'NSP' ??? JLE RECST4 < OUI... LA &APLH0 < NON, (A)=(A(ESCLAVE))=@<32K. JMP RECST3 < VERS LE STORE ABSOLU... < < STORE DANS 'DCTSY' : < RECST4: EQU $ LR A,X < (X)='NSP'... STB &ADCTSY < ET VOILA LE BOULOT... JMP Z1950 < VERS LA SIMULATION D'UNE IT HORLOGE. PAGE < < < T R A C E / D E B U G : < < < FONCTION DES CLEFS DU PUPITRE : < CLEF0=1 : DEMANDE D'INTERVENTION, < CLEF1=0 : EDITION DE LA TRACE, < =1 : DEMANDE DU DEBUG SUR TTYS. < < E890: EQU $ PSR A,B,X,Y LR A,B < (B)=TACHE APPELANTE DU RECOVERY. LA CLESPU < RECUPERATION DANS A DE LA < VALEUR RENTREE AU PUPITRE < RELECTURE DES CLEFS (A CAUSE < DU PLR A,Y). TBT XCLEF1 < TEST DE LA CLEF1. JC DEBUGX < C'EST LE DEBUG SUR TTYS. < < < E D I T I O N D E L A T R A C E S U R L P 1 : < < STZ IMPTTY < INDICATEUR IMP/TTY (=K IMP) LAI MOMRW < RESET IMPRIMANTE... SIO IMPI LAD IMPT BSR AIMPM < EDITION DU TITRE DE TRACE. BSR AIMPLF LAD IMPCAL BSR AIMPM < EDITION DE 'ACTD BY '. BSR AIMPB < IMPRESSION DE (B)=TACHE APPELANTE. LAD IMPX BSR AIMPM < EDITION DE 'X= '. LR X,B < (B)=CAUSE DE L'APPEL. BSR AIMPB < IMPRESSION DE (B)=CAUSE DE L'APPEL. < < ENVOI DE LA DATE SUR LA TRACE : < LXI 10 BSR AIMPSP < ENVOI DE 10 'SPACE'. LA IMPDAT < (A)=ADRESSE DE LA DATE DE 'CMS5'. BSR AIMPM < ENVOI DE LA DATE SUR LA TRACE. BSR AIMPRC BSR AIMPLF LXI 1 BSR AIMPSP BSR AIMPRC < < EDITION DE LA TRACE PROPREMENT DITE : < LX TRACEX < INITIALISATION DE (X)=TRACEX. < < NOTA : < TRACEX DONNE LA 1ERE ENTREE LIBRE < DE LA TRACE, ET DONC EN MEME TEMPS < LE PLUS ANCIEN EVENEMENT MEMORISE < DANS LA TRACE, C'EST DONC PAR LUI < QU'IL FAUT COMMENCER. < E813: EQU $ BSR AIMPLF < POSITIONNEMENT EN DEBUT < DE LIGNE SUR LP1. LB &TRACE < (B)=MOT0 DE L'ENTREE COURANTE. ADRI I,X LA &TRACE < (A)=MOT1 DE L'ENTREE COURANTE. ADRI I,X PSR X < SAVE INDEX COURANT DE LA TRACE. < < AIGUILLAGES FONCTION DE LA NATURE DE L'ENTREE : < JAE E814 < EVENEMENT 'INTERRUPTION'. XXIDLE:: VAL -1 < DISCRIMINATEUR DE 'IDLE'... CPI XXIDLE < EST-CE 'IDLE' ??? JE E815 < EVENEMENT 'IDLE'. < < CAS DES EVENEMENTS CHAND/HANDLERS : < CONVENTIONS : < "("='ENTRY', < ")"='RETURN'. < Z288: EQU $ PSR A < SAVE MOT1 DE L'ENTREE COURANTE. XWOR%1: VAL MSKNSP=K XWOR%1: VAL -XWOR%1 < POUR UN DECALAGE A DROITE... XWOR%1: VAL MSKNSP>XWOR%1 LYI XWOR%1 SWBR B,X < (X)=OCTET0 DU MOT0. ANDR Y,X < (X)=BIT1-7(MOT0). CPZR X < < A T T E N T I O N : DANS LE CAS DE 'HDLVID', L'EDITEUR DE < TRACE DONNERA DES RESULTATS INATTENDUS... < JE E818 < EVENEMENT ENTRY/RETURN CHAND. JMP E821 < EVENEMENT ENTRY/RETURN < D'UN HANDLER. < < < E V E N E M E N T I D L E : < < E815: EQU $ LXI 20 BSR AIMPSP < ENVOI DE 20 'SPACE'. LAD IMPID BSR AIMPM < EMISSION DU MESSAGE 'IDLE '. BSR AIMPB < IMPRESSION DE (B). JMP E816 < VERS LA FIN DE LIGNE. < < < E V E N E M E N T I N T E R R U P T I O N : < < E814: EQU $ LR B,A < (A)=SOUS-NIVEAU GENERALISE D'IT. CPI X69 < EST-CE BIEN UN EVENEMENT IT ???? LAI K < RESTAURE A PRIORI (A)=K. JG Z288 < ET BIEN CE N'EST PAS UNE IT, < C'EST EN FAIT UN APPEL AVEC < MOT1=K (SOIT (W)=K, SOIT P=K LORS < DU MODE DE TRACE DE TOUS LES < CHANGEMENTS DE CONTEXTES). LXI 20 BSR AIMPSP < ENVOI DE 20 'SPACE'. LAD IMPIT BSR AIMPM < EMISSION DU MESSAGE 'IT'. < < ON A ICI : < (B)=NIVEAU GENERALISE D'IT. < BSR AIMPB < ENVOI DE (B)=NIVEAU GENERALOSE IT. LXI 2 BSR AIMPSP < ENVOI DE 2 'SPACE'. PSR B,L TBT NBITMO+XXSNAP < TEST DU BIT DE DUMP ??? JNC E886X < NON... LBI XNDMP < OUI, CETTE DEMANDE ET CARACTERISEE < PAR : < 1 - MOT1=0, < 2 - BIT0(MOT0)=1. E886X: EQU $ LRM L WORD DCTIT < 'L' BASE LA LISTE DES INTERRUPTIONS : ADR B,L < 'L' BASE MAINTENANT L'ENTREE RELAYEE < PAR L'EVENEMENT COURANT DE LA TRACE... LA O,L < (A)='NSP', OU ADRESSE DE NOM ASSOCIE AU < NIVEAU GENERALISE 'B'... JAGE E886X1 < OK... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < FAIRE ATTENTION CAR ON GENERE PAR < LA SUITE UN RELAI INDEXE SUR LE NOM... < E886X1: EQU $ JAL E886X2 < ON CONSIDERE QUE C'EST UNE ADRESSE (!??!) CPI NSPLST < EST-CE UN 'NSP' ??? JG E886X2 < NON, UNE ADRESSE... < < CAS DES 'NSP' ASSOCIES AU NIVEAU GENERALISE : < LR A,X < (X)='NSP', BSR ACADCT < (A)=L=ADRESSE DE LA 'DCT' ASSOCIEE. ADRI HNAME-DCT0,A < (A)=ADRESSE DU NOM DE LA TACHE... < < ICI, (A)=ADRESSE D'UN NOM : < E886X2: EQU $ PLR B,L BSR AIMPM < EMISSION DU NOM DU PERIPHERIQUE. E816: EQU $ BSR AIMPRC < FERMETURE DE LA LIGNE. PLR A < RESTAURE L'INDEX COURANT DE < LA TRACE (X) DANS A. ANDI UTRACE*LTRACE-N < PROGRESSION DE L'INDEX MODULO LA < LONGUEUR DE LA TRACE. CP TRACEX < A-T'ON BOUCLE LA PILE CIRCULAIRE < DE TRACE. JE E817 < OUI, L'EDITION EST TERMINEE. LR A,X < (X)=INDEX COURANT DE TRACE. JMP E813 < ACCES A L'ENTREE SUIVANTE. < < FIN DE TRACE : < E817: EQU $ BSR ADUMP < DUMP 32 K-MOTS TANT QUE LA CLEF0 < RESTE A 1 APRES LA TRACE. PLR A,B,X,Y BR AE812 < RETOUR AU BLOCAGE DU RECOVERY. < < < E V E N E M E N T E N T R Y / R E T U R N H A N D L E R : < < E821: EQU $ PSR X < SAVE LE NSP DU HANDLER EN CAUSE. LXI 8 BSR AIMPSP < EDITION DE 8 'SPACE'. LAI KPG < 'ENTRY' A PRIORI. TBT NBITMO+TERMIN < TEST DU BIT 11 DU MOT0, < C'EST-A-DIRE LE BIT 'TERMIN'. ADCR A < (A)="(" POUR 'ENTRY', < (A)=")" POUR UN 'RETURN'. PSR A SWBR B,A XWOR%1: VAL MOCD)MFFFF=K XWOR%1: VAL NBITMO-XWOR%1 < POUR CADRER 'MOCD' A GAUCHE... XWOR%2: VAL COSWBR=FMASK(K?MOCD=FCINST XWOR%2: VAL COSARS?XWOR%1=FMASK(K?XWOR%2=FCINST SARS XWOR%1 < ON ETEND AINSI L'ANCIEN BIT8(B). CPI XWOR%2 < OCTET1(B)='FF ??? PLR A JNE E821X < NON... ADRI KSTAR-KPD,A < OUI : A <-- "*" : IL S'AGISSAIT < D'UN CHANGEMENT DE CONTEXTE. E821X: EQU $ BSR AIMPK < IMPRESSION DE (A). PLR X < RESTAURE (X)=NSP DU HANDLER. E819: EQU $ < < ON A ICI : < (X)=NSP DU HANDLER EN CAUSE. < LAD IMPHDL BSR AIMPM < EMISSION DE 'HDL'. LA &ADCTSY < (A)=@DCT-NSP(X) (X=NSP). X37:: VAL HNAME-DCT0 JANE Z270 < (A)=@DCT(NSP(X)). < < CAS OU L'@DCT(NSP(X)) EST NULLE : C'EST < LE CAS D'UN HANDLER DE FICHIER A L'ETAT < 'CLOSE' OU D'UN UTILISATEUR NON ACTIF : < LAD IMPNUL-X37 Z270: EQU $ ADRI X37,A < (A)=@NOM DU HANDLER (OU NOM 'BIDON') BSR AIMPM < EDITION DU NOM DU HANDLER. LXI 4 BSR AIMPSP < EDITION DE 4 'SPACE'. BSR AIMPB < IMPRESSION DE (B)=MOT0. LAI KSLASH BSR AIMPK < IMPRESSION DE (A). PLR B < RESTAURE MOT1 (A) DANS B. BSR AIMPB < EDITION DE (B)=MOT1. JMP E816 < PASSAGE A L'ENTREE SUIVANTE. < < < E N T R Y / R E T U R N D A N S C H A N D : < < E818: EQU $ LAI KPG < 'ENTRY' A PRIORI. XWOR%1: VAL Q8000=K < ACCES AU BIT0... TBT NBITAB-B-XWOR%1 < TEST DU BIT0 DU MOT0... ADCR A < (A)="(" OU ")". BSR AIMPK < IMPRESSION DE (A). LAD IMPCH BSR AIMPM < EMISSION DU MESSGE 'CHAND '. LAD IMPV BSR AIMPM < EMMISION DE "-->". LR B,A < (A)=MOT0 DE L'ENTREE. XWOR%1: VAL MSKNSP=K XWOR%1: VAL -XWOR%1 < POUR UN DECALAGE A DROITE. XWOR%1: VAL MSKNSP>XWOR%1 ANDI XWOR%1 < CALCUL DU NSP DU HANDLER APPELE. LR A,X < (X)=NSP HDL APPELE. JMP E819 < VERS L'EDITION DES MOT0 & 1. PAGE < < < M O D U L E D E D E B U G S U R T T Y S : < < < FONCTION : < LE MODULE DE 'DEBUG' DE 'TH0' < PERMET D'EXPLORER ET MODIFIER LE < CONTENU DE LA MEMOIRE MAITRE DE < 'CMS5' PAR L'INTERMEDIAIRE DE SA < 'TTYS' ; DE PLUS, SI SA 'TTYS' < SUPPORTE UN LECTEUR DE RUBAN, ON < PEUT PAR CE MOYEN INTRODUIRE DES < PATCHES... < < < UTILISATION : < ( DESIGNANT UN NOMBRE HEXA-DECIMAL) < < : MODIFICATION ADRESSE COURANTE < TRAITEE EN MEMOIRE (INITIALISATION 0), < * : L'ADRESSE COURANTE RECOIT (SI VALIDE) LE < MOT ACCEDE EN MEMOIRE PAR >. < +/- : L'ADRESSE COURANTE PROGRESSE/REGRESSE < D'UNE VALEUR EGALE AU MOT COURANT. < . : < > : IMPRESSION DU CONTENU DU MOT D'ADRESSE < L'ADRESSE COURANTE. < , : < < : MISE DU NBRE COURANT A L'ADRESSE MEMOIRE < L'ADRESSE COURANTE. < = : IMPRESSION DE L'ADRESSE COURANTE SUIVIE < DU NBRE COURANT. < / : CLEAR DU NBRE COURANT. < : : INVERSION DU CLAVIER/LECTEUR DE TTYS. < ? : INVERSION DE LA FILE RSTF (K/-1). < & : MISE DE L'ADRESSE COURANTE DE LA ZONE < DE PATCH DANS LE NBRE COURANT. < NC<--(AZPTCH). < ( : MISE DE L'ADRESSE COURANTE DE LA ZONE DE < PATCH DANS L'ADRESSE COURANTE. < DBGADC<--(AZPTCH). < ) : MISE A JOUR DE LHADRESSE COURANTE DE LA ZONE < DE PATCH AVEC L'ADRESSE COURANTE. < AZPTCH<--(DGBADC). < ; : SORTIE DU DEBUG (RETOUR AU RECOVERY). < < < REMARQUE IMPORTANTE : < ',' ET '<' CORRESPONDENT A LA < MEME TOUCHE DU CLAVIER TTYS, < IL EN EST DE MEME DE '>' ET '.'. < < < AFFICHAGE PUPITRE : < EN PERMANENCE, ON VISUALISE LE < CONTENU DU MOT MEMOIRE COURANT < (EDITE OU MODIFIE), OU L'ADRESSE < COURANTE, LORSQUE CELLE-CI EST < MODIFIEE EXPLICITEMENT. < < NOTE D'UTILISATION : < POUR VISUALISER L'ADRESSE COURANTE < IL SUFFIT DE FRAPPER PAR EXEMPLE < LA COMMANDE '-' SEULE. < < < GENERATION DE CHAINAGES DANS UN PATCH : EXEMPLE : < WORD 1;$+2;2;3;... SE PATCHERA : < 1,/3+)/2-&,2,3,... < < < INCREMENTATION AUTOMATIQUE DE L'ADRESSE COURANTE : < L'ADRESSE COURANTE PROGRESSE AUTOMATI- < QUEMENT DE +1 LORSQUE 2 COMMANDES IDENTIQUES < (D'EDITION OU DE MODIFICATION MEMOIRE) < SE SUIVENT (PERMET DONC D'EDITER UN MOT < MEMOIRE ET ENSUITE DE LE MODIFIER DANS < LA FOULEE). < < < A T T E N T I O N : < APRES CHAQUE USAGE VALIDE DU < NOMBRE COURANT, CELUI-CI EST < REMIS A 0... < < DEBUGX: EQU $ < < BASCULEMENT ENTRE 'LP1' < ET 'TTYS', ET INITIALISATION : < BSR ABASK < BASCULEMENT... LAI EXIST IF EXIST-K,XEIF%,,XEIF% IF ATTENTION : IL FAUT QUE (A)#0 !!! XEIF%: VAL ENDIF STA IMPTTY < IMPTTY #0 SIGNIFIE TTY (POUR < LES S/P COMMUNS A 'LP1' ET 'TTYS'). < < REINITIALISATION DE 'TTYS', < ET MISE SOUS-TENSION AVEC < ATTENTE DE FIN D'OPERATION : < XTTYE1:: VAL 9 < PREMIER BIT D'ACTIVATION DE L'ECHO, XTTYE2:: VAL 10 < DEUXIEME BIT D'ECHO... XTTYR:: VAL 11 < BIT DE 'RESET'... XWOR%1: VAL COSBT?XTTYE1=FMASK(K=FCINST XWOR%1: VAL COSBT?XTTYE2=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?XTTYR=FMASK(K?XWOR%1=FCINST LAI XWOR%1 < RESET TTY ET ECHO SIO IMPI LXI 20 < 20 CARACTERES LAI KNUL < 'NULL'... E897: EQU $ BSR AIMPK < QUE L'ON IMPRIME... JDX E897 LA RINI < LA DATE A-T'ELLE DEJA ETE INI- < TIALISEE ??? JAGE E906 < OUI, ON NE LE REFAIT PAS... < < < I N I T I A L I S A T I O N D E L A D A T E : < < IC RINI < RINI=K : INIT FAITE, MAIS < DATE NON CONVERTIE EN ASCI. LAD DATM BSR AIMPM < ENVOI DU MESSAGE 'DATE?'. LYI LOTIME+IJIJDX < POUR TEST DE FIN D'ENTREE DE < LA DATE. E919: EQU $ LXI IJIJDX < POUR ACCES A DATHOR A PERTIR < DES ANNEES. E908: EQU $ LBY &INTDAT BSR AIMPK < ENVOI D'UN INDICATIF PRECISANT < LA COMPOSANTE DE LA DATE/HEURE. PSR X < SAVE INDEX DE DATHOR. LXI 2 < 2 CARACTERES A LIRE. LAI K < INITIALISATION DE LA VALEUR < BINAIRE DU NBRE A LIRE. E907: EQU $ MP DIX < CALCUL EN BASE 10. < (B)=VALEUR COURANTE DU NBRE A LIRE. BSR ALIRK < LECTURE 1 CARACTERE DANS A. ADRI -HZERO,A < CONVERSION NUMERIQUE. JAL E909 < ERREUR. CPI BASE10-Z JG E909 < < CAS OU L'ON A LU UN < BON CHIFFRE DECIMAL : < ADR B,A < CUMUL. JDX E907 < LECTURE CHIFFRE SUIVANT. PLR X < RESTAURE (X)=INDEX DE DATHOR. LR A,B < (B)=NBRE LU SUR TTYS. JAG E907X1 < OK, LE NOMBRE LU SUR 2 CHIFFRES EST < NON NUL... LR X,A < SI LE NOMBRE LU EST NUL, VOYONS DE QUELLE < COMPOSANTE IL S'AGIT : CPI XXHMOI+IJIJDX < EST-CE LES MOIS ??? JE E910 < OUI, LE MOIS 'ZERO' N'EXISTE PAS !!! CPI XXHJOU+IJIJDX < EST-CE LES JOURS ??? JE E910 < OUI, LE JOUR 'ZERO' N'EXISTE PAS !!! E907X1: EQU $ < OK, LA BORNE INFERIEURE EST VALIDEE... LA &DATINI < (A)=ENTREE COURANTE DE DATHOR. SLRS XXMAXT=K < (A)=MAX ATTENDU POUR LA VALEUR LUE. XR A,X < (A)=NUMERO COMPOSANTE COURANTE < DE LA DATE. CPI XXHJOU+IJIJDX < EN EST-ON AUX JOURS ????? XR A,X < RESTAURE A & X. JNE Z971 < NON, ON CONNAIT DONC LE MAX... < < CAS DES JOURS : < PSR X < SAVE X. LXI XXHMOI+IJIJDX*NOCMO+XXDX < INDEX D'ACCES AU MOIS COURANT. LBY &DATINI < (A)=MOIS COURANT. LR A,X < (X)=MOIS COURANT. CPI FEVRIE < EST-CE LE MOIS DE FEVRIER ??? JNE Z971Y < NON... LXI XXHANE+IJIJDX*NOCMO+XXDX LBY &DATINI < (A)=ANNEE COURANTE, XWOR%1: VAL BISSEX=K SLLS NBITMO-XWOR%1 < TEST DE LA DIVISIBILITE PAR 'BISSEX' ??? CPI K < PARCEQU'ON VA MODIFIER 'A'... L'ANNEE < COURANTE EST-ELLE BISSEXTILE ??? LAI FEVR29 JE Z971X < OUI, (A)='FEVR29', LAI FEVR28 < NON, (A)='FEVR28'. Z971X: EQU $ LXI FEVRIE < RESTAURE : (X)=MOIS COURANT, STBY &DATMAX < MODIFICATION DU NOMBRE DE JOURS < DU MOIS DE FEVRIER... Z971Y: EQU $ LBY &DATMAX < (A)=NBRE DE JOURS DU MOIS COURANT. < (NOMBRE DE JOURS+1 !!!) PLR X < RESTAURE X. Z971: EQU $ < < ON A ICI : < (A)=MAX ATTENDU POUR LA VALEUR LUE. < CPR A,B < VALIDATION DU NBRE LU. JGE E910 < VALEUR ERRONNEE. < < CAS OU LE NOMBRE LU < EST CORRECT : < SWBR A,A < OCTET0(A)=MAX. ORR B,A < OCTET1(A)=NBRE LU. STA &DATINI < MAJ DE LA DATE ET DE L'HEURE < EN BINAIRE (LA CONVERSION ASCI < N'AYANT LIEU QU'A LA 1ERE IT < HORLOGE SUIVANT LE RECOVERY. LAI KSTAR BSR AIMPK < ENVOI DE '*' COMME SEPARATEUR. ADRI I,X < ENTREE SUIVANTE DE DATHOR. CPR X,Y < TEST DE FIN DE PARCOUURS. JNE E908 < ENTREE SUIVANTE. < < INITIALISATION DU COMPTEUR DE SECONDES : < LR B,Y < (Y)=SECONDES(DATE). LXI XXHHEU+IJIJDX*NOCMO+XXDX LBY &DATINI < (A)=HEURE(DATE). MP DAT60 < (B)=HEURE(DATE) EN MINUTES. LXI XXHMIN+IJIJDX*NOCMO+XXDX LBY &DATINI < (A)=MINUTES(DATE). ADR B,A MP DAT60 < CONVERSION EN SECONDES. ADR Y,B ADCR A < ADDITION DE LA RETENUE EVENTUELLE. STA HTIME < INITIALISATION DU COMPTEUR STB HTIMED < JOURNALIER DES SECONDES. < < < T I T R E D E D E B U G : < < E906: EQU $ PSR W LAD IMPTD BSR AIMPM < < INITIALISATION DU DEBUG : < STZ DBGMC < MOT COURANT A 0. STZ DBGADC < ADRESSE COURANTE A 0. STZ DBGCP < RAZ COMMANDE PRECEDENTE. LBI K < INITIALISATION DE B POUR LA < COMMANDE D'INDIRECTION. < < < B O U C L E D U D E B U G : < < DBG1: EQU $ BSR ALIRK < LECTURE 1 CARACTERE DANS A. < < DECODAGE DU CARACTERE : < DBGC0: VAL DBGC0-DBGC00 < RAZ BIT DE PARITE. ADRI -DBGC0,A < TRANSLATION PAR RAPPORT A LA < 1ERE COMMANDE RECONNUE. JAL E892 < CARACTERE NON RECONNU. CPI HF-DBGC0 JG E892 < CARACTERE NON RECONNU. LR A,X < (X)=CARACTERE TRANSLATE DE '2A. LA &DBGVAL < CODAGE DU CARACTERE. JAL Z660X < COMMANDE < < ON A ICI : < (A)=UN NBRE DE 0 A 15 SI LE CARACTERE EST < UN CHIFFRE HEXA, < (A)=ADRESSE MODULE DE TRAITEMENT DE LA FONCTION SI LE < CARACTERE EST < ,>,@,=,:,;,*,+,-. < (X)=VALEUR DU CARACTERE TRANSLATEE. < CPI BASE16-Z JLE DBGAS < C'ETAIT UN CHIFFRE HEXA, < ALLONS L'ASSEMBLER... DBGC0: VAL DBGC0+DBGC00 < RESATURE BIT DE PARITE. CP YBGVAL+KET-DBGC0 < ETAIT-CE "&" ??? ? JE Z660 < OUI, IL EST IGNORE EN TANT < QUE COMMANDE, CAR '&' EST EN < FAIT UNE VARIABLE... < < TRAITEMENT DES COMMANDES : < Z660X: EQU $ CP DBGCP < COMPARAISON DE LA COMMANDE < COURANTE A LA COMMANDE PRECEDENTE STA DBGCP < MAJ COMMANDE PRECDENTE. Z660: EQU $ BR &DBGVAL < BRANCHEMENT AU MODULE DE LA < COMMANDE. < < < S O R T I E D U D E B U G : < < DBGFIN: EQU $ BSR AIMPRC BSR AIMPLF < < RE-BASCULEMENT DES ARGUMENTS < DE 'SIO' DE 'LP1' ET 'TTYS' : < BSR ABASK < < RETOUR AU MODE LP1 DES ARG. DES SIO : < LA IMPC RBT L < RETOUR A LP1. STA IMPC LA IMPI RBT L < RETOUR A LP1. STA IMPI PLR W PLR A,B,X,Y BR AE812 < RETOUR AU BLOCAGE DU RECOVERY. < < < A S S E M B L A G E D ' U N N O M B R E : < < DBGAS: EQU $ < < ON A ICI : < (A)=4 BITS A CONCATENER EN QUEUE DU MOT COURANT. < SCRS NBITCX < CADRAGE A GAUCHE DANS A DES 4 < BITS. OR DBGMC < CONCATENATION AU NBRE COURANT. SCLS NBITCX < CADRAGE DROIT ET CONCATENATION. Z241: EQU $ STA DBGMC < MISE A JOUR DU NBRE COURANT. JMP DBG1 < VERS LA BOUCLE DE DEBUG. < < < N B R E C O U R A N T <-- ( A Z P T C H ) : < < DBGNCP: EQU $ LA AZPTCH JMP Z241 < < E R R E U R D A N S L A D A T E : < E909: EQU $ ADRI -D,K < RATTRAPAGE DU 'PLR X' MANQUANT. E910: EQU $ LAI KPI BSR AIMPK < ENVOI DE '?' EN SIGNE D'ERREUR. JMP E919 < ON RECOMMENCE AU DEBUT, CETTE < SOLUTION PERMET DE REPRENDRE < TOUTE LA DATE EN CAS D'ERREUR, < EN FAISANT UNE FAUTE DE < FRAPPE VOLONTAIRE... < < < M E S S A G E D ' E R R E U R D U D E B U G : < < ADRI -D,K < RATTRAPAGE DU RSR MANQUE. E892: EQU $ LAI KPI < ENVOI D'UN "?" A L'OPERATEUR. BSR AIMPK JMP DBG1 < RETOUR A LA BOUCLE DU DEBUG. < < < V A L I D A T I O N D E L ' A D R E S S E < C O U R A N T E : < < < FONCTION : < CETTE ROUTINE DANS LE CAS < OU 2 COMMANDES IDENTIQUES SE SUIVENT < INCREMENTE L'ADRESSE COURANTE, < ET ENSUITE VALIDE CELLE-CI. < < DBGV: EQU $ JNE E895 < LA COMMANDE COURANTE N'EST PAS < LA MEME QUE LA COMMANDE PRECEDENTE IC DBGADC < DANS LE CAS OU 2 COMMANDES < D'EDITION (OU D'IMPRESSION) < IDENTIQUES SE SUIVENT, < L'ADRESSE COURANTE PROGRSSE DE +1 E895: EQU $ LA DBGADC < VALIDATION DE L'ADRESSE COURNATE. RSR < OK, RETOUR. < < < I N V E R S I O N C L A V I E R / L E C T E U R : < < DBGCLA: EQU DBG1 < CETTE INVERSION NE PEUT SE < FAIRE PAR UN SIO DE COMMANDE. < C'EST L'OPERATEUR QUI FERA < MANUELLEMENT LE SWITCH < CLAVIER---> RUBAN < < < C L E A R D U N B R E C O U R A N T : < < DBGCL: EQU $ STZ DBGMC < RAZ DU NBRE COURANT. JMP DBG1 < RETOUR A LA BOUCLE DU DEBUGER. < < < M O D I F I C A T I O N M E M O I R E : < < DBGST: EQU $ BSR ADBGV < VALIDATION ET INCREMENTATION < EVENTUELLE DE L'ADRESSE COURANTE. LB DBGMC < RECUPERATION DU NBRE COURANT, LA DBGADC LR A,W STB O,W < NBRE COURANT QUE L'ON RANGE A < L'ADDRESSE COURANTE. STZ DBGMC < REINITIALISATION DU NBRE COURANT. E902: EQU $ LR B,A < POUR AFFICAHGE PUPITRE DU < CONTENU MEMOIRE COURANT. BSR ASMPUO < AFFICHAGE MOT MEMOIRE COURANT JMP DBG1 < RETOUR A LA BOUCLE DE DEBUG. < < < I M P R E S S I O N M E M O I R E : < < DBGIMP: EQU $ BSR ADBGV < VALIDATION ET INCREMENTATION < EVENTUELLE DE L'ADRESSE COURANTE. LA DBGADC LR A,W LB O,W < (B)=CONTENU DU MOT MEMOIRE < D'ADRESSE L'ADRESSE COURANTE. BSR AIMPB < IMPRESSION DE (B). JMP E902 < VERS L'AFFICHAGE PUPITRE. < < < M O D I F I C A T I O N D E < L ' A D R E S S E C O U R A N T E : < < DBGADR: EQU $ LA DBGMC < ACCES AU NBRE COURANT. E899: EQU $ < ENTREE AVEC RAZ DE DBGMC. STZ DBGMC < REINITIALISATION DU NBRE < COURANT. E898: EQU $ < ENTREE SANS RAZ DE DBGMC. < < ON A ICI : < (A)=LA NOUVELLE ADRESSE COURANTE (SI VALIDE...). < Z240: EQU $ STA DBGADC < OK, MAJ DE L'ADRESSE COURANTE. BSR ASMPUO < AFFICHAGE NOUVELLE ADRESSE < COURANTE JMP DBG1 < RETOUR A LA BOUCLE DE DEBUG. < < < A Z P T C H <-- ( D B G A D C ) : < < DBGMAP: EQU $ LA DBGADC CP LZPTCH < COMPARAISON A LA LIMITE SUP. < DE LA ZONE DE PATCH DU SYSTEME. JGE E892 < 'OVERPATCH' : DGBADC REFUSEE. STA AZPTCH < OK, MAJ DE AZPTCH. JMP DBG1 < VERS LA BOUCLE DU DEBUG. < < < D B G A D C <-- ( A Z P T C H ) : < < DBGAP: EQU $ LA AZPTCH CP LZPTCH < VALIDATION. JL Z240 < OK, MAJ DE DBGADC. JMP E892 < ERREUR : OVERPATCH. < < < A D R E S S A G E I N D I R E C T : < < DBGIND: EQU $ LR B,A < B CONTENAIT LE MOT MEMOIRE < PRECEDEMMENT TRAITE. JMP E898 < VERS DBGADR, SANS MODIFICATION < DU NBRE COURANT DBGMC. < < < P R O G R E S S I O N D E L ' A D R E S S E < C O U R A N T E : < < DBGP: EQU $ LA DBGADC AD DBGMC < ON FAIT : < DBGADC<--(DBGADC)+(DBGMC). JMP E899 < VERS DBGADR AVEC RAZ DE DBGMC. < < < D E G R E S S I O N D E L ' A D R E S S E < C O U R A N T E : < < DBGM: EQU $ LA DBGADC SB DBGMC < ON FAIT : < DBGADC<--(DBGADC)-(DBGMC). JMP E899 < VERS DBGADR AVEC RAZ DE DBGMC. < < < E D I T I O N D E L ' A D R E S S E E T < D U N B R E C O U R A N T S : < < DBGIAC: EQU $ PSR B LB DBGADC < (B)=ADRESSE COURANTE. BSR AIMPB < IMPRESSION DE L'ADRESSE < COURANTE. LAI KET BSR AIMPK < ENVOI DE "&" COMME SEPARATEUR. LB DBGMC < (B)=NBRE COURANT. BSR AIMPB < EDITION DU NBRE COURANT. PLR B JMP DBG1 < REOUR A LA BOUCLE DU DEBUG. < < < I N V E R S I O N D E L A F I L E R S T F : < < IRSTF: EQU $ LXI LOFDMS LAI MMOT < A PRIORI. CP &ARSTF < UN MOT DE RSTF VAUT -1 (ETAT < NORMAL), OU 0 AVEC AU PLUS < UN BIT A 1 (MODE TRACE DES < CHANGEMENTS DE CONTEXTE). JNE E962 < ON ETAIT EN MODE TRACE CHANGE- < MENTS DE CONTEXTES, PASSONS A L' < ETAT NORMAL. LAI K < DANS LE CAS OU ON ETAIT DANS L' < ETAT NORMAL, ON PASSE A L'ETAT < TRACE DES CHANGEMENTS DE < CONTEXTE EN RAZANT RSTF. E962: EQU $ STA &ARSTF < RSTF RECOIT 0 OU -1. JDX E962 LXI NTS0 LYI FONSB1 LAD ARSTF BSR ATMOBT < A PRIORI, ON FOCE LE BIT 'RSTF' DE < LA TACHE 'CHECK AND TRACE'... JMP DBG1 < VERS LA BOUCLE DU DEBUG. PAGE < < < L E C T U R E 1 C A R A C T E R E S U R T T Y S : < < < FONCTION : < CE SOUS-PROGRAMME LIT UN < CARACTERE SUR 'TTYS', RAZE < SON BIT DE PARITE, ET ELI- < MINE TOUS LES CARACTERES DE < TYPE 'CTRL' (DE CODES INFE- < RIEURS A CELUI DE 'SPACE'). < < < RESULTAT : < (A)=CARACTERE LU (NON 'CTRL'). < < LIRK: EQU $ BSR ATDEFS < TEST DEFSEC EN ATTENTE SIO IMPETA < ENTREE MOT D'ETAT TBT ETANXT < BIT VAL MOT ETAT =1? JNC LIRK < NON ON BOUCLE XWOR%1: VAL COSBT?XTTYE1=FMASK(K=FCINST XWOR%1: VAL COSBT?XTTYE2=FMASK(K?XWOR%1=FCINST LAI XWOR%1 SIO IMPI < A PRIORI, ON REMET LE MODE ECHO, EN < EFFET, SI UN DEFAUT SECTEUR EST APPARU < LORS DU DEBUG LE REGISTRE DE COMMANDE < EST EFFACE... SIO TTYE < ENTREE CARACTERE DANS A RBT BITPAR CPI KRUBOU < EST-CE UN RUBBOUT (DEL) ???? JE LIRK < OUI, IGNORE... CPI KSP JLE LIRK < TOUS LES CARACTERES INFERIEURS < AU 'SPACE' (LUI COMPRIS) : RC, < LF,... SONT IGNORES. RSR < < < B A S C U L E M E N T ' L P 1 ' / ' T T Y S ' : < < < ATTENTION : < CE SOUS-PROGRAMME DETRUIT 'A' !!! < < BASK: EQU $ < < SORTIE CARACTERE : < LA TTYC XM IMPC STA TTYC < < SORTIE COMMANDE : < LA TTYI XM IMPI STA TTYI < < ENTREE MOT D'ETAT : < LA TTYETA XM IMPETA STA TTYETA < < ET RETOUR : < RSR PAGE < < < I M P R E S S I O N D U R E G I S T R E 'B' : < < < FONCTION : < CE SOUS-PROGRAMME EDITE < LE CONTENU DU REGISTRE 'B'... < < < ARGUMENT : < (B)=VALEUR A EDITER. < < IMPB: EQU $ PSR A,B,X LXI NBITMO/NBITCX < EN EFFET, UN MOT DE 16 BITS < GENERE 4 CARACTERES. IMPB1: EQU $ LAI K < RAZ DE A. SLLD NBITCX < DECONCATENATION DE 4 BITS DE B. ORI HZERO < CONVERSION EN ASCI. CPI HNEUF < EST-CE EN FAIT UN CHIFFRE OU < UNE LETTRE... JLE IMPB2 < OK, C'EST UN CHIFFRE : "0" A "9". ADRI HA-HNEUF-Z,A < CONVERSION EN UNE LETTRE : < "A" A "F". IMPB2: EQU $ BSR AIMPK < EDITION DE (A). JDX IMPB1 < CARACTERE SUIVANT. PLR A,B,X RSR < < < I M P R E S S I O N C A R A C T E R E : < < < ARGUMENT : < (A)=CARACTERE ASCI A IMPRIMER. < < IMPK: EQU $ PSR A,X CPZ IMPTTY < 'LP1' OU 'TTYS' ??? JNE IMPK1 < 'TTYS'... LXI ETAOPE < 'LP1' : < (X)=BIT A TESTER POUR 'LP1 READY'... JMP IMPK2 IMPK1: EQU $ LXI ETARIL < 'TTYS' : < (X)=BIT A TESTER POUR 'BUFFER TTYS < EMPTY'... IMPK2: EQU $ BSR ATDEFS < TEST D'UN EVENTUEL DEFAUT SECTEUR EN < ATTENTE, CAR EN EFFET ON BOUCLE... SIO IMPETA < (A)=MOT D'ETAT DU PERIPHERIQUE : TBT L,X < ALORS ON EST PRET ??? JNC IMPK2 < NON, ON BOUCLE... CPZ IMPTTY < OUI, QUI EST-CE ??? JNE IMPK3 < 'TTYS'... TBT ETANXT < 'LP1', ALORS EST-ELLE OCCUPEE ??? JNC IMPK2 < OUI, ON ATTEND QU'ELLE NE LE SOIT PLUS... IMPK3: EQU $ PLR A,X SIO IMPC < ET ENFIN, IMPRESSION DU CARACTERE.. RSR < < < E M I S S I O N D ' U N M E S S A G E : < < < ARGUMENT : < (A)=ADRESSE MOT DU MESSAGE (DETRUIT 'A' !!!), < OCTET0(MESSAGE)=LONGUEUR DU MESSAGE EN ASCI (...). < < IMPM: EQU $ PSR B,X SBT BITX < GENERATION DE L'INDEXATION. STA IMPA < GENERATION D'UN RELAI INDIRECT < INDEX VERS LE MESSAGE. LXI K LBY &IMPA < ACCES A LA LONGUEUR DU MESSAGE < CODEE EN ASCI ("1"=1,...). ANDI MBAS16 < (A)=LONGUEUR DU MESSAGE (K A 15). LR A,B < (B)=LONGUEUR DU MESSAGE (<16). IMPM1: EQU $ CPR X,B < TEST DE FIN D'EDITION. JE IMPM2 < OK, FIN DU MESSAGE. ADRI I,X LBY &IMPA < (A)=1 CARACTERE DU MESSAGE. BSR AIMPK < EDITION DE CE CARACTERE. JMP IMPM1 < AU SUIVANT. IMPM2: EQU $ PLR B,X RSR < < < E D I T I O N D E ' L F ' , ' R C ' , ' S P ' : < < < DETRUISENT A. < < < < < ' L F ' : < < IMPLF: EQU $ LAI KLF < (A)='LF'. E820: EQU $ BSR AIMPK RSR < < < ' R C ' : < < IMPRC: EQU $ LAI KCR < (A)='RC'. JMP E820 < < < ' S P A C E ' : < < < ARGUMENT : < (X)=NBRE DE 'SPACE A EMETTRE. < < < ATTENTION : < DETRUIT LE REGISTRE 'X' !!! < < IMPSP: EQU $ LAI KSP < (A)='SPACE'. IMPSP1: EQU $ BSR AIMPK JDX IMPSP1 RSR PAGE < < < D U M P M E M O I R E 6 4 K : < < DUMP: EQU $ LA MEMV TBT MEMXXX < MAIS LE DUMP EST-IL AUTORISE ??? JNC DUMPX < NON, GARE AUX ESPIONS !??!?!??! LAD IMPDMP BSR AIMPM < ENVOI DU TITRE DE DUMP. PSR W LA CLESPU < RECUPERATION DES CLES DU PUPITRE RBT L < RAZ DU BIT0 DE DEMANDE DE < DE TRACE, A PRIORI. NMLIGN:: VAL BIT>4 < NOMBRE MOTS/LIGNE=PUISSANCE DE 2... ANDI NMLIGN-N)MFFFF < CALCUL MODULO 16 DE (A). LR A,W < W RECOIT L'ADRESSE DE DEPART < DU DUMP (MODULO 16) ; CE DUMP < SE FERA DE (W) A '7FFF, ET < PEUT ETRE INTERROMPU A TOUT < MOMENT EN SUPPRIMANT LA CLEF0. < < BOUCLE DE DUMP DE LA MEMOIRE : < E958: EQU $ BSR ASMPUI < CARY=INFORMATION VALIDE (1). JNC E958X < RIEN JAGE E956 < FIN E958X: EQU $ BSR AIMPLF < ENVOI D'UN LF EN TETE DE CHAQUE < NOUVELLE LIGNE. LR W,B BSR AIMPB < IMPRESSION DE L'ADRESSE MEMOIRE < D'UN BLOC DE 16 MOTS EN TETE < DE CHAQUE LIGNE. LAD IMPAD BSR AIMPM < ENVOI D'UN INDICATIF D'ADRESSE. LXI NMLIGN < ON MET 16 MOTS PAR LIGNE. < < BOUCLE DE DUMP DE 16 MOTS : < E959: EQU $ LR X,Y < SAVE X DANS Y. LXI 3 BSR AIMPSP < ENVOI DE 3 'SPACE' ENTRE CHAQUE < MOT DE LA LIGNE. LR Y,X < RESTAURE X. LB O,W < ACCES AU MOT POINTE PAR W DANS B. BSR AIMPB < IMPRESSION DU MOT COURANT (W). ADRI P,W < ADRESSE DU MOT SUIVANT. JDX E959 < POURSUIVONS SUR LA LIGNE. BSR AIMPRC < ENVOI D'UN R/C DE FIN DE LIGNE. CPZR W JNE E958 < CETTE BOUCLE PERMET DE BALAYER < LES 64 K DE LA MEMOIRE. BSR AIMPLF < AFIN D'IMPRIMER LA DERNIERE LIGNE !???!! E956: EQU $ PLR W < RESTAURE W. DUMPX: EQU $ RSR PAGE < < < L I S T E D E S B L O C S M E M O I R E < A C C E S S I B L E S A U X P R O L E T A I R E S < U T I L I S A N T L E S Y S T E M E : < < < FORMAT : < CETTE LISTE CONTIENT (COMME < 'LZSAV') L'ADRESSE DE DEBUT D'UN < BLOC ET LE NOMBRE DE MOTS QUE L'ON < PEUT Y LIRE, Y COMPRIS CELUI DU < DEBUT... < < LZ1E15: EQU $ < < FORMAT DE LA LISTE : < YCOPAD:: VAL XCOPAD < ADRESSE DE DEBUT DU BLOC, YCOPLO:: VAL XCOPLO < NOMBRE DE MOTS ACCESSIBLES, YLCOPY:: VAL XLCOPY < LONGUEUR D'UNE ENTREE DE LA LISTE... < < LISTE PROPREMENT DIT : < WORD NSL;D*W < NBRE TOTAL DE SECTEURS LIBRES. WORD BSTREE;D*W < NOMBRE DE NOEUDS LIBRES DANS L'ARBRE. WORD TFREK1;LTFREK < ALPHABET VIRTUEL DU 'SGN'. WORD NCOLOR;-XXCULM < MEMOIRE DES COULEURS DE 'MEMTV'. < (NOTA : LA VALEUR '-XXCULM' SEMBLE AVOIR < ETE MISE EN PREVISION D'UNE EXTENSION < RELATIVE A UNE VERIFICATION DES ASSI- < GNATIONS A 'CU3' LORS DE L'ACCES DIRECT < A LA MEMOIRE DES COULEURS DE 'MEMTV' < SANS PASSER PAR 'NSPCOL'... CETTE < EXTENSION N'A PAS ENCORE ETE FAITE...) WORD OCDA;D*W < DEBUT DE LA 'CDA' COURANTE, WORD ECDA;D*W < FIN DE LA 'CDA' COURANTE. WORD CVOLU;ELVOL < ACCES AU DESCRIPTEUR DU VOLUME COURANT. WORD TEDF+IJIJDX;LTEDF < ACCES AUX ETATS DES FICHIERS. WORD LTIME;LOTIME < DATE ET HEURE COURANTE. WORD ETASYS;D*W < LISTE DES INDICATEURS DE CONTROLE... < (ON Y DONNE ACCES A CAUSE DES PROGRAM- < MES QUI TESTE LE MODE DE DESTRUCTION DES < FICHIERS...) < < FIN DE LA LISTE : < WORD NIL;NIL < INDICATEUR DE FIN DE LISTE... XWOR%1: VAL W+W < LONGUEUR DE LA ZONE DE PATCH DE LA LISTE. DO XWOR%1 WORD NIL;NIL < < < A C C E S D I R E C T A L A M E M O I R E < E T A C C E S P A R ' N V P ' : < < < FONCTION : < CE MODULE EST DEVENU UN SOUS- < PROGRAMME DEPUIS QUE CERTAINES < VALIDATIONS ONT ETE RAJOUTEES, < DU TYPE SEUL ":SYS" PEUT ACCEDER < A L'INTEGRALITE DE LA MEMOIRE, < ET LA MEMOIRE DES COULEURS N'EST < ACCESSIBLE LORSQUE 'CU3' EST LOUEE < QU'AU LOCATAIRE. < DE PLUS, IL S'AGIT D'UN SOUS-PROGRAMME < A CAUSE DES SAUTS SUPERIEURS A 128 MOTS... < < < ARGUMENT : < (A)=CONTENU DU REGISTRE A(ESCLAVE). < < < RESULTAT : < (A)=ADRESSE MEMOIRE (SI ACCES DIRECT), OU < RELAI (SI ACCES PAR 'NSP'), OU < VALEUR FARFELUE LORSQUE L'ACCES EST ILLEGAL... < < RCABS: EQU $ LR A,Y < (Y)=SAUVEGARDE DE L'ADRESSE DEMANDEE... JAL RECNVP < ACCES PAR DCTSY. < < < A C C E S D I R E C T A L A M E M O I R E : < < Z731X: EQU $ PSR B,L < SAUVEGARDES DIVERSES... < < TEST DE DEMANDEUR : < LA ACNESC-DCTESC,W CP ACNSYS < EST-CE ":SYS" ??? JNE Z731X4 < NON, IL FAUT VALIDER L'ACCES... LA ACNESC-DCTESC+U,W CP ACNSYS+U < EST-CE ":SYS" ??? JE Z731X5 < OUI, TOUT EST PERMIS... < < CAS DES AUTRES QUE ":SYS" : < Z731X4: EQU $ LRM L WORD LZ1E15 < (L)=ADRESSE DE LA LISTE DES BLOCS < AUTORISES EN ACCES DIRECT A LA < MASSE POPULAIRE... Z731X6: EQU $ LA YCOPAD,L < (A)=ADRESSE DE L'ELEMENT COURANT, JAE Z731XA < ET BIEN, C'EST FINI : ON N'A TROUVE AUCUN < INTERVALLE LEGAL, L'ACCES EST INTERDIT... LB YCOPLO,L < (B)=LONGUEUR DE L'ENTREE COURANTE, CPZR B JGE Z731X7 < DONT ON PREND NGR B,B < LA VALEUR ABSOLUE. Z731X7: EQU $ SBR Y,A NGR A,A < (A)=ADRESSE DEMANDEE-ADRESSE COURANTE, JAL Z731X8 < L'ADRESSE DEMANDEE EST HORS DE L'IN- < TERVALLE LEGAL, PASSONS A L'ENTREE < SUIVANTE... CPR B,A < ??? JL Z731X9 < 0<=(A)<(B) : L'ADRESSE DEMANDEE EST < DANS L'UN DES INTERVALLES AUTORISES, < L'ACCES EST LICITE... Z731X8: EQU $ ADRI YLCOPY,L < DANS LE CAS DES ADRESSES HORS-INTER- < VALLE, ON PASSE A L'ENTREE SUIVANTE, JMP Z731X6 < SI ELLE EXISTE... < < CAS DES ADRESSES ILLICITES : < YYDEF0: WORD XXDEF0 < C'EST LE CONTENU DE CE MOT QUI SERA < EDITE POUR TOUS LES ACCES ILLICITES ; A < NOTER L'ASTUCE "DEFAUT" ('DEF0')... Z731XA: EQU $ LRM Y WORD YYDEF0 < ET ON FORCE UNE ADRESSE FARFELUE DANS < LE REGISTRE 'Y' ==> "DEFAUT"... < < CAS DES ACCES LICITES, ET DE ":SYS" : < Z731X9: EQU $ Z731X5: EQU $ LR Y,A < (A)=ADRESSE MEMOIRE DEMANDEE... PLR B,L < RESTAURATIONS... < < ACCES DIRECT MEMOIRE : < PSR W < SAUVEGARDE DE L'ADRESSE DE 'DCTESC'... LR A,W LA O,W < RECUPERATION DU CONTENU DU < MOT DONT L'ADRESSE ABSOLUE < EST DANS A(ESCLAVE). PLR W < RESTAURATION DE L'ADRESSE DE 'DCTESC'. JMP Z731XC < VERS LA SORTIE, POUR RENVOI DU CONTENU < PAR L'INTERMEDIAIRE DE B(ESCLAVE)... < < < A C C E S M E M O I R E V I A ' D C T S Y ' : < < RECNVP: EQU $ RBT XXBNSP < RAZ DU BIT 0 (.AND.'7FFF). CPI NSPLST < EST-CE VRAIMENT UN NSP ??? JG Z731Y < NON, DONC ACCES DIRECT... < < TEST D'UN ACCES A LA MEMOIRE < DES COULEURS ('CU3') : < CPI NSPCOL < EST-CE LA MEMOIRE DES COULEURS ??? JNE Z731X1 < NON, PAS DE PROBLEMES... PSR A,X,L < OUI, LXI NSPCU3 < (X)='NSP' DU COUPLEUR POSSEDANT LA < MEMOIRE DES COULEURS, BSR ACADCT < (A)=(L)=ADRESSE DE SA 'DCT'... USE L,DCT0 CPZ ETALOC < ALORS EST-IL LOUE ??? USE L,LOCTH0+DEPL0 JGE Z731X2 < NON, PAS DE LIMITATIONS D'ACCES... IF XETLOC-BITSIG,,XEIF%, IF ATTENTION : LE TEST PRECEDENT EST IDIOT !!! XEIF%: VAL ENDIF LXI NOCMO*LTASGN-Z < OUI, IL EST LOUE, IL FAUT DONC VOIR SI < L'ON EST EN PRESENCE DU LOCATAIRE ??? Z731X3: EQU $ LBY &TASSGN-DCTESC,W < PARCOURS DE 'TASSGN' : CPI NSPCU3 < L'UTILISATEUR COURANT POSSEDE-T'IL 'CU3'? JE Z731X2 < OUI, L'ACCES EST LICITE... JDX Z731X3 < NON, PASSAGE AU PERIPHERIQUE PRECEDENT... PLR A,X,L < ET BIEN NON, L'UTILISATEUR COURANT N'A < PAS LE 'CU3', LAI NSPVID < ON FORCE DANS 'A' UN 'NSP' FARFELU... JMP Z731X1 < ET ON VA EFFECTUER LA DEMANDE... Z731X2: EQU $ < LORSQU'ON POSSEDE LE 'CU3', PLR A,X,L < APRES CETTE RESTAURATION, 'A' CONTIENT < LE 'NSPCOL'... < < ACCES A UN RELAI PAR 'DCTSY' : < Z731X1: EQU $ LR A,X < (X)='NSP' D'ACCES A L'INFORMATION, LA &ADCTSY < (A)=INFORMATION DEMANDEE ; A < NOTER QUE CETTE INFORMATION EST < EN FAIT UN RELAI VERS UNE < AUTRE INFORMATION (CF. DCTSY) !!!! < < SORTIE DU SOUS-PROGRAMME : < Z731XC: EQU $ < (A) EST BON... RSR < < ACCES DIRECT AU DELA DE Q8000+NSPLST : < Z731Y: EQU Z731X PAGE < < < S A U V E G A R D E P U I S R E S T A U R A T I O N < D E S R E G I S T R E S D E L ' E S C L A V E : < < < ARGUMENT : < (W)=ADRESSE DE LA 'DCTESC'. < < TRAPH: EQU $ PSR A,B,X < < RECONSTITUTION ET SAUVEGARDES : < BSR ASIPST < RECONSTITUTION DE 'PSTESC' DU AU < CHANGEMENT DE CONTEXTE PARTIEL AVEC 'TH0' < ET OUI, MERCI LA 'SEMS'... BSR ASAVRE < SAUVEGARDE REGISTRES < < INITIALISATION DES REGISTRES < ET DE LA MEMOIRE : < LXI LPSTH0+TH0P STZ &AXPSTH < RAZ REGISTRE DU REGISTRE 'P', STZ &APSTHS < MISE A PRIORI DE L'ESCLAVE EN MODE < ESCLAVE ; EN EFFET IL POURRAIT ETRE < EN MODE MAITRE (VOIR PAR EXEMPLE UNE < VIOLATION MEMOIRE PENDANT UN 'SVC'...). CPZ MOT0 < MODE 'SVC' OU 'QUIT' ??? JL TRAPH1 < MODE 'QUIT'... < < MODE 'SVC' : < XWOR%6: VAL LPSTH0+TH0K LXI XWOR%6 < POUR ATTEINDRE 'K' DANS 'PSTH0'... IF XMOT2-DEPILE-XWOR%6,,XEIF%, IF ATTENTION : L'INITIALISATION DU REGISTRE 'K' IF DANS 'PSTH0' EST MAUVAISE !!! XEIF%: VAL ENDIF IF XMOT1-XWOR%6,,XEIF%, IF ATTENTION : L'INITIALISATION DU REGISTRE 'A' IF DANS LA PILE DE 'TH0' EST MAUVAISE !!! XEIF%: VAL ENDIF STX &AXPSTH < K <- 1 STX &APLH0 < A <- 1 TRAPH1: EQU $ PSR W LAI LARMO2 < (A)=INDICATEUR DE 'LAR' REALISABLE SUR < LE MOT2 DE L'ESPACE MEMOIRE UTILI- < SATEUR... BSR AIMEMY < GENERATION DU PROGRAMME MINIMUM, ET < SAUVEGARDE PREALABLE DES MOT0, MOT1 < ET MOT2... PLR W < RESTAURE : (W)=ADRESSE DE 'DCTESC'. LA IDDESC-DCTESC,W TBT IDESCX < VALIDATION DE 'IDESCX'... JNC TRAPH2 < OK, IL EST NUL... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE D'OU VIENNENT CES < TRAPPES IMBRIQUEES !!! < TRAPH2: EQU $ SBT IDESCX STA IDDESC-DCTESC,W < INDIQUONS AINSI QU'IL Y A UNE TRAPPE < EN COURS DE TRAITEMENT, INDICATION < QUI SERA EFFACEE DES QUE LE 'NSPIN' < SERA MIS EN LECTURE DANS LE 'CCI'... < < TEST DES PERIPHERIQUES 'IN' < ET 'OUT' DE L'UTILISATEUR : < LXI PHIN LBY &TASSGN-DCTESC,W < (A)='NSP' DU PERIPHERIQUE 'IN', CPI NSPVI0 < EST-CE UNE VISU ??? JL TRAPH3 < NON... CPI NSPVIN < ??? JG TRAPH3 < NON... < < CAS D'UNE VISU : IL FAUT < REINITIALISER A PRIORI < LE BUFFER D'ANTICIPATION : < PSR L < SAVE LA BASE 'L' DE 'TH0'... LR A,X BSR ACADCT < (L)=ADRESSE DE LA 'DCTVIS' DE 'NSP'=(X). SVC SVCM10 < DANS LE CAS D'UNE TRAPPE, ON ANNULE TOUS < LES CARACTERES EN ATTENTE, EN REINITIA- < LISANT 'KCWIO'... PLR L < RESTAURE LA BASE 'L' DE 'TH0'... TRAPH3: EQU $ < < SORTIE : < PLR A,B,X RSR PAGE < < < R E C O N S T I T U T I O N D E ' P S T E S C ' < A L A S U I T E D ' U N E E N T R E E < D A N S ' T H 0 ' : < < < FONCTION : < LORSQU'UNE TACHE ESCLAVE RENTRE < DANS 'TH0', SA 'PSTESC' NE CONTIENT < PAS LES REGISTRES EN COURS DE L'UTILI- < SATEUR, PUISQUE L'ENTREE DANS 'TH0' < SE FAIT PAR UN CHANGEMENT DE CONTEXTE < PARTIEL... < < SIPST: EQU $ PSR A,B,X,W LXI LPSTH0+RH0C LA &AXPSTH STA PSTESC-DCTESC+RC,W < BASE C. LXI LPSTH0+TH0K LA &AXPSTH STA PSTESC-DCTESC+RK,W < REGISTRE K. LXI LPSTH0+TH0P LA &AXPSTH STA PSTESC-DCTESC+RP,W < REGISTRE P. LXI LPSTH0+TH0S LA &AXPSTH STA PSTESC-DCTESC+RS,W < REGISTRE S, ET NATURE TRAPPE... LXI TH0L LA &AXPLH0 STA PSTESC-DCTESC+RL,W < BASE L. LXI TH0W LA &AXPLH0 STA PSTESC-DCTESC+RW,W < BASE W. LA APLH0 < AD REG A (EMETTEUR) LR W,B < (RECEPTEUR) REG B LXI TH0Y-RH0A+Z MOVE < A B X Y IF TH0Y-RH0A+Z-RY+RA-Z,,XEIF%, IF ATTENTION : LE 'MOVE' EST MAUVAIS !!! XEIF%: VAL ENDIF PLR A,B,X,W RSR USE L,DCT0 PAGE < < < S U S P E N S I O N E S C L A V E : < < < FONCTION : < CE SOUS-PROGRAMME SUSPEND < UN ESCLAVE DANS LE 'CCI' A < L'AIDE DE SON HANDLER DE < SERVICE COURANT ; LE REVEIL < DE CET ESCLAVE SE FERA SUR < RECEPTION D'UN 'ALT-MODE', < OU D'UNE COMMANDE "!X..." < EMISE PAR QUELQU'UN D'AUTRE. < < < A T T E N T I O N : < 'SLEEP' EST SANS ACTION SI LE JOB < DEMANDEUR N'EST PAS INTERACTIF, < C'EST-A-DIRE SI NSPIN#NSPOUT. < < < DISTINCTION ENTRE "!W" ET "!U" : < "!W" : CETTE COMMANDE MET L'UTILISATEUR < EN ATTENTE JUSQU'A RECEPTION D'UN CARACTERE < D'ABORT COURANT, OU D'UNE COMMANDE "!X". < "!U" : CETTE COMMANDE MET L'UTILISATEUR < EN ATTENTE, L'EMPILE DANS LA PILE 'APILID' < LOCALE A CHAQUE VISU (RAPPELONS QU'IL NE < PEUT S'AGIR QUE D'UN JOB INTERACTIF) ; < LA VISU CORRESPONDANTE SE TROUVE DANS < L'ETAT OU AUCUN N'UTILISATEUR N'EST < CONNECTE : UN 'ALT-MODE' CREE ALORS UN < LOG-IN,..., CETTE SESSION ETANT TERMINEE < PAR UN LOG-OUT, QUI DEPILERA L'UTILISATEUR < EMPILE, LE REMETTANT DANS L'ETAT D'UN "!W", < OU IL ATTEND DONC UN CARACTERE D'ABORT < POUR ETRE RELANCE... < < < DIAGRAMME TEMPOREL : < < ...!F... < ...!U. ... < < < < < ARGUMENTS : < (W)=ADRESSE DCT(ESCLAVE), < (L)=ADRESSE DCT(SERVICE). < (B)='XXNCHI' : COMMANDE "!W", < 'XXCHI' : COMMANDE "!U". < < < NOTA : < LORSQU'ON RENTRE DANS 'SLEEP', LE < 'ALT-MODE' DOIT ETRE INHIBE (BIT2 < DE 'IDESC'), SAUF EVIDEMMENT LA < PREMIERE FOIS... < < SLEEP: EQU $ < < TEST DU CARACTERE INTERACTIF DU JOB DEMANDEUR : < BSR ACHKIN < TEST DU MODE DU JOB : JNE Z280 < NSPIN#NSPOUT : LE JOB N'EST PAS < INTERACTIF, LE 'SLEEP' EST SANS < EFFET. < < CAS D'UN JOB INTERACTIF (NSPIN=NSPOUT) : < BSR ASMMK < MASQUAGE DES INTERRUPTIONS. LA IDESC-DCTESC,W TBT IDESCW JNC SYSR71 < OK, ESCLAVE NON ENCORE SUSPENDU. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE COMMENT UN < UTILISATEUR DEJA SUSPENDU < PEUT DEMANDER UNE SUSPENSION !!! < SYSR71: EQU $ SBT IDESCW < SUSPENSION DE L'ESCLAVE DANS CCI < PAR L'INTERMEDIAIRE DE SON < HANDLER DE SERVICE. RBT IDESCA < AUTORISATION DE L''ALT-MODE' < AVEC LA FONCTION DE DEBLOQUER < L'ESCLAVE SUSPENDU. STA IDESC-DCTESC,W < MAJ DE IDESC. XXNCHI:: VAL K < INDICATEUR "!W" : PAS D'EMPILEMENT < D'UTILISATEUR, XXCHI:: VAL XXNCHI+I < INDICATEUR "!U" : EMPILEMENT UTILISATEUR. IF XXNCHI-K,,XEIF%, IF ATTENTION : CE QUI SUIT MERDE !!! XEIF%: VAL ENDIF IF XXCHI-K,XEIF%,,XEIF% IF ATTENTION : CE QUI SUIT MERDE !!! XEIF%: VAL ENDIF CPZR B < FAUT-IL EMPILER L'UTILISATEUR ??? JE Z280X1 < NON, TANT MIEUX POUR LUI... < < EMPILEMENT D'UN UTILISATEUR INTERACTIF : < PSR X,Y,L LA &ASAESC BSR ABETA < (A)=BETA(SEMAPHORE D'ALLOCATION ). NTRN XWOR%1: VAL NESCLA/XXXMOY < SEUIL ARBITRAIRE... TRN CPI XWOR%1 < Y-A-T'IL ASSEZ D' LIBRES ??? JLE Z280X4 < NON, INSUFFISANT, LA COMMANDE "!U" < EST REFUSEE... LXI PHIN LBY &TASSGN-DCTESC,W < (A)='NSPIN' (='NSPOUT') : LR A,X BSR ACADCT < (L)=ADRESSE DE LA 'DCT' DE LA VISU DE CET < UTILISATEUR... LY VAR+APILID < (Y)=ADRESSE DU POINTEUR DE PILE : LA IOID PUSH < EMPILEMENT DE 'IOID' : JNV Z280X2 < OK, IL Y AVAIT DE LA PLACE DANS LA PILE.. Z280X4: EQU $ BSR ASMDK < DEMASQUAGE DES INTERRUPTIONS, PLR X,Y,L < RESTAURATION DES REGISTRES, ADRI XCCIER,X < ET RETOUR EN ERREUR AU 'CCI' LORSQUE LA < PILE EST SATUREE... JMP Z280 Z280X2: EQU $ < < REINITIALISATION DE LA VISU : < LBY IOID SWBR A,A STA IOID < REINITIALISATION DE 'IOID', TEL < QU'IL N'Y AIT AUCUN UTILISATEUR DE < CONNECTE. PLR X,Y,L < < MISE EN ATTENTE DE L'UTILISATEUR < VIA SON NIVEAU DE SERVICE : < Z280X1: EQU $ BSR ASMDK < DEMASQUAGE DES INTERRUPTIONS. RQST SIT < SUSPENSION DE L'ESCLAVE, PAR < BLOCAGE DE HDL-SERVICE SUR < SON SIT. Z280: EQU $ RSR < RETOUR A CCI, LORS DU REVEIL. < (OU IMMEDIATEMENT, SI LE JOB < N'EST PAS INTERACTIF). < < < A N N U L A T I O N D E ' S L E E P ' : < < < FONCTION : < CE MODULE EST APPELE PAR LA < GRAMMAIRE DU 'CCI' LORSQUE LA < FONCTION 'SLEEP' A ECHOUEE POUR < LA COMMANDE "!U" ; ELLE ANNULE < CE QU'A FAIT 'SLEEP'. < < < ARGUMENT : < (W)=ADRESSE DE 'DCTESC'. < < RZIDW: EQU $ BSR ASMMK < MASQUAGE DES INTERRUPTIONS, LA IDESC-DCTESC,W RBT IDESCW < ET ON ANNULE L'INDICATEUR 'IDESCW'... STA IDESC-DCTESC,W BSR ASMDK RSR < ET C'EST TOUT... PAGE < < < D I A L O G U E V I S U A V I S U : < < < FONCTION : < CE SOUS-PROGRAMME (APPELE < PAR LE 'CCI') ENVOIE SUR < UNE VISU 'VIX' UN MESSAGE < EMIS PAR UNE VISU 'VIY', < LORSQUE CELA EST POSSIBLE < (VISU EXISTANTE, UTILISA- < TEUR LOGUE SUR 'VIX',...). < < < ARGUMENTS : < (L)=ADRESSE DCT(SERVICE), < (W)=ADRESSE DCT(ESCLAVE). < < USE L,DCT0 VISAVI: EQU $ < < VALIDATION DE LA DEMANDE : < DC VAR+XBUFGR < RETOUR SUR LE NUMERO DE LA < VISU DEMANDEE. BSR ACARAC < RENVOIE (A)=NUMERO EN ASCI < DE LA VISU DEMANDEE. ANDI BASE16-N < (A)=NUMERO DECIMAL DE LA VISU. JAE E863 < ERREUR, NUMERO=K. CPI NSPVIN-NSPVI0+Z JG E863 < ERREUR : VISU INEXISTANTE. < < OK, TEST D'ETAT DE LA VISU DEMANDEE : < ADRI NSPVI0-Z,A < (A)=NSP DE LA VISU DEMANDEE. PSR X,L < SAVE INDEX COURANT DE LA < GRAMMAIRE DU CCI & @DCT DE < SERVICE. LR A,X < (X)=NSP DE LA VISU DEMANDEE. BSR ACADCT < (L)=@DCT-VISU DEMANDEE (X). LA IOID < ACCES A L'IOID DE LA VISU < DEMANDEE. PLR X,L < RESTAURE : < (X)=INDEX COURANT DE LA GRAMMAIRE, < (L)=@DCT DE SERVICE. TBT IOIDX < UN ESCLAVE EST-IL CONNECTE < A LA VISU DEMANDEE ???? JNC E863 < NON, ERREUR. < < OK, ENVOI DU MESSAGE : < (A NOTER QUE L''AUTO-ENVOI' DE MESSAGE EST AUTORISE...) < PSR X,W < SAVE INDEX COURANT DE LA < GRAMMAIRE & @DCT-ESCLAVE QUI < A EMIS LA DEMANDE. ANDI IOIDM < (A)=ID DE L'ESCLAVE DEMANDE < (CALCULE A PARTIR DE IOID). LR A,X < (X)=ID ESCLAVE DEMANDE. LA &ATBU < (A)=@DCT DE L'ESCLAVE DEMANDE. LR A,W < (W)=@DCT-ESCLAVE DEMANDE. < < MISE DANS LE MESSAGE DU NUMERO DE LA VISU EMETTRICE : < LBY VAR+DEMCCI+XXNSP < (X)=NSP DE LA DEMANDE DE LECTURE. XWOR%1: VAL MOCG=K XWOR%1: VAL -XWOR%1 < POUR UN DECALAGE A DROITE... XWOR%1: VAL MSKNSP>XWOR%1 ANDI XWOR%1 < (A)=NSP DE LA VISU EMETTRICE. ADRI Z-NSPVI0,A < (A)=NUMERO DE LA VISU EMETTRICE. ORI HZERO < (A)=NUMERO CODE EN ASCI. LX VAR+XBUFGR ADRI -I,X < (X)=INDEX DU NUMERO DE LA VISU < DANS LE MESSAGE. STBY &VAR+ABUFGR < LE NUMERO DE LA VISU EMETTRICE < REMPLACE LE NUMERO DE LA < VISU RECEPTRICE. LA VAR+DEMCCI+T+AMDEM SLRS NOCMO=K < (A)=@MOT DU MESSAGE. LB VAR+DEMCCI+T+CODEM < (B)=LONGUEUR EXACTE DU MESSAGE. BSR AMESSO < ENVOI DU MESSAGE ET ATTENTE DE < FIN D'EMISSION. PLR X,W < RESTAURE : < (W)=@DCT-ESCLAVE COURANT, < (X)=INDEX COURANT DE LA GRAMMAIRE. < < ET RETOUR AU 'CCI' : < E864: EQU $ RSR < RETOUR AU CCI. E863: EQU $ ADRI XCCIER,X < RETOUR EN ERREUR AU CCI. JMP E864