| 1 |
1000 DEFINT A-Z:A=0:B=1:REM This version is intended for compilation by MSX-BACON. Otherwise it will run very slowly, provided it can even fit in BASIC RAM. |
| 2 |
1010 GOSUB 1020:GOTO 2010 |
| 3 |
1020 DIM L(7),K(7),T(7):BEEP:SCREEN 2:COLOR 15,1,1:CLS:F=0:E=&H2000 |
| 4 |
1030 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) |
| 5 |
1040 Z=0:D=0:Y=0:S$=" "+T$+" 1/9: Kanji Detection "+V$+" ":W=&HFF:GOSUB 1750:W=0:D=0 |
| 6 |
1050 ' 6x8 / 8x8 BIOS |
| 7 |
1060 FOR Y=1 TO 2:S$="":IF Y=1 THEN RESTORE 1810:ELSE RESTORE 1840 |
| 8 |
1070 READ K$:IF K$="" THEN GOTO 1080:ELSE K$="&H"+K$:S$=S$+CHR$(VAL(K$)):GOTO1070 |
| 9 |
1080 D=0:GOSUB 1750:D=0:NEXT Y |
| 10 |
1090 ' 8x16 / 16x16 Kanji |
| 11 |
1100 Z=32:RESTORE 1860 |
| 12 |
1110 READ K$:IF K$=""THEN GOTO 1200ELSE L=0:K=VAL("&H"+K$):IF K<&H100 THEN GOTO 1160:ELSE GOSUB 1690 |
| 13 |
1120 IF Z MOD 32=31 THEN Z=Z+1 |
| 14 |
1130 OUT &HD9+2*L,K:OUT &HD8+2*L,T |
| 15 |
1140 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 1760:NEXT J:NEXT X:NEXT Y |
| 16 |
1150 Z=Z+2:GOTO 1110 |
| 17 |
1160 IF K>=&H80 THEN K=K+8*96-&H20 |
| 18 |
1170 OUT &HD9,(K-&H20)\&H40:OUT &HD8,(K-&H20)MOD&H40 |
| 19 |
1180 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 1780,1760:NEXT J:NEXT X:NEXT Y |
| 20 |
1190 Z=Z+1:GOTO 1110 |
| 21 |
1200 ' v1.0 |
| 22 |
1210 OUT &HD9,&H2:OUT &HD8,&H3C:OUT &HDB,&H2:OUT &HDA,&H3A |
| 23 |
1220 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 1760:NEXT J:NEXT X:NEXT Y:NEXT L |
| 24 |
1230 Z=Z+4 |
| 25 |
1240 GOSUB 1710:IF A=1 THEN GOTO 1660 |
| 26 |
1250 CLS:Z=0:D=0:Y=0:S$=" "+T$+" 2/9: Interleaving A "+V$+" ":W=&HFF:GOSUB 1750:W=0:Z=0:D=0 |
| 27 |
1260 RESTORE 1950:FOR N=0 TO 7:READ K$:L=0:K=VAL("&H"+K$):GOSUB 1690:L(N)=L:K(N)=K:T(N)=T:NEXT N |
| 28 |
1270 FOR N=2 TO 7:IF L(0)<>0 OR L(N)<>L(N-2)OR L(N)=L(N-1)OR((K(N)<>K(N-2))AND(T(N)<>T(N-2)))THEN SCREEN 0:PRINT"Data does not conform":A=1:GOTO 1660:ELSE NEXT N |
| 29 |
1280 'plan 1/2/3/4 |
| 30 |
1290 FOR R=0 TO 1:GOSUB 1800 |
| 31 |
1300 FOR L=0 TO 1:FOR N=0 TO 7:K=K(N):T=T(N):IF L(N)<>L THEN GOTO 1350 |
| 32 |
1310 IF (R MOD 2=1) AND (N<2 OR T((8+N-2)MOD 8)<>T) THEN OUT &HD8+2*L,T |
| 33 |
1320 IF N<2 OR K((8+N-2)MOD 8)<>K THEN OUT &HD9+2*L,K |
| 34 |
1330 IF (R MOD 2=0) AND (N<2 OR T((8+N-2)MOD 8)<>T) THEN OUT &HD8+2*L,T |
| 35 |
1340 FOR Y=1+2*((Z+2*N)\32) TO 4+2*((Z+2*N)\32):GOSUB 1680:NEXT Y |
| 36 |
1350 NEXT N:NEXT L:Z=Z+16:IF(Z MOD 32)<16 THEN Z=Z+32 |
| 37 |
1360 NEXT R |
| 38 |
1370 'plan 5/6/7/8 |
| 39 |
1380 FOR R=0 TO 3:GOSUB 1800 |
| 40 |
1390 FOR N2=0 TO 7 STEP 2:FOR P=0 TO 5:L=(-(((P>=1)AND(P<=2))OR(P=4)))XOR(R MOD 2):N=N2+L:K=K(N):T=T(N) |
| 41 |
1400 IF ((R\2)MOD 2=1) AND (P<2 AND (N<2 OR T((8+N-2)MOD 8)<>T)) THEN OUT &HD8+2*L,T |
| 42 |
1410 IF P<2 AND (N<2 OR K((8+N-2)MOD 8)<>K) THEN OUT &HD9+2*L,K |
| 43 |
1420 IF ((R\2)MOD 2=0) AND (P<2 AND (N<2 OR T((8+N-2)MOD 8)<>T)) THEN OUT &HD8+2*L,T |
| 44 |
1430 IF P>=2 THEN FOR Y=1-2*(P>=4)+2*((Z+2*N)\32) TO 2-2*(P>=4)+2*((Z+2*N)\32):GOSUB 1680:NEXT Y |
| 45 |
1440 NEXT P:NEXT N2:Z=Z+16:IF(Z MOD 32)<16 THEN Z=Z+32 |
| 46 |
1450 NEXT R |
| 47 |
1460 'plan 9/10/11/12 |
| 48 |
1470 FOR R=0 TO 3:GOSUB 1800 |
| 49 |
1480 FOR N2=0 TO 7 STEP 2:FOR P=0 TO 4+2*2*32-1:L=(P MOD 2)XOR(-(P<4))XOR(R MOD 2):N=N2+L:K=K(N):T=T(N) |
| 50 |
1490 IF ((R\2)MOD 2=1) AND (P>=2 AND P<4 AND (N<2 OR T((8+N-2)MOD 8)<>T)) THEN OUT &HD8+2*L,T |
| 51 |
1500 IF P<2 AND (N<2 OR K((8+N-2)MOD 8)<>K) THEN OUT &HD9+2*L,K |
| 52 |
1510 IF ((R\2)MOD 2=0) AND (P>=2 AND P<4 AND (N<2 OR T((8+N-2)MOD 8)<>T)) THEN OUT &HD8+2*L,T |
| 53 |
1520 IF P>=4 THEN Y=1+((P-4)\32) MOD 4+2*((Z+2*N)\32):X=((P-4)\16) MOD 2+(Z+2*N) MOD 32:J=((P-4)\2) MOD 8:G=INP(&HD9+2*L):GOSUB 1760 |
| 54 |
1530 NEXT P:NEXT N2:Z=Z+16:IF(Z MOD 32)<16 THEN Z=Z+32 |
| 55 |
1540 NEXT R |
| 56 |
1550 GOSUB 1710:IF A=1 THEN GOTO 1660 |
| 57 |
1560 CLS:Z=0:D=0:Y=0:S$=" "+T$+" 3/9: Interleaving B "+V$+" ":W=&HFF:GOSUB 1750:W=0:Z=0:D=0 |
| 58 |
1570 'plan 13/14/15/16 |
| 59 |
1580 FOR R=0 TO 3:GOSUB 1800 |
| 60 |
1590 FOR N2=0 TO 7 STEP 2:FOR P=0 TO 4+4-1:L=(P MOD 2)XOR(-(P<4))XOR(R MOD 2):N=N2+L:K=K(N):T=T(N) |
| 61 |
1600 IF (P<2 AND R<2) OR (P>=2 AND P<4 AND R>=2 AND R<4) AND (N<2 OR K((8+N-2)MOD 8)<>K) THEN OUT &HD9+2*L,K |
| 62 |
1610 IF (P<2 AND R>=2 AND R<4) OR (P>=2 AND P<4 AND R<2) AND (N<2 OR T((8+N-2)MOD 8)<>T) THEN OUT &HD8+2*L,T |
| 63 |
1620 IF P>=4 THEN FOR Y=1-2*(P>=6)+2*((Z+2*N)\32) TO 2-2*(P>=6)+2*((Z+2*N)\32):GOSUB 1680:NEXT Y |
| 64 |
1630 NEXT P:NEXT N2:Z=Z+16:IF(Z MOD 32)<16 THEN Z=Z+32 |
| 65 |
1640 NEXT R |
| 66 |
1650 GOSUB 1710:IF A=1 THEN GOTO 1660 |
| 67 |
1660 IF A=1 THEN SCREEN 0:PRINT"Abnormal exit" |
| 68 |
1670 IF B<>2 THEN RETURN:ELSE GOTO 2000 |
| 69 |
1680 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 1760:NEXT J:NEXT X:RETURN |
| 70 |
1690 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 |
| 71 |
1700 K=K*96+T:T=K MOD&H40:K=K\&H40:RETURN |
| 72 |
1710 Y=23:S$=N$:W=&HFF:GOSUB 1750:W=0 |
| 73 |
1720 I$=INKEY$:IF I$=CHR$(&H3) OR I$=CHR$(&H1B) THEN SCREEN 0:A=1:GOTO 1740:ELSE:IF I$<>"" THEN GOTO 1720:ELSE BEEP |
| 74 |
1730 I$=INKEY$:IF I$="" THEN GOTO 1730:ELSE IF I$=CHR$(&H3) OR I$=CHR$(&H1B) THEN SCREEN 0:A=1:GOTO 1740 |
| 75 |
1740 RETURN |
| 76 |
1750 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 1760:NEXT J:D=D+Q-7:NEXT X:Q=7:RETURN |
| 77 |
1760 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 1790:ELSE M=&H80:YY=8*Y+J:FOR I=0 TO Q:IF (GG\M)MOD 2<>0 THEN PSET(XX+I,YY),15 |
| 78 |
1770 M=M\2:NEXT I:RETURN |
| 79 |
1780 RETURN |
| 80 |
1790 O=Y*&H100+XX+J:VPOKE E+O,15*&H10:VPOKE F+O,GG:RETURN |
| 81 |
1800 IF ((Z+15)MOD 32)<15 THEN Z=((Z\32)+2)*32:RETURN:ELSE RETURN |
| 82 |
1810 DATA 42,49,4F,53,3A,01,02,03,04,05,06,07,08,09,0A,0B,0C,0D,0E,0F,1D,1E,1F |
| 83 |
1820 DATA 20,EB,F7,96,DE,E5,20,B6,C0,B6,C5 |
| 84 |
1830 DATA:'End of DATA |
| 85 |
1840 DATA 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,FF,52,6F,6D,61,6A,69,FF,83,82,81,80 |
| 86 |
1850 DATA:'End of DATA |
| 87 |
1860 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 |
| 88 |
1870 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 |
| 89 |
1880 DATA 2221,217A,2227,2225 |
| 90 |
1890 DATA 2347,2372,2365,2365,2374,2369,236E,2367,2373,212A,2121,2350,2355,2354,234B,2341,234E,234A,2349 |
| 91 |
1900 DATA 2148,3441,3B7A,244F,3A47,3962,2447,2439,2123,2149 |
| 92 |
1910 DATA 297B,297C,297A |
| 93 |
1920 DATA 4C,76,32,20,3441,3B7A,2127,5579,5378,5579,5239,5378,524C,5144,7775,776F,7773,7771 |
| 94 |
1930 DATA 534C,5376,5332,5F21,665A,5127,5121,534D,5349,5353,5344,5352,5341,5357,534E,512A |
| 95 |
1940 DATA 4C,76,31,2F,4C,76,32,3A,217C,517A,2121,2121:'v1.0 |
| 96 |
1950 DATA 2363,5239,236F,5241,264F,5161,264A,5144:'v2.0 |
| 97 |
1960 DATA 4C,76,32,E3,4C,76,31,3A,517C,217A,2121,2121 |
| 98 |
1970 DATA 5363,2239,536F,2241,564F,2161,564A,2144 |
| 99 |
1980 DATA 20,2277,50,72,65,76,69,6F,75,73,20,74,65,73,74,2278,2121,2327,2121,20 |
| 100 |
1990 DATA:'End of DATA |
| 101 |
2000 ' |
| 102 |
2010 IF A=0 THEN GOTO 2030 |
| 103 |
2020 GOTO 3250 |
| 104 |
2030 A=0:B=1:GOSUB 2040:GOTO 2600 |
| 105 |
2040 CLS |
| 106 |
2050 Q=7:W=0 |
| 107 |
2060 Z=0:D=0:Y=0:S$=" "+T$+" 4/9: Upper Bit Flips "+V$+" ":W=&HFF:GOSUB 1750:W=0:D=0 |
| 108 |
2070 ' 8x16 / 16x16 Kanji only cycling upper address bits |
| 109 |
2080 ZZ=&HC0:ZY=&HC0:Z=0:RESTORE 1860 |
| 110 |
2090 READ K$:IF K$=""THEN GOTO 2180ELSE ZZ=(&H40+ZZ)MOD&H100:ZY=(ZY-&H40*(ZZ=0))MOD&H100:L=0:K=VAL("&H"+K$):IF K<&H100 THEN GOTO 2140:ELSE GOSUB 1690 |
| 111 |
2100 IF Z MOD 32=31 THEN Z=Z+1 |
| 112 |
2110 OUT &HD9+2*L,K+ZY:OUT &HD8+2*L,T+ZZ |
| 113 |
2120 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 1760:NEXT J:NEXT X:NEXT Y |
| 114 |
2130 Z=Z+2:GOTO 2090 |
| 115 |
2140 IF K>=&H80 THEN K=K+8*96-&H20 |
| 116 |
2150 OUT &HD9,(K-&H20)\&H40+ZY:OUT &HD8,(K-&H20)MOD&H40+ZZ |
| 117 |
2160 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 1780,1760:NEXT J:NEXT X:NEXT Y |
| 118 |
2170 Z=Z+1:GOTO 2090 |
| 119 |
2180 ' v1.0 only varying upper address bits |
| 120 |
2190 OUT &HD9,&HC2:OUT &HD8,&HBC:OUT &HDB,&H42:OUT &HDA,&H3A |
| 121 |
2200 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 1760:NEXT J:NEXT X:NEXT Y:NEXT L |
| 122 |
2210 Z=Z+4 |
| 123 |
2220 GOSUB 1710:IF A=1 THEN GOTO 2570 |
| 124 |
2230 CLS:Z=0:D=0:Y=0:S$=" "+T$+" 5/9: Lower Readbacks "+V$+" ":W=&HFF:GOSUB 1750:W=0:Z=0:D=0 |
| 125 |
2240 ' 8x16 / 16x16 Kanji only lower-port readbacks |
| 126 |
2250 Z=0:RESTORE 1860 |
| 127 |
2260 READ K$:IF K$=""THEN GOTO 2350ELSE L=0:K=VAL("&H"+K$):IF K<&H100 THEN GOTO 2310:ELSE GOSUB 1690 |
| 128 |
2270 IF Z MOD 32=31 THEN Z=Z+1 |
| 129 |
2280 OUT &HD9+2*L,K:OUT &HD8+2*L,T |
| 130 |
2290 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 1760:NEXT J:NEXT X:NEXT Y |
| 131 |
2300 Z=Z+2:GOTO 2260 |
| 132 |
2310 IF K>=&H80 THEN K=K+8*96-&H20 |
| 133 |
2320 OUT &HD9,(K-&H20)\&H40:OUT &HD8,(K-&H20)MOD&H40 |
| 134 |
2330 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 1780,1760:NEXT J:NEXT X:NEXT Y |
| 135 |
2340 Z=Z+1:GOTO 2260 |
| 136 |
2350 ' v1.0 only lower-port readbacks |
| 137 |
2360 OUT &HD9,&H2:OUT &HD8,&H3C:OUT &HDB,&H2:OUT &HDA,&H3A |
| 138 |
2370 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 1760:NEXT J:NEXT X:NEXT Y:NEXT L |
| 139 |
2380 Z=Z+4 |
| 140 |
2390 GOSUB 1710:IF A=1 THEN GOTO 2570 |
| 141 |
2400 CLS:Z=0:D=0:Y=0:S$=" "+T$+" 6/9: Read Port Flips "+V$+" ":W=&HFF:GOSUB 1750:W=0:Z=0:D=0 |
| 142 |
2410 ' 8x16 / 16x16 Kanji only read-port address LSB flips |
| 143 |
2420 Z=0:RESTORE 1860 |
| 144 |
2430 READ K$:IF K$=""THEN GOTO 2520ELSE L=0:K=VAL("&H"+K$):IF K<&H100 THEN GOTO 2480:ELSE GOSUB 1690 |
| 145 |
2440 IF Z MOD 32=31 THEN Z=Z+1 |
| 146 |
2450 OUT &HD9+2*L,K:OUT &HD8+2*L,T |
| 147 |
2460 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 1760:NEXT J:NEXT X:NEXT Y |
| 148 |
2470 Z=Z+2:GOTO 2430 |
| 149 |
2480 IF K>=&H80 THEN K=K+8*96-&H20 |
| 150 |
2490 OUT &HD9,(K-&H20)\&H40:OUT &HD8,(K-&H20)MOD&H40 |
| 151 |
2500 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 1780,1760:NEXT J:NEXT X:NEXT Y |
| 152 |
2510 Z=Z+1:GOTO 2430 |
| 153 |
2520 ' v1.0 only read-port address LSB flips |
| 154 |
2530 OUT &HD9,&H2:OUT &HD8,&H3C:OUT &HDB,&H2:OUT &HDA,&H3A |
| 155 |
2540 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 1760:NEXT J:NEXT X:NEXT Y:NEXT L |
| 156 |
2550 Z=Z+4 |
| 157 |
2560 GOSUB 1710 |
| 158 |
2570 IF A=1 THEN SCREEN 0:PRINT"Abnormal exit" |
| 159 |
2580 IF B<>2 THEN RETURN:ELSE GOTO 2590 |
| 160 |
2590 ' |
| 161 |
2600 IF A=0 THEN GOTO 2620 |
| 162 |
2610 GOTO 3250 |
| 163 |
2620 A=0:B=1:GOSUB 2630:GOTO 3240 |
| 164 |
2630 CLS |
| 165 |
2640 T$="Hanja I/O Tests":Q=7:W=0 |
| 166 |
2650 Z=0:D=0:Y=0:S$=" "+T$+" 7/9: Hanja Detection "+V$+" ":W=&HFF:GOSUB 1750:W=0:D=0 |
| 167 |
2660 ' 6x8 / 8x8 BIOS font |
| 168 |
2670 FOR Y=1 TO 2:S$="":IF Y=1 THEN RESTORE 3080:ELSE RESTORE 3100 |
| 169 |
2680 READ K$:IF K$="" THEN GOTO 2690:ELSE K$="&H"+K$:S$=S$+CHR$(VAL(K$)):GOTO2680 |
| 170 |
2690 D=0:GOSUB 1750:D=0:NEXT Y |
| 171 |
2700 ' 16x16 Hangul+Hanja + 8x8 BIOS font scan-doubled to 8x16 |
| 172 |
2710 Z=32:RESTORE 3120 |
| 173 |
2720 READ K$:IF K$=""THEN GOTO 2790ELSE K=VAL("&H"+K$):IFK<&H100 THEN GOTO 2770:ELSE GOSUB 3050 |
| 174 |
2730 IF Z MOD 32=31 THEN Z=Z+1 |
| 175 |
2740 OUT &HD9,K:OUT &HD8,T |
| 176 |
2750 FOR Y=1+2*(Z\32) TO 2+2*(Z\32):FOR J=0 TO 7:FOR X=Z MOD 32 TO 1+Z MOD 32:G=INP(&HD9):GOSUB 1760:NEXT X:NEXT J:NEXT Y |
| 177 |
2760 Z=Z+2:GOTO 2720 |
| 178 |
2770 FOR Y=1+2*(Z\32) TO 2+2*(Z\32):X=Z MOD 32:FOR J=0 TO 7:G=PEEK(C+8*K+4*((Y-1)MOD 2)+(J\2)):GOSUB 1760:NEXT J:NEXT Y |
| 179 |
2780 Z=Z+1:GOTO 2720 |
| 180 |
2790 GOSUB 1710:IF A=1 THEN GOTO 3020 |
| 181 |
2800 CLS:Z=0:D=0:Y=0:S$=" "+T$+" 8/9: Upper Bit Flips "+V$+" ":W=&HFF:GOSUB 1750:W=0:Z=0:D=0 |
| 182 |
2810 ' 16x16 Hangul+Hanja (upper bits flipped) + 8x8 BIOS font scan-doubled to 8x16 |
| 183 |
2820 ZZ=&HC0:ZY=&H80:Z=0:RESTORE 3120 |
| 184 |
2830 READ K$:IF K$=""THEN GOTO 2900ELSE ZZ=(&H40+ZZ)MOD&H100:ZY=(ZY-&H80*(ZZ=0))MOD&H100:K=VAL("&H"+K$):IFK<&H100 THEN GOTO 2880:ELSE GOSUB 3050 |
| 185 |
2840 IF Z MOD 32=31 THEN Z=Z+1 |
| 186 |
2850 OUT &HD9,K+ZY:OUT &HD8,T+ZZ |
| 187 |
2860 FOR Y=1+2*(Z\32) TO 2+2*(Z\32):FOR J=0 TO 7:FOR X=Z MOD 32 TO 1+Z MOD 32:G=INP(&HD9):GOSUB 1760:NEXT X:NEXT J:NEXT Y |
| 188 |
2870 Z=Z+2:GOTO 2830 |
| 189 |
2880 FOR Y=1+2*(Z\32) TO 2+2*(Z\32):X=Z MOD 32:FOR J=0 TO 7:G=PEEK(C+8*K+4*((Y-1)MOD 2)+(J\2)):GOSUB 1760:NEXT J:NEXT Y |
| 190 |
2890 Z=Z+1:GOTO 2830 |
| 191 |
2900 GOSUB 1710:IF A=1 THEN GOTO 3020 |
| 192 |
2910 CLS:Z=0:D=0:Y=0:S$=" "+T$+" 9/9: Port Rotations "+V$+" ":W=&HFF:GOSUB 1750:W=0:Z=0:D=0 |
| 193 |
2920 ' 16x16 Hangul+Hanja (rotating ports) + 8x8 BIOS font scan-doubled to 8x16 |
| 194 |
2930 L=1:ZZ=1:Z=0:RESTORE 3120 |
| 195 |
2940 READ K$:IF K$=""THEN GOTO 3010ELSE ZZ=1-ZZ:L=(L-(ZZ=0))MOD 2:K=VAL("&H"+K$):IFK<&H100 THEN GOTO 2990:ELSE GOSUB 3050 |
| 196 |
2950 IF Z MOD 32=31 THEN Z=Z+1 |
| 197 |
2960 OUT &HD9+2*L,K:OUT &HD8+2*L,T |
| 198 |
2970 FOR Y=1+2*(Z\32) TO 2+2*(Z\32):FOR J=0 TO 7:FOR X=Z MOD 32 TO 1+Z MOD 32:G=INP(&HD9+2*L-ZZ):GOSUB 1760:NEXT X:NEXT J:NEXT Y |
| 199 |
2980 Z=Z+2:GOTO 2940 |
| 200 |
2990 FOR Y=1+2*(Z\32) TO 2+2*(Z\32):X=Z MOD 32:FOR J=0 TO 7:G=PEEK(C+8*K+4*((Y-1)MOD 2)+(J\2)):GOSUB 1760:NEXT J:NEXT Y |
| 201 |
3000 Z=Z+1:GOTO 2940 |
| 202 |
3010 GOSUB 1710:IF A=1 THEN GOTO 3020 |
| 203 |
3020 IF A=1 THEN SCREEN 0:PRINT"Abnormal exit" |
| 204 |
3030 IF B<>2 THEN RETURN:ELSE GOTO 3230 |
| 205 |
3040 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 1760:NEXT J:NEXT X:RETURN |
| 206 |
3050 T=(K MOD &H100)-&H21:K=K\&H100-&H21 |
| 207 |
3060 K=K*94+T:T=K MOD&H40:K=K\&H40:RETURN |
| 208 |
3070 IF ((Z+15)MOD 32)<15 THEN Z=((Z\32)+2)*32:RETURN:ELSE RETURN |
| 209 |
3080 DATA 42,49,4F,53,3A,98,99,AB,20,92,99,8C,FC,FD,FC,FD,FC,20,FC,FD,FC,FD,20,98,99,88,86,A5,8B,FF,92,99,8C,A1 |
| 210 |
3090 DATA:'End of DATA |
| 211 |
3100 DATA 20,20,20,20,20,88,FF,8B,20,FE,0C,A1,20,20,20,20,20,20,22,45,6E,67,6C,69,73,68,2F,52,6F,6D,61,6A,61,22,FF,83,82,81,80 |
| 212 |
3110 DATA:'End of DATA |
| 213 |
3120 DATA 44,61,65,77,6F,6F,20,43,50,43,2D,34,30,30,20,58,2D,49,49,20,48,61,6E,67,75,6C,2F,48,61,6E,6A,61 |
| 214 |
3130 DATA 3267,392D,20,2439,2D,2431,2F,73,20,3D2E,307D,305B,20,3D2E,395C,20,28,4E54,4A2B,29,3A |
| 215 |
3140 DATA 2A46,20,3562,362E,3375,327D,20,3869,3D72,20,3834,385E,20,3D2E,307D,394A,20,2121 |
| 216 |
3150 DATA 2121,20,356F,3930,20,3748,20,3958,3258,3249,20,3476,394F,20,3958,3A2A,2A4E,2121 |
| 217 |
3160 DATA 235E,2362,2344,2341,237A,2349,2121,2358,2362,2351,236C,2121,215F,2A3E,2A3F,2A40 |
| 218 |
3170 DATA 2130,2245,226E,2267,226C,2269,2273,2268,222F,2252,226F,226D,2261,226A,2261,2131 |
| 219 |
3180 DATA 4E54,4A2B,223A,492F,4F45,465C,4336,4044,4D72,497E,4071,4E4A,4547,4139,4B74,4635 |
| 220 |
3190 DATA 3952,3630,384F,28,497E,4447,476E,29,3A,2552,2569,252C,254A,20,262B,263F,262B,264A |
| 221 |
3200 DATA 2246,2272,226F,226D,2220,2275,2270,2270,2265,2272,2220,2231,2232,2238,224B,223A |
| 222 |
3210 DATA 4E24,4E4E,4D68,4D56,4E41,4E4B,4D56,4E25,4E21,4E2B,4D7A,4E2A,4D77,4E2F,4E26,4D57 |
| 223 |
3220 DATA:'End of DATA |
| 224 |
3230 ' |
| 225 |
3240 IF A=0 THEN SCREEN 0:PRINT"Thank you!" |
| 226 |
3250 PRINT:PRINT"If you want to run all tests again:":PRINT:PRINT" RUN "CHR$(&H22)"KTST31.ASC"CHR$(&H22):PRINT |
| 227 |
3260 END |