MFM Hard Disk Reader/Emulator

This page describes earlier work on the MFM project but is not too relevant. See current page

Now with six successful builders. It has been used for both reading drives and emulating drives.

Update History
6/27/2015 Verification order placed for rev B board. Files updated.

6/21/2015 Layout for revision B board is "done". I have some more checking to do then will order a few boards to verify before I order production boards for the people who have been patiently waiting. Information is here. These pages will be rearanged to separate the information for people who are working with the first revision and the new board.

5/30/2015 Release new version of software. There are still some issues being worked but I now think it is clearly working better than the last release. It supports decoding more drive formats and has various bugs fixed. This version has significant internal changes to support systems that use time from index to find sectors instead of special sync patterns in the data. It now works with Corvus. Northstar debugging is ongoing. Problems using two emulators to emulate three drives on a Mightyframe is also being worked on. Note:mfm_emu has a number of internal consistency checks where if they fail the program will dump its state and exit. This is a large amount of hex data. If you see this send me the logfile.txt from the directory you start the program from. Note:To make options the same between mfm_read and mfm_emu mfm_read short options j and d have been swapped and new options added. See the MFM reader usage information and MFM disk emulator usage information

5/17/2015 Documented issue with termination on select lines here

2/25/2015 Updated instructions for auto starting mfm emulator.
01/22/2015 Parts list updated to add sockets for RN1, RN2. Needed if you need to remove termination to use with another drive.
01/04/2015 Test release of code. Only .tgz file provided. Some minor clarifications to instructions.
11/9/2014 Spinrite problem updated. Code updated:

11/3/2014 Information on how first builder did their board.
10/11/2014 Updated software to support another disk format and fixed setting pins to wrong initial state in setup_* script files.
10/01/2014 Updated software to support another disk format. Minor corrections to build and test instruction and mfm_read and mfm_util command documentation.
09/07/2014 More testing and usage instruction updates. Powerfail modified to ignore temporary A/D read failures. mfm_emu updated to fix hang on shutdown. mfm_read Increased seek timeout to allow time for drive recalibrate and some changes to messages.
09/02/2014 Updated instructions for testing and usage. Fixed setup_mfm_read script and .tgz archive to version 0.5b.
08/25/2014 Updated pages to describe PCB. Start of update history.

I now have a PCB available. It has some issues which are described here. The instructions for building and testing are here. If you are interested in getting a bare PCB you can contact me at the address at the bottom of this page. The board files are here. mfm_reva_pcb is the partially updated files to fix the errors. Use these files for working with the original unlabeled board which I am calling revision A. Under each version the PDF directory has the schematic (top.pdf) and plots of the board layers. The BOM directory has the bill of material. The board is released under the Creative Commons Attribution-ShareAlike 4.0 International Public License. In old director mfm.ordered is the files the rev A PCB was ordered from and mfm.3v is the out of date files for the 3.3V surface mount version.

I was originally looking at two versions which are described here.

Assembled board and cable for testing drive activity LEDs.

It is likely it can read and save the raw transition data from most any hard drive using the ST506/ST412 interface. It can decode to sector data disks written by WD1006, AT&T 3B1 (WD1010), Xebec 104786, OMTI 5510, DEC RQDX3 (all the controllers I have). It looks like track formats vary between controllers so decoding back to sector data from another controller may require finding the CRC polynomial or other track format variations. Currently it doesn't handle spared tracks done by the controller. It's on the TODO list if I can figure out how it works for the various controllers. Also the RQDX3 writes some tracks/sectors in different formats which requires manual work to decode.

MFM reader usage information

The MFM disk drive emulator has been tested on two PC's and a VAX. One PC had a WD1006 controller and the other a Xebec 104786 controller. The VAX used a RQDX3. The original disk was read using the mfm_read program and converted to the emulator format. The PC's were then able to read and write the disk. The BBB has some on board flash and can use micro SD and USB stick for local storage of the emulated disk file. It can also access the file over Ethernet as long as the access time meets the controller seek time requirements.

MFM disk emulator usage information

Power monitor usage information

Latest code is here and Older versions All the code I created is released under GPLv3 or later. For instructions and other information see the .odt or .pdf file and README in the code/mfm, code/emu, code/powerfail directories. Code seems to be functional but isn't thoroughly tested. No warranty, use at your own risk etc.

The BBB captures and generates the MFM transitions with a 200 MHz clock. It can handle reading proper MFM spacing of the pulses but may lose some invalid MFM pulses if too many in a row are very close together. The emulator only generates normal bit periods. I haven't done any work on making it write to a real disk though it should be capable of it.

I have updated my BBB rev B to BBB-eMMC-flasher-2013.09.12.img.xz from here and then did opkg update and opkg upgrade to bring it to the latest software versions. uname says it's running kernel 3.8.13. Other versions probably will work.

This started as a little wirewrap board and code for a BeagleBone Black (BBB) to read and emulate a MFM hard drive. The wirewrap board I made is documented in this cryptic spreadsheet or in open office format and described in the rest of this page. This was done with parts on hand so takes some liberty with interfacing. The two longer straight connectors mate to the BBB on the reverse side. The two shorter straight connectors are for interfacing with the drive or controller. The right angle connector is for interfacing with a TU56 DECtape and is not documented in the spreadsheet since it's a different project. The various jumpers and second SIP resistor socket select between acting as a controller and as a drive. The SIP resistor is a 220/330 ohm terminator. I put a jumper in the MFM write gate line to ensure it won't be asserted when I am trying to read a drive. The other 4 swap the transmit and receive RS-422 signals to the drive data cable since which pins we need them connected to changes between reading and emulating a drive.

The interface signals are supposed to have open collector drivers. I used 74LVC245 transceivers instead since I had them and it made reversing the signal direction easy. I was not planning to have additional drives on the interface cable so open collector wasn't needed. The drivers need to have low drive of at least 24mA. If you are only interested in reading disks or emulating disks simple drivers and receivers will work fine. In theory the 220/330 termination high is 3V so inputs can be directly connected to the BBB. I would recommend having a buffer chip to prevent any issues with transients damaging the board. I used MC3486/MC3487 RS-422 chips also since I had them. The MC3486 is not a good choice since its output is not compatible with the 3.3V signals the BBB requires. I used a pull-down of around 800 ohms to limit the high voltage. I recommend using a proper 3.3V RS-422 chip.



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search