| 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 1810 |
| 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$="Hanja 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$+" 7/9: Hanja Detection "+V$+" ":W=&HFF:GOSUB 1590:W=0:D=0 |
| 15 |
1140 ' 6x8 / 8x8 BIOS font |
| 16 |
1150 FOR Y=1 TO 2:S$="":IF Y=1 THEN RESTORE 1650:ELSE RESTORE 1670 |
| 17 |
1160 READ K$:IF K$="" THEN GOTO 1170:ELSE K$="&H"+K$:S$=S$+CHR$(VAL(K$)):GOTO1160 |
| 18 |
1170 D=0:GOSUB 1590:D=0:NEXT Y |
| 19 |
1180 ' 16x16 Hangul+Hanja + 8x8 BIOS font scan-doubled to 8x16 |
| 20 |
1190 Z=32:RESTORE 1690 |
| 21 |
1200 READ K$:IF K$=""THEN GOTO 1270ELSE K=VAL("&H"+K$):IFK<&H100 THEN GOTO 1250:ELSE GOSUB 1530 |
| 22 |
1210 IF Z MOD 32=31 THEN Z=Z+1 |
| 23 |
1220 OUT &HD9,K:OUT &HD8,T |
| 24 |
1230 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 1600:NEXT X:NEXT J:NEXT Y |
| 25 |
1240 Z=Z+2:GOTO 1200 |
| 26 |
1250 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 1600:NEXT J:NEXT Y |
| 27 |
1260 Z=Z+1:GOTO 1200 |
| 28 |
1270 GOSUB 1550:IF A=1 THEN GOTO 1500 |
| 29 |
1280 CLS:Z=0:D=0:Y=0:S$=" "+T$+" 8/9: Upper Bit Flips "+V$+" ":W=&HFF:GOSUB 1590:W=0:Z=0:D=0 |
| 30 |
1290 ' 16x16 Hangul+Hanja (upper bits flipped) + 8x8 BIOS font scan-doubled to 8x16 |
| 31 |
1300 ZZ=&HC0:ZY=&H80:Z=0:RESTORE 1690 |
| 32 |
1310 READ K$:IF K$=""THEN GOTO 1380ELSE ZZ=(&H40+ZZ)MOD&H100:ZY=(ZY-&H80*(ZZ=0))MOD&H100:K=VAL("&H"+K$):IFK<&H100 THEN GOTO 1360:ELSE GOSUB 1530 |
| 33 |
1320 IF Z MOD 32=31 THEN Z=Z+1 |
| 34 |
1330 OUT &HD9,K+ZY:OUT &HD8,T+ZZ |
| 35 |
1340 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 1600:NEXT X:NEXT J:NEXT Y |
| 36 |
1350 Z=Z+2:GOTO 1310 |
| 37 |
1360 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 1600:NEXT J:NEXT Y |
| 38 |
1370 Z=Z+1:GOTO 1310 |
| 39 |
1380 GOSUB 1550:IF A=1 THEN GOTO 1500 |
| 40 |
1390 CLS:Z=0:D=0:Y=0:S$=" "+T$+" 9/9: Port Rotations "+V$+" ":W=&HFF:GOSUB 1590:W=0:Z=0:D=0 |
| 41 |
1400 ' 16x16 Hangul+Hanja (rotating ports) + 8x8 BIOS font scan-doubled to 8x16 |
| 42 |
1410 L=1:ZZ=1:Z=0:RESTORE 1690 |
| 43 |
1420 READ K$:IF K$=""THEN GOTO 1490ELSE ZZ=1-ZZ:L=(L-(ZZ=0))MOD 2:K=VAL("&H"+K$):IFK<&H100 THEN GOTO 1470:ELSE GOSUB 1530 |
| 44 |
1430 IF Z MOD 32=31 THEN Z=Z+1 |
| 45 |
1440 OUT &HD9+2*L,K:OUT &HD8+2*L,T |
| 46 |
1450 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 1600:NEXT X:NEXT J:NEXT Y |
| 47 |
1460 Z=Z+2:GOTO 1420 |
| 48 |
1470 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 1600:NEXT J:NEXT Y |
| 49 |
1480 Z=Z+1:GOTO 1420 |
| 50 |
1490 GOSUB 1550:IF A=1 THEN GOTO 1500 |
| 51 |
1500 IF A=1 THEN SCREEN 0:PRINT"Abnormal exit" |
| 52 |
1510 IF B<>2 THEN RETURN:ELSE GOTO 1800 |
| 53 |
1520 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 1600:NEXT J:NEXT X:RETURN |
| 54 |
1530 T=(K MOD &H100)-&H21:K=K\&H100-&H21 |
| 55 |
1540 K=K*94+T:T=K MOD&H40:K=K\&H40:RETURN |
| 56 |
1550 Y=23:S$=N$:W=&HFF:GOSUB 1590:W=0 |
| 57 |
1560 I$=INKEY$:IF I$=CHR$(&H3) OR I$=CHR$(&H1B) THEN SCREEN 0:A=1:GOTO 1580:ELSE:IF I$<>"" THEN GOTO 1560:ELSE BEEP |
| 58 |
1570 I$=INKEY$:IF I$="" THEN GOTO 1570:ELSE IF I$=CHR$(&H3) OR I$=CHR$(&H1B) THEN SCREEN 0:A=1:GOTO 1580 |
| 59 |
1580 RETURN |
| 60 |
1590 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 1600:NEXT J:D=D+Q-7:NEXT X:Q=7:RETURN |
| 61 |
1600 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 1630:ELSE M=&H80:YY=8*Y+J:FOR I=0 TO Q:IF (GG\M)MOD 2<>0 THEN PSET(XX+I,YY),15 |
| 62 |
1610 M=M\2:NEXT I:RETURN |
| 63 |
1620 RETURN |
| 64 |
1630 O=Y*&H100+XX+J:VPOKE E+O,15*&H10:VPOKE F+O,GG:RETURN |
| 65 |
1640 IF ((Z+15)MOD 32)<15 THEN Z=((Z\32)+2)*32:RETURN:ELSE RETURN |
| 66 |
1650 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 |
| 67 |
1660 DATA:'End of DATA |
| 68 |
1670 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 |
| 69 |
1680 DATA:'End of DATA |
| 70 |
1690 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 |
| 71 |
1700 DATA 3267,392D,20,2439,2D,2431,2F,73,20,3D2E,307D,305B,20,3D2E,395C,20,28,4E54,4A2B,29,3A |
| 72 |
1710 DATA 2A46,20,3562,362E,3375,327D,20,3869,3D72,20,3834,385E,20,3D2E,307D,394A,20,2121 |
| 73 |
1720 DATA 2121,20,356F,3930,20,3748,20,3958,3258,3249,20,3476,394F,20,3958,3A2A,2A4E,2121 |
| 74 |
1730 DATA 235E,2362,2344,2341,237A,2349,2121,2358,2362,2351,236C,2121,215F,2A3E,2A3F,2A40 |
| 75 |
1740 DATA 2130,2245,226E,2267,226C,2269,2273,2268,222F,2252,226F,226D,2261,226A,2261,2131 |
| 76 |
1750 DATA 4E54,4A2B,223A,492F,4F45,465C,4336,4044,4D72,497E,4071,4E4A,4547,4139,4B74,4635 |
| 77 |
1760 DATA 3952,3630,384F,28,497E,4447,476E,29,3A,2552,2569,252C,254A,20,262B,263F,262B,264A |
| 78 |
1770 DATA 2246,2272,226F,226D,2220,2275,2270,2270,2265,2272,2220,2231,2232,2238,224B,223A |
| 79 |
1780 DATA 4E24,4E4E,4D68,4D56,4E41,4E4B,4D56,4E25,4E21,4E2B,4D7A,4E2A,4D77,4E2F,4E26,4D57 |
| 80 |
1790 DATA:'End of DATA |
| 81 |
1800 _TURBO OFF |
| 82 |
1810 IF A=0 THEN SCREEN 0:PRINT"Thank you!" |
| 83 |
1820 PRINT:PRINT"If you want to run all tests again:":PRINT:PRINT" RUN "CHR$(&H22)"KTST31.ASC"CHR$(&H22):PRINT |
| 84 |
1830 END |