10 CLS:MEMSET:WIDTH81,26
20 A$=STRING$(80,64)
30 PRINTA$
40 PRINTTAB(34)"CHESS  #2008-A"
50 COLOR1,0
60 PRINT:PRINT:PRINTTAB(39)"IPCO"
70 COLOR1,0
80 PRINT:PRINT:PRINTTAB(25)"PERSONAL COMPUTER OWNERS GROUP"
90 PRINT:PRINT:PRINTTAB(19)"p.o. box 10426, pittsburgh, pennsylvania 15234"
100 PRINTA$
110 PRINT:PRINT:PRINT:PRINT:PRINT
120 PRINTTAB(28)"PRESS ANY KEY TO CONTINUE"
130 A$=INKEY$:IFA$=""THEN130
140 CLS
150 CLEAR:SCROLL9,0
160 REM CHESS C.4 BY M. C. RAKASKA, IDES OF MARCH, 1980
170 REM ADAPTED BY S. W. HUGGINS, DECEMBER 1981 FOR THE IBM PERSONAL COMPUTER.
180 DEFINTA-Z:A=0:B=0:X=0:Y=0:S=0:A0=0:T=0:A8=0:A1=0:A2=0:A3=0:A4=0:B1=0:B6!=0:H=0:M=0:N=0:P=0:W=0:A5=0:I=1:DIMC(64),A(10,10),B(10,10),T(10,10)
190 CLS:INPUT"DO YOU WANT INSTRUCTIONS ";IN$:IN$=LEFT$(IN$,1):IFIN$="Y"ORIN$="y"THENGOSUB3410
200 CL$="N"
210 CLS:INPUT"YOUR NAME IS ";B$:IFB$=""THENB$=" HUMAN "ELSEB$=LEFT$(B$,9)
220 CLS:PRINT"LEVEL OF PLAY";:INPUTB8!:IFB8!=0THENB8!=1:B7!=1+RND(0)/2:ELSEB7!=(B8!+1)/2+RND(0)/2
230 CLS:PRINT"DO YOU WANT WHITE ";B$;" ";:INPUTC$:GOSUB920:IFLEFT$(C$,1)<>"N"THENGOSUB1030:GOTO340
240 GOSUB1020:IFCL$="Y"THENLOCATE6,25,0:PRINT"START ";TIME$;
250 F!=-99:A0=0:FORJ=1TO8:FORK=1TO8:IFA(J,K)=99THENA6=J:A7=K
260 NEXT:NEXT
270 FORX=1TO8:FORY=1TO8:IFA(X,Y)<0THENGOSUB410:IFF!>=B7!THENGOTO300
280 NEXT:NEXT:IFF!>=-9THENGOTO300ELSEGOSUB1030
290 LOCATE62,25,0:PRINT"I CONCEED    ";:GOTO3380
300 A(R,U)=A(E,Q):A(E,Q)=1:IFA(R,U)=-2ANDU=1THENA(R,U)=-9
310 X=R:Y=U:A0=4:GOSUB410:LOCATE62,25,0:PRINT"IS MY MOVE    ";:LOCATE51,25,0:LPRINTCHR$(E+64);Q;"- "CHR$(R+64);U:
320 IFCL$="Y"THENLOCATE31,25,0:PRINT"STOP ";TIME$;
330 X=E:Y=Q:GOSUB1040:X=R:Y=U:GOSUB1040:IFC=1THENLOCATE1,24,1:PRINT"CHECK ";:C=0ELSELOCATE1,24,1:PRINT"      ";
340 IFX$="S"THENGOSUB3000:B7!=3*RND(0):LOCATE1,25,1:PRINT"SELF-PLAYING";:GOSUB3710:GOTO250:ELSELOCATE1,25,1:PRINT"MOVE ";B$;:SOUND10,10:GOSUB2760:D=0:B4=A:B9=B:B5=0:IFA(X,Y)=2ANDY=5ANDB=6ANDA(A,B)=1ANDABS(A-X)=1THENB5=1:GOTO370
350 IFX$="K"ORX$="Q"THENGOSUB1030:LOCATE1,25,0:PRINTSTRING$(14," ");:GOTO250
360 IFX$="S"THENCL$="N":GOTO340:ELSEA0=3:GOSUB400:IFD=0THENLOCATE31,25,0:PRINT"ILLEGAL       ";:GOTO340
370 LOCATE31,25,1:PRINT"OK            ";:A=B4:B=B9:A(A,B)=A(X,Y):A(X,Y)=1:GOSUB1040:X=A:Y=B:GOSUB1040:IFN$="N"THENGOSUB1030:N$=" "
380 IFA(A,B)=2ANDB=8THENLOCATE31,25,1:PRINT"WHAT PIECE";:GOSUB3290:X=A:Y=B:GOSUB1040:LOCATE31,25,1:PRINT"              ";
390 IFB5=1THENA(A,B-1)=1:X=A:Y=B-1:GOSUB1040:GOTO250:ELSEGOTO250
400 LOCATE78,1,0:PRINT"$ ";:ONA(X,Y)GOTO0,610,0,510,460,0,420,0,460:GOTO590
410 ON-A(X,Y)GOTO0,660,0,510,460,0,420,0,460:GOTO590
420 B=Y:FORA=X+1TO8:GOSUB770:IFS=0THENNEXTELSEGOTO430
430 FORA=X-1TO1STEP-1:GOSUB770:IFS=0THENNEXTELSEGOTO440
440 A=X:FORB=Y+1TO8:GOSUB770:IFS=0THENNEXTELSEGOTO450
450 FORB=Y-1TO1STEP-1:GOSUB770:IFS=0THENNEXT:RETURNELSERETURN
460 B=Y:FORA=X+1TO8:B=B+1:GOSUB770:IFS=0THENNEXTELSEGOTO470
470 B=Y:FORA=X-1TO1STEP-1:B=B-1:GOSUB770:IFS=0THENNEXTELSEGOTO480
480 B=Y:FORA=X-1TO1STEP-1:B=B+1:GOSUB770:IFS=0THENNEXTELSEGOTO490
490 B=Y:FORA=X+1TO8:B=B-1:GOSUB770:IFS=0THENNEXTELSEGOTO500
500 IFABS(A(X,Y))=9THENGOTO420:ELSERETURN
510 A=X+2:B=Y+1:IFA<9ANDB<9THENGOSUB780ELSEGOTO520
520 B=B-2:IFB>0ANDA<9THENGOSUB780ELSEGOTO530
530 A=A-4:IFA>0ANDB>0THENGOSUB780ELSEGOTO540
540 B=B+2:IFB<9ANDA>0THENGOSUB780ELSEGOTO550
550 A=A+1:B=B+1:IFA>0ANDA<9ANDB<9THENGOSUB780ELSEGOTO560
560 B=B-4:IFB>0ANDA>0ANDA<9THENGOSUB780ELSEGOTO570
570 A=A+2:IFA>0ANDA<9ANDB>0THENGOSUB780ELSEGOTO580
580 B=B+4:IFB<9ANDA>0ANDA<9THENGOSUB780:RETURNELSERETURN
590 FORA=X-1TOX+1:FORB=Y-1TOY+1:IFA(A,B)<>0THENGOSUB780
600 NEXT:NEXT:RETURN
610 A=X:IFY>2THENGOTO630ELSEGOTO620
620 B=Y+1:IFA(A,B)=1THENGOSUB790:B=B+1:IFA(A,B)=1THENGOSUB790:GOTO640:ELSEGOTO640:ELSEGOTO640
630 B=Y+1:IFA(A,B)=1THENGOSUB790ELSEGOTO640
640 A=X+1:B=Y+1:IFA(A,B)<0THENGOSUB790ELSEGOTO650
650 A=A-2:IFA(A,B)<0THENGOSUB790:RETURN:ELSERETURN
660 A=X:IFY<7THENGOTO680ELSEGOTO670
670 B=Y-1:IFA(A,B)=1THENGOSUB790:B=B-1:IFA(A,B)=1THENGOSUB790:GOTO690:ELSEGOTO690:ELSEGOTO690
680 B=Y-1:IFA(A,B)=1THENGOSUB790ELSEGOTO690
690 A=X-1:B=Y-1:IFA(A,B)>1THENGOSUB790ELSEGOTO700
700 A=A+2:IFA(A,B)>1THENGOSUB790:RETURN:ELSEGOTO720
710 T=A(A,B):IFT=-99THENB1=T:RETURN:ELSEGOTO720
720 A5=S:IFABS(T)<=A(X,Y)THENA(A,B)=A(X,Y):A(X,Y)=1:GOTO740:ELSEGOTO730
730 IFT<B1 THENB1=T:S=A5:RETURN:ELSES=A5:RETURN
740 A1=X:A2=Y:A3=A:A4=B:A8=T:A0=2:FORX=1TO8:FORY=1TO8:IFA(X,Y)<0THENGOSUB410:IFT=0THENGOTO760
750 NEXT:NEXT
760 X=A1:Y=A2:A=A3:B=A4:A0=5:A(X,Y)=A(A,B):A(A,B)=A8:GOTO730
770 S=0:IFA(A,B)=1THENGOTO790ELSEIFA(A,B)=0THENS=1:RETURN:ELSEIFSGN(A(A,B))=SGN(A(X,Y))THENS=1:RETURN:ELSES=1:GOTO790
780 IFA(A,B)=1THENGOTO790ELSEIFSGN(A(A,B))=SGN(A(X,Y))THENRETURN:ELSEGOTO790
790 LOCATE78,1,0:PRINT"  ";:ONA0 GOTO800,810,820,830,840:GOTO850
800 IFA6=A ANDA7=B THENB1=B1+1:RETURN:ELSERETURN
810 IFA3=A ANDA4=B THENT=0:RETURN:ELSERETURN
820 IFB4=A ANDB9=B THEND=1:RETURN:ELSERETURN
830 IFA6=A ANDA7=B THENC=1:RETURN:ELSERETURN
840 IFA(A,B)<0THENGOTO710ELSERETURN
850 B3=S:W=X:M=Y:N=A:H=B:P=A(A,B):A(A,B)=A(X,Y):A(X,Y)=1:B1=0
860 A0=5:FORX=1TO8:FORY=1TO8:IFA(X,Y)>1THENGOSUB400
870 NEXT:NEXT:X=N:Y=H:A0=1:GOSUB410:A0=0:S=B3:X=W:Y=M:A=N:B=H:A(X,Y)=A(A,B):A(A,B)=P
880 B6!=1/(ABS(4.5-A)+ABS(4.5-B)+1):IFA(X,Y)<-2ANDA(X,Y)>-9THENB6!=B6!+1/(ABS(A6-A)+ABS(A7-B)+5)+RND(0)/15
890 G!=P+B1+B6!:IFP=99THENGOSUB1030:LOCATE1,25,1:PRINT"MATE ";B$;:GOTO3380
900 IFG!<=F!THENRETURN
910 F!=G!:E=X:Q=Y:R=A:U=B:RETURN
920 CLS
930 Y=0:FORJ=896TO0STEP-128:Y=Y+1:X=0:FORK=J TO42+J STEP6:X=X+1:T(X,Y)=K:NEXT:NEXT
940 Y=0:FORJ=960TO64STEP-128:Y=Y+1:X=0:FORK=J TO42+J STEP6:X=X+1:B(X,Y)=K:NEXT:NEXT
950 DATA -7,-4,-5,-9,-99,-5,-4,-7
960 DATA -2,-2,-2,-2,-2,-2,-2,-2
970 DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
980 DATA 2,2,2,2,2,2,2,2
990 DATA 7,4,5,9,99,5,4,7
1000 FORY=8TO1STEP-1:FORX=1TO7STEP2:S(X,Y)=I:S(X+1,Y)=-I:NEXT:I=-I:NEXT
1010 FORY=8TO1STEP-1:FORX=1TO8:READA(X,Y):NEXT:NEXT:RETURN
1020 I=-I:A(4,1)=99:A(5,1)=9:A(4,8)=-99:A(5,8)=-9
1030 FORY=1TO8:FORX=1TO8:GOSUB1040:NEXT:NEXT:RETURN
1040 IFS(X,Y)>0THENGOTO1060
1050 ONABS(A(X,Y))GOSUB1140,1330,0,2110,2370,0,2630,0,1590:IFABS(A(X,Y))=99THENGOSUB1850:RETURNELSERETURN
1060 ONABS(A(X,Y))GOSUB1070,1200,0,1980,2240,0,2500,0,1460:IFABS(A(X,Y))=99THENGOSUB1720:RETURNELSERETURN
1070 IFS(X,Y)<0THENGOTO1140
1080 LOCATEX*8+1,25-Y*3,0
1090 PRINTSTRING$(8,CHR$(140));
1100 LOCATEX*8+1,26-Y*3,0
1110 PRINTSTRING$(8,CHR$(140));
1120 LOCATEX*8+1,27-Y*3,0
1130 PRINTSTRING$(8,CHR$(140));:RETURN
1140 LOCATEX*8+1,25-Y*3,0
1150 PRINTSTRING$(8," ");
1160 LOCATEX*8+1,26-Y*3,0
1170 PRINTSTRING$(8," ");
1180 LOCATEX*8+1,27-Y*3,0
1190 PRINTSTRING$(8," ");:RETURN
1200 IFI*A(X,Y)<0THENGOTO1270
1210 LOCATEX*8+1,25-Y*3,0
1220 PRINTSTRING$(8,CHR$(140));
1230 LOCATEX*8+1,26-Y*3,0
1240 PRINTSTRING$(3,CHR$(140));CHR$(154);STRING$(4,CHR$(140));
1250 LOCATEX*8+1,27-Y*3,0
1260 PRINTSTRING$(8,CHR$(140)):RETURN
1270 LOCATEX*8+1,25-Y*3,0
1280 PRINTSTRING$(8,CHR$(140));
1290 LOCATEX*8+1,26-Y*3,0
1300 PRINTSTRING$(3,CHR$(140));CHR$(154);STRING$(4,CHR$(140));
1310 LOCATEX*8+1,27-Y*3,0
1320 PRINTSTRING$(8,CHR$(140));:RETURN
1330 IFI*A(X,Y)<0THENGOTO1400
1340 LOCATEX*8+1,25-Y*3,0
1350 PRINTSTRING$(8,CHR$(32));
1360 LOCATEX*8+1,26-Y*3,0
1370 PRINTSTRING$(3,CHR$(32));CHR$(154);STRING$(4,CHR$(32));
1380 LOCATEX*8+1,27-Y*3,0
1390 PRINTSTRING$(8,CHR$(32)):RETURN
1400 LOCATEX*8+1,25-Y*3,0
1410 PRINTSTRING$(8,CHR$(32));
1420 LOCATEX*8+1,26-Y*3,0
1430 PRINTSTRING$(3,CHR$(32));CHR$(154);STRING$(4,CHR$(32));
1440 LOCATEX*8+1,27-Y*3,0
1450 PRINTSTRING$(8,CHR$(32));:RETURN
1460 IFI*A(X,Y)<0THENGOTO1530
1470 LOCATEX*8+1,25-Y*3,0
1480 PRINTSTRING$(2,CHR$(140));STRING$(3,CHR$(139));STRING$(3,CHR$(140));
1490 LOCATEX*8+1,26-Y*3,0
1500 PRINTCHR$(140)+"QUEEN"+CHR$(140);CHR$(140);
1510 LOCATEX*8+1,27-Y*3,0
1520 PRINTSTRING$(2,CHR$(140));STRING$(3,CHR$(139));STRING$(3,CHR$(140));:RETURN
1530 LOCATEX*8+1,25-Y*3,0
1540 PRINTSTRING$(2,CHR$(140));STRING$(3,CHR$(139));STRING$(3,CHR$(140));
1550 LOCATEX*8+1,26-Y*3,0
1560 PRINTCHR$(140)+"QUEEN"+CHR$(140);CHR$(140);
1570 LOCATEX*8+1,27-Y*3,0
1580 PRINTSTRING$(2,CHR$(140));STRING$(3,CHR$(139));STRING$(3,CHR$(140));:RETURN
1590 IFI*A(X,Y)<0THENGOTO1660
1600 LOCATEX*8+1,25-Y*3,0
1610 PRINTSTRING$(2,CHR$(32));STRING$(3,CHR$(178));STRING$(3,CHR$(32));
1620 LOCATEX*8+1,26-Y*3,0
1630 PRINTCHR$(32)+"QUEEN"+CHR$(32);CHR$(32);
1640 LOCATEX*8+1,27-Y*3,0
1650 PRINTSTRING$(2,CHR$(32));STRING$(3,CHR$(139));STRING$(3,CHR$(32));:RETURN
1660 LOCATEX*8+1,25-Y*3,0
1670 PRINTSTRING$(2,CHR$(32));STRING$(3,CHR$(139));STRING$(3,CHR$(32));
1680 LOCATEX*8+1,26-Y*3,0
1690 PRINTCHR$(32)+"QUEEN"+CHR$(32);CHR$(32);
1700 LOCATEX*8+1,27-Y*3,0
1710 PRINTSTRING$(2,CHR$(32));STRING$(3,CHR$(139));STRING$(3,CHR$(32));:RETURN
1720 IFI*A(X,Y)THENGOTO1790
1730 LOCATEX*8+1,25-Y*3,0
1740 PRINTSTRING$(2,CHR$(140));STRING$(4,CHR$(139));STRING$(2,CHR$(140));
1750 LOCATEX*8+1,26-Y*3,0
1760 PRINTCHR$(140);CHR$(139)+"KING"+CHR$(139);CHR$(140);
1770 LOCATEX*8+1,27-Y*3,0
1780 PRINTSTRING$(2,CHR$(140));STRING$(4,CHR$(139));STRING$(2,CHR$(140));:RETURN
1790 LOCATEX*8+1,25-Y*3,0
1800 PRINTSTRING$(2,CHR$(140));STRING$(4,CHR$(139));STRING$(2,CHR$(140));
1810 LOCATEX*8+1,26-Y*3,0
1820 PRINTCHR$(140);CHR$(139)+"KING"+CHR$(139);CHR$(140);
1830 LOCATEX*8+1,27-Y*3,0
1840 PRINTSTRING$(2,CHR$(140));STRING$(4,CHR$(139));STRING$(2,CHR$(140));:RETURN
1850 IFI*A(X,Y)<0THENGOTO1920
1860 LOCATEX*8+1,25-Y*3,0
1870 PRINTSTRING$(2,CHR$(32));STRING$(4,CHR$(139));STRING$(2,CHR$(32));
1880 LOCATEX*8+1,26-Y*3,0
1890 PRINTCHR$(32);CHR$(139)+"KING"+CHR$(139);CHR$(32);
1900 LOCATEX*8+1,27-Y*3,0
1910 PRINTSTRING$(2,CHR$(32));STRING$(4,CHR$(139));STRING$(2,CHR$(32));:RETURN
1920 LOCATEX*8+1,25-Y*3,0
1930 PRINTSTRING$(2,CHR$(32));STRING$(4,CHR$(139));STRING$(2,CHR$(32));
1940 LOCATEX*8+1,26-Y*3,0
1950 PRINTCHR$(32);CHR$(139)+"KING"+CHR$(139);CHR$(32);
1960 LOCATEX*8+1,27-Y*3,0
1970 PRINTSTRING$(2,CHR$(32));STRING$(4,CHR$(139));STRING$(2,CHR$(32));:RETURN
1980 IFI*A(X,Y)<0THENGOTO2050
1990 LOCATEX*8+1,25-Y*3,0
2000 PRINTSTRING$(3,CHR$(140));STRING$(2,CHR$(139));STRING$(3,CHR$(140));
2010 LOCATEX*8+1,26-Y*3,0
2020 PRINTCHR$(140)+"KNIGHT"+CHR$(140);
2030 LOCATEX*8+1,27-Y*3,0
2040 PRINTSTRING$(3,CHR$(140));STRING$(2,CHR$(139));STRING$(3,CHR$(140));:RETURN
2050 LOCATEX*8+1,25-Y*3,0
2060 PRINTSTRING$(3,CHR$(140));STRING$(2,CHR$(139));STRING$(3,CHR$(140));
2070 LOCATEX*8+1,26-Y*3,0
2080 PRINTCHR$(140)+"KNIGHT"+CHR$(140);
2090 LOCATEX*8+1,27-Y*3,0
2100 PRINTSTRING$(3,CHR$(140));STRING$(2,CHR$(139));STRING$(3,CHR$(140));:RETURN
2110 IFI*A(X,Y)<0THENGOTO2180
2120 LOCATEX*8+1,25-Y*3,0
2130 PRINTSTRING$(3,CHR$(32));STRING$(2,CHR$(139));STRING$(3,CHR$(32));
2140 LOCATEX*8+1,26-Y*3,0
2150 PRINTCHR$(32)+"KNIGHT"+CHR$(32);
2160 LOCATEX*8+1,27-Y*3,0
2170 PRINTSTRING$(3,CHR$(32));STRING$(2,CHR$(139));STRING$(3,CHR$(32));:RETURN
2180 LOCATEX*8+1,25-Y*3,0
2190 PRINTSTRING$(3,CHR$(32));STRING$(2,CHR$(139));STRING$(3,CHR$(32));
2200 LOCATEX*8+1,26-Y*3,0
2210 PRINTCHR$(32)+"KNIGHT"+CHR$(32);
2220 LOCATEX*8+1,27-Y*3,0
2230 PRINTSTRING$(3,CHR$(32));STRING$(2,CHR$(139));STRING$(3,CHR$(32));:RETURN
2240 IFI*A(X,Y)<0THENGOTO2310
2250 LOCATEX*8+1,25-Y*3,0
2260 PRINTSTRING$(3,CHR$(140));STRING$(2,CHR$(139));STRING$(3,CHR$(140));
2270 LOCATEX*8+1,26-Y*3,0
2280 PRINTCHR$(140)+"BISHOP"+CHR$(140);
2290 LOCATEX*8+1,27-Y*3,0
2300 PRINTSTRING$(3,CHR$(140));STRING$(2,CHR$(139));STRING$(3,CHR$(140));:RETURN
2310 LOCATEX*8+1,25-Y*3,0
2320 PRINTSTRING$(3,CHR$(140));STRING$(2,CHR$(139));STRING$(3,CHR$(140));
2330 LOCATEX*8+1,26-Y*3,0
2340 PRINTCHR$(140)+"BISHOP"+CHR$(140);
2350 LOCATEX*8+1,27-Y*3,0
2360 PRINTSTRING$(3,CHR$(140));STRING$(2,CHR$(139));STRING$(3,CHR$(140));:RETURN
2370 IFI+A(X,Y)<0THENGOTO2440
2380 LOCATEX*8+1,25-Y*3,0
2390 PRINTSTRING$(3,CHR$(32));STRING$(2,CHR$(139));STRING$(3,CHR$(32));
2400 LOCATEX*8+1,26-Y*3,0
2410 PRINTCHR$(32)+"BISHOP"+CHR$(32);
2420 LOCATEX*8+1,27-Y*3,0
2430 PRINTSTRING$(3,CHR$(32));STRING$(2,CHR$(139));STRING$(3,CHR$(32));:RETURN
2440 LOCATEX*8+1,25-Y*3,0
2450 PRINTSTRING$(3,CHR$(32));STRING$(2,CHR$(139));STRING$(3,CHR$(32));
2460 LOCATEX*8+1,26-Y*3,0
2470 PRINTCHR$(32)+"BISHOP"+CHR$(32);
2480 LOCATEX*8+1,27-Y*3,0
2490 PRINTSTRING$(3,CHR$(32));STRING$(2,CHR$(139));STRING$(3,CHR$(32));:RETURN
2500 IFI*A(X,Y)<0THENGOTO2570
2510 LOCATEX*8+1,25-Y*3,0
2520 PRINTCHR$(140);CHR$(140);CHR$(139);CHR$(140);CHR$(140);CHR$(139);CHR$(140);CHR$(140);
2530 LOCATEX*8+1,26-Y*3,0
2540 PRINTCHR$(140);CHR$(140)+"ROOK"+CHR$(140);CHR$(140);
2550 LOCATEX*8+1,27-Y*3,0
2560 PRINTSTRING$(2,CHR$(140));STRING$(4,CHR$(139));STRING$(2,CHR$(140));:RETURN
2570 LOCATEX*8+1,25-Y*3,0
2580 PRINTCHR$(140);CHR$(140);CHR$(139);CHR$(140);CHR$(140);CHR$(139);CHR$(140);
CHR$(140);
2590 LOCATEX*8+1,26-Y*3,0
2600 PRINTCHR$(140);CHR$(140)+"ROOK"+CHR$(140);CHR$(140);
2610 LOCATEX*8+1,27-Y*3,0
2620 PRINTSTRING$(2,CHR$(140));STRING$(4,CHR$(139));STRING$(2,CHR$(140));:RETURN
2630 IFI*A(X,Y)<0THENGOTO2700
2640 LOCATEX*8+1,25-Y*3,0
2650 PRINTCHR$(32);CHR$(32);CHR$(139);CHR$(32);CHR$(32);CHR$(139);CHR$(32);CHR$(32);
2660 LOCATEX*8+1,26-Y*3,0
2670 PRINTCHR$(32);CHR$(32)+"ROOK"+CHR$(32);CHR$(32);
2680 LOCATEX*8+1,27-Y*3,0
2690 PRINTSTRING$(2,CHR$(32));STRING$(4,CHR$(139));STRING$(2,CHR$(32));:RETURN
2700 LOCATEX*8+1,25-Y*3,0
2710 PRINTCHR$(32);CHR$(32);CHR$(139);CHR$(32);CHR$(32);CHR$(139);CHR$(32);CHR$(32);
2720 LOCATEX*8+1,26-Y*3,0
2730 PRINTCHR$(32);CHR$(32)+"ROOK"+CHR$(32);CHR$(32);
2740 LOCATEX*8+1,27-Y*3,0
2750 PRINTSTRING$(2,CHR$(32));STRING$(4,CHR$(139));STRING$(2,CHR$(32));:RETURN
2760 LOCATE31,25,1:PRINTSTRING$(10," ");
2770 X$=INKEY$:IFX$="N"THENN$=X$
2780 IFX$>="A"ANDX$<="H"THENX=VAL(CHR$(ASC(X$)-16)):GOTO2900
2790 IFX$="N"THENGOSUB3200
2800 IFX$="K"ANDA(5,1)=99ANDA(8,1)=7THENA(5,1)=1:A(8,1)=1:A(7,1)=99:A(6,1)=7:GOTO2970
2810 IFX$="Q"ANDA(5,1)=99ANDA(1,1)=7THENA(5,1)=1:A(1,1)=1:A(3,1)=99:A(4,1)=7:GOTO2970
2820 IFX$="K"ANDA(4,1)=99ANDA(1,1)=7THENA(4,1)=1:A(1,1)=1:A(2,1)=99:A(3,1)=7:GOTO2970
2830 IFX$="Q"ANDA(4,1)=99ANDA(8,1)=7THENA(4,1)=1:A(8,1)=1:A(6,1)=99:A(5,1)=7:GOTO2970
2840 IFX$="X"THENGOSUB3000:LOCATE1,25,0:PRINT"EXCHANGING         ";:GOSUB3710:IFCL$="Y"THENLOCATE50,25,0:PRINT"START ";TIME$;:GOTO250:ELSE:GOTO250
2850 IFX$="S"THENGOTO2990
2860 IFX$="M"THENGOSUB3010
2870 IFX$="I"THENGOSUB3410:CLS:GOSUB1030:LOCATE1,25,1:PRINT"MOVE ";B$;:SOUND10,10
2880 IFX$="L"THENGOSUB3230
2890 GOTO2770
2900 LOCATE21,25,1:PRINTX$;:LOCATE31,25,1:PRINT"            ";
2910 Y=VAL(INKEY$):IFY=0THENGOTO2910
2920 LOCATE22,25,1:PRINTY;:LOCATE25,25,1:PRINT"-";
2930 IFA(X,Y)<2ORA(X,Y)>99THENLOCATE31,25,1:PRINT"ENTRY ERROR ";:GOTO2760
2940 A$=INKEY$:IFA$<"A"ORA$>"H"THENGOTO2940ELSEA=VAL(CHR$(ASC(A$)-16))
2950 LOCATE27,25,1:PRINTA$;
2960 B=VAL(INKEY$):IFB=0THENGOTO2960ELSELOCATE28,25,1:PRINTB;
2970 IFX$="K"ORX$="Q"THENLOCATE20,25,1:PRINT"CSTL. ";X$;"-SIDE";:GOSUB3000ELSEGOSUB3000
2980 IFCL$="Y"THENLOCATE50,25,0:PRINT"START ";TIME$;
2990 RETURN
3000 LOCATE1,25,1:PRINTSTRING$(79," ");:RETURN
3010 GOSUB3000:LOCATE1,25,1:PRINT"MODIFYING          ";
3020 GOSUB3180:IFM$<"A"ORM$>"H"THENGOTO3020
3030 X=VAL(CHR$(ASC(M$)-16)):LOCATE21,25,1:PRINTM$;
3040 M$=INKEY$:IFM$<"1"ORM$>"8"THENGOTO3040
3050 Y=VAL(M$):LOCATE23,25,1:PRINTM$;" = ";
3060 M$=INKEY$:IFM$="C"ORM$="P"ORM$="E"THENS1$=M$:LOCATE27,25,1:PRINTM$;:ELSEGOTO3060
3070 M$=INKEY$:IFM$="S"ORM$="P"ORM$="N"ORM$="B"ORM$="R"ORM$="Q"ORM$="K"THENV$=M$:LOCATE29,25,1:PRINTM$;ELSEGOTO3070
3080 IFV$="P"THENV1=2
3090 IFV$="N"THENV1=4
3100 IFV$="B"THENV1=5
3110 IFV$="R"THENV1=7
3120 IFV$="Q"THENV1=9
3130 IFV$="K"THENV1=99
3140 IFV$="S"THENV1=1
3150 IFS1$="C"ANDV1<>1THENV1=-V1
3160 A(X,Y)=V1:IFS1$="E"THENA(X,Y)=1
3170 GOSUB1040:GOTO3010
3180 M$=INKEY$:IFM$="N"THENGOSUB3200:GOTO3180:ELSEIFM$="Z"THENGOSUB3000:LOCATE20,25,1:PRINT"         ";:GOSUB1030:ELSERETURN
3190 IFCL$="Y"THENLOCATE51,25,0:PRINT"START ";TIME$;:GOTO250ELSEGOTO250
3200 FORJ=1TO8:FORK=1TO8:K$=STR$(K)
3210 LOCATEJ*8+1,27-K*3,0
3220 PRINTCHR$(J+64);RIGHT$(K$,1);:NEXT:NEXT:RETURN
3230 GOSUB3000:LOCATE20,25,1:PRINT"LEVEL=";B8!;:PRINT"CHANGE LEVELS?";
3240 C$=INKEY$:IFC$="N"THENGOTO3280ELSEIFC$="Y"THENLOCATE27,25,1:PRINT"       ";:GOSUB3000:ELSEGOTO3240
3250 L1$=INKEY$:IFL1$=""THENGOTO3250ELSEIFL1$>="0"ANDL1$<="9"THENLOCATE27,25,1:PRINTL1$;:ELSEGOTO3250
3260 L2$=INKEY$:IFL2$=""THENGOTO3260ELSEIFL2$<"0"ORL2$>"9"THENL2$=L1$:L1$="0"
3270 B8!=VAL(L1$)*10+VAL(L2$):B7!=B8!/2:LOCATE27,25,0:PRINTL1$;L2$;
3280 GOSUB3000:LOCATE20,25,0:PRINT"              ";:LOCATE1,25,1:PRINT"MOVE ";B$;:RETURN
3290 REM *** PROMOTION ROUTINE ***
3300 LOCATE1,2,1:PRINT"P, N, B, R, Q ";
3310 Z$=INKEY$:IFZ$="P"THENA(A,B)=2:GOTO3370
3320 IFZ$="N"THENA(A,B)=4:GOTO3370
3330 IFZ$="B"THENA(A,B)=5:GOTO3370
3340 IFZ$="R"THENA(A,B)=7:GOTO3370
3350 IFZ$="Q"THENA(A,B)=9:GOTO3370
3360 GOTO3310
3370 RETURN
3380 IFCL$="Y"THENLOCATE61,25,1:PRINT"STOP ";TIME$;
3390 LOCATE1,25,1:PRINT"HIT (P) TO PLAY OR HIT (B) FOR BASIC";
3400 A$=INKEY$:IFA$=""THENGOTO3400ELSEIFA$="B"THENCLS:ENDELSEIFA$="P"THENRUNELSEGOTO3400
3410 CLS
3420 PRINT"1. USE LIST TO INSURE LOADED RIGHT, THE LAST LINE IS 65529 "
3430 PRINT"2. ALSO NOTE MEMORY SIZE AS A DOUBLE CHECK "
3440 PRINT"3. SPECIAL COMMANDS DURING PLAYER'S MOVE ARE:"
3450 PRINT"   TYPE 'N' - TO NUMBER THE BOARD "
3460 PRINT"        'K' - TO CASTLE KING SIDE "
3470 PRINT"        'Q' - TO CASTLE QUEEN SIDE "
3480 PRINT"        'X' - TO EXCHANGE PIECES AND LET COMPUTER MOVE"
3490 PRINT"        'S' - TO LET COMPUTER PLAY BY ITSELF "
3500 PRINT"        'M' - TO MODIFY THE BOARD, ENTER THE SQUARE FOLLOWED BY"
3510 PRINT"              C, P, OR E  FOR COMPUTER, PLAYER, OR EMPTY"
3520 PRINT"              AND S,P,N,B,R,Q,K  FOR SQUARE, PAWN, ETC..."
3530 PRINT"        'Z' - TO ESCAPE MODIFY AND LET COMPUTER MOVE"
3540 PRINT"        'I' - TO GET INSTRUCTIONS AGAIN"
3550 PRINT"        'L' - TO LOOK AT OR CHANGE LEVEL OF PLAY"
3560 REM ********
3570 INPUT"HIT ENTER TO CONTINUE";EN$:PRINT
3580 PRINT"4. TO PROMOTE TO P,N,B,R,Q ENTER THE LETTER WHEN PROMOTED"
3590 PRINT"5. TO CAPTURE 'EN PASSANT' SPECIFY THE 'FROM' - 'TO' SQUARES"
3600 PRINT"6. LEVELS OF PLAY ARE FROM 01 TO 24"
3610 PRINT"7. COMPUTER ASSUMES MATE IF KING IS LEFT IN CHECK SO BE SURE TO "
3620 PRINT"    WATCH FOR THE CHECK MESSAGE"
3630 PRINT"8. IF A MOVE IS ILLEGAL OR AN ENTRY ERROR IS MADE SIMPLY TYPE IN"
3640 PRINT"    A NEW MOVE.  A MOVE MAY BE STARTED OVER BY FORCING AN ERROR. (E.G. '9')."
3650 PRINT"9. IF <BREAK> IS HIT DURING THE GAME, TYPE 'GOSUB 900:CONT' TO"
3660 PRINT"    DRAW BOARD AND CONTINUE"
3670 PRINT"10. YOU HAVE A CHOICE OF BLACK OR WHITE, THE COMPUTER WILL ALWAYS"
3680 PRINT"     BE AT THE TOP OF THE SCREEN"
3690 PRINT:PRINT:INPUT"HIT ENTER TO CONTINUE GAME";EN$
3700 RETURN
3710 I=-I:GOSUB3720:GOSUB1030:RETURN
3720 L=0:FORJ=1TO8:FORK=1TO8:L=L+1:IFA(J,K)<>1THENC(L)=-A(J,K):ELSEC(L)=A(J,K)
3730 NEXT:NEXT
3740 L=65:FORJ=1TO8:FORK=1TO8:L=L-1:A(J,K)=C(L):NEXT:NEXT
3750 RETURN
3760 END
