I got it working on gwbasic
You can download gwbasic freely. I downloaded it from
http://www.madisoncounty.net/~kj5tf/Downloads.html
but I can not guarantee that it's safe.
Start gwbasic and do LOAD "chessmaster.txt",then F2 or 'run' and it goes.
It seems the original hardware had a build in boundary checker, I had to code it in on lines 590-620. Also it gets more memory on line 90.
The board display is not working but the moves are shown separately.
10 '*******************
20 '* CHESSMASTER *
30 '* BY: *
40 '* HAROLD SNYDER *
50 '* P.O. BOX 3330 *
60 '* CHEYENNE, WY *
70 '* 82003 *
80 '*******************
90 CLS : CLEAR ,32768,6000 'INCREASE AVAILABLE MEMORY
100 PRINT," * CHESSMASTER *"
110 PRINT," BY"
120 PRINT," HAROLD SNYDER"
130 FOR QZ = 1 TO 2999 : NEXT
140 A = 0 : B = 0 : X = 0 : Y = 0 : S = 0 : A0 = 0 : T=0 : A8 = 0 : A2 = 0 : A3 = 0 : A4 = 0 : B1 = 0 : B6 = 0 : H = 0 : M = 0 : N = 0 : P = 0 : A5 = 0 : I = 1 : DIM A(9,9),C(64)
142 POKE 248,&H32 : POKE 249,&H62 : POKE 250,&H1C : POKE 251,&HAF : POKE 252,&H7E : POKE 253,&HAD : POKE 254,&HA5 : POKE 410,&H7E : POKE 411,0 : POKE 412,&HF8
150 CLS : PRINT : PRINT" * CAN THIS COMPUTER USE THE HIGH SPEED POKE Y/N"
160 IN$ = INKEY$ : IF IN$ = "" THEN 160
170 IF IN$ <> "Y" AND IN$ <> "N" THEN 160
180 IF IN$ = "Y" THEN POKE 65495,0
190 CLS : PRINT : PRINT"DO YOU WANT INSTRUCTIONS Y/N"
200 IN$ = INKEY$ : IF IN$ <> "Y" AND IN$ <> "N" THEN 200
210 IF IN$ = "Y" THEN GOSUB 1940
220 PRINT : PRINT"WHAT LEVEL OF PLAY 1-7"
230 IN$ = INKEY$ : IF IN$ = "" THEN 230
240 B8 = VAL(IN$)-1 : IF B8<0 OR B8>6 THEN 230
250 B7 = B8*2
260 IF B7 = 0 THEN B7 = 1
270 PRINT : PRINT"DO YOU WANT WHITE Y/N"
280 IN$ = INKEY$ : IF IN$ = "" THEN 280
290 IF IN$ <> "Y" AND IN$ <> "N" THEN 280
300 GOSUB 1110 'INIT
310 IF IN$ <> "N" THEN GOSUB 1220 : GOTO 410
320 GOSUB 1200 'PLAYER WANTS BLACK
330 'COMPUTER MOVE
340 F = -99 : A0 = 0 : FOR J = 1 TO 8 : FOR K = 1 TO 8 : IF A(J,K) = 99 THEN A6 = J:A7 = K : GOTO 350 ELSE NEXT : NEXT
350 FOR X = 1 TO 8 : FOR Y = 1 TO 8 : IF A(X,Y) < 0 THEN GOSUB 520 : IF F >= B7 THEN 370
360 NEXT : NEXT : IF F >= -9 THEN 370 ELSE 190
370 A(R,U) = A(E,Q) : A(E,Q) = 1 : IF A(R,U) = -2 AND U = 1 THEN A(R,U) = -9
380 X = R : Y = U : A0 = 4 : GOSUB 520 : SOUND 190 , 1 : SOUND 110 , 1 : SOUND 160 , 1 : SOUND 140 , 1 : PRINT, "MY MOVE" ; : PRINT, " WAS " ; :
382 PRINT CHR$(E+64) ; CHR$(Q+48) ; CHR$(R+64) ; CHR$(U + 48);
390 GOSUB 1240 : X = E : Y = Q : GOSUB 1240 : IF C = 1 THEN PRINT , " check " ; : C = 0 ELSE PRINT , " "; :
400 'PLAYER MOVE
410 GOSUB 1520 : D = 0 : B4 = A : B9 = B : B5 = 0
420 IF X$ = "K" OR X$ = "Q" THEN 340
430 A0 = 3 : GOSUB 480 : IF D = 0 THEN PRINT , "illegal" ; : PRINT , " move " ; : FOR J = 1 TO 1500 : NEXT : GOTO 410
440 PRINT " " ; : PRINT " " ; : PRINT " " ; : PRINT " " ; : PRINT " " ; : PRINT " " ; : A = B4 : B = B9 :
442 A(A,B) = A(X,Y) : A(X,Y) = 1 : GOSUB 1240 : X = A : Y = B : GOSUB 1240
450 IF A(A,B) = 2 AND B = 8 THEN GOSUB 1800 : GOSUB 1240
460 IF B5 = 1 THEN A(A , B - 1) = 1 : X = A : Y = B - 1 : GOSUB 1240 : GOTO 340 ELSE 340
470 'COMPUTER PIECE MOVE
480 PRINT CHR$(191) ; :ON A(X , Y) GOTO 90 , 740 , 90 , 650 , 590 , 90 , 540 , 90 , 590
490 'KING MOVE
500 FOR A = X - 1 TO X + 1
505 FOR B = Y - 1 TO Y + 1
510 IF A(A,B) <> 0 THEN GOSUB 940
515 NEXT : NEXT : RETURN
520 ELSE NEXT : NEXT : RETURN
510 'PLAYER PIECE MOVE
520 ON (-A(X,Y)) GOTO 90 , 800 , 90 , 650 , 590 , 90 , 540 , 90 , 590 : GOTO 500
530 'ROOK/QUEEN MOVE
540 B = Y : FOR A = X + 1 TO 8 : GOSUB 930 : IF S = 0 THEN NEXT 'RIGHT
550 FOR A = X - 1 TO 1 STEP - 1 : GOSUB 930 : IF S = 0 THEN NEXT 'LEFT
560 A = X : FOR B = Y + 1 TO 8 : GOSUB 930 : IF S = 0 THEN NEXT 'UP
570 FOR B = Y - 1 TO 1 STEP - 1 : GOSUB 930 : IF S = 0 THEN NEXT : RETURN ELSE RETURN 'DOWN
580 'BISHOP/QUEEN MOVE
590 B = Y : FOR A = X + 1 TO 8 : B = B + 1 : IF B >9 THEN 600 ELSE GOSUB 930 : IF S = 0 THEN NEXT
600 B = Y : FOR A = X - 1 TO 1 STEP - 1 : B = B - 1 : IF B <0 THEN 610 ELSE GOSUB 930 : IF S = 0 THEN NEXT
610 B = Y : FOR A = X - 1 TO 1 STEP - 1 : B = B + 1 : IF B >9 THEN 620 ELSE GOSUB 930 : IF S = 0 THEN NEXT
620 B = Y : FOR A = X + 1 TO 8 : B = B - 1 : IF B <0 THEN 630 ELSE GOSUB 930 : IF S = 0 THEN NEXT
630 IF ABS(A(X,Y)) = 9 THEN 540 ELSE RETURN 'IF QUEEN TRY ROOK MOVES
640 'KNIGHT MOVE
650 A = X + 2 : B = Y + 1 : IF A < 9 AND B < 9 THEN GOSUB 940
660 B = B - 2 : IF B > 0 AND A < 9 THEN GOSUB 940
670 A = A - 4 : IF A > 0 AND B > 0 THEN GOSUB 940
680 B = B + 2 : IF B < 9 AND A > 0 THEN GOSUB 940
690 A = A + 1 : B = B + 1 : IF A > 0 AND A < 9 AND B < 9 THEN GOSUB 940
700 B = B - 4 : IF B > 0 AND A > 0 AND A < 9 THEN GOSUB 940
710 A = A + 2 : IF A > 0 AND A < 9 AND B > 0 THEN GOSUB 940
720 B = B + 4 : IF B < 9 AND A > 0 AND A < 9 THEN GOSUB 940 : RETURN ELSE RETURN
730 'PLAYER PAWN MOVE
740 A = X : IF Y > 2 THEN 760
750 B = Y + 1 : IF A(A,B) = 1 THEN GOSUB 950 : B = B + 1 : IF A(A,B) = 1 THEN GOSUB 950 : GOTO 770 ELSE 770 ELSE 770
760 B = Y + 1 : IF A(A,B) = 1 THEN GOSUB 950
770 A = X + 1 : B = Y + 1 : IF A(A,B) < 0 THEN GOSUB 950
780 A = A - 2 : IF A(A,B) < 0 THEN GOSUB 950 : RETURN ELSE RETURN
790 'COMPUTER PAWN MOVE
800 A = X : IF Y < 7 THEN 820
810 B = Y - 1 : IF A(A,B) = 1 THEN GOSUB 950 : B = B - 1 : IF A(A,B) = 1 THEN GOSUB 950 : GOTO 830 ELSE 830 ELSE 830
820 B = Y - 1 : IF A(A,B) = 1 THEN GOSUB 950
830 A = X - 1 : B = Y - 1 : IF A(A,B) > 1 THEN GOSUB 950
840 A = A + 2 : IF A(A,B) > 1 THEN GOSUB 950 : RETURN ELSE RETURN
850 'PROTECT ROUTINE
860 T = A(A,B) : IF T = -99 THEN B1 = T : RETURN
870 A5 = S : IF ABS(T) <= A(X,Y) THEN A(A,B) = A(X,Y) : A(X,Y) = 1 : GOTO 890
880 IF T < B1 THEN B1 = T : S = A5 : RETURN ELSE S = A5 : RETURN
890 A1 = X : A2 = Y : A3 = A : A4 = B : A8 = T : A0 = 2 : FOR X = 1 TO 8 : FOR Y = 1 TO 8 : IF A(X,Y) <0 THEN GOSUB 520 : IF T = 0 THEN 910
900 NEXT : NEXT
910 X = A1 : Y = A2 : A = A3 : B = A4 : A0 = 5 : A(X,Y) = A(A,B) : A(A,B) = A8 : GOTO 880
920 'LEGAL MOVE CHECK
930 S = 0 'RESET LEGAL
932 IF A(A,B) = 1 THEN 950 ELSE IF A(A,B) = 0 THEN S = 1 : RETURN ELSE IF (SGN(A(A,B))) = (SGN(A(X,Y))) THEN S = 1 : RETURN ELSE S = 1 : GOTO 950 'EMPTY,OFFBOARD,FRIENDLY,OK
940 IF A(A,B) <> 1 THEN IF SGN(A(A,B)) = SGN(A(X,Y)) THEN RETURN
950 PRINT " " ; : ON A0 GOTO 960 , 970 , 980 , 990 , 1000 : GOTO 1020
960 IF A6 = A AND A7 = B THEN B1 = B1 + 1 : RETURN ELSE RETURN
970 IF A3 = A AND A4 = B THEN T = 0 : RETURN ELSE RETURN
980 IF B4 = A AND B9 = B THEN D = 1 : RETURN ELSE RETURN
990 IF A6 = A AND A7 = B THEN C = 1 : RETURN ELSE RETURN
1000 IF A(A,B) < 0 THEN 860 ELSE RETURN
1010 'LOOK-AHEAD ROUTINE
1020 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
1030 A0 = 5 : FOR X = 1 TO 8 : FOR Y = 1 TO 8 : IF A(X,Y) > 1 THEN GOSUB 480
1040 NEXT : NEXT : X = N : Y = H : A0 = 1 : GOSUB 520 : A0 = 0 : S = B3 : X = W : Y = M : A = N : B = H : A(X,Y) = A(A,B) : A(A,B) = P
1050 'EVALUATE MOVE
1060 B6 = 1/(ABS(4.5 - A) + ABS(4.5 - B) + 1) : IF A(X,Y) < -2 AND A(X,Y) > -9 THEN B6 = B6 + 1/(ABS(A6 - A) + ABS(A7 - B) + 5) + RND(0)/15
1070 G = P + B1 + B6 : IF P = 99 THEN GOSUB 1780 : PRINT , " " ; : PRINT , " mate! " ; : PRINT , B$ ; : PRINT , " " ; : GOTO 1920
1080 IF G <= F THEN RETURN
1090 F = G : E = X : Q = Y : R = A : U = B : RETURN
1100 'INITIALIZATION ROUTINE
1110 CLS : FOR Y = 8 TO 1 STEP - 1 : FOR X = 1 TO 8 : READ A(X,Y) : NEXT : NEXT
1120 FOR J = 1 TO 4 : SB$ = SB$ + STRING$(3 , CHR$(140)) + STRING$(3 , CHR$(131)) : SW$ = SW$ + STRING$(3 , CHR$(131)) + STRING$(3 , CHR$(140)) : NEXT
1130 FOR J = 32 TO 416 STEP 128 : PRINT SB$ ; : PRINT SW$ ; : NEXT : FOR J = 1 TO 7 STEP 2 :
1132 PRINT CHR$(128) ; CHR$(J + 96) ; CHR$(128) ; CHR$(140) ; CHR$(J + 65) ; CHR$(140) ; : NEXT :
1134 FOR J = 1 TO 8 : PRINT CHR$(128) ; : PRINT CHR$(57-J) ; : NEXT : PRINT CHR$(128) ; : RETURN
1140 DATA -7 , -4 , -5 , -9 , -99 , -5 , -4 , -7
1150 DATA -2 , -2 , -2 , -2 , -2 , -2 , -2 ,-2
1160 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
1170 DATA 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2
1180 DATA 7 , 4 , 5 , 9 , 99 , 5 , 4 , 7
1190 'PLAYER REQUESTS BLACK
1200 I = -I : A(4,1) = 99 : A(5,1) = 9 : A(4,8) = -99 : A(5,8) = -9 'FLIP BOARD
1210 'GRAPHIC DRIVER-FULL SCREEN
1220 FOR Y= 1 TO 8 : FOR X = 1 TO 8 : GOSUB 1240 : NEXT : NEXT : RETURN
1230 'GRAPHIC DRIVER-ONE PIECE
1240 L = 509 + X*3 - Y*64 : IF X + Y - INT((X + Y)/2)*2 = 0 THEN 1260
1250 IF I*A(X,Y) >0 THEN ON ABS(A(X,Y)) GOTO 1270 , 1280 , 90 , 1290 , 1300 , 90 , 1310 , 90 , 1320 :
1252 PRINT " K " ; : RETURN ELSE ON ABS(A(X,Y)) GOTO 1270 , 1330 , 90 , 1340 , 1350 , 90 , 1360 , 90 , 1370 : PRINT , " k " ; : RETURN
1260 IF I*A(X,Y) >0 THEN ON ABS(A(X,Y)) GOTO 1380 , 1390 , 90 , 1400 , 1410 , 90 , 1420 , 90 , 1430 :
1262 PRINT "K" ; : RETURN ELSE ON ABS(A(X,Y)) GOTO 1380 , 1440 , 90 , 1450 , 1460 , 90 , 1470 , 90 , 1480 :
1264 PRINT "k" ; : RETURN
1270 PRINT " " ; : RETURN
1280 PRINT " P " ; : RETURN
1290 PRINT " N " ; : RETURN
1300 PRINT " B " ; : RETURN
1310 PRINT " R ";; ; : RETURN
1320 PRINT " Q " ; : RETURN
1330 PRINT " p " ; : RETURN
1340 PRINT " n " ; : RETURN
1350 PRINT " b " ; : RETURN
1360 PRINT " r " ; : RETURN
1370 PRINT " q " ; : RETURN
1380 RETURN
1390 PRINT "P"; : RETURN
1400 PRINT "N"; : RETURN
1410 PRINT "B"; : RETURN
1420 PRINT "R" : RETURN
1430 PRINT "Q"; : RETURN
1440 PRINT "p"; : RETURN
1450 PRINT "n"; : RETURN
1460 PRINT "b"; : RETURN
1470 PRINT "r"; : RETURN
1480 PRINT "q"; : RETURN
1490 'INPUT ROUTINE
1500 PRINT , "cannot " ; : PRINT , "castle " ; : FOR J = 1 TO 1500 : NEXT : GOTO 1520
1510 PRINT , " entry " ; : PRINT , " error " ; : FOR J = 1 TO 1500 : NEXT
1520 GOSUB 1750 : GOSUB 1780 : PRINT , " your " ; : PRINT , " move ";
1530 X$ = INKEY$ : IF X$ = "" THEN 1530
1540 PRINT , X$;
1550 SOUND 120,1
1560 X1$ = INKEY$ : IF X1$ = "" THEN 1560
1570 PRINT , X1$;
1580 SOUND 120,1
1590 X2$ = INKEY$ : IF X2$ = "" THEN 1590
1600 PRINT , X2$;
1610 SOUND 120,1
1620 X3$ = INKEY$ : IF X3$ = "" THEN 1620
1630 PRINT , X3$ ; : IN$ = X$ + X1$ + X2$ + X3$
1640 SOUND 150,1
1650 IF X$ >= "A" AND X$ <= "H" THEN 1730
1660 IF X$ = "K" THEN IF A(5,1) = 99 AND A(8,1) = 7 AND A(6,1) < 2 AND A(7,1) < 2 THEN A(5,1) = 1 : A(6,1) = 7 : A(7,1) = 99 : A(8,1) = 1 : GOTO 1760
1670 IF X$ = "Q" THEN IF A(5,1) = 99 AND A(1,1) = 7 AND A(4,1) < 2 AND A(3,1) < 2 THEN A(5,1) = 1 : A(4,1) = 7 : A(3,1) = 99 : A(1,1) = 1 : GOTO 1760
1680 IF X$ = "K" THEN IF A(4,1) = 99 AND A(1,1) = 7 AND A(3,1) < 2 AND A(2,1) < 2 THEN A(4,1) = 1 : A(3,1) = 7 : A(2,1) = 99 : A(1,1) = 1 : GOTO 1760
1690 IF X$ = "Q" THEN IF A(4,1) = 99 AND A(8,1) = 7 AND A(5,1) < 2 AND A(6,1) < 2 THEN A(4,1) = 1 : A(5,1) = 7 : A(6,1) = 99 : A(8,1) = 1 : GOTO 1760
1700 'DECODE INPUT
1710 IF X$ = "I" THEN GOSUB 1940 : GOSUB 1130 : GOSUB 1220 : GOTO 1520
1720 IF X$ = "P" THEN RUN ELSE 1510
1730 IF LEN(IN$) = 4 THEN X = ASC(X$) - 64 : Y = ASC(MID$(IN$ , 2 , 1)) - 48 : A = ASC(MID$(IN$ , 3 , 1)) - 64 : B = ASC(MID$(IN$ , 4 , 1)) - 48 ELSE 1510
1740 IF Y < 1 OR Y > 8 OR A < 1 OR A > 8 OR B < 1 OR B > 8 THEN 1510 ELSE IF A(X,Y) < 2 OR A(A , B) > 1 THEN 1510 ELSE GOSUB 1750 : RETURN
1750 PRINT , " " ; : PRINT , " " ; : RETURN
1760 PRINT , "CASTLE " ; : PRINT , X$ ; "-SIDE " ; : GOSUB 1750 : GOSUB 1220 : RETURN
1770 'BLANK MESSAGE AREA
1780 FOR J = 217 TO 345 STEP 32 : PRINT , " " ; : NEXT : RETURN
1790 'PROMOTE PLAYER PAWN
1800 GOSUB 1780 : PRINT , " what " ; : PRINT , " piece " ; : PRINT , " PNBRQ " ; :
1810 IN$ = INKEY$ : IF IN$ = "" THEN 1810
1820 IF IN$ <> "P" AND IN$ <> "N" AND IN$ <> "B" AND IN$ <> "R" AND IN$ <> "Q" THEN PRINT , " " ; : GOTO 1810
1830 PRINT , IN$ ;
1840 IF IN$ = "P" THEN A(A,B) = 2 : RETURN
1850 IF IN$ = "N" THEN A(A,B) = 4 : RETURN
1860 IF IN$ = "B" THEN A(A,B) = 5 : RETURN
1870 IF IN$ = "R" THEN A(A,B) = 7 : RETURN
1880 IF IN$ = "Q" THEN A(A,B) = 9 : RETURN ELSE 1810
1890 'END OF GAME
1900 GOSUB 1780 : PRINT , " " ; : PRINT , " YOU " ; : PRINT , " WIN! " ;
1910 POKE65494,0
1920 GOTO 1920
1930 'INSTRUCTIONS
1940 CLS
1950 PRINT" * INSTUCTIONS *"
1960 PRINT"ENTER KKKK TO CASTLE KING SIDE"
1970 PRINT" QQQQ TO CASTLE QUEEN SIDE"
1980 PRINT" IIII TO GET INSTUCTIONS"
1990 PRINT" PPPP TO START NEW GAME"
2000 PRINT
2010 PRINT" TO PROMOTE TO P, N, B, R OR Q"
2020 PRINT" ENTER LETTER WHEN PROMPTED"
2030 PRINT : PRINT" TO MOVE, CAPTURE OR CAPTURE"
2040 PRINT" EN PASSANT, SPECIFY FROM/TO"
2050 PRINT" (E.G. 'B1C3')"
2060 PRINT : PRINT" LEVELS OF PLAY ARE 1 THRU 7"
2070 PRINT
2080 PRINT" (HIT ANY KEY)";
2090 IN$ = INKEY$ : IF IN$ = "" THEN 2090
2100 CLS : RETURN