.TITLE DISDMP ; ; ; ; ; .SBTTL WRITE OCTAL CORE DUMP TO LLUN ; OCT:: BIC #177,ADR ; MASK TO START AT MULT OF 200 ; OCT1:: CMP ADR,#160000 ; EXT PAGE ? BLO 5$ ; NOT EXT PAGE ; EXT PAGE IF PR TSK OR KNL TST KNLSW ; KERNEL .SWITCH BNE 10$ ; EXT PAGE TST TASK ; TASK NAME .SWITCH BEQ 5$ ; NOT EXT PAGE ; ; MOV STD,R4 ; TASK'S STD ENTRY ADDR BIT #SF.PT,S.FW(R4) ; PR TSK BIT IN STD FLAGS WORD BNE 10$ ; EXT PAGE ; ; 5$: GETWRD ADR ; TEST IF VALID ADDRESS BCC 10$ ; VALID ADDRESS ADD #100,ADR ; ADVANCE ADR ONE BLOCK CALL TEST ; DONE TEST BR OCT1 10$: CALL TOP ; CHECK FOR TOP OF PAGE ; OCT2:: MOV #BUF,R0 ; INIT ASCII STRING POINTER MOV .PREFX,R5 ; GET PREFIX STRING IF ANY BNE 1$ MOV ADR,R5 ; CURRENT LOCN ADDRESS CALL POCT6 ; PACK 6 OCTAL DIGITS BR 2$ 1$: CALL PTXT ;SHUFFLE PREFIX MOV ADR,R5 CALL POCT3 2$: PACK #057 ; ASCII(/) CLR FLAG ; CLEAR DATA ON LINE .SWITCH MOV #4,CNT3 ; 4 EA 4 WORD GRPS PER LINE ; ; OCT3: PACK #040 ; ASCII(SPACE) MOV #4,CNT4 ; 4 WORDS PER GROUP ; OCT4: PACK #040 ; ASCII(SPACE) ; GETWRD ADR ; GET NEXT WORD BCC 20$ ; VALID ; MOV #6,R5 ; INVALID - PACK 6 SPACES 10$: PACK #040 ; ASCII(SPACE) SOB R5,10$ BR 30$ ; 20$: ADD #2,ADR CALL POCT6 ; PRINT CONTENTS AS 6 OCTAL DIGITS INC FLAG ; SET DATA ON LINE .SWITCH 30$: DEC CNT4 ; 4 WORDS? BGT OCT4 ; NO DEC CNT3 ; 4 EA 4 WRD GRPS? BGT OCT3 ; NO TST FLAG ; DATA ON LINE ? BEQ 40$ ; NO CALL $PUTBUF ; PRINT INC LINES ; COUNT LINES ON PAGE INC LINCT ; AND LINES SINCE EXTRA LF ; BIT #140,ADR ; EXTRA LF ? BEQ 35$ ; YES CMP LINCT,#4 ; EXTRA LF ? BNE 40$ ; NO 35$: CALL $PUTBUF ; EXTRA LF INC LINES ; COUNT LINES ON PAGE CLR LINCT ; ZERO LINES SINCE EXTRA LF 40$: CALL TEST ; TEST DONE JMP OCT1 ; .SBTTL WRITE SYMBOLIC CORE DUMP TO LLUN ; SYM:: BIC #1,ADR ; INSURE EVEN ADDRESS SYM0:: SUB #2,.SWITCH ; .SWITCH = -1 = SYM(BOLIC) ; .SWITCH = 0 = DAT(A) ; .SWITCH = +1 = ASC(II) SYM1: CALL TOP ; TEST IF TOP OF PAGE MOV #BUF,R0 MOV #BUFSZ,R1 1$: PACK #040 ; FILL BUFFER WITH BLANKS SOB R1,1$ MOV #BF.AD,R0 ; ADDRESS BUFFER MOV ADR,R5 ; PACK CURRENT ADDRESS CALL POCT6 PACK #057 ; ASCII( / ) TST .SWITCH ; .ASCII MODE ? BGT SYM4 ; YES ; GETWRD ADR ; (ADR)= AN INSTRUCTION ; MOV R5,INST MOV #BF.W1,R0 ; WORD 1 BUFFER CALL POCT6 ; PACK INST - 6 OCTAL MOV #BF.W2,R0WD ; WORD BUFFER POINTER MOV #BF.IN,R0 ; INSTRUCTION BUFFER MOV INST,R5 ; INSTRUCTION CODE TST .SWITCH ; .SWITCH = DAT(A) ? BEQ SYM3 ; YES MOV #VALTB,R4 ; VALUE TABLE 5$: CMP R4,#VALTBE ; END OF TABLE ? BHIS SYM2 ; YES CMP R5,(R4) ; COMPARE INST WITH CUR TABLE ENTRY BLO SYM2 ; PLACE FOUND ADD #4,R4 ; BUMP TO NEXT ENTRY BR 5$ 10$: JMP EOL1 SYM2: BIC #177700,R5 ; SETUP FIELD VALUES MOV R5,B0.5 ; BITS 0-5 BIC #70,R5 MOV R5,B0.2 ; BITS 0-2 MOV INST,R5 ASH #-6,R5 BIC #177700,R5 MOV R5,B6.11 ; BITS 6-11 BIC #70,R5 MOV R5,B6.8 MOV INST,R5 ; JMP @-(R4) ; DISPATCH TO INST HANDLERS CALL @-(R4) ; DISPATCH JMP EOL ; ; DATA MODE SYM3: CLR -(SP) ; CLEAR ZERO BLOCK COUNTER TST INST ; TEST IF A BLOCK OF ZEROS BNE 5$ ; NO - USE .WORD 1$: INC (SP) ; COUNT ZERO'S ADD #2,ADR ; BUMP ADDR ; GETWRD ADR ; TST R5 ; ANOTHER ZERO ? BNE 2$ ; NO CMP ADR,HIGH ; END OF PRINT LIMITS ? BLE 1$ ; NO 2$: SUB #2,ADR ; MOVE BACK TO LAST ZERO WORD CMP (SP),#1 ; ONLY ONE ZERO WORD ? BEQ 5$ ; YES - USE .OWRD MOV #BLKWTX,R5 ; ".BLKW" CALL PTXT MOV (SP)+,R5 ; NO. OF ZEROS CALL POCT BR EOL 5$: TST (SP)+ ; CLEAN UP STACK ; JMP Z00007 ; USE .WORD CALL Z00007 JMP EOL ; .ASCII MODE SYM4: MOV #BF.W1,-(SP) ; WORDS (BYTES) BUFFER MOV #BF.IN,R0 ; INST BUFFER MOV #ASCTX,R5 ; ".ASCII " CALL PTXT MOV R0,-(SP) ; INST BUFFER MOV #6,-(SP) ; CHAR COUNT CLR -(SP) ; DEL(IMETER) .SWITCH 1$: MOV ADR,R5 ; BYTE ADDRESS CMP R5,HIGH BHI 100$ ; DONE BIC #1,R5 ; WORD ADDRESS ; GETWRD ; BCS 100$ ; INVALID ADDRESS BIT #1,ADR ; TEST EVEN/ODD ADR BEQ 2$ ; EVEN ADR SWAB R5 ; ODD BYTE 2$: BIC #177400,R5 ; CHARACTER BYTE MOV R5,INST MOV 6(SP),R0 ; WORDS (BYTES) BUFFER CALL POCT3 ; PACK BYTE - 3 OCTAL PACK #040 ; ASCII( SPACE ) MOV R0,6(SP) ; SAVE POINTER MOV 4(SP),R0 ; INST BUFFER MOV INST,R5 ; CHAR BYTE CMP R5,#057 ; ASCII( / ) BEQ 57$ CMP R5,#040 ; ASCII( SPACE ) BLT 20$ ; NONPRINTING CMP R5,#137 ; ASCII( _ ) BGT 20$ ; NONPRINTING TST (SP) ; DEL .SWITCH BNE 3$ ; DEL PRESENT PACK #057 ; PACK DELIMETER INC (SP) ; SET DEL .SWITCH 3$: PACK R5 ; PACK PRINTING CHAR BR 50$ 57$: TST (SP) ; DEL .SWITCH BEQ 571$ ; NOT DELIMETED PACK #057 ; ASCII( / ) CLR (SP) ; CLEAR .SWITCH 571$: PACK #042 ; ASCII( " ) PACK R5 ; ASCII( / ) PACK #042 ; ASCII( " ) BR 50$ 20$: TST (SP) ; DELIMETER .SWITCH BEQ 201$ ; NOT DELIMETED PACK #057 ; ASCII( / ) CLR (SP) ; CLEAR DEL .SWITCH 201$: PACK #074 ; ASCII( < ) CALL POCT ; PACK CHAR OCTAL PACK #076 ; ASCII( > ) 50$: MOV R0,4(SP) ; NEW INST BUFFER INC ADR ; ADR = ADR + 1 DEC 2(SP) ; COUNT CHARACTER BGT 1$ TST (SP) ; DELIMITER BEQ 51$ ; NOT PRESENT PACK #057 ; ASCII( / ) 51$: CMP (SP)+,(SP)+ ; CLEAN UP STACK CMP (SP)+,(SP)+ SUB #2,ADR BR EOL 100$: CMP (SP)+,(SP)+ ; CLEAN UP STACK CMP (SP)+,(SP)+ DEC ADR BR EOL1 ; ; END OF LINE ROUTINE EOL:: CALL $PUTBUF ; WRITE LOGICAL BLOCK INC LINES ; LINES = LINES +1 INC LINCT ; LINCT = LINCT +1 CMP LINCT,#4 ; EXTRA LF ? BLT EOL1 ; NO CALL $PUTBUF ; YES INC LINES ; LINES = LINES +1 CLR LINCT ; LINCT = 0 EOL1: ADD #2,ADR ; BUMP TO NEXT INST CALL TEST ; TEST IF DONE JMP SYM1 ; .SBTTL TOP OF PAGE AND HEADER MESSAGE ; TOP:: CMP LINES,#PAGSIZ ; CHECK IF PAGE FULL BLT 10$ ; NO MOV #BUF,R0 ; YES - INIT ASCII STRING POINTER PACK #014 ; ASCII(FORM FEED) ; CALL $PUTBUF ; TOP OF PAGE INC PAGE ; PAGE = PAGE + 1 ; MOV #TTLBF,R5 ; TITLE BUFFER CALL PTXT PACK #040 ; ASCII( SPACE ) PACK #'- ;COMMA ; ; MOV #FILBUF,R5 ;POINT TO 'FILE='COMMAND TSTB (R5) ;EXIST+ BEQ 5$ CALL PTXT PACK #040 PACK #'- ; 5$: MOV #SEG,R5 CALL PTXT MOV .CRSEG,R5 ;POINT TO CURRENT SEGMENT ENTRY MOV SGT.SN+2(R5),-(SP) MOV SGT.SN+0(R5),R5 ;GET NAME CALL PR50 MOV (SP)+,R5 CALL PR50 ;UNPACK NAME AND INSERT IN TITLE BUFFER ; PACK #'- PACK #040 PACK #040 MOV #TIMEAD,R5 ; DATE BUFFER ADDR CALL PDATE ; PACK DATE PACK #040 PACK #040 CALL PTIME ; PACK TIME SUB #5,R0 ; DELETE ":SS.F" FROM TIME MOV #PGE,R5 CALL PTXT ; " PAGE " MOV PAGE,R5 ; PAGE NUMBER CALL PDEC ; PACK PAGE NUMBER CALL $PUTBUF ; END OF HEADER LINE CALL $PUTBUF ; EXTRA LF MOV #2,LINES ; INIT 2 LINES CLR LINCT ; LINES SINCE EXTRA LF COUNT 10$: RETURN ; .SBTTL DONE TEST ; TEST:: TST ADR ; TEST IF DONE BEQ 2$ ; ADR = 200000 CMP ADR,HIGH BHI 2$ ; ADR .GE. HIGH 1$: RETURN 2$: TST (SP)+ ; CLEAN UP STACK 10$: RETURN ; .END