! Asteroids Deluxe Test Script ! Douglas Gauck Oct 31 2018 ! version 0.1 ! no DIP test yet INCLUDE "6502.POD" SETUP POD 6502 TRAP ACTIVE FORCE LINE NO ! Intercepts and prevents resets from WDDOG barking PROGRAM 0 DPY-ASTEROIDS DLX TEST PGM DPY-+-PRESS CONT ! the + appends text to previous output STOP ! waits for CONT keypress 0: LABEL 0 DPY-1=RAM 2=ROM 3=SND 4=IO DPY-+ 5=VG 6=ADEC 7=DIP /1 IF REG1 = 1 GOTO 1 IF REG1 = 2 GOTO 2 IF REG1 = 3 GOTO 3 IF REG1 = 4 GOTO 4 IF REG1 = 5 GOTO 5 IF REG1 = 6 GOTO 6 IF REG1 = 7 GOTO 7 GOTO 0 1: LABEL 1 EXECUTE PROGRAM 10 ! RAM Test GOTO 0 2: LABEL 2 EXECUTE PROGRAM 20 ! ROM Test GOTO 0 3: LABEL 3 EXECUTE PROGRAM 30 ! Sound Test GOTO 0 4: LABEL 4 EXECUTE PROGRAM 40 ! I/O Test GOTO 0 5: LABEL 5 EXECUTE PROGRAM 50 ! Vector Graphics Test GOTO 0 6: LABEL 6 EXECUTE PROGRAM 60 ! Address Decoders Test GOTO 0 7: LABEL 7 EXECUTE PROGRAM 70 ! DIP switch test GOTO 0 PROGRAM 10 ! RAM test DPY-TESTING VECTOR RAM R3 M3# RAM SHORT @ 4000-43FF ! RAM short is usually thorough enough and faster then RAM long DPY-TESTING VECTOR RAM P3 N3# RAM SHORT @ 4400-47FF DPY-TESTING PGM RAM L1 M1# RAM SHORT @ 0000-03FF DPY-RAM TESTING COMPLETE DPY-+-PRESS CONT# STOP PROGRAM 20 !Choose which ROM set is tested 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 V.1 ROM D1 036430 ROM TEST @ 6000-67FF SIG 9037 DPY-TESTING V.1 ROM E//F1 036431 ROM TEST @ 6800-6FFF SIG AED2 DPY-TESTING V.1 ROM H1 036432 ROM TEST @ 7000-77FF SIG 2B5A DPY-TESTING V.1 ROM J1 036433 ROM TEST @ 7800-7FFF SIG 7D4E DPY-TESTING V.1 VECTOR ROM R2 036800 ROM TEST @ 4800-4FFF SIG B7C2 GOTO C ! Second Vector ROM is the same 2: LABEL 2 DPY-TESTING V.2 ROM D1 036430 ROM TEST @ 6000-67FF SIG E676 DPY-TESTING V.2 ROM E//F1 036431 ROM TEST @ 6800-6FFF SIG 8986 DPY-TESTING V.2 ROM H1 036432 ROM TEST @ 7000-77FF SIG 5963 DPY-TESTING V.2 ROM J1 036433 ROM TEST @ 7800-7FFF SIG EC8C DPY-TESTING V.2 VECTOR ROM R2 036800 ROM TEST @ 4800-4FFF SIG FEA2 C: LABEL C ! As in Common to both ROM revisions DPY-TESTING VECTOR ROM N//P2 036799 ROM TEST @ 5000-57FF SIG E6D9 F: LABEL F DPY-ROM TEST COMPLETE STOP PROGRAM 30 ! Sounds test REG1 = 40 DPY-EXPLOSION SND. CONT=NEXT SND%1# 0: LABEL 0 WRITE @ 3600 = FF IF REG1 = 25 GOTO 1 GOTO 0 1: LABEL 1 REG1 = 40 DPY-SHIP THRUST SND. CONT= DPY-+NEXT SND%1# 8: LABEL 8 WRITE @ 3C03 = 80 IF REG1 = 25 GOTO 9 GOTO 8 9: REG1 = 2000 ! Base POKEY 1 address REG2 = 2001 REG3 = 2002 REG4 = 2003 REG5 = 2004 REG6 = 2005 REG7 = 2006 REG8 = 2007 REGA = 2008 GOTO 4 4: DPY-TESTING POKEY @@ M7//8 AUDCTL WRITE @ REG1 = 79 WRITE @ REG2 = AF REG9=REGA EXECUTE SWEEP STOP DPY-TESTING POKEY CH1 64KHZ WRITE @ REGA = 00 WRITE @ REG1 = FF WRITE @ REG2 = AF REG9 = REG1 EXECUTE SWEEP DPY-TESTING POKEY CH1 15KHZ WRITE @ REGA = 01 EXECUTE SWEEP DPY-TESTING POKEY CH1 1.79K WRITE @ REGA = 40 EXECUTE SWEEP WRITE @ REGA = 00 DPY-TESTING POKEY CH1 NZ0 WRITE @ REG2 = 0F STOP DPY-TESTING POKEY CH1 NZ2 WRITE @ REG2 = 2F STOP DPY-TESTING POKEY CH1 NZ4 WRITE @ REG2 = 4F STOP DPY-TESTING POKEY CH1 NZ6 WRITE @ REG2 = 6F STOP DPY-TESTING POKEY CH1 NZ8 WRITE @ REG2 = 8F STOP DPY-TESTING POKEY CH1 NZC WRITE @ REG2 = CF STOP WRITE @ REG2 = 00 DPY-TESTING POKEY CH2 64KHZ WRITE @ REGA = 00 WRITE @ REG3 = FF WRITE @ REG4 = AF REG9 = REG3 EXECUTE SWEEP DPY-TESTING POKEY CH2 15KHZ WRITE @ REGA = 01 EXECUTE SWEEP DPY-TESTING POKEY CH2 1.79K WRITE @ REGA = 40 EXECUTE SWEEP WRITE @ REGA = 00 DPY-TESTING POKEY CH2 NZ0 WRITE @ REG4 = 0F STOP DPY-TESTING POKEY CH2 NZ2 WRITE @ REG4 = 2F STOP DPY-TESTING POKEY CH2 NZ4 WRITE @ REG4 = 4F STOP DPY-TESTING POKEY CH2 NZ6 WRITE @ REG4 = 6F STOP DPY-TESTING POKEY CH2 NZ8 WRITE @ REG4 = 8F STOP DPY-TESTING POKEY CH2 NZC WRITE @ REG4 = CF STOP WRITE @ REG4 = 00 DPY-TESTING POKEY CH3 64KHZ WRITE @ REGA = 00 WRITE @ REG5 = FF WRITE @ REG6 = AF REG9 = REG5 EXECUTE SWEEP DPY-TESTING POKEY CH3 15KHZ WRITE @ REGA = 01 EXECUTE SWEEP DPY-TESTING POKEY CH3 1.79K WRITE @ REGA = 40 EXECUTE SWEEP WRITE @ REGA = 00 DPY-TESTING POKEY CH3 NZ0 WRITE @ REG6 = 0F STOP DPY-TESTING POKEY CH3 NZ2 WRITE @ REG6 = 2F STOP DPY-TESTING POKEY CH3 NZ4 WRITE @ REG6 = 4F STOP DPY-TESTING POKEY CH3 NZ6 WRITE @ REG6 = 6F STOP DPY-TESTING POKEY CH3 NZ8 WRITE @ REG6 = 8F STOP DPY-TESTING POKEY CH3 NZC WRITE @ REG6 = CF STOP WRITE @ REG6 = 00 DPY-TESTING POKEY CH4 64KHZ WRITE @ REGA = 00 WRITE @ REG7 = FF WRITE @ REG8 = AF REG9 = REG7 EXECUTE SWEEP DPY-TESTING POKEY CH4 15KHZ WRITE @ REGA = 01 EXECUTE SWEEP DPY-TESTING POKEY CH4 1.79K WRITE @ REGA = 40 EXECUTE SWEEP WRITE @ REGA = 00 DPY-TESTING POKEY CH4 NZ0 WRITE @ REG8 = 0F STOP DPY-TESTING POKEY CH4 NZ2 WRITE @ REG8 = 2F STOP DPY-TESTING POKEY CH4 NZ4 WRITE @ REG8 = 4F STOP DPY-TESTING POKEY CH4 NZ6 WRITE @ REG8 = 6F STOP DPY-TESTING POKEY CH4 NZ8 WRITE @ REG8 = 8F STOP DPY-TESTING POKEY CH4 NZC WRITE @ REG8 = CF STOP WRITE @ REG8 = 00 F: LABEL F DPY-SOUND TEST COMPLETE. PRESS CONT# STOP PROGRAM SWEEP REG1 = FF 0: WRITE @ REG9 = REG1 DEC REG1 IF REG1 > 0 GOTO 0 WRITE @ REG9 = 00 PROGRAM 40 ! I/O test DPY-COMING SOON STOP PROGRAM 50 ! Vector Graphics test WRITE @ 4000 = FF ! These are vector drawing commands in 01-00 order, i.e. they are executed A3 FF 02 00 97 FF... WRITE @ 4001 = A3 ! See Atari TM-179 WRITE @ 4002 = 00 WRITE @ 4003 = 02 WRITE @ 4004 = FF WRITE @ 4005 = 97 WRITE @ 4006 = 00 WRITE @ 4007 = 90 WRITE @ 4008 = 00 WRITE @ 4009 = A2 WRITE @ 400A = 00 WRITE @ 400B = 00 WRITE @ 400C = 00 WRITE @ 400D = 90 WRITE @ 400E = FF WRITE @ 400F = 33 WRITE @ 4010 = 00 WRITE @ 4011 = E0 DPY-CONFIRM PLUS PATTERN. CONT# DPY-+=EXIT%1# 0: LABEL 0 WRITE @ 3000 = 00 ! Poke DMAGO to make VSM execute drawing commands IF REG1 = 0 GOTO 2 GOTO 0 2: LABEL 2 STOP PROGRAM 60 ! Address Decoders test SYNC ADDRESS ! as opposed to sync data DPY-PLACE PROBE ON CHIP-PIN# STOP REG8 = 1 ! REG8 is global. 1 to read, 0 to write REGB = 40 ! REGB is how many pulses we are expecting DPY-ZPAGE E3-12# ! RAM enable line for men 0000-01FF STOP REG9 = 0000 ! REG9 is global. Holds address to be read from or written to DPY-PROBING...# EXECUTE PROGRAM 65 DPY-VMEM E3-10# STOP REG9 = 4000 DPY-PROBING...# EXECUTE PROGRAM 65 DPY-PMEM E3-9# STOP REG9 = 0200 DPY-PROBING...# EXECUTE PROGRAM 65 DPY-OPTS E3-6# STOP REGA = 0 ! REGA is global. Holds value to be written REG9 = 2800 DPY-PROBING...# EXECUTE PROGRAM 65 DPY-SINP1 E3-5# STOP REG9 = 2400 DPY-PROBING...# EXECUTE PROGRAM 65 DPY-SINP0 E3-4# STOP REG9 = 2000 DPY-PROBING...# EXECUTE PROGRAM 65 DPY-VRAM L2-12# STOP REG9 = 4000 DPY-PROBING...# EXECUTE PROGRAM 65 DPY-VROM1 L2-11# STOP REG9 = 4800 DPY-PROBING...# EXECUTE PROGRAM 65 DPY-VROM2 L2-10# STOP REG9 = 5000 DPY-PROBING...# EXECUTE PROGRAM 65 DPY-PROM3 L2-7# STOP REG9 = 7800 DPY-PROBING...# EXECUTE PROGRAM 65 DPY-PROM2 L2-6# STOP REG9 = 7000 DPY-PROBING...# EXECUTE PROGRAM 65 DPY-PROM1 L2-5# STOP REG9 = 6800 DPY-PROBING...# EXECUTE PROGRAM 65 DPY-PROM0 L2-4# STOP REG9 = 6000 DPY-PROBING...# EXECUTE PROGRAM 65 DPY-NOISERST L5-9# STOP REG9 = 3E00 REG8 = 0 REGA = FF DPY-PROBING...# EXECUTE PROGRAM 65 DPY-AUDIO L5-7# STOP REG9 = 3C00 DPY-PROBING...# EXECUTE PROGRAM 65 DPY-EACONTROL L5-6# STOP REG9 = 3A00 DPY-PROBING...# EXECUTE PROGRAM 65 DPY-DMACNT L5-5# STOP REG9 = 3800 DPY-PROBING...# EXECUTE PROGRAM 65 DPY-EXPLODE L5-4# STOP REG9 = 3600 DPY-PROBING...# EXECUTE PROGRAM 65 DPY-WDCLR L5-3# STOP REG9 = 3400 DPY-PROBING...# EXECUTE PROGRAM 65 DPY-EAADDRL L5-2# STOP REG9 = 3200 DPY-PROBING...# EXECUTE PROGRAM 65 DPY-DMAGO L5-1# STOP REG9 = 3000 DPY-PROBING...# EXECUTE PROGRAM 65 DPY-TEST COMPLETE# STOP PROGRAM 62 ! Collect data for PGM 60 DPY-ENTER ADDR, PROBE /1 REG8 = REG1 READ PROBE REG1 = 40 1: LABEL 1 WRITE @ REG8 = FF DEC REG1 IF REG1 > 0 GOTO 1 READ PROBE REG0 = REG0 AND 7F IF REG0 = 40 GOTO 2 DPY-INCORRECT WAS $0 NOT 16 GOTO 3 2: LABEL 2 DPY-COUNT CORRECT $0 3: LABEL 3 PROGRAM 63 DPY-ENTER HEX ADDRESS /1 READ @ REG1 DPY ADDR $1 HAS $E STOP PROGRAM 65 ! Subroutine to count pulses at probe READ PROBE ! Data from probe tip goes into REG0 REG1 = REGB ! REG1 is local copy of count 1: LABEL 1 IF REG8 = 0 GOTO 2 ! Branch according to R/W READ @ REG9 GOTO 3 2: LABEL 2 WRITE @ REG9 = REGA 3: LABEL 3 DEC REG1 IF REG1 > 0 GOTO 1 READ PROBE AUX ADDRESS $9 DATA $0 ! output to buffer for debugging REG0 = REG0 AND 7F ! Apply bit mask and accumulate pulses IF REG0 = REGB GOTO 4 DPY-+CNT BAD. GOTO 5 4: LABEL 4 DPY-+ OK. 5: LABEL 5 DPY-+COUNT @0=@B# STOP PROGRAM 70 ! DIP switch test (needs work) READ 2803 DPY $E READ 2802 DPY +$E READ 2801 DPY +$E READ 2800 DPY +$E STOP PROGRAM 71 ! DIP switch test (needs work) REGF = 27FF SWITCHLOOP: INC REGF INC REG2 READ @REGF AUX REGF = @F IF REGE AND 1 >0 GOTO SWR6OFF ! ? Need to step from 2800 - 2803 and read X3 each time GOTO SWR6ON NEXTSW: IF REGE AND 2 >0 GOTO SWR6OFF ! ? GOTO SWR6ON ADDTEST: IF REGF >2803 GOTO CONT ! ? GOTO SWITCHLOOP SWR6ON: DPY-# DPY-R6 NUMBER $2 ON STOP GOTO NEXTSW SWR6OFF: DPY-# DPY-R6 NUMBER $2 OFF STOP GOTO NEXTSW CONT: DPY-# DPY-DIP TEST COMPLETE STOP PROGRAM 80 ! Unknown, but it does affect Vector Graphics. SYNC DATA 2: LABEL 2 DPY-CONT START. DPY-+# STOP READ PROBE EXECUTE PROGRAM 85 READ PROBE REG0 = REG0 SHR SHR SHR SHR REG0 = REG0 SHR SHR SHR SHR REG0 = REG0 AND FFFF DPY-SIG=$0 DPY-+# STOP GOTO 2 PROGRAM 85 ! Subroutine used by PGM 80 WRITE @ 4000 = FF WRITE @ 4001 = A3 WRITE @ 4002 = 00 WRITE @ 4003 = 02 WRITE @ 4004 = FF WRITE @ 4005 = 97 WRITE @ 4006 = 00 WRITE @ 4007 = 90 WRITE @ 4008 = 00 WRITE @ 4009 = A2 WRITE @ 400A = 00 WRITE @ 400B = 00 WRITE @ 400C = 00 WRITE @ 400D = 90 WRITE @ 400E = FF WRITE @ 400F = 33 WRITE @ 4010 = 00 WRITE @ 4011 = E0 WRITE @ 3000 = 00