Fork me on GitHub

Formatting a hard disk with a VS2000

Formatting non-DEC disks in the MicroVAX/VAXstation-2000
--------------------------------------------------------
By Bob Armstrong  with additions from Kees Stravers

  Some of this information I figured out by reading STARLET and the
example device drivers in the VMS _Device Support_ manuals.  Much of
it was contributed to me by Terry Kennedy, Lennart Boerjeson, and
others.

  The standard DEC drives that are supported in the VS2000 and their
industry equivalents are:

	RD54 - Maxtor XT-2190
	RD53 - Micropolis 1325 or 1335
	RD31 - Seagate ST-225
	RD32 - Seagate ST-251-1

If you have any of these standard drives you can simply plug it into
your 2000 and the ROM formatter will automatically recognize the drive
types.  I've never seen this fail, even if the drive has never seen a
DEC machine before, or even if the drive was previously formatted in
a PC.

  If the VS2000 ROM formatter program does not recognize one of these
drive types, then it will enter a dialog asking you to enter the drive
parameters described below.  Again, I've never seen this fail, even
with very old ROM firmware versions (v1.2 is the oldest I've seen).
If you get a "??" response rather than the dialog, you almost certainly
have a hardware problem with your drive.

  In theory you can use ANY MFM drive in the VS2000 by calculating
the appropriate parameters.  I've done this with several non-DEC
drives with good success now, and following is a description of what
I've learned about the parameters.  If you can contribute to any
of the "I don't know" parts, I'd like to hear about it!

The formatting dialog for an unknown hard disk is as follows:

------------------------------------------------------------------------

>>> TEST 70
VSfmt_QUE_unitno (0-2) ? 0    [Enter drive number]

VSfmt_STS_Siz .......... ???? [Formatter does not recognize drive type]

VSfmt_STS_EntUIB              [Formatter wants drive details]

[this example is from the VS2000 technical manual]

    xbnsiz :=54         [enter the number of transfer blocks]

    dbnsiz :=48         [enter the number of diagnostic blocks]

    lbnsiz :=83236      [enter the number of logical blocks]

    rbnsiz :=200        [enter the number of replacement blocks]

    surpun :=6          [enter the number of surfaces per unit]

    cylpun :=820        [enter the number of cylinders per unit]

    wrtprc :=820        [enter the write precompensation cylinder]

    rctsiz :=4          [enter the size of the revectoring control table (RCT)]

    rctnbr :=8          [enter the number of copies of the RCT]

    secitl :=1          [enter the sector interleave]

    stsskw :=2          [enter the surface to surface skew]

    ctcskw :=9          [enter the cylinder to cylinder skew]

    mediai :=627327008  [enter the MSCP media ID]

*	Note this number is not dependant on disk geometry, but is the 
*	magic number for VMS to report on the type of disk.

At this point, the formatter exits the query mode.

The next output to the screen is:

     VSfmt_QUE_SerNbr (0-999999999)  [enter the serial number for
                                      the drive]
                                     [or enter a unique number
                                      for each unit]

     VSfmt_QUE_RUsure (DUAx 1/0) ?   [where x equals the unit number]
                                     [enter 1 for YES, 0 for NO]

The formatter is now running, and the output should look like:

     VSfmt_STS_RdMbb.............OK  [manufacturer's bad block located]

     VSfmt_STS_FMTing............OK  [disk formatted OK]

     VSfmt_STS_ChkPss............OK  [check pass completed OK]

     VSfmt_STS_BBRvec := x           [number of bad blocks revectored]

     VSfmt_RES_Succ                  [disk is successfully formatted]

     >>>

At this point, the disk has been succesfully formatted, and the
console command prompt is displayed.

------------------------------------------------------------------------


Explanation of drive specifics:


XBNSIZ - number of transfer blocks.  All DEC's disks seem to use 54,
	 regardless of the disk capacity.


DBNSIZ - number of diagnostic blocks.  DEC seems to select this so that the
	 DBNs and XBNs total up to 1 cylinder. Therefore:

		DBNSIZ = (SURPUN*17) - XBNSIZ


LBNSIZ - total number of user data blocks, not counting DBNs and XBNs.
	 I believe that

		LBNSIZ = CYLPUN * SURPUN * 17

	 the numbers I have for DEC disks are close to this, but not
	 exact.  There must be some ambiguity about what gets counted.


RBNSIZ - replacement block count (for bad block revectoring).  About 0.1%
	 to 1% of the disk capacity is reasonable, depending on the media
	 quality.  DEC seems to always use 0.2%.  This is frequently
	 rounded to an exact number of cylinders, but I'm not sure that's
	 necessary.  WARNING - if you allocate fewer RBNs than your disk
	 has bad sectors, the VS2000 formatter seems to hang in the media
	 analysis phase!


SURPUN - surfaces (aka heads) per drive.  Note that the RQDX? will ALWAYS
	 assume 17 sectors per track, 512 bytes per sector!  The RQDX
	 controllers can handle a maximum of 16 heads.


CYLPUN - cylinders per drive.  Total number of cylinders on the drive.
         I believe, but I'm not sure, that this does NOT include the
	 cylinders used for DBNs, RBNs and XBNs.  Note that the RQDX
	 family controllers can handle a maximum of 2048 cylinders
	 (but I don't think there were ever any MFM drives made with
	 even close to that number!).


WRTPRC - cylinder to start write precompensation.  If your drive doesn't
	 need write precomp (almost none do), then enter a value larger
	 than the last cylinder.


RCTSIZ - size of the Replacement (i.e. Bad Block Replacement) and Caching
	 Table.  From the structure of the RCT, I believe this can be
	 calculated as

		RCTSIZ = (44 + 4*RBNSIZ) / 512

	  but unfortunately this doesn't give the values DEC uses for
	  their drives!  You could also just use the RCTSIZ from the
	  closest sized DEC disk.


RCTNBR - number of copies of the RCT.  I'm not sure of the significance
	 of this, but DEC disks always use 8.


SECITL - sector to sector interleave.  The RQDX is fast enough to support
	 1 (i.e. no interleaving).  Anything larger will reduce thruput.
	 SECITL is a function of the disk rotational speed, and is the same
	 for all MFM drives regardless of capacity.


STSSKW - delay for switching heads.  I don't know how to calculate this or
	 even what units it's expressed in!  All drives seem to use 2.


CTCSKW - delay for track-to-track seek.  I don't know how to calculate this
	 or even what units it's expressed in!  All DEC drives use 8.


MEDIAI - media identification code.  This is a 32 bit value which the ROM
	 wants you to enter in DECIMAL, not hex!  Standard values are:

		RD32 - 627327008
                RD33 - 627327010
		RD53 - 627327029
		RD54 - 627327030

	 The last section explains how the media id is calculated if you
	 are interested.  If you use a non-DEC media id, be aware of two
	 things: (1) the ROM disk diagnostic won't work, and (2) the VMS
	 MSCP cluster server won't serve the disk.

------------------------------------------------------------------------

  Here are the parameter values for some DEC disks, and those that I've
successfully used for a Seagate ST-4097 (an 80Mb drive).

		  RD54		  RD53		ST4097
		------		------		------
XBNSIZ		    54		    54		    54
DBNSIZ		   201		    82		    99
LBNSIZ		311256		138672		156060
RBNSIZ		   609		   280		   306
SURPUN		    15		     8		     9
CYLPUN		  1221		  1020		  1021
WRTPRC		  1221		  1020		  1024
RCTSIZ		     7		     5	             5
RCTNBR		     8		     8		     8
SECITL		     1		     1		     1
STSSKW		     2		     2		     2
CTCSKW		     8		     8		     8
MEDAI	     627327030	     627327029	     627327029

------------------------------------------------------------------------

Media Identification Code

  The media id is a longword (32 bit) value composed of five 5-bit
alphabetic characters and one 7-bit binary value.  The five characters
start from bit 31 (the MSB) of the longword and are encoded as 0=null,
1='A', 2='B', etc.  Only letters (and a null) can be represented.

  The first two characters represent the media type (e.g. "DU") and
the next three are the name of the media currently mounted (e.g.
"RD" or more accurately, "RD").

  The 7-bit binary value is the numeric part of the media name
(e.g. 32, 53, 54, etc).

  For example, for an RD54 we have


	D	U	R	D		54
	00100	10101	10010	00100	00000	0110110

Write this down as a 32 bit hex value and we have 0x25644036 or
627327030 (decimal).

Bob.

Formatting a known hard disk with a VS2000

Example of formatting an RD32 hard disk
>>>> TEST 70

VSfmt_QUE_unitno (0-2) ? 0      [enter the drive number of the hard disk]

VSfmt_STS_Siz........... RD32   [formatter recognized DUA0 as a RD32]

VSfmt_QUE_SerNbr (0-999999999)  [enter the serial number for the drive]
                                [or enter a unique number for each unit]

VSfmt_QUE_RUsure (DUAx 1/0) ?   [where x equals the unit number]
                                [enter 1 for YES, 0 for NO]

VSfmt_STS_RdMbb.............OK  [manufacturer's bad block located]

VSfmt_STS_FMTing............OK  [disk formatted OK]

VSfmt_STS_ChkPss............OK  [check pass completed OK]

VSfmt_STS_BBRvec := x           [number of bad blocks revectored]

VSfmt_RES_Succ                  [disk is successfully formatted]

>>>>

Formatting a floppy with a VS2000

Example of formatting an RX33 floppy diskette
>>>> TEST 70

VSfmt_QUE_unitno (0-2) ? 2      [enter the drive number of the floppy drive]

VSfmt_QUE_RXmedtyp
( 1=RX33 ) ? 1                  [enter a 1 if RX33 diskette media]

VSfmt_QUE_RUsure (DUA2 1/0) ? 1 [enter a 1 for yes, 0 for no]
                                [DUA0 is the first hard disk, DUA1 the second,
                                and DUA2 is the floppy drive]

VSfmt_STS_FMTing .....OK        [diskette formatted OK]

VSfmt_STS_CkRXfmt ....OK        [RX33 format checked OK]

VSfmt_RES_Succ                  [diskette is formatted successfully]

>>>>