
small remark :
the file "hwinterface.sys" is needed from here : http://logix4u.net/inpout32_source_and_bins.zip
Code: Select all
; ABBKlaus 29 November 2007
;
; Ported from Inpout32.dll
; http://www.logix4u.net
; send queries and doubts to logix4u mail ID found at homepage
; visit http://www.logix4u.net
; no explicit licence is neede to use this dll for non - commercial applications. for commercial applications , contact the webmaster
Declare.l inp(PortAddress.w)
Declare.l IPF_DeInst()
Declare.l IPF_Inst()
Declare.l IPF_Opendriver()
Declare.l IPF_Start()
Declare outp(PortAddress.w, Value.b)
DeclareDLL.l PureParallelIO_End()
DeclareDLL.l PureParallelIO_In(PortAdress.l)
DeclareDLL.l PureParallelIO_Init()
DeclareDLL.l PureParallelIO_Out(PortAdress.l,DataByte.l)
Macro CTL_CODE(DeviceType, Function, Method, Access)
((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method)
EndMacro
CompilerIf Defined(FILE_ANY_ACCESS, #PB_Constant) = 0
#FILE_ANY_ACCESS = 0
CompilerEndIf
CompilerIf Defined(METHOD_BUFFERED, #PB_Constant) = 0
#METHOD_BUFFERED = 0
CompilerEndIf
#IOCTL_READ_PORT_UCHAR = CTL_CODE(40000, $801, #METHOD_BUFFERED, #FILE_ANY_ACCESS)
#IOCTL_WRITE_PORT_UCHAR = CTL_CODE(40000, $802, #METHOD_BUFFERED, #FILE_ANY_ACCESS)
DataSection
hwinterface: ; hwinterface.sys
Data.l $0BD2434A, $E3650000, $6B59E313, $322820D3, $47FE0230, $C1164100, $0451490D, $008C0128
Data.l $BA285CE4, $09E63A3F, $101A4769, $552DC877, $9C82600A, $B7D9169B, $6DA6E172, $6DC4CA58
Data.l $0C586C65, $0FDD8DDD, $B480ACA5, $9F534D15, $B7D96512, $E8692B6D, $91912CB2, $3B7B2854
Data.l $EFE92FCE, $133AD827, $A043E2D8, $700A4576, $F5F9E4E6, $7789EE12, $1D94FAA5, $A6C7557E
Data.l $268C6A95, $5150680A, $60A454A8, $68ECA640, $13C06576, $0616FD85, $CA03D3C4, $08230A10
Data.l $203170D6, $80440A11, $2464D040, $025010E0, $01A80032, $282C5478, $9A2210A6, $44001A50
Data.l $7303A116, $01CB88B2, $0106B318, $C40D3C4B, $E141010B, $EF4042D5, $84589400, $6A84476A
Data.l $03F4057C, $65BC9431, $DF01BAE9, $2255144B, $01E66B0C, $12EB8226, $C374E0AD, $11959592
Data.l $11302686, $7A5422AC, $389D0A8A, $45018A4D, $2AC15112, $3DE26D4C, $4EC61328, $31BD42E6
Data.l $044C45BB, $082810AB, $CB78A0F5, $94042CB6, $044C52CE, $706AEA03, $924851A3, $A58362E9
Data.l $088044CB, $8FFEB0C7, $82348460, $E0702BB0, $79958933, $4236A104, $6236C234, $30215237
Data.l $411B9236, $DB88038B, $E6E4B818, $46C2DD00, $488546CC, $8DCD0C64, $3EC615BC, $5C5F8B96
Data.l $4ED90FD5, $DAA1B306, $D40856AB, $38DB5BED, $E7A56D2B, $3145EF13, $7DE23D0C, $40CA3073
Data.l $13170450, $41005401, $F43B35D6, $00C0C68B, $87B0FFEB, $77D82400, $7F260A71, $95624012
Data.l $6A917F63, $5DAC40DB, $53BE0105, $5216CDA2, $15DC35F2, $17E3C13F, $1A013091, $CB86D1E7
Data.l $89344901, $F3576A06, $96E1A836, $6C5DEBDC, $103FAA75, $98A3D249, $5FA1DBAB, $1082580A
Data.l $52808529, $5A4080F8, $749A6A7A, $00F45B39, $66501884, $A9492F07, $73F368DD, $1DCA703D
Data.l $A3C09F98, $FDBC2F8A, $7489AA10, $D1C51C65, $D72371E8, $F1BB1B13, $242009E2, $94425404
Data.l $2B0C55BB, $409677D3, $26BD6253, $051920D6, $38091C1A, $31E58C5F, $0CE5230A, $65147CEF
Data.l $A7096D46, $72103ED5, $8B7A2863, $60699009, $D01C97D3, $70E8F850, $12C5150D, $1AB814F0
Data.l $0DE29B84, $86161903, $9A2C4DEA, $8AA6005C, $A869A951, $A4967920, $E2500047, $1A78E92F
Data.l $09F4E833, $E682F027, $A40D4202, $2A10CC38, $7204EE47, $15B2B61C, $283D4569, $0E3910B7
Data.l $21ACB10E, $E30A2683, $0CE31D5B, $6E6A756A, $0D2642B3, $A1949958, $2D96DF66, $3A91B6DC
Data.l $D4A55BA1, $32423B8D, $3B91CDCF, $26540B34, $DB11CB08, $A6C7EF36, $6EB5CB65, $6D164C29
Data.l $BB028304, $B592A213, $3D6CA292, $8E960752, $858DA4DB, $A99AAA80, $459D5200, $4120B905
Data.l $5492092A, $66542ACC, $D0ED7612, $C8BD70AD, $65BCCCC5, $588DB25D, $41A204CD, $14F34A8B
Data.l $D55A57EA, $E1851542, $B96A1D20, $2B09842A, $052949EA, $25B0A844, $017592EB, $8A899116
Data.l $2C61202A, $A5301879, $4C118D09, $14F845E8, $A28A0A40, $80A1142C, $AC8A8F0B, $200C3449
Data.l $E8029ACC, $1A79D15A, $20999A49, $30181A70, $F609019A, $2A758036, $2552EFFF, $8430328F
Data.l $22850D93, $626B422C, $1D97964C, $020C1A34, $BA383AE5, $1959A140, $082D0438, $1490C4E4
Data.l $38708E04, $382439B3, $9A000025, $08E8DAE8, $80238CE4, $1A184D90, $48DC0806, $030248DB
Data.l $D1901C3E, $8B9DF2D1, $6CE239B2, $0C9B301A, $D2147378, $2CC0A820, $21921AA0, $61F1D447
Data.l $9B78C63C, $33937401, $E0B98480, $88020ED2, $C3D9BC80, $C1374F88, $0E9A23AA, $C0027364
Data.l $6446858C, $50214062, $D80E62D6, $95980104, $4966660A, $95B1D109, $68052632, $022EAE9E
Data.l $C0515148, $5A802034, $0716B387, $387C4970, $4C29CA4B, $5915AB66, $1028E05C, $69599D8B
Data.l $29EC9750, $694E41C5, $0FB46115, $5E236E45, $A00EE3AD, $C1BA1F4A, $D14936F1, $017283CD
Data.l $743D4D99, $5B3E40A4, $C0815760, $0980A2A7, $A3E33151, $8A411A84, $00AA3303, $F64A2A29
Data.l $DC965116, $0049B0F8, $C9546E5E, $951223DE, $26560795, $1304E610, $1CA920DA, $6132D83D
Data.l $E5C4284B, $EC648ECC, $F004E744, $F1C4EEA4, $FFE4F0E4, $4AF9FB44, $3BC9E273, $372C3B79
Data.l $19323C29, $B34BB595, $999CDD73, $5AD1AB96, $7AE9E26C, $59AC7730, $D2EB65B9, $99163632
Data.l $59D19DE4, $A71C01F7, $CC40F28C, $010E7670, $CD2510C7, $0C3F11D2, $213F8562, $94055082
Data.l $0A634A1E, $8CE72A75, $1CEA3056, $5130A3AA, $B657B96B, $A2C5B714, $6EC0DF0E, $E6760E5A
Data.l $45E17862, $CB85EA59, $440046F5, $000092C4, $00000000
EndDataSection
Procedure outp(PortAddress.w, Value.b)
!PUSH DX
!PUSH AX
!MOV DX, [p.v_PortAddress]
!MOV AL, [p.v_Value]
!OUT DX,AL
!POP AX
!POP DX
EndProcedure
Procedure.l inp(PortAddress.w)
Protected Value.b=0
!PUSH DX
!PUSH AX
!MOV DX, [p.v_PortAddress]
!IN AX,DX
!MOV [p.v_Value], AX
!POP AX
!POP DX
ProcedureReturn Value
EndProcedure
ProcedureDLL.l PureParallelIO_Init()
Debug "PureParallelIO_Init()"
Global hdriver.l
Global sysver.l
Select OSVersion()
Case #PB_OS_Windows_95,#PB_OS_Windows_98,#PB_OS_Windows_ME
Debug "Detected OS Win9X / WinME"
sysver=1
; do nothing
Case #PB_OS_Windows_NT3_51,#PB_OS_Windows_NT_4,#PB_OS_Windows_2000 To #PB_OS_Windows_Future
Debug "Detected OS Win-NT"
sysver=2
If IPF_Opendriver()
Debug "Driver successfully opened"
Else
Debug "Driver failed to open"
EndIf
EndSelect
EndProcedure
ProcedureDLL.l PureParallelIO_End()
Debug "PureParallelIO_End()"
If hdriver
If CloseHandle_(hdriver)
Debug "Driver succesfully closed"
Else
Debug "Driver failed to close"
EndIf
hdriver=0
EndIf
EndProcedure
Procedure.l IPF_Opendriver()
Debug "IPF_Opendriver()"
hdriver=CreateFile_("\\.\\hwinterface", #GENERIC_READ | #GENERIC_WRITE, 0, #Null, #OPEN_EXISTING, #FILE_ATTRIBUTE_NORMAL, #Null)
If hdriver=#INVALID_HANDLE_VALUE
Debug "INVALID_HANDLE_VALUE"
If IPF_Start()
IPF_Inst()
IPF_Start()
hdriver=CreateFile_("\\.\\hwinterface", #GENERIC_READ | #GENERIC_WRITE, 0, #Null, #OPEN_EXISTING, #FILE_ATTRIBUTE_NORMAL, #Null)
If hdriver<>#INVALID_HANDLE_VALUE
ProcedureReturn 1
EndIf
EndIf
Else
ProcedureReturn 1
EndIf
EndProcedure
ProcedureDLL.l PureParallelIO_Out(PortAdress.l,DataByte.l)
Debug "PureParallelIO_Out()"
Protected BytesReturned.l, *Buffer, error.l
Select sysver
Case 1
outp(PortAdress,DataByte)
error=1
Case 2
*Buffer=AllocateMemory(4)
If *Buffer
PokeW(*Buffer+0,PortAdress & $FFFF)
PokeB(*Buffer+2,DataByte & $FF)
error = DeviceIoControl_(hdriver,#IOCTL_WRITE_PORT_UCHAR,*Buffer,3,#Null,0,@BytesReturned,#Null)
FreeMemory(*Buffer)
*Buffer=0
EndIf
EndSelect
ProcedureReturn error
EndProcedure
ProcedureDLL.l PureParallelIO_In(PortAdress.l)
Debug "PureParallelIO_In()"
Protected BytesReturned.l, *Buffer, error.l, retval.l
Select sysver
Case 1
retval = inp(PortAddress)
Case 2
*Buffer=AllocateMemory(4)
If *Buffer
PokeW(*Buffer+0,PortAdress & $FFFF)
PokeB(*Buffer+2,0)
error = DeviceIoControl_(hdriver,#IOCTL_READ_PORT_UCHAR,*Buffer,2,*Buffer,1,@BytesReturned,#Null)
retval = PeekB(*Buffer+0)
FreeMemory(*Buffer)
*Buffer=0
EndIf
EndSelect
ProcedureReturn retval
EndProcedure
Procedure.l IPF_Inst()
Debug "IPF_Inst()"
Protected path$, file.l, Mgr.l, Ser.l, *Buffer
path$=Space(#MAX_PATH)
GetSystemDirectory_(@path$,#MAX_PATH)
*Buffer = AllocateMemory(3026)
If *Buffer
If UnpackMemory(?hwinterface,*Buffer)
file=CreateFile(#PB_Any,path$+"\Drivers\hwinterface.sys")
If file
WriteData(file,*Buffer,3026)
CloseFile(file)
EndIf
EndIf
FreeMemory(*Buffer)
EndIf
Mgr=OpenSCManager_(#Null,#Null,#SC_MANAGER_ALL_ACCESS)
If Mgr=0
If GetLastError_()=#ERROR_ACCESS_DENIED
Debug "ERROR_ACCESS_DENIED"
ProcedureReturn 5
EndIf
Else
Ser=CreateService_(Mgr,"hwinterface","hwinterface",#SERVICE_ALL_ACCESS,#SERVICE_KERNEL_DRIVER,#SERVICE_SYSTEM_START,#SERVICE_ERROR_NORMAL,"System32\\Drivers\\hwinterface.sys",#Null,#Null,#Null,#Null,#Null)
EndIf
If Mgr
CloseServiceHandle_(Mgr)
EndIf
If Ser
CloseServiceHandle_(Ser)
EndIf
EndProcedure
Procedure.l IPF_DeInst()
Debug "IPF_DeInst()"
Protected Mgr.l, Res.l
Mgr=OpenSCManager_(#Null,#Null,#SC_MANAGER_ALL_ACCESS)
If Mgr=0
If GetLastError_()=#ERROR_ACCESS_DENIED
Debug "ERROR_ACCESS_DENIED"
ProcedureReturn 5
EndIf
Else
Ser=OpenService_(Mgr,"hwinterface",#SC_MANAGER_ALL_ACCESS)
If Ser
DeleteService_(Ser)
EndIf
EndIf
If Mgr
CloseServiceHandle_(Mgr)
EndIf
If Ser
CloseServiceHandle_(Ser)
EndIf
EndProcedure
Procedure.l IPF_Start()
Debug "IPF_Start()"
Protected Mgr.l, Ser.l, retval.l=1
Mgr = OpenSCManager_(#Null, #Null, #SC_MANAGER_ALL_ACCESS)
If Mgr=0
If GetLastError_()=#ERROR_ACCESS_DENIED
Mgr=OpenSCManager_(#Null, #Null, #GENERIC_READ)
Ser=OpenService_(Mgr, "hwinterface", #GENERIC_EXECUTE)
If Ser
If StartService_(Ser,0,#Null)
Debug "Service started successfully"
Else
Debug "Service not started"
Retval=4
EndIf
EndIf
EndIf
Else
Ser=OpenService_(Mgr,"hwinterface",#GENERIC_EXECUTE)
If Ser
If StartService_(Ser, 0, #Null)
Debug "Service started successfully"
Retval=0
Else
Debug "Service not started"
Retval=3
EndIf
EndIf
EndIf
If Mgr
CloseServiceHandle_(Mgr)
EndIf
If Ser
CloseServiceHandle_(Ser)
EndIf
ProcedureReturn retval
EndProcedure
Code: Select all
PureParallelIO_Init()
For i=0 To 7
PureParallelIO_Out($378,Pow(2,i))
Debug PureParallelIO_In($378)&$FF
Next
PureParallelIO_Out($378,0)
PureParallelIO_End()
IPF_DeInst()