/CUBIC - 3D TIC-TAC-TOE *10 XR1, 0 XR2, 0 XR3, 0 XR4, 0 XR5, 0 XR6, 0 XR7, 0 XR8, 0 /NUMERICAL CONSTANTS MINUS1, -1 MINUS3, -3 M4, -4 M5, -5 M20, -24 M13, -15 M76, -114 M64, -100 M260, -260 MCR, -215 P5, 5 P76, 114 K261, 261 LF, 212 SPACE, 240 COMMA, 254 /VARIABLE STORAGE ROW, 0 COLUMN, 0 PLANE, 0 NEXT, 0 SAVE, 0 FLAG, 0 DEVFLG, 0 OUTDEV, 0 OUTCHR, 0 / USED BY 'STRAT' XSUM, 0 TEST1, 0 TEST2, 0 TEST3, 0 M1, 0 M2, 0 M3, 0 WAITP, 0 WAITCT, 0 / COUNT1, 0 COUNT2, 0 COUNT3, 0 COUNT4, 0 COUNT5, 0 COUNT6, 0 COUNT7, 0 COUNT8, 0 /ADDRESS INITIALIZATION *** MOVEP, MOVE-1 WAITL, WAITLST SUMP, SUM-1 ROWP, ROWLST-1 TESTP, TEST-1 /SUBROUTINE POINTERS YESNO, XYESNO MESAGE, PRNTXT PRINTL, XPRNTL CONVRT, XCNVRT CODE, XCODE BOARD, CUBE STRAT, STRTG TESTAC=JMS I . ; XTSTAC READC=JMS I . ; XREADC PRINTC=JMS I . ; XPRNTC /GENERAL POINTERS ENDGAM, TRYAGN RETRN1, RTRN01 RETRN2, RTRN02 RETRN3, RTRN03 STPROG, JMS I MESAGE TEXT16 HLT JMP BEGIN LLS=6666 LSF=6661 PAGE / / MAIN PROGRAM / BEGIN, CLL CLA KCC TLS JMS I MESAGE TEXT01 JMS I MESAGE TEXT02 JMS I YESNO JMP .+3 JMS I MESAGE TEXT03 JMS I MESAGE TEXT17 JMS I YESNO CMA DCA FLAG TAD FLAG SZA CLA JMP .+6 JMS I MESAGE TEXT18 JMS I YESNO SKP CMA DCA DEVFLG SETUP, TAD WAITL DCA WAITP TAD M20 DCA WAITCT TAD M64 DCA COUNT1 TAD MOVEP DCA XR1 DCA I XR1 ISZ COUNT1 JMP .-2 JMS I MESAGE TEXT04 JMS I YESNO SKP JMP DECIDE / GET OPPONENT'S MOVE / GETMV, JMS I MESAGE TEXT05 READC DCA ROW TAD COMMA PRINTC READC DCA COLUMN TAD COMMA PRINTC READC DCA PLANE / / CHECK FOR LEGALITY / TAD ROW TESTAC JMP ILLEGL TAD COLUMN TESTAC JMP ILLEGL TAD ROW TAD M260 DCA ROW TAD COLUMN TAD M260 DCA COLUMN TAD PLANE TAD M260 DCA PLANE JMS I CODE TAD MOVEP DCA NEXT TAD I NEXT SZA CLA JMP ILLEGL IAC DCA I NEXT / / MAKE COMPUTER'S MOVE / DECIDE, JMS I STRAT TAD M1 SZA CLA JMP SITFND TAD I WAITP DCA M1 TAD M1 TAD MOVEP DCA SAVE TAD I SAVE SNA CLA JMP COMOVE ISZ WAITP ISZ WAITCT JMP .-12 / / TIE GAME *** / JMS I MESAGE TEXT08 JMP I ENDGAM / / TEST FOR WIN OR LOSE / SITFND, CLA CMA TAD M3 SNA CLA JMP WELOSE CLA CLL CMA RAL TAD M3 SNA CLA JMP WEWON / / NORMAL MOVE / TAD MOVEP TAD M1 DCA SAVE COMOVE, TAD P5 DCA I SAVE JMS I MESAGE TEXT07 TAD M1 JMS I CONVRT TAD FLAG SMA CLA JMS I BOARD JMP GETMV ILLEGL, JMS I MESAGE TEXT06 JMP GETMV WEWON, JMS I MESAGE TEXT10 JMP .+3 WELOSE, JMS I MESAGE TEXT09 / PRINT OUT THE WINNING ROW JMS I WINROW JMS I BOARD JMP I ENDGAME WINROW, XWNROW PAGE / *400 TRYAGN, JMS I MESAGE TEXT11 JMS I YESNO JMP STPROG JMP I .+1 SETUP /SUBROUTINES (I) XREADC, 0 KSF JMP .-1 KRB TSF JMP .-1 TLS DCA SAVE TAD SAVE TAD MNCODE SNA CLA JMP I ENDGAME TAD SAVE TAD MARROW SNA CLA JMP I LASTMV TAD SAVE TAD MSCODE SNA CLA JMP STPROG TAD SAVE JMP I XREADC MNCODE, -216 MARROW, -337 MSCODE, -223 LASTMV, GETMV / / SKIP IF 260 0 TAD TEST1 SMA SZA CLA JMP DONE01 / /FIND A ROW WITH A SUM OF TEST1 TAD SUMP DCA XR2 TAD M76 DCA COUNT2 SCAN02, TAD I XR2 TAD TEST1 SZA CLA JMP DONE02 CLA CLL CMA RAL TAD M3 SPA SNA CLA JMP I RETRN1 /FIND A BLANK SQUARE M1 ON THE ROW WITH SUM OF TEST1 TAD P76 TAD COUNT2 CLL RTL TAD ROWP DCA XR3 TAD M4 DCA COUNT3 SCAN03, TAD I XR3 DCA M1 TAD I M1 SZA CLA JMP DONE03 TAD TEST2 SMA SZA CLA JMP I RETRN2 /FIND A ROW WITH A SUM OF TEST2 TAD SUMP DCA XR4 TAD M76 DCA COUNT4 SCAN04, TAD I XR4 TAD TEST2 SZA CLA JMP DONE04 TAD XR2 CIA TAD XR4 SNA CLA JMP DONE04 / /FIND THE BLANK SQUARE M1 ON ROW WITH SUM=TEST2 TAD P76 TAD COUNT4 CLL RTL TAD ROWP DCA XR5 TAD XR5 DCA XR6 TAD M4 DCA COUNT5 SCAN05, TAD I XR5 CIA TAD M1 SZA CLA JMP DONE05 TAD TEST3 SMA SZA CLA JMP I RETRN2 /FIND ANY BLANK SQUARE M2 ON ROW WITH SUM=TEST2 TAD M4 DCA COUNT6 SCAN06, TAD I XR6 DCA M2 TAD I M2 SZA CLA JMP DONE06 /FIND A ROW WHOSE SUM = TEST3 TAD SUMP DCA XR7 TAD M76 DCA COUNT7 SCAN07, TAD I XR7 TAD TEST3 SZA CLA JMP DONE07 / /TEST IF SAME ROW AS FOR TEST1, TEST2 TAD XR7 CIA TAD XR2 SNA CLA JMP DONE07 TAD XR7 CIA TAD XR4 SNA CLA JMP DONE07 /FIND THE BLANK SQUARE M2 ON THE ROW WITH SUM = TEST3 TAD P76 TAD COUNT7 CLL RTL TAD ROWP DCA XR8 TAD M4 DCA COUNT8 SCAN08, TAD I XR8 CIA TAD M2 SNA CLA JMP I RETRN3 / /LOOP ENDS *** DONE08, ISZ COUNT8 JMP SCAN08 DONE07, ISZ COUNT7 JMP SCAN07 DONE06, ISZ COUNT6 JMP SCAN06 DONE05, ISZ COUNT5 JMP SCAN05 DONE04, ISZ COUNT4 JMP SCAN04 DONE03, ISZ COUNT3 JMP SCAN03 DONE02, ISZ COUNT2 JMP SCAN02 DONE01, ISZ COUNT1 JMP SCAN01 JMP ENDPAGE / *777 ENDPAGE,DCA M1 DCA M2 JMP RTURN /RETURNS FROM STRAT *** /WIN OR LOSE - M1 A ROW SUBSCRPT *** RTRN01, TAD P76 TAD COUNT2 CLL RTL TAD ROWP IAC DCA M1 DCA M2 JMP RTURN RTRN02, CLA CLL DCA M2 RTRN03, TAD MOVEP CIA TAD M1 DCA M1 RTURN, TAD I STRTPT DCA SAVE JMP I SAVE STRTPT, STRTG /SUBROUTINE BOARD *** PRINT-OUT OF BOARD CUBE, 0 CLL CLA TAD DEVFLG SNA CLA JMP .+5 TAD DEVFLG DCA OUTDEV TAD (214) PRINTC TAD LF PRINTC TAD M4 DCA COUNT1 CLA IAC DCA PLANE PLNLOP, JMS I MESAGE TEXT13 TAD M4 DCA COUNT2 CLA IAC DCA ROW / ROWLOP, JMS I MESAGE TEXT14 TAD M4 DCA COUNT3 CLA IAC DCA COLUMN COLOOP, JMS I CODE TAD MOVEP DCA SAVE TAD I SAVE SNA JMP PRTSPC SPA JMP STAR TAD M5 SNA CLA TAD XCDE TAD OCODE SKP PRTSPC, TAD SPACE PRINTC JMS I MESAGE TEXT15 ISZ COLUMN ISZ COUNT3 JMP COLOOP JMS I MESAGE TEXT13 ISZ ROW ISZ COUNT2 JMP ROWLOP ISZ PLANE ISZ COUNT1 JMP PLNLOP DCA OUTDEV JMP I CUBE STAR, CLA TAD CSTAR JMP PRTSPC+1 XCDE, 11 OCODE, 317 CSTAR, 252 PAGE / /MESSAGE PRINT OUT *** *1200 PRNTXT, 0 CLA CMA TAD I PRNTXT DCA 10 ISZ PRNTXT TAD I 10 DCA MSRGHT TAD MSRGHT RTR RTR RTR JMS TYPECH TAD MSRGHT JMS TYPECH JMP PRNTXT+5 MSRGHT, 0 TYPECH, 0 AND MASK77 SNA JMP I PRNTXT TAD M40 SMA JMP .+3 TAD C340 JMP MTP TAD MINUS3 SZA JMP .+3 TAD LF JMP MTP TAD XM2 SZA JMP .+3 TAD CR JMP MTP TAD C245 MTP, PRINTC JMP I TYPECH CR, 215 MASK77, 77 M40, -40 C340, 340 XM2, -2 C245, 245 / XPRNTC, 0 DCA OUTCHR TAD OUTDEV SZA CLA JMP I PRINTL TAD OUTCHR TSF JMP .-1 TLS CLL CLA KRS TAD (-203) SNA CLA JMP I (7600) /RETURN TO MONITOR XPRNRT, JMP I XPRNTC / XPRNTL, 0 TAD OUTCHR LLS CLA CLL LSF JMP .-1 JMP XPRNRT /SUBROUTINE YESNO *** XYESNO, 0 READC TAD MYES SNA JMP YES TAD MNO SNA CLA JMP NO READC TAD MCR SZA CLA JMP .-3 JMS I MESAGE TEXT12 TAD XYESNO TAD MINUS3 DCA XYESNO JMP I XYESNO YES, ISZ XYESNO NO, CLA READC TAD MCR SZA CLA JMP NO+1 JMP I XYESNO MYES, -331 MNO, 331-316 / XWNROW, 0 TAD M4 DCA COUNT1 WINRW, TAD I M1 DCA SAVE CLA CMA DCA I SAVE TAD MOVEP CIA TAD SAVE JMS I CONVRT TAD SPACE PRINTC ISZ M1 ISZ COUNT1 JMP WINRW JMP I XWNROW PAGE / MOVE=. M=.-1 *.+100 SUM=. *.+114 WAITLST=. / DECIMAL /WAIT LIST: 22; 43; 23; 42; 26; 39; 27; 38; 1; 64 13; 52; 4; 61; 16; 49; 22; 43; 23; 42 / ROWLST=. /ROW ARRAY: 22+M; 43+M; 64+M; 1+M 23+M; 42+M; 61+M; 4+M 26+M; 39+M; 52+M; 13+M 27+M; 38+M; 49+M; 16+M 22+M; 42+M; 62+M; 2+M 23+M; 43+M; 63+M; 3+M 23+M; 38+M; 53+M; 8+M 27+M; 42+M; 57+M; 12+M 26+M; 38+M; 50+M; 14+M 27+M; 39+M; 51+M; 15+M 22+M; 39+M; 56+M; 5+M / 26+M; 43+M; 60+M; 9+M 22+M; 38+M; 54+M; 6+M 23+M; 39+M; 55+M; 7+M 26+M; 42+M; 58+M; 10+M 27+M; 43+M; 59+M; 11+M 22+M; 23+M; 24+M; 21+M 26+M; 27+M; 28+M; 25+M 22+M; 26+M; 30+M; 18+M 23+M; 27+M; 31+M; 19+M 22+M; 27+M; 32+M; 17+M 23+M; 26+M; 29+M; 20+M 38+M; 39+M; 40+M; 37+M 42+M; 43+M; 44+M; 41+M / 38+M; 42+M; 46+M; 34+M 39+M; 43+M; 47+M; 35+M 38+M; 43+M; 48+M; 33+M 39+M; 42+M; 45+M; 36+M 61+M; 1+M; 21+M; 41+M 64+M; 4+M; 24+M; 44+M 49+M; 4+M; 19+M; 34+M 61+M; 16+M; 31+M; 46+M 49+M; 13+M; 25+M; 37+M 52+M; 16+M; 28+M; 40+M 52+M; 1+M; 18+M; 35+M 64+M; 13+M; 30+M; 47+M 49+M; 1+M; 17+M; 33+M / 52+M; 4+M; 20+M; 36+M 61+M; 13+M; 29+M; 45+M 64+M; 16+M; 32+M; 48+M 4+M; 1+M; 2+M; 3+M 16+M; 13+M; 14+M; 15+M 13+M; 1+M; 5+M; 9+M 16+M; 4+M; 8+M; 12+M 16+M; 1+M; 6+M; 11+M 13+M; 4+M; 7+M; 10+M 52+M; 49+M; 50+M; 51+M 64+M; 61+M; 62+M; 63+M 61+M; 49+M; 53+M; 57+M 64+M; 52+M; 56+M; 60+M / 64+M; 49+M; 54+M; 59+M 61+M; 52+M; 55+M; 58+M 18+M; 34+M; 50+M; 2+M 19+M; 35+M; 51+M; 3+M 21+M; 37+M; 53+M; 5+M 24+M; 40+M; 56+M; 8+M 25+M; 41+M; 57+M; 9+M 28+M; 44+M; 60+M; 12+M 30+M; 46+M; 62+M; 14+M 31+M; 47+M; 63+M; 15+M 6+M; 7+M; 8+M; 5+M 10+M; 11+M; 12+M; 9+M 6+M; 10+M; 14+M; 2+M / 7+M; 11+M; 15+M; 3+M 18+M; 19+M; 20+M; 17+M 30+M; 31+M; 32+M; 29+M 21+M; 25+M; 29+M; 17+M 24+M; 28+M; 32+M; 20+M 34+M; 35+M; 36+M; 33+M 46+M; 47+M; 48+M; 45+M 37+M; 41+M; 45+M; 33+M 40+M; 44+M; 48+M; 36+M 54+M; 55+M; 56+M; 53+M 58+M; 59+M; 60+M; 57+M 54+M; 58+M; 62+M; 50+M 55+M; 59+M; 63+M; 51+M / TEST=. /TEST ARRAY: -4; 1; 1 -15; 1; 1 -3; 1; 1 -10; -10; 1 -10; -5; -10 -2; -2; 1 -2; -1; -2 -2; -1; -1 -2; 0; -2 -5; -5; -10 -5; -5; -5 -5; 0; -10 -5; 0; -5 / OCTAL / TEXT MESSAGES *** TEXT01, TEXT "%##THIS IS CUBIC, A 3 DIMENSIONAL TIC-TAC-TOE" TEXT02, TEXT "%##DO YOU WANT AN EXPLANTION OF HOW TO PLAY ? " / TEXT03, 4543 4324 1011 2340 2022 1707 2201 1540 2014 0131 2340 2411 0355 2401 0355 2417 0540 1716 4001 4064 4002 3140 6440 0231 4064 4003 2502 0556 4543 2410 0540 1702 1205 0324 4011 2340 2417 4007 0524 4064 4023 2125 0122 0523 4011 1640 0140 2217 2754 4005 1124 1005 2240 2605 2224 1103 0114 1431 5445 4304 1101 0717 1601 1414 3140 1722 4010 1722 1132 1716 2401 1414 3140 2410 2217 2507 1040 2410 0540 0325 0205 5640 1116 2025 2440 1517 2605 2340 0123 4022 1727 5445 4303 1714 2515 1654 4020 1401 1605 5640 1106 4031 1725 4004 1740 1617 2440 2701 1624 4024 1005 4002 1701 2204 4020 2211 1624 0504 4017 2524 4001 2440 0526 0522 3140 2324 0520 5445 4301 1623 2705 2240 4716 1747 4024 1740 2410 0540 2125 0523 2411 1716 4047 0217 0122 0440 2022 1116 2417 2524 4077 4756 4017 2410 0522 2711 2305 5445 4324 1005 4002 1701 2204 4011 2340 2022 1116 2405 0440 2711 2410 4031 1725 4001 2340 4717 4754 4024 1005 4003 1715 2025 2405 2245 4301 2340 4730 4754 4001 1604 4024 1005 4027 1116 1611 1607 4022 1727 4001 2340 4752 4740 5645 4343 4300 / TEXT "%#THE OBJECT IS TO GET 4 SQUARES IN A ROW, EITHER VERTICALLY," / TEXT04, TEXT "%##SHALL I GO FIRST ? " TEXT05, TEXT "%##YOUR MOVE IS " TEXT06, TEXT "%##THAT MOVE IS ILLEGAL. TRY AGAIN.%##" TEXT07, TEXT "%##I MOVE " / TEXT08, TEXT "%##LET'S CALL THIS A TIE." TEXT09, TEXT "%##YOU WON ON " TEXT10, TEXT "%##I WON ON " TEXT11, TEXT "%##HOW ABOUT ANOTHER GAME ? " / TEXT12, TEXT "%##PLEASE ANSWER 'YES' OR 'NO'.%#" TEXT13, TEXT "%#.................%#" TEXT14, TEXT ". " TEXT15, TEXT " . " / TEXT16, TEXT "%##THANK YOU FOR AN ENJOYABLE GAME.%########" TEXT17, TEXT "%##BOARD PRINTOUT ? " TEXT18, TEXT "%##ON THE LINE PRINTER ? " $