! BARE BONES ARCADE BOARD TESTER

! by Mowerman@erols.com

!

! 3/26/02

! Ver 3

!

! This is close to a running program that can be used

! to quickly create a running program for testing arcade boards.

! I have created a running program from this outline and compiled

! it using the RKSIC.exe program for the FLUKE 9010A.

!

!

! PROGRAM HOUSEKEEPING VARIABLES

!

! *GAMENAME....replace with current game name.

! *PROGRAMMER..replace with current author name.

! *DATE........replace with original program date.

! *MODDATE.....replace with revision date.

! *REVISION....replace with revision number.

! *POD.........replace with test pod required.

!

! BOARD SPECIFIC VARIABLES

!

! *RAMSTART1...replace with first RAM location.

! *RAMLENGTH1..replace with size of first RAM chip location.

! *ROMSTART1...replace with first ROM location.

! *ROMEND1.....replace with last location of first ROM.

! *ROMSIG1.....replace with Fluke Signature of first ROM.

! *IO1.........replace with first I/O byte location.

! *DIP1........replace with first Dip Switch byte location.

 

 

! *GAMENAME Test Routine

! Use *POD in CPU processor socket

! Program created by *PROGRAMMER

! Program written on *DATE

! Revision Date *MODDATE

! Revision number *REVISION

INCLUDE "Z80.POD" ! Use to set required pod also used for setup

 

SETUP

TRAP ACTIVE FORCE LINE NO

TRAP ACTIVE INTERRUPT NO

! Pod specific setup controls may be placed here

PROGRAM MAIN

DPY-*GAMENAME TST

DPY-+-PRESS CONT

STOP

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

! MAIN LOOP ROUTINE

! Proposed standard

! 1 = RAM Test

! 2 = ROM Test

! 3 = SND Test

! 4 = I/O Test

! 5 = DIP Test

! 6 = PROBE Test

! 0 = Run UUT

!

! Register 1 is used for keyboard input for selection

!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

MAINLOOP:

DPY- 1-RAM 2-ROM 3-SND 4-IO 5-DIP\1

IF REG1 = 1 GOTO RAMTEST

IF REG1 = 2 GOTO ROMTEST

IF REG1 = 3 GOTO SNDTEST

IF REG1 = 4 GOTO IOTEST

IF REG1 = 5 GOTO DIPTEST

IF REG1 = 6 GOTO PRBTEST

IF REG1 = 9 GOTO RTEST

GOTO MAINLOOP

RAMTEST:

EXECUTE TSTRAM

GOTO MAINLOOP

ROMTEST:

EXECUTE TSTROM

GOTO MAINLOOP

SNDTEST:

EXECUTE TSTSND

GOTO MAINLOOP

IOTEST:

EXECUTE TSTIO

GOTO MAINLOOP

DIPTEST:

EXECUTE DIPTST

GOTO MAINLOOP

PRBTEST:

EXECUTE TSTPRB

GOTO MAINLOOP

RTEST:

EXECUTE TSTRUN

GOTO MAINLOOP

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

! RAM TEST

!

! Display each (set) of RAMs as testing many Rams are 4 bit wide such as

! the common 2114s.

!

! RAM SHORT @ *RAMSTART1 - *RAMLENGTH1

!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

PROGRAM TSTRAM

DPY-TESTING PGM RAM R3 M3#

RAM SHORT @ 0-1FFF

DPY- RAM TEST COMPLETE PRESS CONT#

STOP

 

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

! ROM TEST

!

! Promt for version of ROM (if needed). Response goes into REG1.

! REG1 used for GOTO jump to corresponding LABEL for proper test.

!

! Rom Test is done by removeable roms rather than blocks of memory this

! helps pinpoint the bad rom to replace.

!

! ROM TEST @ *ROMSTART1 - *ROMEND1 SIG *ROMSIG1

!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

PROGRAM TSTROM

0: LABEL 0

DPY-ROM VERSION 1 OR 2 ? /1

IF REG1 = 1 GOTO 1

IF REG1 = 2 GOTO 2

GOTO 0

1: LABEL 1

DPY-TESTING ROM F1

ROM TEST @ 6800-6FFF SIG 53C9

DPY-TESTING ROM D E1

ROM TEST @ 7000-77FF SIG 3D7A

GOTO F

2: LABEL 2

! Insert Version 2 ROM test here

F: LABEL F

DPY-ROM TEST COMPLETE

STOP

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

! SND TEST

!

! Sound test very dependant on game. Some games will have a separate sound

! processor & some may be directly accessable from the main processor.

