CRASH.MAC;2/AU=CRASH.OLD;1/-BF \ -2,2 .IDENT /04.03AN/ -43 ; NAPC -- CORRECT CRASH OUTPUT OF PC/PS ; REDUCE CODE, REDUCE MESSAGES ; ; MSH039 -- DON'T RELY ON NXM TRAPS TO STOP RL11 ; MEMORY DUMPING FOR QBUS MACHINES ; % -63,64,/;NAPC/ -83,,/;NAPC/ C$KS=1 .IIF EQ C$$CDA-3, C$KS=0 .IIF EQ C$$CDA-4, C$KS=0 .IIF EQ C$$CDA-12, C$KS=0 -90,101,/;NAPC/ MSG1: .ASCIZ <15><12><12>/SYSTEM CRASH AT / .ASCII <15><12><12> .ASCIZ / PS=/ .ASCIZ /SP=/ .ASCIZ /R0=/ .ASCIZ /R1=/ .ASCIZ <15><12><12>/ R2=/ .ASCIZ /R3=/ .ASCIZ /R4=/ .ASCIZ /R5=/<0> .ASCIZ <15><12><12>/SYSTEM STACK/<15><12><12> -115,115,/;NAPC/ .BLKW 97. ; MEMORY MANAGEMENT REGISTERS .IF DF M$$EXT .BLKW 62. ; 11/70 UNIBUS MAPPING REGS. .ENDC -121,,/;NAPC/ $CRUPC==$CRSST-4 ; USER PC $CRUST==$CRSST-6 ; USER PS -125,,/;NAPC/ .IF NE C$KS -127,,/;NAPC/ .ENDC -133,134,/;NAPC/ MOV ARG,-(SP) -188,242,/;NAPC/ -263,264,/;NAPC/ -278,278,/;NAPC/ MOV R0,-(SP) ;;; SAVE REGISTER SET 0 -294,297,/;NAPC/ 10$: PUSH (R0)+ ;;; SAVE APR SOB R1,10$ ;;; MOVE TO NEXT ONE -300,303,/;NAPC/ 20$: PUSH (R0)+ ;;; SAVE APR SOB R1,20$ ;;; MOVE TO NEXT ONE .IF DF M$$EXT -306,309,/;NAPC/ 30$: PUSH (R0)+ ;;; SAVE UMR SOB R1,30$ ;;; MOVE TO NEXT ONE .ENDC -312,,/;NAPC/ .IF DF C$$TTY MOV #C$$TTY,R5 ;SPECIFY OUTPUT DEVICE CSR MOV #$CRSST-2,R1 ;POINT TO DATA VECTOR MOV #MSG1,R4 ;POINT TO MESSAGE TEXT 1$: MOVB (R4)+,R2 ;GET A BYTE OF MESSAGE BEQ 5$ ;IF EQ AT MESSAGE BREAK BR 3$ ;ELSE ALREADY HAVE A BYTE 2$: MOVB (R4)+,R2 ;GET A BYTE OF MESSAGE BEQ 4$ ;IF EQ END OF THIS MESSAGE 3$: CALL $OUT ;OUTPUT THIS CHARACTER BR 2$ ;GO AGAIN 4$: MOV -(R1),R3 ;GET DATA WORD CALL $EDIT ;PRINT IN PLACE BR 1$ ;GET NEXT MESSAGE 5$: MOVB (R4)+,R2 ;GET NEXT CHARACTER TO OUTPUT BEQ 6$ ;IF EQ END OF STRING CALL $OUT ;OUTPUT CHARACTER BR 5$ ;GO AGAIN 6$: MOV $CRSST-2,R1 ;POINT TO BOTTOM OF SYSTEM STACK 7$: MOV R1,R3 ;SET ADDRESS OF LOCATION TO EDIT CALL 8$ ;EDIT ADDRESS MOV (R1)+,R3 ;GET CONTENTS OF LOCATION CALL 8$ ;EDIT CONTENTS CALL $CRLF ;ISSUE CARRIAGE RETURN, LINE FEED CMP R1,#$STACK ;END OF SYSTEM STACK? BLO 7$ ;IF LO NO BR 9$ ;BR AROUND SUBROUTINE 8$: CALL $OUTB ;OUTPUT TWO BLANKS CALL $OUTB ; CALLR $EDIT ;PRINT CONTENTS OF R3 AND RETURN 9$: ;REF LABEL .ENDC -352,,/;NAPC/ .IF NE C$KS -359,,/;NAPC/ .ENDC -365,365,/;NAPC/ ; AND THE SYSTEM IMAGE ONTO A SCRATCH DUMP MEDIA. WHEN THE DUMP -473,474,/;NAPC/ -490,492,/;NAPC/ 30$: MOV #-1000.,R1 ;;; WAIT FOR TAPE TO SETTLE DOWN 35$: SOB R1,35$ ;;; WAIT -517,518,/;NAPC/ -670,,/;MSH039/ .IFF .IF DF M$$MGE MOV #124.*4,-(SP) ;;;DUMP MAXIMUM 124.K WORDS .IFF ;M$$MGE MOV #28.*4,-(SP) ;;;DUMP MAXIMUM 28.K WORDS .ENDC -681,681,/;MSH039/ BMI WERRX ;;;IF MINUS I/O ERROR -688,688,/;MSH039/ BMI WERRX ;;;IF MINUS I/O ERROR -715,715,/;MSH039/ BMI WERRX ;;;IF MINUS I/O ERROR -733,,/;MSH039/ .IFF DEC (SP) ;;;DECREMENT MAXIMUM BLOCK COUNT BLE 72$ ;;;IF EQ, DUMP IS DONE -749,,/;MSH039/ .IF DF M$$EXT -751,751,/;MSH039/ WERRX: ;;;REF LABEL .IFF BEQ WERRX ;;;IF EQ, I/O ERROR 72$: TST (SP)+ ;;;CLEAN STACK BR $CRCMP ;;;DUMP DONE WERRX TST (SP)+ ;;;CLEAN STACK .ENDC -952,953,/;NAPC/ -1089,1089,/;NAPC/ /