.TITLE MTPS -- TEST MFPS/MTPS INSTRUCTIONS .IDENT /V01.00/ MMR0 =: 177572 KISDR0 =: 172300 KISAR0 =: 172340 UISDR0 =: 177600 UISDR7 =: 177616 UISAR0 =: 177640 TPS =: 177564 TPB =: TPS+2 PSW =: 177776 .MCALL .EXIT,.PRINT ;SYSTEM MACRO CALLS START:: MOV #30340,@#PSW ;RAISE CPU PRIORITY MOV #KISAR0,R0 ;PAGE ADDRESS REGISTERS MOV #UISAR0,R1 ; MOV #KISDR0,R2 ;PAGE DESCRIPTOR REGISTERS MOV #UISDR0,R3 ; CLR R5 ;RELOCATION BIAS MOV #8.,R4 ;PAGE COUNT 10$: MOV R5,(R0)+ ;INITIALIZE PAGE MOV R5,(R1)+ ; MOV #77406,@R2 ; MOV (R2)+,(R3)+ ; SOB R4,10$ ;TO NEXT PAGE MOV #177600,-(R0) ;FIX PAGE 7 MOV @R0,-(R1) ; MOV @#10,-(SP) ;SAVE VECTORS MOV @#12,-(SP) ; MOV @#4,-(SP) ; MOV @#6,-(SP) ; MOV SP,R3 ;SAVE STACK MOV #TR010,@#10 ;INITIALIZE VECTORS MOV #340,@#12 ; MOV #TR004,@#4 ; MOV #340,@#6 ; MOV #TR034,@#34 ; MOV #340,@#36 ; MOV #TR250,@#250 ; MOV #340,@#252 ; BIS #1,@#MMR0 ;ENABLE RELOCATION MOV #500,-(SP) ;SET USER STACK MTPI SP ; MOV #ARGS,R2 ;$EDMSG ARGUMENT LIST MOV #140000,-(SP) ;SET USER PSW MOV #UTASK,-(SP) ;SET USER PC TR034:: INC #-1 ;TRAP LEVEL BEQ 20$ ;IF EQ START USER TASK MOV 2(SP),(R2)+ ;PUT PSW AFTER MTPS MOV R5,(R2)+ ;PUT MMU FAULT FLAG INC #-1 ;TASK LEVEL BNE 30$ ;IF NE ALL DONE BIC #6,@#UISDR7 ;UNMAP I/O PAGE FOR USER 20$: MOV @#UISDR7,(R2)+ ;PUT UISDR0 MOV #140000,2(SP) ;RESET USER PSW MOV 2(SP),(R2)+ ;PUT PSW BEFORE MTPS MOV #ZERO,R5 ;AASUME NO MMU FAULT RTI ;TO USER STATE 30$: MOV #FMTS,R1 ;FORMAT STRING EXIT:: MOV R3,SP ;RESET STACK MOV (SP)+,@#6 ;RESTORE VECTORS MOV (SP)+,@#4 ; MOV (SP)+,@#12 ; MOV (SP)+,@#10 ; CLR @#MMR0 ;DISABLE RELOCATION CLR @#PSW ;LOWER CPU PRIORITY MOV #ARGS,R2 ;ARGUMENT BLOCK MOV #BUFF,R0 ;BUFFER ADDRESS CALL $EDMSG ;FORMAT MESSAGE CLRB @R0 ;MAKE IT ASCIZ .PRINT #BUFF ;PRINT IT .EXIT TR250:: MOV #MMUF,R5 ;MMU FAULT FLAG RTI ;RETURN TR010:: MOV #RESV,R5 ;RESERVED INSTRUCTION FLAG RTI ;RETURN TR004:: MOV (SP)+,ARGS ;PC MOV (SP)+,ARGS+2 ;PSW MOV #FTRP,R1 ;FORMAT STRING BR EXIT ;EXIT UTASK:: NOP ;PATCH SPACE NOP ; NOP ; NOP ; MTPS #357 ;TRY TO MODIFY PSW NOP ; TRAP 0 ;TO KERNEL STATE BR UTASK ;LOOP OUCHR:: TSTB @#TPS BPL OUCHR MOVB R0,@#TPB RETURN PRINT:: MOVB (R1)+,R0 BEQ 10$ CALL OUCHR BR PRINT 10$: RETURN ARGS: .BLKW 2*4 BUFF: .BLKB 132. FMTS: .ASCII /UISDR7=%P, PSW=%P, MTPS #357, PSW=%P%I%N/ .ASCII /UISDR7=%P, PSW=%P, MTPS #357, PSW=%P%I/ ZERO: .BYTE 0 FTRP: .ASCIZ /*** TRAP TO 4, PC=%P, PSW=%P ***/ MMUF: .ASCIZ /, MMU FAULT/ RESV: .ASCIZ /, RESERVED INSTRUCTION/ .END START