I've been searching for technical information to explain how this works but can't find any info, pinouts, technical reference of any form.

I want to program a parallel port to control a USB device but need some sort of details on the tech behind the conversion. I have a 1979 Exidy Sorcerer 8 bit computer with a parallel port. I wanted to find a way to make it talk to a USB flash device.

Here's an example of the many such cables to be found on the net https://www.lindy.com.au/usb-to-parallel-converter-cable-2764


closed as off-topic by brhans, Scott Seidman, pipe, Dmitry Grigoryev, Dwayne Reid Oct 25 '18 at 4:44

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "Questions on the use of electronic devices are off-topic as this site is intended specifically for questions on electronics design." – brhans, Dmitry Grigoryev, Dwayne Reid
If this question can be reworded to fit the rules in the help center, please edit the question.

  • \$\begingroup\$ These only work with IEEE-1284 compatible printers on the parallel port. \$\endgroup\$ – Turbo J Oct 22 '18 at 9:38
  • 1
    \$\begingroup\$ You definitely, as Tom explains in his answer, have it the wrong way round. You need something that controls a USB device, not a USB device itself. So, your question here won't get you any closer to a solution to your problem. Do not fret! Ask a new question where you explain what you need to do, and what you've considered so far to solve the situation. That question must explain what kind of USB device you want to control with what kind of parallel device; you must give us more context to understand what you're trying to achieve "in the bigger picture". \$\endgroup\$ – Marcus Müller Oct 22 '18 at 10:00
  • 1
    \$\begingroup\$ @MarcusMüller & Dim I have a 1979 Exidy Sorcerer 8 bit computer with a parallel port. I wanted to find a way to make it talk to a USB flash device, but as pointed out in the comments and answers, it's just not possible to drive the parallel port signals to control the USB device. I'll look for an alternative solution. \$\endgroup\$ – Duke Dougal Oct 22 '18 at 10:08
  • 2
    \$\begingroup\$ @DukeDougal You should have explained that from the start. Anyway, the only way to achieve that would be to design your own smart adapter, based on a microcontroller with a USB host interface (to which you will connect your device), and enough GPIO pins to interface the parallel interface. But this isn't straightforward: the hardware part is relatively easy, but the software part will be much more difficult. You will need to know exactly how the parallel port signals behave, and a perfect understanding of the USB protocol, including the class specs you'll want to implement. \$\endgroup\$ – dim Oct 22 '18 at 11:58
  • 1
    \$\begingroup\$ I'm fully on-board with @dim's comment. And it shows I was right: you have a very interesting, fairly complex problem, which you should ask as a new question, not in a comment. \$\endgroup\$ – Marcus Müller Oct 22 '18 at 13:55

I want to program a parallel port to control a USB device

Unfortunately, such adapters will not help you do that as your requirement is the wrong way around for them.

The adapters are devices that connect to a USB host port on a PC, and then appear to the operating system of the PC as limited feature virtual parallel ports.

You cannot use them to connect a USB device (e.g. mouse, memory stick) to a parallel port.

If you need to do things the other way around, you would need an entirely different and much more custom device. Some programmable circuit that features a USB host port, along with IO that can be used for parallel communications.

The communication between the custom device and PC would then have to be some custom protocol wrapped in driver software to allow your device to be emulated at the other side of the link. This would be a very complex and in depth system design task.


Now that the goal has been clarified:

I have a 1979 Exidy Sorcerer 8 bit computer with a parallel port. I wanted to find a way to make it talk to a USB flash device, but as pointed out in the comments and answers, it's just not possible to drive the parallel port signals to control the USB device. I'll look for an alternative solution.

There's an awkward solution to your real problem, a clean one, and a software one. Both the hardware options require that you can manipulate individual bits in the parallel port, and not merely send synchronous words to a printer.

