.MCALL .MODULE .MODULE VM,RELEASE=V05,VERSION=00,COMMENT=,AUDIT=YES ; COPYRIGHT (c) 1983 BY ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, ; MASSACHUSETTS. ALL RIGHTS RESERVED. ; ; ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED ; ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE ; INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER ; COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY ; OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY ; TRANSFERRED. ; ; ; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE ; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT ; CORPORATION. ; ; ; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS ; SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY DIGITAL. ; .ENABL LC .NLIST BEX .SBTTL General comments .SBTTL Macros and Definitions .MCALL .DRDEF,.PRINT .IIF NDF MMG$T,MMG$T = 0 .IIF EQ MMG$T,MMVEC = 250 .IIF NE MMG$T,MMVEC = 0 .DRDEF VM,47,FILST$,0,177572,MMVEC MMSR0 = 177572 MMSR1 = 177574 MMSR2 = 177576 MMSR3 = 172516 UISDR0 = 177600 UISDR7 = 177616 UISAR0 = 177640 UISAR7 = 177656 KISDR0 = 172300 KISDR7 = 172316 KISAR0 = 172340 KISAR1 = 172342 KISAR7 = 172356 SYSPTR = 54 PNPTR = 404 MEMSIZ = 420 $MEMPT = 430 P1EXT = 432 V.TRP4 = 4 V.MPTY = 114 PS = 177776 UMODE = 140000 MODE22 = 000020 PUMODE = 030000 AP$ACF = 077406 LKCSR = 177546 SWR = 177570 PR7 = 000340 BLK18 = 384. .IF NDF VM$BASE .IF EQ MMG$T VM$BASE = 1600 .IFF VM$BASE = 10000 .ENDC .ENDC .SBTTL Text area for set code .ASECT . = 120 REINST: .ASCIZ "?VM-W-Remove and reinstall this handler" .EVEN .IIF GT <.-174> .ERROR .SBTTL Set code .DRSET BASE,1600,S.BASE,OCT S.BASE: CMP R0,R3 BLO 10$ CMP R0,V.BASE BEQ 5$ .IF EQ MMG$T BTBASE = ++1000 MOV PC,R1 ADD #BAREA-.+4,R1 MOV PC,R2 ADD #1000-.,R2 MOV R2,(R1) MOV #BTBASE/1000,-(R1) TST -(R1) MOV R0,R3 MOV R1,R0 EMT 375 BCS 10$ MOV R3,BTBASE&777(R2) MOV R1,R0 INCB 1(R0) EMT 375 BCS 10$ MOV R1,R0 DECB 1(R0) MOV #1,2(R0) EMT 375 BCS 10$ MOV R3,V.BASE MOV R3,I.BASE .IFF MOV R0,V.BASE MOV R0,I.BASE .ENDC MOV PC,R0 ADD #REINST-.,R0 .PRINT 5$: TST (PC)+ 10$: SEC RTS PC .IF EQ MMG$T BAREA: .BYTE 17,10 .BLKW .BLKW .WORD 256. .WORD 0 .ENDC $$.SET = . .SBTTL SJ/FB Installation code . = 200 .IF EQ MMG$T .ENABL LSB VMINST: NOP MOV R3,-(SP) MOV #V.TRP4,R0 MOV PC,R1 ADD #NXM-.,R1 MOV #PR7,@#PS MOV @R0,-(SP) MOV R1,(R0)+ MOV (R0)+,-(SP) MOV @R0,-(SP) MOV R1,(R0)+ MOV (R0)+,-(SP) MOV #V.MPTY,R0 MOV @R0,-(SP) ADD #MPT-NXM,R1 MOV R1,@R0 CLR R0 MOV #8.,R1 MOV #KISAR0,R3 10$: CLC MOV #AP$ACF,KISDR0-KISAR0(R3) BCS 110$ MOV R0,(R3)+ ADD #200,R0 SOB R1,10$ MOV #177600,-(R3) MOV #AP$ACF,@#UISDR0 MOV #PUMODE!PR7,@#PS MOV #1,@#MMSR0 MOV #UISAR0,R3 MOV (PC)+,@R3 I.BASE: .WORD VM$BASE BR 14$ NXM: BIS #1,2(SP) MPT: RTI .IIF GT <. - 360>, .ERROR . = $$.SET 100$: TST (PC)+ 110$: SEC MOV (SP)+,@#V.MPTY MOV #V.TRP4+10,R0 .REPT 4 MOV (SP)+,-(R0) .ENDR MOV (SP)+,R3 BIC #PS,@#PS RTS PC 14$: MOV #7600,-(SP) CLC BIS #MODE22,@#MMSR3 BCS 20$ BIT #MODE22,@#MMSR3 BEQ 20$ MFPT BCS 15$ CMP R0,#3 BNE 15$ CLC CLR @#SWR BCC 15$ CLC MOV #LKCSR,R0 BIS #100,@R0 BCS 20$ BIT #100,@R0 BEQ 20$ BIT #40,@R0 BNE 20$ 15$: MOV #177600,@SP 20$: MOV (SP)+,R0 CLR 54 MOV #776,R1 30$: CLC MFPI @R1 BCS 40$ MTPI @R1 BCS 35$ INC 54 ADD #8.,@R3 CMP @R3,R0 BLO 30$ BR 40$ 35$: TST (SP)+ 40$: CLR @#MMSR0 CLR @#MMSR3 JMP 100$ .DSABL LSB .ENDC .IIF GT <.-1000>, .ERROR .SBTTL XM Installation code .IF NE MMG$T .ENABL LSB VMINST::NOP MOV @#SYSPTR,R1 MOV $MEMPT(R1),R0 ADD R1,R0 MOV 4(R0),R0 ADD R1,R0 MOV (PC)+,R1 I.BASE: .WORD VM$BASE 10$: CMP (R0)+,#-1 BEQ 110$ TST (R0)+ BEQ 10$ CMP -2(R0),R1 BHI 10$ MOV -(R0),-(SP) ADD -(R0),@SP MOV @SP,(PC)+ TOP: .WORD 0 CMP (SP)+,R1 BHI 20$ CMP (R0)+,(R0)+ BR 10$ 20$: MOV R0,-(SP) 30$: CMP (R0)+,#-1 BEQ 40$ TST (R0)+ BR 30$ 40$: TST @R0 BEQ 50$ ADD #6,R0 CMP @R0,#-1 BNE 40$ TST (SP)+ BR 110$ 50$: MOV TOP,@R0 SUB R1,(R0)+ MOV R1,(R0)+ MOV #<^RVM >,@R0 MOV -4(R0),R1 MOV (SP)+,R0 SUB R1,(R0)+ BNE 60$ CLR @R0 BR 60$ .IIF GT <. - 360>, .ERROR . = $$.SET 60$: CLC ROR R1 ASR R1 ASR R1 MOV R1,54 100$: TST (PC)+ 110$: SEC RTS PC .DSABL LSB .ENDC .SBTTL Driver entry .DRBEG VM .ENABL LSB ASR #1 BCC 40$ MOV @#SYSPTR,R0 ADD PNPTR(R0),R0 MOV R0,R1 20$: CMP (R0)+,#-1 BNE 20$ SUB R1,R0 TST -(R0) 30$: CMP (R1)+,#<^RVM > BNE 30$ ADD R0,R1 ADD R0,R1 ASR R0 ADD R0,R1 MOV (R1),(PC)+ VMSIZE: .WORD 0 40$: .DSABL LSB .IF EQ MMG$T TEST2K: MOV @#SYSPTR,R0 CMP MEMSIZ(R0),#1600 BHI VMERR .ENABL LSB MOV VMCQE,R3 MOV (R3),R0 CMP R0,VMSIZE BHIS VMERR MOV Q$WCNT(R3),R1 BPL 1$ NEG R1 1$: CLRB R1 SWAB R1 ADD R1,R0 CMP R0,VMSIZE BHI VMERR MOV (R3)+,R2 ASL R2 ASL R2 ASL R2 ADD (PC)+,R2 V.BASE: .WORD VM$BASE CLR R4 MOV #UISAR0,R1 MOV #8.,R0 10$: MOV #77406,UISDR0-UISAR0(R1) MOV #77406,KISDR0-UISAR0(R1) MOV R4,KISAR0-UISAR0(R1) MOV R4,(R1)+ ADD #200,R4 SOB R0,10$ MOV R2,-(R1) MOV #37406,@#UISDR7 MOV #177600,@#KISAR7 MOV #160000,R5 JSR R0,M22SET .WORD MODE22 MOV #UMODE,@#PS 15$: MOV #1,@#MMSR0 TST (R3)+ MOV (R3)+,R0 MOV @R3,R4 BMI VMWRT BEQ VMTRAP .SBTTL Perform I/O functions INC R4 ASR R4 BCC 20$ VMREAD: MOV (R5)+,(R0)+ 20$: MOV (R5)+,(R0)+ SOB R4,VMREAD BR VMTRAP VMWRT: NEG R4 INC R4 ASR R4 BCC 40$ 30$: MOV (R0)+,(R5)+ 40$: MOV (R0)+,(R5)+ SOB R4,30$ MOVB @R3,R4 BEQ VMTRAP 50$: CLR (R5)+ DECB R4 BNE 50$ VMTRAP: CLR @#MMSR0 CLR @#PS JSR R0,M22SET .WORD 0 BR VMDONE VMERR: MOV VMCQE,R5 BIS #HDERR$,@-(R5) VMDONE: .DRFIN VM .SBTTL Abort and interrupt entry points BR VMTRAP VMINT: MOV #160000,R5 ADD #100,@#UISAR7 MOV @#MMSR2,R1 CMP @R1,(PC)+ MOV (R0)+,(R5)+ BNE 60$ TST -(R0) 60$: BIC R5,@#MMSR0 MOV PC,R2 ADD #VMTRAP-.,R2 CMP R1,R2 BNE 70$ BIC R5,2(SP) 70$: MOV R1,@SP VMRTI: RTI .DSABL LSB .SBTTL Manipulate 22 bit mode. M22SET: MOV #PR7,@#PS MOV @#4,-(SP) MOV PC,R2 ADD #VMRTI-.,R2 MOV R2,@#4 MOV (R0)+,@#MMSR3 MOV (SP)+,@#4 CLR @#PS RTS R0 .ENDC .SBTTL XM I/O code. .IF NE MMG$T XMIO: MOV @#SYSPTR,R4 MOV P1EXT(R4),(PC)+ $BLKMV: .WORD 0 SUB #2,$BLKMV MOV VMCQE,R4 MOV (R4),R0 CMP R0,VMSIZE BHIS VMERR MOV Q$WCNT(R4),R1 BPL 1$ NEG R1 1$: CLRB R1 SWAB R1 ADD R1,R0 CMP R0,VMSIZE BHI VMERR MOV Q$WCNT(R4),-(SP) BMI WRITE BPL $READ TST (SP)+ BR VMINT $READ: JSR R0,SETBUF JSR R0,SETDSK BR DOIO WRITE: NEG @SP JSR R0,SETDSK JSR R0,SETBUF DOIO: MOV (SP)+,R1 MOV (SP)+,R2 TST (SP)+ MOV (SP)+,R3 MOV (SP)+,R4 TST (SP)+ MOV (SP)+,R5 CALL @$BLKMV BR VMINT RTS PC VMINT: BR VMDONE VMERR: MOV VMCQE,R5 BIS #HDERR$,@-(R5) VMDONE: .DRFIN VM SETDSK: MOV #20000,-(SP) MOV Q$BLKN(R4),-(SP) ASL @SP ASL @SP ASL @SP ADD (PC)+,@SP V.BASE: .WORD VM$BASE JMP @R0 SETBUF: MOV Q$BUFF(R4),-(SP) MOV Q$PAR(R4),-(SP) JMP @R0 .ENDC .SBTTL Bootstrap read routine .IF EQ MMG$T .DRBOT VM,BOOT1,READ . = VMBOOT + 240 BOOT1: JMP @#BOOT-VMBOOT . = VMBOOT + 250 .WORD VMINT1-VMBOOT .WORD 340 .ENABL LSB READ: MOV R1,-(SP) CLR -(SP) TSTB R1 BEQ 2$ INC @SP 2$: CLRB R1 SWAB R1 ADD (SP)+,R1 ADD R0,R1 CMP R1,#BLK18 BLO 5$ MOV #MODE22,@#MMSR3 5$: MOV (SP)+,R1 ASL R0 ASL R0 ASL R0 ADD (PC)+,R0 B.BASE: .WORD VM$BASE CLR R4 MOV #UISAR0,R3 MOV #8.,R5 10$: MOV #77406,UISDR0-UISAR0(R3) MOV #77406,KISDR0-UISAR0(R3) MOV R4,KISAR0-UISAR0(R3) MOV R4,(R3)+ ADD #200,R4 SOB R5,10$ MOV R0,-(R3) MOV #37406,@#UISDR7 MOV #177600,@#KISAR7 MOV #160000,R5 BIS #UMODE,@#PS BIS #1,@#MMSR0 INC R1 ASR R1 BCC 30$ 20$: MOV (R5)+,(R2)+ 30$: MOV (R5)+,(R2)+ SOB R1,20$ VMTRP1: CLR @#MMSR0 BIC #UMODE,@#PS CLC RETURN VMINT1: MOV #160000,R5 ADD #100,@#UISAR7 MOV @#MMSR2,R3 BIC R5,@#MMSR0 MOV PC,R0 ADD #VMTRP1-.,R0 CMP R3,R0 BNE 40$ BIC R5,2(SP) 40$: MOV R3,@SP RTI BOOT: MOV #10000,SP MOV #2,R0 MOV #<4*400>,R1 MOV #1000,R2 JSR PC,READ MOV #READ-VMBOOT,@#B$READ MOV #B$DNAM,@#B$DEVN CLR @#B$DEVU JMP @#B$BOOT .DSABL LSB .ENDC .DREND VM .END