Słomkowski's technical musings

Playing with software, hardware and touching the sky with a paraglider.

Reading data from old MiniScribe hard disk

I managed to read the data from '84 MFM hard drive MiniScribe 2012 by plugging its controller into AT motherboard with ISA slots. The data was successfully copied to USB flash memory.

I was given an old MFM drive - MiniScribe 2012, complete with the controller. MFM stands for Modified Frequency Modulation and it is commonly associated with bulky hard drives from the era before IDE/Parallel ATA. The ancient data stored on that disk (mainly MS Word 4.0 documents) has some sentimental value for its previous owner, therefore I decided to extract them.

MiniScribe 2012 hard drive

The hard disk is MiniScribe 2012 MFM drive, manufactured probably in 1984. It was installed in an IBM XT-compatible computer. This monstrosity fills up one full-height 5.25” slot and weights over two kilograms. As the the brochure says, the capacity is whopping ten megabytes. The drive has standard Molex as power connector. It’s connected to the controller card with two ribbon cables: 34-pin control cable and 20-pin data cable.

The MiniScribe drive comes with dedicated 8-bit ISA controller card WD1002A-WX1. Its datasheet is easy to find. The text file containing the installation instruction and drive compatibility list might be useful as well.

The controller in theory is able to work with any drive supporting ST506 or ST412 protocols but in practice things might go complicated. The list of bad sectors should be stored in the controller’s ROM and dedicated software is required to do it. Often the new drive starts to cooperate after connecting it to the new controller card and performing low level format.

Some controllers have built-in management interface which may be used for low-level formatting. You launch it with DOS command debug and type the command to run code from the address:


You can also try other addresses like C000, it depends on your controller. I haven’t checked this myself, the setup had been already disassembled at the time I learned about this trick.

The controller card has its own BIOS, usually called Option ROM. It is executed by motherboard’s BIOS during POST sequence. The code registers INT 13h hook and in this way becomes available for DOS using standard interrupt call.

The setup

Fortunately I had an old AT motherboard (type ATC-1020) containing ISA slots and with Pentium processor already plugged in. The processor had no radiator mounted, but I set the jumpers on the board to clock the processor with the lowest speed possible and put some makeshift radiator secured by a rubber band. Also installed 32 MB DIMM RAM module.

I didn’t have VGA graphics card for PCI nor for ISA, so I used MDPA with dedicated yellow monochrome display. It was successfully recognised by the motherboard as shown in the picture.

To check the disk I disabled IDE controller in the BIOS and then tried to boot the system. The hard disk came to live and even booted. Hurray!

Booting from PXE

I assumed I would need some DOS tools to fiddle with this MiniScribe disk so I decided to boot from recent MS-DOS floppy. Since physical floppies are cumbersome I decided to use network booting. Fortunately I had the PCI Ethernet card with PXE support: 3com 3C905C-TXM.

To boot floppy image using PXE you’ll need PXE bootloader. The popular one is PXELINUX which is a part of Syslinux, packaged as syslinux under Arch Linux. On your Linux box, create directory for your net boot and copy PXELINUX there:

cp /usr/lib/syslinux/bios/{ldlinux.c32,memdisk,pxelinux.0} .
mkdir pxelinux.cfg

Create text file pxelinux.cfg/default with the following content:

default dos
label dos
  kernel memdisk
  append initrd=fdboot.img

Save your boot floppy image as fdboot.img. You can also download the ZIP archive of these files (without fdboot.img).

The popular way to set up PXE boot is to use dhcpd and TFTP daemons. This is complicated, fortunately I have found small and easy to use self-contained PXE server named netboot (aur/netboot under Arch Linux). It combines the features of DHCP and TFTP servers. I was running it without having disabled DHCP server in my router, they supposedly don’t collide.

You run netboot in the directory where you have your PXE boot files. The file which the server returns after DHCP request is pxelinux.0*.

netboot {broadcast IP} {local machine IP} {IP for client machine} {MAC pattern}

The {MAC pattern} should match the MAC address of the client network card.

For example, my local network address is, my Linux box IP is and MAC of my 3com card ends with 66:

netboot -66

I put standard MS-DOS 6.22 floppy as fdboot.img. Then I booted the rig and hurray - it worked!

Trying to copy data to IDE drive

Since the MFM controller has its own BIOS, the disk was visible under MS-DOS. But I needed some storage where I could copy the files to. First I decided to try IDE drive. The motherboard had two IDE channels. I plugged some 40 GB Seagate disk. It was discovered, but unfortunately the MFM drive was not available anymore. No fiddling with jumpers helped. Perhaps there was some conflict with two disk routines.

Copying data to USB flash drive

Then I tried a different approach. I installed a PCI USB expansion card and set up USBASPI drivers for MS-DOS. This one was conflict-free, I managed to copy the whole drive to USB stick!

xcopy c:\ d:\ /e /k

I ended up with over two hundred Microsoft Word for DOS documents which I converted to RTF.