The PortIO95 FAQ

Section Summary

Questions about What PortIO95 Is and Does
[01.01] What is PortIO95?
[01.02] What are the main features of PortIO95?
[01.03] How does PortIO95 do what it does?
[01.04] Why was PortIO95 written?
[01.05] How can I contact the author of the PortIO95 VxD?

Questions about Licensing and Warranty

[02.01] What is the PortIO95 license?
[02.02] What is the PortIO95 warranty?
[02.03] I used PortIO95 and now my parallel port/computer/printer does not work anymore. Will you buy me a new one?
[02.04] I used PortIO95 to control something important. It used to work and now it doesn't. You have to provide me with technical support.
[02.05] Can I distribute PortIO95 as part of a compilation of shareware/freeware on a CD or on a disk on the front cover of a magazine?

Version and Operating System Questions

[03.01] What is the current release version of PortIO95?
[03.02] Will PortIO95 work under Windows 3.0, 3.1 or 3.11?
[03.03] Will PortIO95 work under Windows NT?
[03.04] Will PortIO95 work under Windows 98?
[03.05] Can I write a program which runs in the Windows95 DOS window that accesses the parallel port through PortIO95?
[03.05] Can I use Windows 95 as a real-time operating system?

Compiler Questions

[04.01] What compiler do I need in order to get the sample programs working?
[04.02] How can I talk to PortIO95 using Visual Basic?
[04.03] How can I talk to PortIO95 using Delphi?

Sample Source Code Questions

[05.01] Where is the source for the portio95.vxd?
[05.02] Are there any Include files for other languages that define the PortIO95 VxD control codes?
[05.03] I have written an application that uses PortIO95 will you include it in the distribution?

PortIO95: 'How do I' Questions

[06.01] Can PortIO95 use the Data Register as inputs?
[06.02] Can PortIO95 handle interrupts?
[06.03] How do you load the PortIO95 VxD?
[06.04] How can I tell what version of PortIO95 I have?
[06.05] Can I use PortIO95 on a network LPT port?
[06.06] What is the purpose of the RAW and COOKED in some control codes?

Parallel Port Information

[07.01] ....?
Internet Parallel Port Resources
[08.01] Web Sites
[08.02] FAQS
[08.03] FTP Sites

Questions about What PortIO95 Is and Does

[01.01] What is PortIO95?

