< 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 <ACNESC>.
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 <NSPOUT>/<NSPVI1>.
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 '<TRAPPE>' ; 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 :
< (<NBR> DESIGNANT UN NOMBRE HEXA-DECIMAL)
<
< <NBR><A-ROND> : 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 <ACN> 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 <ACN> 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 :
<
<
<U2 : ALT-MODE...<SESSION>...!F...
<
<U1 : <SESSION>...!U. <CARACTERE D'ABORT>...<SESSION>
<
<
<
<
< 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 <IDESC>).
NTRN
XWOR%1: VAL NESCLA/XXXMOY < SEUIL ARBITRAIRE...
TRN
CPI XWOR%1 < Y-A-T'IL ASSEZ D'<IDESC> 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
Copyright © Jean-François COLONNA, 2011-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2011-2024.