VOGONS


First post, by mdanh2002

User metadata
Rank Newbie
Rank
Newbie

A couple of years ago my old Iomega ZIP100 parallel port drive started randomly ejecting disks. Instead of replacing it, I decided to do something slightly unreasonable: reverse-engineer the protocol and build my own ZIP100 emulator. That hobby project eventually became LPT100, a parallel-port ZIP100 emulator implemented on a microcontroller that reads/writes disk images stored on a USB flash drive.

The project ended up being much deeper than expected because there is almost no public documentation of the ZIP parallel protocol. Most of the work involved reverse-engineering the Linux ppa driver, tracing PALMZIP behavior, and capturing port activity.

The final project, named LPT100, was implemented on a PIC32MZ microcontroller and tested with: MS-DOS/Windows 98/Windows XP/Linux (Super 8086 Box, DOSBox-X, QEMU) and MS-DOS + PALMZIP (Book 8088), with disk images stored on USB flash drive. Parallel port interface was done via GPIO + DMA capture.

I documented everything in two articles:

Part 1 – Protocol reverse engineering + emulator in DOSBox/QEMU
https://www.toughdev.com/content/2026/02/pic3 … x-qemu-testing/

Part 2 – Building the actual hardware
https://www.toughdev.com/content/2026/03/pic3 … ardware-design/

Part 1 Video - Emulator testing (DOSBox + QEMU + multiple OSes):
https://youtu.be/ZMJkRygU8kI

Part 2 Video - Real hardware LPT100 board running on Book 8088:
https://youtu.be/340J7vItfPw

On my Book8088 system, write speed is ~7.2 KB/s, read speed is around 6.3 KB/s in nibble mode, which is actually pretty close to real ZIP parallel performance on slow systems. When tested in Windows 98 using DOSBox-X, the speed is around 50-60KB/sec in bidirectional mode. The emulator works perfectly on 8088-class systems, although faster machines (386+) can overwhelm the microcontroller timing. I might consider migrating to a faster MCU (e.g. Teensy) in a future revision.

If anyone here still uses parallel ZIP drives, I’d love to hear about your setup or ideas for improving the design.

Building software & hardware: http://www.toughdev.com/

Reply 1 of 10, by weedeewee

User metadata
Rank l33t
Rank
l33t

Cool project,

this adds one more way to transfer files between new and old systems.
Now i'm imagining someone using an esp32 module to have the "zip disk" on a network server.

Right to repair is fundamental. You own it, you're allowed to fix it.
How To Ask Questions The Smart Way
Do not ask Why !
https://www.vogonswiki.com/index.php/Serial_port

Reply 2 of 10, by feipoa

User metadata
Rank l33t++
Rank
l33t++

This is an awesome idea and it looks like you've spent countless days working on this.

One of the major annoyances of working with pre-USB computers is moving files from your modern computer onto your vintage computer without removing the case. CD-RW was slow, cumbersome, and prone to failure; CF/SD needs reboot, case removal, and adding the CF as a HDD in the BIOS; floppy diskette size is often too low; ZIP/Jazz/LS120 is OK, but requires special drives to be installed on every computer; ethernet is OK if you have an available ethernet cable near you and have networking setup on every computer. Your solution looks to resolve much of these extra steps and is very portable - most vintage PC's had a parallel port.

A few questions:

1)
Did you have any issue with the hot-swappability of the USB flash drive? That is, can the USB card be inserted and written/read to without needing to reboot the computer?

2)
Do you need to have the USB flash drive setup as a 100 MB FAT partition?

3)
With a faster MCU, how close could you get to the to max ECP/EPP transfer rates? I think the protocol limit is ~2 MB/s for ECP. Maybe 4 MB/s for some EPP implementations?

4)
What are the chances that this design could be scaled to include ZIP 250 and ZIP 750?

Plan your life wisely, you'll be dead before you know it.

Reply 3 of 10, by mdanh2002

User metadata
Rank Newbie
Rank
Newbie
feipoa wrote on Today, 13:11:
This is an awesome idea and it looks like you've spent countless days working on this. […]
Show full quote

This is an awesome idea and it looks like you've spent countless days working on this.

One of the major annoyances of working with pre-USB computers is moving files from your modern computer onto your vintage computer without removing the case. CD-RW was slow, cumbersome, and prone to failure; CF/SD needs reboot, case removal, and adding the CF as a HDD in the BIOS; floppy diskette size is often too low; ZIP/Jazz/LS120 is OK, but requires special drives to be installed on every computer; ethernet is OK if you have an available ethernet cable near you and have networking setup on every computer. Your solution looks to resolve much of these extra steps and is very portable - most vintage PC's had a parallel port.

