.TITLE GTROS BY RICHARD C WATERS .ENABL ABS .REPT 64 .+2 HALT .ENDM ;THIS IS THE INTERUPT VECTORS FOR THE SCOPE .=320 .WORD GTROS,340,WDISAB,0,WDISAB,0 ;THIS BRANCH TABLE IS USED TO LINK GTROS WITH THE USER PROGRAM BR WEXEC BR WREXEC ;THE FORLLOWING CODE EXECUTES THE ACTIONS CALLED FOR BY THE ;11/05. ;THE PARAMETER IS PASSED ON THE STACK. WEXEC: MOV #WSTK,WSPTR MOV 2(SP),SPC RTS PC WREXEC: MOV @WSPTR,-(SP) JSR PC,WPOP MOV (SP)+,SPC RTS PC ;THE FOLLOWING CODE DECODES AND EXECUTES THE EXTENDED SCOPE ;INSTRUCTIONS GTROS: MOV SPC,WPC MOV @WPC,WHW2 SUB #2,WPC MOV @WPC,WHALTC ADD #4,WPC BIT #10,WHALTC IF NE ;IS A RELATIVE INSTRUCTION ADD WPC,WHW2 ENDF BIT #2,WHALTC IF NE ;IS SINT(R) OR SINTH(R) MOV WHW2,-(SP) ;THIS IS 11/05 ADDR BIT #1,WHALTC IF EQ ;IS SINT(R) MOV WPC,SPC ;RESTART SCOPE ELSE ;IS SINTH(R) JSR PC,WPUSH MOV WPC,@WSPTR ;STACK RETURN FOR SREXEC ENDF RTS PC ;GO TO 11/05 ELSE ;IS SJSR(R), SRTS, OR SJMPR BIT #1,WHALTC IF NE ;IS SJSR(R) JSR PC,WPUSH MOV WPC,@WSPTR ;STACK RETURN FOR SRTS MOV WHW2,SPC ELSE ;IS SRTS OR SJMPR BIT #10,WHALTC IF EQ ;IS SRTS MOV @WSPTR,-(SP) JSR PC,WPOP MOV (SP)+,SPC ELSE ;IS SJMPR MOV WHW2,SPC ENDF ENDF ENDF RTI WPUSH: SUB #2,WSPTR CMP #WSTKB,WSPTR IF HI ;STOP ON OVERFLOW HALT ENDF RTS PC WPOP: ADD #2,WSPTR CMP #WSTK,WSPTR IF LO ;STOP ON UNDERFLOW HALT ENDF RTS PC ;THIS IS THE DATA AREA WDISAB: RTI ;NOOPS SOME INTERUPTS WSTKB: .BLKW 20 ;STACK FOR SCOPE SUBROUTINE CALLS ;TO CHANGE THE SIZE OF THE STACK JUST CHANGE THIS NUMBER ^ WSTK: WSPTR: .WORD WSTK ;SCOPE STACK POINTER WPC: .WORD 0 ;COPY OF THE SCOPE PC WHALTC: .WORD 0 ;THE LDA THE SCOPE HALTED ON, ; IT CONTAINS THE EXTENDED OP CODE. WHW2: .WORD 0 ;THIS IS THE ADDRESS AFTER THE LDA WSNOOP: SNOOP WSJSR: SJSR 0 STOPER:WSRTS: SRTS .END