After playing around with a ton of parallel port cards in an attempt to figure out Willem programmer compatibility, I decided it would be useful to write a parallel port tester program. Just a simple utility where you can set the output value of each output pin and read the value of each input pin. Several other test programs exist, but I wasn’t happy with their interfaces, and a lot of them weren’t prepared to easily handle PCI/PCI Express/ExpressCard parallel ports. At worst, they only supported the standard parallel port I/O addresses that new motherboards don’t have anymore. At best, they supported custom parallel ports but required you to manually look up the I/O address range of the card.
Oh, and a lot of the existing tools don’t work with newer versions of Windows. I wanted a tool compatible with newer versions of Windows, both 32-bit and 64-bit.
Introducing Parallel Port Tester:
Simply locate your parallel port in the list that appears in the bottom right. I use several methods to discover parallel ports and their I/O ranges, so you shouldn’t need to enter them manually. If for some reason your port doesn’t show up in the list, you can manually enter the base address of your parallel port (e.g. 0x3000) and hit Enter.
You can toggle parallel port outputs on or off by clicking on the circle representing the pin you want to change. Green represents on (high), black represents off (low). The circles representing input pins are automatically updated while you have the port selected, so you can easily test your inputs. You can also choose whether to use the four control pins as inputs or outputs.
For people who are really interested, I also display the raw register values of the three standard parallel port registers. I show separate values for the control register because what you write to the control register is not guaranteed to be what you read back.
Requirements
Let’s get the requirements out of the way. You will need:
- Windows 2000 or newer. Should work with 2000, XP, Vista, 7, 8, 10, 11, and the various newer server versions. 32- or 64-bit Windows are both supported.
- Microsoft .NET Framework 2.0 or newer
Download
OK, so you’re ready to download it? Here you go.
Download Parallel Port Tester version 1.0.0.2 installer
Special Thanks
Parallel Port Tester includes InpOut32 1.5.0.1 by Phil Gibbons in order to access the parallel ports directly.
Version History
- 1.0: Initial release
- 1.0.0.1: Improves parallel port detection algorithm; previous algorithm was incorrect in certain cases.
- 1.0.0.2: Fixes a bug that was causing a crash for some users.
- Note: On 1/17/2022, I added an installer for version 1.0.0.2. Prior to this, you needed to manually download and install InpOut32.
Any problems/questions/concerns? Please let me know in the comments below and I’ll try my best to help get you going. Be careful; it might be possible to fry your parallel port if you hook the outputs up wrong. I’m not responsible for any damage done to your computer by using this software.
For sample code that describes how I detect the computer’s parallel ports in Parallel Port Tester, see my blog post: Detecting parallel ports and their I/O addresses in Windows.
Old Installation Instructions
Prior to 1/17/2022, there was no installer, so you had to install the software manually by downloading and installing InpOut32. Nowadays, you can just download the Parallel Port Tester installer and this will all be handled for you automatically. The old installation instructions are preserved below for historical reference:
- Download the old ZIP file of Parallel Port Tester 1.0.0.2 that didn’t use an installer.
- Download InpOut32.dll.
- Note that I am linking to the best version of InpOut32.dll. It should be compatible with all versions of Windows supported by my program.
- If you are using Windows Vista or newer, you will need to run the InstallDriver.exe program inside the Win32 directory of InpOut32’s distribution in order to install the driver. You only have to do this once, and it’s just so you can get administrator privileges in order to install the driver. Even if you are on a 64-bit operating system, that’s OK. Still run InstallDriver.exe from the Win32 directory.
- Put InpOut32.dll from the Win32 directory into the same directory as ParallelPortTester.exe. Don’t use the x64 directory; that DLL would only be for a 64-bit program, but Parallel Port Tester is not a 64-bit program.
Hi Doug,
I have been trying to equip my Win 7 64 PC to run some old Analog Devices software that wants to communicate with an eval card via a parallel port. I installed a Rosewill RC303 PP PCI card which seems to function Ok, but it puts the port address up at 0xD030. Your Parallel Port Tester finds it and I can toggle all the pins. Thanks for a great piece of software. However the AD softwate does not seem to be able to deal with the non standard port address. I installed Windows Virtual Machine and their XP OS for it. Under XP running virtual the port appears at 378h according to the Device Manager but the AD software still does not find the port.
I tried to install your test software in the XP OS running virtual to see what was happening, but I have been unable to get it to load. It throws an error “unable to initialize”. I am using the recommended version of inpout32.dll. Do you know of anybody else’s experience of running your software in the virtualized XP OS?
Sorry for the long winded question. Thanks,
Dick Grubb
Hi Dick,
Yeah–the nonstandard port addresses always throw a curveball with older programs 🙁 Good idea on making an XP virtual machine, as long as the VM software you’re using supports forwarding parallel port access. I believe I’ve tried the software in a Windows 8 VM (with VMware Player) in the past and it worked. I am pretty sure I’ve also tested it on a real Windows XP computer. It does require .NET. Have you installed .NET framework 2.0 or newer? I don’t believe XP came with it by default. If that doesn’t work, you might want to consider trying VMware Player.
Hi Doug,
Would it be possible for me to take a look at your source code for this project? I downloaded your program and it works great with my card and relay board. I’m writing a simple program in c# to do the same thing. However when I run my program the led on the relay lights up then shuts off again. It should just stay lit. Any help would be great!
Thanks
Hi,
I’ve been trying to run the program on Win7 64bit, after installing Inpout.dll as mentioned. When I run it, I only get the “ParallelPortTester has stopped working. Windows is checking for a solution” error. Any idea what could cause that?
Thanks,
Nitzan
Hi Nitzan,
Unfortunately I’ve never seen that problem before. I’m not exactly sure what would be causing it to happen. I’ve seen that happen in the past if I run a .NET program on a computer without .NET installed, but Windows 7 would come with .NET installed already. I could try to build some other binaries for you to help find exactly where it’s crashing, but I won’t be able to get around to that until next week if you’re interested.
Hi Doug, your program is amazing and works fine. I’m trying to achieve parallel port detection in my program and I was wondering if you could share your experience about this.
Thanks a lot.
Regards,
Arc.
Hi Arc,
I’ve gotten several requests and just haven’t had time to fully describe the detection until now. I just wrote a new blog post about how to detect parallel ports. It describes the algorithm I use in Parallel Port Tester. I hope this helps!
Hi Doug, thansk for your fast answer. I finally managed to do it through WMI yesterday. I just missed replacing the two backslashes.
Your post is very helpful though and much more optimized than mine.
Fantastic job Doug!
Hi Doug,
I tried to run the program on my Win XP 32-bit machine but get the error parallel port tester has encountered an error and needs to close. I have put the recommended 32-bit InpOut32.dll in the program directory.
Any ideas?
hi Doug,
thanks for this great piece of software, it works perfectly on windows 8.1! Unfortunately i tried to run your program on a virtual machine using vmware with windows XP sp3 and it doesnt work yet, it crashes with a standard ms message: “ParallelPortTester has encountered a problem and needs to close. We are sorry for the inconvenience.” Net Framework was successfully installed on this vm, any hint?
thanks in advance
Simone
Hi Chris and Simone,
I am able to reproduce this problem in my VMware virtual machine running XP. I’ll see what I can do to fix it. I’m not sure exactly what’s causing it.
Hi again,
I found the problem. It’s actually fairly embarrassing — there was some debugging code in earlier versions of the program that I accidentally left in. For some reason, the thing I was trying to debug seems to be nonexistent in at least some installs of XP (I swear, this program was working fine on my other computer with XP). I simply removed the unnecessary debugging code, and now everything is working fine in my VMware install.
I have updated this post with version 1.0.0.2 which should fix the problem. Hopefully, it will fix the crashing bug for you too!
hi Doug,
it works! 😀 perfectly, it seems like my parallel port is working on XP too 😀
thank you very much!
mmm.. do u have a paypal account for donations? 😀 i owe you a beer
Doug
I think your test program is what I am looking for to directly write to the lpt port in windows 8.1 . I am wondering if your program has any “arguments” or “switches” so it can be launched with a shortcut or batch file and have outputs change state. For example if i have a relay attached to an output pin of the lpt port and i want to control it with a batch (cmd) file is there a way to use the port tester or will it only work manually?
Unfortunately it does not have any switches for running automatically from a batch file. I’d recommend writing a small program that uses a library like Inpout32.dll to do it.
Hi,
would you have any idea why all input pins of the parallel port (including the 4 control pins) stay green irrespective of the input given?
I have a 64bit windows 7, tried already 2 parallel port pc cards using different slots on the mainboard and different drivers – but the ttl pulse on the acknowledge pin 10 remains invisible for the pc…
Also 4.5 Volt DC current stimulation (series connection of batteries, one wire into a female connector for ground, other wire into a female connector for an input pin) yields no change from green to black, on none of the female connectors, i.e. for no input pin…
Have you ever seen something like that? What do i miss?
Thanx for any idea,
susanne
Have you tried directly connecting an input pin to ground to make it go black? If the input pins don’t go black when you ground them, I’m not sure what would cause that…
Have you verified the cards are set up to work in SPP (standard parallel port) mode? Other modes might not work the same way.
Hi,
the trick was to activate the cards plug-and-play mode in the windows device manager – even though it was correctly installed and shown as functional, it didn’t work properly before chosing legacy plug-and-play mode…
Thank you so much for your help!!!
susanne
PS: I already recommended your software to four IT guys with whom i discussed the problem and all of them really liked it! 🙂
Hi Doug,
Do you have any experience, or can you offer any advice about running your Parallel Port Tester under Windows 10/64?
I’ve gotten tied up in a customer support snafu and was hoping to use your tester on their Win10 system to double-check what was actually getting written to the port.
Thanks,
Bruce
Hi Bruce,
I haven’t tried it myself, but as far as I know it should work fine. The only reason I didn’t list Windows 10 as compatible is because I wrote the program before it came out. As long as Inpout32 works properly, Parallel Port Tester should too. If you end up determining that it doesn’t work, please let me know and I will investigate.
Hi again Bruce,
I just tested in a Windows 10 64-bit VMware virtual machine on a Linux guest with Inpout32 1.5.0.1, and Parallel Port Tester appears to work just fine. I will go ahead and update the compatibility information on this page to add Windows 10 as a compatible OS.
Doug,
How do I access inpout32.dll from a legacy machine language program that has an OUT DX,AL, with DX=0378h.
Your parallel port tester works great. I have inpout32.sys in the \system32\drivers file of windows7, but that apparently is not enough.
Joey.
Will this work on dos 6.2 and/or windows 3.1?
We have an old 486 computer that runs a coil winder machine. We replace a crashed hard drive and reinstalled the software and files on the replacement drive, but the coil winder doesn’t run. We are trying to determine what the problem is and want to test the Parallel port.
Unfortunately this only supports modern-ish operating systems. I’m sure there are other, older programs that will work on hardware that old.
I just bought a sunix pci parallel port board (SUN1989 chip) It installed fine on windows 10 and I can see it in device manager. When I try your parallel port tester it will not detect anything. I stepped through the code laid out in your other blog. I can find the port by name LPT3, but when it gets to finding the associated resources it find nothing. resourceQuery looks like ASSOCIATORS OF {Win32_PnPEntity.DeviceID=”SNXPCARD_ENUM\\SNXPCARD_PARPECP\\1FD4&1999_01001FD4_0000E4_PORT0″} WHERE ResultClass = Win32_PortResource.
I saw a comment about turning on legacy plug and play on the card, but no difference.
Do you have any tips for me?
Hi Bart,
Hmm, I’ve never seen a port that fails to auto-detect. Very interesting. In Device Manager, what does LPT3 show on the Resources tab? There should be an I/O range there. If you find one, you should be able to enter the beginning of it manually in the “Port:” combo box at the bottom right corner of the window.
Hi Doug,
If I look in device manager I find “SUNIX LPT port (LPT3)” but I could not find any resources shown. After some digging in the manual I finally noticed a screenshot showing that for the resources I had to look under multifuncton adapters which shows a “SUNIX 1-Port Parallel Card”. This node defines a resource number (0xC020) which when typed in your application dropdown gives me the parallelport status. It works, but it seems I will need a different resource query for this adapter than your code provides for. To bad I find WMI very untransparent
Hi Bart,
That’s really weird. This is the first time I’ve seen a parallel port chipset where the LPT device itself doesn’t have the address range associated, and instead it adds a separate device in a different section of Device Manager that has the I/O range.
If there is some way to programmatically get a reference to the associated “SUNIX 1-Port Parallel Card” Multifunction Adapters object by starting from the LPT3 port object, I could add a special case for this chipset into Parallel Port Tester for SUNIX cards and update my blog post. Unfortunately I don’t have a card that uses this chipset so it’s going to be difficult to look into it.
Does the Win32_ParallelPort class work properly for detecting the address? I ended up disabling its detection because it was broken in certain cases. I wonder if it properly detects the port.
No, you were quite right about Win32_ParallelPort, that one does not work at all.
When I remove Win32_portresource from the where of the resourceQuery I get four results.
The classnames are as follows. CIM_Datafile, Win32_Bus, Win32_ComputerSystem and win32_systemDriver. (for the record I’m running win10 x64).
If I get more information about it I will forward it here. Thanks for replying
Thanks Bart. If you figure something out, please let me know so I can update this program (and my instructional blog post) with a workaround for these cards. Honestly I feel like the chipset manufacturer is doing it wrong by not putting the port address as part of the port itself…
I downloaded wmiexplorer 2.0 from github and basically search for sunix and win32pnpentity. That got me two items
SELECT * FROM Win32_PnPEntity WHERE Caption like ‘%SUNIX%’
The first one class ports and the second one class multifunction (I believe this card is also sold in variant with a second parallel port and maybe some serial port).
Direct query for multifunction:
SELECT * FROM Win32_PnPEntity WHERE Caption like ‘%SUNIX%’ AND ClassGUID=”{4d36e971-e325-11ce-bfc1-08002be10318}”
I can than do an query for its associators (all learned from your post)
ASSOCIATORS OF {Win32_PnPEntity.DeviceID=”PCI\\VEN_1FD4&DEV_1999&SUBSYS_01001FD4&REV_00\\5&29DF5497&0&0000E4″}
and that gets me several port resources among which is the correct one.
I have little Idea about WMI an no clue how to “jump” from one device to the other. So I do not think this is to usefull for you, other than if you meet someone with a similar card. I will mail the manufacturer, but I don’t expect much from that.
Thanks again.
I have tried your parallel port tester and it works great.
I would like to read/write from the port(0378h) using an assembly language subroutine which would be callable from higher level programs. Can you tell me the calling sequence and argument arrangement for Inpout32 or is that only available in C?
Joe
Hi Joe,
I don’t know off the top of my head, but you should be able to figure out the calling conventions of Inpout32 by looking at its header file. With that, it would be possible to call it from assembly. At the very least, you could just write a simple C program that calls it and then see what the generated assembly does.
I don’t have a c compiler. I don’t code in c. I still code in fortran and call assembly language subroutines.
Did you code a subroutine to handle the OUTP calls to the port? If so, can I see this subroutine?
Hi Joe,
Unfortunately that’s beyond the scope of Parallel Port Tester. I’d suggest checking out any Inpout32 documentation/examples.
Hi Doug,
Would you please give a “for dummies” type tutorial to a layman like myself, who has no programming skills, on how to interpret your software results? For example, which pins should be green and which black on a healthy parallel port?
I’m in a world of pain trying to get two CAD programs in a VMware Player Windows XP guest VM to recognise their respective Sentinel dongles (hardware locks/keys) plugged into a parallel PCI (not PCIe) card on the host. The card has jumpers, currently set to IRQ 278.
Frustratingly, both dongles work just fine on one computer, a Dell T7610 workstation, but refuse to get recognised on a newer T7910. Both machines have almost identical specs, identical PCI cards, and Windows 10 64-bit build 1809. By the way, I have also swapped out the PCI cards to make sure that neither was dead, but the problem persists. Help!
Brian
Hi Brian,
I don’t have time to do a comprehensive tutorial, but I can try to do a brief overview. There is no right answer for what pins should be green and black — it’s going to depend on what signals are coming into your port.
All of the pins labeled as “Output” are under your control. You can click them to toggle between on and off. When you do this, you should notice the voltage change on the corresponding pin on your parallel port. You can measure this with a multimeter in voltage measurement mode. You should see something like 3.3V or 5V if the pin is green, and 0V if it’s black.
The input pins will automatically change between black and green based on the detected input voltage. You should be able to feed in one of the output signals to an input by hooking their pins together, and the input will change as you change the output.
The pins that are input/output can be configured to be either an input or an output, and they behave as described above.
Thanks for the quick reply Doug. I think it’s best if I leave things alone then, since I do not have confidence in my own technical abilities. The last thing I want is to make things worse!
Brian
Hi Doug,
Thank you so much for this amazing piece of software. It really helps when trying to validate parallel port outputs and ttl debugging.
I seem to be having a small issue. For some reason, my parallel port seems to default pin4 (data bit 2) to a high state. Not sure if this is related to your software at all, but was wondering if you could help out? Everytime I start up my computer and open up the program and identify my parallel port address, pin 4 is defaulted to high, but I would like it to be defaulted to a low. Any ideas?
Thanks!
Evan
Hi Evan,
Thanks for your kind words! That isn’t really related to Parallel Port Tester as far as I can tell. The first thing I do when I open a port is read the current value of the registers in it and use it as the current state. So if it’s showing up as high when you open the app, it means it was already high before you opened it. I suspect something else is defaulting it to high.
Hello Doug,
I downloaded the “parallel port tester” today and cannot get it to work.
My system is Windows 10/64 bits running on a HP 400 G1 Pc. In addition to your program I :
– downloaded and installed Microsoft . Net Framework 4
– included Inpout32.dll in same folder as program.
When i click on “parallel port tester” , nothing is happening. After mouse click, the waiting symbol is showing for a few seconds and then all stops.
My PCI parallel board seems to be correctly installed at I/O address DEFC.
Can you help? i am not system expert and your help is welcome.
Thanks
Hi Pascal,
Hmm…I’ve never seen this happen before. Did you run InstallDriver.exe included with Inpout32 (in the Win32 directory)?
Hi Dough,
Thanks for reply.
Having Windows 10 , the directory is named Windows/System32 i suppose. correct ?
Can you please explain me better the procedure i should apply to run “InstallDriver.exe included with Inpout32” . Never done such things before.
Sorry for my lack of knowledge.
Hi Pascal,
When you download Inpout32 from the link I provided, it comes in a zip file. After extracting the zip file, there should be a folder called Win32 inside there. That folder contains the dll file you should use. It also contains a program called InstallDriver.exe that you should run to install the Inpout32 driver.
Hi Doug
your software works well .I want to use inpout32.dll in c# for my application.
I do now know how can I call functions into DLL files in C#.
Do you write software in C++ or C#?
Hi Alireza,
Parallel Port Tester is actually written in C#. See http://www.highrez.co.uk/Downloads/InpOut32/default.htm for .NET example code.
Hi Doug,
I came across this site a couple of days ago. Very nice. I installed a StarTech PCIe parallel port adapter in my old XP PC and then successfully ran your Parallel Port Tester. Sweet. I’ll try it on my Win7 PC latter.
I have a question. What is the sequence that you follow such that you can read and write the parallel port? I’m not a windows programmer (although I do write console apps). I go in circles on MSDN and Microsoft docs. With the number of people that used the parallel port for bit banging, I would have thought there would have been dozens of forums discussing the subject. I’ve found none.
Any help you can provide would be greatly appreciated.
Thanks,
Jeff
Hey Jeff,
Basically there are three byte registers (for example, at 0x3000, 0x3001, and 0x3002 if the parallel port base address is 0x3000). Register 0 is the data register, register 1 is the status register, and register 2 is the control register. You have to do whatever your OS requires to do direct port access. I use InpOut32. Here is what I do when bitbanging:
The 8 bits of the data register are outputs (in standard SPP mode). You just set or clear the bits to change their state. 1 = high, 0 = low. That’s the easy part.
The status register contains the input status of busy (bit 7), ack (bit 6), paper out (bit 5), select in (bit 4), and error (bit 3). Bit 7 (busy) is inverted, so if it reads 1, the input is actually low. On the rest of them, 1 = high, 0 = low.
The control register contains the “bidirectional” signals. Select = bit 3, reset = bit 2, linefeed = bit 1, strobe = bit 0. All of them are inverted except for bit 2 (reset).
The bidirectional control register signals are interesting. They are supposed to have pullup resistors (although some cards don’t have them), so you can actually ask them to be driven low if you want. If they are high, they are basically simultaneously an input and a high output (because of the pullup resistors). On the inverted control signals, writing a 1 bit turns them into a low output, writing a 0 bit turns them into a pulled-up input. On the noninverted reset signal, writing a 1 bit turns it into a pulled-up input, writing a 0 bit turns it into a low output.
Note that because of this, the value you write into the control register might not match the value you read back. If you tell the reset pin to be a pulled-up input by writing a 1 to bit 2 of the control register, and ground is connected to it, you will read back a 0 bit indicating the input value is low even though you just wrote a 1.
It’s probably a good idea to make sure bits 4 and 5 of the control register are also written as zero to disable interrupts and the bidirectional data port (which is not always available).
Hope this helps! For which pin is which, this Wikipedia article works well.
Hi Doug,
Your neat program works fine on the Legacy port of my Dell win 7 64bit machine. But does not work when I install and run the PC with a Lava Dual parallel port PCI card. There is no response to either ports. I tried it on 2 cards the last one was from a new old stock sealed card.
The device manger indicates
Legacy port
ECP Printer Port (LPT1)
I/O Range 0378 -037F
I/O Range 0778 -077F
Lava Card
Lava DParallel Port A (LPT2)
I/O Range CCF0 -CCF7
Lava DParallel Port B (LPT3)
I/O Range CCF8 -CCFF
Could the problem be that there is only one I/O Range indicated for the PCI card ports?
Your tester program indicates
LPT1 (0x378) only the 1st range
LPT2 (0xCCF0)
LPT3 does not show up unless I disable LPT2
After disabling LPT2 Then
LPT3 (0xCCF8)
Do you have any ideas what the problem may be?
The Lava card will be used in an XP machine controlling a CNC mill.
Thanks, Joe C
Hey Joe,
I’m not aware of any issues with detecting parallel ports in the program anymore; that’s really weird. The original version had a problem where it would sometimes make a mistake when detecting port addresses. But either way, you can always manually type the base address into the selector box even if the program doesn’t detect it properly. It should be fine that only one I/O range is detected. If only one is available, it will pick the first one. So even in your first example when LPT3 doesn’t show up, you could still type 0xCCF8 into the box.
Is there any setting to tell the port to be in SPP mode?
Would you be willing to run this program and copy and paste the text it displays as a result? I used this when helping another user diagnose an issue with detecting different ports, which led to the release of version 1.0.0.1 where I stopped using Win32_ParallelPort to detect the ports and their addresses. Windows SmartScreen complains about it because it’s only been used by one person ever, but it’s completely safe.
https://www.downtowndougbrown.com/ParallelPortDiagnostics.exe
Either way, even if the port detection doesn’t work, Parallel Port Tester should still be able to control the pins on the port if you enter the base address manually. Is there a possibility that the card doesn’t like the motherboard you’re using it in or something? I’m grasping at straws at this point.
Hi Doug –
I have an extensive Perl program that runs fine on an old WinXP machine, works great.
I’m trying to move it to a newer Dell Optiplex 3020 (approx 5yrs old) running Win10. This box did not have a parallel port card, I’ve installed a StarTech single port PCI.
The program doesn’t seem to be talking to the parallel port, but gives no errors.
Trying to find the problem, I’ve installed your ParallelPortTester.exe, and as described above “pascal @ 2020-03-08 10:13”, nothing happens. The mouse pointer goes to the busy circle for a moment, and that’s it.
I’ve tried your ParallelPortDiagnostics.exe, and that’s showing the following:
Win32_ParallelPort:
Found Device: LPT1
Resource found: 0xE100 to 0xE103
There’s also a Win32_PnPEntity section.
I have gone round and round and round and round with InpOut32, InpOut64, etc.
Any thoughts? Thank you!
Hi Mike,
That’s strange! When you say nothing happens, are you saying that the main window of the Parallel Port Tester program doesn’t even appear? Do you have “.NET Framework 3.5 (includes .NET 2.0 and 3.0)” turned on in the “Turn Windows features on and off” settings? It needs to be on — but I’m guessing pretty much everyone already has that turned on. Just a shot in the dark!
Does the Win32_PnPEntity section from the ParallelPortDiagnostics.exe output contain any information about your parallel port? I stopped using Win32_ParallelPort because it returned invalid results for some other users. If you can get the main window to pop up, you should at least be able to manually enter 0xE100 as the base address in the lower right corner of the window in order to use it if it doesn’t automatically detect it.
Hi Doug,
Thank you VERY much for your LPT port tester..
I intend to use it with relay box to control various things in my astronomical observatory, like power, illumination, and some gadgets (focusing mask, filters etc.) from dedicated desktop.
It works OK with LPT1 port (w’7 pro, .NET 4.8), but it doesn’t recognize LPT3, created by USB-LPT-Serial adapter I purchased long time ago on ebay. Is there a workaround to solve this issue, or I simply have to use LPT cable (I would rather use USB because I have one spare on hub and LPT cable is rather thick.. but not impossible to install – only bulky).
Thanks again and best regards from Down Under,
Bojan
Hi Bojan,
The problem is that USB-LPT adapters aren’t “real” parallel ports — they’re basically just simple adapters only meant for hooking up printers through USB. So when you get special gadgets like EEPROM programmers that are hooked up over USB, they aren’t printers, so the USB adapters don’t know how to use them. Unfortunately there is no workaround that I’m aware of. It has to be a “real” parallel port with the bulky DB-25 cable in order to work with every industrial/gadget parallel port application I have ever seen, and that includes the way that Parallel Port Tester controls it.
Hope this helps, although it’s not the answer you’re hoping for!
Doug
Hi Doug,
Thank you for quick replay.
Well, so be it – I will use LPT1 port then. Actually, I need only 4 wires for the start (3 controls + GND), so the cable will not be too bulky.
Regards,
Bojan
Dear Doug,
Thank you for your LPT tester. It has been very helpful. However, I had a couple of questions regarding the same. After selecting the port, I use the output buttons to change a particular pin. But that does not change the color of the input pins on the tester. Is that indicating of a problem with the port or the parallel port card? Additionally, one of the control buttons is only on/off halfway. Does it point towards the possibility that there may be something wrong with the port? Also, while testing the port, I had connected it to a parallel port cable. I would really appreciate your inputs.
Thank you.
Prashanti
Hi Prashanti,
Without a voltmeter or some kind of test device connected, this program won’t actually test the port by itself. So if you’re changing the output buttons and not noticing any differences, that’s completely normal. You would need to measure the voltage on the output pins in order to see if it’s working. The same could be an explanation for why the control button was only on/off halfway. That means what we write and what we read back are 2 different values, but doesn’t necessarily mean there is anything wrong with the port.
Hi Doug,
Thank you for your prompt reply. Going by your advice, I connected two PCs with a parallel port cable to use the tester. And I changed the four control pins to output on one PC and input on the 2nd PC. When I toggle the control (output) pins on the first PC, the control (input) pins on the 2nd PC are automatically updated. However, if I toggle the other non-control (output) pins that does not reflect on the input pins of the 1st PC. Is that an issue or does that mean the port works?
Thank you,
Prashanti
Hi Prashanti,
That is because the data pins are only able to be outputs in standard parallel port (SPP) mode. If you have 2 computers connected directly together, they are both trying to output. They would be fighting with each other if one is outputting high and the other is outputting low. I wouldn’t recommend hooking them together like that. So what you’re describing isn’t an issue. You can’t test the “only output” pins without some external device like a multimeter or something.
Hi Doug,
Thank you the quick response. I will be using a multimeter for this purpose.
Thanks,
Prashanti
I have been using this program to try to see how inpout32 is installed and used. I have my own program written about 15 years ago that used PortTalk on a XP machine, which worked fine. I have since migrated to a Windows 11 machine and apparently PortTalk will not work on this new machine. I have another program that uses InpOut32.dll that works fine. I did not write that code. Your program works fine to read the LPT1 port on the Windows 11 machine. I have downloaded Phil’s Example code to try to access and read the LPT1 port and it does not work. I am using Visual Studio 2022 Professional for coding and debug. I see some other folks have ask for source code before. I will have to do major re-write of my code to change from PortTalk to InpOut32. I can do this but first I need to verify that some simple test version of Phil’s Example code works. It apparently does not. Is is possible to see the source for you project to help me in revising my code???
Regards,
Karin Anne Johnson
An interesting observation. I finally figured out what the Example program does and how to use it from Phils highrez website. I can read the LPT1 data port values all OK, but I cannot Write the data port values using the example program.
Any thoughts?????
Karin
Hi Karin,
I am not ready to open up the source code to Parallel Port Tester, but what it does with InpOut32 is very simple. You just use the Inp32 and Out32 functions in the DLL. To write the 8 data pins, the address is the base address. The control register at base address + 2 can be written to change some other outputs, and you can read from the status register at base address + 1 to read pins like ack, paper out, etc.
Thanks for the reply Doug. A bit of background. Many years ago I wrote a bit of code, actually a very large bit of code, that used PortTalk on XP to access the parallel ports. I have since migrated to a Win 11 64 bit machine and PortTalk will not work on this machine. I have downloaded the example source code from Phil’s highrez website and compiled with Visual Studio 2022 professional. I can read the parallel port all OK but when I try to Write the code does nothing. It does not return any error codes when debugging, just does not write the bits to the data port. Obviously your code works OK on my Win 11 machine but there must be something I am missing. I am using the Example code verbatim, not making any changes at all. That code does exactly what you suggested above. I might add that the only way I can read the port is to use the Read LONG function the other two functions cause errors.
Karin
I figured out what I was doing wrong. It is too dumb to even
list it here. But basically all is working as it should.
Thanks for your time Doug.
Karin Anne Johnson
Hi, I’m looking for a tool that can capture data on a parallel port as it is being sent to a printer. Any suggestions?
Thanks!
Hi,
I hope you are still active. I am unable to access the parallel port diagnostic tool as the URL is unresponsive. I do have loaded the parallel port tester but I am unable to confirm if a plug n play usb to parallel cable has installed as a parallel port or just a printer port. I need full duplex so I realize I may have the wrong hardware, but can I get access to the diagnoztic software to see what hex code I need to load into the test software? Also do you know of hardware (CNC or otherwise) that replicates the duplex data flow of a traditional parallel port via usb?
Philip,
I fixed the URL of the diagnostics utility. The problem was this site is an https site, but the URL was http, so Chrome didn’t want to go to the link. Now the link is https so it should work. If all else fails, copy and paste the link into a new tab instead.
Unfortunately if it’s USB, it’s not going to have a hardware address. I’m not aware of any USB to parallel adapters that actually implement a full parallel port. USB doesn’t have any notion of an underlying mapped hardware address for a plugged-in device, so I don’t think it’s possible.
[…] Port Tester ProgramIf you are unsure if your parallel port works, this program can be used to toggle the parallel port output pins 2-9. A LED or meter can be connected to one of […]
Hi,
I’m trying to use your LPT1 test software, but it always says I need to install .net 2.0 or higher when I run it. I have .net4 installed.
Brad, do you have an option to also install .NET 3.5 alongside 4.0? I seem to remember that 3.5 may be providing 2.0 compatibility and 4.0 doesn’t.
Doug, This program has saved my bacon! Very usefull!
Some PCI LPT cards have an extra control register at BASE+3 that is used to set the MODE (SPP, EPP, ECP) – it would be very usefull if your program supported that port as well.
I realize that it is a non-standard port and may vary from card to card but it is within the reserved range so shouldn’t cause any problems.
Regards,
David
Glad it helped you David! That’s definitely an interesting idea. I’m curious how cards like that are expected to be set up. Is there a utility included for setting the mode? Or is all software that uses the port expected to know about the extra control register? I know I’ve seen some onboard ports have a BIOS setting for choosing SPP/EPP/ECP/etc. I guess it seems odd to me that a LPT card would have a non-standard register like this but not provide a way to configure it.
Hi Doug!
Been trying to install this on a windows XP Professional 64 bit machine, not virtualized. Using the installer I get the following error during installation: “Failed to install InpOut32 driver. Try running InstallerDriver.exe manually.
Upon opening the program it states “Inpout32.dll was found, but the driver is not installed. If you’re on winodws Vista/7/newer, have you run InstallDriver.exe?”
Upon running InstallDriver.exe from the program file I once again get the following error: “Unable to install or open the 64bit InpoUt driver InpOutx64.sys. Please try running as administrator.”
Any help is appreciated, programs are being run as administrator.
Kevin.
Hi Kevin, very interesting. It’s possible that this might not work on XP 64-bit. I’ve never tested it. Sounds like it might be a problem with InpOut32.
Can you try downloading InpOut32 and installing it through their download? There should be a link on this page. You would want to install the 32-bit version even though you are on a 64-bit OS.
Hi Doug – I like this program. I wanted to ask some noob questions regarding general parallel port testing. I have an iOmega Zip100 drive that I cannot get to work. I wanted to rule out communication problems between the unit and my PC. What would be some first steps? Does the tester software actually show activity while peripherals are running?
Hi Christopher,
I’m not super familiar with how Zip drives talk on the parallel port. This program is designed more for diagnosing your parallel port with nothing hooked up, or if you have something hooked up and you are familiar with exactly how the communication works and know which pins you want to control.
Unfortunately I don’t think it will be super useful for diagnosing a Zip drive. One thing I thought I would mention is there were also Mac Zip drive models that had the same 25-pin connector but they were SCSI rather than a parallel port. Just something to look out for.
Very nice program.
I have a question (maybe 2) and a feature request.
1. I’m a bit confused about the description updates about the inpout.dll. Is it the case that the same dll will work for both 32 and 64 bit?
2. If not, does the program detect and select the dll to be used?
3. It seems the state of the data lines are static displaying the state at time of program launch. Is it possible to add a button to update the status of the data lines.
I’m attempting to refine my VB net (Visual Basic Express 2008) LPT control program for Jasper T Jowels which I acquired decades ago from a Chucky cheese auction. I have it working to a point but it would be really helpful to have a program such as yours update the data line states as my program toggles them. Your Pin 17 status lines update nicely.
Thanks, MIke.
Hi Mike,
Thanks!
1 and 2: Only the 32-bit DLL is necessary regardless of whether it’s running on a 32-bit or 64-bit system, because ParallelPortTester.exe only runs as a 32-bit program. The actual driver will be 64-bit on a 64-bit system. You shouldn’t have to worry about any of the InpOut DLL setup stuff now that this program has an installer.
3: Interesting — I haven’t thought about refreshing the state of the data outputs in case another program has changed them. The use case I was thinking about was more along the lines of using ParallelPortTester to manually control the pins. I could definitely put that on the list of things to improve in the future, no guarantees on when I would get to it though. I could even automatically read back the data lines periodically like I do with the inputs, although it would probably be safest to make that functionality optional in case it interferes with something. Your update button idea would work too. Very cool that you’ve been making a Chuck E Cheese control program!
Doug, thanks for the response.
1&2. I’m using VB Basic Express 2008. It will not work on a 64bit computer with the 32-bit DLL. (But does work with the 64bit DLL) So, obviously I’m not doing something right. But then I don’t know how to specify the program to be 32 bit.
3. Although space may be a problem, another suggestion would be to add to the pin descriptions which register they belong to, and what bit number they are within the register. For example, for pin 13 the description could something similar to:
“Select
Sta-4
Input”
And… It would be helpful to indicate which pins are inverted by computer hardware. It appears your program shows states as they result in computer and not what is actually on the pins (or maybe I have that reversed).
Despite all these suggestions, I want you to know that the program has been extremely helpful.
Thanks for the update Mike. Glad you figured out the DLL stuff. I will take your ideas into consideration but realistically I probably won’t have time to work on it any time soon. I will say that the program should already be showing what is actually on the physical pins, but you’re right that it can be confusing since some of the register bits are inverted. Based on the code it looks like strobe, linefeed, select-printer, and busy are inverted between the register bits and the pins. The ! in front of the names tells you they’re inverted.
Just wanted to let you know that items 1&2 have been resolved.
Thanks, Mike D.
Hi, Just stumbled on your site, pretty cool.
Wondered if you (or anyone) might know of a way to add an LPT port to a Windows 11 NUC PC with no expansion options other than USB. I have an old CAD software package that uses a parallel port dongle for security – it has to be on LPT1,2,3 or 4.
I tried this USB-to-parallel-port adapter:
https://www.amazon.co.uk/parallel-adapter-25-pin-Printer-35-43in/dp/B00JPCEIBG
but windows doesn’t load it as an LPT:, it just shows as “USB Printing Support” in device manager with no further options or settings. Any help would be greatly apreciated. Thanks.
Hi fishbeetle,
Unfortunately, the USB LPT ports aren’t real parallel ports. USB has no way of mapping to a physical address on the computer like these dongles need, so they only really support printers.
Your best bet is probably to find an older computer that has a built-in parallel port. If it’s a super old product, I wonder if someone has developed a crack to avoid needing the dongle. Seems like it would be reasonable to bypass the protection as a legit owner.
Hello Doug,
Thanks for writing the parallel port monitor.
We have been using inpou32.dll to write to motherboard parallel ports ever since Windows XP. It’s been reliable for writing to parallel ports to control equipment. We have an LED connected to Data register Bit 0 for visual confirmation of the writes.
Within the last few months, it seems that Windows 10 has been losing/swallowing writes to the parallel port, but I cannot prove that. Is there a way to monitor and count writes to a port address (0x378 in our case) to use as an external reference to compare with the number of writes done by our application?
Thanks
Hi TC, unfortunately I don’t know how to monitor reads/writes in Windows. I wonder if there is some kind of external data logger you could wire up to the port and record every time it changes, and then toggle it in a Windows 10 computer on a regular interval. What about a known good Windows XP computer constantly reading a pin as an input and logging when it changes?