The virtual disc software.

Summary.

In order to simplify file maintenance on the winchester for the PDP-11 computers a virtual disc system has been developed. With this virtual disc system it is possible to maintain several discs on one physical big disc. Furthermore each virt. disc can have its own directory structure; so there are no conflicts between same directories as for instance exist between user software and the RSX release kit.

Another advantage is that backups can be made of each induvidual virt. disc so the size of a backup can be kept acceptable. Besides that only virtual discs updated need to be backuped instead of each time the whole disc.

The virtual disc driver.

On the main disc virtual discs are treated as large files so the room is reserved here. By renaming the directory file of the directory in which the virt. discs are kept these files won't show up in directories. When making a backup of the main disc the backup utility does not see them.

The virtual disc driver supports seven virt. discs. The virtual discs can be assigned to a logical device by the program IVD. This program fills the Unit Control Block(UCB) of the driver with location(device), place(offset) and size. Virtual discs can be created by the program CVD. The following code is part of the virtual disc driver.

; 
; DRIVER INITIATOR ENTRY POINT 
; 
RET:    RETURN 
VDINI:  CALL    $GTPKT          ; GET AN I/O PACKET 
        BCS     RET             ; IF CS NO PACKET 
        CMPB    #IO.RLB/256.,I.FCN+1(R1) ;TRANSFER FUNCTION? 
        BHIS    5$              ; IF HIS YES 
        MOV     #IE.IFC&377,R0  ; ELSE ILLEGAL FUNCTION
        CALLR   $IOALT          ; FINISH I/O 
5$:     CALL    $BLKCK          ; CHECK LBN 
        CLRB    S.STS(R4)       ; CLEAR CONTROLLER BUSY
        BICB    #US.BSY,U.STS(R5) ; CLEAR UNIT BUSY 
; 
        ADD     #36,R5          ; POINT TO HOST DATA
        ADD     (R5)+,(R1)      ; ADD LOW LBN OFFSET
        ADC     -(R1)           ; ADD CARRY TO HIGH LBN
        ADD     (R5)+,(R1)      ; ADD HIGH LBN OFFSET
        MOV     (R5),R5         ; UCB ADDRESS FOR $DRQRQ
        MOV     R5,I.UCB(R3)    ; STORE IN I/O PACKET ALSO
        MOV     R3,R1           ; I/O PACKET ADDRESS FOR $DRQRQ
        CALL    $DRQRQ          ; Q I/O TO HOST 
        RETURN 
; 
$VDDAT:: ; REF POINT FOR LOA(D) 
; 
;       DEVICE CONTROL BLOCK (DCB) 
; 
VDDCB:  .WORD    0              ; POINTER TO NEXT DCB ; D.LNK
        .WORD    .VD0           ; POINTER TO FIRST UCB ; D.UCB
        .ASCII   /VD/           ; GENERIC DEVICE NAME ; D.NAM
        .BYTE    0              ; LOW UNIT # FOR DCB ; D.UNIT
        .BYTE    7              ; HIGH UNIT # ; D.UNIT+1
        .WORD    VDND-VDST      ; LENGHT OF UCB IN BYTES ;D.UCBL 
        .WORD    0              ; ADDRESS DRIVER DISPATCH TABLE ; D.DSP 
        .WORD    177037         ; LEGAL FUNCTION MASKS 0-15 ; D.MSK 
        .WORD    30             ; CONTROL FUNCTION MASKS 0-15 
        .WORD    0              ; NO-OP'ED FUNCTION MASKS 0-15 
        .WORD    177000         ; ACP FUNCTION MASKS 0-15 
        .WORD    377            ; LEGAL FUNCTION MASKS 16-31 
        .WORD    0              ; CONTROL FUNCTION MASKS 16-31 
        .WORD    0              ; NO-OP'ED FUNCTION MASKS 16-31 
        .WORD    377            ; ACP FUNCTION MASKS 16-31 
;       .IF DF   L$$DRV         ; LOADABLE DRIVER SUPPORT? 
;       .WORD    0              ; ADDR. PARTITION CONTROL BLOCK ; D.PCB 
;        .ENDC 
; 
; UNIT CONTROL BLOCK 
; 
VDST=. 
        .IF DF   M$$MUP         ; MULTI USER SUPPORT ? 
; 
        .WORD    0              ; OWNING TERMINAL USB ADDRESS; U.OWN 
; 
        .ENDC 
; 
        .VD0:: 
        .WORD    VDDCB          ; BACK POINTER TO DCB ; U.DCB 
        .WORD    .-2            ; REDIRECT POINTER ; U.RED 
;       .BYTE    UC.ALG!UC.NPR!1 ; CONTROL FLAG ; U.CTL 
        .BYTE    UC.ALG!1       ; CONTROL FLAG ; U.CTL 
        .BYTE    US.MNT         ; UNIT STATUS ; U.STS 
        .BYTE    0 ; PHYSICAL UNIT # ; U.UNIT 
        .BYTE    US.RED!US.OFL  ; STATUS EXTENSION ; U.ST2 
        .WORD    DV.DIR!DV.MNT!DV.F11!DV.MSD ; CHARACTERISTICS WORD #1 ; U.CW1 
        .WORD    0 ; CHARACTERISTICS WORD #2 ; U.CW2 
        .WORD    0 ; CHARACTERISTICS WORD #3 ; U.CW3 
        .WORD    512.           ; CHARACTERISTICS WORD #4; U.CW4 
        .WORD    $VD0           ; POINTER TO SCB 
        .BLKW    9. 
