My previous blog posting on this subject from a few years ago sparked quite a bit of interest, so I’d like to follow it up with the latest compatibility information I have. First a quick summary:

Traditional Willem EPROM programmers require your computer to have a parallel port, and almost no computers today have them. You can find add-on parallel port cards, but a good chunk of today’s software is written to work directly with the parallel port addresses that were found on motherboards of older computers (0x378, 0x278, and 0x3BC). Add-on PCI/PCI Express/ExpressCard parallel ports don’t use those addresses.

Unfortunately, the Willem software only lets you pick from a hardcoded list of addresses to work with. The good news, however, is that it does its port access through a DLL called io.dll. There are replacement versions of io.dll that trick the Willem software into talking to a different parallel port address:

It’s actually a good thing that multiple options exist, because sometimes one option works for someone while the other option doesn’t, and vice versa. I would like to list what I have discovered about the various options available in terms of both hardware and software.

Parallel port cards

I have tried a total of four different parallel port cards cards, some of which are hard to find at this time:

My experience with these is the following. The Syba cards both use Moschip (now ASIX) chipsets, while the Shentek and StarTech cards use Oxford (now PLX Technologies) chipsets.

Both of the ASIX-based cards seem to work fine with no messing around needed. I’ve tested them on my desktop computer with Windows 7 64-bit (my DLL) and my laptop with Windows XP (Ben’s DLL).

The PLX-based cards throw a couple of curveballs into the picture, though. First of all, their bidirectional control pins (strobe, auto/linefeed, initialize, and select printer) do not have pull-up resistors. This causes a problem because they are open-drain/open-collector outputs, so something needs to pull them up when a high value is needed. Otherwise it’s impossible to use them as outputs — and the Willem programmer uses them as outputs. The Willem programmer (mine, at least) doesn’t supply its own pull-ups for those pins either. So in order to gain compatibility with those two cards, you will need to add pull-ups somewhere. To get these cards to work, I manually soldered some 10Kohm pull-up resistors for those lines onto my Willem board. It was a pretty ugly hack, though, so I removed the pull-ups after successfully testing it. Maybe someone can find a cleaner way to do it.

I have no idea about full-size PCI Express or PCI cards that use the PLX chipset. Perhaps they would already have the pull-up resistors in place. I’m just not sure.

The second issue with the PLX cards is described in the “DLLs” section below.

DLLs

The ASIX cards seem to work great with both my DLL and Ben’s DLL, so no further comments are needed here about them.

The Oxford cards don’t behave quite so nicely with my DLL. It seems that TVicPort has trouble reading bytes from odd addresses with the PLX cards, even though it has no such trouble with the ASIX cards. Inpout32 does not have this same issue. I haven’t narrowed down the root problem, but I don’t really care at this point anyway because there’s a fix: if you’re using a PLX chipset, you should use Ben’s DLL instead of mine.

The original reason I made my DLL was because I couldn’t get Ben’s DLL to work correctly with 64-bit Windows 7. It seems that Inpout32 is now 64-bit compatible (and signed), so it may be possible to simply stick with Ben’s DLL. If you plan on going that route, I would recommend downloading the latest version of Inpout32 and grabbing the Inpout32.dll file included with that to go along with Ben’s io.dll. You’ll want to use the 32-bit version even if you’re on a 64-bit operating system. The reason for that is because the Willem software itself is 32-bit. You may need to run the InstallDriver.exe program included with it to get everything to install correctly, but I’m not an expert at Inpout32.

Testing compatibility

If you’d like, you can test your parallel port card with my Parallel Port Tester utility. Make sure all of the outputs and bidirectional pins can correctly output both high and low values. Physically check each pin with a voltmeter while you test. Every card I’ve seen so far outputs 3.3V as a high value. If your bidirectional pins don’t appear to output a high value correctly (or you get weird readbacks in the tester utility), the high value may be floating, thus indicating you need pull-up resistors on those pins. Also make sure the input pins read a high value with nothing attached and a low value when you ground them. It’s OK if the control pins don’t work correctly as inputs; the Willem programmer uses them all as outputs.

Conclusion

The information available in my original post is still very useful and should help walk you through setting up a Willem programmer with various types of cards. I just wanted to share all of my latest compatibility knowledge in a new post because it was all buried in the comments of my original post.

Trackback

3 comments

  1. Andy Brice @ 2014-08-06 09:40

    Hi Doug

    Just wanted to say thanks for this info that I’ve needed for what seems like ages.

    I’ve had a Willem Programmer for about 10 years and when I upgraded my system 4 years ago I was disappointed to find no LPT port on my new motherboard.

    I bought a cheap WCH352 based PCI parallel card on eBay and failed to get it working, which meant I’ve had to keep a older second tower system running just to program eproms. Both my systems are still running XP 32bit too.

    I got the card working with your remapped io.dll and the latest inpout32.dll. Once I’d set the base address to my card’s setting of 0xD000 in io.ini, my programmer started working fine.

    Next thing is to upgrade to Win 7 64 bit and get it working with that.

    Cheers, Andy

  2. Trey Mckenzie @ 2014-11-04 11:06

    Doug,

    I realize this is an older post, but I’ve ran into an issue. I’ve read through your post about LPT ports and the DLLs you used. The Port Test is the only thing I’ve found that can read the PCIe LPT port I have. Is there any instructions on how you created that utility? I am using VB .NET and trying to send commands to an industrial printer. The actual usage is a parallel to Centronics interface. Everything I’ve tried has failed due to the Port Address limitations, which you seem to have fixed. Any help or directions would be greatly appreciated.

    Thanks Trey

  3. The KEE Willem PCB6 works very well for 28F020 chip with included adapter. It took me awhile to get everything setup to work with Win7 64bit home-built computer, Rosewell PCIe add-in parallel port card. Review jumper settings: J1 toward “bottom” position, J2 to “top” position, J3 to bottom of card, J4 to EPROM side, J5 closed, J6 toward “bottom” of card, J7 toward “top” of card, J9 closed. Printing in PLCC adapter in same orientation as printing on card, in the EPROM chip holder. I used an external 12V supply. Fiddling around with software, I ended up with the 64bit “workaround” provided on the CD that comes with the card, along with updates/alternates provided by your notes. I also installed/built the Linux geepro counterpart along the way and got that working as well.

    Operationally, the green EPROM LED comes on with power supply. Yellow PROG LED lights during PC boot (I assume when the computer is testing the parallel port for attached hardware) and when there is chip programming activity. I spent too much time diddling with the parallel port card and software while I had J4 jumper in wrong position, but figured it out just as I was running out of steam.

Add your comment now