Portio95 is a VxD for Windows95 that provides an API to 32 bit windows programs which allows them to manipulate the parallel port. An appropriately written program can use the API to write and read a specific parallel ports data, control and status registers. The API also provides calls to set/reset or read specific bits which can save on annoying amounts of bit "twiddling" at the application level.
[01.02] What are the main features of PortIO95?
  • PortIO95 is not compiler specific - you should be able to use it to control the parallel port using any 32 bit compiler designed for Windows 95
  • PortIO95 (by default) compensates for hardware inversion on the various parallel port pins. Thus, what you send to the port actually appears there, similarly if a read returns 1 you know there really is a logic high on the port.
  • PortIO95 contains control codes to manipulate each of the pins individually.
  • PortIO95 contains control codes that can send and receive bytes and nibbles of data.
  • PortIO95 also provides raw register access to the parallel ports Data, Status and Control registers.
  • Find out more details in the overview section of the manual.
  • [01.03] How does PortIO95 do what it does?
    PortIO95 is a 32 bit VxD that operates at Protected Mode Ring 0. Thus it has full access to the entire PC data and I/O address space. The application program communicates with the PortIO95 VxD through the Windows 95 DeviceIoControl() call. The DeviceIoControl() call is a Windows 95 built-in call designed for this purpose. Any 32 bit complier designed for Windows 95 will have access to it.
    [01.04] Why was PortIO95 written?
    Because I wanted it. Find out more in the background section of the manual.
    [01.05] How can I contact the author of the PortIO95 VxD?
    E-Mail Dale Edgar at ec63@dial.pipex.com. Please be aware that due to circumstances beyond my control I can only answer mail on weekends. Please also see section [02.04] of this FAQ before asking for support.


    Questions about Licensing and Warranty

    [02.01] What is the PortIO95 license?
    A summary of the PortIO95 license is:

    The PortIO95 VxD software is the copyrighted property of Net 2000 Ltd. and may be freely used and redistributed for any non commercial purpose. If you wish to use PortIO95 for commercial purposes, you should purchase a software license from Net 2000.

    See the License section of the manual for a more complete discussion.

    [02.02] What is the PortIO95 warranty?
    A summary of the PortIO95 warranty is:

    There is no warranty - you use PortIO95 entirely at your own risk. Net 2000 Ltd. does not warrant PortIO95's suitability for any purpose, does not guarantee PortIO95's uninterrupted functionality, or even its functionality. Net 2000 Ltd. is not liable for any damage or loss that may occur to you, your computer or the things that your computer is controlling.

    See the Warranty section of the manual for a more complete discussion.

    [02.03] I used PortIO95 and now my parallel port/computer/printer does not work anymore. Will you buy me a new one?
    No. See section [01.02]. There is no warranty of any kind on the portio95.vxd or sample code. Use is entirely at your own risk.
    [02.04] I used PortIO95 to control something important. It used to work and now it doesn't. You have to provide me with technical support.
    Sorry! Support might be provided if there is time, but there is no obligation to do so. Please do not ask for help unless you have exhausted all other sources. Also note that due to circumstances beyond my control, E-Mail can only be answered on weekends. See the Background section of the manual for more details

    PortIO95 is just a tool I wrote for my own use and decided to release to the net in the thought that other people might find it useful as well. If works great! - if not, sorry. If you are really controlling something super important consider licensing the source then you will have full control over every aspect.

    [02.04] Can I distribute PortIO95 as part of a compilation of shareware/freeware on a CD or on a disk on the front cover of a magazine?
    Yes. Please read the License section of the manual before you do.


    Version and Operating System Questions

    [03.01] What is the current release version of PortIO95?
    The current release of the PortIO95.vxd is v00.90 beta as of Nov 23 1997.
    [03.02] Will PortIO95 work under Windows 3.0, 3.1 or 3.11?
    No. Portio95 is a 32 bit protected mode VxD designed for Windows 95 only.
    [03.03] Will PortIO95 work under Windows NT?
    No. The device driver structures are quite different and are not at all compatible. No VxD which works on Windows 95 will work under NT.
    [03.04] Will PortIO95 work under Windows 98?
    Probably not. However, If there is sufficient interest I might release PortIO98.
    [03.05] Can I write a program which runs in the Windows95 DOS window that accesses the parallel port through PortIO95?
    Yes and No. Yes, you can write a 32 bit console application which does - there are several sample applications included with the PortIO95 VxD. Note that these compile up as 32 bit applications.

    No, you can't make it work with GWBasic or QBasic programs running in the DOS window. The PortIO95 VxD only has a 32 bit interface and relys on the use of the DeviceIoControl() function that Windows 95 only provides to 32 bit programs.

    [03.05] Can I use Windows 95 as a real-time operating system?
    The following quote from the comp.os.ms-windows.programmer.vxd FAQ says it all:


    Compiler Questions

    [04.01] What compiler do I need in order to get the sample programs working?
    The sample programs are coded in C. Visual C++ 4.0 from Microsoft was used to test them all. Probably any 32 bit C compiler will work.
    [04.02] How can I talk to PortIO95 using Visual Basic?
    ??? I don't know, This might or might not be possible. Can VB make DeviceIoControl() calls? Anybody want to try this and let me know. I'd be happy to do up a section on this and include sample code if someone wants to send me some. Please E-Mail first before you send.
    [04.03] How can I talk to PortIO95 using Delphi?
    ??? I don't know, I would be supprised if Delphi 3.x couldn't do this. Certainly the portio95.h file will need changing. I would be happy to include sample code and an appropriate header file if someone wants to send it to me. Please E-Mail first before you send.


    Sample Source Code Questions

    [05.01] Where is the source for the portio95.vxd?
    The source for the portio95.vxd is not available for general release. It probably would not be all that much use to most people. It is written in MASM assembler and requires the Windows95 SDK and DDK kits (ie an expensive Microsoft MSDN Professional Subscription) in order to compile.
    [05.02] Are there any Include files for other languages that define the PortIO95 VxD control codes?
    Not Yet! If you wish to convert the C language portio95.h include file to a different language and send it in I will be happy to include it in the distribution. Email before you send. See also sections [04.02] and [04.03]
    [05.03] I have written an application that uses PortIO95 will you include it in the distribution?
    Ahhh No. I do not really want the PortIO95 distribution getting too big. I would be happy to list a pointer to your web page in this FAQ along with a brief description. If you convert the minimal functionality sample code into a new language then it might be possible to include it in the official distribution.


    PortIO95: 'How do I' Questions

    [06.01] How do I use the Data Register as inputs?
    It is only phyisically possible to do this on some Parallel Ports and is not supported in this version of PortIO95. This feature will probably be added in at a later date. The current version of PortIO95 offers a choice of a byte of output and a byte of input or a byte and a half of output and four bits of input.
    [06.02] Can PortIO95 handle interrupts?
    Not in this version. However, it is expected that this functionality will be added in a future release. Pin 10 (Status register bit 6) has been removed from the functionality of all PortIO95 byte and nibble read control calls in anticpation of this.
    [06.03] How do you load the PortIO95 VxD?
    Easy! PortIO95 was written to be dynamically loadable. This means there are no registry settings to mess with. Basically, you just open it as you would a regular file. A special (and slightly annoying) syntax on the file path name tells Windows 95 that PortIO95 is a VxD and not a regular file. See the Loading the PortIO95 VxD section of the manual for a more complete discussion and the sample code for examples.
    [06.04] How can I tell what version of PortIO95 I have?
    You can tell which version of PortIO95 you have by loading the actual PortIO95.vxd file up into a text editor (it's only 12 Kbytes) and searching for the string 'PortIO95'. Alternately you could compile and run the porttest sample program which will print the version information out on the screen.
    [06.05] Can I use PortIO95 on a network LPT port?
    No. PortIO95 is not designed for this.
    [06.06] What is the purpose of the RAW and COOKED in some control codes?
    The PC parallel port does a lot of hardware inversion (NOT'ting) of various pins. In general, PortIO95 compensates for this. Control codes that do this are all considered to be 'COOKED'. Those control codes that provide no compensation are considered to provide 'RAW' access to the underlying parallel port registers. No, I did not make those names up.


    Parallel Port Information

    [07.01] ....?
    Not written yet. I appreciate your patience.


    Internet Parallel Port Resources

    [08.01] Web Sites
    Jan Axelson's Parallel Port Central Page.
    [08.02] FAQS
    Zhahai Stewart's Interfacing the IBM PC Parallel Printer Port FAQ.
    Jan Axelson's Parallel Port FAQ.
    [08.03] FTP Sites
    Richard Steven Walz's massive PC parallel port repository. Its worth taking a look around the rest of the directorys too!


    [Net 2000 Ltd. Home] [PortIO95 Home]