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 released their own controllers often based around the MB8866 IC which needed a lot of support circuitry. A few 3rd parties developed their own and one design, by a company (no longer in existence) called Kersten & Partners GmbH (K&P) developed a much simpler design but with no less functionality. This design used a newer Western Digital Floppy Disk Controller IC, the WD1773 which incorporated a lot of the circuitry which Sharp, using the MB8866, had to place externally on the circuit board.
I came across their SFD-800 board when I purchased an MZ-80B which included an original card. I also had an MZ-800 and was able to swap the card between both machines without issue. As my collection of Sharp MZ machines increased, I needed floppy disk controllers for all of the machines and as they are difficult to buy decided upon replication of the SFD-800 board.
This page outlines the new schematic, the GAL code and any issues discovered on each machine.
The schematic originally comes from the K&P SFD800 Manual which took a bit of deciphering mainly due to the bad image scan. This schematic was then captured in KiCAD and is shown below.
The original device used by K&P was a PAL, a one time programmable logic device with its protection fuse set. As the PAL is a simple device, 12 inputs, 8 outputs, it would be simple to deduce the logic by probing. Given the design is actually quite simple and as I had extensive experience of floppy disks writing the RFS and TZFS monitors I decided to write the logic from scratch, based on what I knew.
I used WinCUPL to compile the code and tested the GAL on the original K&P SFD800 board for verification. The code is below and as can be seen it is just decoding addresses and creating select lines.
Name SFD800 ; PartNo PAL12L6 ; Date 20/05/2021 ; Revision 01 ; Designer Philip Smart ; Company engineers@work ; Assembly SFD800 ; Location ; Device g16v8a; /* *************** INPUT PINS *********************/ PIN 1 = A0 ; /* Address bus A0 */ PIN 2 = A1 ; /* A1 */ PIN 3 = A2 ; /* A2 */ PIN 4 = A3 ; /* A3 */ PIN 6 = A4 ; /* A4 */ PIN 7 = A5 ; /* A5 */ PIN 8 = A6 ; /* A6 */ PIN 9 = A7 ; /* A7 */ PIN 19 = IORQn ; /* Z80 IORQ active low */ PIN 11 = WRn ; /* Z80 WR active low */ PIN 12 = RDn ; /* Z80 RD active low */ PIN 5 = RESET ; /* System Reset active high */ /* *************** OUTPUT PINS *********************/ PIN 13 = BUSn ; /* BUS direction, low = read into Z80, high = write to FD IC's */ PIN 18 = FDCn ; /* WD1773 Chip Select active low I/O - Address 0xD8 .. 0xDB */ PIN 14 = DRIVEn ; /* Disk Drive Select active low - Address 0xDC */ PIN 17 = DDENn ; /* Drive Density select active low - Address 0xDE */ PIN 15 = RESn ; /* Peripheral Reset active low */ PIN 16 = SIDEn ; /* Disk Head Select active low - Address 0xDD */ /* Decoder equations. */ FIELD ADDR = [A7..A0]; WD1773SEL = !IORQn & ADDR:[D8..DB]; SIDESEL = !IORQn & !WRn & ADDR:[DD..DD]; DRIVESEL = !IORQn & !WRn & ADDR:[DC..DC]; DDENSEL = !IORQn & !WRn & ADDR:[DE..DE]; BUSREAD = !IORQn & !RDn & ADDR:[D8..DE]; /* Assign output pins based on equations. */ BUSn = !BUSREAD; RESn = !RESET; FDCn = !WD1773SEL; SIDEn = !SIDESEL; DRIVEn = !DRIVESEL; DDENn = !DDENSEL;
The PCB differs from the original in that I used KiCAD rather than hand drawn images. The advantage to KiCAD is that it uses more modern routing techniques and copper fills.
The above link downloads the original K&P User Manual which is in German. 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>.
The table below outlines the cost to make a PCB. The pricing isnt quite so accurate as you often have to buy in multiples of 10/50/100 and amortize across the number of boards you make. Scroll right to see all the table detail.
|C1, C2, C3, C5, C6, C7, C8||100nF||7||£0.05||£0.32||£0.06||£0.38||Device:C_Small||Capacitor_THT:C_Disc_D5.0mm_W2.5mm_P2.50mm||~||https://uk.rs-online.com/web/p/mlccs-multilayer-ceramic-capacitors/1816538/|
|Socket 1||28 pin||1||£0.35||£0.35||£0.07||£0.42||28 Pin Socket||https://uk.rs-online.com/web/p/dil-sockets/6742454|
|Socket 2||20 pin||1||£0.24||£0.24||£0.05||£0.28||20 Pin Socket||https://uk.rs-online.com/web/p/dil-sockets/6742444|
Please see github for all project files.
I’ve built over 20 of these cards to-date, 5 of which are in my own machines and all run reliably. I now require a further 2 cards so will order a batch of 10 PCB’s from the PCB fabricators (the cards are ordered in multiples of 5/10 and being outsize do not benefit from the prototype offers) and will offer any spare on Tindie, either fully assembled and tested or a kit of parts. Please see the link above which will list cards when available.
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.
The Gnu Public License v3
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/.