Archives

Note: This text describes an obsolete version of the Floppy Emu hardware and software, but remains here for historical interest. The current model Floppy Emu hardware is available as a pre-assembled and tested product, with several optional accessories for Apple retrocomputing. See the BMOW store for a current product list.

Floppy Emu is a prototype floppy disk drive emulator for vintage Macintosh computers. It emulates 400K, 800K, or 1.4 MB disks, and is compatible with everything from the original Macintosh 128K through the Mac II series and Power Macintosh line.

If you’re comfortable with surface mount soldering and have an AVR programming tool, you can build a Floppy Emu at home. Be warned there are several SMD chips with fine-pitch 0.5 mm pin spacing. These can be soldered by hand, but it’s challenging work.

AVR Studio 5 software from Atmel. This is free software. AVR Studio 6 probably works too, but I haven’t tried it. AVRDUDE should work as well.

An AVR programmer, such as the AVRISP mkII

An SD or SDHC card that’s fast when transferring small data blocks. Lower capacity cards tend to perform better at small transfers – try a card with 2GB capacity or less.

Soldering iron

Patience

Making a PCB

To begin building your Floppy Emu, you’ll need a printed circuit board. Send me an email to ask if I have any extra PCBs available. Otherwise, there are many on-line services that will make these for you, using a set of layout files called Gerbers. You’ll find the Floppy Emu Gerbers in the file archive, in the directory eagle\floppyemu\gerbers.zip. I recommend using the Dorkbot PDX PCB Order service to get the PCB manufactured. Send them the Gerber files, and they’ll make three copies of the PCB for about $30, with a turn-around time of a few weeks. The guy who runs the PCB service is very helpful if you have questions.

Getting the Parts

While you’re waiting for the PCB, you can locate all the other parts you’ll need to assemble the Floppy Emu. You’ll find a complete parts list in the file archive. The total parts cost (not including the PCB) should be about $40-$50 when ordering in single unit quantities, with taxes and shipping costs.

One of the required parts is a male DB-19 connector, which mates with the Mac’s external floppy port. These can be very difficult to find, and IEC is the only supplier I know that has them. If you can’t find a DB-19 solder type connector, you can still use the Floppy Emu with its alternate IDC20 connector, which is readily available from electronics suppliers. With the IDC20, there are several different connection options:

If you don’t already have one, you’ll also need an AVR programmer like the AVRISP mkII.

Assembly

Here’s where things get fun! Refer to the file board-layout.png for placement information, or check the schematics.

The first step is to solder and test the AVR.

Solder the AVR chip. Pay attention to the orientation – the dot in the corner of the chip should match the dot on the silkscreen. I recommend using the drag solder technique. Begin by soldering two pins on opposite corners of the chip to tack it in place. Verify that the pins are perfectly aligned with the pads on the board before proceeding. Now goob an absurd amount of solder onto the remaining pins. You will probably bridge most of the pins together – that’s OK. Finally, go back with a solder wick and flux, and wick away all the excess solder. Surface tension will hold the solder onto the pins and pads where it belongs, while the excess is magically wicked away. Use a 10x jeweler’s loupe to visually inspect the pins for tiny bridges or gaps.

Solder the crystal X1, the 18pF capacitors C12-C13, and the AVR decoupling capacitors C4-C7 (these are on the back of the board).

Also solder the DB-19 connector. It fits along the edge of the board, with the thickness of the board fitting between the two rows of solder cups.

The AVR microcontroller should now be functional. You can use AVR Studio to test it out.

Install the AVR Studio 5 software on your PC and run it.

Connect the Floppy Emu board to your Mac, and turn on the Mac.

Connect the AVRISP mkII programmer to your PC.

Press the ISP connector into the board, but do not solder it yet. If it is soldered too soon, it will be in the way of your iron later.

Connect the AVRISP’s programming cable to the ISP connector on the board.

Click on the AVR Programming button in the toolbar. It looks like a chip with a lightning bolt.

In the programming dialog, set Tool to AVRISP mkII, Device to ATmega1284P, and Interface to ISP

Click the Apply button

Where it says Device ID at the top, click the Read button. Push the ISP connector firmly sideways while you do this, to ensure its pins make electrical contact with the board.

If everything is working, the Device ID field should now display 0x1E 0x97 0x05. If it does not, or you encounter an error, review the steps above, then go back and carefully re-check all the solder connections. Do not proceed further until you are able to retrieve the AVR device ID.

