Trailing-Edge
-
PDP-10 Archives
-
decuslib20-02
-
decus/20-0031/mattac.mac
There are 2 other files named mattac.mac in the archive. Click here to see a list.
TITLE MATTAC
XALL
AC=0
PNT=10
IX=1
RND=11
TST=6
ID=2
BIX=4
ZZ=12
Y=7
X=130
O=117
HLOOP=5
CNT=3
OPDEF TYPE [TTCALL 3,0]
OPDEF TYPE1 [TTCALL 1,0]
LOC 41 ;DEFAULT UUO,DDT AND REENTER POINTS = ST1
XWD 0,ST1
LOC 74
XWD 0,ST1
LOC 124
XWD 0,ST1
LOC 137
XWD 0,2
RELOC
START: TYPE [ASCIZ/
MATRIX TIC-TAC-TOE (V.2 12-70 MEK)
/]
ST1: TYPE [ASCIZ/DO YOU WANT THE INSTRUCTIONS TYPED (Y=YES)? /]
TTCALL 4,AC
TTCALL 11,
TYPE CR
CAIN AC,"Y"
TYPE INS
TYPE [ASCIZ/DO YOU WANT A LIST OF ACCEPTED MOVES TYPED (Y=YES)?/]
TTCALL 4,AC
TTCALL 11,
TYPE CR
CAIN AC,"Y"
TYPE MVTYP
SETOM MFLAG
PLAY1: TYPE [ASCIZ /WILL YOU PLAY 'X' OR 'O'? /]
TTCALL 4,AC
TTCALL 11,
TYPE CR
CAIN AC,"X"
JRST PLX
CAIN AC,"O"
JRST PLO
TYPE [ASCIZ/PLEASE PLAY 'X' OR 'O'.
/]
JRST PLAY1
PLX: MOVEM AC,PPLAY#
MOVEI AC,"O"
MOVEM AC,CPLAY#
JRST XXX
PLO: MOVEM AC,PPLAY
MOVEI AC,"X"
MOVEM AC,CPLAY
XXX: JSR PLSTAT
GO: MOVEI AC," "
MOVEI IX,^D100
CLEAR1: MOVEM AC,A(IX)
SOJGE IX,CLEAR1
TYPE [ASCIZ/THE BOARD HAS BEEN CLEARED.
/]
JRST YMOVE
PPLAY: "?"
CPLAY: "?"
PLSTAT: 0
TYPE [ASCIZ/COMPUTER PLAYS '/]
TYPE1 CPLAY
TYPE [ASCIZ/' PLAYER PLAYS '/]
TYPE1 PPLAY
TYPE [ASCIZ/'
/]
TYPE CR
JRSTF @PLSTAT
CLR: 0
SETZM TEST
MOVE RND,[XWD TEST,TEST+1]
BLT RND,TEST+^D99 ;CLEAR TEST - TEST + 99
JRSTF @CLR
BLKTST: 0
MOVEI ZZ,10
MOVEI ID,^D99
MOVE Y,TEST(ID)
CAIN Y,@ZZ
JRST MOVOK
SOJN ID,.-3
SOJN ZZ,.-5
JRSTF @BLKTST
MOVOK: SETOM CPL
MOVEM PNT,A(ID)
MOVE RND,ID
JRST BLK
TEST:INPT: BLOCK ^D100
;RANDOM MOVE GENERATOR
RAN: MSTIME RND,
ANDI RND,177
CAILE RND,^D99
JRST RAN
MOVE AC,A(RND)
CAIE AC," "
JRST RAN
JSR CMOVE
SETOM CPL
JRST DRTST
;COMPUTER MOVE TYPEOUT SUBROUTINE
CMOVE: 0
TYPE [ASCIZ/COMPUTER MOVES /]
MOVE AC,CPLAY
MOVEM AC,A(RND)
MOVEI AC,"A"
IDIVI RND,^D10
ADD AC,RND
TYPE1 AC
ADDI RND+1,60
TYPE1 RND+1
TYPE CR
JRSTF @CMOVE
;THE MOVTST SUBROUTINE TESTS ALL POSSIBLE MOVE COMBINATIONS
;TO ASSURE THAT A LEGAL MOVE HAS BEEN MADE.
DEFINE COMP (A)
< MOVE AC,MTEST(BIX)
CAMN AC,INPT
JSR A
ADDI BIX,1>
MOVTST: TTCALL 11,
MOVE AC,INPT
MOVE AC,MTEST(BIX)
CAMN AC,INPT
EXIT
ADDI BIX,1
COMP RESTAR
COMP FBOARD
MOVE PNT,[POINT 7,INPT]
ILDB Y,PNT
CAIGE Y,"A"
JRST ERRMZ
CAILE Y,"J"
JRST ERRMZ
ILDB ZZ,PNT
CAIGE ZZ,"0"
JRST ERRMZ
CAILE ZZ,"9"
JRST ERRMZ
MOVE TST,INPT ;INPT HAS MOVE IN ASCII
TLZ TST,777760 ;CLEAR FIRST TWO ASCII CHARACTERS TO BUILD MOVE MASK
SKIPE TST
JRST ERRMZ
SUBI ZZ,60
SUBI Y,101
IMULI Y,12
ADDI Y,A
ADD ZZ,Y
MADDR: MOVE TST,@ZZ
CAIN TST," "
JRST OK
CAMN TST,PPLAY
TYPE [ASCIZ/YOU HAVE ALREADY USED THAT MOVE.
/]
CAME TST,PPLAY
TYPE [ASCIZ/THE COMPUTER HAS ALREADY USED THAT MOVE.
/]
YMOVE: SETZB BIX,INPT
MOVE PNT,[POINT 7,INPT]
SETZM MFLAG#
TYPE [ASCIZ/YOUR MOVE IS - /]
TTYIN: TTCALL 4,AC
CAIN AC,15
JRST MOVTST
IDPB AC,PNT
JRST TTYIN
OK: MOVE TST,PPLAY
MOVEM TST,@MADDR
SETZM PASS2
SETZM PASS3
SETZM PASS4
SETZM CPL#
SETZM CPLA#
JSR HSUM
SETOM CPLA
SETOM PASS1# ;PASS ONE TESTS FOR 4 IN A ROW FOR COMPUTER.
JSR CLR
JSR HSUM
JSR CLR
SETZM PASS1
JSR HSUM
JSR CLR
TWO: SETOM PASS2
JSR HSUM
JSR CLR
SETOM PASS1
JSR HSUM
JSR CLR
THREE: SETOM PASS3
SETZM PASS2
SETZM PASS1
JSR HSUM
JSR CLR
SETOM PASS1
JSR HSUM
JSR CLR
SETZM PASS3
FOUR: SETOM PASS4
SETZM PASS1
JSR HSUM
JSR CLR
SETOM PASS1
JSR HSUM
DRTST: MOVEI IX,^D99
MOVEI AC," "
TSTA: CAME AC,A(IX)
JRST TSTX
SKIPN CPL
JRST RAN
JRST YMOVE
TSTX: SOJGE IX,TSTA
TYPE [ASCIZ/THE GAME IS A DRAW. /]
JRST PCON
MTEST: ASCII /EXIT/
ASCII /RESTA/
ASCII /BOARD/
ERRMZ: SKIPN MFLAG
TYPE [ASCIZ/INVALID ENTRY, TRY AGAIN.
/]
JRST YMOVE
;RESTART CONTROL SUBROUTINE
RESTAR: 0
TYPE CR
JSR PLSTAT
JRST GO
;BOARD TYPEOUT SUBROUTINE
FBOARD: 0
TYPE CR
HD: TYPE [ASCIZ/ 0 1 2 3 4 5 6 7 8 9
/]
MOVEI IX,0
MOVEI AC,"A"
FBD1: HRLI IX,-12
TYPE1 AC
TYPE1 SP
FBD2: TYPE1 DASH
TYPE1 A(IX)
AOBJN IX,FBD2
TYPE1 DASH
TYPE1 SP
TYPE1 AC
TYPE CR
ADDI AC,1
CAIE AC,"K"
JRST FBD1
XCT HD
SETOM MFLAG
JRSTF @FBOARD
DASH: 055
SP: 40
;WIN TESTING SUBROUTINE - THE STATUS OF A MOVE COMBINATION
;IS LOADED INTO AC BY THE SUMMING ROUTINE WHICH THEN JSR'S
;HERE TO SEE IF THIS MOVE COMBINATION CONTAINS A WIN.
WINTST: 0
MOVEI PNT,@PPLAY
IMULI PNT,5
CAIN AC,5*X
JRST XWIN
CAIN AC,5*O
JRST OWIN
JRSTF @WINTST
XWIN: CAMN AC,PNT
JRST PWIN
JRST CWIN
OWIN: CAMN AC,PNT
JRST PWIN
CWIN: TYPE [ASCIZ/COMPUTER HAS WON. /]
JRST PCON
PWIN: TYPE [ASCIZ/YOU HAVE WON. /]
PCON: TYPE [ASCIZ/DO YOU WANT A FINAL BOARD TYPEOUT? (Y=YES) /]
TTCALL 4,AC
TTCALL 11,
MOVEM AC,TEMP#
MOVEI AC,"*"
MOVEM AC,@13
MOVEM AC,@14
MOVEM AC,@15
MOVEM AC,@16
MOVEM AC,@17
MOVE AC,TEMP
CAIN AC,"Y"
JSR FBOARD
PCONX: TYPE [ASCIZ/WOULD YOU LIKE TO PLAY ANOTHER GAME? (Y=YES) /]
TTCALL 4,AC
TTCALL 11,
TYPE CR
CAIN AC,"Y"
JRST GO
EXIT
;SUMMING NETWORK - THIS SUBROUTINE ADDS ALL WIN COMBINATIONS
;AND DOES A JSR TO WINTST FOR EACH ONE TO TEST FOR A WIN.
HSUM: 0
SETZM TSTLOC
MOVEI HLOOP,12
MOVEI CNT,0
MOVEI IX,A
LOOPA: HRLI CNT,-6
LOOPB: MOVEI AC,0
ADD AC,0(IX)
ADD AC,1(IX)
ADD AC,2(IX)
ADD AC,3(IX)
ADD AC,4(IX)
DEFINE SETUP
< MOVEI 13,@.-5
MOVEI 14,@.-5
MOVEI 15,@.-5
MOVEI 16,@.-5
MOVEI 17,@.-5
JSR WINTST
SKIPE CPLA
JSR CHECK>
SETUP
AOJ IX,
AOBJN CNT,LOOPB
ADDI IX,4
SOJN HLOOP,LOOPA
VSUM: MOVEI HLOOP,12
MOVEI IX,0
LOOPC: HRLI CNT,-6
LOOPD: MOVEI AC,0
ADD AC,A(IX)
ADD AC,B(IX)
ADD AC,C(IX)
ADD AC,D(IX)
ADD AC,E(IX)
SETUP
ADDI IX,12
AOBJN CNT,LOOPD
SUBI IX,^D59
SOJN HLOOP,LOOPC
RSUM: MOVEI HLOOP,6
MOVEI IX,0
LOOPE: HRLI CNT,-6
LOOPF: MOVEI AC,0
ADD AC,A+4(IX)
ADD AC,B+3(IX)
ADD AC,C+2(IX)
ADD AC,D+1(IX)
ADD AC,E (IX)
SETUP
ADDI IX,12
AOBJN CNT,LOOPF
SUBI IX,^D59
SOJN HLOOP,LOOPE
LSUM: MOVEI HLOOP,6
MOVEI IX,0
LOOPG: HRLI CNT,-6
LOOPH: MOVEI AC,0
ADD AC,A (IX)
ADD AC,B+1(IX)
ADD AC,C+2(IX)
ADD AC,D+3(IX)
ADD AC,E+4(IX)
SETUP
ADDI IX,12
AOBJN CNT,LOOPH
SUBI IX,^D59
SOJN HLOOP,LOOPG
SKIPE TSTLOC#
JSR BLKTST
JRSTF @HSUM
CHECK: 0
DEFINE TEST (X)
< MOVE Y,@X
CAIE Y," "
JRST .+4
SUBI X,A
SETOM TSTLOC
AOS TEST(X)>
MOVE PNT,CPLAY
CAIE PNT,"X"
JRST XTEST
OTEST: SKIPE PASS1
JRST XTEST+2
SKIPE PASS2#
JRST COMP2
SKIPE PASS3#
JRST COMP3
SKIPE PASS4#
JRST COMP4
CAIE AC,4*O+40
JRSTF @CHECK
JRST BLOCK1
COMP2: CAIE AC,3*O+2*40
JRSTF @CHECK
JRST BLOCK1
COMP2A: CAIN AC,3*X+2*40
JRST BLOCK1
JRSTF @CHECK
COMP3: CAIE AC,2*O+3*40
JRSTF @CHECK
JRST BLOCK1
COMP3A: CAIN AC,2*X+3*40
JRST BLOCK1
JRSTF @CHECK
COMP4: CAIE AC,1*O+4*40
JRSTF @CHECK
JRST BLOCK1
COMP4A: CAIN AC,1*X+4*40
JRST BLOCK1
JRSTF @CHECK
BLOCK1: TEST 15
TEST 16
TEST 14
TEST 17
TEST 13
JRSTF @CHECK
BLK: JSR CMOVE
SETZM CPLA
JSR HSUM
JRST YMOVE
XTEST: SKIPE PASS1
JRST OTEST+2
SKIPE PASS2
JRST COMP2A
SKIPE PASS3
JRST COMP3A
SKIPE PASS4
JRST COMP4A
CAIN AC,4*X+40
JRST BLOCK1
JRSTF @CHECK
;RESERVE 100 LOCATIONS FOR THE BOARD MATRIX
A: BLOCK 12
B: BLOCK 12
C: BLOCK 12
D: BLOCK 12
E: BLOCK 12
F: BLOCK ^D10*5
;ASCII TEXT LIST
INS: ASCIZ/
MATRIX TIC-TAC-TOE IS PLAYED ON A TEN BY TEN MATRIX IN A MANNER
SIMILAR TO ORDINARY TIC-TAC-TOE. THE PLAYER AND THE COMPUTER WILL
ALTERNATELY PLACE A MOVE AT ONE OF THE MATRIX COORDINATES. EACH
WILL TRY TO PLACE FIVE MOVES IN A ROW TO EFFECT A WIN. THE PLAYER
WILL ALWAYS BE GIVEN THE FIRST MOVE. THIS FORCES THE COMPUTER TO
PLAY DEFENSIVELY AND GIVES THE PLAYER A REASONABLE PROBABILITY OF
WINNING. THERE ARE 192 WIN COMBINATIONS ON THE BOARD. GOOD LUCK.
/
MVTYP: ASCIZ/
THE AVAILABLE MOVES ARE:
(A0-J9) -BOARD COORDINATES AT WHICH THE PLAYER WISHES TO PLACE
HIS MOVE.
EXIT -TERMINATES THE GAME.
BOARD -PRINTS MATRIX SHOWING ALL MOVES THAT HAVE BEEN MADE .
RESTART -CLEARS THE BOARD AND RESTARTS THE GAME.
/
CR: ASCIZ/
/
END START