10 'Pocket Reversi V1.1D 20 'USER 0100H-450H 30 ' 40 CLS:PRINT "SETUP" 50 ' 60 AG=&H0100 'CALL REV 70 'CB=&H018B 'CALL BACKUP 80 'CR=&H0198 'CALL RESTORE 90 CC=&H0290 'CALL CALC 100 AC=&H02EE 'COL1 110 AX=&H02F2 'XY 120 AF=&H02F8 'FLAG 130 AR=&H02ED 'REV FLAG 140 AB=&H0361 'BAN1 150 AT=&H0310 'TBL1 160 'N2=&H02EB 'CALC1 170 T1=&H02FC ' 180 T2=&H02FD ' 190 B1=&H02FE ' 200 B2=&H02FF ' 210 'ST=&H01B2 'CALL TABLE SET 220 'RT=&H0202 'CALL TABLE RESTORE 230 CP=&H022E 'CALL CPU 240 DB=&H0418 'CAL DB 250 DC=&H0417 'CAL COUNT 260 ' 270 N1=N2+1 'CALC2 280 ' 290 I=AG :GOSUB *READ1 300 I=AT+9:GOSUB *READ1 310 ' 320 CLS 330 ' 340 POKE T1,15:POKE T2,10 350 POKE B1,PEEK(AT+2+1*9) 360 POKE B2,PEEK(AT+2+2*9) 370 ' 380 *START 390 CLS 400 LOCATE 2,0:PRINT "Pocket Reversi V1.1D" 410 LOCATE 6,2:PRINT "1:YOU vs CPU" 420 LOCATE 6,3:PRINT "2:CPU vs YOU" 430 LOCATE 2,5:PRINT "Program By TOMOKAZU"; 440 *ST1 450 GOSUB *KEYWAIT 460 IF A<49 OR A>50 THEN *ST1 470 CLS 480 'BAN CLEAR 490 FOR X=0 TO 8:B=AB+X :POKE B,255:NEXT 500 FOR X=0 TO 9:B=AB+X+81:POKE B,255:NEXT 510 FOR Y=1 TO 8:B=AB+Y*9 :POKE B,255:FOR X=1 TO 8:POKE B+X,0:NEXT:NEXT 520 X1=4:Y1=4:POKE AB+X1+Y1*9,1:GOSUB *PRTST 530 X1=5:Y1=4:POKE AB+X1+Y1*9,2:GOSUB *PRTST 540 X1=4:Y1=5:POKE AB+X1+Y1*9,2:GOSUB *PRTST 550 X1=5:Y1=5:POKE AB+X1+Y1*9,1:GOSUB *PRTST 560 ' 570 X1=1:Y1=1 580 LINE(49,0)-(49,48) 590 X=54 600 Y=25:B=2:GOSUB *PRTS2 610 Y=33:B=1:GOSUB *PRTS2 620 GOSUB *PRT 630 CL=2:PS=0 'color,pass 640 IF A=50 THEN CY=1:GOTO *M1 ELSE CY=2 650 ' 660 *MAIN 670 ' 680 'MAN 690 GOSUB *PSCHECK 700 IF F=0 THEN 710 PS=PS+1:IF PS>=2 THEN *QUIT 720 LOCATE 9,1:PRINT "You Pass!" 730 LOCATE 9,2:PRINT "Hit Any Key":GOSUB *KEYWAIT 740 ELSE 750 LOCATE 9,0:PRINT "You (";:GOSUB *PRTWB 760 GOSUB *INP2 770 ENDIF 780 IF S1+S2=64 THEN *QUIT 790 CL=(CL AND 01)+1 800 GOSUB *MSGCLR 810 ' 820 'CPU 830 *M1 840 LOCATE 9,0:PRINT "CPU (";:GOSUB *PRTWB 850 GOSUB *CPU 860 CL=(CL AND 01)+1 870 IF S1+S2=64 THEN *QUIT 880 GOTO *MAIN 890 ' 900 *QUIT 910 'S1:Black(1) S2:White(2) 920 GOSUB *MSGCLR 930 LOCATE 9,1 940 ' 950 IF S1=S2 THEN 960 PRINT "DRAW" 970 ELSE 980 IF S1>S2 THEN 990 IF CY=2 THEN PRINT "You Win" ELSE PRINT "You Lose" 1000 ELSE 1010 IF CY=2 THEN PRINT "You Lose" ELSE PRINT "You Win" 1020 ENDIF 1030 ENDIF 1040 ' 1050 GOSUB *KEYWAIT 'OUT A 1060 GOTO *START 1070 END 1080 ' 1090 *INP 1100 GOSUB *KEYWAIT 'OUT A 1110 IF A= 4 AND Y1>1 THEN Y1=Y1-1 1120 IF A= 5 AND Y1<8 THEN Y1=Y1+1 1130 IF A=14 AND X1<8 THEN X1=X1+1 1140 IF A=15 AND X1>1 THEN X1=X1-1 1150 B=PEEK(AB+X1+Y1*9) 1160 IF A=13 AND B=0 THEN 1170 POKE AC,CL 'SET COLOR 1180 GOSUB *CHECK 1190 IF F>0 THEN 1200 PS=0 1210 LINE((X1-1)*6,(Y1-1)*6)-((X1-1)*6+6,(Y1-1)*6+6),R,B 1220 POKE AB+X1+Y1*9,CL:GOSUB *PRTST:GOSUB *PRT 1230 RETURN 1240 ENDIF 1250 ENDIF 1260 *INP2 1270 IF X1<>X2 OR Y1<>Y2 THEN 1280 LINE((X2-1)*6,(Y2-1)*6)-((X2-1)*6+6,(Y2-1)*6+6),R,B 1290 LINE((X1-1)*6,(Y1-1)*6)-((X1-1)*6+6,(Y1-1)*6+6),S,B 1300 ENDIF 1310 X2=X1:Y2=Y1 1320 GOTO *INP 1330 ' 1340 *CPU 1350 'X3=X1:Y3=Y1 1360 POKE AC,CL 'SET COLOR 1370 CALL CP 1380 CT=PEEK(DC) 1390 ' 1400 IF CT=0 THEN 1410 PS=PS+1:LOCATE 9,1:PRINT "CPU PASS" 1420 LINE((X1-1)*6,(Y1-1)*6)-((X1-1)*6+6,(Y1-1)*6+6),S,B 1430 X2=X1:Y2=Y1 1440 RETURN 'PASS 1450 ENDIF 1460 ' 1470 PS=0:SC=-10000:J=1 1480 FOR I=1 TO CT:A=DB+(I-1)*3 1490 B=PEEK(A+2)*256+PEEK(A+1) 1500 IF B>&H8000 THEN B=B-65536 1510 IF B>SC THEN J=A:SC=B 1520 NEXT 1530 ' 1540 Y1=INT(PEEK(J)/9):X1=PEEK(J)-Y1*9 1550 POKE AC,CL:GOSUB *CHECK 1560 POKE(AB+X1+Y1*9),CL:GOSUB *PRTST 1570 GOSUB *PRT 1580 A=0 1590 RETURN 1600 ' 1610 *CHECK 1620 POKE AX,X1+Y1*9:CALL AG 1630 F=PEEK(AF) 1640 RETURN 1650 ' 1660 *PSCHECK 1670 POKE AR,0 'MODE NON REV 1680 POKE AC,CL 'SET COLOR 1690 X3=X1:Y3=Y1 1700 FOR C=3 TO 1 STEP -1:D=(4-C)*2 1710 FOR E=0 TO D 1720 X1=C+E :Y1=C :F=0:IF PEEK(AB+X1+Y1*9)=0 THEN GOSUB *CHECK:IF F>0 THEN E=9:C=0:GOTO *PS1 1730 X1=9-C :Y1=C+E :F=0:IF PEEK(AB+X1+Y1*9)=0 THEN GOSUB *CHECK:IF F>0 THEN E=9:C=0:GOTO *PS1 1740 X1=9-C-E:Y1=9-C :F=0:IF PEEK(AB+X1+Y1*9)=0 THEN GOSUB *CHECK:IF F>0 THEN E=9:C=0:GOTO *PS1 1750 X1=C :Y1=9-C-E:F=0:IF PEEK(AB+X1+Y1*9)=0 THEN GOSUB *CHECK:IF F>0 THEN E=9:C=0 1760 *PS1 1770 NEXT 1780 NEXT 1790 X1=X3:Y1=Y3 1800 POKE AR,1 'MODE REV 1810 RETURN 1820 ' 1830 *PRT 1840 S1=0:S2=0 1850 FOR I=1 TO 8:X=(I-1)*6+2 1860 FOR J=1 TO 8:Y=(J-1)*6+2 1870 B=PEEK(AB+I+J*9) 1880 IF B<>0 THEN 1890 IF B=2 THEN LINE(X,Y)-(X+2,Y+2),S,BF:S1=S1+1 ELSE LINE(X,Y)-(X+2,Y+2),R,BF:S2=S2+1 1900 ENDIF 1910 NEXT 1920 NEXT 1930 LOCATE 10,3:B=S1:GOSUB *NUMPRT 1940 LOCATE 10,4:B=S2:GOSUB *NUMPRT 1950 RETURN 1960 ' 1970 *PRTST 1980 'IN X1,Y1 1990 X=(X1-1)*6+1:Y=(Y1-1)*6+1:B=PEEK(AB+X1+Y1*9) 2000 GOSUB *PRTS2 2010 RETURN 2020 ' 2030 *PRTS2 2040 'IN X,Y,B 2050 LINE(X+1,Y)-(X+3,Y) 2060 LINE(X,Y+1)-(X,Y+3) 2070 LINE(X+4,Y+1)-(X+4,Y+3) 2080 LINE(X+1,Y+4)-(X+3,Y+4) 2090 IF B=2 THEN LINE(X+1,Y+1)-(X+3,Y+3),S,BF ELSE LINE(X+1,Y+1)-(X+3,Y+3),R,BF 2100 RETURN 2110 ' 2120 *NUMPRT 2130 'IN B 2140 V$=STR$(B):V$=LEFT$(" ",2-LEN(V$))+V$:PRINT V$; 2150 RETURN 2160 ' 2170 *KEYWAIT 2180 'OUT A 2190 I$=INKEY$ :IF I$="" THEN A1=0:KB=0:GOTO *KEYWAIT 2200 A= ASC (I$):IF A=A1 THEN KB=KB+1:IF KB<20 THEN GOTO *KEYWAIT 2210 A1=A 2220 RETURN 2230 ' 2240 *MSGCLR 2250 LOCATE 9,1:PRINT " "; 2260 LOCATE 9,2:PRINT " "; 2270 RETURN 2280 ' 2290 *PRTWB 2300 IF CL=1 THEN PRINT "White)"; ELSE PRINT "Black)"; 2310 RETURN 2320 ' 2330 *READ1 2340 READ V$:IF V$<>"END" THEN A=VAL("&H"+V$):POKE I,A:I=I+1:GOTO *READ1 2350 RETURN 2360 ' 2370 DATA 06,08,CD,A5,01,11,61,03,2A,F2,02,19,7E,FE,00,C2 2380 DATA 49,01,22,F4,02,22,F6,02,21,F8,02,36,00,21,00,03 2390 DATA 22,FA,02,2A,FA,02,56,23,5E,21,F9,02,36,00,2A,F6 2400 DATA 02,22,F4,02,19,22,F4,02,7E,B9,CC,4A,01,2A,FA,02 2410 DATA 23,23,22,FA,02,05,C2,23,01,C9,3A,F9,02,3C,32,F9 2420 DATA 02,19,22,F4,02,7E,B9,CA,4A,01,E5,21,EE,02,4E,E1 2430 DATA B9,C2,84,01,E5,21,F8,02,36,01,E1,3A,ED,02,FE,01 2440 DATA C2,84,01,A7,ED,52,22,F4,02,71,3A,F9,02,3D,32,F9 2450 DATA 02,C2,73,01,E5,21,EF,02,4E,E1,C9,21,61,03,11,BC 2460 DATA 03,06,00,0E,51,ED,B0,C9,21,BC,03,11,61,03,06,00 2470 DATA 0E,51,ED,B0,C9,21,EE,02,7E,E6,01,3C,21,EF,02,77 2480 DATA 4F,C9,2A,FC,02,DD,21,61,03,FD,21,10,03,DD,7E,0A 2490 DATA FE,00,CA,CE,01,FD,75,0B,FD,75,13,FD,74,14,DD,7E 2500 DATA 11,FE,00,CA,DF,01,FD,75,1A,FD,75,10,FD,74,19,DD 2510 DATA 7E,49,FE,00,CA,F0,01,FD,75,4A,FD,75,40,FD,74,41 2520 DATA DD,7E,50,FE,00,CA,01,02,FD,75,4F,FD,75,47,FD,74 2530 DATA 46,C9,2A,FE,02,FD,21,10,03,FD,75,0B,FD,75,13,FD 2540 DATA 74,14,FD,75,1A,FD,75,10,FD,74,19,FD,75,4A,FD,75 2550 DATA 40,FD,74,41,FD,75,4F,FD,75,47,FD,74,46,C9,CD,8B 2560 DATA 01,21,6A,03,11,18,04,06,09,0E,00,3E,00,32,17,04 2570 DATA 23,04,78,FE,51,CA,8F,02,32,F2,02,7E,FE,00,C2,40 2580 DATA 02,C5,E5,D5,CD,00,01,3A,F8,02,FE,00,CA,89,02,D1 2590 DATA E1,C1,0C,79,32,17,04,78,12,3A,EE,02,77,C5,E5,D5 2600 DATA CD,B2,01,CD,90,02,CD,02,02,D1,13,21,EB,02,7E,12 2610 DATA 13,23,7E,12,13,D5,CD,98,01,D1,E1,C1,C3,40,02,C9 2620 DATA 21,00,00,22,EB,02,CD,A5,01,21,EE,02,7E,4F,21,6A 2630 DATA 03,11,19,03,06,48,23,13,05,CA,EA,02,7E,FE,00,CA 2640 DATA A6,02,B9,CA,D1,02,1A,E5,C5,06,00,FE,80,DA,C2,02 2650 DATA 06,FF,4F,2A,EB,02,A7,ED,42,22,EB,02,C1,E1,C3,A6 2660 DATA 02,1A,E5,C5,06,00,FE,80,DA,DD,02,06,FF,4F,2A,EB 2670 DATA 02,09,22,EB,02,C1,E1,C3,A6,02,C9,00,00,01,01,FF 2680 DATA 00,00,28,00,00,00,00,00,00,00,00,00,0F,0A,EC,E2 2690 DATA FF,F6,FF,F7,FF,F8,FF,FF,00,01,00,08,00,09,00,0A 2700 DATA END 2710 ' 2720 'TABLE 2730 DATA 00,3C,F1,00,FE,FE,00,F1,3C 2740 DATA 00,F1,EC,FD,FD,FD,FD,EC,F1 2750 DATA 00,00,FD,00,FF,FF,00,FD,00 2760 DATA 00,FE,FD,FF,FF,FF,FF,FD,FE 2770 DATA 00,FE,FD,FF,FF,FF,FF,FD,FE 2780 DATA 00,00,FD,00,FF,FF,00,FD,00 2790 DATA 00,F1,EC,FD,FD,FD,FD,EC,F1 2800 DATA 00,3C,F1,00,FE,FE,00,F1,3C,END