SFD-700 Multi Host Floppy Disk Controller

  Update February 2024 - This document is out of date, the latest version of the project is stored in GitHub and uses a CPLD with ROM/RAM storage. The latest version, v1.2 is fully working but the Rom Filing System software, which was ported from the Rom Disk does not yet contain Floppy Disk tools, the board though works fine booting Floppy disks with the 'F' command. Due to urgent client project work updates have been put on hold for the time being, please check back in a few months.
One of the most needed acessories for the Sharp MZ series is the venerable Floppy Disk Controller. These are in relative short supply as not many people used them, mainly due to cost during the Sharp MZ era.
Sharp designed and released multiple floppy disk expansion cards, some built into the base machine, such as the MZ-2500/2800/3500/5600/6500 series, others required a plug in card. They initially started with a custom controller within the MZ-80K series, then with the advent of the MZ-80B business machine, Sharp standardised on the Western Digital Floppy Disk Controller architecture and designed and produced their own controller IC, the MB8866.
The MZ-80B design assumed all floppy disk control firmware would be stored in the machine's IPL (Initial Program Loader), which persisted into the MZ-800/MZ-1500/MZ-2000/MZ-2200 designs, maintaining controller compatibility with these newer machines.
Unfortunately, for lesser models, such as the MZ-80A/MZ-700, floppy disks were not considered at the design stage and thus required newer controller expansion cards with onboard ROM to be developed in order to provide the necessary floppy disk bootstrap firmware. In addition, as the MZ-80A ran at 2MHz, it wasnt fast enough to read the DRQ flag and then read the available data in a steady stream, so Sharp had to make the DRQ line toggle a ROM address line in order to speed up processing to handle the data flow.
Sharp floppy disk expansion cards were expensive. creating a window of opportunity for third parties to produce cheaper offerings. A company in Germany, K&P Partners GmbH was such a company and it offered two products, the SFD-800 for MZ-800 machines, which was also compatible with the MZ-80B/MZ-1500/MZ-2000/MZ-2200 hosts, and the SFD-700 which was targetted at the MZ-700.
I initially, like the SFD-800, considered a replica design, but after studying the various circuits, observed a fatal flaw in the K&P SFD-700, memory paging. The card was designed to work in the MZ-1U06 expansion unit which had paging logic to disable access to expansion card memory according to the paging state registers of the MZ-700. If this card was used in a custom expansion unit, it wouldnt work. I also had MZ-80A's which needed a floppy controller so came to the conclusion a single card, which would work in all the MZ series from the MZ-80A onwards (excluding those with built in controllers) would be the way forward. Hence the concept of an SFD-700 mkII was born, same name as the K&P product but greater functionality.
This document outlines the new schematic, the GAL code and any issues discovered on each machine.




Two GAL devices are used in this design, one to decipher the standard floppy disk controller port and card access, the second to decipher and enable the onboard ROM according to the jumper settings set on the PCB.
The GAL26CV12 was chosen due to the large number of input variables required along with pricing. Unfortunately, Microchip Technology acquired Atmel who produced a range of GAL devices and also Logic Devices who produced the CUPL compiler software. Newer versions of CUPL, called WinCUPL would only target and compile for Atmel or compatible devices, excluding the 26CV12 (26C12) produced by Lattice.
Another issue is actual programming of the 26CV12, no recent modern programmers, such as the TL-866 II or similar will program them. I thus had to design an adapter and modify the TL-866 configurations to allow programming.
The 26CV12 is responsible for decoding I/O addresses to create selects for the various Floppy logic components along with the BUS tri-state buffer activation. It also registers memory mapping logic via the Out 0xE0:0xE6 registers which determine wether any connected firmware ROM will be enabled or disableld.
The second GAL is a 16V8 as used on the SFD-800 card albeit repurposed in this design to decode and enable the firmware ROM when used within an MZ-80A/MZ-1200/MZ-700 machine. A set of jumpers, connected to this GAL, determine which host the card will be installed within.
The GAL code is still under development and will be listed below in due course.


The PCB is more complex than the SFD-800 as it requires two GAL devices, a ROM and additional support circuitry.

PCB Top PCB Bottom


K&P SFD800 Manual

The above link downloads the original K&P SFD-800 User Manual which is relevant to this design. It is in German so for non German speakers, the best way to translate is to use your smart phone, load the Google translate app, set to realtime camera translate and set the language as German-><your language>.


Please see github for all project files.

This project is still Work In Progress and this document will be updated shortly with further information.


The original design and board is copyright 1985 Kersten & Partners GmbH from Aachen, Germany who have now gone out of business. I took measures to contact them to seek permission for reproduction, writing to their last known address but had no response.

The new board is identical to the original except in part placement (2 IC's swapped), PCB land layout and the GAL code was written from scratch.


This design, hardware and software, is licensed under the GNU Public Licence v3.

The Gnu Public License v3

The source and binary files in this project marked as GPL v3 are free software: you can redistribute it and-or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

The source files are distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.