! FILE 'SYS_DPAL6S' !************ !* DPAL6S * !*14.SEP.79* !************ PERMROUTINESPEC SVC(INTEGER EP, INTEGERNAME P1, INTEGER P2) PERMINTEGERMAPSPEC INTEGER(INTEGER X) PERMBYTEINTEGERMAPSPEC BYTEINTEGER(INTEGER X) PERMINTEGERFNSPEC ADDR(INTEGERNAME X) PERMINTEGERFNSPEC ACC CONSTINTEGERNAME DUMMY = 0 BEGIN RECORDFORMAT SEGF(INTEGER PAR, PDR, PT, X) RECORDFORMAT PSECTF(INTEGER Q, BYTEINTEGER ID, STATE, C BYTEINTEGERARRAY NAME(0:3), C BYTEINTEGER PRIO, INTEGER POFFQ, R0, R1, R2, R3, C R4, R5, PC, PS, SP, TRPV, RECORD (SEGF) ARRAY SEG(0:7)) RECORDFORMAT PSECT2F(INTEGERARRAY A(0:47)) RECORD (PSECTF) P RECORD (PSECT2F) NAME P2 CONSTBYTEINTEGERNAME INT CH = K'160060' OWNINTEGERARRAY MAX(0:7) OWNINTEGER PERM PRINTED=0 OWNINTEGER EXT BITS = 0 OWNINTEGER PPT = 0 OWNINTEGERARRAY PRIN(0:100) INTEGER N RECORDFORMAT D1F(INTEGERNAME X) RECORDFORMAT D3F(RECORD (PSECTF) NAME P) RECORD (D1F)D1 RECORD (D3F) NAME D3 ROUTINE DA(INTEGER BLOCK, INTEGERNAME ADD, INTEGER COMM) CONSTBYTEINTEGERNAME ID = K'160030' RECORDFORMAT P2F(BYTEINTEGER SER, REPLY, INTEGER A1, C INTEGERNAME A2, INTEGER A3) RECORD (P2F)P2 P2_SER = 3; P2_REPLY = ID P2_A1 = 0 P2_A2 == ADD P2_A3 = BLOCK PONOFF(P2) IF P2_A1 # 0 THEN PRINTSTRING('DISC ERROR ') ANDSTOP END INTEGERMAP CONT(INTEGER J) CONSTINTEGER READ = 0 OWNINTEGERARRAY BUF(0:255) OWNINTEGER CURR =- 1 INTEGER BNUM, SECTOR, K, L L = J >> 6 BNUM = (L+EXT BITS)>>3+520+K'020000'; ! + 4672 IF CURR # BNUM START CURR = BNUM DA(BNUM, BUF(0), READ) FINISH RESULT == BUF((J&511) >> 1) END ROUTINESPEC PSECT ROUTINESPEC DREG ROUTINESPEC DSTACK ROUTINESPEC REGISTERS INTEGERFNSPEC ROCTAL ROUTINESPEC DUMP(INTEGER LOW, QUANT, DISP) ROUTINESPEC OCTAL(INTEGER I) BYTEINTEGERFNSPEC BYTECONT(INTEGER ADR) ROUTINESPEC VIRT MEMORY ROUTINESPEC PRINT MESSAGES ROUTINESPEC GET PSECT(INTEGER B) CONSTINTEGER PSECT BASE PT = K'130' CONSTINTEGER LAST32BASE = K'132' CONSTINTEGER CPUQ BASE = K'124' CONSTINTEGER TASK LOW LIMIT = 30 CONSTINTEGER TASK LIMIT = 55 INTEGER A, B, C, I, TFLAG, PST, IST, STACK D3 == D1 P2 == P PROMPT("Title?") SELECT OUTPUT(1) CYCLE READSYMBOL(I); PRINTSYMBOL(I) EXIT IF I = NL REPEAT PRINTSYMBOL(12); NEWLINE CYCLE SELECT OUTPUT(0) EXT BITS = 0 PROMPT('DPAL:') SELECT OUTPUT(1) A = NEXTSYMBOL IF A = 'T' OR A = 'F' START ! DUMP PSECTS PRINT MESSAGES IF A = 'F' B = CONT(PSECT BASE PT) N = TASK LOW LIMIT CYCLE EXITIF N > TASK LIMIT C = CONT(B) -> BOT IF C = 0 PRINTSYMBOL(BYTECONT(C+I)) FOR I = 4, 1, 7 SPACE; OCTAL(C); SPACE; OCTAL(CONT(C)) SPACE; OCTAL(CONT(C+2)) PRINTSTRING(' PC = '); OCTAL(CONT(C+K'30')) NEWLINE IF A = 'F' START GET PSECT(N) PSECT VIRT MEMORY PRINTSYMBOL(12) FINISH BOT: B = B+2; N = N+1 IF INT CH#0 THEN INT CH=0 AND EXIT REPEAT SKIPSYMBOL; SKIPSYMBOL IF A = 'F' START PRINTSTRING('KERNAL DATA AREAS ') DUMP(0, K'1000', 0) DUMP(K'65', K'5000', 0) FINISH CONTINUE FINISH IF A = 'P' OR A = 'Q' START ; ! DUMP A PSECT READSYMBOL(I); IF I = NL THEN PROMPT('PSECT?') B = ROCTAL; SKIPSYMBOL GET PSECT(B) PRINTSYMBOL(12); ! NEWPAGE NEWLINE PSECT IF A = 'Q' THEN VIRT MEMORY CONTINUE FINISH IF A = 'M' START PRINT MESSAGES SKIPSYMBOL; SKIPSYMBOL CONTINUE FINISH A = ROCTAL; STOPIF A = 1 OR A = 'S' READSYMBOL(B); IF B = NL THEN PROMPT('LEN?:') B = ROCTAL; SKIPSYMBOL DUMP(A, B, 0) NEWLINE REPEAT ROUTINE DREG STACK = PST+K'14' TFLAG = 1 REGISTERS PRINTSTRING('STACK='); OCTAL(CONT(PST+K'34')) NEWLINE END ROUTINE DSTACK NEWLINES(2) DUMP(IST, K'13776', 0) END !! ROUTINE REGISTERS OWNBYTEINTEGERARRAY REGS(0:15) = C 'R', '0', 'R', '1', 'R', '2', 'R', '3', 'R', '4', 'R', '5', 'P', 'C', 'P', 'S' INTEGER I NEWLINE CYCLE I = 0, 2, 14 PRINTSYMBOL(REGS(I)); PRINTSYMBOL(REGS(I+1)) PRINTSTRING(' = ') OCTAL(CONT(STACK+I)) SPACES(3) IF I = 6 THEN NEWLINE REPEAT NEWLINE END !! INTEGERFN ROCTAL INTEGER N, I, J N = 0 WHILE NEXTSYMBOL < '0' OR NEXTSYMBOL > '7' CYCLE STOPIF NEXTSYMBOL = 'S' SKIPSYMBOL REPEAT CYCLE I = 1, 1, 6 J = NEXTSYMBOL-'0' IF J < 0 OR J > 7 THENRESULT = N N = N << 3+J SKIPSYMBOL REPEAT RESULT = N END ROUTINE DUMP(INTEGER LOW, QUANT, DISP) INTEGER I, J, N, N1, CHAR, NE, ZFLAG, INITF EXT BITS = LOW&K'6000'; ! LOW IS IN PAGES LOW = LOW<<6; ! NOW DUMP TOP BITS ZFLAG = 0; ! SET TO PRINT MESSAGE IF ALL ! ZEROES INITF = 0; ! TO SUPPRESS N<LOW N = LOW&X'FFF0'; ! START ON BDRY WHILE QUANT >= 0 CYCLE IF INT CH#0 THEN EXT BITS=0 AND RETURN IF INT CH # 0 START INT CH = 0; RETURN FINISH N1 = N; NE = 8; J = 0 WHILE NE # 0 CYCLE J = J!CONT(N) N = N+2; NE = NE-1 REPEAT IF J = 0 START ; ! ALL ZEROES IF ZFLAG = 0 START PRINTSTRING(' ZEROES ') ZFLAG = ZFLAG+1 FINISH FINISHELSESTART ZFLAG = 0; N = N1; ! ENSURE ZFLAG IS OK OCTAL(N+DISP); PRINTSYMBOL('>') NE = 8 WHILE NE # 0 CYCLE IF N >= LOW OR INITF # 0 THEN OCTAL(CONT(N)) C ELSE SPACES(6) SPACE N = N+2; NE = NE-1 REPEAT PRINTSTRING('*') NE = 16 WHILE NE # 0 CYCLE CHAR = BYTECONT(N1)&127 IF CHAR < 32 OR CHAR > 126 THEN CHAR = ' ' PRINTSYMBOL(CHAR) N1 = N1+1; NE = NE-1 REPEAT NEWLINE FINISH QUANT = QUANT-16 INITF = INITF+1 IF N = 0 START ; ! OVER 32K BDRY EXT BITS = EXT BITS+K'2000' FINISH REPEAT EXT BITS = 0 END ROUTINE OCTAL(INTEGER N) INTEGER I CYCLE I = 15, -3, 0 PRINTSYMBOL((N >> I)&7+'0') REPEAT END BYTEINTEGERFN BYTECONT(INTEGER ADR) INTEGER X X = CONT(ADR&K'177776') IF ADR&1 # 0 THEN X = X >> 8 ELSE X = X&X'FF' RESULT = X END ROUTINE PSECT INTEGER I RECORD (SEGF) NAME SEG TFLAG = 1 PRINTSYMBOL(BYTECONT(PST+I)) FOR I=4, 1, 7 PRINTSTRING(' STATE = '); OCTAL(BYTECONT(PST+3)) PRINTSTRING(' POFFQ: '); OCTAL(CONT(PST+10)) IF CONT(PST)#0 START PRINTSTRING(" ON CPU Q, LINK =") OCTAL(CONT(PST)) FINISH DREG PRINTSTRING('SEGMENTS NO ADDR LEN ') CYCLE I = 0, 1, 7 IF MAX(I) > 0 START SEG == P_SEG(I) WRITE(I, 1); SPACE; OCTAL(SEG_PAR) SPACE; OCTAL(MAX(I)) SPACES(2) IF SEG_PDR&7 = 2 THEN PRINTSYMBOL('R') ELSE C PRINTSYMBOL('W') NEWLINE FINISH REPEAT END ROUTINE VIRT MEMORY INTEGER I, ADD, K CYCLE I = 0, 1, 7 IF MAX(I) # 0 START IF I = 1 START CONTINUE IF PERM PRINTED # 0 PERM PRINTED = PERM PRINTED+1 FINISH NEWLINES(5) ADD = P_SEG(I)_PAR IF ADD = K'7600' THEN CONTINUE IF PPT # 0 START CYCLE K = 0, 1, PPT-1 IF ADD = PRIN(K) START PRINTSTRING(" ALREADY PRINTED ") ->SKIP FINISH REPEAT FINISH PRIN(PPT) = ADD; PPT = PPT+1 DUMP(ADD, MAX(I), (I << 13)-(ADD<<6)) FINISH SKIP: REPEAT END ROUTINE PRINT MESSAGES INTEGER A A = CONT(LAST32BASE) CYCLE I = A, K'10', A+128 IF CONT(I) # 0 OR CONT(I+2) # 0 START WRITE(BYTECONT(I), 3); WRITE(BYTECONT(I+1), 3) CYCLE B = I+2, 2, I+6 SPACE; OCTAL(CONT(B)) REPEAT NEWLINE IF INT CH#0 THEN INT CH=0 AND RETURN FINISH REPEAT END ROUTINE GET PSECT(INTEGER B) INTEGER I, N PST = CONT(CONT(PSECT BASE PT)+(B-TASK LOW LIMIT)*2) CYCLE I = 0, 1, 47 P2_A(I) = CONT(PST+I*2) REPEAT CYCLE I = 0, 1, 7 N = P_SEG(I)_PDR IF N&7 = 0 THEN N = 0 ELSE N = (N+K'400') >> 2&K'177700' MAX(I) = N REPEAT END ENDOFPROGRAM