Blob Blame History Raw
Notes on libieee1284 on Windows NT/2k/XP
----------------------------------------

The support for parallel ports in NT kernels is sub-optimal.  The port API
specifies capabilities such as ECP Hardware support, but ports that show up
as using the ECP driver don't actually return this capability.  Secondly,
data writes are not supported in non-ECP modes (ie, the only modes ever 
available).  To top it all off, control lines can be set to anything you want,
as long as it's the initialisation state.  We end up with essentially no way of
transferring data in through the parallel port.

To work around these problems there are two possible solutions:

1)  Use a driver such as PortTalk to give inb/outb permission to the 
    application (http://www.beyondlogic.org/porttalk/porttalk.htm)

    This appears an ideal solution, but requires the writing, compilation,
    and installation of a driver.  Compiling a driver requires the DDK, which
    is well beyond what most people have handy in NT.

2)  Reverse-engineer the (undocumented) ParallelVdm driver used by the 
    Virtual DOS Machine to provide printer compatibility.

    This option is suprisingly much simpler to implement, but has the 
    disadvantage that like the Solaris/x86 driver, every single read and write
    requires a syscall (and reads only transfer 4 bits in nibble mode), which 
    adds up to very slow operation indeed.


I opted for option number 2 as it took advantage of existing capabilities of
the OS.  Unfortunately this means amazingly slow operation, even on fast 
machines.  If you are keen to write a driver and installation routine for NT 
which does essentially what PortTalk does and doesn't require the DDK for 
compilation, please do!

Also note that F1284_EXCL is implicit in every use of the port in NT, as this
driver only provides one process with access at a time.

Enjoy,

- Matthew Duggan
stauff1@users.sourceforge.net