I recently purchased a ZoomFloppy board, which allows old Commodore IEC serial devices – most importantly, floppy drives – to be connected to a USB port on a modern computer. It’s a great little device, but the instructions aren’t up to scratch: binary software is provided for Windows, manual installation instructions for OS X, but Linux users are left to their own devices.

Here, if for no other reason than I’ll need these if I have to reinstall it, is how I got the ZoomFloppy working on Ubuntu 14.04. You’ll need an up-to-date compilation environment installed, so start by making sure you’ve got the basics:

sudo apt-get install libusb-dev build-essential linux-headers-generic git

Next, you’ll want to download, compile and install the CC65 compiler. No, you really will. Trust me on this one.

cd ~
git clone https://github.com/cc65/cc65.git
cd cc65
sudo prefix=/usr make install
Assuming all went well, download, compile and install OpenCBM:
cd ~
git clone  git://git.code.sf.net/p/opencbm/code opencbm
cd opencbm/opencbm
make -f LINUX/Makefile
sudo make -f LINUX/Makefile install install-all install-plugin-xum1541
sudo ln -s /usr/local/lib/libopencbm.so.0 /usr/lib/libopencbm.so.0
That last line fixes a problem where OpenCBM ends up looking in the wrong place for its library.  Finally, you’ll need to add udev rules for the ZoomFloppy hardware itself:
sudo vim /etc/udev/rules.d/45-opencbm-parallel.rules
Add the following lines to the bottom of the file, then save and quit:
SUBSYSTEM!="usb_device", ACTION!="add", MODE="0666", GOTO="opencbm_rules_end"
# zoom floppy
ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0504", GROUP="users", MODE="0666"
Restart udev:
sudo service udev restart
Connect your ZoomFloppy and IEC device and check all is well:
cbmctrl detect
That’s it. Enjoy!
I’ll probably need to refer to these instructions for enabling the VICE C64/128 emulator to talk to a physical drive via the ZoomFloppy at some point, too. You need to check two options off. The first is Settings -> Peripheral Settings -> Device #8 -> Enable IEC Device. The second Settings -> Peripheral Settings -> Device #8 -> Device Type -> Real Device Access. With both ticked and the ZoomFloppy connected, you can talk to the physical floppy drive as though it were Device 8 (i.e. load”*”,8,1). Huzzah!

11 thoughts on “Installing the ZoomFloppy on Linux

  1. I have a USB floppy drive & it works fine in Linux Mint w/o doing anything at all…(shows up as an NEC brand).

    However, if you had to have a serial port for some reason, glad to know this is out there.


  2. Hi, Tracy.

    I have several USB floppy drives as well, and they’re great – if you want to read FAT-format 3.5″ floppies. As I said in the post, the ZoomFloppy is for connecting Commodore IEC serial peripherals from the 1980s: in particular, it’s used for connecting Commodore 1541/1571 5.25″ floppy drives. Now, if you can point me towards a plug-and-play 5.25″ floppy drive with USB connection and support for double-sided disks where the second side goes to track -8 (ah, Commodore, your lack of adherence to standards is always a source of great bemusement) then I wouldn’t need the ZoomFloppy!

    As it is, though, there are three real-world choices for reading Commodore 64/128 5.25″ floppies: read them on a real Commodore connected to a PC via a serial cable; read them on a real Commodore disk drive connected to a ZoomFloppy or similar; or read them on a ‘flippy-modded’ 5.25″ drive connected via a KryoFlux.

  3. As much as I love techie-stuff, you’re far beyond me! I do support myself (barely) by servicing residential clients in my area. I build, repair, & do remote fixing, too. In my rare/spare time, I like tinkering– but am not quite to your level- lol. My claim-to-fame is probably this:


    Cheers from AU 🙂

  4. The lines for rules file you gave didn’t work for me (Ubuntu 14.04 64bit), but these lines did work:

    SUBSYSTEM!=”usb_device”, ACTION!=”add”, GOTO=”opencbm_rules_end”
    # xum1541
    SUBSYSTEM==”usb”, ATTRS{idVendor}==”16d0″, ATTRS{idProduct}==”0504″, MODE=”0666″, GROUP=”cdrom”

  5. Hello,

    I have two comments to your walk-through:

    1. sudo make -f LINUX/Makefile install install-all install-plugin-xum1541

    Please remove “install-all”, as it contains “install” and “install-plugin”. Now, “install-plugin” contains “install-xa1541”, “install-xu1541” and “install-xum1541”. Unfortunately, this will result in the xa1541 plugin being the default, so your “cbmctrl detect” will faill unless you have a parallel port and a xa1541 or xm1541 cable.

    2. sudo ln -s /usr/local/lib/libopencbm.so.0 /usr/lib/libopencbm.so.0

    Why is this line necessary for your? You should have /usr/local/lib in your /etc/ld.so.conf (or in /etc/ld.so.conf.d/libc.conf, where it is on my Debian). In this case, your above line is not necessary.

    I would highly advise against using your line and adding /usr/local/lib to ld.so.conf or ld.so.conf.d instead, as it is the cleaner solution.

    Or play with PREFIX=/usr in order to install it directly to /usr/lib/.

  6. Oh, and why do you modify /etc/udev/rules.d/45-opencbm-parallel.rules instead of using the file xum1541/udev/45-opencbm-usb.rules instead?

  7. Hi, Spiro.

    1) I don’t know what to tell you: after following the steps listed in my post above, everything worked fine – including ‘cbmctrl detect.’ If I ever need to install the ZoomFloppy on another system, I’ll try your method – but everything’s working just peachy for now.

    2) It may not be required under Debian, but it was certainly required under Ubuntu – without it, nothing worked. Other solutions may be cleaner, but again: it worked perfectly for me, and the ZoomFloppy is running just fine.

    3) Probably because I had no idea xum1541/udev/45-opencbm-usb.rules existed. Have you thought about working on documentation for the project? It would certainly make it a lot easier for people to do things the ‘proper’ way if such documentation existed, and I would never have had to write this post to remind myself how to do it next time. If you do write something, be sure to send me a copy!

  8. Using 14.04 32 bit (Mate version); I get this far:

    > cd ~
    > git clone git://git.code.sf.net/p/opencbm/code opencbm
    > cd opencbm/opencbm
    > make -f LINUX/Makefile

    make: LINUX/Makefile: No such file or directory
    make: *** No rule to make target `LINUX/Makefile’. Stop.

    If I go back a level then do it, It kinda works but then I get:

    > cd ..
    > make -f LINUX/Makefile

    cbmlinetester.c:19:22: fatal error: ncurses.h: No such file or directory
    # include

  9. Do you have the ncurses development package installed?

  10. Tip about not finding the library–you just need to run ldconfig (as root).

  11. Marlon Schmitt on Wednesday, September 6, 2017 at 18:16 said:

    There’s a small problem with the typeface: In the line make -f LINUX/Makefile, the uppercase i in LINUX looks the same as the lowercase L in Makefile. This may sometimes cause problems.

Leave a Reply

Post navigation