A few questions:

1)
Did you have any issue with the hot-swappability of the USB flash drive? That is, can the USB card be inserted and written/read to without needing to reboot the computer?

2)
Do you need to have the USB flash drive setup as a 100 MB FAT partition?

3)
With a faster MCU, how close could you get to the to max ECP/EPP transfer rates? I think the protocol limit is ~2 MB/s for ECP. Maybe 4 MB/s for some EPP implementations?

4)
What are the chances that this design could be scaled to include ZIP 250 and ZIP 750?

Hi,

I spent a total of 3 months on it, during the night and at weekends. See my answers to your questions below

(1) and (2)
In my design, the USB thumbdrive just stores the disk images so it need not be formatted as 100MB FAT. In fact, FAT12/FAT16/FAT32 filesystems are supported. Multiple disk images, up to 2GB each, can be stored on the thumbdrive. You can select which image to present to the host OS by using the push buttons and LCD display.
For DOS 6.22 to recognize the disk drive, the image itself has to be formatted as FAT16. FAT32 is supported in Windows 98. In Windows XP, NTFS is supported as well.
Changing the disk image while the system has already assigned a drive letter is supported, provided that nothing is using the ZIP at the time. In MS-DOS, the free space count (in DIR command) might be cached for a while, so switching the image might result in the wrong free space count display. Otherwise, I have not noticed any other issues.
Hotswapping the USB is supported, although in my final version I disable hotswap. Microchip's implementation of USB hot-swap involves repeatedly scanning the bus looking for changes, and this slows this down. Disabling hot swap helps save some precious CPU cycle and allows the ZIP state machine to run faster.

(3)
I believe bidirectional parallel port speed is capped at 200KB/s. During testing on Windows 98 on DOSBox-X, I got around 50-60KB/s using my implementation. To get it to 2MB/s (or even 4MB/s) you will need a faster MCU, implement ECP/EPP, and a much more efficient state machine implementation. Certainly not one with thousands of lines containing if/else/goto. With the current code, I do not believe I can make it so fast even with the Teensy at 600MHz. But perhaps I can with something like the Banana PI (with 5V tolerant pins) running at GHz or an FPGA.
On my working IOMEGA ZIP100 drive, the max speed is only around 700KB/s, even in EPP mode. Perhaps it could do 2MB/s years ago when it was still new.

(4)
Although the IOMEGA driver sends SCSI ENQUIRY to query the device LUN string and retrieve the disk model (ZIP100, ZIP250, ZIP750), this is only for display on screen during initialization (and within SCSIUTIL.EXE). Once that is done, the model number is not cross-checked against the disk capacity and the driver will just pass DOS sector read/write commands to the disk drive.
The PALMZIP driver, designed for DOS, uses 6-byte SCSI commands, so the size limit would be around 1GB (assuming 512 sector size)
IOMEGA driver sends 10-byte SCSI commands, which are internally converted to 6-byte by my implementation, so the size limit is still 1GB. I presume the limit would be much higher if I had not performed the conversion, but I did not test this.
In reality, I did not have any issues with 100MB, 250MB or 750MB disk images. My firmware would also return the closest model (ZIP100, ZIP250, ZIP750) to the selected image size.

Building software & hardware: http://www.toughdev.com/

Reply 4 of 10, by DarcTangent

User metadata
Rank Newbie
Rank
Newbie

Very cool project! This should be a product on Serdashop. I like that this is an external solution that does not require any additional system resources is you have a paralell port. Many thanks for sharing!

Reply 5 of 10, by Nexxen

User metadata
Rank l33t
Rank
l33t

Have you encountered any error codes issued via LPT port if something fails?
Could be useful to repair units that have no real damage to the eye.
Some laptops have lpt cards (post cards) with LED codes, maybe has nothing in common but still worth asking.

PC#1 Pentium 233 MMX - 98SE
PC#2 PIII-1Ghz - 98SE/W2K

- "One hates the specialty unobtainium parts, the other laughs in greed listing them under a ridiculous price" - kotel studios
- Bare metal ist krieg.

Reply 6 of 10, by mdanh2002

User metadata
Rank Newbie
Rank
Newbie

