'I/O Port 32' è una DLL che ho sviluppato in C per porre rimedio alla
mancanza in MS Visual Basic di strumenti per la gestione delle porte di
Input/Output dei Personal Computer. Un impiego tipico di questo pacchetto è
la realizzazione in MS Visual Basic di routine software per il controllo di
circuiti elettronici sperimentali collegati alla porta parallela.
Questa è la versione a 32 bit dell'analoga DLL VBIOport
che ho deciso di scrivere viste le numerose richieste. IOPort32 può essere utilizzata da applicazioni a 32 bit
(scritte ad esempio con MS Visual Basic 5 o 6) che potranno funzionare
tranquillamente con sistemi operativi a 32 bit come Windows 95, 98 ed ME.
'I/O Port 32' funziona anche sui sistemi operativi con tecnologia NT
(Windows NT4 / 2000 / XP) grazie a 'UserPort', un kernel mode driver
scritto da Tomas Franzon e reperibile nell'area download.
Alcune persone mi hanno segnalato problemi nell'uso di 'I/O Port 32' con il sistema
operativo Windows XP nonostante l'uso di 'UserPort'. Con alcuni PC ho riscontrato anch'io dei
malfunzionamenti (mi è successo in particolar modo con dei notebook) e mi sono quindi messo
alla ricerca di qualche altra soluzione.
Alla fine io ho risolto tutti i problemi usando
PortTalk,
un'altra utility utilizzabile liberamente che consente l'accesso alle porte I/O da parte
di programmi che girano in user space.
Consiglio quindi vivamente di provare 'PortTalk' a tutte quelle persone che hanno l'esigenza di
interagire con le porte I/O (sia tramite la mia DLL 'I/O Port 32' sia con un qualsiasi
altro programma) in ambiente NT.
IOport32 può essere scaricata dalla sezione Download seguendo questo link.

Scompattare il file IOport32.zip in una directory temporanea; copiare
il file IOport32.dll nella directory %windir%\System\ o nella directory
contenente l'eseguibile Visual Basic che dovrà far uso di 'IOPort32'.
Nel caso in cui il sistema operativo fosse Windows NT / 2000 / XP occorre
installare il driver 'UserPort' di cui sopra.
'UserPort' permette ai programmi in user-mode di accedere alle porte I/O;
in estrema sintesi l'installazione consiste nel copiare il file
UserPort.sys nella directory %windir%\system32\drivers e nell'eseguire
il programma UserPort.exe per impostare il range di indirizzi cui accedere.
Occorre prestare comunque attenzione nell'uso di questo driver in quanto
apre un piccolo buco nella sicurezza del sistema: è pertanto consigliabile
restringere al minimo indispensabile il range di porte da "aprire".
L'uso di 'I/O Port 32' in Visual Basic è molto semplice: si debbono innanzitutto dichiarare le funzioni contenute nella DLL in un modulo .BAS come indicato di seguito:
Declare Sub OutPort Lib "ioport32.dll" (ByVal port%, ByVal data%)
Declare Sub OutLine Lib "ioport32.dll" (ByVal port%, ByVal line%, ByVal data%)
Declare Function InPort Lib "ioport32.dll" (ByVal port%) As Integer
Declare Function InLine Lib "ioport32.dll" (ByVal port%, ByVal line%) As Integer
Se la directory nella quale è stata copiata la DLL è diversa da quella
del progetto o da %windir%\System occorre indicare l'intero path nelle
righe di dichiarazione.
A questo punto le funzioni possono essere usate in qualsiasi subroutine
del progetto.
La Sub OutPort (port, data) scrive il valore intero data nella
porta specificata, in notazione decimale, dal parametro port. Esempio:
Call OutPort (888, 123) ' Scrittura del valore 123 nella porta 888
La Sub OutLine (port, line, data) imposta il bit indicato dal parametro
line nella porta specificata, in notazione decimale, dal parametro
port; questa funzione lavora correttamente solo con le porte che
permettono la "rilettura". Esempio:
Call OutPort (888, 5, 1) ' Il bit n. 5 della porta 888 viene settato ad 1
Call OutPort (888, 4, 0) ' Il bit n. 4 della porta 888 viene azzerato
La Function InPort (port) restituisce il valore intero letto dalla
porta specificata, in notazione decimale, dal parametro port. Esempio:
data% = InPort (888) ' Lettura della porta 888
La Function InLine (port, line) restituisce lo stato logico del bit
indicato dal parametro line letto dalla porta specificata, in notazione
decimale, dal parametro port. Esempio:
bit3% = InPort (888, 3) ' Lettura del bit n. 3 della porta 888
Nel file IOport32.zip è incluso un progetto d'esempio scritto in
Visual Basic 5.
© 2001-2002 Giuseppe Bordoni
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.