! 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