.TITLE CRASH -- CRASH THE SYSTEM .IDENT /V1.0/ ; ;+ ; CRASH -- CRASH THE SYSTEM ; ; USEFUL TO GET A CRASH DUMP WHEN SOME TERMINALS HANG WITHOUT HAVING ; TO FIGURE OUT HOW TO HAND TOGGLE IN A PROCESSOR JUMP TO @#$CRASH ; (ESPECIALLY THOSE 11/70S WITH THE RDC PANEL). ; ; ASSEMBLY INSTRUCTIONS: ; ; >MAC CRASH,CRASH/-SP=[1,1]EXEMC/ML,[200,200]RSXMC/PA:1,[G,M]CRASH ; ; TASK BUILDER INSTRUCTIONS: ; ; >TKB ; TKB>CRASH/PR/-FP/MM/-SE,CRASH/-SP=CRASH ; TKB>[1,54]RSX11M.STB/SS,[1,1]EXELIB/LB ; TKB>/ ; ENTER OPTIONS: ; TKB>STACK=32 ; TKB>PRI=100 ; TKB>UNITS=1 ; TKB>ASG=TI:1 ; TKB>TASK=...CRA ; TKB>// ; ;- ; .MACRO TYPE LUN,MESSAGE .PSECT MSGTXT,RO .NCHR MSGLEN, MSGADR=. .ASCII \MESSAGE\ .EVEN .PSECT CRASH MOVB LUN,R0 ; LUN GOES IN R0 MOVB MSGADR,R1 ; CARRIAGE CONTROL IN R1 MSGADR=MSGADR+1 MOV #MSGADR,R2 ; MESSAGE ADDRESS IN R2 MSGLEN=MSGLEN-1 MOV #MSGLEN,R3 ; LENGTH IN R3 CALL TYPMSG ; GO TYPE IT .ENDM .MACRO ACCEPT LUN,BUFR,SIZ MOVB LUN,R0 ; LUN GOES IN R0 MOV BUFR,R1 ; BUFFER ADDRESS IN R1 MOV SIZ,R2 ; BUFFER SIZE IN R2 CALL ACCMSG ; ACCEPT THE MESSAGE MOV IOSB+2,R3 ; GET LENGTH OF RETURNED STRING .ENDM .PAGE .ENABLE LC .MCALL HWDDF$,TCBDF$,UCBDF$,EXIT$S HWDDF$ ; DEFINE SYSTEM FEATURES MASK BITS TCBDF$ ; DEFINE TASK CONTROL BLOCK OFFSETS UCBDF$ ; DEFINE UNIT CONTROL BLOCK OFFSETS MSGLUN==1 ; MESSAGE LUN .PSECT IOSB: .BLKW 2 ; I/O STATUS BLOCK BUFFER: .BLKB 20. ; INPUT BUFFER BUFSIZ=.-BUFFER .EVEN .PSECT CRASH,RO CRASH:: BIT #FE.MUP,$FMASK ; IS MULTI-USER PROTECTION SUPPORTED? BEQ QUERY ; NO, GO ASK FOR PERMISSION MOV $TKTCB,R0 ; GET OUR TCB ADDRESS MOV T.UCB(R0),R0 ; GET OUR TI: UCB ADDRESS BIT #U2.PRV,U.CW2(R0) ; ARE WE PRIVILEGED? BEQ QUIT ; NO, LET MY PEOPLE GO QUERY: TYPE #MSGLUN,<$CRASH -- Are you sure [Y/N]? > ACCEPT #MSGLUN,#BUFFER,#BUFSIZ BCS ABORT ; ANY I/O ERRORS ABORT US TST R3 ; SAME WITH NO ANSWER BEQ ABORT CMPB BUFFER,#'Y ; USER BETTER SAY "Y"[ES] BEQ DOIT CMPB BUFFER,#<171> ; LOWER CASE IS OK TOO BNE ABORT ;*** THIS IS IT!!! DOIT: JMP @#$CRASH ; CRASH THE SYSTEM ABORT: TYPE #MSGLUN,< CRASH -- Request aborted> BR EXIT QUIT: TYPE #MSGLUN,< CRASH -- Privilege violation> EXIT: EXIT$S ; RETURN TO THE SYSTEM .PAGE ; ;+ ; ; TYPMSG -- TYPE A MESSAGE ON THE TERMINAL ; ;- ; .MCALL QIOW$S TYPMSG:: QIOW$S #IO.WLB,R0,R0,,,, RETURN ; ;+ ; ; ACCMSG -- ACCEPT A MESSAGE FROM THE TERMINAL ; ;- ; ACCMSG:: QIOW$S #IO.RLB,R0,R0,,#IOSB,, RETURN .END CRASH