.TITLE VDDRV - VD: DRIVER .SBTTL VDDRV - TITLE PAGE .IDENT /V03.00/ .NLIST TOC,BEX,CND ; ; ************************************************************************ ; * ; THIS PROGRAM IS PROVIDED ON AN "AS IS" BASIS ONLY. DIGITAL EQUIPMENT * ; COMPUTER USER'S SOCIETY, DIGITAL EQUIPMENT CORPORATION, MONSANTO, AND * ; THE AUTHOR DISCLAIM ALL WARRANTIES ON THE PROGRAM, INCLUDING WITHOUT * ; LIMITATION, ALL IMPLIED WARRANTIES OF MERCHANTABLITY AND FITNESS. * ; * ; FULL PERMISSION AND CONSENT IS HEREBY GIVEN TO DECUS AND TO THE DECUS * ; SPECIAL INTEREST GROUPS TO REPRODUCE, DISTRIBUTE, AND PUBLISH AND * ; PERMIT OTHERS TO REPRODUCE IN WHOLE OR IN PART, IN ANY FORM AND * ; WITHOUT RESTRICTION, THIS PROGRAM AND ANY INFORMATION RELATING THERETO * ; * ; ************************************************************************ ; ; VD: (VIRTUAL DISK) DEVICE DRIVER. ; ; VERSION: V03.00 ; ; AUTHOR: R.W. STAMERJOHN MAPC 15-MAR-79 ; ; MODIFICATION HISTORY: ; ; V02.00 04-APR-80 T. PANG, L. M. FRASER ; ; CONVERT FOR RSX-11M-PLUS OPERATING SYSTEM. ; ; V03.00 07-Jul-82 R. B. Denny ; ; Add 'M code back in, make 'M+ code conditional ; on R$$MPL. U.NXT and U.UFD now defined globally ; in VDTAB.MAC ; ;********************************************************************** ; ; .PAGE .SBTTL VDDRV - DEFINITIONS AND DECLARATIONS ; ; MACRO LIBRARY CALLS: ; .MCALL PKTDF$ ;DEFINE PACKET SYMBOLICS PKTDF$ .MCALL SCBDF$ ;DEFINE SCB SYMBOLICS SCBDF$ .MCALL UCBDF$ ;DEFINE UCB SYMBOLICS UCBDF$ ; ; GLOBAL DECLARATIONS: ; .GLOBL $VDTBL ;DRIVER DISPATCH TABLE ; ; GLOBAL REFERENCES: ; .GLOBL $BLKCK ;BLOCK CHECK I/O FUNCTION .GLOBL $DRQRQ ;QUEUE I/O REQUEST .GLOBL $GTPKT ;GET I/O PACKET ROUTINE .GLOBL $IOALT ;FINISH I/O PACKET .GLOBL IE.IFC ;ILLEGAL FUNCTION CODE .GLOBL IE.WLK ;DEVICE WRITE LOCKED .GLOBL IO.RLB ;READ LOGICAL BLOCK .GLOBL U.NXT ;VIRTUAL EXTENSION UCB OFFSET .GLOBL U.UFD ;FILE UIC IN UCB .PAGE .SBTTL VDDRV - LOCAL DATA ; ; LOCAL DATA: ; ; DEVICE DISPATCH TABLE ; $VDTBL:: ;REF. LABEL .IF DF R$$MPL DDT$ VD, ,NONE, , ,NEW .IFF .WORD VDINI ; INITIATOR ENTRY .WORD VDCAN ; CANCEL I/O ENTRY .WORD VDTMO ; DEVICE TIMEOUT ENTRY .WORD VDPWF ; POWERFAIL ENTRY .ENDC .SBTTL VDDRV * DRIVER CODE ; ; THIS DRIVER MEARLY RELOCATES THE LOGICAL BLOCK TO THE REAL LOGICAL ; BLOCK WITHIN THE DISK. THE MCR TASK AVD IS USED TO SETUP THE UCB ; FOR THIS OPERATION. ; VDINI: NOP ; LEAVE ROOM FOR BREAKPOINT .IF DF R$$MPL GTPKT$ VD,V$$D11,VDXIT ;GET PACKET .IFF CALL $GTPKT ;TRY FOR A PACKET BCS VDXIT ;(CS: NO PACKET) .ENDC ; ; BLOCK CHECK FOR VIRTUAL DISK. ; CALL $BLKCK ;BLOCK CHECK PARAMETERS ; ; PARAMETERS OK, CHECK IF ACCESS ALLOWED. ; MOV U.NXT(R5),R0 ;GET EXTENSION BLOCK ADDRESS CMPB #IO.RLB/400,I.FCN+1(R3) ;CHECK FOR LEGAL FUNCTION BLO 2000$ ; IF LO - BAD FUNCTION BEQ 1000$ ;SKIP WRITE CHECK ; ; NOTE: The reason for not using the DV.SWL for VD access is that ; PIP (and maybe others) gets a "Illegal device from PARSE" ; error. ; BIT #XF.RON,X.FLG(R0) ;IS WRITE ACCESS ALLOWED? ;;;; BIT #DV.SWL,U.CW1(R5) ; IS UNIT WRITE PROTECTED? BNE 2010$ ; IF NE - NO, ERROR 1000$: ADD X.OFF+2(R0),(R1) ;ADD IN LOW OFFSET ADC -(R1) ; IN DOUBLE PRECISION ADD X.OFF+0(R0),(R1) ;ADD IN HIGH OFFSET ; ; MARK THIS DRIVER NOT BUSY AND QUEUE PACKET TO NEXT DEVICE. ; BICB #US.BSY,U.STS(R5) ;CLEAR UCB BUSY CLRB S.STS(R4) ;CLEAR SCB BUSY MOV R3,R1 ;COPY PACKET ADDRESS MOV X.UCB(R0),R5 ;GET NEXT UCB CLR I.LNK(R1) ;CLEAR LINK WORD MOV R5,I.UCB(R1) ;SET NEW UCB CALLR $DRQRQ ;QUEUE TO REAL DRIVER ; ; RETURN ERRORS TO USER. ; 2000$: MOV #IE.IFC&377,R0 ;SET ERROR CODE BR 2020$ ; CONTINUE 2010$: MOV #IE.WLK&377,R0 ;SET ERROR CODE 2020$: CALL $IOALT ;RETURN PACKET TO USER RETURN ;CALLR HERE FAILS ON 22-BIT I/D ; ; POWER FAIL SETS UCB OFFLINE. ALL OTHER DRIVER ENTRIES ARE NO-OP'S. ; VDPWF: BISB #US.OFL,U.ST2(R5) ;MARK DRIVE OFFLINE VDCAN: ;NO-OP .IF DF R$$MPL VDOUT: ;NO-OP $VDINT:: ;NO-OP .IFF VDTMO: .IFTF VDXIT: RETURN ;RETURN TO CALLER .IFT ; ; REJECT ALL CONNECT ONLINE/OFFLINE OPERATIONS NOT DONE BY AVD/DVD ; (M-PLUS ONLY) ; VDKRB: VDUCB: MOVB #IE.ABO,$SCERR ; REJECT MANUAL CONNECT/DISCONNECT ; OPERATIONS RETURN .ENDC .END