Some classic 8-bit systems' floppy drives (notably: Apple, Atari, Commodore) did not have an index sensor and had only one read head. As a consequence, it was possible to flip a floppy over and use it to store additional data, a capability used by commercial software and home users alike. These were called "flippy floppies" or "flippies".

But! You can't read the flip side of these disks in an unmodified PC drive, even if you're using archival software like FluxEngine or GreaseWeazle. This guide shows a self-contained and reversible modification for TEAC FD55-GFR drives that enables you flip your floppies like it was the 80s again, and get both sides backed up.

While the procedure outlined here is intended to be safe and reversible, there's always a risk of damage when modifying electronics.

Why is a modification required?

Because PC drive electronics require the index pulse, the second side of flippy disks can't be read with unmodified PC drives (except for some extremely uncommon disks with two index holes). The second read head doesn't help, because the two heads are offset; the second read head's "track 0" is not the same as the first read head's.

hacks_PXL_20220224_153019071(1).jpg
Close-up of floppy drive read/write heads showing the offset between top and bottom sides. The distance between the active locations, shown by black lines, is 8 tracks or 1/10 inch.

However, it is possible to modify many floppy drives to supply an alternate revolution sensor, and then read the second side of flippy floppies! The method here is based on a procedure proposed by the author of fluxengine, David Given and is for TEAC FD55-GFR drives. The general principle can be applied to other drives, but these instructions are specific to the TEAC FD55-GFR. Even among TEAC FD55-GFR drives there is some variation as PCBs were revised over the drive's lifetime (my drive's main PCB is marked SAN-S294VO or maybe SAN-S294V0). Additionally, there are drives with similar names (such as TEAC FD55 with no -suffix) that are quite different.

However, with care you can apply this technique to various other drives as long as you can locate

  • +5V
  • GND
  • The existing revolution signal, which must be open-collector, not push-pull

Our method is a little different than David Given's, because we made ours fully reversible. However, a consequence of the fully reversible version is that you have to turn off the new sensor using the switch whenever inserting a disk "right side up".

You'll find other methods proposed on the internet, including ones that make modifications to the metal frame of the disk to increase the range of motion and copy both disk sides with a single operation. If you're up to it, check out some other options and then do the one that is best for you! Otherwise, pick up the components below and let's get started soldering.

Parts

Reflective Infrared IR Optical Sensor wired to Arduino, a piece of paper is moved over it and an LED lights up when sensor is covered.
This Reflective IR Sensor is a simple plastic casing with two elements - an IR LED and an IR phototransistor. You can control the IR LED and turn it on to bounce IR...
$1.95
In Stock
Breadboard-friendly SPDT Slide Switch
These nice switches are perfect for use with breadboard and perfboard projects. They have 0.1" spacing and snap in nicely into a solderless breadboard. They're easy to switch...
Out of Stock
Silicone Cover Stranded-Core Wire - 50ft 30AWG Black
Silicone-sheathing wire is super-flexible and soft, and its also strong! Able to handle up to 200°C and up to 600V, it will do when PVC covered wire wimps out. We like this wire...
$4.95
In Stock
Silicone Cover Stranded-Core Wire - 50ft 30AWG Red
Silicone-sheathing wire is super-flexible and soft, and its also strong! Able to handle up to 200°C and up to 600V, it will do when PVC covered wire wimps out. We like this wire...
$4.95
In Stock
Silicone Cover Stranded-Core Wire - 50ft 30AWG Blue
Silicone-sheathing wire is super-flexible and soft, and its also strong! Able to handle up to 200°C and up to 600V, it will do when PVC covered wire wimps out. We like this wire...
$4.95
In Stock

If your drive is in an enclosure, take it out. Disconnect any power and data cables and lay it on a work surface upside down, so that the side with the spindle motor (a large aluminum disk) is facing up.

Take black "electrical" tape and wind it around the spinning motor assembly, leaving a gap of about 1/4 inch (6mm) or so in the circle. If needed, trim excess tape away and make sure the spindle still spins freely.

It may help to first transfer your tape from a large roll to a smaller diameter tool such as the shaft of a screwdriver as shown in the image, so that it can be positioned right next to the drum and unrolled. No matter which tape you use, it is most important to cover the side of the drum all the way to the bottom (PCB side), because of how the sensor will sit. Leave any gaps at the top of the drum.

The author found that 1/2 inch (12mm) tape was a bit wide, but that after winding the part that stuck above the drum could be trimmed back with a utility knife. 1/4 inch (6mm) tape is a bit narrow and care has to be taken to position it vertically for the sensor to function properly. The perfect tape width might be 3/8 inch (9mm), but the author didn't receive any in time for testing.

Next, it's time to do some soldering. Solder the 470 ohm resistor between the two center legs of the sensor, then solder wires for GND, +5V, and the signal switch.

Use generous lengths of wire at each point, because the wire must route around the inside of the floppy drive and to the front panel. Check out the photos below to get an idea of how much wire you'll need and where to route it.

On the Adafruit sensor, model H048W, the sensor side is indicated with a transistor symbol on the left in this photo and corresponds to the side marked "S" above. The emitter side on the right is marked with a diode symbol and corresponds to the side marked "E" above.

Using an M2.5x10 screw and nut, affix the sensor to the drive in the location shown. Leave a 1mm gap between the motor and the sensor. By moving it gently with your fingertips, make sure the drive motor can still rotate freely 360 degrees. If not, you may need to adjust the sensor position in its slot, or re-apply the black tape.

If you do need to re-apply the tape, it's recommended to use fresh tape each time.

