More information on Error Message
The first step was to check my brothers PC to see if the setup on his machine is the same. I don't know the tech specs on his PC other than to say that his machine is an HP running Windows 7 that was purchased in the last year. His work bought him the PC so that is why I don't know the specs. However, I was the one who successfully ran the Phoenix install program on his PC.
I confirmed that we have the same Taxi file in the Tables subdirectory. The unzipped file is Taxi_JP_5.0 at 4,304 KB.
I confirmed that we both have a file named S11 that is a VBScript Script File at 5KB.
I confirmed that we both have zipped ROMS taxi_l3 (68KB), taxi_l4 (176kb), taxi_lg1 (79KB) & Williams 1988_Taxi_GameRom_L3_Marilyn (180 kb) in the ROM subdirectory.
I confirmed I could play Taxi on his machine. I got both the Passenger jackpot and also the double ramp 1 Million jackpot (OOOH...Million!) and scored a game just over 4.5 Million to outdo the default high score for first time playing the game on a new PC.
===================================
I retried Taxi on my machine by first going to the Pinball subdirectory and double clicking the VPinball application file (1,560 KB) (same place the program file resides on my brothers PC). The application file brings up the base dialogue box.
I then goto the File\Open menu and see the Table in the Tables subdirectory. I double click on the table and the base prototype table layout shows in the background.
I then click on the Play Icon and I get the same error messages already defined in the first post. I also get an error text box that I have copied and pasted below
==========================
' Taxi 5.0 by JPSalas
' August - 2007
Option Explicit
Randomize
LoadVPM "01530000", "S11.VBS", 3.10
Sub LoadVPM(VPMver, VBSfile, VBSver)
On Error Resume Next
If ScriptEngineMajorVersion<5 Then MsgBox "VB Script Engine 5.0 or higher required"
ExecuteGlobal GetTextFile(VBSfile)
If Err Then MsgBox "Unable to open " & VBSfile & ". Ensure that it is in the same folder as this table. " & vbNewLine & Err.Description
Set Controller=CreateObject("VPinMAME.Controller")
If Err Then MsgBox "Can't Load VPinMAME." & vbNewLine & Err.Description
If VPMver>"" Then If Controller.Version<VPMVER ? required.?
If VPinMAMEDriverVer<VBSVER ? required.?
On Error Goto 0
End Sub
Const cGameName="taxi_l4" ' Lola roms
'Const cGameName = "taxi_l3" ' Marilyn rom
Const UseSolenoids=1
Const UseLamps=0
Const UseGI=0
Const UseSync=0
Const HandleMech=0
' Standard Sounds
Const SSolenoidOn="Solenoid"
Const SSolenoidOff=""
Const SFlipperOn="FlipperUp"
Const SFlipperOff="FlipperDown"
Const SCoin="Coin"
dim bsTrough, bsLock, bsJoyRide, b3, bsSpinout, dtR, dtC
dim Msg(25), x, mSpin, Velocity, plungerIM, bumper1, bumper2
' Keyboard handling
Sub Taxi_KeyDown(ByVal keycode)
If vpmKeyDown(keycode) Then Exit Sub
If keycode=PlungerKey Then PlungerIM.Pullback : Pcount=0 : PTime.Enabled=1
If keycode=KeyRules Then Rules
End Sub
Sub Taxi_KeyUp(ByVal keycode)
If vpmKeyUp(keycode) Then Exit Sub
If keycode=PlungerKey Then PlungerIM.Fire : ResetPlunger
End Sub
' Init table
Sub Taxi_Init()
With Controller
.GameName=cGameName
If Err Then MsgBox "Can't start Game: " & cGameName & vbNewLine & Err.Description : Exit Sub
.SplashInfoLine="Taxi (Williams 1988)" & vbNewLine & "VPM table by JPSalas v5.0"
.HandleMechanics=0
.ShowDMDOnly=1
.ShowFrame=0
.ShowTitle=0
.DIP(0)=&H00
.Hidden=1
.SetDisplayPosition 1600, 1600, GetPlayerHWnd
On Error Resume Next
.Run GetPlayerHWnd
If Err Then MsgBox Err.Description
On Error Goto 0
End With
On Error Goto 0
' Nudging
vpmNudge.TiltSwitch=swTilt
vpmNudge.Sensitivity=5
vpmNudge.TiltObj=Array(LBumper, RBumper, LowerBumper, LeftSlingshot, RightSlingshot)
' Trough handler
Set bsTrough=New cvpmBallStack
bsTrough.InitSw 10, 11, 12, 0, 0, 0, 0, 0
bsTrough.InitKick BallRelease, 60, 6
bsTrough.Balls=2
bsTrough.InitEntrySnd "Solenoid", "Solenoid"
bsTrough.InitExitSnd "BallRel", "Solenoid"
Set bsLock=New cvpmBallStack
bsLock.InitSaucer RightLock, 36, 180, 10
bsLock.InitExitSnd "Solenoid", "Solenoid"
Set bsJoyRide=New cvpmBallStack
bsJoyRide.InitSaucer JoyrideEject, 13, 220, 11
bsJoyRide.InitExitSnd "Solenoid", "Solenoid"
Set b3=New cvpmBallStack
b3.InitSw 0, 35, 0, 0, 0, 0, 0, 0
b3.InitKick Catapult, 0, 70
b3.KickZ=20
b3.InitExitSnd "Solenoid", "Solenoid"
Set bsSpinout=New cvpmBallStack
bsSpinout.InitSw 0, 43, 0, 0, 0, 0, 0, 0
bsSpinout.InitKick SpinoutKicker, 330, 15
bsSpinout.KickAngleVar=2
bsSpinout.KickForceVar=3
bsSpinout.InitExitSnd "Solenoid", "Solenoid"
Set dtR=New cvpmDropTarget
dtR.InitDrop Array(PinbotT, PinbotM, PinbotB), Array(30, 31, 32)
dtR.InitSnd "droptarget", "resetdrop"
dtR.CreateEvents "dtR"
Set dtC=New cvpmDropTarget
dtC.InitDrop Array(LolaL, LolaM, LolaR), Array(27, 28, 29)
dtC.InitSnd "droptarget", "resetdrop"
dtC.CreateEvents "dtC"
' Impulse Plunger
Const IMPowerSetting=60 ' Plunger Power
Const IMTime=0.7 ' Time in seconds for Full Plunge
Set plungerIM=New cvpmImpulseP
With plungerIM
.InitImpulseP ShooterLane, IMPowerSetting, IMTime
.Random 0.3
.InitExitSnd "plunger2", "plunger"
.CreateEvents "plungerIM"
End With
' SpinoutPull
Set mSpin=New cvpmMagnet
With mSpin
.InitMagnet SpinoutPull, 6 ' Pull Strength
.GrabCenter=0
.MagnetOn=1
.CreateEvents "mSpin"
End With
' Init dropwalls
CarryPassenger2.IsDropped=1
Ring1a.IsDropped=1 : Ring1b.IsDropped=1 : Ring1c.IsDropped=1
Ring2a.IsDropped=1 : Ring2b.IsDropped=1 : Ring2c.IsDropped=1
f1.IsDropped=1 : f2.IsDropped=1 : f3.IsDropped=1 : f4.IsDropped=1
f5.IsDropped=1 : f6.IsDropped=1 : f7.IsDropped=1
f15.IsDropped=1 : f16.IsDropped=1
ResetPlunger
' Main Timer init
PinMAMETimer.Interval=PinMAMEInterval
PinMAMETimer.Enabled=1
End Sub
Sub taxi_Paused : Controller.Pause=1 : End Sub
Sub taxi_unPaused : Controller.Pause=0 : End Sub
'********
'Plunger
'********
dim PCount : Pcount=0
dim Plungers : Plungers=Array(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13)
Sub PTime_Timer()
If Pcount<12 Then
Plungers(Pcount).Isdropped=1
Pcount=Pcount+1
Plungers(Pcount).Isdropped=0
Else
PTime.Enabled=0
End If
End Sub
Sub ResetPlunger()
PTime.Enabled=0
For x=1 to 12 : Plungers(x).Isdropped=1 : Next
Plungers(0).Isdropped=0
End Sub
'**********
' Solenoids
'**********
SolCallback(1)="bsTrough.SolIn"
SolCallback(2)="bsTrough.SolOut"
SolCallback(7)="bsSpinOut.SolOut"
SolCallback(8)="bsLock.SolOut"
SolCallback(9)="vpmSolWall Cheatwall, 0, " ' 0 = no sound
SolCallback(3)="b3.SolOut"
SolCallback(5)="bsJoyRide.SolOut"
SolCallback(23)="vpmNudge.SolGameOn"
SolCallback(6)="dtR.SolDropUp"
SolCallback(4)="dtC.SolDropUp"
SolCallback(14)="vpmSolSound ""knocker"","
SolCallback(13)="vpmSolSound ""bellring"","
SolCallback(sLRFlipper)="vpmSolFlipper RightFlipper,Nothing,"
SolCallback(sLLFlipper)="vpmSolFlipper LeftFlipper,Nothing,"
SolCallback(25)="SolFlasher01"
SolCallback(26)="SolFlasher02"
SolCallback(27)="SolFlasher03"
SolCallback(28)="SolFlasher04"
SolCallback(29)="SolFlasher05"
SolCallback(30)="SolFlasher06"
SolCallback(31)="SolFlasher07"
SolCallback(32)="SolFlasher08"
SolCallback(15)="SolFlasher15"
SolCallback(16)="SolFlasher16"
Sub SolFlasher01(enabled)
If Enabled Then
f1.IsDropped=0
else
f1.IsDropped=1
end if
end Sub
Sub SolFlasher02(enabled)
If Enabled Then
f2.IsDropped=0
else
f2.IsDropped=1
end if
end Sub
Sub SolFlasher03(enabled)
If Enabled Then
f3.IsDropped=0
else
f3.IsDropped=1
end if
end Sub
Sub SolFlasher04(enabled)
If Enabled Then
f4.IsDropped=0
else
f4.IsDropped=1
end if
end Sub
Sub SolFlasher05(enabled)
If Enabled Then
f5.IsDropped=0
else
f5.IsDropped=1
end if
end Sub
Sub SolFlasher06(enabled)
If Enabled Then
f6.IsDropped=0
else
f6.IsDropped=1
end if
end Sub
Sub SolFlasher07(enabled)
If Enabled Then
f7.IsDropped=0
else
f7.IsDropped=1
end if
end Sub
Sub SolFlasher08(enabled)
If Enabled Then
f8.state=1
else
f8.state=0
end if
End Sub
Sub SolFlasher15(enabled)
If Enabled Then
f15.IsDropped=0
else
f15.IsDropped=1
end if
end Sub
Sub SolFlasher16(enabled)
If Enabled Then
f16.IsDropped=0
else
f16.IsDropped=1
end if
end Sub
Sub Outhole_Hit() : Playsound "Drain" : bsTrough.AddBall Me : End Sub
Sub RightLock_Hit() : bsLock.AddBall Me : End Sub
Sub Catapult_Hit() : b3.AddBall Me : End Sub
Sub JoyrideEject_Hit() : bsJoyRide.AddBall Me : End Sub
Sub SpinHelp_Hit() : ActiveBall.VelY=1.4*ActiveBall.VelY : End Sub
Sub SpinoutKicker1_Hit() : SpinoutKicker1.DestroyBall : bsSpinOut.addball Me : End Sub
Sub SpinoutTrigger_Hit() : vpmTimer.pulsesw 44 : End Sub
'*********
' Switches
'*********
Sub LeftSlingshot_slingshot() : vpmtimer.pulsesw 18 : Playsound "slingshot" : End Sub
Sub RightSlingshot_Slingshot() : vpmtimer.pulsesw 20 : Playsound "slingshot" : End Sub
Sub LBumper_Hit() : vpmTimer.pulsesw 17 : bumper1=1 : Playsound "bumper" : LBumpera.state=1 : Me.TimerEnabled=1 : End Sub
Sub LBumper_Timer()
Select Case bumper1
Case 1 : Ring1a.IsDropped=0 : bumper1=2
Case 2 : Ring1b.IsDropped=0 : Ring1a.IsDropped=1 : bumper1=3
Case 3 : Ring1c.IsDropped=0 : Ring1b.IsDropped=1 : bumper1=4
Case 4 : Ring1c.IsDropped=1 : LBumpera.state=0 : Me.TimerEnabled=0
End Select
End Sub
Sub RBumper_Hit() : vpmTimer.pulsesw 19 : bumper2=1 : Playsound "bumper" : RBumpera.state=1 : Me.TimerEnabled=1 : End Sub
Sub RBumper_Timer()
Select Case bumper2
Case 1 : Ring2a.IsDropped=0 : bumper2=2
Case 2 : Ring2b.IsDropped=0 : Ring2a.IsDropped=1 : bumper2=3
Case 3 : Ring2c.IsDropped=0 : Ring2b.IsDropped=1 : bumper2=4
Case 4 : Ring2c.IsDropped=1 : RBumpera.state=0 : Me.TimerEnabled=0
End Select
End Sub
Sub LowerBumper_Hit() : vpmTimer.pulsesw 21 : Playsound "bumper" : End Sub
Sub ShooterLane_Hit() : Controller.Switch(22)=1 : End Sub
Sub ShooterLane_Unhit() : Controller.Switch(22)=0 : End Sub
Sub LeftRampEntry_Hit() : Controller.Switch(25)=1 : End Sub
Sub LeftRampEntry_UnHit() : Controller.Switch(25)=0 : End Sub
Sub LeftRampExit_Hit() : Controller.Switch(34)=1 : End Sub
Sub LeftRampExit_UnHit() : Controller.Switch(34)=0 : End Sub
Sub RightRampEntry_Hit() : Controller.Switch(26)=1 : End Sub
Sub RightRampEntry_UnHit() : Controller.Switch(26)=0 : End Sub
Sub RightRampExit_Hit() : Controller.Switch(33)=1 : End Sub
Sub RightRampExit_UnHit() : Controller.Switch(33)=0 : End Sub
Sub UpperLaneEntry_Hit() : Controller.Switch(23)=1 : End Sub
Sub UpperLaneEntry_UnHit() : Controller.Switch(23)=0 : End Sub
Sub LeftOutlane_Hit() : Controller.Switch(37)=1 : Playsound "sensor" : SWall1.IsDropped=1 : SWall2.IsDropped=1 : End Sub
Sub LeftOutlane_UnHit() : Controller.Switch(37)=0 : SWall1.IsDropped=0 : SWall2.IsDropped=0 : End Sub
Sub LeftInlane_Hit() : Controller.Switch(38)=1 : Playsound "sensor" : SWall3.IsDropped=1 : SWall4.IsDropped=1 : End Sub
Sub LeftInlane_UnHit() : Controller.Switch(38)=0 : SWall3.IsDropped=0 : SWall4.IsDropped=0 : End Sub
Sub RightInlane_Hit() : Controller.Switch(40)=1 : Playsound "sensor" : SWall5.IsDropped=1 : SWall6.IsDropped=1 : End Sub
Sub RightInlane_UnHit() : Controller.Switch(40)=0 : SWall5.IsDropped=0 : SWall6.IsDropped=0 : End Sub
Sub RightOutlane_Hit() : Controller.Switch(39)=1 : Playsound "sensor" : SWall7.IsDropped=1 : SWall8.IsDropped=1 : End Sub
Sub RightOutlane_UnHit() : Controller.Switch(39)=0 : SWall7.IsDropped=0 : SWall8.IsDropped=0 : End Sub
Sub CLane_Hit() : Controller.Switch(14)=1 : Playsound "sensor" : SWall9.IsDropped=1 : SWall10.IsDropped=1 : End Sub
Sub CLane_Unhit() : Controller.Switch(14)=0 : SWall9.IsDropped=0 : SWall10.IsDropped=0 : End Sub
Sub ALane_Hit() : Controller.Switch(15)=1 : Playsound "sensor" : SWall11.IsDropped=1 : SWall12.IsDropped=1 : End Sub
Sub ALane_Unhit() : Controller.Switch(15)=0 : SWall11.IsDropped=0 : SWall12.IsDropped=0 : End Sub
Sub BLane_Hit() : Controller.Switch(16)=1 : Playsound "sensor" : SWall13.IsDropped=1 : SWall14.IsDropped=1 : End Sub
Sub BLane_Unhit() : Controller.Switch(16)=0 : SWall13.IsDropped=0 : SWall14.IsDropped=0 : End Sub
Sub CarryPassengers_Hit()
Playsound "target"
vpmTimer.PulseSwitch 24, 0, ""
CarryPassengers.IsDropped=1
CarryPassenger2.IsDropped=0
CarryPassengers.TimerEnabled=1
End Sub
Sub CarryPassengers_Timer() : CarryPassengers.IsDropped=0 : CarryPassenger2.IsDropped=1 : End Sub
Sub LeftRampEnd_Hit() : Me.TimerEnabled=1 : ActiveBall.VelY=1 : End Sub
Sub LeftRampEnd_Timer() : Me.TimerEnabled=0 : PlaySound "ballhit" : End Sub
Sub RightRampEnd_Hit() : Me.TimerEnabled=1 : ActiveBall.VelY=1 : End Sub
Sub RightRampEnd_Timer() : Me.TimerEnabled=0 : PlaySound "ballhit" : End Sub
Sub DracKickerIn_Hit()
DracKickerIn.DestroyBall
DracKickerOut.CreateBall
DracKickerOut.Kick 15, 25
End Sub
Sub Spinner1_Spin() : Playsound "spinner" : End Sub
Sub Spinner2_Spin() : Playsound "spinner" : End Sub
Sub Spinner3_Spin() : Playsound "spinner" : End Sub
Sub LeftRampHelp
If ActiveBall.VelY<-20 then ActiveBall.VelY=-20
ActiveBall.VelZ=-0.1
End Sub
Sub RightRampHelp
If ActiveBall.VelY<-20 then ActiveBall.VelY=-20
ActiveBall.VelZ=-0.1
End Sub
Sub RLockSpeed()
If ActiveBall.VelY>2 Then
ActiveBall.VelY=2
End If
End Sub
'******
' Rules
'******
Sub Rules()
Msg(0)="TAXI - Williams 1988" &Chr(10) &Chr(10)
Msg(1)="[F] key turns on/off lights fading"
Msg(2)="SHOOTER SKILL SHOT: # of spins in SPINOUT advance scores 1K, 5K"
Msg(3)=" 10K, 25K & Spot Passenger, 50K, 75K, 100K."
Msg(4)=""
Msg(5)="C-A-B LANES: Increase JACKPOT value, Advance BONUS MULTIPLIER"
Msg(6)=" & Lite EXTRA BALL at Dracula Shot."
Msg(7)="AIRPORT:Return lanes lite Right & Left Airport Ramp shots for 20K,"
Msg(8)=" 40K, 60K, 80K, 100K, & Lite Million Shot."
Msg(9)=""
Msg(10)="JACKPOT: Pick up 5 passengers to lite JACKPOT. Collect JACKPOT via"
Msg(11)=" next Gorbie shot"
Msg(12)=""
Msg(13)="CARRY PASSENGERS
ick up Lola or Pin*Bot to lite Carry Passenger"
Msg(14)=" target(upper left). Hit lit target to retain spotted"
Msg(15)=" passengers on next ball for JACKPOT."
Msg(16)=""
Msg(17)="MULTI-BALL: Lock at right Eject. Release at left Airport Ramp Shot."
Msg(18)=""
Msg(19)="EXPRESS LANES: During MULTI-BALL play, Lock ball in Right Eject"
Msg(20)=" first; then, lock 2nd ball by Dracula Shot."
Msg(21)=""
Msg(22)="JOYRIDE: Right Return lane lites JOYRIDE. take JOYRIDE to score 10K,"
Msg(23)=" Spot Passenger, Mystery Score, EXTRA BALL, or SPECIAL."
For X=1 To 24
Msg(0)=Msg(0)+Msg(X) &Chr(13)
Next
MsgBox Msg(0), , " Instructions and Rule Card"
End Sub
'*************
' Update Lamps
'*************
For x=1 to 64 : DisplayLamps x, 0 : Next
Set LampCallback=GetRef("UpdateLamps")
Sub UpdateLamps()
Dim ChgLamp, ii
ChgLamp=Controller.ChangedLamps
If Not IsEmpty(ChgLamp) Then
For ii=0 To UBound(ChgLamp)
DisplayLamps chgLamp(ii, 0), chgLamp(ii, 1)
Next
End If
End Sub
Sub DisplayLamps(idx, Stat)
Select Case idx
Case 1 : l1.State=stat
Case 2 : l2.State=stat
Case 3 : l3.State=stat
Case 4 : l4.State=stat
Case 5 : l5.State=stat
Case 6 : l6.State=stat
Case 7 : l7.State=stat
Case 8 : l8.State=stat
Case 9 : l9.isDropped=1-stat
Case 10 : l10.isDropped=1-stat
Case 11 : l11.isDropped=1-stat
Case 12 : l12.isDropped=1-stat
Case 13 : l13.isDropped=1-stat
Case 14 : l14.isDropped=1-stat
Case 15 : l15.isDropped=1-stat
Case 16 : l16.isDropped=1-stat
Case 17 : l17.isDropped=1-stat
Case 18 : l18.isDropped=1-stat
Case 19 : l19.isDropped=1-stat
Case 20 : l20.isDropped=1-stat
Case 21 : l21.isDropped=1-stat
Case 22 : l22.isDropped=1-stat
Case 23 : l23.isDropped=1-stat
Case 24 : l24.isDropped=1-stat
Case 25 : l25.isDropped=1-stat
Case 26 : l26.isDropped=1-stat
Case 27 : l27.isDropped=1-stat
Case 28 : l28.isDropped=1-stat
Case 29 : l29.isDropped=1-stat
Case 30 : l30.isDropped=1-stat
Case 31 : l31.isDropped=1-stat
Case 32 : l32.isDropped=1-stat
Case 33 : l33.isDropped=1-stat
Case 34 : l34.isDropped=1-stat
Case 35 : l35.isDropped=1-stat
Case 36 : l36.isDropped=1-stat
Case 37 : l37.isDropped=1-stat
Case 38 : l38.isDropped=1-stat
Case 39 : l39.isDropped=1-stat
Case 40 : l40.isDropped=1-stat
Case 41 : l41.isDropped=1-stat
Case 42 : l42.isDropped=1-stat
Case 43 : l43.isDropped=1-stat
Case 44 : l44.isDropped=1-stat
Case 45 : l45.isDropped=1-stat
Case 46 : l46.isDropped=1-stat
Case 47 : l47.isDropped=1-stat
Case 48 : l48.isDropped=1-stat
'Case 49: l49.isDropped = 1 - stat
'Case 50: l50.isDropped = 1 - stat
'Case 51: l51.isDropped = 1 - stat
'Case 52: l52.isDropped = 1 - stat
Case 53 : l53.State=stat
Case 54 : l54.State=stat
Case 55 : l55.State=stat
Case 56 : l56.State=stat
Case 57 : l57.State=stat
Case 58 : l58.State=stat
Case 59 : l59.State=stat
Case 60 : l60.State=stat
Case 61 : l61.State=stat
Case 62 : l62.State=stat
Case 63 : l63.State=stat
Case 64 : l64.State=stat
End Select
End Sub
' LED display
' Based on the Eala's rutine
Dim Digits(38)
Digits(0)=Array(a00, a05, a0c, a0d, a08, a01, a06, a0f, a02, a03, a04, a07, a0b, a0a, a09, a0e)
Digits(1)=Array(a10, a15, a1c, a1d, a18, a11, a16, a1f, a12, a13, a14, a17, a1b, a1a, a19, a1e)
Digits(2)=Array(a20, a25, a2c, a2d, a28, a21, a26, a2f, a22, a23, a24, a27, a2b, a2a, a29, a2e)
Digits(3)=Array(a30, a35, a3c, a3d, a38, a31, a36, a3f, a32, a33, a34, a37, a3b, a3a, a39, a3e)
Digits(4)=Array(a40, a45, a4c, a4d, a48, a41, a46, a4f, a42, a43, a44, a47, a4b, a4a, a49, a4e)
Digits(5)=Array(a50, a55, a5c, a5d, a58, a51, a56, a5f, a52, a53, a54, a57, a5b, a5a, a59, a5e)
Digits(6)=Array(a60, a65, a6c, a6d, a68, a61, a66, a6f, a62, a63, a64, a67, a6b, a6a, a69, a6e)
Digits(7)=Array(a70, a75, a7c, a7d, a78, a71, a76, a7f, a72, a73, a74, a77, a7b, a7a, a79, a7e)
Digits(8)=Array(a80, a85, a8c, a8d, a88, a81, a86, a8f, a82, a83, a84, a87, a8b, a8a, a89, a8e)
Digits(9)=Array(a90, a95, a9c, a9d, a98, a91, a96, a9f, a92, a93, a94, a97, a9b, a9a, a99, a9e)
Digits(10)=Array(aa0, aa5, aac, aad, aa8, aa1, aa6, aaf, aa2, aa3, aa4, aa7, aab, aaa, aa9, aae)
Digits(11)=Array(ab0, ab5, abc, abd, ab8, ab1, ab6, abf, ab2, ab3, ab4, ab7, abb, aba, ab9, abe)
Digits(12)=Array(ac0, ac5, acc, acd, ac8, ac1, ac6, acf, ac2, ac3, ac4, ac7, acb, aca, ac9, ace)
Digits(13)=Array(ad0, ad5, adc, add, ad8, ad1, ad6, adf, ad2, ad3, ad4, ad7, adb, ada, ad9, ade)
Digits(14)=Array(ae0, ae5, aec, aed, ae8, ae1, ae6, aef, ae2, ae3, ae4, ae7, aeb, aea, ae9, aee)
Digits(15)=Array(af0, af5, afc, afd, af8, af1, af6, aff, af2, af3, af4, af7, afb, afa, af9, afe)
Digits(16)=Array(b00, b02, b05, b06, b04, b01, b03, b07)
Digits(17)=Array(b10, b12, b15, b16, b14, b11, b13, b17)
Digits(18)=Array(b20, b22, b25, b26, b24, b21, b23, b27)
Digits(19)=Array(b30, b32, b35, b36, b34, b31, b33, b37)
Digits(20)=Array(b40, b42, b45, b46, b44, b41, b43, b47)
Digits(21)=Array(b50, b52, b55, b56, b54, b51, b53, b57)
Digits(22)=Array(b60, b62, b65, b66, b64, b61, b63, b67)
Digits(23)=Array(b70, b72, b75, b76, b74, b71, b73, b77)
Digits(24)=Array(b80, b82, b85, b86, b84, b81, b83, b87)
Digits(25)=Array(b90, b92, b95, b96, b94, b91, b93, b97)
Digits(26)=Array(ba0, ba2, ba5, ba6, ba4, ba1, ba3, ba7)
Digits(27)=Array(bb0, bb2, bb5, bb6, bb4, bb1, bb3, bb7)
Digits(28)=Array(bc0, bc2, bc5, bc6, bc4, bc1, bc3, bc7)
Digits(29)=Array(bd0, bd2, bd5, bd6, bd4, bd1, bd3, bd7)
Digits(30)=Array(be0, be2, be5, be6, be4, be1, be3, be7)
Digits(31)=Array(bf0, bf2, bf5, bf6, bf4, bf1, bf3, bf7)
Digits(32)=Array(c00, c02, c05, c06, c04, c01, c03, c07)
Digits(33)=Array(c10, c12, c15, c16, c14, c11, c13)
Digits(34)=Array(c20, c22, c25, c26, c24, c21, c23)
Digits(35)=Array(c30, c32, c35, c36, c34, c31, c33, c37)
Digits(36)=Array(c40, c42, c45, c46, c44, c41, c43)
Digits(37)=Array(c50, c52, c55, c56, c54, c51, c53)
Digits(38)=Array(c60, c62, c65, c66, c64, c61, c63)
Sub Leds_Timer
Dim ChgLED, ii, jj, num, chg, stat, obj, b, x
ChgLED=Controller.ChangedLEDs(&Hffffffff, &Hffffffff)
If Not IsEmpty(ChgLED) Then
For ii=0 To UBound(chgLED)
num=chgLED(ii, 0) : chg=chgLED(ii, 1) : stat=chgLED(ii, 2)
For Each obj In Digits(num)
If chg And 1 Then obj.State=stat And 1
chg=chg\2 : stat=stat\2
Next
Next
End If
End Sub