| 1 |
1000 DEFINT A-Z:A=0:B=2:ON ERROR GOTO 1010:GOTO 1020 |
| 2 |
1010 RESUME NEXT |
| 3 |
1020 _BC |
| 4 |
1030 _TURBO ON |
| 5 |
1040 B=1 |
| 6 |
1050 '#I &HAF,&H32,B |
| 7 |
1060 _TURBO OFF |
| 8 |
1070 ON ERROR GOTO 0:IF FRE(0)<16384 THEN B=0:PRINT" Low RAM"; |
| 9 |
1080 A=0:IF B<>2 THEN GOSUB 1110:GOTO 1940 |
| 10 |
1090 PRINT" _TURBO"; |
| 11 |
1100 _TURBO ON(A,B) |
| 12 |
1110 DIM L(7),K(7),T(7):BEEP:SCREEN 2:COLOR 15,1,1:CLS:F=0:E=&H2000:'F=(VDP(4)AND&HFC)*&H2000:E=((VDP(3)\128)+(VDP(10)*2))*&H2000 |
| 13 |
1120 T$="Kanji I/O Tests":V$="v3.1":N$=" Please share screen pic+model"+CHR$(&H16)+"press a key ":Q=7:W=0:C=PEEK(&H4)+&H100*PEEK(&H5) |
| 14 |
1130 Z=0:D=0:Y=0:S$=" "+T$+" 4/9: Upper Bit Flips "+V$+" ":W=&HFF:GOSUB 1730:W=0:D=0 |
| 15 |
1140 ' 8x16 / 16x16 Kanji only cycling upper address bits |
| 16 |
1150 ZZ=&HC0:ZY=&HC0:Z=0:RESTORE 1790 |
| 17 |
1160 READ K$:IF K$=""THEN GOTO 1250ELSE ZZ=(&H40+ZZ)MOD&H100:ZY=(ZY-&H40*(ZZ=0))MOD&H100:L=0:K=VAL("&H"+K$):IF K<&H100 THEN GOTO 1210:ELSE GOSUB 1670 |
| 18 |
1170 IF Z MOD 32=31 THEN Z=Z+1 |
| 19 |
1180 OUT &HD9+2*L,K+ZY:OUT &HD8+2*L,T+ZZ |
| 20 |
1190 FOR Y=1+2*(Z\32) TO 2+2*(Z\32):FOR X=Z MOD 32 TO 1+Z MOD 32:FOR J=0 TO 7:G=INP(&HD9+2*L):GOSUB 1740:NEXT J:NEXT X:NEXT Y |
| 21 |
1200 Z=Z+2:GOTO 1160 |
| 22 |
1210 IF K>=&H80 THEN K=K+8*96-&H20 |
| 23 |
1220 OUT &HD9,(K-&H20)\&H40+ZY:OUT &HD8,(K-&H20)MOD&H40+ZZ |
| 24 |
1230 FOR Y=1+2*(Z\32) TO 2+2*(Z\32):FOR X=Z MOD 32 TO 1+Z MOD 32:FOR J=0 TO 7:G=INP(&HD9+2*L):ON 1-(X=(Z MOD 32)) GOSUB 1760,1740:NEXT J:NEXT X:NEXT Y |
| 25 |
1240 Z=Z+1:GOTO 1160 |
| 26 |
1250 ' v1.0 only varying upper address bits |
| 27 |
1260 OUT &HD9,&HC2:OUT &HD8,&HBC:OUT &HDB,&H42:OUT &HDA,&H3A |
| 28 |
1270 FOR L=1 TO 0 STEP -1:FOR Y=1+2*(Z\32) TO 2+2*(Z\32):FOR X=2*L+Z MOD 32 TO 2*L+1+Z MOD 32:FOR J=0 TO 7:G=INP(&HD9+2*L):GOSUB 1740:NEXT J:NEXT X:NEXT Y:NEXT L |
| 29 |
1280 Z=Z+4 |
| 30 |
1290 GOSUB 1690:IF A=1 THEN GOTO 1640 |
| 31 |
1300 CLS:Z=0:D=0:Y=0:S$=" "+T$+" 5/9: Lower Readbacks "+V$+" ":W=&HFF:GOSUB 1730:W=0:Z=0:D=0 |
| 32 |
1310 ' 8x16 / 16x16 Kanji only lower-port readbacks |
| 33 |
1320 Z=0:RESTORE 1790 |
| 34 |
1330 READ K$:IF K$=""THEN GOTO 1420ELSE L=0:K=VAL("&H"+K$):IF K<&H100 THEN GOTO 1380:ELSE GOSUB 1670 |
| 35 |
1340 IF Z MOD 32=31 THEN Z=Z+1 |
| 36 |
1350 OUT &HD9+2*L,K:OUT &HD8+2*L,T |
| 37 |
1360 FOR Y=1+2*(Z\32) TO 2+2*(Z\32):FOR X=Z MOD 32 TO 1+Z MOD 32:FOR J=0 TO 7:G=INP(&HD8+2*L):GOSUB 1740:NEXT J:NEXT X:NEXT Y |
| 38 |
1370 Z=Z+2:GOTO 1330 |
| 39 |
1380 IF K>=&H80 THEN K=K+8*96-&H20 |
| 40 |
1390 OUT &HD9,(K-&H20)\&H40:OUT &HD8,(K-&H20)MOD&H40 |
| 41 |
1400 FOR Y=1+2*(Z\32) TO 2+2*(Z\32):FOR X=Z MOD 32 TO 1+Z MOD 32:FOR J=0 TO 7:G=INP(&HD8+2*L):ON 1-(X=(Z MOD 32)) GOSUB 1760,1740:NEXT J:NEXT X:NEXT Y |
| 42 |
1410 Z=Z+1:GOTO 1330 |
| 43 |
1420 ' v1.0 only lower-port readbacks |
| 44 |
1430 OUT &HD9,&H2:OUT &HD8,&H3C:OUT &HDB,&H2:OUT &HDA,&H3A |
| 45 |
1440 FOR L=1 TO 0 STEP -1:FOR Y=1+2*(Z\32) TO 2+2*(Z\32):FOR X=2*L+Z MOD 32 TO 2*L+1+Z MOD 32:FOR J=0 TO 7:G=INP(&HD8+2*L):GOSUB 1740:NEXT J:NEXT X:NEXT Y:NEXT L |
| 46 |
1450 Z=Z+4 |
| 47 |
1460 GOSUB 1690:IF A=1 THEN GOTO 1640 |
| 48 |
1470 CLS:Z=0:D=0:Y=0:S$=" "+T$+" 6/9: Read Port Flips "+V$+" ":W=&HFF:GOSUB 1730:W=0:Z=0:D=0 |
| 49 |
1480 ' 8x16 / 16x16 Kanji only read-port address LSB flips |
| 50 |
1490 Z=0:RESTORE 1790 |
| 51 |
1500 READ K$:IF K$=""THEN GOTO 1590ELSE L=0:K=VAL("&H"+K$):IF K<&H100 THEN GOTO 1550:ELSE GOSUB 1670 |
| 52 |
1510 IF Z MOD 32=31 THEN Z=Z+1 |
| 53 |
1520 OUT &HD9+2*L,K:OUT &HD8+2*L,T |
| 54 |
1530 FOR Y=1+2*(Z\32) TO 2+2*(Z\32):FOR X=Z MOD 32 TO 1+Z MOD 32:FOR J=0 TO 7:G=INP(&HD9-(J MOD 2)+2*L):GOSUB 1740:NEXT J:NEXT X:NEXT Y |
| 55 |
1540 Z=Z+2:GOTO 1500 |
| 56 |
1550 IF K>=&H80 THEN K=K+8*96-&H20 |
| 57 |
1560 OUT &HD9,(K-&H20)\&H40:OUT &HD8,(K-&H20)MOD&H40 |
| 58 |
1570 FOR Y=1+2*(Z\32) TO 2+2*(Z\32):FOR X=Z MOD 32 TO 1+Z MOD 32:FOR J=0 TO 7:G=INP(&HD9-(J MOD 2)+2*L):ON 1-(X=(Z MOD 32)) GOSUB 1760,1740:NEXT J:NEXT X:NEXT Y |
| 59 |
1580 Z=Z+1:GOTO 1500 |
| 60 |
1590 ' v1.0 only read-port address LSB flips |
| 61 |
1600 OUT &HD9,&H2:OUT &HD8,&H3C:OUT &HDB,&H2:OUT &HDA,&H3A |
| 62 |
1610 FOR L=1 TO 0 STEP -1:FOR Y=1+2*(Z\32) TO 2+2*(Z\32):FOR X=2*L+Z MOD 32 TO 2*L+1+Z MOD 32:FOR J=0 TO 7:G=INP(&HD9-(J MOD 2)+2*L):GOSUB 1740:NEXT J:NEXT X:NEXT Y:NEXT L |
| 63 |
1620 Z=Z+4 |
| 64 |
1630 GOSUB 1690 |
| 65 |
1640 IF A=1 THEN SCREEN 0:PRINT"Abnormal exit" |
| 66 |
1650 IF B<>2 THEN RETURN:ELSE GOTO 1930 |
| 67 |
1660 FOR X=(Z+2*N) MOD 32 TO 1+(Z+2*N) MOD 32:FOR J=0 TO 7:G=INP(&HD9+2*L):GOSUB 1740:NEXT J:NEXT X:RETURN |
| 68 |
1670 T=(K MOD &H100)-&H20:K=K\&H100-&H20:IF K>=&H30 THEN K=K-&H30:L=1:ELSE IF K>&H9 AND K<&H30 THEN K=K-&H6:T=T+&H40 |
| 69 |
1680 K=K*96+T:T=K MOD&H40:K=K\&H40:RETURN |
| 70 |
1690 Y=23:S$=N$:W=&HFF:GOSUB 1730:W=0 |
| 71 |
1700 I$=INKEY$:IF I$=CHR$(&H3) OR I$=CHR$(&H1B) THEN SCREEN 0:A=1:GOTO 1720:ELSE:IF I$<>"" THEN GOTO 1700:ELSE BEEP |
| 72 |
1710 I$=INKEY$:IF I$="" THEN GOTO 1710:ELSE IF I$=CHR$(&H3) OR I$=CHR$(&H1B) THEN SCREEN 0:A=1:GOTO 1720 |
| 73 |
1720 RETURN |
| 74 |
1730 D=0:FOR X=0 TO LEN(S$)-1:V=ASC(MID$(S$,1+X,1)):Q=7+2*(V>=&H20 AND V<&H7F):FOR J=0 TO 7:G=PEEK(C+8*V+J):GOSUB 1740:NEXT J:D=D+Q-7:NEXT X:Q=7:RETURN |
| 75 |
1740 GG=G XOR W:IF GG=0 THEN RETURN:ELSE XX=8*X+D:IF GG=&HFF THEN YY=8*Y+J:LINE(XX,YY)-(XX+Q,YY),15:RETURN:ELSE IF Q=7 AND D MOD 8=0 THEN GOTO 1770:ELSE M=&H80:YY=8*Y+J:FOR I=0 TO Q:IF (GG\M)MOD 2<>0 THEN PSET(XX+I,YY),15 |
| 76 |
1750 M=M\2:NEXT I:RETURN |
| 77 |
1760 RETURN |
| 78 |
1770 O=Y*&H100+XX+J:VPOKE E+O,15*&H10:VPOKE F+O,GG:RETURN |
| 79 |
1780 IF ((Z+15)MOD 32)<15 THEN Z=((Z\32)+2)*32:RETURN:ELSE RETURN |
| 80 |
1790 DATA 4C,76,31,20,3441,3B7A,2127,376E,3250,3F65,4C5A,3662,455A,467C,472F,315F,3B7E,4A2C,4943,4934,4069,4B7C,4267,4366,3E2E |
| 81 |
1800 DATA 20,2452,2469,242C,244A,20,252B,253F,252B,254A,2352,236F,236D,2361,236A,2369,20,B6,C0,B6,C5,20,52,6F,6D,61,6A,69 |
| 82 |
1810 DATA 2221,217A,2227,2225 |
| 83 |
1820 DATA 2347,2372,2365,2365,2374,2369,236E,2367,2373,212A,2121,2350,2355,2354,234B,2341,234E,234A,2349 |
| 84 |
1830 DATA 2148,3441,3B7A,244F,3A47,3962,2447,2439,2123,2149 |
| 85 |
1840 DATA 297B,297C,297A |
| 86 |
1850 DATA 4C,76,32,20,3441,3B7A,2127,5579,5378,5579,5239,5378,524C,5144,7775,776F,7773,7771 |
| 87 |
1860 DATA 534C,5376,5332,5F21,665A,5127,5121,534D,5349,5353,5344,5352,5341,5357,534E,512A |
| 88 |
1870 DATA 4C,76,31,2F,4C,76,32,3A,217C,517A,2121,2121:'v1.0 |
| 89 |
1880 DATA 2363,5239,236F,5241,264F,5161,264A,5144:'v2.0 |
| 90 |
1890 DATA 4C,76,32,E3,4C,76,31,3A,517C,217A,2121,2121 |
| 91 |
1900 DATA 5363,2239,536F,2241,564F,2161,564A,2144 |
| 92 |
1910 DATA 20,2277,50,72,65,76,69,6F,75,73,20,74,65,73,74,2278,2121,2327,2121,20 |
| 93 |
1920 DATA:'End of DATA |
| 94 |
1930 _TURBO OFF |
| 95 |
1940 IF A=0 THEN SCREEN 0:LOCATE 0,23:PRINT"Please wait, loading part C...";:RUN"KTST31C.ASC" |
| 96 |
1950 PRINT:PRINT"If you want to run all tests again:":PRINT:PRINT" RUN "CHR$(&H22)"KTST31.ASC"CHR$(&H22):PRINT |
| 97 |
1960 END |