Solder the VCC, GND, and switch signals to the main PCB as shown:

  • Red VCC to J5-5
  • Black GND to J5-2
hacks_Screenshot_2022-02-24_11-21-42.png
credit: David Given / fluxengine
  • Blue switch output to TP-1
hacks_Screenshot_2022-02-24_11-22-05.png
credit: David Given / fluxengine

Carefully route your wires so that they cannot interfere with the floppy spindle motor. You can route them under the PCB on the side with the ribbon cable, or use the retaining clip for the stepper motor's ribbon cable.

Perform a Quick Test

Plug everything in and perform a little test using fluxengine.

Call the switch position on the un-soldered side the NORMAL position and the other position the FLIPPY position.

Put the switch in the NORMAL position, insert a floppy right side up, and run fluxengine rpm. Your drive's rotational speed, usually around 360rpm, should be printed. If you get a lower number, make sure the tape and sensor are not interfering with the rotation. If you get a "no index pulse" error, your wiring is incorrect.

Pull the floppy out, turn it over, and reinsert it. Put the switch in the FLIPPY position and run fluxengine rpm again. Your drive's rotational speed, again around 360RPM, should again be printed. If you get a "no index pulse" error, your wiring is incorrect or incomplete. If you get a wildly higher rotational speed, your black tape or sensor positioning is not good.

Hopefully everything was just fine and you're ready to 3D print a fresh bezel for your drive.

# Good result
$ ./fluxengine rpm
Rotational period is 167.475 ms (358.262 rpm)

# Bad result -- too slow. Check if motor spins freely
$ ./fluxengine rpm
Rotational period is 442.19 ms (135.688 rpm)

# Bad result - too fast (too many pulses). Check wiring & switch
$ ./fluxengine rpm
Rotational period is 143.998 ms (416.673 rpm)

# Bad result - no pulses. Check wiring & switch
$ ./fluxengine rpm
Error: GreaseWeazle error: No index

Replacement bezel with opening for slide switch

This modification is super tidy when you print your own bezel with a spot for the slide switch. Print one 525cut.stl, from the file below, in the color of your choice, face up, with supports touching build plate.

525cut.stl is based on 5.25 TEAC drive face plate by jerryt74332 but with an added opening for Adafruit's Breadboard-friendly SPDT Slide Switch. The extra opening was added to the original STL file using the Free & Open Source "OpenSCAD" program, available for Linux, Windows, and Mac. The OpenSCAD file is included with the models for printing, which may be useful if you want to reposition or resize the opening for the slide switch.

Optionally, also print:

  • led.stl from 5.25 TEAC drive face plate by jerryt74332, in "clear" or "natural" filament
  • drive-lever-Body.stl in the color of your choice. The drive lever is modeled after the original lever using the Free & Open Source "FreeCAD" program, available for Linux, Windows and Mac. The design file "drive-lever.FCstd" is included with the models for printing. If the knob doesn't go on properly or is too loose, change your slicer's "horizontal expansion" in small steps to get a good friction fit.
  • floppycase-Body.stl and floppycase-Body1.stl, a two-part 5.25" drive enclosure

Gently press the LED diffuser and slide switch into their openings, enlarging the openings slightly with a file if needed. If desired, or if the parts feel loose, add a dab of hot glue on the back to secure them. Note which side the un-soldered contact on the switch is; this will be the NORMAL position. In the photo here, the position towards the middle of the bezel is NORMAL.

Pull the lever gently but firmly out to remove it. Then remove two screws on the bottom of the face plate. Slide the original face plate off. Reverse these steps to mount your new face plate and install the new lever, noting the orientation of the "D"-shaft.

Make sure you haven't disturbed the wiring during this process, then continue on to use your modified drive.

If the plain jane floppy enclosure isn't for you, you can also check out Adafruit's own case for 5.25 inch floppy disk drives.

Using the modification

When you installed the switch in the new bezel (or other location of your choice), you noted which of the 3 terminals of the switch didn't have a wire soldered to it. This is the NORMAL position, and your drive will operate as usual. The other position is the FLIPPY position, which links the output of the added sensor into the drive's control circuitry. Once you've established which is which, it's a great idea to add a small sticker or mark so that you don't have to remember it forever.

Sample command lines for are shown below, but the mod is also tested with and is expected to work with other host software as well.

Copying a normal double-sided disk

Use this mode for capturing true double sided formats, like ibm360_525 or ibm1200_525. Slide the switch to NORMAL and insert the disk face up:

fluxengine read ibm360_525 -o diskname.img

Copying the front side of a single-sided or flippy disk

Use this mode for capturing the front side of a disk, or the back side of the (rare!) flippy disk with two index holes. Slide the switch to NORMAL and insert the disk face up. If using a "head specification", select head 0 only.

fluxengine read commodore1541 -h 0 -c 0-79x2 -o diskname-s1.d64

Copying the back side of a flippy disk

Use this mode for capturing the second side of a flippy disk. Set the slide switch to FLIPPY and insert the disk face down. If using a "head specification", select head 0 only.

fluxengine read commodore1541 -h 0 -c 0-79x2 -o diskname-s2.d64

Writing the back side of a flippy disk

I didn't test it, but this mod should also enable writing to the second side of a flippy disc.

This requires a write-enable notch on the left hand side of the disk (or a second write-protect-ignore modification, not documented here). Set the slide switch to FLIPPY and insert the disk face down. If using a "head specification", select head 0 only.

This guide was first published on Feb 25, 2022. It was last updated on Mar 25, 2024.