I once bought a parallel port test card from eBay, which would just prevent my IBM Thinkpad from powering on if connected. Without the relevant documentation (and the schematics for such a card), such a code (if displayed) is not useful. An ISA test card (for a PC) is perhaps much more useful in my opinion.

Building software & hardware: http://www.toughdev.com/

Reply 7 of 10, by Nexxen

User metadata
Rank l33t
Rank
l33t
mdanh2002 wrote on Today, 15:42:

I once bought a parallel port test card from eBay, which would just prevent my IBM Thinkpad from powering on if connected. Without the relevant documentation (and the schematics for such a card), such a code (if displayed) is not useful. An ISA test card (for a PC) is perhaps much more useful in my opinion.

I'm asking if the Zip unit issues codes, not the PC.
Sorry for the misunderstanding.

PC#1 Pentium 233 MMX - 98SE
PC#2 PIII-1Ghz - 98SE/W2K

- "One hates the specialty unobtainium parts, the other laughs in greed listing them under a ridiculous price" - kotel studios
- Bare metal ist krieg.

Reply 8 of 10, by mdanh2002

User metadata
Rank Newbie
Rank
Newbie
Nexxen wrote on Today, 16:05:
mdanh2002 wrote on Today, 15:42:

I once bought a parallel port test card from eBay, which would just prevent my IBM Thinkpad from powering on if connected. Without the relevant documentation (and the schematics for such a card), such a code (if displayed) is not useful. An ISA test card (for a PC) is perhaps much more useful in my opinion.

I'm asking if the Zip unit issues codes, not the PC.
Sorry for the misunderstanding.

No worries. The unit has an LED display which displays the exact error message (no USB, no disk image, usb error, etc.). Standard DOS error codes (drive not ready, data error, sector not found, general failure) are also returned and displayed by the ZIP driver (such as PALMZIP or Iomega) when something goes wrong.

Building software & hardware: http://www.toughdev.com/

Reply 9 of 10, by Nexxen

User metadata
Rank l33t
Rank
l33t
mdanh2002 wrote on Today, 16:11:
Nexxen wrote on Today, 16:05:
mdanh2002 wrote on Today, 15:42:

I once bought a parallel port test card from eBay, which would just prevent my IBM Thinkpad from powering on if connected. Without the relevant documentation (and the schematics for such a card), such a code (if displayed) is not useful. An ISA test card (for a PC) is perhaps much more useful in my opinion.

I'm asking if the Zip unit issues codes, not the PC.
Sorry for the misunderstanding.

No worries. The unit has an LED display which displays the exact error message (no USB, no disk image, usb error, etc.). Standard DOS error codes (drive not ready, data error, sector not found, general failure) are also returned and displayed by the ZIP driver (such as PALMZIP or Iomega) when something goes wrong.

You mean your unit or Iomega Zip drive?
If it's the latter, do you know the codes? I have a few units that have a LED inside but I have no clue of what is wrong.

In any case your effort is really interesting.

PC#1 Pentium 233 MMX - 98SE
PC#2 PIII-1Ghz - 98SE/W2K

- "One hates the specialty unobtainium parts, the other laughs in greed listing them under a ridiculous price" - kotel studios
- Bare metal ist krieg.

Reply 10 of 10, by mdanh2002

User metadata
Rank Newbie
Rank
Newbie
Nexxen wrote on Today, 16:24:
You mean your unit or Iomega Zip drive? If it's the latter, do you know the codes? I have a few units that have a LED inside but […]
Show full quote
mdanh2002 wrote on Today, 16:11:
Nexxen wrote on Today, 16:05:

I'm asking if the Zip unit issues codes, not the PC.
Sorry for the misunderstanding.

No worries. The unit has an LED display which displays the exact error message (no USB, no disk image, usb error, etc.). Standard DOS error codes (drive not ready, data error, sector not found, general failure) are also returned and displayed by the ZIP driver (such as PALMZIP or Iomega) when something goes wrong.

You mean your unit or Iomega Zip drive?
If it's the latter, do you know the codes? I have a few units that have a LED inside but I have no clue of what is wrong.

In any case your effort is really interesting.

My unit has a display which shows you the disk image in use and USB capacity. The IOMEGA one doesn't. Does the driver (PALMZIP, Iomega, or ASPI.SYS) still find the unit or something at SCSI ID 6? If yes, try running SCSIUTIL.EXE and see what it says.

Building software & hardware: http://www.toughdev.com/