The next step is to program the AVR with the Floppy Emu software and bootloader.

Open the AVR Programming dialog again.

From the list at the left, click Fuses to display fuse information.

Set the fuses:

BODLEVEL – disabled

OCDEN – off

JTAGEN – off

SPIEN – on

WDTON – off

EESAVE – off

BOOTSZ – 2048W_F800

BOOTRST – on

CKDIV8 – off

CKOUT – on

SUT_CKSEL – EXTXOSC_8MHz_XX_16KCK_65MS

These settings should result in the fuse bytes being Extended: 0xFF, High: 0xDA, Low: 0xBF.

Click the Program button in the fuse panel. Push against the ISP connector with your finger while you do this.

From the list at the left, click on Memories to display AVR memory information

Under Flash, verify that “Erase device before programming” is checked

For the Flash filename, choose AVR\release\merged.hex from the file archive

Under Flash, click the Program button. Push against the ISP connector with your finger while you do this.

Remove the ISP connector from the board.

Congratulations, the AVR setup is now complete! The next step is the Nokia LCD.

Solder the voltage regulator, and the regulator capacitors C10 and C11. Important: C11 is a 33uF polarized tantalum capacitor. The positive side of the capacitor should be on the right, towards the upper LCD connector.

Solder the level converter (the 74LVC244), its decoupling capacitor C8, and the 10K resistor R4.

If you want backlighting for the LCD, solder the backlight resistor R5. Personally I think it looks better without backlighting, so I leave R5 empty.

Solder the 8-pin male 0.1 inch header to the bottom of the Nokia LCD, and the 2-pin header to the two middle holes on the top of the LCD. The thicker part of the LCD bezel should be at the top.

Solder the 8-pin female header to the bottom of the board, and the 2-pin female header to the top of the board.

Connect the LCD to the Floppy Emu board.

The LCD should now be functional. Connect the Floppy Emu to your Mac, and turn the Mac on. If everything is working, the LCD should show a version number screen, followed by “SD Card init error”.

The SD card reader is next.

Solder the SD connector, and its decoupling capacitor C9.

Insert the SD card into your PC.

Copy some Macintosh disk image files onto the SD card.

Put the SD card into the Floppy Emu.

Connect the Floppy Emu to you Mac, and turn the Mac on. If everything is working, the LCD should show a menu listing of the disk images on the SD card.

The final assembly step is the CPLD.

Solder the CPLD. Pay attention to the orientation – the dot in the corner of the chip should match the dot on the silkscreen. Use the same technique for soldering the CPLD that you used for the AVR.

Solder the CPLD’s decoupling capacitors, C1-C3. These are on the back of the board.

Solder the LEDs and their resistors, R1 and R3. The silkscreen shows the proper orientation for the LEDs.

Solder the four tactile switches.

Solder the remaining connectors into place.

Now it’s time to program the CPLD. The AVR programs the CPLD indirectly, using a firmware file stored on the SD card, so no JTAG tools are needed.

Ensure the file firmware.xvf is on the SD card. This is part of the Floppy Emu source files archive.

Put the SD card into the Floppy Emu.

While your Mac is turned off, connect the Floppy Emu to the Mac.

Hold down both the PREV and NEXT buttons, then turn on the Mac.

Follow the instructions on the LCD to load the firmware file to the CPLD.

That’s it! Turn the Mac off, then on once more, and you’re done.

Using the Floppy Emu

When it’s turned on, the Floppy Emu scans the SD card for files with a .dsk, .img, or .image extension, and shows a menu of available disk images. Use the PREV/NEXT buttons to select a disk image file, then press the SELECT button to insert it into the emulated disk drive. After the disk is inserted, the LCD display shows the current track number and active side of the drive.

Floppy Emu supports normal sector-by-sector writing, such as copying files in the Finder, or saving data from within a program. It does not support formatting the emulated floppy, or using it with format-and-write disk copy tools. If you need a blank disk image file, create one on your PC and then copy it to the SD card.

Extending Floppy Emu

The C source code for the microcontroller program is provided in the file archive. You can build it with AVR Studio, generate a new floppyemu.hex and merged.hex file, and load it to the microcontroller using the AVRISP mkII.

The Verilog source code for the CPLD is also provided. You’ll need Xilinx’s free ISE WebPACK to build it. Export an XSVF file, and rename it to firmware.xvf. Then copy the file to the SD card, and load it onto the CPLD as you did before.

