Context

I recently purchased a Yamaha QX1, a MIDI sequencer from 1984. A huge beast at its time: 8 tracks, 8 MIDI outputs, 80 000 notes, available for $2800 (I paid $50 for it!).

One big Achilles' heel is the 5"1/4 floppy drive as a backup media. The floppy drive (Canon MF-221) allows floppy ejection (thru the "Job Command 01" menu), which was not common at this time. Not only 5"1/4 diskettes are now rare and fragile, the drive noisily runs all the time, from power on to power off. With time, the ejection spring tends to become less effective and keeps the diskette locked in; the only way to eject the diskette is to open the QX1!

I first thought replacing the drive with an emulation such as HxC Floppy Drive Emulator. Jim Atwood has successfully updated his QX1 with a HxC; check this link .

However, I think there is a better solution; in the QX1, the Floppy Disk Controller is a MB8877 by Fujitsu (MB8877 datasheet). Because the FDC has to deal with analog signals and a physical drive, the MPU might have to wait quite long time for commands to complete. Replacing the drive only could speed up the process, but the emulation still have to scan analog signals, which includes delays. Why not replacing the FDC itself and emulating it with a microcontroller?

Because a simple SD card can hold many virtual disks, we have to select which disk to use.

Hopefully, keyboard scanning is suspended (high Z) during the Job-Command-01 command execution; we could then scan some keys to select the virtual disk.

Also, the LCD is static during the Job-Command-01; we could hack it to display the current virtual disk selection.

Project description

The Fujitsu MB8877 is a second source for Western Digital FD1793. On the datasheet, only 16 pins are used for FDC to communicate with the MPU. However:

I choosed an Arduino Mini; cheap ($19) and easy to program.

LC Studio SD Card reader from LCSoft is cheap and easy to find. Quality could be an issue, but given the price, it's a no brainer.

For the sources, I used the work Takeda Toshiya created a pseudo-MB8877/MB8876 in C++ for his RetroPC emulator. However, I made a lot of modifications.

Schematics

Here is the project schematics.

The SD card

On the SD card, up to 1000 virtual disk could be stored (depending on the SD capacity). Each virtual disk is a file named DISK_xxx.QX1 (000 to 999).

How the virtual disk is organized?



Update

As my first prototype didn't work as expected, I purchased a Logic Analyzer from Saleae to trask what is going wrong.

Also, I finally found the QX1 schematics, where I could validate most of my assumptions. However, it should be notice that: