unit iiro8u; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, Registry, ExtCtrls ; type TMainFrm = class(TForm) Label5: TLabel; GroupBox1: TGroupBox; ExitButton: TBitBtn; Memo1: TMemo; BeginSample: TButton; RunTimer: TTimer; RelayOut: TPanel; RelayRead: TPanel; OptoIn: TPanel; Label2: TLabel; Label3: TLabel; Label4: TLabel; IsaLabel: TLabel; IsaEdit: TEdit; procedure ExitButtonClick(Sender: TObject); procedure FormCreate(Sender: TObject); // procedure AddressListChange(Sender: TObject); procedure RunTimerTimer(Sender: TObject); procedure BeginSampleClick(Sender: TObject); procedure FormActivate(Sender: TObject); private { Private declarations } public { Public declarations } end; const // myKey = 'System\CurrentControlSet\Services\NTioPCI\Parameters'; myKey = 'Software\PCIFind\NTioPCI\Parameters'; var MainFrm: TMainFrm; Address : WORD; RunFlag:Boolean; implementation uses ACCES32; {$R *.DFM} procedure TMainFrm.FormCreate(Sender: TObject); begin if (InPortB($61) = $AA55) then begin Application.MessageBox('ACCESNT.SYS not detected. Please copy ACCESNT.SYS into [NT]/system32/drivers and re-run this sample.', 'Warning', IDOK); end; end; procedure TMainFrm.ExitButtonClick(Sender: TObject); begin Close; end; procedure TMainFrm.RunTimerTimer(Sender: TObject); const value:array[0..2] of LongWord=(0,0,0); i : Integer=0; var j: Integer; y: Cardinal; msg: String; begin value[0]:=1 shl i; OutPortB(Address,value[0]); y := gettickcount + 10; repeat Application.ProcessMessages; until gettickcount > y; value[1] := InPortB(Address+3); value[2] := InPortB(Address+1); inc(i); i := i mod 8; msg:=StringOfChar('0', 8); for j:=0 to 7 do msg[8-j]:=chr(ord((value[0] and (1 shl j))>0)+$30); RelayOut.Caption := msg; for j:=0 to 7 do msg[8-j]:=chr(ord((value[1] and (1 shl j))>0)+$30); RelayRead.Caption := msg; for j:=0 to 7 do msg[8-j]:=chr(ord((value[2] and (1 shl j))>0)+$30); OptoIn.Caption := msg; end; procedure TMainFrm.BeginSampleClick(Sender: TObject); begin if not RunFlag then Address := StrToInt('$'+IsaEdit.Text); if RunTimer.Enabled=True then Begin RunTimer.Enabled:=False; BeginSample.Caption:='Perform I/O'; end else begin RunTimer.Enabled:=True; BeginSample.Caption:='Stop I/O'; Outportb(Address+3, $01); end; end; procedure TMainFrm.FormActivate(Sender: TObject); begin if not RunFlag then FocusControl(IsaEdit); end; END.