File TTT3D

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



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search