Contributor: SWAG SUPPORT TEAM

{
There have been several posts about _real-time_ port I/O under Windows.
I've used the following scheme to control via I/O ports and tell the user what is going on via
wav files.

{----------------------------------------}
For port I/O under Delphi 1, use

var  i,j:word;

 port[i]:=j; {write to port i}
 j:=port[i];  {read from port i}

  The sound stuff (see below) was not very satisfactory - either make async, and sometimes get 
the end chopped off the sound when a second sound is started, or make sync and freeze activity 
because you have to wait until the sound has played.

{----------------------------------------}
Under Delphi 2.0 and Win95, for port I/O use something like:

procedure SetPort(address,value:Word);
var bvalue:byte;
begin
   bvalue:=trunc(value and 255);
   asm
      mov dx,address
      mov AL,bvalue
      out DX,AL
   end;
end;

function GetPort(address:Word):Word;
var bvalue:byte;
begin
   asm
      mov dx,address
      in aL,dx
      mov bvalue,aL
   end;
   result:=bvalue;
end;

and then 
var i,j:word;
begin
   Setport(i,j);
   j:=GetPort(i);
end;

{----------------------------------------}
Under Win NT, you have to use a Vxd for port I/O.
See Dr. Dobbs Journal, Nov. 1995 for an exxample which contains no port I/O.