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 the 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 consisting of MS Word 4.0 documents, held sentimental value for its previous owner. Therefore, I decided to extract them.

MiniScribe 2012 hard drive

The hard disk is a MiniScribe 2012 MFM drive, most likely manufactured in 1984. It was installed in an IBM XT-compatible computer. This monstrosity occupies a full-height 5.25” slot and weighs over two kilograms. As stated in the brochure, 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 is accompanied by a dedicated 8-bit ISA controller card, the WD1002A-WX1. Its datasheet can be easily found. Additionally, the text file containing installation instructions and a drive compatibility list might prove useful.

In theory, the controller is capable of working with any drive that supports ST506 or ST412 protocols. However, in practice, complications may arise. The list of bad sectors should be written in the controller’s ROM, and dedicated software is required for doing so. Often, a new drive starts to cooperate after connecting it to the new controller card and performing a low-level format.

Some controllers have a built-in management interface that can be used for low-level formatting. You can access it by launching the DOS command debug and entering the command to execute code from a specific address:

g=C800:5

You can also try other addresses, such as C000, depending on your controller. I haven’t personally verified this as the setup had already been disassembled by the time I learned about this trick.

The controller card has its own BIOS, typically referred to as Option ROM. It is executed by the motherboard’s BIOS during the POST sequence. The code registers an INT 13h hook, making it accessible for DOS through a standard interrupt call.

The setup

Fortunately, I had an old AT motherboard (type ATC-1020) that still had ISA slots and a Pentium processor already installed. The processor was lacking a radiator, so to be on the safe side, I adjusted the jumpers on the board to run the processor at the lowest possible speed and attached a makeshift radiator secured by a rubber band. Also installed a 32 MB DIMM RAM module.

Since I didn’t have a VGA graphics card for either PCI or ISA slots, I resorted to using the MDPA/MDA card along with a dedicated yellow monochrome display. It was successfully recognised by the motherboard as shown in the picture.

In order to check the disk, I disabled the IDE controller in the BIOS and attempted to boot the system. To my pleasant surprise, the hard disk sprang to life and successfully booted. Hurray!

Booting from PXE

Considering that I would require some DOS tools to fiddle with this MiniScribe disk, I decided to boot from a more recent MS-DOS floppy. Due to the inconvenience of physical floppies, I opted for network booting instead. Luckily, I had a PCI Ethernet card with PXE support, specifically the 3com 3C905C-TXM.

To boot a floppy image using PXE, you will need a PXE bootloader. One popular option is PXELINUX, which is part of Syslinux and is available as the syslinux package under Arch Linux. On your Linux box, create a directory for your network boot and copy PXELINUX into it:

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. Alternatively, you can download the ZIP archive containing these files (excluding fdboot.img).

A usual method for setting up PXE boot involves using the dhcpd and TFTP daemons, which can be quite complicated. Fortunately, I had found a small and easy to use self-contained PXE server named netboot (aur/netboot under Arch Linux). It combines the functionalities of DHCP and TFTP servers. I was able to run it without disabling the DHCP server on 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 a 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’s network card.

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

netboot 192.168.1.255 192.168.1.10 192.168.0.20 -66

I used a standard MS-DOS 6.22 floppy image 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. However, I needed additional storage where I could copy the files to. My first attempt was to connect an IDE drive. The motherboard had two IDE channels, so I connected a 40 GB Seagate disk. It was detected, but unfortunately the MFM drive became inaccessible. No fiddling with jumpers helped. It seemed that there was a conflict between the two disk systems.

Copying data to USB flash drive

Then I decided to take a different approach. I installed a PCI USB expansion card and set up USBASPI drivers for MS-DOS. This new setup worked flawlessly without any conflicts, allowing me to successfully copy the entire drive to a USB stick:

xcopy c:\ d:\ /e /k

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