I’ve never heard of 74lcx, but if it tolerates 5v inputs and produces 3.3v outputs then it should work.

bbraun January 20th, 2013
7:59 pm

All the parts arrived, and after one failed attempt, I was able to build a working floppyemu! I’ve got a 512ke booting from it now.
My only problem is the LCD is all dark. With a light, and looking at it from an angle, I can read the display and using the next/prev/select buttons find a disk to boot. But clearly I’m doing something wrong with the LCD. Any suggestions on what I might have done to screw up the LCD like that? The LED backlight doesn’t come on (I’m not sure if it is supposed to), and looking at the LCD straight on looks like all pixels are “on”.
Thanks, this is great!

Awesome, that is great news!! The backlight is not supposed to come on. Sounds like the problem is with the contrast. I found there is major variation among those LCD modules as to what contrast settings work – sometimes even major variation on the same LCD module from day to day, which seems hard to explain.

In the file noklcd.cpp, in the function LcdReset(), try changing the bias and vop values. Read the comments at https://www.sparkfun.com/products/10168 for some discussion of what values have worked for people. Try bias values of 0x13, 0x14, or 0x15. Also read the comment from reozen, who mentions some knock-off LCDs are soldered incorrectly, and you have to press down on them hard from above to make them work.

Let me know if you need more help. I think I may have a couple more of the Nokia LCD boards somewhere.

bbraun January 21st, 2013
8:17 am

I changed the lcd_vop value to 0xBF, and the LCD is working well!
Thanks!

The build instructions, while detailed, are above my skill level. Wondering if anyone on the site would be willing to build one for me for parts+labor+reasonable markup.

Please be in touch if so!

Thanks,
Micki

petersieg September 30th, 2013
7:41 am

Hi. I am at that point:

Congratulations, the AVR setup is now complete! The next step is the Nokia LCD.

1.Solder the level converter (the 74LVC244), its decoupling capacitor C8, and the 10K resistor R4.
2.Solder the two 8-pin male 0.1 inch headers to the Nokia LCD.
3.Solder the top 8-pin female 0.1 inch header to the board. Place the bottom header in the board, but do not solder it yet.
4.Connect the LCD to the Floppy Emu board. The thicker part of the LCD bezel should be at the top.
The LCD should now be functional. Connect the Floppy Emu to your Mac, and turn the Mac on. If everything is working, the LCD should show “SD Card init error”.

–> but my LCD is also just black (sort of dark bue = all pixels on).
Problem: I don’t have AVR Studio 6 installed (yet) but have V4.18.
Could someone send my an avr flopyemu.hex with:
In the file noklcd.cpp, in the function LcdReset(), change the lcd_vop value to 0xBF

Those error codes are defined in micro.h. I didn’t write that code, so unfortunately I can’t tell you much about it. It looks like error 3 is XSVF_ERROR_MAXRETRIES “TDO mismatch after max retries”. Did you remember to set JTAGEN to OFF when you programmed the fuses? Are you getting 3.3V from the regulator?

The source code for the 0.1J3-F6 firmware isn’t available for download, sorry. For anyone who’s curious how it works, the source code for firmware 1.0L-F11 is included in the “Floppy Emu source files” link, above. For the hardware, it’s the same whether you’re using the board with a Mac, Apple II, or Lisa. If you want to build your own Floppy Emu board and use it with an Apple II, you can build the hardware following the instructions on this page, and then install the normal apple-II-0.1J3-F6 firmware binaries. Feel free to email me if you have any more specific questions.

Barry Nelson September 25th, 2015
8:31 am

Actually, I wanted to adapt the software to an Arduino development board and make it compatible with the Arduino boot loader. I know that as it is currently designed I would have to attach a Xilinx CPLD as well. I might have to move some of the inputs and outputs to different pins too. I am only interested in Apple II 5 1/4 disk emulation. I am interested in this because I can get an Arduino clone board for less than $25.00 with the ATmega1284P. I can get the CPLD on a DIP 40 carrier for $16.

I hate surface mount. Too small for me to deal with plus it’s difficult to modify. I want to build this on a breadboard and be able to reprogram it easily. I guess I could use one of my other Arduinos as an ISP programmer, but I would rather load everything except the CPLD code from the Arduino IDE. As far as the schematic is concerned, your web page says that I need an adapter to support read and write on an Apple II. Where is the schematic of the adapter? Even better, since that is a “universal” adapter, maybe you could give me some tips on how I could simplify it for only an Apple II and I would build it into the circuit.