waitstates = 0 '| = gap '00-31 = sprite of this size 'xx = sprite not used 'z = end of data ' = allows gaps to be inserted in the data, but have no render effect DIM tester(20) DIM errcounta(30), errcountb(30), errcountc(30) thiserr = 1 'GOTO dongs 'test 1, 2, 3 'test 4, 5, 6 FOR uu = 0 TO 1 FOR rr = 1 TO 3 CLS COLOR 15 PRINT "test #"; rr + (uu * 3) FOR yy = 8 TO 0 STEP -1 GOSUB readdat test$ = "" IF uu = 1 THEN test$ = "|" FOR xx = 0 TO 7 IF (xx = yy) AND (xx = 0) THEN test$ = "xx" IF (xx = yy) THEN test$ = test$ + "|" ELSE test$ = test$ + "0" + HEX$(rr): IF (uu = 1) THEN test$ = test$ + "|" NEXT test$ = test$ + "z" 'PRINT test$ GOSUB dotest PRINT NEXT GOSUB showerr thiserr = thiserr + 1 WHILE (INKEY$ = ""): WEND NEXT NEXT 'test 7 'sprites touching dongs: CLS COLOR 15 PRINT "test # 7" FOR yy = 8 TO 0 STEP -1 GOSUB readdat test$ = "|" FOR xx = 0 TO 7 IF (xx = yy) THEN test$ = test$ + "01" ELSE test$ = test$ + "01|" NEXT test$ = test$ + "z" 'PRINT test$ GOSUB dotest PRINT NEXT GOSUB showerr thiserr = thiserr + 1 WHILE (INKEY$ = ""): WEND 'test 8: CLS COLOR 15 PRINT "test # 8" FOR yy = 8 TO 0 STEP -1 GOSUB readdat test$ = "|" FOR xx = 0 TO 7 IF (xx = yy) OR (xx = (yy + 1)) THEN test$ = test$ + "01" ELSE test$ = test$ + "01|" NEXT test$ = test$ + "z" 'PRINT test$ GOSUB dotest PRINT NEXT GOSUB showerr thiserr = thiserr + 1 WHILE (INKEY$ = ""): WEND 'test 9 (3 parts) CLS COLOR 15 PRINT "test # 9" FOR rr = 1 TO 3 FOR qq = 0 TO 3 READ testx$(qq) NEXT FOR qq = 0 TO 3 GOSUB readdat test$ = testx$(qq) GOSUB dotest PRINT NEXT PRINT NEXT GOSUB showerr thiserr = thiserr + 1 WHILE (INKEY$ = ""): WEND 'tests 10-12 'tests 13-15 FOR uu = 0 TO 1 FOR rr = 0 TO 2 READ nlines CLS COLOR 15 PRINT "test #"; rr + 10 + (uu * 3) lasttest = 0 IF (uu = 1) AND (rr = 2) THEN lasttest = 1 FOR qq = 0 TO nlines - 1 GOSUB readdat test$ = "" IF (uu = 1) AND (rr < 2) THEN test$ = "|" FOR xx = 0 TO 3 p$ = STR$(qq + 1) p$ = RIGHT$(p$, LEN(p$) - 1) IF LEN(p$) = 1 THEN p$ = "0" + p$ IF (lasttest = 0) AND (xx = rr) THEN test$ = test$ + p$ ELSE IF (lasttest = 0) THEN test$ = test$ + "01" IF (lasttest = 1) AND (xx = 0) THEN test$ = test$ + p$ + "|" ELSE IF (lasttest = 1) THEN test$ = test$ + "01" NEXT test$ = test$ + "z" 'PRINT test$ GOSUB dotest PRINT NEXT GOSUB showerr thiserr = thiserr + 1 WHILE (INKEY$ = ""): WEND NEXT NEXT FOR rr = 0 TO 9 READ testx$ CLS COLOR 15 PRINT "test #"; rr + 16 FOR waitstates = 0 TO 15 GOSUB readdat test$ = testx$ GOSUB dotest PRINT NEXT GOSUB showerr thiserr = thiserr + 1 WHILE (INKEY$ = ""): WEND NEXT wasbad = 0 istotal = 0 CLS COLOR 15 PRINT "Report" PRINT PRINT "test# percentage ++++ ---- errs total OK" PRINT "---------------------------------------------------" FOR a = 1 TO 25 notok = errcounta(a) + errcountc(a) isok = errcountb(a) istotal = istotal + isok IF notok = 0 THEN GOTO skipres wasbad = 1 percent = isok / (isok + notok) * 100 PRINT USING "## ###.#### "; a; percent; PRINT USING " ### ### "; errcountc(a), errcounta(a); PRINT USING "### ### ###"; notok; isok; notok + isok skipres: NEXT IF (wasbad = 0) THEN PRINT "Woot, no errors found! All"; istotal; "tests pass!" END readdat: lastone = 0 xcount = 0 WHILE (lastone > -1) READ tester(xcount) lastone = tester(xcount) xcount = xcount + 1 WEND RETURN dotest: 'find the first visible sprite spritenum = -1 pointer = 1 totalcycles = 0 vnum = 0 GOSUB getentry IF spritesize = -2 THEN RETURN 'first set: cycledel = (spritenum AND 7) + 17 IF (cycledel AND 1) = 1 THEN cycledel = cycledel + 1 IF usegap = 1 THEN cycledel = cycledel + 2 totalcycles = cycledel GOSUB printit '-------------------- 'all other cycles pointer = pointer - 2 ' we fix up so we run the last sprite again IF ((spritesize = 1) AND (usegap = 0)) AND (waitstates = 0) THEN totalcycles = totalcycles + 2 morecycles: GOSUB getentry IF spritesize = -2 THEN RETURN IF spritesize = 0 THEN spritesize = 32 'a size of 0 is actually a size of 32 usegap = 0 IF MID$(test$, pointer, 1) = "|" THEN pointer = pointer + 1: usegap = 1 cycledel = (3 * spritesize) + waitstates + 15 IF (cycledel AND 1) THEN cycledel = cycledel + 1 totalcycles = totalcycles + cycledel IF (totalcycles = 46) THEN totalcycles = totalcycles + 2 offset = 0 IF (totalcycles > 48) THEN offset = (totalcycles AND 2) cycledel = cycledel + offset totalcycles = totalcycles + offset IF (usegap = 1) THEN cycledel = cycledel + 2 IF (usegap = 1) THEN totalcycles = totalcycles + 2 GOSUB printit GOTO morecycles getentry: usegap = 0 spritesize = -1 spritenum = spritenum + 1 WHILE (spritesize = -1) x$ = MID$(test$, pointer, 1) IF x$ = "z" THEN spritesize = -2 IF x$ = "|" THEN usegap = 1 IF x$ = "x" THEN pointer = pointer + 1: spritenum = spritenum + 1 IF (x$ >= "0") AND (x$ <= "9") THEN spritesize = VAL(MID$(test$, pointer, 2)): pointer = pointer + 1 pointer = pointer + 1 WEND RETURN printit: w$ = STR$(cycledel) w$ = RIGHT$(w$, LEN(w$) - 1) IF tester(vnum) = -1 THEN RETURN IF cycledel < tester(vnum) THEN COLOR 3: errcounta(thiserr) = errcounta(thiserr) + 1 IF cycledel = tester(vnum) THEN COLOR 2: errcountb(thiserr) = errcountb(thiserr) + 1 IF cycledel > tester(vnum) THEN COLOR 4: errcountc(thiserr) = errcountc(thiserr) + 1 IF usegap THEN PRINT "|"; ELSE PRINT " "; PRINT "["; w$; w$ = STR$(tester(vnum)) w$ = RIGHT$(w$, LEN(w$) - 1) PRINT ","; w$; PRINT "]"; vnum = vnum + 1 RETURN showerr: COLOR 15 notok = errcounta(thiserr) + errcountc(thiserr) isok = errcountb(thiserr) PRINT PRINT "less than:"; errcounta(thiserr); PRINT " greater than:"; errcountc(thiserr) PRINT "OK:"; isok; PRINT " not OK:"; notok; PRINT " "; isok / (isok + notok) * 100; "%" RETURN 'tests 1-3 DATA 18,18,18,20,20,20,20,20,20,-1 DATA 18,18,18,20,20,20,20,22,18,20,-1 DATA 18,18,18,20,20,20,22,18,20,20,-1 DATA 18,18,18,20,20,22,18,20,20,20,-1 DATA 18,18,18,20,22,18,20,20,20,20,-1 DATA 18,18,18,22,18,20,20,20,20,20,-1 DATA 18,18,20,18,20,20,20,20,20,20,-1 DATA 18,20,20,20,20,20,20,20,20,20,-1 DATA 20,18,18,20,20,20,20,20,20,20,-1 DATA 18,22,24,24,24,24,24,24,24,-1 DATA 18,22,24,24,24,24,24,26,22,24,-1 DATA 18,22,24,24,24,24,26,22,24,24,-1 DATA 18,22,24,24,24,26,22,24,24,24,-1 DATA 18,22,24,24,26,22,24,24,24,24,-1 DATA 18,22,24,26,22,24,24,24,24,24,-1 DATA 18,22,26,22,24,24,24,24,24,24,-1 DATA 18,24,22,24,24,24,24,24,24,24,-1 DATA 20,22,22,24,24,24,24,24,24,24,-1 DATA 18,24,26,24,24,24,24,24,24,-1 DATA 18,24,26,24,24,24,24,26,26,24,-1 DATA 18,24,26,24,24,24,26,26,24,24,-1 DATA 18,24,26,24,24,26,26,24,24,24,-1 DATA 18,24,26,24,26,26,24,24,24,24,-1 DATA 18,24,26,26,26,24,24,24,24,24,-1 DATA 18,24,28,26,24,24,24,24,24,24,-1 DATA 18,26,24,24,24,24,24,24,24,24,-1 DATA 20,24,24,24,24,24,24,24,24,24,-1 'tests 4-6 DATA 20,20,22,20,20,20,20,20,20,20,-1 DATA 20,20,22,20,20,20,20,20,20,20,-1 DATA 20,20,22,20,20,20,20,20,20,20,-1 DATA 20,20,22,20,20,20,20,20,20,20,-1 DATA 20,20,22,20,20,20,20,20,20,20,-1 DATA 20,20,22,20,20,20,20,20,20,20,-1 DATA 20,20,22,20,20,20,20,20,20,20,-1 DATA 20,20,22,20,20,20,20,20,20,20,-1 DATA 20,20,22,20,20,20,20,20,20,20,-1 DATA 20,24,26,24,24,24,24,24,24,24,-1 DATA 20,24,26,24,24,24,24,24,24,24,-1 DATA 20,24,26,24,24,24,24,24,24,24,-1 DATA 20,24,26,24,24,24,24,24,24,24,-1 DATA 20,24,26,24,24,24,24,24,24,24,-1 DATA 20,24,26,24,24,24,24,24,24,24,-1 DATA 20,24,26,24,24,24,24,24,24,24,-1 DATA 20,24,26,24,24,24,24,24,24,24,-1 DATA 20,24,26,24,24,24,24,24,24,24,-1 DATA 20,26,28,28,28,28,28,28,28,28,-1 DATA 20,26,28,28,28,28,28,28,28,28,-1 DATA 20,26,28,28,28,28,28,28,28,28,-1 DATA 20,26,28,28,28,28,28,28,28,28,-1 DATA 20,26,28,28,28,28,28,28,28,28,-1 DATA 20,26,28,28,28,28,28,28,28,28,-1 DATA 20,26,28,28,28,28,28,28,28,28,-1 DATA 20,26,28,28,28,28,28,28,28,28,-1 DATA 20,26,28,28,28,28,28,28,28,28,-1 'test 7 DATA 20,20,22,20,20,20,20,20,20,18,-1 DATA 20,20,22,20,20,20,20,20,18,22,-1 DATA 20,20,22,20,20,20,20,18,22,20,-1 DATA 20,20,22,20,20,20,18,22,20,20,-1 DATA 20,20,22,20,20,18,22,20,20,20,-1 DATA 20,20,22,20,18,22,20,20,20,20,-1 DATA 20,20,22,18,22,20,20,20,20,20,-1 DATA 20,20,20,22,20,20,20,20,20,20,-1 DATA 20,18,20,20,20,20,20,20,20,20,-1 'test 8 DATA 20,20,22,20,20,20,20,20,20,20,-1 DATA 20,20,22,20,20,20,20,20,18,20,-1 DATA 20,20,22,20,20,20,20,18,20,22,-1 DATA 20,20,22,20,20,20,18,20,22,20,-1 DATA 20,20,22,20,20,18,20,22,20,20,-1 DATA 20,20,22,20,18,20,22,20,20,20,-1 DATA 20,20,22,18,20,22,20,20,20,20,-1 DATA 20,20,20,20,22,20,20,20,20,20,-1 DATA 20,18,18,22,20,20,20,20,20,20,-1 'test 9 DATA "|01|01|01|01|01|01|01|01z" DATA "|0101|0101|01|01|01|01z" DATA "|0101|01|0101|01|01|01z" DATA "|0101|01|01|0101|01|01z" DATA 20,20,22,20,20,20,20,20,18,-1 DATA 20,18,20,18,22,20,20,20,18,-1 DATA 20,18,20,20,18,22,20,20,18,-1 DATA 20,18,20,20,20,18,22,20,18,-1 DATA "|01|01|01|01|01|01|01|01z" DATA "|01|0101|0101|01|01|01z" DATA "|01|0101|01|0101|01|01z" DATA "|01|0101|01|01|0101|01z" DATA 20,20,22,20,20,20,20,20,18,-1 DATA 20,20,20,22,18,22,20,20,18,-1 DATA 20,20,20,22,20,18,22,20,18,-1 DATA 20,20,20,22,20,20,18,22,18,-1 DATA "|01|01|01|01|01|01|01|01z" DATA "|01|01|0101|0101|01|01z" DATA "|01|01|0101|01|0101|01z" DATA "|01|01|0101|01|01|0101z" DATA 20,20,22,20,20,20,20,20,18,-1 DATA 20,20,22,18,22,18,22,20,18,-1 DATA 20,20,22,18,22,20,18,22,18,-1 DATA 20,20,22,18,22,20,20,18,20,-1 'tests 10,11,12 DATA 11 DATA 18,18,18,20,20,-1 DATA 18,22,20,20,20,-1 DATA 18,24,18,20,20,-1 DATA 18,28,20,20,20,-1 DATA 18,30,20,20,20,-1 DATA 18,34,20,20,20,-1 DATA 18,38,20,20,20,-1 DATA 18,42,20,20,20,-1 DATA 18,42,20,20,20,-1 DATA 18,46,20,20,20,-1 DATA 18,50,20,20,20,-1 DATA 11 DATA 18,18,18,20,20,-1 DATA 18,18,22,20,20,-1 DATA 18,18,26,20,20,-1 DATA 18,18,30,20,20,-1 DATA 18,18,30,20,20,-1 DATA 18,18,34,20,20,-1 DATA 18,18,38,20,20,-1 DATA 18,18,42,20,20,-1 DATA 18,18,42,20,20,-1 DATA 18,18,46,20,20,-1 DATA 18,18,50,20,20,-1 DATA 11 DATA 18,18,18,20,20,-1 DATA 18,18,18,24,20,-1 DATA 18,18,18,24,20,-1 DATA 18,18,18,28,20,-1 DATA 18,18,18,32,20,-1 DATA 18,18,18,36,20,-1 DATA 18,18,18,36,20,-1 DATA 18,18,18,40,20,-1 DATA 18,18,18,44,20,-1 DATA 18,18,18,48,20,-1 DATA 18,18,18,48,20,-1 'test 13,14,15 DATA 11 DATA 20,18,18,20,20,-1 DATA 20,22,18,20,20,-1 DATA 20,24,20,20,20,-1 DATA 20,28,20,20,20,-1 DATA 20,32,20,20,20,-1 DATA 20,36,20,20,20,-1 DATA 20,36,20,20,20,-1 DATA 20,40,20,20,20,-1 DATA 20,44,20,20,20,-1 DATA 20,48,20,20,20,-1 DATA 20,48,20,20,20,-1 DATA 11 DATA 20,18,18,20,20,-1 DATA 20,18,22,20,20,-1 DATA 20,18,26,20,20,-1 DATA 20,18,30,20,20,-1 DATA 20,18,30,20,20,-1 DATA 20,18,34,20,20,-1 DATA 20,18,38,20,20,-1 DATA 20,18,42,20,20,-1 DATA 20,18,42,20,20,-1 DATA 20,18,46,20,20,-1 DATA 20,18,50,20,20,-1 DATA 11 DATA 18,20,20,20,20,-1 DATA 18,24,18,20,20,-1 DATA 18,26,20,20,20,-1 DATA 18,30,18,20,20,-1 DATA 18,32,18,20,20,-1 DATA 18,36,18,20,20,-1 DATA 18,40,18,20,20,-1 DATA 18,44,18,20,20,-1 DATA 18,44,18,20,20,-1 DATA 18,48,18,20,20,-1 DATA 18,52,18,20,20,-1 'test 16 DATA "01010101z" DATA 18,18,18,20,20,-1 DATA 18,20,22,20,20,-1 DATA 18,20,22,20,20,-1 DATA 18,22,24,24,24,-1 DATA 18,22,24,24,24,-1 DATA 18,24,26,24,24,-1 DATA 18,24,26,24,24,-1 DATA 18,26,28,28,28,-1 DATA 18,26,28,28,28,-1 DATA 18,28,28,28,28,-1 DATA 18,28,28,28,28,-1 DATA 18,30,32,32,32,-1 DATA 18,30,32,32,32,-1 DATA 18,34,32,32,32,-1 DATA 18,34,32,32,32,-1 DATA 18,34,36,36,36,-1 'test 17 DATA "|01010101z" DATA 20,18,18,20,20,-1 DATA 20,20,20,20,20,-1 DATA 20,20,20,20,20,-1 DATA 20,22,22,24,24,-1 DATA 20,22,22,24,24,-1 DATA 20,24,24,24,24,-1 DATA 20,24,24,24,24,-1 DATA 20,26,28,28,28,-1 DATA 20,26,28,28,28,-1 DATA 20,28,28,28,28,-1 DATA 20,28,28,28,28,-1 DATA 20,32,32,32,32,-1 DATA 20,32,32,32,32,-1 DATA 20,32,32,32,32,-1 DATA 20,32,32,32,32,-1 DATA 20,36,36,36,36,-1 'test 18 DATA "xx01010101z" DATA 18,18,18,20,20,-1 DATA 18,20,22,20,20,-1 DATA 18,20,22,20,20,-1 DATA 18,22,24,24,24,-1 DATA 18,22,24,24,24,-1 DATA 18,24,26,24,24,-1 DATA 18,24,26,24,24,-1 DATA 18,26,28,28,28,-1 DATA 18,26,28,28,28,-1 DATA 18,28,28,28,28,-1 DATA 18,28,28,28,28,-1 DATA 18,30,32,32,32,-1 DATA 18,30,32,32,32,-1 DATA 18,34,32,32,32,-1 DATA 18,34,32,32,32,-1 DATA 18,34,36,36,36,-1 'test 19 DATA "|xxxx01010101z" DATA 22,18,20,20,20,-1 DATA 22,20,22,20,20,-1 DATA 22,20,22,20,20,-1 DATA 22,22,24,24,24,-1 DATA 22,22,24,24,24,-1 DATA 22,24,24,24,24,-1 DATA 22,24,24,24,24,-1 DATA 22,26,28,28,28,-1 DATA 22,26,28,28,28,-1 DATA 22,30,28,28,28,-1 DATA 22,30,28,28,28,-1 DATA 22,30,32,32,32,-1 DATA 22,30,32,32,32,-1 DATA 22,34,32,32,32,-1 DATA 22,34,32,32,32,-1 DATA 22,34,36,36,36,-1 'test 20 DATA "|xxxxxxxx01010101z" DATA 24,18,18,20,20,-1 DATA 24,20,20,20,20,-1 DATA 24,20,20,20,20,-1 DATA 24,22,24,24,24,-1 DATA 24,22,24,24,24,-1 DATA 24,24,24,24,24,-1 DATA 24,24,24,24,24,-1 DATA 24,28,28,28,28,-1 DATA 24,28,28,28,28,-1 DATA 24,28,28,28,28,-1 DATA 24,28,28,28,28,-1 DATA 24,32,32,32,32,-1 DATA 24,32,32,32,32,-1 DATA 24,32,32,32,32,-1 DATA 24,32,32,32,32,-1 DATA 24,36,36,36,36,-1 'test 21 DATA "|xxxxxxxxxxxx01010101z" DATA 26,18,20,20,20,-1 DATA 26,20,20,20,20,-1 DATA 26,20,20,20,20,-1 DATA 26,22,24,24,24,-1 DATA 26,22,24,24,24,-1 DATA 26,26,24,24,24,-1 DATA 26,26,24,24,24,-1 DATA 26,26,28,28,28,-1 DATA 26,26,28,28,28,-1 DATA 26,30,28,28,28,-1 DATA 26,30,28,28,28,-1 DATA 26,30,32,32,32,-1 DATA 26,30,32,32,32,-1 DATA 26,34,32,32,32,-1 DATA 26,34,32,32,32,-1 DATA 26,34,36,36,36,-1 'test 22 DATA "0201010101z" DATA 18,22,20,20,20,-1 DATA 18,22,20,20,20,-1 DATA 18,24,22,20,20,-1 DATA 18,24,22,24,24,-1 DATA 18,26,24,24,24,-1 DATA 18,26,24,24,24,-1 DATA 18,28,24,24,24,-1 DATA 18,28,28,28,28,-1 DATA 18,30,28,28,28,-1 DATA 18,30,28,28,28,-1 DATA 18,34,28,28,28,-1 DATA 18,34,32,32,32,-1 DATA 18,34,32,32,32,-1 DATA 18,34,32,32,32,-1 DATA 18,38,32,32,32,-1 DATA 18,38,36,36,36,-1 'test 23 DATA "0301010101z" DATA 18,24,18,20,20,-1 DATA 18,26,20,20,20,-1 DATA 18,26,20,20,20,-1 DATA 18,28,24,24,24,-1 DATA 18,28,24,24,24,-1 DATA 18,30,24,24,24,-1 DATA 18,30,24,24,24,-1 DATA 18,34,28,28,28,-1 DATA 18,34,28,28,28,-1 DATA 18,34,28,28,28,-1 DATA 18,34,28,28,28,-1 DATA 18,38,32,32,32,-1 DATA 18,38,32,32,32,-1 DATA 18,38,32,32,32,-1 DATA 18,38,32,32,32,-1 DATA 18,42,36,36,36,-1 'test 24 DATA "0102010101z" DATA 18,18,22,20,20,-1 DATA 18,20,22,20,20,-1 DATA 18,20,26,20,20,-1 DATA 18,22,24,24,24,-1 DATA 18,22,28,24,24,-1 DATA 18,24,26,24,24,-1 DATA 18,24,30,24,24,-1 DATA 18,26,28,28,28,-1 DATA 18,26,32,28,28,-1 DATA 18,28,32,28,28,-1 DATA 18,28,32,28,28,-1 DATA 18,30,32,32,32,-1 DATA 18,30,36,32,32,-1 DATA 18,34,36,32,32,-1 DATA 18,34,36,32,32,-1 DATA 18,34,36,36,36,-1 'test 25 DATA "0103010101z" DATA 18,18,26,20,20,-1 DATA 18,20,26,20,20,-1 DATA 18,20,26,20,20,-1 DATA 18,22,28,24,24,-1 DATA 18,22,28,24,24,-1 DATA 18,24,30,24,24,-1 DATA 18,24,30,24,24,-1 DATA 18,26,32,28,28,-1 DATA 18,26,32,28,28,-1 DATA 18,28,36,28,28,-1 DATA 18,28,36,28,28,-1 DATA 18,30,36,32,32,-1 DATA 18,30,36,32,32,-1 DATA 18,34,40,32,32,-1 DATA 18,34,40,32,32,-1 DATA 18,34,40,36,36,-1