MICROCHESS COPYRIGHT 1976, PETER JENNINGS, MICROCHESS, 1612-43 THORNCLIFFE PK DR, TORONTO, CANADA. ALL RIGHTS RESERVED. REPRODUCTION BY ANY MEANS, IN WHOLE OR IN PART, IS PROHIBITED. 2 ; EXECUTION BEGINS AT ADDRESS 0000 3 ; 4 +++ 5 0000 D8 CHESS CLD INITIALIZE 6 0001 A2 FF LDXIM FF TWO STACKS 7 0003 9A TXS 8 0004 A2 C8 LDXIM C8 9 0006 86 B2 STX .SP2 10 ; 11 ; ROUTINES TO LIGHT LED 12 ; DISPLAY AND GET KEY 13 ; FROM KEYBOARD. 14 ; 15 0008 20 1F 1F OUT JSR *OUT DISPLAY AND 16 000B 20 6A 1F JSR *GETKEY GET INPUT 17 000E C5 F3 CMPZ .OLDKY KEY IN ACC 18 0010 F0 F6 BEQ OUT (DEBOUNCE) 19 0012 85 F3 STAZ .OLDKY 20 ; 21 0014 C9 0C CMPIM 0C [C] 22 0016 D0 0F BNE NOSET SET UP 23 0018 A2 1F LDXIM 1F BOARD 24 001A B5 70 WHSET LDAZX .SETW FROM 25 001C 95 50 STAZX .BOARD SETW 26 001E CA DEX 27 001F 10 F9 BPL WHSET 28 0021 86 DC STXZ .OMOVE 29 0023 A9 CC LDAIM CC 30 0025 D0 12 BNE CLDSP 31 ; 32 0027 C9 0E NOSET CMPIM 0E [E] 33 0029 D0 07 BNE NOREV REVERSE 34 002B 20 B2 02 JSR REVERSE BOARD AS 35 002E A9 EE LDAIM EE IS 36 0030 D0 07 BNE CLDSP 37 ; 38 0032 C9 14 NOREV CMPIM 14 [PC] 39 0034 D0 0B BNE NOGO PLAY CHESS 40 0036 20 A2 03 JSR GO 41 ; 42 0039 85 FB CLDSP STA .DIS1 DISPLAY 43 003B 85 FA STAZ .DIS2 ACROSS 44 003D 85 F9 STAZ .DIS3 DISPLAY 45 003F D0 BF BNE CHESS 46 ; 47 0041 C9 0F NOGO CMPIM 0F [F] 48 0043 D0 06 BNE NOMV MOVE MAN 49 0045 20 4B 03 JSR MOVE AS ENTERED 50 0048 4C 9D 01 JMP DISP 51 004B 4C 96 01 NOMV JMP INPUT 52 ; 53 ; THE ROUTINE JANUS DIRECTS THE 54 ; ANALYSIS BY DETERMINING WHAT 55 ; SHOULD OCCUR AFTER EACH MOVE 56 ; GENERATED BY GNM 57 ; 58 ; 59 +++ 60 0100 A6 B5 JANUS LDXZ .STATE 61 0102 30 5C BMI NOCOUNT 62 ; 63 ; THIS ROUTINE COUNTS OCCURRENCES 64 ; IT DEPENDS UPON STATE TO INDEX 65 ; THE CORRECT COUNTERS 66 ; 67 0104 A5 B0 COUNTS LDAZ .PIECE 68 0106 F0 08 BEQ OVER IF STATE=8 69 0108 E0 08 CPXIM 08 DO NOT COUNT 70 010A D0 04 BNE OVER BLK MAX CAP 71 010C C5 E6 CMPZ .BMAXP MOVES FOR 72 010E F0 2E BEQ XRT WHITE 73 ; 74 0110 F6 E3 OVER INCZX .MOB MOBILITY 75 0112 C9 01 CMPIM 01 + QUEEN 76 0114 D0 02 BNE NOQ FOR TWO 77 0116 F6 E3 INCZX .MOB 78 ; 79 0118 50 1E NOQ BVC NOCAP 80 011A A0 0F LDYIM 0F CALCULATE 81 011C A5 B1 LDAZ .SQUARE POINTS 82 011E D9 60 00 ELOOP CMPAY .BK CAPTURED 83 0121 F0 03 BEQ FOUN BY THIS 84 0123 88 DEY MOVE 85 0124 10 F8 BPL ELOOP 86 0126 B9 A0 00 FOUN LDAAY .POINTS 87 0129 D5 E4 CMPZX .MAXC 88 012B 90 04 BCC LESS SAVE IF 89 012D 94 E6 STYZX .PCAP BEST THIS 90 012F 95 E4 STAZX .MAXC STATE 91 ; 92 0131 18 LESS CLC 93 0132 08 PHP ADD TO 94 0133 75 E5 ADCZX .CC CAPTURE 95 0135 95 E5 STAZX .CC COUNTS 96 0137 28 PLP 97 ; 98 0138 E0 04 NOCAP CPXIM 04 99 013A F0 03 BEQ ON4 100 013C 30 31 BMI TREE (=00 ONLY) 101 013E 60 XRT RTS 102 ; 103 ; GENERATE FURTHER MOVES FOR COUNT 104 ; AND ANALYSIS 105 ; 106 013F A5 E8 ON4 LDAZ .XMAXC SAVE ACTUAL 107 0141 85 DD STAZ .WCAP0 CAPTURE 108 0143 A9 00 LDAIM 00 STATE=0 109 0145 85 B5 STAZ .STATE 110 0147 20 4B 03 JSR MOVE GENERATE 111 014A 20 B2 02 JSR REVERSE IMMEDIATE 112 014D 20 00 02 JSR GNMZ REPLY MOVES 113 0150 20 B2 02 JSR REVERSE 114 ; 115 0153 A9 08 LDAIM 08 STATE=8 116 0155 85 B5 STAZ .STATE GENERATE 117 0157 20 09 02 JSR GNM CONTINUATION 118 015A 20 31 03 JSR UMOVE MOVES 119 ; 120 015D 4C 80 17 JMP STRATGY FINAL EVALUATION 121 0160 E0 F9 NOCOUNT CPXIM F9 122 0162 D0 0B BNE TREE 123 ; 124 ; DETERMINE IF THE KING CAN BE 125 ; TAKEN, USED BY CHKCHK 126 ; 127 0164 A5 60 LDAZ .BK IS KING 128 0166 C5 B1 CMPZ .SQUARE IN CHECK? 129 0168 D0 04 BNE RETJ SET INCHEK=0 130 016A A9 00 LDAIM 00 IF IT IS 131 016C 85 B4 STAZ .INCHEK 132 016E 60 RETJ RTS 133 ; 134 ; IF A PIECE HAS BEEN CAPTURED BY 135 ; A TRIAL MOVE, GENERATE REPLIES & 136 ; EVALUATE THE EXCHANGE GAIN/LOSS 137 ; 138 016F 50 FD TREE BVC RETJ NO CAP 139 0171 A0 07 LDYIM 07 (PIECES) 140 0173 A5 B1 LDAZ .SQUARE 141 0175 D9 60 00 LOOPX CMPAY .BK 142 0178 F0 05 BEQ FOUNX 143 017A 88 DEY 144 017B F0 F1 BEQ RETJ (KING) 145 017D 10 F6 BPL LOOPX SAVE 146 017F B9 A0 00 FOUNX LDAAY .POINTS BEST CAP 147 0182 D5 E2 CMPZX .BCAP0 AT THIS 148 0184 90 02 BCC NOMAX LEVEL 149 0186 95 E2 STAXZ .BCAP0 150 0188 C6 B5 NOMAX DEC .STATE 151 018A A9 FB LDAIM FB IF STATE=FB 152 018C C5 B5 CMPZ .STATE TIME TO TURN 153 018E F0 03 BEQ UPTREE AROUND 154 0190 20 25 03 JSR GENRM GENERATE FURTHER 155 0193 E6 B5 UPTREE INC .STATE CAPTURES 156 0195 60 RTS 157 ; 158 ; THE PLAYER'S MOVE IS INPUT 159 ; 160 0196 C9 08 INPUT CMPIM 08 NOT A LEGAL 161 0198 B0 12 BCS ERROR SQUARE # 162 019A 20 EA 03 JSR DISMV 163 019D A2 1F DISP LDXIM 1F 164 019F B5 50 SEARCH LDAZX .BOARD 165 01A1 C5 FA CMPZ .DIS2 166 01A3 F0 03 BEQ HERE DISPLAY 167 01A5 CA DEX PIECE AT 168 01A6 10 F7 BPL SEARCH FROM 169 01A8 86 FB HERE STXZ .DIS1 SQUARE 170 01AA 86 B0 STXZ .PIECE 171 01AC 4C 00 00 ERROR JMP CHESS 172 ; 173 ; GENERATE ALL MOVES FOR ONE 174 ; SIDE, CALL JANUS AFTER EACH 175 ; ONE FOR NEXT STEP 176 ; 177 +++ 178 0200 A2 10 GNMZ LDXIM 10 CLEAR 179 0202 A9 00 GNMX LDAIM 00 COUNTERS 180 0204 95 DE CLEAR STAZX .COUNT 181 0206 CA DEX 182 0207 10 FB BPL CLEAR 183 ; 184 0209 A9 10 GNM LDAIM 10 SET UP 185 020B 85 B0 STAZ .PIECE PIECE 186 020D C6 B0 NEWP DECZ .PIECE NEW PIECE 187 020F 10 01 BPL NEX ALL DONE? 188 0211 60 RTS -YES 189 ; 190 0212 20 1E 03 NEX JSR RESET READY 191 0215 A4 B0 LDYZ .PIECE GET PIECE 192 0217 A2 08 LDXIM 08 193 0219 86 B6 STXZ .MOVEN COMMON START 194 021B C0 08 CPYIM 08 WHAT IS IT? 195 021D 10 41 BPL PAWN PAWN 196 021F C0 06 CPYIM 06 197 0221 10 2E BPL KNIGHT KNIGHT 198 0223 C0 04 CPYIM 04 199 0225 10 1F BPL BISHOP BISHOP 200 0227 C0 01 CPYIM 01 201 0229 F0 09 BEQ QUEEN QUEEN 202 022B 10 0E BPL ROOK ROOK 203 ; 204 022D 20 8E 02 KING JSR SNGMV MUST BE KING! 205 0230 D0 FB BNE KING MOVES 206 0232 F0 D9 BEQ NEWP 8 TO 1 207 0234 20 9C 02 QUEEN JSR LINE 208 0237 D0 FB BNE QUEEN MOVES 209 0239 F0 D2 BEQ NEWP 8 TO 1 210 ; 211 023B A2 04 ROOK LDXIM 04 212 023D 86 B6 STXZ .MOVEN MOVES 213 023F 20 9C 02 AGNR JSR LINE 4 TO 1 214 0242 D0 FB BNE AGNR 215 0244 F0 C7 BEQ NEWP 216 ; 217 0246 20 9C 02 BISHOP JSR LINE 218 0249 A5 B6 LDAZ .MOVEN MOVES 219 024B C9 04 CMPIM 04 8 TO 5 220 024D D0 F7 BNE BISHOP 221 024F F0 BC BEQ NEWP 222 ; 223 0251 A2 10 KNIGHT LDXIM 10 224 0253 86 B6 STXZ .MOVEN MOVES 225 0255 20 8E 02 AGNN JSR SNGMV 16 TO 9 226 0258 A5 B6 LDAZ .MOVEN 227 025A C9 08 CMPIM 08 228 025C D0 F7 BNE AGNN 229 025E F0 AD BEQ NEWP 230 ; 231 0260 A2 06 PAWN LDXIM 06 232 0262 86 B6 STXZ .MOVEN 233 0264 20 CA 02 P1 JSR CMOVE RIGHT CAP? 234 0267 50 05 BVC P2 235 0269 30 03 BMI P2 236 026B 20 00 01 JSR JANUS YES 237 026E 20 1E 03 P2 JSR RESET 238 0271 C6 B6 DECZ .MOVEN LEFT CAP? 239 0273 A5 B6 LDAZ .MOVEN 240 0275 C9 05 CMPIM 05 241 0277 F0 EB BEQ P1 242 0279 20 CA 02 P3 JSR CMOVE AHEAD 243 027C 70 8F BVS NEWP ILLEGAL 244 027E 30 8D BMI NEWP 245 0280 20 00 01 JSR JANUS 246 0283 A5 B1 LDAZ .SQUARE GETS TO 247 0285 29 F0 ANDIM F0 3RD RANK? 248 0287 C9 20 CMPIM 20 249 0289 F0 EE BEQ P3 DO DOUBLE 250 028B 4C 0D 02 JMP NEWP 251 ; 252 ; CALCULATE SINGLE STEP MOVES 253 ; FOR K, N 254 ; 255 028E 20 CA 02 SNGMV JSR CMOVE CALC MOVE 256 0291 30 03 BMI ILL1 -IF LEGAL 257 0293 20 00 01 JSR JANUS -EVALUATE 258 0296 20 1E 03 ILL1 JSR RESET 259 0299 C6 B6 DECZ .MOVEN 260 029B 60 RTS 261 ; 262 ; CALCULATE ALL MOVES DOWN A 263 ; STRAIGHT LINE FOR Q,B,R 264 ; 265 029C 20 CA 02 LINE JSR CMOVE CALC MOVE 266 029F 90 02 BCC OVL NO CHK 267 02A1 50 F9 BVC LINE CH,NOCAP 268 02A3 30 07 OVL BMI ILL RETURN 269 02A5 08 PHP 270 02A6 20 00 01 JSR JANUS EVALUATE POSN 271 02A9 28 PLP 272 02AA 50 F0 BVC LINE NOT A CAP 273 02AC 20 1E 03 ILL JSR RESET LINE STOPPED 274 02AF C6 B6 DECZ .MOVEN NEXT DIR 275 02B1 60 RTS 276 ; 277 ; EXCHANGE SIDES FOR REPLY 278 ; ANALYSIS 279 ; 280 02B2 A2 0F REVERSE LDXIM 0F 281 02B4 38 ETC SEC 282 02B5 B4 60 LDYZX .BK SUBTRACT 283 02B7 A9 77 LDAIM 77 POSITION 284 02B9 F5 50 SBCZX .BOARD FROM 77 285 02BB 95 60 STAZX .BK 286 02BD 94 50 STYZX .BOARD AND 287 02BF 38 SEC 288 02C0 A9 77 LDAIM 77 EXCHANGE 289 02C2 F5 50 SBCZX .BOARD PIECES 290 02C4 95 50 STAZX .BOARD 291 02C6 CA DEX 292 02C7 10 EB BPL ETC 293 02C9 60 RTS 294 ; 295 ; 296 ; 297 ; 298 ; 299 ; 300 ; 301 ; CMOVE CALCULATES THE TO SQUARE 302 ; USING .SQUARE AND THE MOVE 303 ; TABLE. FLAGS SET AS FOLLOWS: 304 ; N - ILLEGAL MOVE 305 ; V - CAPTURE (LEGAL UNLESS IN CH) 306 ; C - ILLEGAL BECAUSE OF CHECK 307 ; [MY THANKS TO JIM BUTTERFIELD 308 ; WHO WROTE THIS MORE EFFICIENT 309 ; VERSION OF CMOVE] 310 ; 311 02CA A5 B1 CMOVE LDAZ .SQUARE GET SQUARE 312 02CC A6 B6 LDXZ .MOVEN MOVE POINTER 313 02CE 18 CLC 314 02CF 75 8F ADCZX .MOVEX MOVE LIST 315 02D1 85 B1 STAZ .SQUARE NEW POS'N 316 02D3 29 88 ANDIM 88 317 02D5 D0 42 BNE ILLEGAL OFF BOARD 318 02D7 A5 B1 LDAZ .SQUARE 319 ; 320 02D9 A2 20 LDXIM 20 321 02DB CA LOOP DEX IS TO 322 02DC 30 0E BMI NO SQUARE 323 02DE D5 50 CMPZX .BOARD OCCUPIED? 324 02E0 D0 F9 BNE LOOP 325 ; 326 02E2 E0 10 CPXIM 10 BY SELF? 327 02E4 30 33 BMI ILLEGAL 328 ; 329 02E6 A9 7F LDAIM 7F MUST BE CAP! 330 02E8 69 01 ADCIM 01 SET V FLAG 331 02EA 70 01 BVS SPX (JMP) 332 ; 333 02EC B8 NO CLV NO CAPTURE 334 ; 335 02ED A5 B5 SPX LDAZ .STATE SHOULD WE 336 02EF 30 24 BMI RETL DO THE 337 02F1 C9 08 CMPIM 08 CHECK CHECK? 338 02F3 10 20 BPL RETL 339 ; 340 ; CHKCHK REVERSES SIDES 341 ; AND LOOKS FOR A KING 342 ; CAPTURE TO INDICATE 343 ; ILLEGAL MOVE BECAUSE OF 344 ; CHECK. SINCE THIS IS 345 ; TIME CONSUMING, IT IS NOT 346 ; ALWAYS DONE. 347 ; 348 02F5 48 PHA STATE 349 02F6 08 PHP 350 02F7 A9 F9 LDAIM F9 351 02F9 85 B5 STAZ .STATE GENERATE 352 02FB 85 B4 STAZ .INCHEK ALL REPLY 353 02FD 20 4B 03 JSR MOVE MOVES TO 354 0300 20 B2 02 JSR REVERSE SEE IF KING 355 0303 20 09 02 JSR GNM IS IN 356 0306 20 2E 03 JSR RUM CHECK 357 0309 28 PLP 358 030A 68 PLA 359 030B 85 B5 STAZ .STATE 360 030D A5 B4 LDAZ .INCHEK 361 030F 30 04 BMI RETL NO - SAFE 362 0311 38 SEC YES - IN CHK 363 0312 A9 FF LDAIM FF 364 0314 60 RTS 365 ; 366 0315 18 RETL CLC LEGAL 367 0316 A9 00 LDAIM 00 RETURN 368 0318 60 RTS 369 ; 370 0319 A9 FF ILLEGAL LDAIM FF 371 031B 18 CLC ILLEGAL 372 031C B8 CLV RETURN 373 031D 60 RTS 374 ; 375 ; REPLACE .PIECE ON CORRECT .SQUARE 376 ; 377 031E A6 B0 RESET LDXZ .PIECE GET LOCAT. 378 0320 B5 50 LDAZX .BOARD FOR PIECE 379 0322 85 B1 STAZ .SQUARE FROM BOARD 380 0324 60 RTS 381 ; 382 ; 383 ; 384 0325 20 4B 03 GENRM JSR MOVE MAKE MOVE 385 0328 20 B2 02 GENR2 JSR REVERSE REVERSE BOARD 386 032B 20 09 02 JSR GNM GENERATE MOVES 387 032E 20 B2 02 RUM JSR REVERSE REVERSE BACK 388 ; 389 ; ROUTINE TO UNMAKE A MOVE MADE BY 390 ; MOVE 391 ; 392 0331 BA UMOVE TSX UNMAKE MOVE 393 0332 86 B3 STXZ .SP1 394 0334 A6 B2 LDXZ .SP2 EXCHANGE 395 0336 9A TXS STACKS 396 0337 68 PLA MOVEN 397 0338 85 B6 STAZ .MOVEN 398 033A 68 PLA CAPTURED 399 033B 85 B0 STAZ .PIECE PIECE 400 033D AA TAX 401 033E 68 PLA FROM SQUARE 402 033F 95 50 STAZX .BOARD 403 0341 68 PLA PIECE 404 0342 AA TAX 405 0343 68 PLA TO SQUARE 406 0344 85 B1 STAZ .SQUARE 407 0346 95 50 STAZX .BOARD 408 0348 4C 70 03 JMP STRV 409 ; 410 ; THIS ROUTINE MOVES .PIECE 411 ; TO .SQUARE, PARAMETERS 412 ; ARE SAVED IN A STACK TO UNMAKE 413 ; THE MOVE LATER 414 ; 415 034B BA MOVE TSX 416 034C 86 B3 STXZ .SP1 SWITCH 417 034E A6 B2 LDXZ .SP2 STACKS 418 0350 9A TXS 419 0351 A5 B1 LDAZ .SQUARE 420 0353 48 PHA TO SQUARE 421 0354 A8 TAY 422 0355 A2 1F LDXIM 1F 423 0357 D5 50 CHECK CMPZX .BOARD CHECK FOR 424 0359 F0 03 BEQ TAKE CAPTURE 425 035B CA DEX 426 035C 10 F9 BPL CHECK 427 035E A9 CC TAKE LDAIM CC 428 0360 95 50 STAZX .BOARD 429 0362 8A TXA CAPTURED 430 0363 48 PHA PIECE 431 0364 A6 B0 LDXZ .PIECE 432 0366 B5 50 LDAZX .BOARD 433 0368 94 50 STYZX .BOARD FROM 434 036A 48 PHA SQUARE 435 036B 8A TXA 436 036C 48 PHA PIECE 437 036D A5 B6 LDAZ .MOVEN 438 036F 48 PHA MOVEN 439 0370 BA STRV TSX 440 0371 86 B2 STXZ .SP2 SWITCH 441 0373 A6 B3 LDXZ .SP1 STACKS 442 0375 9A TXS BACK 443 0376 60 RTS 444 ; 445 ; CONTINUATION OF SUB STRATGY 446 ; -CHECKS FOR CHECK OR CHECKMATE 447 ; AND ASSIGNS VALUE TO MOVE 448 ; 449 0377 A6 E4 CKMATE LDXZ .BMAXC CAN BLK CAP 450 0379 E4 A0 CPXZ .POINTS MY KING? 451 037B D0 04 BNE NOCHEK 452 037D A9 00 LDAIM 00 GULP! 453 037F F0 0A BEQ RETV DUMB MOVE! 454 ; 455 0381 A6 E3 NOCHEK LDXZ .BMOB IS BLACK 456 0383 D0 06 BNE RETV UNABLE TO 457 0385 A6 EE LDXZ .WMAXP MOVE AND 458 0387 D0 02 BNE RETV KING IN CH? 459 0389 A9 FF LDAIM FF YES! MATE 460 ; 461 038B A2 04 RETV LDXIM 04 RESTORE 462 038D 86 B5 STXZ .STATE STATE=4 463 ; 464 ; THE VALUE OF THE MOVE (IN ACC) 465 ; IS COMPARED TO THE BEST MOVE AND 466 ; REPLACES IT IF IT IS BETTER 467 ; 468 038F C5 FA PUSH CMPZ .BESTV IS THIS BEST 469 0391 90 0C BCC RETP MOVE SO FAR? 470 0393 F0 0A BEQ RETP 471 0395 85 FA STAZ .BESTV YES! 472 0397 A5 B0 LDAZ .PIECE SAVE IT 473 0399 85 FB STAZ .BESTP 474 039B A5 B1 LDAZ .SQUARE 475 039D 85 F9 STAZ .BESTM FLASH DISPLAY 476 039F 4C 1F 1F RETP JMP *OUT AND RTS 477 ; 478 ; MAIN PROGRAM TO PLAY CHESS 479 ; PLAY FROM OPENING OR THINK 480 ; 481 03A2 A6 DC GO LDXZ .OMOVE OPENING? 482 03A4 10 17 BPL NOOPEN -NO 483 03A6 A5 F9 LDAZ .DIS3 -YES WAS 484 03A8 D5 DC CMPZX .OPNING OPPONENT'S 485 03AA D0 0F BNE END MOVE OK? 486 03AC CA DEX 487 03AD B5 DC LDAZX .OPNING GET NEXT 488 03AF 85 FB STAZ .DIS1 CANNED 489 03B1 CA DEX OPENING MOVE 490 03B2 B5 DC LDAZX .OPNING 491 03B4 85 F9 STAZ .DIS3 DISPLAY IT 492 03B6 CA DEX 493 03B7 86 DC STXZ .OMOVE MOVE IT 494 03B9 D0 1A BNE MV2 (JMP) 495 ; 496 03BB 85 DC END STAZ .OMOVE FLAG OPENING 497 03BD A2 0C NOOPEN LDXIM 0C FINISHED 498 03BF 86 B5 STXZ .STATE STATE=C 499 03C1 86 FA STXZ .BESTV CLEAR BESTV 500 03C3 A2 14 LDXIM 14 GENERATE P 501 03C5 20 02 02 JSR GNMX MOVES 502 ; 503 03C8 A2 04 LDXIM 04 STATE=4 504 03CA 86 B5 STXZ .STATE GENERATE AND 505 03CC 20 00 02 JSR GNMZ TEST AVAILABLE 506 ; MOVES 507 ; 508 03CF A6 FA LDXZ .BESTV GET BEST MOVE 509 03D1 E0 0F CPXIM 0F IF NONE 510 03D3 90 12 BCC MATE OH OH! 511 ; 512 03D5 A6 FB MV2 LDXZ .BESTP MOVE 513 03D7 B5 50 LDAZX .BOARD THE 514 03D9 85 FA STAZ .BESTV BEST 515 03DB 86 B0 STXZ .PIECE MOVE 516 03DD A5 F9 LDAZ .BESTM 517 03DF 85 B1 STAZ .SQUARE AND DISPLAY 518 03E1 20 4B 03 JSR MOVE IT 519 03E4 4C 00 00 JMP CHESS 520 ; 521 03E7 A9 FF MATE LDAIM FF RESIGN 522 03E9 60 RTS OR STALEMATE 523 ; 524 ; SUBROUTINE TO ENTER THE 525 ; PLAYER'S MOVE 526 ; 527 03EA A2 04 DISMV LDXIM 04 ROTATE 528 03EC 06 F9 ROL ASLZ .DIS3 KEY 529 03EE 26 FA ROLZ .DIS2 INTO 530 03F0 CA DEX DISPLAY 531 03F1 D0 F9 BNE ROL 532 03F3 05 F9 ORAZ .DIS3 533 03F5 85 F9 STAZ .DIS3 534 03F7 85 B1 STAZ .SQUARE 535 03F9 60 RTS 536 ; 537 ; THE FOLLOWING SUBROUTINE ASSIGNS 538 ; A VALUE TO THE MOVE UNDER 539 ; CONSIDERATION AND RETURNS IT IN 540 ; THE ACCUMULATOR 541 ; 542 +++ 543 1780 18 STRATGY CLC 544 1781 A9 80 LDAIM 80 545 1783 65 EB ADCZ .WMOB PARAMETERS 546 1785 65 EC ADCZ .WMAXC WITH WEIGHT 547 1787 65 ED ADCZ .WCC OF 0.25 548 1789 65 E1 ADCZ .WCAP1 549 178B 65 DF ADCZ .WCAP2 550 178D 38 SEC 551 178E E5 F0 SBCZ .PMAXC 552 1790 E5 F1 SBCZ .PCC 553 1792 E5 E2 SBCZ .BCAP0 554 1794 E5 E0 SBCZ .BCAP1 555 1796 E5 DE SBCZ .BCAP2 556 1798 E5 EF SBCZ .PMOB 557 179A E5 E3 SBCZ .BMOB 558 179C B0 02 BCS POS UNDERFLOW 559 179E A9 00 LDAIM 00 PREVENTION 560 17A0 4A POS LSRA 561 17A1 18 CLC ************** 562 17A2 69 40 ADCIM 40 563 17A4 65 EC ADCZ .WMAXC PARAMETERS 564 17A6 65 ED ADCZ .WCC WITH WEIGHT 565 17A8 38 SEC OF 0.5 566 17A9 E5 E4 SBCZ .BMAXC 567 17AB 4A LSRA ************ 568 17AC 18 CLC 569 17AD 69 90 ADCIM 90 570 17AF 65 DD ADCZ WCAP0 PARAMETERS 571 17B1 65 DD ADCZ WCAP0 WITH WEIGHT 572 17B3 65 DD ADCZ WCAP0 OF 1.0 573 17B5 65 DD ADCZ WCAP0 574 17B7 65 E1 ADCZ WCAP1 575 17B9 38 SEC [UNDER OR OVER- 576 17BA E5 E4 SBCZ .BMAXC FLOW MAY OCCUR 577 17BC E5 E4 SBCZ .BMAXC FROM THIS 578 17BE E5 E5 SBCZ .BCC SECTION] 579 17C0 E5 E5 SBCZ .BCC 580 17C2 E5 E0 SBCZ .BCAP1 581 17C4 A6 B1 LDXZ .SQUARE ************ 582 17C6 E0 33 CPXIM 33 583 17C8 F0 16 BEQ POSN POSITION 584 17CA E0 34 CPXIM 34 BONUS FOR 585 17CC F0 12 BEQ POSN MOVE TO 586 17CE E0 22 CPXIM 22 CENTRE 587 17D0 F0 0E BEQ POSN OR 588 17D2 E0 25 CPXIM 25 OUT OF 589 17D4 F0 0A BEQ POSN BACK RANK 590 17D6 A6 B0 LDXZ .PIECE 591 17D8 F0 09 BEQ NOPOSN 592 17DA B4 50 LDYZX .BOARD 593 17DC C0 10 CPYIM 10 594 17DE 10 03 BPL NOPOSN 595 17E0 18 POSN CLC 596 17E1 69 02 ADCIM 02 597 17E3 4C 77 03 NOPOSN JMP CKMATE CONTINUE 598 ; 599 ; 600 ; [CROSS REFERENCE LISTING OMITTED] BLOCK DATA .SETW 0070 03 04 00 07 02 05 01 06 10 17 11 16 12 15 14 13 73 74 70 77 72 75 71 76 60 67 51 66 52 65 64 63 .MOVEX 0090 F0 FF 01 10 11 0F EF F1 DF E1 EE F2 12 0E 1F 21 .POINTS 00A0 0B 0A 06 06 04 04 04 04 02 02 02 02 02 02 02 02 .OPNING 00C0 99 25 0B 25 01 00 33 25 07 36 34 0D 34 34 0E 52 25 0D 45 35 04 55 22 06 43 33 0F CC NOTE THAT 00B7 TO 00BF, 00F4 TO 00F8, AND 00FC TO 00FF ARE AVAILABLE FOR USER EXPANSION AND I/O ROUTINES.