{ 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.