1 0000 NAM OTHELLO 2 ***************************** 3 * OTHELLO GAME 4 * BY UNKNOWN SOURCE 5 * RECOVERED FROM OLD FLOPPIES 6 * 7 * ADOPTED TO RUN ON THE MC3 8 * BY DANIEL TUFVESSON 2014 9 ***************************** 10 0000 11 C003 OUTEEE EQU $C003 12 C006 INEEE EQU $C006 13 C000 CONTRL EQU $C000 14 0000 15 0020 ORG $0020 16 0020 17 0020 0001 TROW RMB 1 18 0021 0001 TCOL RMB 1 19 0022 0002 CROW RMB 2 20 0024 0001 CPUTRY RMB 1 21 0025 0001 CPUSCR RMB 1 22 0026 0001 FORFIT RMB 1 23 0027 0001 ROW RMB 1 24 0028 0001 COL RMB 1 25 0029 0001 PIECE RMB 1 26 002A ORG * 27 002A 4F XXOO FCC 'O' 28 002B 00 WAIT FCB 0 NO WAIT 29 002C 02 STRTGY FCB 2 BEST STRATEGY 30 002D 01 WHO1ST FCB 1 HUMAN FIRST 31 002E 0001 COUNT RMB 1 32 002F 0002 TEMPX1 RMB 2 33 0031 0001 TEMP1 RMB 1 34 0032 0001 RDIR RMB 1 35 0033 0001 CDIR RMB 1 36 0034 37 0034 0001 CPU RMB 1 38 0035 0001 ME RMB 1 39 0036 0001 TOTAL RMB 1 40 0037 0001 FLAG RMB 1 41 0038 0001 FLAG1 RMB 1 42 0039 0001 SCORE1 RMB 1 43 003A 0001 SCORE2 RMB 1 44 003B 0001 SCORE3 RMB 1 45 003C 0040 MATRIX RMB 8*8 46 007C 47 0100 ORG $100 48 0100 49 0100 CE 0517 START LDX #GREET LDS #$C07F GREETINGS 50 0103 8D 6C BSR OUTIN 51 0105 81 59 CMPA #'Y 52 0107 26 02 BNE PROMT1 53 0109 20 03 BRA PROMT2 54 010B 55 * SHOULD CPU WAIT? 56 010B 57 010B CE 0703 PROMT1 LDX #IWAIT 58 010E 8D 61 PROMT2 BSR OUTIN WAIT? 59 0110 5F CLRB 60 0111 81 59 CMPA #'Y 61 0113 26 04 BNE STORWT 62 0115 BD 04F1 JSR PDATA1 63 0118 5C INCB 64 0119 D7 2B STORWT STAB WAIT 65 011B CE 0756 LDX #BEST STRATEGY? 66 011E 8D 51 BSR OUTIN 67 0120 5F CLRB 68 0121 81 4E CMPA #'N 69 0123 27 02 BEQ STORBT 70 0125 C6 02 LDAB #2 71 0127 D7 2C STORBT STAB STRTGY 72 0129 CE 07BA LDX #XORO WANT X OR O ? 73 012C 8D 43 BSR OUTIN 74 012E 81 58 CMPA #'X 75 0130 27 02 BEQ STORXO 76 0132 86 4F LDAA #'O 77 0134 97 2A STORXO STAA XXOO 78 0136 CE 07D7 LDX #FIRST MOVE? 79 0139 8D 36 BSR OUTIN 80 013B 5F CLRB 81 013C 81 4E CMPA #'N 82 013E 27 01 BEQ STOR1 83 0140 5C INCB 84 0141 D7 2D STOR1 STAB WHO1ST 85 0143 BD 0507 JSR PCRLF 86 0146 87 * INITIAL BOARD 88 0146 89 0146 C6 2E INITAL LDAB #'. 90 0148 CE 003C LDX #MATRIX 91 014B E7 00 ZAP STAB 0,X STAB 0,X+ 92 014D 08 INX 93 014E 8C 007D CPX #MATRIX+65 94 0151 26 F8 BNE ZAP 95 0153 CE 4F58 LDX #$4F58 O X 96 0156 DF 57 STX MATRIX+27 97 0158 CE 584F LDX #$584F X O 98 015B DF 5F STX MATRIX+35 99 015D 100 * INITIAL PIECE SCORE 101 015D 102 015D CE 0204 LDX #$0204 103 0160 DF 34 STX CPU CPU=ME=2 104 0162 DF 35 STX ME TOTAL=4 105 0164 97 26 STAA FORFIT =0 106 0166 107 * PRINT INITIAL BOARD 108 0166 109 0166 BD 03FC JSR PRINT 110 0169 111 * WHO'S FIRST? 112 0169 113 0169 7D 002D TST WHO1ST 114 016C 27 11 BEQ COMPTR 115 016E 7E 025C JMP HUMAN 116 0171 BD 04F1 OUTIN JSR PDATA1 117 0174 BD C006 INE JSR INEEE 118 0177 81 1B CMPA #$1B ESCAPE 119 0179 26 03 BNE RTS1 120 017B 7E 0367 JMP REPLAY 121 017E 39 RTS1 RTS 122 017F 123 * SHOULD CPU WAIT 124 017F 125 017F 7D 002B COMPTR TST WAIT 126 0182 27 02 BEQ CPUGO 127 0184 8D EE BSR INE 128 0186 129 * SETUP CPU'S PIECE 130 0186 131 0186 96 2A CPUGO LDAA XXOO 132 0188 88 17 EORA #$17 FLIP 133 018A 97 29 STAA PIECE 134 018C 135 * INITIAL VARIABLES 136 018C 137 018C 86 40 LDAA #64 138 018E 97 24 STAA CPUTRY 139 0190 7F 0027 CLR ROW 140 0193 7F 0028 CLR COL 141 0196 7F 0025 CLR CPUSCR 142 0199 7F 003B CLR SCORE3 143 019C 144 * CHECK FOR EMPTY SQUARE 145 019C 146 019C CE 0027 TESTPT LDX #ROW 147 019F BD 0387 JSR GETMTX 148 01A2 81 2E CMPA #'. 149 01A4 26 38 BNE NOGOOD 150 01A6 151 * TEST FOR PROPER NEIGHBOR 152 01A6 153 01A6 BD 039B JSR PROPER 154 01A9 4D TSTA 155 01AA 27 32 BEQ NOGOOD 156 01AC 157 * CHECK FOR FLANKED ROW 158 01AC 159 01AC 7F 0037 CLR FLAG 160 01AF BD 0428 JSR SCORE 161 01B2 D6 39 LDAB SCORE1 162 01B4 27 28 BEQ NOGOOD 163 01B6 164 * BEST MOVE SO FAR? 165 01B6 166 01B6 96 27 LDAA ROW 167 01B8 27 04 BEQ CKROW 168 01BA 81 07 CMPA #7 169 01BC 26 02 BNE CKROW1 170 01BE DB 2C CKROW ADDB STRTGY 171 01C0 96 28 CKROW1 LDAA COL 172 01C2 27 04 BEQ ADSTRT 173 01C4 81 07 CMPA #7 174 01C6 26 02 BNE CKSCOR 175 01C8 DB 2C ADSTRT ADDB STRTGY 176 01CA D1 25 CKSCOR CMPB CPUSCR 177 01CC 22 06 BHI STCPUS 178 01CE 26 0E BNE NOGOOD 179 01D0 C5 01 BITB #1 RANDOM CHOICE 180 01D2 27 0A BEQ NOGOOD 181 01D4 182 * FOUND BETTER MOVE FOR CPU 183 01D4 184 01D4 96 39 STCPUS LDAA SCORE1 185 01D6 97 3B STAA SCORE3 186 01D8 D7 25 STAB CPUSCR 187 01DA DE 27 LDX ROW 188 01DC DF 22 STX CROW 189 01DE 190 * ALL SQ'S TESTED? 191 01DE 192 01DE 7A 0024 NOGOOD DEC CPUTRY 193 01E1 27 14 BEQ TSTSCR 194 01E3 195 * TRY AGAIN 196 01E3 197 01E3 5F CLRB 198 01E4 7C 0028 INC COL 199 01E7 96 28 LDAA COL 200 01E9 81 07 CMPA #7 201 01EB 23 03 BLS DOROW 202 01ED D7 28 STAB COL 203 01EF 5C INCB 204 01F0 96 27 DOROW LDAA ROW 205 01F2 1B ABA 206 01F3 97 27 STAA ROW 207 01F5 20 A5 BRA TESTPT 208 01F7 209 * ANY CAPTURED? 210 01F7 211 01F7 7D 003B TSTSCR TST SCORE3 212 01FA 27 53 BEQ CPUFOR 213 01FC 214 * UPDATE SCORES 215 01FC 216 01FC 7F 0026 GOODMV CLR FORFIT 217 01FF 96 34 LDAA CPU 218 0201 9B 3B ADDA SCORE3 219 0203 4C INCA 220 0204 97 34 STAA CPU 221 0206 96 35 LDAA ME 222 0208 90 3B SUBA SCORE3 223 020A 97 35 STAA ME 224 020C 7C 0036 INC TOTAL 225 020F 226 * PRINT CPU'S MOVE 227 020F 228 020F CE 094F LDX #IMOVE 229 0212 BD 04F1 JSR PDATA1 230 0215 96 22 LDAA CROW 231 0217 8B 31 ADDA #$31 MAKE ASCII 232 0219 BD C003 JSR OUTEEE 233 021C 96 23 LDAA CROW+1 234 021E 8B 41 ADDA #$41 MAKE ASCII LETTER 235 0220 BD C003 JSR OUTEEE OUTPUT LETTER 236 0223 237 * PRINT # CAPTURED 238 0223 239 0223 CE 095C LDX #THAT1 240 0226 BD 04F1 JSR PDATA1 THAT GIVES ME 241 0229 CE 003B LDX #SCORE3 242 022C BD 04DA JSR PRTDEC 243 022F CE 096C LDX #YOUR 244 0232 BD 04F1 JSR PDATA1 YOUR PIECES 245 0235 246 * FLIP CAPTURED PIECES 247 0235 248 0235 DE 22 LDX CROW 249 0237 DF 27 STX ROW 250 0239 7C 0037 INC FLAG 251 023C BD 0428 JSR SCORE 252 023F BD 03FC JSR PRINT 253 0242 254 * TEST FOR END OF GAME 255 0242 256 0242 96 35 LDAA ME 257 0244 27 06 BEQ THEND 258 0246 96 36 TSTTOT LDAA TOTAL 259 0248 81 40 CMPA #64 260 024A 26 10 BNE HUMAN 261 024C 7E 0300 THEND JMP THEEND 262 024F 263 * CPU FORFITS MOVE 264 024F 265 024F CE 097E CPUFOR LDX #CPU0 266 0252 BD 04F1 JSR PDATA1 267 0255 96 26 LDAA FORFIT 268 0257 26 F3 BNE THEND 269 0259 7C 0026 INC FORFIT 270 025C 271 * GET HUMAN'S ROW,COL I/P 272 025C 273 025C 96 2A HUMAN LDAA XXOO 274 025E 97 29 STAA PIECE 275 0260 CE 07A3 LDX #MOVE 276 0263 BD 0171 JSR OUTIN 277 0266 81 58 CMPA #'X 278 0268 26 05 BNE CHKCOL 279 026A BD 03FC JSR PRINT 280 026D 20 ED BRA HUMAN 281 026F 81 38 CHKCOL CMPA #'8 282 0271 22 77 BHI HUMFOR 283 0273 80 31 SUBA #$31 284 0275 25 73 BCS HUMFOR 285 0277 97 27 STAA ROW 286 0279 BD 0174 JSR INE 287 027C 81 48 CMPA #'H 288 027E 22 6A BHI HUMFOR 289 0280 80 41 SUBA #$41 =A 290 0282 25 66 BCS HUMFOR 291 0284 97 28 STAA COL 292 0286 293 * OCCUPIED SQ? 294 0286 295 0286 CE 0027 LDX #ROW 296 0289 BD 0387 JSR GETMTX 297 028C CE 0777 LDX #SORRY 298 028F 81 2E CMPA #'. 299 0291 26 17 BNE PRNT2 300 0293 301 * PROPER NEIGHBOR? 302 0293 303 0293 BD 039B EMPTY JSR PROPER 304 0296 CE 07F1 LDX #NONEXT 305 0299 4D TSTA 306 029A 27 0E BEQ PRNT2 307 029C 308 * FLANK? 309 029C 310 029C 7F 0037 CKFLNK CLR FLAG 311 029F BD 0428 JSR SCORE 312 02A2 7D 0039 TST SCORE1 313 02A5 26 08 BNE LEGAL 314 02A7 CE 082A LDX #NOFLNK 315 02AA BD 04F1 PRNT2 JSR PDATA1 316 02AD 20 AD HUM1 BRA HUMAN 317 02AF 318 * ALL LEGAL 319 02AF 320 02AF 7F 0026 LEGAL CLR FORFIT 321 02B2 CE 085D LDX #THAT 322 02B5 BD 04F1 JSR PDATA1 323 02B8 CE 0039 LDX #SCORE1 324 02BB BD 04DA JSR PRTDEC 325 02BE CE 086F LDX #OFMY 326 02C1 BD 04F1 JSR PDATA1 327 02C4 328 * UPDATE SCORES 329 02C4 330 02C4 96 35 LDAA ME 331 02C6 9B 39 ADDA SCORE1 332 02C8 4C INCA 333 02C9 97 35 STAA ME 334 02CB 96 34 LDAA CPU 335 02CD 90 39 SUBA SCORE1 336 02CF 97 34 STAA CPU 337 02D1 7C 0036 INC TOTAL 338 02D4 339 * FLIP BOARD PIECES 340 02D4 341 02D4 7C 0037 INC FLAG 342 02D7 BD 0428 JSR SCORE 343 02DA BD 03FC JSR PRINT 344 02DD 345 * TEST FOR END OF GAME 346 02DD 347 02DD 96 34 LDAA CPU 348 02DF 27 1F BEQ THEEND 349 02E1 96 36 LDAA TOTAL 350 02E3 81 40 CMPA #64 351 02E5 27 19 BEQ THEEND 352 02E7 7E 017F GOCPU JMP COMPTR 353 02EA 354 * HUMAN FORFITS MOVE 355 02EA 356 02EA CE 0999 HUMFOR LDX #HUM0 357 02ED BD 0171 JSR OUTIN 358 02F0 81 59 CMPA #'Y 359 02F2 26 B9 BNE HUM1 360 02F4 BD 0507 BYEBYE JSR PCRLF 361 02F7 96 26 LDAA FORFIT 362 02F9 26 05 BNE THEEND 363 02FB 7C 0026 INC FORFIT 364 02FE 20 E7 BRA GOCPU 365 0300 CE 087E THEEND LDX #YOUHAV 366 0303 BD 04F1 JSR PDATA1 367 0306 CE 0035 LDX #ME 368 0309 BD 04DA JSR PRTDEC 369 030C CE 0889 LDX #ANDI 370 030F BD 04F1 JSR PDATA1 371 0312 CE 0034 LDX #CPU 372 0315 BD 04DA JSR PRTDEC 373 0318 CE 089D LDX #PTEXT 374 031B BD 04F1 JSR PDATA1 375 031E 376 * DETERMINE WINNER 377 031E 378 031E CE 08BF LDX #ATIE TIE 379 0321 96 35 LDAA ME 380 0323 91 34 CMPA CPU 381 0325 27 3D BEQ PRNT1 TIE 382 0327 22 0C BHI HUMWON 383 0329 CE 08A7 LDX #IWON 384 032C BD 04F1 JSR PDATA1 385 032F D6 34 LDAB CPU 386 0331 D0 35 SUBB ME 387 0333 20 0A BRA HOWBAD 388 0335 CE 08C7 HUMWON LDX #MEWON 389 0338 BD 04F1 JSR PDATA1 390 033B D6 35 LDAB ME 391 033D D0 34 SUBB CPU 392 033F 393 * HOW BAD WAS OTHER GUY TROUNCED? 394 033F 395 033F CE 08D2 HOWBAD LDX #TTYPE 396 0342 BD 04F1 JSR PDATA1 397 0345 CE 08DE LDX #PERFCT 398 0348 D1 36 CMPB TOTAL 399 034A 27 18 BEQ PRNT1 PERFECT GAME 400 034C CE 090B LDX #SQEAK 401 034F C1 05 CMPB #5 402 0351 23 11 BLS PRNT1 SQUEAKER 403 0353 CE 0900 LDX #HOT 404 0356 C1 0A CMPB #10 405 0358 23 0A BLS PRNT1 HOT GAME 406 035A CE 08F8 LDX #FIGHT 407 035D C1 0F CMPB #15 408 035F 23 03 BLS PRNT1 FIGHT! 409 0361 CE 08ED LDX #WALK WALKAWAY! 410 0364 BD 04F1 PRNT1 JSR PDATA1 411 0367 CE 0916 REPLAY LDX #ANOTHR PLAY AGAIN? 412 036A BD 0171 JSR OUTIN 413 036D 81 4E CMPA #'N 414 036F 27 06 BEQ FIN 415 0371 BD 0507 JSR PCRLF 416 0374 7E 0146 JMP INITAL 417 0377 CE 0939 FIN LDX #THANX 418 037A BD 04F1 JSR PDATA1 419 037D 7E C000 JMP CONTRL 420 0380 421 ********************* 422 * STORMX SUBROUTINE * 423 ********************* 424 0380 425 0380 8D 05 STORMX BSR GETMTX POINT TO PLACE 426 0382 96 29 LDAA PIECE 427 0384 A7 00 STAA 0,X 428 0386 39 RTS 429 0387 430 ********************* 431 * GETMTX SUBROUTINE * 432 ********************* 433 0387 434 0387 A6 00 GETMTX LDAA 0,X PASSED ROW # (0-7) 435 0389 E6 01 LDAB 1,X PASSED COL # (0-7) 436 038B 48 ASLA MULTIPLY 437 038C 48 ASLA BY 438 038D 48 ASLA EIGHT 439 038E CE 003C LDX #MATRIX START ADDR 440 0391 1B ABA 441 0392 27 04 BEQ LOADA 442 0394 08 BUILDX INX BUMP 443 0395 4A DECA 444 0396 26 FC BNE BUILDX 445 0398 A6 00 LOADA LDAA 0,X MATRIX ELEMENT REQ'D 446 039A 39 RTS 447 039B 448 ********************* 449 * PROPER SUBROUTINE * 450 ********************* 451 039B 452 039B 96 29 PROPER LDAA PIECE OTHER PLAYER'S PIECE 453 039D 88 17 EORA #$17 FLIP 454 039F 97 31 STAA TEMP1 455 03A1 86 08 LDAA #8 8 NEIGHBORS 456 03A3 97 2E STAA COUNT TO CHECK 457 03A5 CE 03EC LDX #NEIBOR START ADDR 458 03A8 DF 2F STX TEMPX1 OF NEIGHBOR 459 03AA D6 27 GETROW LDAB ROW ROW COORD 460 03AC A6 00 LDAA 0,X ROW'S DIRECTION 461 03AE 27 0D BEQ SETR =0 462 03B0 2B 07 BMI MROW =- 463 03B2 5C AROW INCB 464 03B3 C1 07 CMPB #7 OFF OF BOARD 465 03B5 22 28 BHI NONEIB YES 466 03B7 20 04 BRA SETR NO 467 03B9 5D MROW TSTB OFF OF BOARD 468 03BA 27 23 BEQ NONEIB YES 469 03BC 5A DECB NO 470 03BD D7 20 SETR STAB TROW STORE NEIGHBOR'S ROW # 471 03BF D6 28 GETCOL LDAB COL COL COORD 472 03C1 DE 2F LDX TEMPX1 COL'S 473 03C3 A6 01 LDAA 1,X DIRECTION 474 03C5 27 0D BEQ SETC =0 475 03C7 2B 07 BMI MCOL =- 476 03C9 5C ACOL INCB 477 03CA C1 07 CMPB #7 OFF OF BOARD 478 03CC 22 11 BHI NONEIB YES 479 03CE 20 04 BRA SETC NO 480 03D0 5D MCOL TSTB OFF OF BOARD 481 03D1 27 0C BEQ NONEIB YES 482 03D3 5A DECB NO 483 03D4 D7 21 SETC STAB TCOL STORE NEIGHBOR'S COL # 484 03D6 CE 0020 LDX #TROW GET PIECE 485 03D9 8D AC BSR GETMTX AT NEIGHBOR'S COORDS 486 03DB 91 31 CMPA TEMP1 GET OTHER PLAYER'S PIECE 487 03DD 27 0C BEQ RTS2 IS PROPER 488 03DF 489 * NO NEIGHBOR 490 03DF 491 03DF DE 2F NONEIB LDX TEMPX1 492 03E1 08 INX BUMP NEIGHBOR POINTER 493 03E2 08 INX 494 03E3 DF 2F STX TEMPX1 495 03E5 7A 002E DEC COUNT DEC COUNT 496 03E8 26 C0 BNE GETROW OF ENTRIES TO CHECK 497 03EA 4F CLRA FLAG=NO NEIGHBOR 498 03EB 39 RTS2 RTS 499 03EC 00 01 NEIBOR FCB 0,1 DOWN 500 03EE FF 01 FCB $FF,1 LOWER-LEFT 501 03F0 FF 00 FCB $FF,0 LEFT 502 03F2 FF FF FCB $FF,$FF UPPER-LEFT 503 03F4 00 FF FCB 0,$FF UP 504 03F6 01 FF FCB 1,$FF UPPER-RIGHT 505 03F8 01 00 FCB 1,0 RIGHT 506 03FA 01 01 FCB 1,1 LOWER RIGHT 507 03FC 508 ******************** 509 * PRINT SUBROUTINE * 510 ******************** 511 03FC 512 03FC CE 09C1 PRINT LDX #LETTER 513 03FF BD 04F1 JSR PDATA1 514 0402 CE 003C LDX #MATRIX 515 0405 86 30 LDAA #'0 516 0407 4C BOARD INCA 517 0408 97 2E STAA COUNT 518 040A BD C003 JSR OUTEEE LINE # 519 040D C6 08 LDAB #8 8 CHARS TO PRINT 520 040F 86 20 EIGHT LDAA #$20 521 0411 BD C003 JSR OUTEEE SPACE 522 0414 A6 00 LDAA 0,X OUTPUT 523 0416 BD C003 JSR OUTEEE CHAR 524 0419 08 INX BUMP CHAR PTR 525 041A 5A DECB DEC CHAR COUNT 526 041B 26 F2 BNE EIGHT MORE TO DO 527 041D 8D 06 BSR PCR 528 041F 96 2E LDAA COUNT 529 0421 81 38 CMPA #'8 530 0423 26 E2 BNE BOARD BOARD 531 0425 7E 0507 PCR JMP PCRLF 532 0428 533 ******************** 534 * SCORE SUBROUTINE * 535 ******************** 536 0428 537 0428 7D 0037 SCORE TST FLAG HERE FOR SCORE ONLY 538 042B 27 06 BEQ NOSTOR YES 539 042D CE 0027 LDX #ROW 540 0430 BD 0380 JSR STORMX PUT PIECE ON BOARD 541 0433 7F 0039 NOSTOR CLR SCORE1 ZERO OVERALL CTR 542 0436 86 08 LDAA #8 543 0438 97 2E STAA COUNT 8 NEIGHBORS TO CHECK 544 043A CE 03EC LDX #NEIBOR START ADDR 545 043D DF 2F STX TEMPX1 OF NEIGHBOR 546 043F DE 2F LOOP1 LDX TEMPX1 ADDR OF 'NEW' NEIGHBORS 547 0441 A6 00 LDAA 0,X 548 0443 97 32 STAA RDIR ROW VECT 549 0445 A6 01 LDAA 1,X 550 0447 97 33 STAA CDIR COL VECT 551 0449 7F 0038 CLR FLAG1 ZERO STORAGE FLAG 552 044C 96 27 LOOP1A LDAA ROW PASSED ROW # 553 044E 97 20 STAA TROW 554 0450 96 28 LDAA COL PASSED COL # 555 0452 97 21 STAA TCOL 556 0454 7F 003A CLR SCORE2 ZERO INTERMEDIATE SCORE 557 0457 96 32 LOOP2 LDAA RDIR ROW VECT 558 0459 27 15 BEQ NEWCOL =0 559 045B 2B 0B BMI NROW =- 560 045D 7C 0020 PROW INC TROW TROW=TROW+1 561 0460 96 20 LDAA TROW 562 0462 81 07 CMPA #7 OFF OF BOARD 563 0464 22 5F BHI END1 YES 564 0466 20 08 BRA NEWCOL NO 565 0468 7D 0020 NROW TST TROW OFF OF BOARD 566 046B 27 58 BEQ END1 YES 567 046D 7A 0020 DEC TROW ROW=ROW-1 568 0470 96 33 NEWCOL LDAA CDIR COL VECT 569 0472 27 15 BEQ CHECK =0 570 0474 2B 0B BMI NCOL =- 571 0476 7C 0021 PCOL INC TCOL COL=COL+1 572 0479 96 21 LDAA TCOL 573 047B 81 07 CMPA #7 OFF OF BOARD 574 047D 22 46 BHI END1 YES 575 047F 20 08 BRA CHECK 576 0481 7D 0021 NCOL TST TCOL OFF OF BOARD 577 0484 27 3F BEQ END1 YES 578 0486 7A 0021 DEC TCOL COL=COL-1 579 0489 CE 0020 CHECK LDX #TROW GET PIECE 580 048C BD 0387 JSR GETMTX AT TROW,TCOL 581 048F 16 TAB 582 0490 96 29 LDAA PIECE GET OPPONENTS CODE 583 0492 88 17 EORA #$17 FLIP 584 0494 11 CBA CAPTURED OPPONENT'S PIECE 585 0495 26 10 BNE ISME NO 586 0497 7C 003A INC SCORE2 YES 587 049A 7D 0038 TST FLAG1 STORE IT? 588 049D 27 B8 BEQ LOOP2 NO 589 049F CE 0020 LDX #TROW YES 590 04A2 BD 0380 JSR STORMX 591 04A5 20 B0 BRA LOOP2 592 04A7 D1 29 ISME CMPB PIECE FOUND ONE OF MY PIECES 593 04A9 26 1A BNE END1 NO-FOUND BLANK 594 04AB 7D 0038 TST FLAG1 HERE ON SCORE PASS 595 04AE 26 06 BNE TEST NO 596 04B0 96 3A LDAA SCORE2 UPDATE 597 04B2 9B 39 ADDA SCORE1 # PIECES 598 04B4 97 39 STAA SCORE1 CAPTURED 599 04B6 7D 0037 TEST TST FLAG FOR REAL? 600 04B9 27 0A BEQ END1 NO 601 04BB 7D 0038 TST FLAG1 OPPONENT'S PIECES FLIPPED YET 602 04BE 26 05 BNE END1 YES 603 04C0 7C 0038 INC FLAG1 NO-SET FLAG 604 04C3 20 87 BRA LOOP1A FLIP OPPONENT 605 04C5 96 30 END1 LDAA TEMPX1+1 606 04C7 8B 02 ADDA #2 UPDATE 607 04C9 D6 2F LDAB TEMPX1 NEIGHBOR 608 04CB C9 00 ADCB #0 POINTER 609 04CD 97 30 STAA TEMPX1+1 610 04CF D7 2F STAB TEMPX1 611 04D1 7A 002E DEC COUNT ALL CHECKED? 612 04D4 27 03 BEQ RETURN YES 613 04D6 7E 043F JMP LOOP1 614 04D9 39 RETURN RTS 615 04DA 616 ******************** 617 *PRTDEC SUBROUTINE * 618 ******************** 619 04DA 620 04DA E6 00 PRTDEC LDAB 0,X LOAD PASSED HEX # 621 04DC 4F CLRA ZERO HIGH ORDER DIGIT 622 04DD 4C DECLOP INCA 623 04DE C0 0A SUBB #10 NN=NN-10 624 04E0 24 FB BCC DECLOP 625 04E2 CB 0A ADDB #10 RESTORE B 626 04E4 4A DECA 627 04E5 27 02 BEQ OUTB SUPPRESS LEADING ZERO 628 04E7 8D 01 BSR OUTASC 629 04E9 17 OUTB TBA 630 04EA 8B 30 OUTASC ADDA #'0 631 04EC 7E C003 JMP OUTEEE 632 04EF 633 ********************* 634 * PDATA1 SUBROUTINE * 635 ********************* 636 04EF 637 04EF 8D 23 PDATA2 BSR OUTE 638 04F1 A6 00 PDATA1 LDAA 0,X 639 04F3 08 INX 640 04F4 81 5E CMPA #'^ 641 04F6 26 04 BNE CKCR 642 04F8 86 10 LDAA #$10 643 04FA 8D 11 BSR CLRSCN CLEAR SCREEN 644 04FC 81 2F CKCR CMPA #'/ C.R.? 645 04FE 26 02 BNE CKEND 646 0500 8D 05 BSR PCRLF C.R. L.F. 647 0502 81 3B CKEND CMPA #'; 648 0504 26 E9 BNE PDATA2 649 0506 39 RTS 650 0507 86 0D PCRLF LDAA #$D 651 0509 8D 09 BSR OUTE 652 050B 86 0A LDAA #$A 653 050D 8D 05 CLRSCN BSR OUTE 654 050F 8D 00 NUL4 BSR NUL2 655 0511 8D 00 NUL2 BSR NUL1 656 0513 4F NUL1 CLRA 657 0514 7E C003 OUTE JMP OUTEEE 658 0517 659 0517 2F 5E 5E 5E GREET FCC '/^^^' 660 051B 47 52 45 45 FCC 'GREETINGS FROM OTHELLO/' 051F 54 49 4E 47 0523 53 20 46 52 0527 4F 4D 20 4F 052B 54 48 45 4C 052F 4C 4F 2F 661 0532 44 4F 20 59 INST0 FCC 'DO YOU WANT INSTRUCTIONS?;' 0536 4F 55 20 57 053A 41 4E 54 20 053E 49 4E 53 54 0542 52 55 43 54 0546 49 4F 4E 53 054A 3F 3B 662 054C 2F 2F 4F 54 INST1 FCC '//OTHELLO IS PLAYED ON AN ' 0550 48 45 4C 4C 0554 4F 20 49 53 0558 20 50 4C 41 055C 59 45 44 20 0560 4F 4E 20 41 0564 4E 20 663 0566 38 20 42 59 FCC '8 BY 8 CHECKER BOARD WITH ' 056A 20 38 20 43 056E 48 45 43 4B 0572 45 52 20 42 0576 4F 41 52 44 057A 20 57 49 54 057E 48 20 664 0580 2F 52 4F 57 FCC '/ROWS NUMBERED 1 TO 8 ' 0584 53 20 4E 55 0588 4D 42 45 52 058C 45 44 20 31 0590 20 54 4F 20 0594 38 20 665 0596 41 4E 44 20 FCC 'AND COLUMNS A TO H.' 059A 43 4F 4C 55 059E 4D 4E 53 20 05A2 41 20 54 4F 05A6 20 48 2E 666 05A9 2F 54 48 45 FCC '/THE INITIAL CONFIGURATION ' 05AD 20 49 4E 49 05B1 54 49 41 4C 05B5 20 43 4F 4E 05B9 46 49 47 55 05BD 52 41 54 49 05C1 4F 4E 20 667 05C4 49 53 20 41 FCC 'IS ALL BLANK EXCEPT' 05C8 4C 4C 20 42 05CC 4C 41 4E 4B 05D0 20 45 58 43 05D4 45 50 54 668 05D7 2F 46 4F 52 FCC '/FOR THE CENTER FOUR SQUARES, ' 05DB 20 54 48 45 05DF 20 43 45 4E 05E3 54 45 52 20 05E7 46 4F 55 52 05EB 20 53 51 55 05EF 41 52 45 53 05F3 2C 20 669 05F5 57 48 49 43 FCC 'WHICH FORM THE PATTERN:/' 05F9 48 20 46 4F 05FD 52 4D 20 54 0601 48 45 20 50 0605 41 54 54 45 0609 52 4E 3A 2F 670 060D 20 20 20 20 FCC ' O X/' 0611 20 20 20 20 0615 20 20 4F 20 0619 58 2F 671 061B 20 20 20 20 FCC ' X O/' 061F 20 20 20 20 0623 20 20 58 20 0627 4F 2F 672 0629 50 55 54 20 FCC 'PUT YOUR PIECE SO THAT MINE IS ' 062D 59 4F 55 52 0631 20 50 49 45 0635 43 45 20 53 0639 4F 20 54 48 063D 41 54 20 4D 0641 49 4E 45 20 0645 49 53 20 673 0648 42 45 54 57 FCC 'BETWEEN 2 OF YOURS, SUCH AS:/' 064C 45 45 4E 20 0650 32 20 4F 46 0654 20 59 4F 55 0658 52 53 2C 20 065C 53 55 43 48 0660 20 41 53 3A 0664 2F 674 0665 20 20 20 20 FCC ' X O X/' 0669 20 20 20 20 066D 58 20 4F 20 0671 58 2F 675 0673 20 20 20 20 FCC ' X O/' 0677 20 20 20 20 067B 20 20 58 20 067F 4F 2F 676 0681 54 48 49 53 FCC 'THIS WILL "FLIP" MY TOP "O" INTO YOUR "X"/' 0685 20 57 49 4C 0689 4C 20 22 46 068D 4C 49 50 22 0691 20 4D 59 20 0695 54 4F 50 20 0699 22 4F 22 20 069D 49 4E 54 4F 06A1 20 59 4F 55 06A5 52 20 22 58 06A9 22 2F 677 06AB 2F 4E 4F 54 FCC '/NOTE: YOU MAY CAPTURE 1 OR MORE OF ' 06AF 45 3A 20 59 06B3 4F 55 20 4D 06B7 41 59 20 43 06BB 41 50 54 55 06BF 52 45 20 31 06C3 20 4F 52 20 06C7 4D 4F 52 45 06CB 20 4F 46 20 678 06CF 4D 59 20 50 FCC 'MY PIECES THIS WAY,/' 06D3 49 45 43 45 06D7 53 20 54 48 06DB 49 53 20 57 06DF 41 59 2C 2F 679 06E3 4F 52 20 59 FCC 'OR YOU MAY FORFEIT BY TYPING "Z"' 06E7 4F 55 20 4D 06EB 41 59 20 46 06EF 4F 52 46 45 06F3 49 54 20 42 06F7 59 20 54 59 06FB 50 49 4E 47 06FF 20 22 5A 22 680 0703 2F 2F 53 48 IWAIT FCC '//SHOULD I WAIT BEFORE ' 0707 4F 55 4C 44 070B 20 49 20 57 070F 41 49 54 20 0713 42 45 46 4F 0717 52 45 20 681 071A 4D 41 4B 49 FCC 'MAKING MY MOVES?;' 071E 4E 47 20 4D 0722 59 20 4D 4F 0726 56 45 53 3F 072A 3B 682 072B 2F 4F 4B 2E OKWAIT FCC '/OK. TYPING ANY CHARACTER ' 072F 20 54 59 50 0733 49 4E 47 20 0737 41 4E 59 20 073B 43 48 41 52 073F 41 43 54 45 0743 52 20 683 0745 57 49 4C 4C FCC 'WILL LET ME GO!/;' 0749 20 4C 45 54 074D 20 4D 45 20 0751 47 4F 21 2F 0755 3B 684 0756 2F 53 48 4F BEST FCC '/SHOULD I PLAY MY BEST ' 075A 55 4C 44 20 075E 49 20 50 4C 0762 41 59 20 4D 0766 59 20 42 45 076A 53 54 20 685 076D 53 54 52 41 FCC 'STRATEGY?;' 0771 54 45 47 59 0775 3F 3B 686 0777 2F 53 4F 52 SORRY FCC '/SORRY, THAT SQUARE IS ' 077B 52 59 2C 20 077F 54 48 41 54 0783 20 53 51 55 0787 41 52 45 20 078B 49 53 20 687 078E 4F 43 43 55 FCC 'OCCUPIED. TRY AGAIN!;' 0792 50 49 45 44 0796 2E 20 54 52 079A 59 20 41 47 079E 41 49 4E 21 07A2 3B 688 07A3 2F 59 4F 55 MOVE FCC '/YOUR MOVE--(ROW,COL)?;' 07A7 52 20 4D 4F 07AB 56 45 2D 2D 07AF 28 52 4F 57 07B3 2C 43 4F 4C 07B7 29 3F 3B 689 07BA 2F 44 4F 20 XORO FCC '/DO YOU WANT TO HAVE X OR O?;' 07BE 59 4F 55 20 07C2 57 41 4E 54 07C6 20 54 4F 20 07CA 48 41 56 45 07CE 20 58 20 4F 07D2 52 20 4F 3F 07D6 3B 690 07D7 2F 44 4F 20 FIRST FCC '/DO YOU WANT TO GO FIRST?;' 07DB 59 4F 55 20 07DF 57 41 4E 54 07E3 20 54 4F 20 07E7 47 4F 20 46 07EB 49 52 53 54 07EF 3F 3B 691 07F1 2F 53 4F 52 NONEXT FCC '/SORRY, YOU ARE NOT NEXT TO ' 07F5 52 59 2C 20 07F9 59 4F 55 20 07FD 41 52 45 20 0801 4E 4F 54 20 0805 4E 45 58 54 0809 20 54 4F 20 692 080D 4F 4E 45 20 FCC 'ONE OF MY PIECES. TRY AGAIN!;' 0811 4F 46 20 4D 0815 59 20 50 49 0819 45 43 45 53 081D 2E 20 54 52 0821 59 20 41 47 0825 41 49 4E 21 0829 3B 693 082A 2F 53 4F 52 NOFLNK FCC '/SORRY, THAT MOVE DOES NOT ' 082E 52 59 2C 20 0832 54 48 41 54 0836 20 4D 4F 56 083A 45 20 44 4F 083E 45 53 20 4E 0842 4F 54 20 694 0845 46 4C 41 4E FCC 'FLANK A ROW. TRY AGAIN!;' 0849 4B 20 41 20 084D 52 4F 57 2E 0851 20 54 52 59 0855 20 41 47 41 0859 49 4E 21 3B 695 085D 5E 2F 54 48 THAT FCC '^/THAT GIVES YOU ;' 0861 41 54 20 47 0865 49 56 45 53 0869 20 59 4F 55 086D 20 3B 696 086F 20 4F 46 20 OFMY FCC ' OF MY PIECES/;' 0873 4D 59 20 50 0877 49 45 43 45 087B 53 2F 3B 697 087E 07 YOUHAV FCB 7 698 087F 59 4F 55 20 FCC 'YOU HAVE ;' 0883 48 41 56 45 0887 20 3B 699 0889 20 50 49 45 ANDI FCC ' PIECES AND I HAVE ;' 088D 43 45 53 20 0891 41 4E 44 20 0895 49 20 48 41 0899 56 45 20 3B 700 089D 20 50 49 45 PTEXT FCC ' PIECES!/;' 08A1 43 45 53 21 08A5 2F 3B 701 08A7 53 4F 52 52 IWON FCC 'SORRY, I WON THAT ONE!/;' 08AB 59 2C 20 49 08AF 20 57 4F 4E 08B3 20 54 48 41 08B7 54 20 4F 4E 08BB 45 21 2F 3B 702 08BF 41 20 54 49 ATIE FCC 'A TIE!/;' 08C3 45 21 2F 3B 703 08C7 59 4F 55 20 MEWON FCC 'YOU WON!!/;' 08CB 57 4F 4E 21 08CF 21 2F 3B 704 08D2 54 48 41 54 TTYPE FCC 'THAT WAS A ;' 08D6 20 57 41 53 08DA 20 41 20 3B 705 08DE 50 45 52 46 PERFCT FCC 'PERFECT GAME!/;' 08E2 45 43 54 20 08E6 47 41 4D 45 08EA 21 2F 3B 706 08ED 57 41 4C 4B WALK FCC 'WALKAWAY!/;' 08F1 41 57 41 59 08F5 21 2F 3B 707 08F8 46 49 47 48 FIGHT FCC 'FIGHT!/;' 08FC 54 21 2F 3B 708 0900 48 4F 54 20 HOT FCC 'HOT GAME!/;' 0904 47 41 4D 45 0908 21 2F 3B 709 090B 53 51 55 45 SQEAK FCC 'SQUEAKER!/;' 090F 41 4B 45 52 0913 21 2F 3B 710 0916 2F 44 4F 20 ANOTHR FCC '/DO YOU WANT TO PLAY' 091A 59 4F 55 20 091E 57 41 4E 54 0922 20 54 4F 20 0926 50 4C 41 59 711 092A 20 41 4E 4F FCC ' ANOTHER GAME?;' 092E 54 48 45 52 0932 20 47 41 4D 0936 45 3F 3B 712 0939 2F 54 48 41 THANX FCC '/THANKS FOR PLAYING!/;' 093D 4E 4B 53 20 0941 46 4F 52 20 0945 50 4C 41 59 0949 49 4E 47 21 094D 2F 3B 713 094F 5E 5E 49 20 IMOVE FCC '^^I MOVE TO ;' 0953 4D 4F 56 45 0957 20 54 4F 20 095B 3B 714 095C 2F 54 48 41 THAT1 FCC '/THAT GIVES ME ;' 0960 54 20 47 49 0964 56 45 53 20 0968 4D 45 20 3B 715 096C 20 4F 46 20 YOUR FCC ' OF YOUR PIECES./;' 0970 59 4F 55 52 0974 20 50 49 45 0978 43 45 53 2E 097C 2F 3B 716 097E 49 20 48 41 CPU0 FCC 'I HAVE TO FORFIT MY MOVE!/;' 0982 56 45 20 54 0986 4F 20 46 4F 098A 52 46 49 54 098E 20 4D 59 20 0992 4D 4F 56 45 0996 21 2F 3B 717 0999 2F 41 52 45 HUM0 FCC '/ARE YOU FORFEITING ' 099D 20 59 4F 55 09A1 20 46 4F 52 09A5 46 45 49 54 09A9 49 4E 47 20 718 09AD 59 4F 55 52 FCC 'YOUR TURN (Y OR N)?;' 09B1 20 54 55 52 09B5 4E 20 28 59 09B9 20 4F 52 20 09BD 4E 29 3F 3B 719 09C1 2F 20 20 41 LETTER FCC '/ A B C D E F G H/;' 09C5 20 42 20 43 09C9 20 44 20 45 09CD 20 46 20 47 09D1 20 48 2F 3B 720 09D5 721 0100 END START Total Errors 0