Attribute VB_Name = "Module1" Public Declare Function InPortB Lib "ACCES32.dll" Alias "VBInPortB" (ByVal Port As Long) As Integer Public Declare Function OutPortB Lib "ACCES32.dll" Alias "VBOutPortB" (ByVal Port As Long, ByVal Value As Byte) As Integer Public Const PI = 3.141593 Const RLD = &H80 Const XRLD = &H0 Const YRLD = &H0 Const Rst_BP = &H1 Const Rst_CTR = &H2 Const Rst_FLAGS = &H4 Const Rst_E = &H6 Const Trf_PR_CTR = &H8 Const Trf_CTR_OL = &H10 Const Trf_PS0_PSC = &H18 Const CMR = &HA0 Const XCMR = &H20 Const YCMR = &H20 Const BINCnt = &H0 Const BCDCnt = &H1 Const NrmCnt = &H0 Const RngLmt = &H2 Const NRcyc = &H4 Const ModN = &H6 Const NQDX = &H0 Const QDX1 = &H8 Const QDX2 = &H10 Const QDX4 = &H18 Const IOR = &HC0 Const XIOR = &H40 Const YIOR = &H0 Const DisAB = &H0 Const EnAB = &H1 Const LCTR = &H0 Const LOL = &H2 Const RCTR = &H0 Const ABGate = &H4 Const CYBW = &H0 Const CPBW = &H8 Const CB_UPDN = &H10 Const IDX_ERR = &H18 Const IDR = &HE0 Const XIDR = &H60 Const YIDR = &H60 Const DisIDX = &H0 Const EnIDX = &H1 Const NIDX = &H0 Const PIDX = &H2 Const LIDX = &H0 Const RIDX = &H4 Public Sub Init_7266(ByVal addr As Long) Dim count As Integer For count = 0 To 3 'Setup IOR reg OutPortB addr + 1, IOR + DisAB + LOL + ABGate + CYBW 'Setup RLD reg OutPortB addr + 1, RLD + Rst_BP + Rst_FLAGS OutPortB addr + 0, &H0 OutPortB addr + 2, &H0 OutPortB addr + 1, RLD + Rst_E + Trf_PS0_PSC OutPortB addr + 1, RLD + Rst_BP + Rst_CTR 'Setup IDR reg OutPortB addr + 1, IDR + EnIDX + NIDX + LIDX 'Setup CMR reg OutPortB addr + 1, CMR + BINCnt + ModN + QDX1 'Setup PR reg for modulo N counter to XCt OutPortB addr + 0, &HFF OutPortB addr + 0, &HFF OutPortB addr + 0, &HFF 'Setup PR reg for modulo N counter to YCt OutPortB addr + 2, &HFF OutPortB addr + 2, &HFF OutPortB addr + 2, &HFF 'Enable counters OutPortB addr + 1, IOR + EnAB addr = addr + 4 Next count End Sub Public Function Read_7266_ol(addr As Long) As Long Dim reading(3) As Integer Dim result As Long OutPortB addr + 1, &H10 ' /* reset address pointer */ OutPortB addr + 1, &H1 ' /* command to latch counter */ reading(0) = InPortB(addr) reading(1) = InPortB(addr) reading(2) = InPortB(addr) If (reading(2) And &H80) = &H80 Then 'the result is negative need to mess with it reading(2) = (Not reading(2)) And &HFF reading(1) = (Not reading(1)) And &HFF reading(0) = (Not reading(0)) And &HFF result = (reading(2) * 2 ^ 16) + (reading(1) * 2 ^ 8) + reading(0) result = (result * -1) - 1 Else result = (reading(2) * 2 ^ 16) + (reading(1) * 2 ^ 8) + reading(0) End If Read_7266_ol = result End Function