! This test is for directly accessable sound generators.

!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

PROGRAM TSTSND

REG1 = 40

DPY-Rivet SND. CONT=NEXT

DPY-+ SND%1#

0: LABEL 0

WRITE @7C00 = 05

IF REG1 = 25 GOTO 1

GOTO 0

1: LABEL 1

REG1 = 40

DPY-Springs SND. CONT=NEXT SND%1#

2: LABEL 2

WRITE @ 7C00 = 0A

IF REG1 = 25 GOTO 3

GOTO 2

F: LABEL F

REG1 = 40

DPY-SND TESTS COMPLETE. PRESS

DPY-+ CONT%1#

STOP

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

! I/O TEST

!

! This test may be configured to test all individual inputs one at a time or

! may just be configured to display the bytewide register of inputs. By

! looking at bytewide inputs for Normally Open momentary inputs (buttons /

! joysticks, coins etc) you can verify none are stuck on.

!

! READ @ *IO1

! REGE is contents of previous 9010A command, so display them.

!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

PROGRAM TSTIO

READ @ *IO1

DPY-IO2 = $E PRESS CONT

STOP

DPY-IO TESTS COMPLETE. PRESS

DPY-+ CONT%1#

STOP

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

! DIP SWITCH TEST

!

! The DIP Test is 3 stages, a All on test, All off test, Factory settings

!

! Set REGF = *DIP1 location

! REGE is contents of previous 9010A command, so use it.

!

! I could not get it to compare to REGE so I used REG1 = REGE and then

! compared to REG1.

!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

PROGRAM DIPTST

REGF = *DIP1

SW1ON:

DPY- TURN ALL DIPS ON AT SW1 #

STOP

READ @ REGF

REG1 = REGE

IF REG1 = FF GOTO SW1OFF

DPY- ERROR SW1 OFF PRESS CONT #

STOP

GOTO SW1ON

SW1OFF:

DPY- TURN ALL DIPS OFF AT SW1 #

STOP

READ @REGF

REG1 = REGE

IF REG1 = 0 GOTO SW1FACTORY

DPY- ERROR SW1 ON PRESS CONT #

STOP

GOTO SW1OFF

SW1FACTORY:

DPY- FACT SET SW1 00000001 #

STOP

READ @REGF

REG1 = REGE

IF REG1 = 80 GOTO SW2

DPY- ERROR SW1 FACT PRESS CONT #

STOP

GOTO SW1FACTORY

SW2:

! DONE

DPY-DIP TEST COMPLETE. PRESS

DPY-+ CONT%1#

STOP

 

 

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

! PROBE TEST

!

! Copied from Asteroids Test by *Sorry I don't have his name at the moment

!

! The probe test is designed to excercise given signals on the board, such

! as flip, enable, select etc to aid in finding faults.

!

! I'm not real clear on the implementation here, basically I belive the

! program does a set number of writes to trigger a signal & the probe counts

! to see if it recieves all of the triggered signals. I have noticed that

! it is possible to see the 'wrong' signal & thus get a false positive test.

!

! REG9 = *ProbeLocation1

! REGB = *Number of Triggers excercised

! REG0 = Number of triggers read by probe

!

! Improvement or use of Signatures here should be investigated.

!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

PROGRAM TSTPRB

SYNC ADDRESS

DPY-PLACE PROBE ON POINTS

DPY-+ SHOWN.#

STOP

DPY-FLIP 5J-6.#

STOP

REGB = 1

REG9 = 7D82

REGB = 40

EXECUTE PROGRAM 65

STOP

PROGRAM 65 116 BYTES

READ PROBE

REG1 = REGB

1: LABEL 1

IF REG8 = 0 GOTO 2

READ @ REG9

GOTO 3

2: LABEL 2

WRITE @ REG9 = REGA

3: LABEL 3

DEC REG1

IF REG1 > 0 GOTO 1

READ PROBE

REG0 = REG0 AND 7F

IF REG0 = REGB GOTO 4

DPY-+CNT BAD.

GOTO 5

4: LABEL 4

DPY-+ OK.

5: LABEL 5

DPY-+COUNT @0=@B#

STOP

 

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

! RUN UUT TEST

!

! Simply runs Unit Under Test in operating mode

! May require a pointer, but watchdog/reset feature of board should start

! the board correctly

!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

PROGRAM TSTRUN

DPY-RUNNING BOARD

RUN UUT

STOP

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

! DELAY

!

! Simply runs a 1 second Delay.

!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

PROGRAM DELAY

REG1=40 0:

DEC REG1

IF REG1 >0 GOTO 0