!* MODIFIED 24/01/78 08.00 !* CONSTINTEGER OPSYS=0 ;! *** EMAS *** CONSTINTEGER EMAS=0 ;! *** EMAS *** EXTRINSICINTEGER ICL9CEFAC EXTRINSICINTEGER ICL9CEMAINLNB !* !* SSLEVEL NOW IN COMREG(1) !%OWNINTEGER SSLEVEL; !-1 ABORTING ! 0 INITIALISING ! 1 COMMAND PROCESSOR ! 2 TRUSTED FACILITY(E.G. COMPILER) ! 3 USER PROGRAM !* EXTRINSICINTEGER ICL9CEJSTATE; ! 0 NO CURRENT USER JOB ! 1 PROCESSING USER JOB ! 2 JOB ABORTING(E.G. REQUEST FOR UNAVAIL. RESOURCE ! 3 TIME EXCEEDED ! 4 OUTPUT EXCEEDED ! 5 USER PROG DIAGS FAILURE ! 6 SOFTWARE DETECTED ERROR(SUBSYS IN CONTROL) ! 7 I/0 ERROR ON PRIMARY OUTPUT STREAM ! 8 HARDWARE DETECTED ERROR WHILE IN SUBSYS ! 9 SUBSYSTEM LOGICAL ERROR !10 ABORTING! EXTERNALROUTINESPEC DRESUME(INTEGER LNB,PC,ADR18) !* !* !****** BBASE FUNCTIONS !* SYSTEMROUTINESPEC SUPERSTOP ;! *** EMAS *** SYSTEMROUTINESPEC STOPBASE SYSTEMROUTINESPEC READID(INTEGER AREA ADDRESS) SYSTEMROUTINESPEC DISCID SYSTEMROUTINESPEC LOG(INTEGER M,N) EXTERNALSTRING (8) FNSPEC C INTTOSTRING(INTEGER M,N) !* !****** MAIN !* SYSTEMROUTINESPEC MOVE(INTEGER LEN,FROM,TO) SYSTEMROUTINESPEC SIM2(INTEGER EP,P1,P2,INTEGERNAME F) SYSTEMROUTINESPEC IOCP(INTEGER I,J) SYSTEMINTEGERMAPSPEC COMREG(INTEGER I) SYSTEMINTEGERMAPSPEC FDMAP(INTEGER I) SYSTEMROUTINESPEC CONNECT(STRING (15) S, C INTEGER ACCESS, MAXBYTES, USE, RECORDNAME R, C INTEGERNAME FLAG) SYSTEMROUTINESPEC TIDY EXIT !* !****** DIAG !* SYSTEMROUTINESPEC NDIAG(INTEGER PC,LNB,FAULT,EXTRA) SYSTEMROUTINESPEC SSMESS(INTEGER N) SYSTEMROUTINESPEC NCODE(INTEGER START,FINISH,AD) !* ROUTINESPEC ALLDIAGS(INTEGER PC) !* !* !* SYSTEMROUTINE SSERR(INTEGER N) !* ROUTE FOR SOFTWARE DETECTED ERRORS INTEGER I STRING (32) S IF N=0 THEN ->EXIT IF (COMREG(1)=3 OR ICL9CEFAC=4) AND N<256 THENSTART ;! ERROR WHILE EXECUTING USER PROG. COMREG(1)=1;! IN CASE OF ERROR ON ERROR *STLN_I NDIAG(0,I,N,0) FINISHELSESTART ;! REPORT ERROR AND RETURN TO MAIN CONTROL IF N>=256 THEN COMREG(1)=-1;! TO ENSURE ABORT IOCP(11,-1) SELECTOUTPUT(107) UNLESS ICL9CEMAINLNB=0 AND ICL9CEFAC#4 UNLESS ICL9CEJSTATE>1 OR 230<=N<=231 THEN ICL9CEJSTATE=6 SSMESS(N) EXIT: UNLESS 0<=ICL9CEFAC<=3 THEN TIDY EXIT I=ICL9CEMAINLNB IF I=0 THENSTART IF OPSYS=EMAS START ;! *** EMAS *** S="INIT. FAILS - ".INTTOSTRING(N,4) ;! *** EMAS *** LOG(ADDR(S)+1,LENGTH(S)) ;! *** EMAS *** FINISH ;! *** EMAS *** STOPBASE FINISH *LLN_I *EXIT_-64 FINISH END ;! SSERR !* ROUTINE ON CPU LIMIT(INTEGER PC,LNB) ICL9CEJSTATE=3 IF ICL9CEJSTATE<3 IF COMREG(1)=3 THEN COMREG(1)=1 AND NDIAG(PC,LNB,211,0) SSERR(211) END ;! ON CPU LIMIT !* SYSTEMROUTINE ON OUTPUT LIMIT RETURN UNLESS ICL9CEFAC=0 ICL9CEJSTATE=4 SSERR(212) END ;! ON OUTPUT LIMIT !* SYSTEMROUTINE ON DIAGS FAIL ICL9CEJSTATE=5 IF ICL9CEJSTATE<5 IF COMREG(1)>1 THEN COMREG(1)=1 SSERR(31) END ;! ON DIAGS FAIL !* ROUTINE ON OP INT(INTEGER SUBCLASS) UNLESS SUBCLASS=1 THEN COMREG(2)=2;! BATCH TERMINATION ICL9CEJSTATE=3 IF ICL9CEJSTATE<3 COMREG(1)=1 SSERR(213) END ;! ON OP INT !* !* !* RECORDFORMAT SIGDATAFMT(INTEGER PC, LNB, CLASS, SUBCLASS, C INTEGERARRAY A(0 : 17)) !* !* SYSTEMROUTINE ONTRAPACT(INTEGER MODE, CLASS, SUBCLASS, OLDPC, OLDLNB) RECORD OWND(SIGDATAFMT) ;! FOR EARLY CALLS RECORDNAME D(SIGDATAFMT) OWNINTEGER LATEST OWNINTEGER ABORT INTEGER I, J, K, L, F, SIGLEVEL SWITCH SW(0 : 4) IF OPSYS=EM AS START ;! *** EMAS *** IF CLASS = 65 START ;! SINGLE CHARACTER INT: IF SUB CLASS='A' OR SUBCLASS='X' THEN SUPERSTOP ;! ABORT JOBBER FINISH FINISH ;! *** EMAS *** F=0 I=COMREG(33) SIGLEVEL=COMREG(34) IF SIGLEVEL=0 AND INTEGER(I+4)=-1 THENSTART ! ERROR AFTER ICL9CEJINIT + EXTERNAL ROUTINE SIGLEVEL=1 INTEGER(I+4)=0 INTEGER(I+88)=0;! ENSURE PC=0 FOR DIRECT NDIAG CALL FINISH IF SIGLEVEL <= 0 THENSTART F = 1 UNLESS CLASS=64;! EXCEPT CPU TIME EXCEEDED SIGLEVEL = 0 FINISH I = I+88*SIGLEVEL IF I&X'FFFC0000'=0 THEN I=ADDR(OWND) ;! BEFORE C 33 SET. D == RECORD(I) -> SW(MODE) !* SW(0): D_CLASS = CLASS D_SUBCLASS = SUBCLASS READID(ADDR(D_A(0))); ! READ INTERRUPT DATA (18 WORD VECTOR DESCRIPTOR) SIGLEVEL = SIGLEVEL-1 ! IGNORE BROADCASTS AND MESSAGES ! THE DRESUME TIDIES UP LIKE A DISCID AND CH INTS: OTHER THAN 'A' IF OPSYS=EMAS AND (CLASS=66 OR CLASS=65) C THEN DRESUME(0,0,ADDR(D_A(0))) DISCID; ! DISCARD INTERRUPT DATA IF ABORT=0 THENSTART ABORT=1 IF D_A(16)>>18=D_A(2)>>18 THEN I=D_A(16) ELSE I=D_A(2) IF F#0 OR COMREG(25)<2 THEN ALLDIAGS(I) FINISHELSESTART ABORT=ABORT-1 IF ABORT#0 THEN STOPBASE FINISH IF F # 0 THENSTART ABORT=2 PRINTSTRING(' ***JOB ABORTED ') NEWPAGE NEWLINE STOPBASE FINISH ABORT=0;! APPEARS TO BE IN CONTROL IF CLASS=64 THEN ON CPU LIMIT(D_A(2),D_A(0)) IF CLASS=52 THENSTART ;! INTERRUPT JOB BY OPERATOR IF SUBCLASS=3 THEN STOPBASE ON OP INT(SUBCLASS) FINISH MEET: INTEGER(COMREG(33)-4) = SIGLEVEL COMREG(34)=SIGLEVEL LATEST = I+8 I = D_PC J = D_LNB IF I=0 THENSTART NDIAG(D_A(2),D_A(0),10,CLASS) STOP FINISH K = X'28000012'; ! 18 WORD DESCRIPTOR L = ADDR(D_CLASS) **I *PUT_X'4998'; ! ST (TOS) **J *PUT_X'4998'; ! ST (TOS) **K *PUT_X'4998'; ! ST (TOS) **L *PUT_X'4998'; ! ST (TOS) *PUT_X'6598'; ! LSD (TOS) *PUT_X'7D98'; ! LLN (TOS) *PUT_X'1B98'; ! J (TOS) !* SW(2): SIGLEVEL = SIGLEVEL-1 -> A !* SW(3): I = ADDR(COMREG(33)) D == RECORD(I) A: D_CLASS = CLASS D_SUBCLASS = SUBCLASS D_A(0) = OLDLNB D_A(2) = OLDPC -> MEET !* SW(4): IF LATEST # 0 THEN MOVE(72,LATEST,I+8) SIGLEVEL = SIGLEVEL-1 -> MEET END ; ! ONTRAPACT !* !* SYSTEMROUTINE ONTRAPE(INTEGER CLASS,C SUBCLASS) ONTRAPACT(0,CLASS,SUBCLASS,0,0) END !* SYSTEMROUTINE ONTRAP(INTEGER SUBCLASS,CLASS) !*********************************************************************** !* ENTERED BY EXEC AFTER CONTINGENCY * !*********************************************************************** ONTRAPACT(0,CLASS,SUBCLASS,0,0) END !* SYSTEMROUTINE ONTRAPB(INTEGER EVENT,SUBCLASS,CLASS) ONTRAPACT(0,CLASS,SUBCLASS,0,0) END ;! ONTRAPB !* !* !* ROUTINESPEC PX(INTEGER H) !* SYSTEMROUTINE PHEX(INTEGER N) PX(ADDR(N)) END ; ! PHEX !* CONSTBYTEINTEGERARRAY C(0 : 15) = '0','1','2','3', '4','5','6','7','8','9','A','B','C','D','E','F' ROUTINE PX(INTEGER H) INTEGER I,J CYCLE I = 0,1,3 J=BYTEINTEGER(I+H) PRINTSYMBOL(C(J>>4)) PRINTSYMBOL(C(J&15)) REPEAT END ; !OF PX !* SYSTEMROUTINE DUMP(INTEGER START, LEN) INTEGER I, J, CNT, FINISH,LASTLINE,STAR CONSTBYTEINTEGERARRAY BPATT(0:132)= C 10,'*',' '(32),'*',' '(2),'(',' '(8),')',' '(86) OWNBYTEINTEGERARRAY B(0:132) INTEGER BP ROUTINESPEC P(INTEGER AD,K) NEWLINE CNT = 32 RETURNIF LEN <= 0 IF LEN>START THENSTART ;! OLD DEFN OF DUMP LEN=LEN-START FINISH FINISH = START+LEN START = START&X'FFFFFFFC' NEWLINE LASTLINE=0 STAR=0 WHILE START < FINISH CYCLE IF LASTLINE#0 THENSTART CYCLE I=0,4,CNT-4 UNLESS INTEGER(START+I)=INTEGER(LASTLINE+I) THEN ->NO MATCH REPEAT STAR=1 ->NEXT FINISH NO MATCH: BP=2 MOVE(132,ADDR(BPATT(0)),ADDR(B(0))) CYCLE I = 0,1,CNT-1 J = BYTEINTEGER(START+I) UNLESS 32 <= J <= 95 THEN J = ' ' B(BP)=J BP=BP+1 REPEAT P(ADDR(START),38) IF STAR#0 THEN B(48)='*' ELSE B(48)=' ' STAR=0 LASTLINE=START BP=49 CYCLE I = 0,4,CNT-4 P(START+I,BP) BP=BP+9 REPEAT SIM2(1,ADDR(B(0)),120,I) NEXT: START=START+CNT REPEAT RETURN ROUTINE P(INTEGER AD,K) INTEGER I,J CYCLE I=0,1,3 J=BYTEINTEGER(I+AD) B(K)=C(J>>4) B(K+1)=C(J&15) K=K+2 REPEAT END ;! P END ; ! DUMP !* ROUTINESPEC DUMPGLA ROUTINESPEC DUMPCOM ROUTINESPEC DUMPSIG ROUTINESPEC VFMAP(INTEGER MODE) !* SYSTEMROUTINE ALLDIAGS(INTEGER PC) INTEGER I,SF,CS,CE *STSF_SF ! SELECT OUTPUT(99) %UNLESS ICL9CEMAINLNB=0 %AND ICL9CEFAC#4 SELECT OUTPUT(107) DUMPCOM DUMPSIG VFMAP(0) PRINTSTRING(' CODE: ') IF PC#0 THENSTART CS=PC-128 CE=PC+128 IF CS<CE THEN NCODE(CS,CE,CS) FINISH NEWPAGE IF PC=0 THENSTART *STLN_I PRINTSTRING(' LNB=') PHEX(I) FINISH I=SF&X'FFFC0000' PRINTSTRING(' STACK: ') DUMP(I,SF-I) I=COMREG(37) IF I#0 THENSTART PRINTSTRING(' AUX STACK: ') DUMP(I,INTEGER(I)-I) FINISH NEWPAGE DUMPGLA END ;! ALLDIAGS !* !* ROUTINE P(INTEGER START, N) INTEGER I NEWLINE CYCLE I = 1,1,N PHEX(INTEGER(START)) SPACES(2) START = START+4 REPEAT END ; ! P !* ROUTINE DUMPSIG INTEGER I,SIGLEVEL I = COMREG(33); ! ADDR(SIGDATA(0)) SIGLEVEL=COMREG(34) RETURN IF I=0 PRINTSTRING(' SIGDATA: SIGLEVEL =') WRITE(SIGLEVEL,1) CYCLE I = I,88,I+176 NEWLINES(2) SPACES(20) PRINTSTRING('CLASS SUBCLASS') P(I,4) PRINTSTRING(' LNB PSR PC SSR SF') P(I+16,8) PRINTSTRING(' XNB B DR0 DR1 ') PRINTSTRING('A0 A1 A2 A3') P(I+48,10) REPEAT NEWLINES(2) END ; ! DUMPSIG !* ROUTINE DUMPGLA RECORDFORMAT RF(INTEGER CONAD,CURL,DATASTART,DATAEND) RECORD R(RF) INTEGER I,F CONNECT('SS#GLA',0,0,0,R,F) IF F#0 THENSTART RETURN FINISH PRINTSTRING(' USER PLT: ') I=INTEGER(R_CONAD) UNLESS 16<=I<=X'4000' THEN I=X'1000' DUMP(R_CONAD,I) END ;! DUMPFILE ROUTINE DUMPCOM INTEGER I, J, K RETURN UNLESS COMREG(25)=0 PRINTSTRING('COMREG: ') J = 0 CYCLE I = 0,1,59 K=COMREG(I) IF K#0 THENSTART WRITE(I,4); SPACES(2); PHEX(COMREG(I)) J = (J+1)&3 NEWLINE IF J = 0 FINISH REPEAT PRINTSTRING(' FDMAP: ') J = 0 CYCLE I = 0,1,109 K = FDMAP(I) IF K # 0 THENSTART WRITE(I,4); SPACES(2); PHEX(K) J = (J+1)&3 NEWLINE IF J = 0 FINISH REPEAT NEWLINE CYCLE I=0,1,109 K=FDMAP(I) IF K#0 THENSTART PRINTSTRING(' FD FOR FILE') WRITE(I,1) NEWLINE DUMP(K,112) NEWLINE FINISH REPEAT END ;! DUMPCOM !* !* RECORDFORMAT VFDESC(STRING (15) S, C INTEGER CONAD, CURL, MAXL, LINK,MODE,DESC0,DESC1) !* ROUTINE VFMAP(INTEGER MODE) !* MODE = 0 MAP ONLY !* 1 DUMP FILES RECORDNAME VF(VFDESC) INTEGER I RETURN UNLESS COMREG(25)=0 I=COMREG(30);! HEAD OF VF ENTRIES RETURN IF I=0 PRINTSTRING(' AREA MAP: ') WHILE I # 0 CYCLE VF == RECORD(I) PRINTSTRING('IDEN: '.VF_S) SPACES(16-LENGTH(VF_S)) PRINTSTRING('CONAD: ') PHEX(VF_CONAD) PRINTSTRING(' CURL: ') PHEX(VF_CURL) PRINTSTRING(' MAXL: ') PHEX(VF_MAXL) NEWLINE IF MODE = 1 THEN DUMP(VF_CONAD,VF_CURL) I = VF_LINK REPEAT END ; ! VFMAP !* !* ENDOFFILE