.TITLE DRTST -- TEST OF USING AN INSTRUCTION FOR FUNCTIONALITY .IDENT /X1/ ;+ ; DRTST -- THIS ROUTINE IS USED TO TEST THE FESABILITY OF USING THE ILLEGAL ; INSTRUCTION TRAP OF THE RSX11M OPERATING SYSTEM TO CAUSE QUICK PROCEDURES ; TO BE EXECUTED. ; ; SPECIFICALLY, THIS IS TO TEST THE FESABILITY OF TRANSFURING DATA FROM ; A SHARED AREA TO AN AREA IN A TASK ; ; THIS IS DONE BY: ; ; 1) GOING TO SYSTEM STATE TO SET THINGS UP ; 1) COPYING SOME PIC CODE INTO THE POOL ; 2) ATTACHING THAT CODE TO THE ILLEGAL INSTRUCTION TRAP ; ; 2) EXITING FROM THE SYSTEM STATE ; 3) PUTING ARGUMENTS ON THE TASK STACK ; 4) EXECUTING THE SPECIFIED ILLEGAL INSTRUCTION ; 5) PRESTO THINGS WORK OR DON NOT WORK ; 6) THIS NEEDS TO BE IN A LOOP SO THAT NORMAL OPERTIONS HELP TEST ; IT OUT ; ; ; THE CALLING SEQUENCE IS: ; 106700 ; WITH THE STACK ; 12(SP) = PARITION NAME LOW PART ; 10(SP) = PARITION NAME HIGH PART ; 6(SP) = WORD INDEX INTO COMMON ; 4(SP) = ADDRESS TO PUT DATA ; 2(SP) = NUMBER OF BYTES (MUST BE EVEN) TO TRANSFER ; (SP) = FUNCTION ; ;- .MACRO MOVA,LOC,REG MOV PC,REG ADD #,REG .ENDM .MCALL SWSTK$ ; BUFFER WHERE CODE IS PLACED THAT IS INTERED INTO THE SYSTEM POOL ; CODBUF: .WORD MOV R5,-(SP) ;SAVE R5 AS NEEDED MOV 2(SP),R5 ;GET PC OF TASK MFPI -(R5) CMP #106700,(SP)+ BEQ 1$ MOV (SP)+,R5 ;RESTORE R5 JMP @SAVVC ;REALLY ILLEGAL INSTARCTION ; 1$: MOV (SP)+,R5 JSR R5,@#$DIRSV ; ; 20(SP) = TASK PS ; 16(SP) = TASK PC ; 14(SP) = R5 ; 12(SP) = R4 ; 10(SP) = R3 ; 6(SP) = R2 ; 4(SP) = R1 ; 2(SP) = R0 ; (SP) = PC ; MFPI SP ;GET THE STAK POINTER OF USER MOV (SP)+,R5 ;SAVE IN R5 MOVA DSP,R4 ;GET THE ADDRESS OF THE DISPATCH TABLE MOV R4,-(SP) ;SAVE FOR A SECOND MFPI (R5)+ ;GET THE TYPE ASL (SP) ADD (SP)+,(SP) ;ADD ON THE FUNCTION OFFSET TO TABLE POINTER MOV @(SP),(SP) ;GET FUNCTION OFFSET ADD (SP)+,R4 ;AND SELECT WHICH FUNCTION JMP (R4) ;GO DSP: .WORD F1-DSP .WORD F2-DSP .WORD F3-DSP .WORD F4-DSP F1: MOV @#KISAR6,SAV6 MFPI (R5)+ ;GET NUMBER OF BYTES TO TRANSRER MFPI (R5)+ ;GET ADDRESS TO PUT DATA MFPI (R5)+ ;GET INDEX INTO COMMON MFPI (R5)+ ;GET PARTITION NAME MFPI (R5)+ ; MOV @#$PARHD,R4 ;GET PARTITION POINTER 5$: CMP P.NAM(R4),2(SP) ; CHECK PARTITION NAMP BNE 10$ CMP P.NAM+2(R4),(SP) ; BNE 10$ BR 12$ 10$: MOV (R4),R4 ;ADVANCE POINTER BNE 5$ ADD #12,SP ;CLEAR OFF STACK JMP @#$ILINS+4 ;TAKE NORMAL INLLEGAL INSTRUCTION TRAM 12$: ADD #4,SP ;CLEAR OFF PARTITION NAME MOV P.REL(R4),R4 ;GET PARTITION STARTING ADDRESS MOV (SP),R3 ;GET INDEX ASH #-6,R3 ;CONVERT TO 32. WORD INDEX ADD R3,R4 ;GENERATE ADDRESS TO MAP TO MOV R4,@#KISAR6 ;MAP TO IT MOV (SP)+,R3 ;GET INDEX AGAIN BIC #^C77,R3 ;AND CONVERT TO OFFSET BIS #140000,R3 ;AND APR 6 MOV (SP)+,R5 ;GET ADDRESS MOV (SP)+,R4 ;GET BYTE COUNT INC R4 ASR R4 25$: MOV (R3)+,-(SP) ;GET WORD MTPI (R5)+ SOB R4,25$ MOV SAV6,@#KISAR6 BR END F2: F3: F4: END: RETURN SAV6: .WORD 0 SAVVC: .WORD 0 NOP NOP NOP NOP ENDCB=. NOP PARNAM: .RAD50 /DYNREG/ DRTST:: MOV @#10,SAVVC ;SAVE LOCATION TO JUMP TO IF REAL ILS SWSTK$ EOJ MOV #CODBUF,R3 MOV (R3),R1 ASL R1 CALL $ALOCB BCC 1$ 0 1$: MOV R1,SAVSZ MOV R0,SAVAD MOV (R3)+,R1 DEC R1 ;TAKE ONE OF FOR SAFTY 12$: MOV (R3)+,(R0)+ SOB R1,12$ MOV SAVAD,@#10 RETURN EOJ: MOV PARNAM+2,-(SP) MOV PARNAM,-(SP) MOV #0,-(SP) MOV #BUF,-(SP) MOV #5,-(SP) CLR -(SP) 106700 ADD #14,SP BR EOJ RELE: SWSTK$ XX MOV SAVVC,@#10 MOV SAVSZ,R1 MOV SAVAD,R0 CALL $DEACB RETURN XX: BR XX SAVSZ: .WORD 1 ;SAVED BLOCK SIZE SAVAD: .WORD 1 ;SAVED ADDRESS BUF:: .BLKW 500 ;BUFFER TO STORE THINGS IN .END DRTST