VDND=. 
; 
        .IF DF   M$$MUP ; MULTI USER SUPPORT ? 
; 
        .WORD 0                 ; OWNING TERMINAL USB ADDRESS; U.OWN 
; 
        .ENDC
The following sample shows part of the code the create a virtual disc on a physical disk. Note all the macros which build the necessary data structures.
For file IO
fdat$a - build attributes during assembly (as opposed to during runtime)
fdop$a - build open section during assembly
For commandline processing:
.TITLE	CVD
.IDENT	/V6.0/
;
;AUTHOR: F. SEMPLONIUS  DATE: 22-FEB-88
;
;FUNCTION: CREATE A VIRTUAL DISC
;
;	THE PROGRAM TAKES A COMMANDLINE AS FOLLOWS:
;
;	CVD <FILENAME>/BL:XXX
;
;	WHERE FILENAME IS THE NAME OF THE VIRTUAL DISC AND HAS TO	
;	BE USED WITH THE PROGRAM IVD - INITIALIZE VIRTUAL DISC	
;	XXX IS THE SIZE IN BLOCKS OF THE VIRTUAL DISC
;
;
.MCALL	FSRSZ$,FDBDF$,FDAT$A,FDBK$A,FDOP$A,FDBF$A,FDRC$A,NMBLK$
.MCALL	FINIT$,FDOP$R,WRITE$,OPEN$W,CLOSE$,OPEN$R
.MCALL	GCMLB$,CSI$,GCML$,CSI$1,CSI$2,CSI$SW,CSI$SV,CSI$ND
.MCALL	EXIT$S
;
;  DATA STRUCTURES - FCB'S
;
000000					FSRSZ$	0
000000				FDBORG:	FDBDF$			; DEFINE WORK FCB
000140					FDAT$A	R.FIX,,512.
000140					FDBK$A	LSTBLK,512.
000140					FDOP$A	1,,DFDEV	; LUN 1
000140					FDBF$A	3		; EFENT FLAG 3
000140					FDRC$A	FD.RWM
;

[ part deleted ]

000220				FDBDSR:	FDBDF$			; FDB DESIRED FILENAME -> [0,0]111111.DIR
000360					FDAT$A	R.FIX,,512.
000360					FDOP$A	2,DSRDST,DFDEV	; LUN 2
000360					FDBF$A	2		; EFENT FLAG 2
;
000360	000000	000000		DSRDST:	.WORD	0,0
000364	000005	000154'			.WORD	DIRS,DIR
000370	000014	000173'			.WORD	DFILS,DFIL
;
000374				DFDEV:	NMBLK$			; DEF. DEVICE / FILETYPE FOR VIRT. DISC FILENAME
;
000432	   124	   110	   111	LSTBLK:	.ASCII	/THIS IS THE LAST BLOCK/
001432'				.=LSTBLK+512.
;
;  DATA STRUCTURES FOR COMMAND LINE PROCESSING
;
001432				GCL:	GCMLB$	,CVD,,5		; USE LUN 5
002022					CSI$
002022				CSI:	.BLKB	C.SIZE
.EVEN
;
002076				SWTBL:	CSI$SW	BL,1,,,,VLTBL
002106					CSI$ND
002110				VLTBL:	CSI$SV	DECIMAL,BLKS,4
002114				BLKS:	.BLKW	2
002120				WBLK:	.BLKW	2
;
;  HERE STARTS THE PROGRAM CODE
;
.ENABL	LSB
002124				START:	FINIT$			; INITIALIZE FILE SYSTEM
002130	012704	002706'			MOV	#MESGCL,R4
002134					GCML$	#GCL		; GET THE COMMANDLINE
002150	103461				BCS	ERR1
002152					CSI$1	#CSI,GCL+G.CMLD+2,GCL+G.CMLD ; PARSE COMMANDLINE
002176	103446				BCS	ERR1
002200					CSI$2	,OUTPUT,#SWTBL	; GET FILENAME
002216	103436				BCS	ERR1
002220	032767	000001	177620		BIT	#1,CSI+C.MKW1	; BL SWITCH PRESENT ?
002226	001432				BEQ	ERR1		; IF EQ NO
002230	016700	177660			MOV	BLKS,R0		; SIZE SPECIFIED ?
002234	056700	177656			BIS	BLKS+2,R0
002240	001425				BEQ	ERR1		; IF EQ NO
002242	012704	002743'			MOV	#MESDIR,R4
002246	005767	177562			TST	CSI+C.DIRD
002252	001020				BNE	ERR1		; DIRECTORY NOT ALLOWED
002254	012700	000000'			MOV	#FDBORG,R0	; SET UP FOR .PRSDV - FDB
002260	012701	000374'			MOV	#DFDEV,R1	; FNBL TO BE FILLED IN
002264	012702	002030'			MOV	#CSI+C.DSDS,R2	; DATASET DESCRIPTOR
002270	005003				CLR	R3		; DEFAULT FNBL - NOT NEEDED
002272	012704	003007'			MOV	#MESDEV,R4
002276	004767	000000G			CALL	.PRSDV		; INIT DEFAULT DEVICE
002302	103404				BCS	ERR1
002304	022761	042126	000032		CMP	#"VD,N.DVNM(R1)	; DON'T CREATE VIRT. DISC ON A VIRT. DISC
002312	001002				BNE	1$
002314	000167	000326		ERR1:	JMP	ERROR
002320	012761	014474	000014	1$:	MOV	#^RDAT,N.FTYP(R1) ; SET UP DEFAULT .DAT;1
002326	012761	000001	000016		MOV	#1,N.FVER(R1)

Previous page | Index | Next page