The DiskFreezerX is a homebrew project that aims to capture bit cell exact information from floppy disk drives. This approach samples disk information at the lowest possible level and therefore preserves as much information as possible. The project is intended as a playground for me to expirement with this interesting field of data preservation. It is presented here in my blog so if you are interested in this topic you might find something useful or interesting for your own project. All hardware and software here is Open Source and available in a public code repository.
This project is heavily inspired by the ideas presented in the Cyclone 20 (Docs) and KryoFlux projects. We share the hardware platform (AT91SAM7x) for connecting the disk drive and doing the low level sampling of the disk data. However, all the software in this project was written from scratch. Furthermore, DiskFreezerX aims to present a hardware device that can capture disk data completely standalone while all other components focus on a host-based approach with the PC controlling the capture device.
A DiskFreezerX system divides the goal of capturing disk data into several stages. Each stage has an hardware or software equivalent in the project. Currently I identified the following parts:
- A Sampler is a hardware device that connects to the floppy drive, controls the floppy and samples the disk information. The sampling process is very time critical and therefore has to be done in a direct bare-metal implementation on a microcontroller or even FPGA. The sampled data contains large amounts of information and therefore needs further processing in the next stages. The “dfx-sampler” is the firmware running on a sampler and stores the raw sampled data for later usage on user’s request.
- A Capture program that runs on a host system and is connected to the Sampler device. It does control the floppy drive (enable motor, step track, …) and receives the bit cells sampled from the sampler. The capture program “dfx-capture” stores the sampled tracks for further processing. The capture program is optional and is only required if the sampler is not used in standalone mode.
- Anaylzer/Converter programs read the captured raw data and do the reconstruction of the bit information stored on disk and then the high level structures found there, e.g. disk formats of operating systems. As a result of analysis you either get lots information about the data found on the disk or you can directly derive disk images that can be used in emulators. The analyzers are currently written in Python and called with “dfx-analyzer”.
The current reference platform consists of the following components:
- The Sampler is a AT91SAM7x board that directly connects to the floppy drive. It has a 256 KiB RAM memory extension for track data storage while capturing and an SD-Card for data storage of the raw track files. The dfx-sampler firmware running there is written in C using only bare-metal (i.e. register) access to the device. The software can be controlled via a serial terminal to get access to the full feature set. Furthermore, a single-button operation allows to capture a full disk and writes all raw track files onto an SD Card.
- The analyzer software is written in Python and runs on any system with a
Python interpreter available. The analyzer handles single raw tracks and
decodes them into blocks found on this track. A disk image is currently
build by concatenating track blocks together. In future the anaylzer
software will be extended into a Python class library with lots of helper
classes for doing track analysis.
The whole software distribution, hardware schematics, and documentation is located as a Git repository at Gitorious.org.
- Gitorious Projekt: diskfreezerx
- Clone repository with:
- Documents in ASCII
Currently there are no releases available.
- The dfx Hardware page gives details to the sampler prototype and the first revision of the dfx-sampler board
- A dfx Software page needs to be written… soon!
Feel free to send me comments, annotations and all kind of feedback to this project!