RX0x floppy drive

From Computer History Wiki
Jump to: navigation, search
An RX01 floppy drive system

The RX01 and RX02 floppy drives were DEC's first floppy drives, and were used on a number of computers, such as the PDP-8 and PDP-11. They used 8" floppies, compatible with the IBM 3740 floppy drive; the media were single-sided, single-density, floppies, which came pre-formatted. (The RX0x drives are not capable of formatting blank floppies.) Data was protected with a CRC, compatible with that used by the IBM 3740.

The drives are essentially identical, except that the RX02 supports optional double-density operation. This double-density is not the same as the 'normal' double-density 8" floppy, but a unique-to-DEC format. Single-density recording uses a double frequency (FM) coding (compatible with IBM 3740 devices), and double-density uses a modified Miller code (MFM - below).

In an somewhat unusual design choice, on both single- and double-density media, the sector headers are recorded using FM coding, but on double-density media, the data portions of sectors are recorded with MFM.

An RX02 floppy drive system

Both drives provide 26 sectors per track (1-26), and 77 tracks per floppy (0-76), for a total of 2002 sectors. Single-density sectors hold 128 bytes, and double-density sectors hold 256 bytes, for a maximum total capacity of 256KB for the RX01, and 512KB for the RX02. An RX02 can (under program control) write either single- or double-density media; single-density media written on an RX02 are readable on an RX01.

The RX01 included the M7726 Controller and M7727 Read-Write card; the RX02 included the M7744 Controller and M7745 Read-Write card. Each drive cabinet holds a pair of drives (the left-hand drive is always drive 0), along with an H771 power supply.

Both drives have UNIBUS and QBUS controllers; the RX11 and RX211 for the UNIBUS, and RXV11 and RXV21 for the QBUS. The first of each pair are for the RX01, and are programmed I/O; the latter are for the RX02, and provide DMA data transfer.

The RX02 can be strapped to emulate an RX01, in which case the RX01 controllers (RX11 and RXV11) can support them. There are also as RK8E (RX01 only) and RK28 controllers for the PDP-8. The maximum number of drives supported by a single controller is two.

These drives were used as primary mass storage devices for later low-cost PDP-11 systems, such as the LSI-11, and as such, as 'console' floppies for the LSI-11 console computer in the VAX 11/780.

Coding systems

Another RX01

In the single-density double frequency (FM) coding, there is a flux reversal every clock time, and an additional flux reversal in the middle of the bit for a '1' bit; for '0' bits, there is no flux reversal. In the double-density Miller coding (MFM), a flux reversal indicates a '1' bit, and no flux reversal indicates a '0'; a clock is recorded only between data 'zeros'.

Since the maximum flux reversal rates are the same for FM, and MFM with a data rate double that of the FM, the same hardware can thus hold twice as many bits with the MFM coding.

The actual MFM encoding used is modified slightly to prevent a false sector header preamble (in FM coding) from being created within a double density data area (in MFM).

Low-level format

A sector contains the following fields (header first):

  • Preamble (8 bytes of '0')
  • Address mark (1 byte, a unique flux reversal string which does not form a bit string)
  • Track number (1 byte)
  • Zeros (1 byte)
  • Sector number (1 byte)
  • Zeros (1 byte)
  • Header CRC (2 bytes)

This is followed by an 11-byte gap (0's or 1's), a 6-byte sync field (0's), and a Data mark (recorded in FM). This is also a flux reversal string which does not form a bit string, and there are 4 versions: single- and double-density, and normal and 'deleted'. This is followed by either 128 or 256 bytes of data, and a two-byte CRC (both in either FM, or MFM).


DEC normally left track 0 unused (although it was not used to hold bootstraps).

They also used an idiosyncratic layout of the 'logical' sectors on a floppy, intended to maximize the performance: the first logical sector of each data track was offset by six 'physical' sectors from the 'first' sector of the preceding track, and sequential logical sectors were on alternating physical sectors.

This fragment of C code implements the logical to physical sector translation:

#define NSECT   26

track = (blkno / NSECT);
i = ((blkno % NSECT) << 1);
if (i >= NSECT)
sector = (((i + (6 * track)) % NSECT) + 1);

The second through fourth lines do the interleave (they effectively form a rotate); the next line performs the 6-sector offset. (The '+1' is because sectors are numbered 1-26, not 0-25; the last line is to avoid track 0.)


DEC ROM bootstraps for the RX0x load physical sectors 1, 3, 5 and 7 from track 1; in other words, they use the DEC 'logical' layout. On single-density media, where sectors are 128 bytes, loading 4 sectors loads 512 bytes, which is the standard DEC block size (most bootstraps are tailored to fit into one block, which is what most DEC ROM bootstraps load). On double-density media, this loads 1024 bytes, but the second block is usually ignored.


  • Seek error rate - 1 in 16 seeks
  • Soft data error rate - 1 in 109 bits read or written
  • Hard data error rate - 1 in 1012 bits read or written
  • Data transfer rate
    • Diskette to controller buffer - 4 usec/data bit (FM); 2 usec/data bit (MFM)
    • Buffer to CPU interface - 1.2 usec/bit
  • Track-to-track move - 6 msec/track maximum
  • Head settle time - 25 msec maximum
  • Rotational speed - 360 rpm ± 2.5%; 166 ms/rev nominal
  • Bit density maximum (on inner track) - 3200 bpi (FM) or modified (MFM)
  • Track density - 48 tracks/inch
  • Average access - 262 ms, computed as follows:
    • Seek - 77 tks/3 X 6 msec = 154 msec
    • Settle - 25 msec
    • Rotate - 166 msec/2 = 83 msec