Newsgroup: it.comp.lang.delphi
Titolo: [Soluzione] Vecchio comando Port[] non + suportato

Volete usare le porte ma non potete (esempio state su Kernel NT?)
beh io ho risolto egregiamente (almeno credo) il problema
prima di tutto ho scaricato una DLL:
http://www.driverlinx.com/ftp/unsupported/port95nt.exe
 (setup)
e poi ho implementato questa unit  (codice a segure) che con la sola
agiunta nella clausa Uses nel vostro porgramma vi permette di usare
Port[] PortW[] (come hai vecchi tempi) e in + anche PortL[]
naturalmente sia in lettura che in scrittura io l'ho usato per un
progettino che ho convertito da pascal a Delphi e mi sembrava giusto
condividere il mio lavoro se vi interessa bene se no pace
Unit DLPortIO;
{******************************************************************************}
{*
*}
{*  DriverLINX Port I/O Driver Interface
*}
{*  Copyright 1996-1999 Scientific Software Tools, Inc.
*}
{*  All Rights Reserved.
*}
{*  DriverLINX is a registered trademark of Scientific Software Tools,
Inc.   *}
{*
*}
{*  Delphi version by IlRazziatore ( 
IlRazz...@netscape.net
 )
*}
{*
*}
{******************************************************************************}
Interface
  Type
    Long = Cardinal;
  Function DlPortReadPortUchar  ( Port : Long ) : Byte; StdCall;
  Function DlPortReadPortUshort ( Port : Long ) : Word; StdCall;
  Function DlPortReadPortUlong  ( Port : Long ) : Long; StdCall;
  Procedure DlPortWritePortUchar  ( Port : Long; Value : Byte);
StdCall;
  Procedure DlPortWritePortUshort ( Port : Long; Value : Word);
StdCall;
  Procedure DlPortWritePortUlong  ( Port : Long; Value : Long);
StdCall;
  Type
    TCustomPort = Class
      Private
        Function  ReadPortB  ( Port : Long ) : Byte;
        Function  ReadPortW  ( Port : Long ) : Word;
        Function  ReadPortL  ( Port : Long ) : Long;
        Procedure WritePortB ( Port : Long; Value : Byte);
        Procedure WritePortW ( Port : Long; Value : Word);
        Procedure WritePortL ( Port : Long; Value : Long);
      Public
        Property PortB[Index : Long] : Byte Read ReadPortB Write
WritePortB;
        Property PortW[Index : Long] : Word Read ReadPortW Write
WritePortW;
        Property PortL[Index : Long] : Long Read ReadPortL Write
WritePortL;
      End;
    TPort = Class ( TCustomPort )
      Public
        Property PortB; Default;
      End;
    TPortW = Class ( TCustomPort )
      Public
        Property PortW; Default;
      End;
    TPortL = Class ( TCustomPort )
      Public
        Property PortL; Default;
      End;
  Var
    Port  : TPort;
    PortW : TPortW;
    PortL : TPortL;
Implementation
  Function DlPortReadPortUchar  ( Port : Long ) : Byte; External
'dlportio.dll';
  Function DlPortReadPortUshort ( Port : Long ) : Word; External
'dlportio.dll';
  Function DlPortReadPortUlong  ( Port : Long ) : Long; External
'dlportio.dll';
  Procedure DlPortWritePortUchar  ( Port : Long; Value : Byte);
External 'dlportio.dll';
  Procedure DlPortWritePortUshort ( Port : Long; Value : Word);
External 'dlportio.dll';
  Procedure DlPortWritePortUlong  ( Port : Long; Value : Long);
External 'dlportio.dll';
  {--- TCustomPort ---}
  Function  TCustomPort.ReadPortB ( Port : Long ) : Byte;
  Begin
    Result := DlPortReadPortUchar ( Port );
  End;
  Function  TCustomPort.ReadPortW ( Port : Long ) : Word;
  Begin
    Result := DlPortReadPortUshort ( Port );
  End;
  Function  TCustomPort.ReadPortL ( Port : Long ) : Long;
  Begin
    Result := DlPortReadPortUlong ( Port );
  End;
  Procedure TCustomPort.WritePortB ( Port : Long; Value : Byte);
  Begin
    DlPortWritePortUchar  ( Port, Value );
  End;
  Procedure TCustomPort.WritePortW ( Port : Long; Value : Word);
  Begin
    DlPortWritePortUshort ( Port, Value );
  End;
  Procedure TCustomPort.WritePortL ( Port : Long; Value : Long);
  Begin
    DlPortWritePortUlong  ( Port, Value );
  End;
Initialization
  Port  := TPort.Create;
  PortW := TPortW.Create;
  PortL := TPortL.Create;
Finalization
  Port.Free;
  PortW.Free;
  PortL.Free;   
End.
Il Razziatore,
The Only Good Windows is an uninstalled Windows
-----------------------------------------------
E-MAILs : IlRazziat...@NOSPAMnetscape.net
ICQ     : 67552596

Delphi supporta tutte le istruzioni assembly della famiglia x86, comprese In
e Out.
E' vero che alcune istruzioni sotto Windows 32bit e XP non le puoi eseguire
perchè sono privilegiate e non possono essere eseguite dall'utente perchè
potrebbero compromettere il sistema operativo, come per esempio CLI e STI,
ma In e Out dovrebbero funzionare senza problemi e quindi è facile ricreare
le PortB e PortW ecc ecc



Le porte sono sigilate. quindi i comandi IN e Out sono inutili 
( restituiscono sempre 0 ) infatti prova un vecchio programma dos (che
usa IN e OUT ) vedrai ke non funziona ( lo so perche ci ho provato
tempo fa ). Sicuramente c'è un api o qualcosa del genre... ma non la
consoco secondo me questa è la cosa migliore che ho potuto fare in 2
secondi che ci ho provato...
Il Razziatore,
The Only Good Windows is an uninstalled Windows
-----------------------------------------------
E-MAILs : IlRazziat...@NOSPAMnetscape.net
ICQ     : 67552596
-----------------------------------------------
Founder of MediaPlayer Project
http://mpp.iwebland.net