; ; ; THREE DIMENSIONAL TIC - TAC - TOE ; ; VER 1.0 11/20/75 ; ; THOMAS A. ROLANDER ; 0100 ORG 100H ; 3809 = CO EQU 3809H 3803 = CI EQU 3803H 3812 = CSTS EQU 3812H ; 000D = CR EQU 0DH 000A = LF EQU 0AH 001B = ESC EQU 1BH 0008 = BSPACE EQU 08H 0009 = TAB EQU 09H ; 000E = WIDTH EQU 14 0003 = SPACING EQU 3 ; BEGIN: 0100 310020 LXI SP,2000H ; SET STACK POINTER 0103 0641 MVI B,65 ; CLEAR THE BOARD 0105 210610 LXI H,MOVEARY 0108 AF XRA A CLOOP: 0109 77 MOV M,A 010A 23 INX H 010B 05 DCR B ; CLEAR ALL 64 SQUARES 010C C20901 JNZ CLOOP 010F 213505 LXI H,MSG0 ; CLEAR SCREEN AND PRINT BOARD 0112 CD9902 CALL MESAG 0115 CD1603 CALL BDHOME ; MOVE CURSOR TO LOWER LEFT CORNER GETMOVE: 0118 21AA06 LXI H,MSG1 ; PRINT "ENTER YOUR MOVE" GETX: 011B CDA402 CALL PRINTMESAG GETNEXT: 011E CD2903 CALL COPYPOSITION ; START BY DEFAULTING TO CURRENT POSITION 0121 CD0338 CALL CI ; THEN GET PLAYERS KEYBOARD INPUT 0124 E67F ANI 7FH ; BAG PARITY BIT 0126 47 MOV B,A ; RESPONSE WILL BE SAVED IN B 0127 114101 LXI D,CHARLIST-2 ; SCAN LIST OF OK CHARS & JUMP GLOOP: 012A 13 INX D ; PRE-INCREMENT 012B 13 INX D 012C 1A LDAX D ; GET CHAR FROM TABLE 012D B7 ORA A ; TEST FOR END OF LIST GETERROR: 012E 21BA06 LXI H,MSG2 ; JUST IN CASE BAD CHAR 0131 CA1B01 JZ GETX ; BAD CHAR -> GO PRINT "TRY AGAIN" 0134 13 INX D ; NOW POINT TO JUMP ADDRESS 0135 B8 CMP B ; COMPARE CHAR TO THAT KEY'D IN 0136 C22A01 JNZ GLOOP ; NO LUCK ?! 0139 1A LDAX D ; EL-KLUGE-O INDIRECT JUMP 013A 6F MOV L,A 013B 13 INX D 013C 1A LDAX D 013D 67 MOV H,A 013E 111E01 LXI D,GETNEXT ; SET-UP FAKE 'CALL' RETURN 0141 D5 PUSH D 0142 E9 PCHL ; WHITHER WANDEREST THOU ..... ; CHARLIST: 0143 1F DB 1FH 0144 5C01 DW UP 0146 0A DB 0AH 0147 6C01 DW DOWN 0149 08 DB 8 014A 9501 DW LEFT 014C 1C DB 1CH 014D 7801 DW RIGHT 014F 58 DB 'X' 0150 AE01 DW GOTMV 0152 0D DB CR 0153 0001 DW BEGIN 0155 03 DB 'C' AND NOT 40H 0156 0072 DW 7200H 0158 4F DB 'O' 0159 AA01 DW YOUMOVE 015B 00 DB 0 ; ; ; ++++++++++++++++++++++++++++++++++++++++++++++++ ; ; JUMP TABLE HANDLERS ; ; ++++++++++++++++++++++++++++++++++++++++++++++++ ; ; UP: 015C 210410 LXI H,NRP ; INCREMENT NEW ROW POINTER 015F 7E MOV A,M 0160 3C INR A 0161 77 MOV M,A 0162 FE05 CPI 5 ; DO WE HAVE TO BUMP TO NEXT BOARD ?! 0164 DABA02 JC MOVE ; NOPE -> SIMPLY GO MOVE 0167 3601 MVI M,1 ; GOING TO ROW 1 OF NEXT BOARD 0169 C38501 JMP BDINC ; INCREMENT BD, TESTING FOR WRAPAROUND ; ; DOWN: 016C 210410 LXI H,NRP ; DECREMENT NEW ROW POINTER 016F 35 DCR M 0170 C2BA02 JNZ MOVE ; OK -> STILL ON SAME BOARD 0173 3604 MVI M,4 ; TOP ROW OF NEXT BOARD 0175 C39E01 JMP BDDEC ; GO DECREMENT BD PTR, TESTING FRO WRAPAROUND ; ; RIGHT: 0178 210510 LXI H,NCP ; INCREMENT NEW COLUMN POINTER 017B 7E MOV A,M 017C 3C INR A 017D 77 MOV M,A 017E FE05 CPI 5 ; OFF BOARD ?! 0180 DABA02 JC MOVE ; NOPE -> SIMPLY GO MOVE 0183 3601 MVI M,1 ; END UP IN COLUMN ONE ; BDINC: 0185 210310 LXI H,NBP ; INCREMENT NEW BOARD POINTER 0188 7E MOV A,M 0189 3C INR A 018A 77 MOV M,A 018B FE05 CPI 5 ; GOING BEYOUND BOARD #4 ?! 018D DABA02 JC MOVE ; NOPE SIMPLY GO MOVE 0190 3601 MVI M,1 ; ELSE WRAPAROUND TO BD # 1 0192 C3BA02 JMP MOVE ; ; LEFT: 0195 210510 LXI H,NCP ; DECREMENT NEW COLUMN POINTER 0198 35 DCR M 0199 C2BA02 JNZ MOVE ; OK -> NOT GOING TO BD #0 019C 3604 MVI M,4 ; ELSE WRAPAROUND ; BDDEC: 019E 210310 LXI H,NBP ; DECREMENT NEW BOARD POINTER 01A1 35 DCR M 01A2 C2BA02 JNZ MOVE ; OK NO WRAPPING 01A5 3604 MVI M,4 01A7 C3BA02 JMP MOVE ; GO AND WRAP IT ; ; YOUMOVE: 01AA D1 POP D ; POP PHONNEY RETURN ADDR 01AB C3D901 JMP STRCALL ; GO CALL STRAT SUBR. ; ; GOTMV: 01AE D1 POP D ; POP PHONNEY RETURN ADDR 01AF 210010 LXI H,BP ; CONVERT BOARD POSITION INTO INDEX 01B2 7E MOV A,M 01B3 3D DCR A ; 16*(BP-1) 01B4 87 ADD A 01B5 87 ADD A 01B6 87 ADD A 01B7 87 ADD A 01B8 47 MOV B,A 01B9 23 INX H 01BA 7E MOV A,M 01BB 3D DCR A ; + 4*(CRP-1) 01BC 87 ADD A 01BD 87 ADD A 01BE 23 INX H 01BF 86 ADD M ; + CCP 01C0 80 ADD B 01C1 210610 LXI H,MOVEARY 01C4 85 ADD L 01C5 6F MOV L,A 01C6 7E MOV A,M 01C7 D601 SUI 1 01C9 9F SBB A 01CA CA2E01 JZ GETERROR ; SQUARE ALREADY OCCUPIED ! 01CD 3601 MVI M,1 ; ELSE LET'M HAVE IT 01CF 0E58 MVI C,'X' 01D1 CD0938 CALL CO 01D4 0E08 MVI C,BSPACE ; PRINT HIS "X" 01D6 CD0938 CALL CO ; AND BACK SPACE CURSOR OVER POSITION STRCALL: 01D9 21CA06 LXI H,MSG3 ; PRINT S01DC CDA402 CALL PRINTMESAG ; "I'M THINKING !" 01DF CD3A03 CALL STRAT ; CALL THE STRATEGY ROUTINE 01E2 3A9910 LDA M3 01E5 FE03 CPI 3 01E7 F24D02 JP L18 01EA FE01 CPI 1 01EC 3E4F MVI A,'O' 01EE 21EA06 LXI H,MSG5 01F1 C2F901 JNZ L15 ; JUMP IF WE'VE WON 01F4 3E58 MVI A,'X' 01F6 21FA06 LXI H,MSG6 ; HE'S WON !? L15: 01F9 32A910 STA K8 01FC CDA402 CALL PRINTMESAG L15E: 01FF 3A9710 LDA M1 0202 3D DCR A 0203 6F MOV L,A 0204 2600 MVI H,0 0206 29 DAD H 0207 29 DAD H 0208 23 INX H 0209 11EF10 LXI D,ROW 020C 19 DAD D 020D 1604 MVI D,4 L16: 020F 7E MOV A,M 0210 CDE004 CALL PLACEIT 0213 E5 PUSH H 0214 D5 PUSH D 0215 CDBA02 CALL MOVE 0218 D1 POP D 0219 E1 POP H 021A 3AA910 LDA K8 021D 4F MOV C,A 021E CD0938 CALL CO 0221 0E08 MVI C,BSPACE 0223 CD0938 CALL CO 0226 15 DCR D 0227 23 INX H 0228 C20F02 JNZ L16 022B 3AA910 LDA K8 022E FE20 CPI ' ' 0230 CA3B02 JZ L17A 0233 32A710 STA J8 0236 3E20 MVI A,' ' 0238 C33E02 JMP L17B L17A: 023B 3AA710 LDA J8 L17B: 023E 32A910 STA K8 0241 CD1238 CALL CSTS 0244 CAFF01 JZ L15E 0247 CD0338 CALL CI 024A C30001 JMP BEGIN L18: 024D 3A9710 LDA M1 0250 B7 ORA A 0251 C27D02 JNZ L13A 0254 3A0010 LDA CBP 0257 5F MOV E,A 0258 1600 MVI D,0 L14: 025A 21AA10 LXI H,WAIT 025D 19 DAD D 025E 4E MOV C,M 025F 0600 MVI B,0 0261 210610 LXI H,MOVEARY ; WE'RE GETTING A WAITING MOVE 0264 09 DAD B 0265 7E MOV A,M 0266 B7 ORA A 0267 CA8302 JZ L13 026A 13 INX D 026B 3E15 MVI A,21 026D BB CMP E 026E C25A02 JNZ L14 0271 21DA06 LXI H,MSG4 ; NO WAITING MOVES LEFT ! S0274 CDA402 CALL PRINTMESAG ; PRINT "TIE GAME !!!" 0277 CD0338 CALL CI ; WAIT FOR INPUT 027A C30001 JMP BEGIN L13A: 027D 4F MOV C,A 027E 210610 LXI H,MOVEARY 0281 85 ADD L 0282 6F MOV L,A L13: 0283 3605 MVI M,5 ; CLAIM SQUARE FOR US 0285 79 MOV A,C 0286 CDE004 CALL PLACEIT 0289 CDBA02 CALL MOVE 028C 0E4F MVI C,'O' ; SHOW OUR "O" 028E CD0938 CALL CO 0291 0E08 MVI C,BSPACE 0293 CD0938 CALL CO 0296 C31801 JMP GETMOVE ; GET OPPONENTS RESPONSE ; ; ; ++++++++++++++++++++++++++++++++++++++++++++++++ ; ; SUPPORTING SUBROUTINES ; ; ++++++++++++++++++++++++++++++++++++++++++++++++ ; ; MESAG: 0299 7E MOV A,M 029A B7 ORA A 029B C8 RZ 029C 23 INX H 029D 4F MOV C,A 029E CD0938 CALL CO 02A1 C39902 JMP MESAG PRINTMESAG: 02A4 E5 PUSH H ; SAVE ADDR OF MESAG 02A5 CD2903 CALL REMEMBERPOSITION ;WE WANT TO COME BACK HERE 02A8 CD1603 CALL BDHOME ; HOME CURSOR TO LOWER LEFT BD POSITION 02AB 0618 MVI B,24 02AD CD2605 CALL CURSRT ; MOVE CURSOR TO MESSAGE POSITION 02B0 E1 POP H 02B1 CD9902 CALL MESAG 02B4 CD1603 CALL BDHOME ; HOME CURSOR AGAIN 02B7 C3BA02 JMP MOVE ; & RETURN TO WHERE WE WERE ; ; MOVE: 02BA 210010 LXI H,BP ; START BY GOING TO CORRECT BD 02BD 110310 LXI D,NBP ; DE=NEW POSITION, HL=CURRENT POSITION MBP: 02C0 1A LDAX D ; GET NEW BD # 02C1 BE CMP M ; COMPARE TO CURRENP B@ # 02C2 CAE402 JZ MBPD ; -> ON MATCH 02C5 FAD602 JM MBPL ; WE'RE GOING LEFT 02C8 34 INR M ; FIRST UPDATE CURRENT BD # 02C9 060E MVI B,WIDTH 02CB CD2605 CALL CURSRT ; MOVE CURSOR RIGHT INTO POSTION 02CE 0602 MVI B,2 02D0 CD0805 CALL CURSUP ; MOVE CURSOR UP INTO POSITION 02D3 C3C002 JMP MBP ; LOOP TILL NEW BD # = CURRENT BD # MBPL: 02D6 35 DCR M ; FIRST UPDATE CURRENT BD # 02D7 060E MVI B,WIDTH 02D9 CD1C05 CALL CURSLT ; MOVE CURSOR LEFT INTO POSITION 02DC 0602 MVI B,2 02DE CD1205 CALL CURSDN ; MOVE CURSOR DOWN INTO POSITION 02E1 C3C002 JMP MBP ; LOOP TIL NEW BD # = CURRENT BD # ; MBPD: 02E4 23 INX H 02E5 13 INX D ; MEM ORGANIZED AS BP,RP,CP MRP: 02E6 0601 MVI B,1 02E8 1A LDAX D ; GET NEW ROW POINTER 02E9 BE CMP M ; COMPARE TO CURRENT ROW POINTER 02EA CAFE02 JZ MRPD ; -> ON MATCH 02ED FAF702 JM MRPL ; GO MOVE DOWN 02F0 34 INR M ; FIRST INCREMENT CURRENT ROW POINTER 02F1 CD0805 CALL CURSUP ; MOVE UP ONE ROW 02F4 C3E602 JMP MRP ; LOOP UNTIL NEW ROW PTR = CURRENT ROW PTR MRPL: 02F7 35 DCR M ; FIRST DECREMENT CURRENT ROW POINTER 02F8 CD1205 CALL CURSDN ; MOVE DOWN ONE ROW 02FB C3E602 JMP MRP ; LOOP UNTIL NEW ROW PTR = CURRENT ROW PTR ; MRPD: 02FE 23 INX H 02FF 13 INX D MCP: 0300 0603 MVI B,SPACING 0302 1A LDAX D ; GET NEW COLUMN POINTER 0303 BE CMP M ; COMPARE WITH CURRENT COLUMN POINTER 0304 C8 RZ ; DONE MOVING WITH A MATCH 0305 FA0F03 JM MCPL ; GO MOVE CURSOR LEFT 0308 34 INR M ; FIRST INCREMENT CURRENT COLUMN POINTER 0309 CD2605 CALL CURSRT ; MOVE CURSOR RIGHT ONE COLUMN 030C C30003 JMP MCP ; LOOP UNTIL NEW COLUMN PTR = CURRENT COLUMN P MCPL: 030F 35 DCR M ; FIRST DECREMNT CURRENT COLUMN POINTER 0310 CD1C05 CALL CURSLT ; MOVE CURSOR LEFT ONE COLUMN 0313 C30003 JMP MCP ; LOOP UNTIL NEW COLUMN PTR = CURRENT COLUM PT ; ; BDHOME: 0316 CD3005 CALL CURSHOME ; POSITION THE CURSOR AT TRUE "HOME" 0319 0609 MVI B,9 031B CD1205 CALL CURSDN ; MOVE DOWN TO ROW 1, COL 1 BD 1 031E 210010 LXI H,BP 0321 3E01 MVI A,1 0323 77 MOV M,A ; BP = 1 0324 23 INX H 0325 77 MOV M,A ; RP = 1 0326 23 INX H 0327 77 MOV M,A ; CP = 1 0328 C9 RET ; ; REMEMBERPOSITION: COPYPOSITION: 0329 110010 LXI D,BP 032C 210310 LXI H,NBP ; COP] BP(ETC) -> NBP(ETC) 032F 0603 MVI B,3 COPYLOOP: 0331 1A LDAX D ; GET BP(I) 0332 77 MOV M,A ; PUT NBP(I) 0333 13 INX D 0334 23 INX H 0335 05 DCR B ; LOOP FOR THREE BYTES 0336 C23103 JNZ COPYLOOP 0339 C9 RET ; ; STRAT: 033A 0601 MVI B,1 L15A: 033C 78 MOV A,B 033D 214710 LXI H,SUM 0340 85 ADD L 0341 6F MOV L,A 0342 3600 MVI M,0 0344 E5 PUSH H 0345 68 MOV L,B 0346 2600 MVI H,0 0348 29 DAD H 0349 29 DAD H 034A 2B DCX H 034B 2B DCX H 034C 2B DCX H 034D EB XCHG 034E 0E04 MVI C,4 L15B: 0350 21EF10 LXI H,ROW 0353 19 DAD D 0354 7E MOV A,M 0355 210610 LXI H,MOVEARY 0358 85 ADD L 0359 6F MOV L,A 035A 7E MOV A,M 035B E1 POP H 035C E5 PUSH H 035D 86 ADD M 035E 77 MOV M,A 035F 13 INX D 0360 0D DCR C 0361 C25003 JNZ L15B 0364 E1 POP H 0365 04 INR B 0366 3E4D MVI A,77 0368 B8 CMP B 0369 C23C03 JNZ L15A ; 036C 0601 MVI B,1 ; B = J1 ; DO21: 036E 78 MOV A,B 036F 329910 STA M3 0372 21BF10 LXI H,TSTA1 0375 85 ADD L 0376 6F MOV L,A 0377 7E MOV A,M 0378 329410 STA TST1 037B B7 ORA A 037C FAC904 JM END21 037F 78 MOV A,B 0380 21CF10 LXI H,TSTA2 0383 85 ADD L 0384 6F MOV L,A 0385 7E MOV A,M 0386 329510 STA TST2 0389 78 MOV A,B 038A 21DF10 LXI H,TSTA3 038D 85 ADD L 038E 6F MOV L,A 038F 7E MOV A,M 0390 329610 STA TST3 ; 0393 0E01 MVI C,1 ; C = J2 ; DO22: 0395 79 MOV A,C 0396 214710 LXI H,SUM 0399 85 ADD L 039A 6F MOV L,A 039B 3A9410 LDA TST1 039E BE CMP M 039F C2C204 JNZ END22 03A2 78 MOV A,B 03A3 D603 SUI 3 03A5 DAD704 JC S18 03A8 69 MOV L,C 03A9 2600 MVI H,0 03AB 29 DAD H 03AC 29 DAD H 03AD 2B DCX H 03AE 2B DCX H 03AF 2B DCX H 03B0 229A10 SHLD J3 03B3 3E04 MVI A,4 03B5 329C10 STA K3 ; DO23: 03B8 2A9A10 LHLD J3 03BB 11EF10 LXI D,ROW 03BE 19 DAD D 03BF 7E MOV A,M 03C0 329710 STA M1 03C3 210610 LXI H,MOVEARY 03C6 85 ADD L 03C7 6F MOV L,A 03C8 7E MOV A,M 03C9 B7 ORA A 03CA C2B404 JNZ END23 03CD 3A9510 LDA TST2 03D0 B7 ORA A 03D1 FADB04 JM S17 ; 03D4 3E01 MVI A,1 03D6 329D10 STA J4 DO24: 03D9 3A9D10 LDA J4 03DC 214710 LXI H,SUM 03DF 85 ADD L 03E0 6F MOV L,A 03E1 3A9510 LDA TST2 03E4 BE CMP M 03E5 C2AA04 JNZ END24 03E8 3A9D10 LDA J4 03EB B9 CMP C 03EC CAAA04 JZ END24 ; 03EF 6F MOV L,A 03F0 2600 MVI H,0 03F2 29 DAD H 03F3 29 DAD H 03F4 2B DCX H 03F5 2B DCX H 03F6 2B DCX H 03F7 229E10 SHLD J5 03FA 22A110 SHLD L5 03FD 3E04 MVI A,4 03FF 32A010 STA K5 ; DO25: 0402 2A9E10 LHLD J5 0405 11EF10 LXI D,ROW 0408 19 DAD D 0409 3A9710 LDA M1 040C BE CMP M 040D C29C04 JNZ END25 0410 3A9610 LDA TST3 0413 B7 ORA A 0414 FADB04 JM S17 0417 2AA110 LHLD L5 041A 22A310 SHLD J6 041D 3E04 MVI A,4 041F 32A510 STA K6 ; DO26: 0422 2AA310 LHLD J6 0425 11EF10 LXI D,ROW 0428 19 DAD D 0429 7E MOV A,M 042A 329810 STA M2 042D 210610 LXI H,MOVEARY 0430 85 ADD L 0431 6F MOV L,A 0432 7E MOV A,M 0433 B7 ORA A 0434 C28E04 JNZ END26 ; 0437 3E01 MVI A,1 0439 32A610 STA J7 ; DO27: 043C 3AA610 LDA J7 043F 57 MOV D,A 0440 214710 LXI H,SUM 0443 85 ADD L 0444 6F MOV L,A 0445 3A9610 LDA TST3 0448 BE CMP M 0449 C28404 JNZ END27 044C 7A MOV A,D 044D B9 CMP C 044E CA8404 JZ END27 0451 3A9D10 LDA J4 0454 BA CMP D 0455 CA8404 JZ END27 0458 6A MOV L,D 0459 2600 MVI H,0 045B 29 DAD H 045C 29 DAD H 045D 2B DCX H 045E 2B DCX H 045F 2B DCX H 0460 22A710 SHLD J8 0463 3E04 MVI A,4 0465 32A910 STA K8 ; DO28: 0468 2AA710 LHLD J8 046B 11EF10 LXI D,ROW 046E 19 DAD D 046F 3A9810 LDA M2 0472 BE CMP M 0473 CADF04 JZ S16 ; END28: 0476 2AA710 LHLD J8 0479 23 INX H 047A 22A710 SHLD J8 047D 21A910 LXI H,K8 0480 35 DCR M 0481 C26804 JNZ DO28 ; END27: 0484 21A610 LXI H,J7 0487 34 INR M 0488 3E4D MVI A,77 048A BE CMP M 048B C23C04 JNZ DO27 ; END26: 048E 2AA310 LHLD J6 0491 23 INX H 0492 22A310 SHLD J6 0495 21A510 LXI H,K6 0498 35 DCR M 0499 C22204 JNZ DO26 ; END25: 049C 2A9E10 LHLD J5 049F 23 INX H 04A0 229E10 SHLD J5 04A3 21A010 LXI H,K5 04A6 35 DCR M 04A7 C20204 JNZ DO25 ; END24: 04AA 219D10 LXI H,J4 04AD 34 INR M 04AE 3E4D MVI A,77 04B0 BE CMP M 04B1 C2D903 JNZ DO24 ; END23: 04B4 2A9A10 LHLD J3 04B7 23 INX H 04B8 229A10 SHLD J3 04BB 219C10 LXI H,K3 04BE 35 DCR M 04BF C2B803 JNZ DO23 ; END22: 04C2 0C INR C 04C3 3E4D MVI A,77 04C5 B9 CMP C 04C6 C29503 JNZ DO22 ; END21: 04C9 04 INR B 04CA 3E10 MVI A,16 04CC B8 CMP B 04CD C26E03 JNZ DO21 ; ; 04D0 AF XRA A 04D1 329710 STA M1 04D4 C3DB04 JMP S17 ; S18: 04D7 79 MOV A,C 04D8 329710 STA M1 ; S17: 04DB AF XRA A 04DC 329810 STA M2 ; S16: 04DF C9 RET ; ; ; PLACEIT: 04E0 47 MOV B,A 04E1 3D DCR A 04E2 0F RRC 04E3 0F RRC 04E4 0F RRC 04E5 0F RRC 04E6 E60F ANI 0FH 04E8 3C INR A 04E9 320310 STA NBP 04EC 3D DCR A 04ED 87 ADD A 04EE 87 ADD A 04EF 87 ADD A 04F0 87 ADD A 04F1 4F MOV C,A 04F2 78 MOV A,B 04F3 91 SUB C 04F4 47 MOV B,A 04F5 3D DCR A 04F6 0F RRC 04F7 0F RRC 04F8 E63F ANI 3FH 04FA 3C INR A 04FB 320410 STA NRP 04FE 3D DCR A 04FF 87 ADD A 0500 87 ADD A 0501 4F MOV C,A 0502 78 MOV A,B 0503 91 SUB C 0504 320510 STA NCP 0507 C9 RET ; ; ; ++++++++++++++++++++++++++++++++++++++++++++++++ ; ; CURSOR CONTROL SUBROUTINES ; ; ++++++++++++++++++++++++++++++++++++++++/+++++++ ; ; CURSUP: 0508 0E1F MVI C,1FH 050A CD0938 CALL CO 050D 05 DCR B ; B CONTAINS CNTR FOR ALL CRSR SUB'S 050E C20805 JNZ CURSUP 0511 C9 RET ; ; CURSDN: 0512 0E0A MVI C,LF 0514 CD0938 CALL CO 0517 05 DCR B 0518 C21205 JNZ CURSDN 051B C9 RET ; ; CURSLT: 051C 0E08 MVI C,BSPACE 051E CD0938 CALL CO 0521 05 DCR B 0522 C21C05 JNZ CURSLT 0525 C9 RET ; ; CURSRT: 0526 0E1C MVI C,1CH 0528 CD0938 CALL CO 052B 05 DCR B 052C C22605 JNZ CURSRT 052F C9 RET ; ; CURSHOME: 0530 0E19 MVI C,19H 0532 C30938 JMP CO ; ; ; 0535 190C MSG0: DB 19H,0CH 0537 5448524545 DB 'THREE DIMENSIONAL' 0548 2020202020 DB ' + + + +',CR,LF 056D 2054494320 DB ' TIC - TAC - TOE ' 057E 2020202020 DB ' + + + +',CR,LF 05A3 2020202020 DB ' + + + + ' 05CB 20202B2020 DB ' + + + +',CR,LF 05D9 2020202020 DB ' + + + + ' 0601 20202B2020 DB ' + + + +',CR,LF 060F 2020202020 DB ' + + + + ' 0629 20202B2020 DB ' + + + +',CR,LF 0637 2020202020 DB ' + + + + ' 0651 20202B2020 DB ' + + + +',CR,LF 065F 2B20202B20 DB '+ + + + ' 066B 20202B2020 DB ' + + + +',CR,LF 0679 2B20202B20 DB '+ + + + ' 0685 20202B2020 DB ' + + + +',CR,LF 0693 2B20202B20 DB '+ + + +',CR,LF 069F 2B20202B20 DB '+ + + +' 06A9 00 DB 0 ; 06AA 454E544552MSG1: DB 'ENTER YOUR MOVE',0 06BA 5452592041MSG2: DB 'TRY AGAIN ',0 06CA 4920414D20MSG3: DB 'I AM THINKING !',0 06DA 5449452047MSG4: DB 'TIE GAME !!!!!!',0 06EA 594F552048MSG5: DB 'YOU HAVE LOST !',0 06FA 434F4E4752MSG6: DB 'CONGRATULATIONS',0 ; ; ; ++++++++++++++++++++++++++++++++++++++++++++++++ ; ; RAM BUFFER SPACE ; ; ++++++++++++++++++++++++++++++++++++++++++++++++ ; ; 1000 ORG 1000H ; BP: 1000 CBP: DS 1 ; CURRENT BOARD POINTER 1001 CRP: DS 1 ; CURRENT ROW POINTER 1002 CCP: DS 1 ; CURRENT COLUMN POINTER ; 1003 NBP: DS 1 ; NEW BOARD POINTER 1004 NRP: DS 1 ; NEW ROW POINTER 1005 NCP: DS 1 ; NEW COLUMN POINTER ; 1006 MOVEARY: DS 65 1047 SUM: DS 77 1094 TST1: DS 1 1095 TST2: DS 1 1096 TST3: DS 1 1097 M1: DS 1 1098 M2: DS 1 1099 M3: DS 1 109A J3: DS 2 109C K3: DS 1 109D J4: DS 1 109E J5: DS 2 10A0 K5: DS 1 10A1 L5: DS 2 10A3 J6: DS 2 10A5 K6: DS 1 10A6 J7: DS 1 10A7 J8: DS 2 10A9 K8: DS 1 ; 10AA 00162B172AWAIT: DB 0,22,43,23,42,26,39,27,38,1,64,13,52,4 10B8 3D1031162B DB 61,16,49,22,43,23,42 ; 10BF 00040F030ATSTA1: DB 0, 4,15, 3,10,10, 2, 2, 2, 2, 1, 5, 5, 5, 5,-1 10CF 00FFFFFF0ATSTA2: DB 0,-1,-1,-1,10, 5, 2, 1, 1, 0, 1, 5, 5, 0, 0,-1 10DF 00FFFFFFFFTSTA3: DB 0,-1,-1,-1,-1,10,-1, 2, 1, 2, 1,10, 5,10, 5,-1 ; 10EF 00 ROW: DB 0 10F0 162B400117 DB 22,43,64, 1,23,42,61, 4 10F8 1A27340D1B DB 26,39,52,13,27,38,49,16 1100 162A3E0217 DB 22,42,62, 2,23,43,63, 3 1108 172635081B DB 23,38,53, 8,27,42,57,12 1110 1A26320E1B DB 26,38,50,14,27,39,51,15 1118 162738051A DB 22,39,56, 5,26,43,60, 9 1120 1626360617 DB 22,38,54, 6,23,39,55, 7 1128 1A2A3A0A1B DB 26,42,58,10,27,43,59,11 1130 161718151A DB 22,23,24,21,26,27,28,25 1138 161A1E1217 DB 22,26,30,18,23,27,31,19 1140 161B201117 DB 22,27,32,17,23,26,29,20 1148 262728252A DB 38,39,40,37,42,43,44,41 1150 262A2E2227 DB 38,42,46,34,39,43,47,35 1158 262B302127 DB 38,43,48,33,39,42,45,36 1160 3D01152940 DB 61, 1,21,41,64, 4,24,44 1168 310413223D DB 49, 4,19,34,61,16,31,46 1170 310D192534 DB 49,13,25,37,52,16,28,40 1178 3401122340 DB 52, 1,18,35,64,13,30,47 1180 3101112134 DB 49, 1,17,33,52, 4,20,36 1188 3D0D1D2D40 DB 61,13,29,45,64,16,32,48 1190 0401020310 DB 4, 1, 2, 3,16,13,14,15 1198 0D01050910 DB 13, 1, 5, 9,16, 4, 8,12 11A0 1001060B0D DB 16, 1, 6,11,13, 4, 7,10 11A8 3431323340 DB 52,49,50,51,64,61,62,63 11B0 3D31353940 DB 61,49,53,57,64,52,56,60 11B8 4031363B3D DB 64,49,54,59,61,52,55,58 11C0 1222320213 DB 18,34,50, 2,19,35,51, 3 11C8 1525350518 DB 21,37,53, 5,24,40,56, 8 11D0 192939091C DB 25,41,57, 9,28,44,60,12 11D8 1E2E3E0E1F DB 30,46,62,14,31,47,63,15 11E0 060708050A DB 6, 7, 8, 5,10,11,12, 9 11E8 060A0E0207 DB 6,10,14, 2, 7,11,15, 3 11F0 121314111E DB 18,19,20,17,30,31,32,29 11F8 15191D1118 DB 21,25,29,17,24,28,32,20 1200 222324212E DB 34,35,36,33,46,47,48,45 1208 25292D2128 DB 37,41,45,33,40,44,48,36 1210 363738353A DB 54,55,56,53,58,59,60,57 1218 363A3E3237 DB 54,58,62,50,55,59,63,51 ; 1220 END