Directory of image this file is from
This file as a plain text file
[## TTT3D ##
[ BY M. SEIDEN
[ MODIFICATION OF ALGORITHM IN
[ "PROGRAMMING THE IBM 1130 AND 1800"
[ BY ROBERT K LOUDEN
[ PRENTICE-HALL [SOFT COVER]
[ CHAPTER 9 IN 1967 EDITION
[ THIS PROGRAM PLAYS A FAIRLY GOOD GAME
[BUT IT CAN BE BEATEN
[ AN IMPROVEMENT WHICH COULD POSSIBLY BE ADDED
[WOULD BE TO HAVE IT TRY TO LOOK AHEAD ON
[ALL SEQUENCES OF FORCING MOVES LEADING TO A WIN
[ NOW IT WILL ONLY FORCE ACCIDENTLY OR WHEN IT
[HAS A FORK WIN READY.
[
[
$1
JMP 20
[CLEAR BOARD
$20
#2A SETi4Q
-100 [64 SQUARES
SETi4R
3777 [MOVE -1
CLR
STAi4R
XSKi4Q
JMP p-2
[ RESET SWITCHES
LDAi
JMP 2D
STC 2G
SETi4O
6Q-1
LDAi
JMP 2L
STC 2K+1
LDAi
2525
STC 8N [REGULAR MODE
[ REMOVE POINTER DOT
#2B JMP 3V
[ CLEAR COORDINATE BUFFER
#2C SETi4P
1774
JMP 2Z [CLEAR
[#DISPLAY CONTROL LOOP
#2D KSTi
JMP 2K [READ KEYBOARD
#2E JMP 3A [DISPLAY GRID
#2F JMP 3I [DISPLAY COORDINATES
SETi4Q
3777 [MOVE ARRAY
JMP 3P [DISPLAY MOVES
#2G JMP 2D [OR [NOP,JMP 2H]
SETi4Q
6S-1
SROi
3333
JMP 3P [DISPLAY WINNING ROW
#2H KST
JMP 2E
KBD
SHDi
"#;
JMP 2Y [DELETE MOVE
SHDi
"B;
JMP 2A
JMP 3A
[READ KEYBOARD
#2K KBD
JMP 2L [OR NOP, CHECK [X,O]
SHDi
1300 [DEL
JMP 2B
SHDi
2300 [CASE
JMP 2T [COMPUTE SUGGESTED MOVE
SHDi
2200 [#
JMP 2Y [DELETE PREVIOUS MOVE
SHDi
"B;
JMP 2A [RESTART
SHDi
1200 [EOL
JMP 2P [MAKE MOVE
AZEi
JMP 3A [IGNORE "0"
ADAi
-4
APOi
JMP 3A [IGNORE SPURIOUS KEYS
ADAi
3
APO
COM [FOR +0
XSK 4P
STAi4P
XSK 4P
JMP 2Z [CLEAR REST OF BUFFER
[ COMPUTE BOARD POSITION FROM COORDINATES
#2U LDA
1775
ROL 2
ADD 1776
ROL 2
ADD 1777
ADAi
6M
STA
6K
STC 4T
LDA 4T
AZE
JMP 2C [REJECT ILLEGAL MOVE
#2J CLR
COM
STA 4T
JMP 3A [RETURN TO DISPLAY LOOP
[
[SETUP UNCOMMON MODE
#8L CLR
STC 8N
JMP 3A
[
[SET FIRST MOVE TO X OR O
#2L SHDi
"O;
JMP 2N
SHDi
"U;
JMP 8L
SAEi
"0X;
JMP 2K+2 [NOT X OR O
LDAi
2525
STC 2Q
#2M LDAi
6T-1 [X SITUATION TABLE
STC 7A
LDAi
JMP 9F
STC 3K
JMP 0
[ SET FIRST MOVE TO O
#2N LDAi
5252
STC 2Q
[ SET NEXT MOVE TO "O"
#2O LDAi
6O-1 ["O" SITUATION TABLE
STC 7A
LDAi
JMP 9O
STC 3K
JMP 0
[
[MAKE MOVE
#2P XSK 4P
JMP 3A [<3 COORDINATES SPECIFIED
LDAi
#6K 6M [NEXT MOVE
STAi4O [RECORD MOVE FOR BACKUP
STC 4T
LDAi
NOP
STC 2K+1
LDAi
1
SROi
#2Q 2525 [X-0 SWITCH
JMP 2R [X MOVE
[ O MOVE
ADAi
4
STA 4T [INTO MOVE
JMP 2M
#2S LDAi
-1
STC 7B
JMP 5A
LDAi
-6V [-NUMBER OF SITUATIONS
STC 7B
LDA
6Z
SAEi
1
AZEi [SKIP
JMP 2W [DISPLAY WINNING ROW
SETi4P
1774
SROi
#8N 0 [MODE SWITCH
JMP 2T+3 [COMPUTER MOVE
JMP 3A [RETURN TO DISPLAY
[
[ FOR X MOVE
#2R STA 4T [ENTER MOVE
JMP 2O [SETUP O AS NEXT MOVE
JMP 2S
[
[LET COMPUTER PICK NEXT MOVE
#2T SRO
8N [FLIP SWITCH
NOP
JMP 3V [CLEAR POINTER
JMP 5A [STRAT
LDA
6X
STC 8S+1
LDAi
#6Z [SITUATION NUMBER
SAEi
6V+1
APO [SKIP
JMP 8A [EDGE TESTS
STA
8G
ADAi
-5
APO
JMP 8D [MAKE THIS MOVE
STC 8J
JMP 8P [TEST WEIGHTS
#8T LDA
8G
ADAi
-10
APOi
JMP 8A [EDGE TESTS
#8S LDAi
0 [STRONG MOVE
STC 6X
#8D LDA
6X
AZEi
JMP 3W [PICK WAITING MOVE
STC 4T
#2V LDA
4T
ADAi
-6M
AZEi
COM [+0
SCR 4
STC 1775
ZTA
SCR 11
STC 1776
ZTA
SCR 11
STC 1777
SETi4P
1777
ADD 4T
JMP 6K+1 [MAKE MOVE
[
[ HIGHEST WEIGHT?
#8Q LDAi
JMP p+3
STC 5Z
JMP 6D [IN STRAT
ADD 6Z
SAEi
#8G 0 [LEVEL
JMP 8T
#8P LDA
6X
ADAi
-6M
SCR 2
ADAi
8H [MOVE IMPORTANCE TABLE
STC 4Y
ZTA
SCR 11
MULi
3
ADAi
SCR
STC p+2
LDA 4Y
SCR [COMPUTED
BCLi
7770
STAi
#8I 0 [CANDIDATE
COM
ADAi
#8J 0
APOi
JMP 8Q [TRY FOR ANOTHER
AZEi
JMP 8Q [TRY TO FIND STILL BETTER
LDA
8I
STC 8J [REPLACE
LDA
6X
STC 8S+1
JMP 8Q [TRY AGAIN
[STRONG MOVE TABLE
#8H 3113
1221
1221
3113
1221
2332
2332
1221
1221[3
2332
2332
1221
3113[4
1221
1221
3113
[
[ DISPLAY WINNING ROW
#2W SETi4U
6S-1
CLR
STAi4U
XSK 4U
JMP p-2
ADD 6X
STC 4X
#2X LDAi4X
STA
4Z
ADAi
6S-6M
STC 4Y
LDA 4Z
STA 4Y
SROi
3567
JMP 2X
LDAi
NOP
STC 2G
JMP 3A
[
[DELETE MOVE
#2Y JMP 3V [DELETE POINTER
LDA 4O
STC 4T
SRO
2Q
NOP
LDA 4T
SAEi
1
JMP p+3
JMP 2M [SETUP X
AZE [SKIP
JMP 2O [SETUP O
STA 4T
LDAi
JMP 2D
STC 2G [FORCE REGULAR DISPLAY LOOP
LDAi
-1
ADM
4O
SAEi
6Q-1
JMP 2C
JMP 2A [DELETED 1ST MOVE SO REINITIALIZE
[
[CLEAR COORDINATE BUFFER
#2Z SET 4R
4P
CLR
COM
XSK 4R
STAi4R
XSK 4R
STAi4R
XSK 4R
STAi4R
JMP 3A
[
[#DISPLAY GRID
#3A LDAi
357 [TOP LINE VERT
STC 3D+1
[ LEVEL
#3B SETi1
217 [TOP LEFT HORIZ
SETi2
-5 [HORIZ LINES PER LEVEL
#3C SETi3
-31 [DOTS PER HORIZ LINE
[ HORIZ LINE LOOP
#3D LDAi
[VERT
DIS 1
LDAi
13 [SPACE BETWEEN HORIZ DOTS
ADM
1
XSKi3
JMP 3D [NEXT DOT ON THIS LINE
LDAi
-453 [RESET HORIZ
ADM
1
LDAi
-30 [DIST BETWEEN HORIZ LINES
ADM
3D+1
XSKi2
JMP 3C [NEXT LINE
ADAi
40
STC 3F
SETi1
67 [LOW LEFT HORIZ
SETi2
-5 [DIAG LINES PER LEVEL
#3E SETi3
-13 [DOTS PER DIAG LINE
LDAi
#3F [VERT FOR DIAG LINES ON THIS LEVEL
STC p+2
[ DIAG LINE LOOP
#3G ADMi
[VERT
DIS 1
LDAi
10
ADM
1
LDAi
10 [VERT BETW. DOTS
XSKi3
JMP 3G [NEXT DOT ON DIAG
LDAi
-26 [RESET HORIZ
ADM
1
XSKi2
JMP 3E [NEXT DIAG ON THIS LEVEL
LDAi
-10 [EXTRA SPACE BETWEEN LEVELS
ADM
3D+1
SROi
3567 [4 LEVELS
JMP 3B [NEXT LEVEL
JMP 2F
[
[DISPLAY MOVE COORDINATES
#3I SETi1
700 [HORIZONTAL
SETi2
1774 [BUFFER
#3J LDAi2
APO
JMP 3K-10
ROL 1
ADAi
3Z
STC 4Q
LDAi
40 [VERTICAL
DSC 4Q
DSCi4Q
XSKi1
XSKi1
XSKi1
XSKi1
XSK 2
JMP 3J
SROi
2525
JMP 3I
SETi1
640
LDAi
42
STC 3S
#3K JMP 9F [OR JMP 9O
JMP 2F+1
JMP 2F+1 [SIC
[ END DISPLAY COORDINATES
[
[DISPLAY "X"
#9W 3
#9F SET 2
1
LDA
3S
DIS 2
STC p+6
LDAi
9
ADM
2
LDAi
[
DIS 2
ADD 9W
SET 2
1
XSKi2
XSKi2
DISi2
XSKi2
DISi2
ADD 9W
SET 2
1
XSKi2
XSKi2
DISi2
XSKi2
DISi2
SET 2
1
ADD 9W
DIS 2
STC p+5
ADD 9F+7 [=8
ADM
2
LDAi
[
DIS 2
XSKi0
JMP 0
[DISPLAY "O"
#9O SET 2
1
LDA
3S
DIS 2
XSKi2
XSKi2
DISi2
XSKi2
XSKi2
DISi2
XSKi2
XSKi2
DISi2
ADD 9W
SET 2
1
DIS 2
STC p+5
ADD 9F+7 [=8
ADM
2
LDAi
[
DIS 2
ADD 9W
SET 2
1
DIS 2
STC p+5
ADD 9F+7
ADM
2
LDAi
[
DIS 2
ADD 9W
SET 2
1
DIS 2
XSKi2
XSKi2
DISi2
XSKi2
XSKi2
DISi2
XSKi2
XSKi2
DISi2
JMP 0
[
[ DISPLAY CONTENTS
#3P LDAi
336
STC 3S
#3R SETi1
240 [CHAR HORIZ ORIGIN
LDAi4Q
APO
JMP 3T [DISPLAY POINTER
AZEi
JMP p+5
SAEi
5
JMP 9F ["X"
JMP 9O ["0"
#3U LDAi
102
ADM
1
SROi
3567
JMP 3R+2 [NEXT COLUMN IN ROW
LDAi
-440
ADM
1
LDAi
-30
ADMi
#3S VERT
SROi
3567
JMP 3R+2 [NEXT ROW
LDAi
-40
ADM
3S
SROi
3567
JMP 3R [NEXT LEVEL
JMP 2G [RETURN TO DISPLAY LOOP
[
[DISPLAY NEXT MOVE POINTER
#3T LDAi
6
ADD 3S
DIS 1
DIS 1
JMP 3U
[
[REMOVE POINTER
#3V SET 4T
6K
LDA 4T
APO
CLR
STA 4T
JMP 0
[
[NO SITUATION MATCHED, PICK WAITING MOVE
#3W LDA
6X
BCLi
7774
ADAi
6W-1
STC 3X+3
#3X LDAi
1
ADMi
[ELEMENT
SAEi
6W+25 [20 ELEMENTS IN LIST
AZEi [SKIP
JMP 3Y [NO MORE WAIT MOVES
STC 4T
LDA 4T
STC 4T
LDA 4T [MOVE
AZE
JMP 3X [TRY NEXT ITEM
JMP 2V
[
[INDICATE DRAWN GAME
#3Y LDAi
JMP 2H
STC 2G
ADD p+4 [=4
STC 1775
SRO
8N
4 [NEVER EXECUTED
SETi4P
1775
JMP 2Z
[CHAR GRID
#3Z 2101 [1
0177
4523 [2
2151
4122 [3
2651
2414 [4
0477
4177 [D
3641
[
[## STRAT [TTT3D]
[
[COMPUTE ROW SUMS SUBROUTINE
#5K LDA
0
STC 5L [SAVE RETURN
SETi4V
#7R 6S-1 [SUM
SETi4W
#7S 6R-1 [ROW
#6A CLR
STAi4V
LDAi4W
STC 4X
LDA 4X
ADM 4V
SROi
3567 [EVERY 4
JMP 6A+2
XSK 4V
JMP 6A
#5L JMP [RETURN
[
[ LITTLE LAP6 MANUSCR090#0H0Q0Z0[0