.TITLE ILLREM - ILLEGAL INSTRUCTION EXEC SERVICE DISABLE .IDENT /V1/ ; ; ; WRITTEN BY D.B.CURTIS ; SOFTWARE SUPPORT GROUP (R.S.) ; 13-JUN-79 ; FERMILAB ; ; ; VERSION 01 ; EDIT NUMBER = 0006 ; FILE = ILLREM.MAC ; EDITED BY: D.B.CURTIS 19 JUL 79 12:46 ; ; ; MODIFICATIONS: ; ;+ ; FILE DESCRIPTION ; ; THIS TASK REMOVES THE EXECUTIVE FUNCTIONS INSERTED INTO THE POOL ; AND CONNECTED TO THE ILLEGAL INSTRUCTION INTERRUPT BY THE ISF ; TASK. THE POOL AREA IS DEALLOCATED, THE ILLEGAL INSTRUCTION ; INTERRUPT IS RESET; AND,IF XDT EXISTS, THE MODIFICATION TO XDT IS ; REMOVED. ; ; ASSEMBLE USING: ; =[200,200]RSXMC/PA:1,[X,Y]ILLREM ; ;- ; ; .MCALL EXIT$S,SWSTK$,QIOW$,QIO$,DIR$,GTSK$ .PAGE ;+ ; **-START-MAIN ROUTINE ; ; INPUTS: ; NONE ; ; OUTPUTS: ; NONE ; ; SIDE EFFECTS: ; ; MODIFIED EXTERNALS ; XDT VECTOR RESET TABLE IS RESTORED TO ORIGINAL STATE ; ; OTHER SIDE EFFECTS ; THE ILLEGAL INSTRUCTION VECTOR IS RESET TO ITS ORIGINAL VALUE ; AND THE POOL SPACE IS DEALLOCATED FROM THE SYSTEM POOL ; ; STANDARD REGISTER USAGE ; ; THIS TASK DOES THE FOLLOWING: ; BEGIN ; IF NON-PRIVILEGED TASK THEN ERROR1; ; IF ILL FUNCTIONS NOT INSTALLED THEN ERROR2; ; SWITCH STACKS; ; RESET ILLEGAL INSTRUCTION VECTOR ; RESET XDT; ; DEALLOCATE POOL BUFFER ; SWITCH TO USER STACK; ; END ; ; ; THE INFORMATION POINTED TO BY THE ILLEGAL INSTRUCTION VECTOR ; LOOKS LIKE: ; ; --------------------------- ; | ILL (IN RAD50) | ; |-------------------------| ; | NUMBER OF BYTES IN AREA | ; |-------------------------| ; | ORIGINAL CONTENTS OF ILV| ; |-------------------------| ;ILV=> | NOP | ; --------------------------- ; ; ;- ; ; ROUTINES CALLED ; $DEACB -- DEALOCATE POOL SPACE ; ; ; ; EQUATED SYMBOLS ; ILVEC=10 ;DEFINE ILLEGAL INST VECTOR LF=12 CR=15 BEL=7 XDTFIX=300 ;FIX VALUE FOR XDT ; ; LOCAL MACROS ; .MACRO MESSAG,AAA .NCHR S...Z, .WORD S...Z .ASCII /AAA/ .EVEN .ENDM MESSAG ; ; LOCAL DATA ; STATF: .WORD 0 ;STATUS FLAG ERPMSG: QIO$ IO.WLB,TT.LN,,,,, ; PRINT ERROR PROLOG QIO ERRMSG: QIOW$ IO.WLB,TT.LN,TT.EV,,,,<0,0,40> ; PRINT ERROR MESSAGE ; T A S K P A R A M E T E R B L O C K TPREM: GTSK$ TPBUF TPBUF: .BLKW 16. ; E R R O R M E S S A G E S ERPRE: .WORD 3 .ASCII .EVEN ER1: MESSAG ER2: MESSAG .PAGE START:: ; CHECK IF TASK IS PRIVILGED DIR$ #TPREM ;GET TASK PARAMETERS BCC 1$ ;IF OK CONTINUE IOT ;ELSE BURN 1$: CMPB #1,TPBUF+G.TSDU+1 ; CHECK IF TASK IS PRIVILEGED BEQ 10$ ;IF EQ YES JMP ERROR1 ;PRINT ERROR ; ENTER SYSTEM STATE ; CHECK ILLCODE EXISTS 10$: CLR STATF ;INITALIZE STATUS FLAG SWSTK$ 30$ ;; BUFFER ALLOCATED AND LINKED MOV @#ILVEC,R0 ;; GET ILLEGAL INST ADDRESS CMP -6(R0),#^RILL ;; CHECK IF ILL CODE IS INSERTED BNE 20$ ;; IF NOT EXIT WITH ERROR ; CHECK XDT EXISTS AND RESTORE TO ORIGINAL STATE IF SO MOV #$XDT,R1 ;; SEE IF XDT EXITS BEQ 15$ ;; IF EQ NO SUB #XDTFIX,R1 ;; ADJUST TO POINT TO TABLE CMP R0,(R1) ;; ARE THEY THE SAME BNE 15$ ;; IF NOT DONOT UPDATE TABLE MOV -2(R0),(R1) ;; RESET XDT ; RESET THE VECTOR AND DEALLOCATE THE BUFFER 15$: MOV -(R0),@#ILVEC ;; RESET THE VECTOR MOV -(R0),R1 ;; GET THE SIZE OF THE BUFFER CLR -(R0) ;; REMOVE CHECK CODE CALL $DEACB ;; DEALLOCATE THE BUFFER BR 29$ ;; EXIT SYSTEM STATE 20$: DEC STATF ;; SHOW ERROR 29$: RETURN 30$: TST STATF ;CHECK IF OK BNE ERROR2 ;IF NOT OK ERROR2 40$: END: EXIT$S IOT ERROR1: MOV #ER1,R0 BR PER ERROR2: MOV #ER2,R0 PER: DIR$ #ERPMSG ;PRINT ERROR PRELOG MOV (R0)+,ERRMSG+Q.IOPL+2 ;LOAD THE MESSAGE ZISE MOV R0,ERRMSG+Q.IOPL ;AND THE ADDRESS DIR$ #ERRMSG ;PRINT MESSAGE BCC 1$ ;IF CC ALL OK IOT 1$: JMP END .END START