.TITLE MVPS -- MFPS/MTPS FOR 11/34 CPU .IDENT /V01.00/ $SYSGE =: 372 ;SYSGEN FEATURE WORD MMGT$ =: 2 ;MEMORY MANAGEMENT SUPPORT RTEM$ =: 10 ;RTEM-11 SYSTEM PSW =: 177776 ;PROCESSOR STATUS WORD MMR0 =: 177572 ;MEMORY MANAGEMENT REGISTER 0 MMR1 =: 177574 ;MEMORY MANAGEMENT REGISTER 1 MMR2 =: 177576 ;MEMORY MANAGEMENT REGISTER 2 KISDR0 =: 172300 ;KERNEL I SPACE DESCRIPTOR REGISTER 0 KISAR0 =: 172340 ;KERNEL I SPACE ADDRESS REGISTER 0 UISDR0 =: 177600 ;USER I SPACE DESCRIPTOR REGISTER 0 UISAR0 =: 177640 ;USER I SPACE ADDRESS REGISTER 0 TPS =: 177564 ;PRINTER STATUS TPB =: TPS+2 ;PRINTER BUFFER .MCALL .EXIT,.GVAL,.PRINT ;SYSTEM MACRO CALLS .ASECT .=34 .WORD TRSST,340 ;TRAP SST .PSECT START:: .GVAL #BUFF,#$SYSGE ;GET SYSGEN FEATURE WORD BIT #MMGT$!RTEM$,R0 ;MEMORY MANAGEMENT SUPPORTED? BEQ 10$ ;IF EQ NO, OK .PRINT #ESYST ;PRINT ERROR MESSAGE .EXIT ;EXIT 10$: CALL MMINI ;INITIALIZE MMU MOV #170000,-(SP) ;SET USER PSW MOV #UTASK,-(SP) ;SET USER PC MOV #ARGS,R2 ;SET ADDRES OF ARG BLOCK MOV #123456,@#37776 ;MAGIC RTI ;RETURN FROM INTERRUPT UTASK:: TRAP 0 ;PUT PSW INTO ARG BLOCK ;XXX MOV @#177776,(R2)+ ;PUT VALUE OF @#177776 MFPS R1 ;GET PSW VALUE MOV R1,(R2)+ ;PUT PSW INTO ARG BLOCK MTPS #17 ;SET PSW VALUE TRAP 0 ;PUT PSW INTO ARG BLOCK BR . ;SHOULD NEVER HAPPEN TRSST:: MOV 2(SP),(R2)+ ;PUT USER PSW INTO ARG BLOCK MOV @#37776,(R2)+ ;PUT VALUE OF @#177776 INC #-2 ;DONE FLAG BEQ 10$ ;IF EQ YES RTI ;RETURN FROM INTERRUPT 10$: CMP (SP)+,(SP)+ ;CLEAN STACK RETURN ;RETURN TO CO-ROUTINE MPSST:: RTI .ENABL LSB PRINT:: MOVB (R1)+,R0 ;GET CHARACTER BEQ 10$ ;IF EQ END OF LINE CALL OUCHR ;PRINT CHARACTER BR PRINT ;TO NEXT CHAR OUCHR:: TSTB @#TPS ;PRINTER READY? BPL OUCHR ;IF PL NO MOVB R0,@#TPB ;PRINT CHARACTER 10$: RETURN ;RETURN .DSABL LSB MMINI:: MOV (SP)+,BUFF ;SAVE RETURN ADDRESS MOV #30340,@#PSW ;RAISE CPU PRIORITY MOV @#MMR0,-(SP) ;SAVE MMR0 MOV @#250,-(SP) ;SAVE VECTOR 250 MOV @#252,-(SP) ; MOV #8.,R0 ;PAGE COUNT MOV #KISAR0,R1 ;KISAR0 MOV #UISAR0,R2 ;UISAR0 MOV #KISDR0,R3 ;KISDR0 MOV #UISDR0,R4 ;UISDR0 CLR R5 ;RELOCATION BIAS 10$: MOV @R1,-(SP) ;SAVE KISAR MOV @R2,-(SP) ;SAVE UISAR MOV @R3,-(SP) ;SAVE KISDR MOV @R4,-(SP) ;SAVE UISDR MOV R5,(R1)+ ;INITIALIZE KISAR MOV R5,(R2)+ ;INITIALIZE UISAR MOV #77406,@R3 ;INITIALIZE KERNEL PAGE DESCRIPTOR MOV (R3)+,(R4)+ ;INITIALIZE USER PAGE DESCRIPTOR ADD #200,R5 ;UPDATE RELOCATION BIAS SOB R0,10$ ;TO NEXT PAGE (SAFE TO USE SOB) MOV #177600,-(R1) ;MAP PAGE 7 TO IOPAGE FOR KERNEL SPACE MOV #200,-(R2) ;MAP PAGE 7 TO 20000 FOR USER SPACE MOV #MPSST,@#250 ;SET UP MMU SST ROUTINE MOV #340,@#252 ; BIS #1,@#MMR0 ;ENABLE RELOCATION MFPI SP ;SAVE USER SP MOV #500,-(SP) ;INITIALIZE USER SP MTPI SP ; MOV BUFF,-(SP) ;RESTORE RETURN ADDRESS CALL @(SP)+ ;CALL CO-ROUTINE CLR @#MMR0 ;TURN OFF MAPPING MTPI SP ;RESTORE USER STACK MOV #8.,R0 ;PAGE COUNT MOV #KISAR0,R1 ;KISAR0 MOV #UISAR0,R2 ;UISAR0 MOV #KISDR0,R3 ;KISDR0 MOV #UISDR0,R4 ;UISDR0 20$: MOV (SP)+,(R4)+ ;RESTORE UISDR MOV (SP)+,(R3)+ ;RESTORE KISDR MOV (SP)+,(R2)+ ;RESTORE UISAR MOV (SP)+,(R1)+ ;RESTORE KISAR SOB R0,20$ ;TO NEXT PAGE (SAFE TO USE SOB) MOV (SP)+,@#252 ;RESTORE VECTOR 250 MOV (SP)+,@#250 ; MOV (SP)+,@#MMR0 ;RESTORE MMR0 CLR @#PSW ;LOWER CPU PRIORITY MOV #BUFF,R0 ;SET BUFFER ADDRESS MOV #FMTS,R1 ;SET FORMAT STRING MOV #ARGS,R2 ;SET ARGUMENT BLOCK CALL $EDMSG ;EDIT MESSAGE .PRINT #BUFF ;PRINT IT .EXIT ;EXIT BUFF:: .BLKW 40. ;BUFFER ARGS:: .BLKW 5 FMTS: .ASCII / ;PSW=%P, @#177776=%P%N/ .ASCII /MFPS R1 ;R1=%P%N/ .ASCIZ /MTPS #17 ;PSW=%P, @#177776=%P/ ESYST: .ASCIZ /?MVPS-F-Invalid operating system/ .END START