First, you could get an SPI to USB Host bridge, probably most practically one sold as an add-on sold for Arduino boards. You would then need to bit-bang SPI using four or so pins of the parallel port's data word, and have software to operate the bridge chip to perform USB mass storage operations, and finally you'd have to implement a file system. This comes closest to your original idea of using a USB-to-Parallel cable, but with hardware actually intended to work in the reverse direction as you require, which as others have explained is something those limited purpose cables cannot do.

A much cleaner option would be to replace the USB flash drive with an SD card which you could operate in legacy MMC-SPI mode (and which modern systems can use via a USB card adapter). Here you are basically just bit-banging a slightly odd SPI peripheral. You would need to then speak MMC commands, and finally implement a file system (unless you want to treat the card as a raw block store). This is pretty commonly done to give legacy computers "a hard disk" so you may well be able to find software for a compatible enough processor/system to jump start an effort.

Finally you could implement effectively a network file system, by using some available interface like a serial port to communicate with a modern system (PC, Raspberry Pi, whatever) that functions as a semi-custom fileserver. With care this can probably be made to have the smallest software footprint on the legacy system, since you can customize the scheme to make the task easy for that end.

Or if you don't mind a painfully slow solution, you could probably make a PC soundcard function as a virtual cassette tape, as your system seems to have an interface for that. This may well be the only path that does not require you to delve deep into operating system internals of the legacy system.

  • \$\begingroup\$ Very nice and comprehensive tips for a classic XY-problem question. I still would like to know if the OP really wan't to talk to an "USB flash" or just some memory and if he really needs a filesystem \$\endgroup\$ – Andy Oct 22 '18 at 16:15
  • \$\begingroup\$ If I bit banged an SD card in legacy MMC-SPI mode, how would I do that from the Exidy? Can that be done directly from the parallel port or would the parallel port need to be talking to some sort of converter device which then talks to the sd card? \$\endgroup\$ – Duke Dougal Oct 23 '18 at 1:31
  • \$\begingroup\$ Bit banging is a software operation. Apart from needing 5v to 3.3v level translation (or get some Arduino SD card add-on that already has that). You'd write a tight loop, probably in assembly language... actually in that era almost all system software was assembly language. It's likely someone has already done a Z80 implementation you could borrow at least key functional pieces from perhaps after changing I/O addresses, though how you interface this to the rest of the operating system may require more thought. \$\endgroup\$ – Chris Stratton Oct 23 '18 at 3:41

There are few things to consider:

(1) The pictured parallel-port-USB dongle is designed to work in the opposite direction: one end is USB (which requires a full-blown PC or sizable embedded host to operate), and the other end is the Centronics parallel port. You can probably make some Exidy Sorcerer-to-PC connection of some sort over PP, but it will not drive any USB flash drive directly. You can try to write a bridge inside the PC, but you will need to invent the data/control protocol over EPP to get a structured access to mass storage data.

(2) It would be impossible for the Exidy Sorcerer to emulate any USB control via any bit-banging method. USB flash class is implemented only in FS (12 Mbps) mode, there are no mass storage devices in LS domain. The Exidy Sorcerer is hopelessly too weak in resources and speed to create any resemblance of FS USB protocol.

(3) The Exidy Sorcerer does have however an external S-100 bus, a 50-pin connector. The Sorcerer was later extended to drive a S-100 backlpane, where a Floopy Disk interface was offered. One way would be to implement a hardware bridge that emulates the floppy on S-100 side, and (again) to use an embedded (or full-size) PC to manage the entire USB stack, and emulate a floppy-to-S100 interface. One weak advantage would be that the Exidy Sorcerer should have some driver for floppies over the S-100 bus.

(4) There used to be mass storage devices (as zip drives and CDROMs) with parallel interface. Again, a bridge has to be made between a full-scale USB host driving the USB flash, and the centronics port (see also (1)). The problem will be that the Exidy Sorcerer likely has no driver for Centronics-based mass storage devices.

In conclusion, the USB technology is so far ahead of the era of Exidy Sorcerer, and this project would require a lot of in-depth knowledge of the ancient Z80 technology, so it will be nearly impossible to implement, IMO.


Not the answer you're looking for? Browse other questions tagged or ask your own question.