Port Address Translation or Port Access Redirection
Modern parallel port cards for either PCI, PCIexpress, and ExpressCard (via PCIe)
have fixed port base addresses above 0x1000, e.g. 0x3008.
You cannot set their address to one of the well-known ISA addresses
0x378 or 0x278.
(Note the address 0x3BC is not capable for
EPP and ECP.)
Some older software cannot use an arbitrary port address, and you run into serious trouble.
For example, the well-known avrdude command-line chip programmer.
New inpout32.dll
Possibly you already know inpout32.dll,
a well-known port access enabler that runs instantly without any installation hassle.
You can check the current address translation by invoking the following command line:
»rundll32.\inpout32.dll,Info«.
This interactive debug console will be shown.
A
new version
(since March 2013) of my fork of well-known inpout32.dll
has a built-in automatic address translation!
Moreover, this DLL can run software under Windows 64 bit
which will fail otherwise, even on a true on-board parallel port.
For example:
Velleman Oscilloscope “PCS500”
Access software “Wild GIF 12” for Leica survey instruments
A process-wide exception handler with
x86 op-code decoder does the
trick.
If you don't need address translation on a Windows 64 bit
system, the new giveio64 driver (available since May 2015)
will solve your problem more convenient and without any speed loss.
Therefore, applications relying on this library
will run with such PCI / PCIexpress cards with no further setup.
This also applies to 64 bit versions of Windows, and true 64 bit applications
(latter use inpoutx64.dll instead, also contained in ZIP archive).
Support for USB→ParallelPrinter converters
(limited to 8 output and 3 input lines,
requires extra circuitry
but will not require any administrative privilege)
Built-in Java Interface (JNI) with variable package name,
compatible to jnpout*.dll (checked and OK)
Microcode-based high-speed API for all LPT devices
Compatible to dlportio.dll and io.dll, inpout32.dll can be renamed to replace those DLLs
Able to run in user mode when an administrator has set-up inpout32.dll
to load its driver at system startup instead of at DLL startup
This program
can redirect the port accesses for you,
and does it universally for all known cases (DOS Box, Win16, Win32, VxD, other kernel-mode driver) in kernel mode.
The bad news: Currently, this software runs on Windows 3.1 (Enhanced Mode),
3.11, 95, 98, Me, NT 3.51, NT4, 2000.
But not on XP and newer. Not on SMP machines.
ECP and EPP parallel port extensions are not supported.
This program, written for a completely other purpose, has to be set-up as follows:
Trapping: „586 debug register“ or „386 IOPM Table“
Operation: „OFF“
Speaker: what you want
Load and start driver at startup: ON if you don't want to run this program everytime you need redirection
Main address: Emulation at [LPT1]: Address you want
Modify: Physical address: Address you have (see Device Manager)
It is a 16-bit program, but you won't see that. It's open-source. Look at the nice screenshots below:
This kind of port access redirection is quite fast, so you can run
high-speed parallel port devices like JTAG programmers and oscilloscopes,
in opposite to the more amazing USB2LPT device.