CRASH.MAC;2/AU/-BF=CRASH.MAC;1 \ -2,2 .IDENT /05.01/ -25,25 ; VERSION: 05.01 -28 ; MODIFICATIONS: ; ; HLC001 -- INSURE THAT PREVIOUS MODE IS USER BEFORE GETTING ; USER STACK POINTER. ; ; HLC002 -- SAVE LOCATIONS 4 AND 6 BEFORE THEY ARE CHANGED. ; ; HLC003 -- SUPPORT ALL DA DEVICES FOR DUMP DEVICE. ; % -49,,/;HLC002/ $CRSV4::.WORD 0 ;SAVE LOCATION 4 $CRSV6::.WORD 0 ;SAVE LOCATION 6 -52,,/;HLC003/ .IF NE C$$CDA-5 -64,64,/;HLC003/ .IF EQ C$$CDA-5 CRSMG1: .ASCIZ <15><12><12>/SYSTEM CRASH -- / CRSMG2: .ASCIZ /DUMP DEVICE NOT ASSIGNED/<15><12><12> .EVEN CRSMG3: .ASCII /DUMPING TO DEVICE / $CRSDV::.WORD 0 $CRUNA::.ASCIZ / :/<15><12><12> CRSMG4: .ASCIZ <15><12><12>/DUMP COMPLETE/<15><12><12> .EVEN $CRUCB::.WORD 0 ;A(DUMP DEVICE UCB) $CRDAP::.BLKW 30. ;INIT PROCEDURE TABLE ;FILLED IN BY ADS UTILITY PROGRAM .ENDC ;EQ C$$CDA-5 .ENDC ;DF C$$CDA -103,,/;HLC003/ .IF NE C$$CDA-5 -105,,/;HLC003/ .ENDC ;NE C$$CDA-5 -216,,/;HLC002/ MOV @#4,$CRSV4 ;SAVE LOCATION 4 MOV @#6,$CRSV6 ;SAVE LOCATION 6 -242,,/;HLC001/ BIS #30000,PS ;INSURE PREVIOUS MODE IS USER -290,,/;HLC003/ .IF NE C$$CDA-5 -302,,/;HLC003/ .ENDC ;NE C$$CDA-5 .IF EQ C$$CDA-5 AGAIN: MOV #CRSMG1,R1 ;;;R1 = A(MESSAGE PREFIX) MOV #C$$RSH,R5 ;;;R5 = PRINT DEVICE CSR CALL TYPE ;;;TYPE IT TST $CRUCB ;;;DUMP UNIT ASSIGNED? BNE 10$ ;;;IF NE, YES - GO DUMP MOV #CRSMG2,R1 ;;;R1 = A(MESSAGE) CALL TYPE ;;;TYPE IT HALT ;;;CAN'T DO ANY MORE BR AGAIN ;;;TRY AGAIN 10$: MOV #CRSMG3,R1 ;;;R1 = A(MESSAGE) CALL TYPE ;;;TYPE IT BR DUMP ;;;GO DUMP ; ; TYPE A MESSAGE ; TYPE: MOVB (R1)+,R2 ;;;GET A CHARACTER BEQ 10$ ;;;IF EQ, DONE CALL $OUT ;;;TYPE IT BR TYPE ;;;LOOP UNTIL DONE 10$: RETURN ;;;RETURN .IFF ;EQ C$$CDA-5 -326,,/;HLC003/ .ENDC ;EQ C$$CDA-5 -343,,/;HLC003/ .IF NE C$$CDA-5 -346,,/;HLC003/ .ENDC ;NE C$$CDA-5 -518,518,/;HLC003/ .IF EQ C$$CDA-5 MOV #$CRDAP,R5 ;;;R5 = A(DEVICE SETUP TABLE) MOV (R5)+,R0 ;;;R0 = A(CSR) 10$: MOV (R5)+,R4 ;;;R4 = A(DEVICE REGISTER) BEQ 20$ ;;;IF EQ, END OF SETUP MOV (R5)+,(R4) ;;;SETUP REGISTER BR 10$ ;;;LOOP UNTIL DONE 20$: MOV (R5)+,R1 ;;;R1 = A(DEVICE BUS ADDRESS REGISTER) MOV (R5)+,R2 ;;;R2 = A(DEVICE WORD COUNT REGISTER) MOV (R5)+,R3 ;;;R3 = A(DEVICE ERROR REGISTER) MOV #$CRSBF,(R1) ;;;DUMP INTERNAL STACK FIRST MOV #-256.,(R2) ;;;ONE BLOCK MOV (R5),(R0) ;;;WRITE THE FIRST BLOCK 30$: BIT 2(R5),(R0) ;;;ERROR OR READY? BEQ 30$ ;;;IF EQ, NO - LOOP UNTIL WRITE FINISHED BIT 4(R5),(R0) ;;;ANY ERRORS? BNE DUMP ;;;IF NE, YES - START DUMP OVER CLR (R1) ;;;SET TO DUMP ALL OF MEMORY 35$: CLR (R2) ;;;LONG, LONG, LONG, WRITE BIC #100000,(R0) ;;;HACK FOR RK06 - DON'T LET BIS CLEAR CONTROLLER BIS (R5),(R0) ;;;START THE WRITE 40$: BIT 2(R5),(R0) ;;;ERROR OR READY? BEQ 40$ ;;;LOOP UNTIL DONE BIT 4(R5),(R0) ;;;ERROR? BEQ 35$ ;;;IF EQ, NO - IT DIDN'T GO TO END BIT 6(R5),(R3) ;;;NON-EXISTANT MEMORY ERROR? BEQ DUMP ;;;IF EQ, NO - START DUMP OVER MOV #CRSMG4,R1 ;;;R1 = A(MESSAGE) MOV #C$$RSH,R5 ;;;R5 = A(PRINT DEVICE CSR) CALL TYPE ;;;TYPE IT .ENDC ;EQ C$$CDA-5 /