diff --git a/Makefile b/Makefile
index ccc2bbef..e381efc5 100644
--- a/Makefile
+++ b/Makefile
@@ -23,11 +23,11 @@ SRC = system syseng sysen1 sysen2 sysen3 sysnet kshack dragon channa \
jim jm jpg macrak maxdoc maxsrc mrg munfas paulw reh rlb rlb% share \
tensor transl wgd zz graphs lmlib pratt quux scheme gsb ejs mudsys \
draw wl taa tj6 budd sharem ucode rvb kldcp math as imsrc gls demo \
- macsym lmcons dmcg hack hibou agb gt40 rug maeda
+ macsym lmcons dmcg hack hibou agb gt40 rug maeda ms
DOC = info _info_ sysdoc sysnet syshst kshack _teco_ emacs emacs1 c kcc \
chprog sail draw wl pc tj6 share _glpr_ _xgpr_ inquir mudman system \
xfont maxout ucode moon acount alan channa fonts games graphs humor \
- kldcp libdoc lisp _mail_ midas quux scheme manual wp
+ kldcp libdoc lisp _mail_ midas quux scheme manual wp chess ms
BIN = sys2 emacs _teco_ lisp liblsp alan inquir sail comlap c decsys moon \
graphs draw datdrw fonts fonts1 fonts2 games macsym maint imlac \
_www_
diff --git a/build/misc.tcl b/build/misc.tcl
index 9fc5370a..7b0b92bd 100644
--- a/build/misc.tcl
+++ b/build/misc.tcl
@@ -404,6 +404,10 @@ respond "with ^C" "DSPLY==0\r"
respond "\n" "CHEOPS==0\r\003"
expect ":KILL"
+# MachHack VI with 340 display.
+respond "*" ":midas games;ts c_rg;c\r"
+expect ":KILL"
+
# CKR
respond "*" ":midas games;ts ckr_agb;ckr\r"
expect ":KILL"
diff --git a/doc/chess/-read-.-this- b/doc/chess/-read-.-this-
new file mode 100644
index 00000000..06e4bfd4
--- /dev/null
+++ b/doc/chess/-read-.-this-
@@ -0,0 +1 @@
+MacHack VI needs this directory to work.
diff --git a/doc/games.md b/doc/games.md
index 9be690c0..9865e63a 100644
--- a/doc/games.md
+++ b/doc/games.md
@@ -29,6 +29,11 @@ a five-letter word. To play this, type `:jotto`.
This is Richard Greenblatt's chess program. Type `:games;ocm` to play.
For instructions, see CHPROG; OCM ORDER.
+There is also an older version `:games:c` which can draw the chess
+board on a Type 340 display. Type
+FANCYTAB2Enter to get the fanc
+chess board.
+
### Maze War
First multi-user first person shooter. Type `:games;maze` to play.
diff --git a/doc/ms/cheg.desc b/doc/ms/cheg.desc
new file mode 100644
index 00000000..ede4ce83
--- /dev/null
+++ b/doc/ms/cheg.desc
@@ -0,0 +1,266 @@
+.pgn
+.quote \
+.nj
+.ss
+.psize 1000
+.paperw 100
+.pl 1000
+.l 100
+.fi
+. CHEG is the CHess EndGame interpreter. The endgame program to
+be interpreted is read in by the RENDG (Read ENDGame) command, which
+may appear in a file to be RS'ed. The program is used only if EGSW
+is positive. The format for an endgame program is as follows:
+.sp 1
+ENTRY a&b,c&d,e where a and c are each one of the following:
+. K,N,B,R,2N,BN,2B,B2N,2BN,BR,RN,RB,2R,R2N,RBN,R2B,Q,QN,QB;
+. b and d are each of the form "kP", where k is between 0 and 9; and
+. e is of one of the forms "=m", "m" where m is between -9 and 9.
+. If k is 1 it may be omitted, and if b or d is 0P,
+ it and the preceding "&" may be omitted.
+ In addition, ",e" may be omitted.
+.nf
+tag: inst arg1,arg2,arg3
+tag: inst arg1,arg2,arg3
+ .
+ .
+ .
+ENTRY a&b,c&d,e
+tag: inst arg1,arg2,arg3
+ .
+ .
+ .
+END
+.fi
+.sp 1
+The ENTRY pseudoinstruction says "start here if specified entry condition
+is satisfied" where the entry condition specifies the types and numbers
+of pieces and pawns on the board. The pieces, and the number of pawns if
+specified, must match exactly with the condition of the board. The pieces
+and pawns specified first are those of the side to move (hereafter called
+"white"). e, if it is included, is a condition on the difference between
+the number of white pawns and the number of black pawns. If more than one
+ENTRY is satisfied, the first is used. If no entry condition is satisfied,
+the endgame program is not used.
+.break
+Tags on instructions are optional, and are followed by : and the instruction
+being tagged.
+Instructions may take a variety of argument types. These are
+.nf
+ 1 read-only variable
+ 2 written variable
+ 3 variable used for both reading and writing within the same instruction
+ 4 tag
+ 5 condition
+ 6 ordering operation
+
+.fi
+Variable values may be of one of the following types:
+.nf
+ 0 undefined
+ 1 logical
+ 2 integer
+ 3 set (actually a vector) of variable values
+ 4 piece
+ 5 square
+ 6 move
+
+.fi
+A literal of type 1, 2, or 3 may be specified by preceding the
+desired value by ", e.g. "5, "(), "(1,2,(3)).
+.break
+A piece may be specified by a piece-valued variable, a square-valued
+variable (specifying the piece on that square), or a
+move-valued variable (specifying the piece being moved).
+A square may be specified by a square-valued variable, a piece-valued
+variable (specifying the location of that piece), or a
+move-valued variable (specifying the square to which the
+piece being moved is moved).
+.sp 1
+The following read-only variables are initially defined:
+. X undefined except inside a subroutine where it is the
+ subroutine's argument, or during a plan where it is
+ the plan variable
+. DEPTH current depth (in plies) of search
+. LM set of legal moves
+. PG set of pawn groups (a pawn group is a set of pawns separated from
+ all other pawns by files with no pawns on them)
+. WK this and the 31 following are the pieces
+ on the board and are undefined otherwise
+. WQ
+. WR
+. WR2
+. WB
+. WB2
+. WN
+. WN2
+. WP
+. WP2
+. WP3
+. .
+. .
+. .
+. WP8
+. BK
+. .
+. .
+. .
+. BP8
+.sp 1
+The following conditions are defined (negation of a condition is accomplished
+by preceding its name by #):
+. always true
+. DEFD if defined
+. =0 if integer = 0
+. <0 if integer < 0
+. >0 if integer > 0
+. ODD if integer odd
+. T if logical variable = T
+. EMPTY if set variable = ()
+. FAR if specified square is on opposite side of board from SIDE
+. RF if specified square is on rook file
+. NF if specified square is on knight file
+. NNF if specified square is on knight file and on same side of board as SIDE
+. SAFE if WP can be reached by WK before BK (simpleminded: doesn't check
+ if king moves are legal)
+. KING if specified piece is king
+. PAWN if specified piece is pawn
+. QUEEN if specified piece is queen
+. ROOK if specified piece is rook
+. NIGHT if specified piece is knight
+. BISH if specified piece is bishop
+. PASSD if specified pawn is passed
+. PDP if specified pawn is defended by a pawn
+. WSQ if specified square is white
+. WPC if specified piece is white
+. CAPT if move is a capture
+. OPP if move leaves WK at distant opposition to BK
+. RWK= if move keeps WK on the same rank
+.sp 1
+The following order operations are defined (preceded by # for reverse ordering):
+. no ordering specified
+. DEEP move a > move b iff rank(move a) > rank(move b)
+.sp 1
+The following instructions are defined:
+. BREAK constant,var1,var2 Print out the PC, the instruction
+ and the specified variables; then .VALUE. Program can
+ be resumed by $P.
+. RETURN var Subroutine return of var.
+. COND condition,tag1,tag2 If variable returned by subroutine
+ call to tag1 satisfies condition, go to tag2. Otherwise
+ continue with next instruction in sequence.
+. CONDV condition,var,tag If var satisfies condition, go to tag.
+ Otherwise continue with next instruction in sequence.
+. CONDT tag1,var,tag2 If subroutine call to tag1 with X
+ set to var returns T, go to tag2; if it returns F, continue
+ with next instruction in sequence.
+. CONDF tag1,var,tag2 If subroutine call to tag1 with X
+ set to var returns F, go to tag1; if it returns T, continue
+ with next instruction in sequence.
+. JUMP< var1,var2,tag If var1 < var2 go to tag. Otherwise
+ continue with next instruction in sequence.
+. JUMP= similarly
+. JUMP> similarly
+. JUMP#< similarly (# means not)
+. JUMP#= similarly
+. JUMP#> similarly
+. SET var1,tag,var2 Subroutine call to tag with var2 as argument X;
+ set var1 to value returned.
+. SETV var1,var2 Set var1 to value of var2.
+. SETSQ var1,var2,var3 Set var1 to square with rank var2 and file var3.
+. SETMOV var1,var2,var3 Set var1 to move with piece specified by var2
+ and square specified by var3.
+. EXCH var1,var2 Exchange the values of var1 and var2.
+. ORDER var1,var2,order Exchange the values of var1 and var2 iff var1 > var2
+ according to order.
+. PLAY var,cond,order Play the first move (according to order) in the
+ set given by var satisfying the condition cond. If there are no
+ such moves, continue to the next instruction.
+ A VALRUT or VALON should have been executed before
+ this instruction, and the last value thus given is
+ returned to the main Chess program.
+. PLAYB var,cond,order Try all moves given by set var satisfying condition
+ cond. Moves are tried in order specified. The best move found is
+ played, and its value returned to the main program.
+ If there are no moves to try, continue to the next
+ instruction.
+. TRY var,cond,order Try all moves given by set var satisfying condition
+ cond. Moves are tried in order specified. The best move found is
+ remembered along with its value.
+. PLAN tag,var1,var2 Set plan to tag. This means that at
+ deeper levels of recursion with the same side to move,
+ the endgame program will be started at the tag instead
+ of using the ENTRY's to find the starting place. The
+ plan variable is set to the value of var2. Using the
+ specified plan, try all moves in the set var1.
+. UNPLAN Don't use plan any more, and undefine the plan variable.
+. DONE Return to main program with best move found by
+ TRYs and PLANs together with its value.
+. RETBET var1,var2,var3 Return to main program with best move found by
+ TRYs and PLANs together with its value, if this value is better
+ for white than the value specified by var1,var2,var3.
+. VALRET var1,var2,var3 Return to the main chess program the value
+ var1 winning chances, var2 losing chances, with certainty var3.
+. VALRUT var1,var2,var3 Same as VALRET, but don't return if at top level.
+. VALON var1 var2,var3 Same as VALRET, but don't ever return to chess program.
+. LEAVE Return to main program for its evalulation and/or move.
+. SELECT var1,tag,var2 Set var1 to the subset of var2 whose elements
+ give T when subroutine given by tag is called.
+. SELECC var1,cond,var2 Set var1 to subset of var2 whose elements satisfy cond.
+. PAIR var1,var2,var3 Set var1 to the set consisting of var2 followed by var3.
+. MAP var1,tag,var2 Set var1 to the set obtained by substituting for
+ each element of var2 the value returned by the subroutine specified
+ by tag when given element as arg.
+. MEMBER var1,var2,var3 Set var1 to T or F depending on whether or not var2
+ is an element of var3.
+. MEMNUM var1,var2,var3 Set var1 to the least integer n such that var2 is the nth element of
+ var3, or 0 if var2 is not an element of var3.
+. INTERS var1,var2,var3 Set var1 to the intersection of sets var2 and var3
+ where the elements are in the same order as those of var2.
+. UNION var1,var2,var3 Set var1 to the union of sets var2 and var3
+ where the elements of var2 come first (and without reordering)
+ followed by the elements of var3-var2 in the order of var3.
+. DIFFER var1,var2,var3 Set var1 to var2-var3 with the order
+. of var2.
+. APPEND var1,var2,var3 Set var1 to the set gotten by appending var3 to var2.
+. PIECE var1,var2 Set var1 to piece specified by var2.
+. SQUARE var1,var2 Set var1 to square specified by var2.
+. SIDE var1,var2 Set var1 to side of board given by square specified by var2.
+ 0 is kingside, 1 is queenside.
+. RANK var1,var2 Set var1 to rank (with respect to white)
+ of square specified by var2.
+. FILE var1,var2 Set var1 to file of square specified by var2.
+. SCOLOR var1,var2 Set var1 to color of square specified by var2;
+ 0 for white, 1 for black.
+. PCOLOR var1,var2 Set var1 to color of piece specified by var2.
+. MVDIST var1,var2,var3 Set var1 to king-move distance between squares specified
+ by var2 and var3.
+. INSQ var1,var2,var3 Set var1 to T or F depending on whether or not
+ king specified by var2 is in square of pawn specified
+ by var3 (depends on side to move in usual way).
+. OPP var1,var2 var3 Set var1 to T or F depending on whether or not
+ squares specified by var2 and var3 are in distant opposition.
+. SQ>RNK var1,var2,const Set var1 to the square with same file as square specified
+ by var2, but with rank greater by const.
+. CARD var1,var2 Set var1 to number of elements in var2.
+. GETEL var1,var2,var3 Set var1 to the var3th element of var2. (Negative
+ var3 counts from right end of set.)
+. SETEL var1,var2,var3 Set the var3th element of var2 to var1.
+. INSERT var1,var2,var3 Insert var1 before the var3th element of var2.
+. UNSERT var1,var2,var3 Remove and set var1 to the var3th element of var2.
+. EXCHWE var1,var2,var3 Exchange var1 and the var3th element of var2.
+. EXCHEL var1,var2,var3 Exchange the var2th and var3th elements of var1.
+. NOR var1,var2,var3 Set var1 to logical nor of var2 and var3.
+. OR var1,var2,var3 Set var1 to logical or of var2 and var3.
+. AND var1,var2,var3 Set var1 to logical and of var2 and var3.
+. ADD var1,var2,var3 Set var1 to sum of var2 and var3.
+. SUB var1,var2,var3 Set var1 to difference of var2 and var3.
+. MUL var1,var2,var3 Set var1 to product of var2 and var3.
+. DIV var1,var2,var3 Set var1 to the quotient when var2 divided by var3.
+. MOD var1,var2,var3 Set var1 to the remainder when var2 divided by var3.
+. DIF var1,var2,var3 Set var1 to absolute value of difference of var2 and var3.
+. MIN var1,var2,var3 Set var1 to minimum of var2 and var3.
+. MAX var1,var2,var3 Set var1 to maximum of var2 and var3.
+. ABS var1,var2 Set var1 to absolute value of var2.
+.end
+
\ No newline at end of file
diff --git a/doc/ms/chess.memo b/doc/ms/chess.memo
new file mode 100644
index 00000000..f639974e
--- /dev/null
+++ b/doc/ms/chess.memo
@@ -0,0 +1,336 @@
+ALG=0 INPUT
+ALLT DEBUG
+AWKS=-1 TOURN
+BCS=1 PARAM
+BD OUTPUT
+BOOK=1 PARAM
+CASSW=0 PARAM
+CBOOK INPUT
+CLEAR INPUT
+CLKKLU=-1 TIME
+CSQSW=1 ?
+DBDIS=1 DISPLAY
+DFDSW=0 PARAM
+DRAW MOVE
+EGSW=1 PARAM
+FANCY=-2 DISPLAY
+FASTER PARAM
+FCSW=1 PARAM
+FILE OUTPUT
+HASH=1 PARAM
+HBPT DEBUG
+HOPEN DEBUG
+HPV OUTPUT
+HRCSW=1 INTERN
+HREAD DEBUG
+HSSW=1 DEBUG
+ICLOCK=0 TIME
+ICSW=-2 DEBUG
+KINGSA=1 PARAM
+LIST OUTPUT
+M MOVE
+MVAN=1 ?
+MVNSW=1 ?
+PARCSW=1 ?
+PARSW=0 TOURN
+PB CONTROL
+PCGSW=2 PARAM
+PG OUTPUT
+PMGDB=0 DEBUG
+PMSASW=1 PARAM
+PN CONTROL
+PNT=0 OUTPUT
+PS CONTROL
+PSVD=0 DISPLAY
+PUT INPUT
+PW CONTROL
+RBOOK INPUT
+RBOOKB INPUT
+RENDG INPUT
+REPLAY DEBUG
+RESET INPUT
+RHDSK DEBUG
+RPOS INPUT
+RS INPUT
+SASW=0 PARAM
+SAVE OUTPUT
+SDS=0 DEBUG
+SE=1 TOURN
+SETC=2 PARAM
+SETCL TIME
+SETD=4 PARAM
+SETEST DEBUG
+SETF=2 PARAM
+SETFD=2 PARAM
+SETP=6 6 3 3 2 PARAM
+SETPVD=6 PARAM
+SETSD=2 PARAM
+SETSSD=0 PARAM
+SETW=6 PARAM
+SFS=1 PARAM
+SIDE INPUT
+SKIP INPUT
+SLASW=0 PARAM
+SLOWER PARAM
+SLS=0 DEBUG
+SMSS=1 PARAM
+SMVD=0 DEBUG
+SPARM TOURN-PARAM
+SPOT INPUT
+SPVS=0 DEBUG
+SQCTSW PARAM
+SSSW=1 PARAM
+STOP TIME
+STOPIN ?
+SVHDSK DEBUG
+T DEBUG
+TP DEBUG
+TPC DEBUG
+TPDV DEBUG
+TRACE DEBUG
+TSW=1 OUTPUT
+TTIME TIME
+TWOGTS=0 TOURN-CONTROL
+U MOVE
+UREAD INPUT
+UWRITE OUTPUT
+WALLP=-1 OUTPUT
+WBOOKB OUTPUT
+WHDSK DEBUG
+WPOS OUTPUT
+
+ ?
+CSQSW=1
+MVAN=1
+MVNSW=1
+PARCSW=1
+STOPIN
+
+
+ CONTROL
+ Quit. Returns control to the top level and does a PN.
+ Same as M, but needs no delimiter.
+ Same as U, but needs no delimiter.
+M This instruction tells the program to make a move.
+U This instruction takes back the last move. It includes a
+ PN (play neither) to prevent the program from trying to make a move
+ it just took back. Therefore, after using this instruction it is
+ necessary to feed in another PW or PB if you wish the program to continue playing.
+PW Play white. The program makes moves for white, awaits input when black is to move.
+PB Play black. The program makes moves for black, awaits input when white is to move.
+PS Play self. The program moves for both sides.
+PN Play neither. The program awaits input.
+TWOGTS=0 If 1, think while other guy thinks.
+ While in this mode, commands must be preceded by a colon.
+ Before a move has been typed in,
+ a rubout will cause all buffered commands to be aborted so that
+ a move can immediately be typed in. If the move is terminated by
+ "DRAW?" instead of a carriage return, the program will eventually
+ type its move followed by "ACCEPT" or "DECLINE". If the move
+ is terminated by ":", the program will eventually wait for a command
+ before continuing to TWOGT.
+ After a move is typed in (the input format for normal moves is
+ piece/square-square or piece/square*piece/square,
+ but anything redundant may be omitted), the move will be typed
+ back in full format followed by a question mark. If it is correct,
+ type a period to have it inputted. Any other character will cause
+ the program to request a move again. Illegal moves will be so
+ commented. Ambiguous moves will cause the program
+ to make its best guess of what you meant, and will type
+ this move in full format together
+ with the warning "AMBIGUOUS". Special moves:
+ O-O or O O for king-side castling;
+ O-O-O or O O O for queen-side castling;
+ PxP EP or PxG etc. for en passant capture;
+ P-K8=Q etc. for promotion.
+
+ DEBUG
+ALLT Trace all plausible moves.
+HBPT Hash BreakPoinT. Set a breakpoint which breaks
+ if current position is reached in search.
+HOPEN Takes file specification as argument. Opens file for
+HREAD Searches forward in HOPEN'ed file for hash table
+ relevant to current position and reads it in.
+HSSW=1 Hash Save SWitch.
+ -1 Open file CHASHT > for writing and save hash table in it after each move
+ 0 Don't save hash table
+ 1 Save hash table in core after each move
+ICSW=-2 Incremental Cat (calculate attack) SWitch.
+ -2 Spot check
+ -1 Always check
+ 0 Don't use IC
+ 1 Use IC
+PMGDB=0 When positive, displays pins, threats and constraints
+ after move typed in.
+REPLAY Takes file specification as argument. Types "PLAY WHITE?" Answer
+ "Y" or "N". Then asks "PLAY BLACK?" Again answer
+ "Y" or "N". If not playing side to move, program reads a move
+ from the file. If playing side to move, program makes a move to
+ compare with move from file, but uses move from file. Normally
+ this feature is used with WALLP=-1.
+RHDSK Takes file specification as argument. Read hash table from
+ specified file, saving it in core.
+SDS=0 Set Display Switch.
+SLS=0 Set look switch.
+ 0,0 Normal mode of operation
+ 1,0 Gives PMG display for current position when given a
+ make move command (no move is made)
+ 1,1 Does a normal search but makes display and pauses at each node.
+ Type a space to continue to the next node
+ or type an integer to continue to the next node at that ply
+ 2,0 Does a normal search and displays feedover conditions.
+ Type a space to continue
+SETEST Takes numeric argument. Set estimate of value of position.
+SMVD=0 When positive, gives analysis of principal variations
+ stemming from each playsible move.
+SPVS=0 When positive, prints static evaluator and development values
+ after move typed in.
+SVHDSK Takes file specification as argument. Save hash table
+ as the specified file.
+T Trace. With no argument, traces static board evaluator
+ evaluation of current position. With a move for argument,
+ traces PMG evaluation of that move.
+TP Trace Positional.
+TPC Types plausible captures and their values.
+TPDV Types development values.
+TRACE Same as "T".
+WHDSK Takes file specification as argument. Write hash table
+ which is stored in core as the specified file.
+
+ DISPLAY
+DBDIS=1
+FANCY=-2 -2 No display
+ -1 Whose move
+ 0 Board position in characters
+ 1 Board
+ 2 Board with game so far
+ Does FANCY -2, but at interrupt level.
+ Turns off display until input is requested by program.
+ (Done at interrupt level.)
+PSVD=0 When positive, displays principal variation and its value after
+ program makes a move.
+
+ INPUT
+ALG=0 1 Set preferred input to algebraic notation. Output is also algebraic.
+ -1 Output is in both notations.
+CBOOK Continue reading book after an error in an RBOOK.
+CLEAR Removes all pieces from board.
+PUT piece square Puts specified piece
+ (same format as is outputted by BD) on specified square
+ (same format as is outputted in a move by the
+ program, but always with respect to white).
+RBOOK Read book of openings. (See description of book format.)
+RBOOKB Takes file specification as argument. Reads a file
+ outputted by the WBOOKB command.
+RENDG Read endgame program. (See CHEG description.)
+RESET Restore initial position. Does a PN. RESET n restores to move n,
+ e.g. RESET 5 backs up the game to the point at which
+ white is about to make his 6th move.
+RPOS Takes next eight lines
+ to be a board as outputted by the BD command, and sets up the
+ specified position.
+RS Takes file specification as argument. Reads in commands from file.
+ (Note that moves are commands,
+ so this command can be used to restore SAVE'd games.)
+SIDE=W Side to move.
+SKIP Takes numeric argument. Skips to the next occurrence of "["
+ followed by its argument in the file being read.
+SPOT Give handicap, e.g. SPOT QVBR removes white's
+ queen and black's queen bishop and queen
+ rook, also moving black's queen rook pawn to R3. In
+ general, "P", "N", "B", "R", and "Q" removes the KBP, the QN, the QB, the QR, and
+ the Q respectively for the appropiate side (the side is initially white,
+ and is switched by "V"); in addition, removal of the QR moves
+ the QRP to R3.
+UREAD Takes file specification as argument. Select auxiliary device input.
+ Initiates readin from auxiliary device.
+
+ INTERN
+HRCSW=1
+
+ OUTPUT
+ Turns on teletype output. (Done at interrupt level.)
+ Turns off teletype output. (Done at interrupt level.)
+ALG=0 See under input.
+DRAW Asks if machine wants a draw.
+BD Prints out the board.
+PG Prints out the game.
+FILE Closes output file.
+HPV Prints out principal variation from current position
+ as gotten from hash table.
+LIST List program commands and parameters with their current values.
+PNT=0 1 Output to printer
+ 0 Output to TTY
+ -1 Output to secondary output device
+SAVE Takes file specification as argument. Writes file
+ consisting of the moves made, similar to the output of a PG command.
+TSW=1 Type lines after typing out move.
+UWRITE Takes file specification as argument. Opens auxiliary
+ output file.
+WALLP=-1 1 Send debugging information (wallpaper) to printer
+ 0 Don't output wallpaper
+ -1 Send wallpaper to file WALLP >
+WBOOKB Takes file specification as argument. Writes binary
+ file specifying the book of openings. This file can be read in by
+ the RBOOKB command.
+WPOS Takes file specification as argument. Writes file consisting of
+ "RPOS", followed by output of BD, followed by "SIDE W"
+ or "SIDE B" depending on whether white or black is to move.
+
+ PARAM
+BCS=1 If positive, use board control option in static evaluator.
+BOOK=1 If positive, use opening book.
+CASSW=0
+DFDSW=0 Delayed FeeDover SWitch.
+EGSW=1 End Game SWitch. If positive, use endgame program.
+FASTER Go to next lower (faster) parameter set.
+FCSW=1 Forward Cutoff SWitch. If positive, use forward cutoff heurisitic.
+HASH=1 -1 Don't use hash feature
+ 0 Use hash for draw detection only
+ 1 Use hash for detecting duplication of search. Obtain
+ value from table instead of continuing search.
+KINGSA=1 KING SAfety. If positive, use king safety term in static board evaluator.
+PCGSW=2 Additional depth (after SETD) for PMG in PCG mode.
+PMSASW=1 Poor Man's Surprise Analysis SWitch. (# of ply)
+SASW=0 Surpurise Analysis SWitch.
+SETC=2 Set plies to look at all captures.
+SETD=2 Basic search depth for PMG.
+SETF=2 Maximum number of ply to look for feedovers.
+SETFD=2 Maximum number of extra ply for feedovers
+ (only those due to possibility of value being worse for
+ side to move are allowed).
+SETP=6 6 3 3 2 Maximum number of positional (only) moves to look at
+ at each ply. [See SETW.] [Not implemented.]
+SETPVD=6 Using new PCG, sets depth to look at good moves.
+SETSD=2 Set Secondary Search Depth.
+SETSSD=0 Set Secondary Search Starting Depth.
+SETW=6 Basic search width. Takes a list of numbers separated by spaces,
+ applying to plies 1,2,3,...; the last number applies to all higher plies.
+SFS=1 Set Feedover Stop. If positive,
+ stop feedover in case a feedover is obviously not called for (i.e.
+ in resulting position one side has lost a piece and is not
+ threatening anything of equal value).
+SLASW=0 Set Line Analysis SWitch.
+SLOWER Go to next higher (slower) parameter set.
+SMSS=1 Set Multiple Search Switch.
+SQCTSW
+SSSW=1 Search Strategy SWitch.
+
+ TIME
+CLKKLU=-1 -1 Run time according to side to move
+ 0 Don't run time.
+ 1 Run time according to clock kludge
+ICLOCK=0 1 inverts sense of clock kludge.
+SETCL "B" or "W" followed by time to set clock.
+STOP Stop clock.
+TTIME Type out times used by white and black.
+
+ TOURN
+AWKS=-1 When non-negative, send all TTY output to T!AWKS (e.g. T27 if AWKS=23)
+ as well as to TTY.
+PARSW=0 When positive, machine sets parameters.
+SPARM Takes numeric argument between 0 and 6.
+ Stores current parameters as specified parameter set
+SE=1 Sets an echo to cut off local people
+ if tournament console being used.
+
\ No newline at end of file
diff --git a/doc/programs.md b/doc/programs.md
index c81d92b9..2bcbb671 100644
--- a/doc/programs.md
+++ b/doc/programs.md
@@ -162,7 +162,7 @@
- NUDIR, create user directory.
- NWATCH, small watch display.
- OBS, observe system activities.
-- OCM, Richard Greenblatt's Mac Hack VI chess program.
+- OCM/C, Richard Greenblatt's Mac Hack VI chess program.
- OCTPUS, print character representations.
- OS, realtime TTY spy.
- OTHELLO, the original Othello game -- simpler than Go.
diff --git a/src/ms/cheg.104 b/src/ms/cheg.104
new file mode 100644
index 00000000..110038c3
--- /dev/null
+++ b/src/ms/cheg.104
@@ -0,0 +1,2715 @@
+;;;END GAME INTERPRETER
+
+EGRTTY=ERRTTY 1,
+EGLOGT==1
+EGINTT==2
+EGSETT==3
+EGPCT==4
+EGSQT==5
+EGMOVT==6 ;MOVE FORMAT: 2.9-2.7 FOR SPECIAL MOVES; 2.6-2.1 PIECE, 1.7-1.1 DESTINATION
+
+EGNT==0 ;NUL
+EGVT==1 ;READ VARIABLE
+EGWT==2 ;WRITTEN VARIABLE
+EGUT==3 ;READ & WRITTEN VARIABLE
+EGTT==4 ;TAG
+EGCT==5 ;CONDITION
+EGOT==6 ;ORDERING
+
+NIEGV==0
+NIEGL==0
+NEGI==0
+NEGC==0
+NEGO==0
+;;INSTRUCTIONS
+
+DEFINE EGIDEF A1,A2,A3,A4,A5
+ CONC EIN,\NEGI,==SIXBIT \A1\
+ CONC EIT,\NEGI,==EG!A2!T_6+EG!A3!T_3+EG!A4!T
+IF2, CONC EGI,\NEGI,==A5
+ NEGI==NEGI+1
+TERMIN
+
+EGILIN==[ASCIZ \ILLEGAL EGINSTRUCTION\] ;SO IF2 IN EGIDEF DOESN'T CAUSE ICS
+ EGIDEF ,N,N,N,[EGRTTY EGILIN]
+ EGIDEF BREAK,V,V,V,[PUSHJ P,EGBRK]
+;CONTROL
+ EGIDEF RETURN,V,N,N,[JRST EGRET]
+
+ EGIDEF COND,C,T,T,[PUSHJ P,EGCND]
+ EGIDEF CONDV,C,V,T,[PUSHJ P,EGCNDV]
+ EGIDEF CONDT,T,V,T,[PUSHJ P,EGCNDT]
+ EGIDEF CONDF,T,V,T,[PUSHJ P,EGCNDF]
+EGJMPI==NEGI
+ EGIDEF JUMP<,V,V,T,[PUSHJ P,EGJUMP]
+ EGIDEF JUMP=,V,V,T,[PUSHJ P,EGJUMP]
+ EGIDEF JUMP>,V,V,T,[PUSHJ P,EGJUMP]
+ EGIDEF JUMP#<,V,V,T,[PUSHJ P,EGJUMP]
+ EGIDEF JUMP#=,V,V,T,[PUSHJ P,EGJUMP]
+ EGIDEF JUMP#>,V,V,T,[PUSHJ P,EGJUMP]
+;VARIABLE SETTING
+ EGIDEF SET,W,T,V,[PUSHJ P,EGSET]
+ EGIDEF SETV,W,V,N,[PUSHJ P,EGSETV]
+ EGIDEF SETSQ,W,V,V,[PUSHJ P,EGSTSQ]
+ EGIDEF SETMOV,W,V,V,[PUSHJ P,EGSTMV]
+ EGIDEF EXCH,U,U,N,[PUSHJ P,EGEXCH]
+ EGIDEF ORDER,U,U,O,[PUSHJ P,EGORD]
+;SET OPERATIONS
+ EGIDEF SELECT,W,T,V,[PUSHJ P,EGSELT]
+ EGIDEF SELECC,W,C,V,[PUSHJ P,EGSELC]
+ EGIDEF MAP,W,T,V,[PUSHJ P,EGMAP]
+ EGIDEF PAIR,W,V,V,[PUSHJ P,EGPAIR]
+ EGIDEF MEMBER,W,V,V,[PUSHJ P,EGMEMP]
+ EGIDEF MEMNUM,W,V,V,[PUSHJ P,EGMEMN]
+ EGIDEF CARD,W,V,N,[PUSHJ P,EGCARD]
+ EGIDEF GETEL,W,V,V,[PUSHJ P,EGGETE]
+ EGIDEF SETEL,V,U,V,[PUSHJ P,EGSETE]
+ EGIDEF INSERT,V,U,V,[PUSHJ P,EGINSE]
+ EGIDEF UNSERT,W,U,V,[PUSHJ P,EGUNSE]
+ EGIDEF EXCHWE,U,U,V,[PUSHJ P,EGXCWE]
+ EGIDEF EXCHEL,U,V,V,[PUSHJ P,EGXCHL]
+ EGIDEF INTERS,W,V,V,[PUSHJ P,EGCAP]
+ EGIDEF UNION,W,V,V,[PUSHJ P,EGCUP]
+ EGIDEF DIFFER,W,V,V,[PUSHJ P,EGDIFF]
+ EGIDEF APPEND,W,V,V,[PUSHJ P,EGAPP]
+;CHESS PLAYING
+ EGIDEF PLAY,V,C,O,[PUSHJ P,EGPLAY]
+ EGIDEF PLAYB,V,C,O,[PUSHJ P,EGPLAB]
+ EGIDEF TRY,V,C,O,[PUSHJ P,EGTRY]
+ EGIDEF PLAN,T,V,V,[PUSHJ P,EGPLAN]
+ EGIDEF UNPLAN,N,N,N,[PUSHJ P,EGUPLN]
+ EGIDEF DONE,N,N,N,[JRST EGDONE]
+
+ EGIDEF VALRET,V,V,V,[JRST EGVRET]
+ EGIDEF VALRUT,V,V,V,[PUSHJ P,EGVRUT]
+ EGIDEF VALON,V,V,V,[PUSHJ P,EGVCVT]
+ EGIDEF RETBET,V,V,V,[PUSHJ P,EGRETB]
+ EGIDEF LEAVE,N,N,N,[JRST EGLEAV]
+;CHESS DATA MANIPULATION
+ EGIDEF PIECE,W,V,N,[PUSHJ P,EGPIEC]
+ EGIDEF SQUARE,W,V,N,[PUSHJ P,EGSQUA]
+ EGIDEF SIDE,W,V,N,[PUSHJ P,EGSSID]
+ EGIDEF RANK,W,V,N,[PUSHJ P,EGRANK]
+ EGIDEF FILE,W,V,N,[PUSHJ P,EGFILE]
+ EGIDEF SCOLOR,W,V,N,[PUSHJ P,EGSCOL]
+ EGIDEF PCOLOR,W,V,N,[PUSHJ P,EGPCOL]
+ EGIDEF MVDIST,W,V,V,[PUSHJ P,EGMVDS]
+ EGIDEF INSQ,W,V,V,[PUSHJ P,EGINSQ]
+ EGIDEF OPP,W,V,V,[PUSHJ P,EGOPPI]
+ EGIDEF SQ>RNK,W,V,V,[PUSHJ P,EGSQGR]
+;LOGICAL OPERATIONS
+ EGIDEF NOR,W,V,V,[PUSHJ P,EGNOR]
+ EGIDEF AND,W,V,V,[PUSHJ P,EGAND]
+ EGIDEF OR,W,V,V,[PUSHJ P,EGOR]
+;INTEGER ARITHMETIC
+ EGIDEF ADD,W,V,V,[PUSHJ P,EGADD]
+ EGIDEF SUB,W,V,V,[PUSHJ P,EGSUB]
+ EGIDEF MUL,W,V,V,[PUSHJ P,EGMUL]
+ EGIDEF DIV,W,V,V,[PUSHJ P,EGDIV]
+ EGIDEF MOD,W,V,V,[PUSHJ P,EGMOD]
+ EGIDEF DIF,W,V,V,[PUSHJ P,EGDIF]
+ EGIDEF MIN,W,V,V,[PUSHJ P,EGMIN]
+ EGIDEF MAX,W,V,V,[PUSHJ P,EGMAX]
+ EGIDEF ABS,W,V,N,[PUSHJ P,EGABS]
+;;VARIABLES
+
+DEFINE EGVDEF A1,A2
+ CONC EVN,\NIEGV,==SIXBIT \A1\
+IF2, CONC EGV,\NIEGV,==A2
+ NIEGV==NIEGV+1
+TERMIN
+ EGVDEF X,0
+IF2,EGLM=EGIVAR-1+NIEGV
+ EGVDEF LM,0
+IRP A1,,[WK,WQ,WR,WR2,WB,WB2,WN,WN2,WP,WP2,WP3,WP4,WP5,WP6,WP7,WP8,BK,BQ,BR,BR2,BB,BB2,BN,BN2,BP,BP2,BP3,BP4,BP5,BP6,BP7,BP8]
+ IF2,EG!A1=EGIVAR-1+NIEGV
+ EGVDEF A1,0
+TERMIN
+IF2,EGPG=EGIVAR-1+NIEGV
+ EGVDEF PG,EGSETT_36
+IF2,EGDEPT==EGIVAR-1+NIEGV
+ EGVDEF DEPTH,EGINTT_36
+NIEGW=NIEGV
+IF2,EGSIDE=NIEGV
+ EGVDEF SIDE,0
+
+;;LITERALS
+
+DEFINE EGLDEF A1,A2
+ CONC ELN,\NIEGL,==SIXBIT \A1\
+IF2, CONC ELV,\NIEGL,==A2
+ NIEGL==NIEGL+1
+TERMIN
+ EGLDEF #,0
+IF2,EGF=EGLIT+NIEGL
+ EGLDEF F,EGLOGT_36
+IF2,EGT=EGLIT+NIEGL
+ EGLDEF T,EGLOGT_36+1
+;;CONDITIONS
+
+DEFINE EGCDEF A1,A2
+ CONC ECN,\NEGC,==SIXBIT \A1\
+IF2, CONC EGC,\NEGC,==PUSHJ P,A2
+ NEGC==NEGC+1
+TERMIN
+
+ EGCDEF ,POPJ1
+ EGCDEF DEFD,EGDEFD
+;INTEGER
+ EGCDEF =0,EGCEQ0
+ EGCDEF <0,EGCL0
+ EGCDEF >0,EGCG0
+ EGCDEF ODD,EGCODD
+;LOGICAL
+ EGCDEF T,EGTRUE
+;SET
+ EGCDEF EMPTY,EGMT
+;CHESS
+ EGCDEF FAR,EGFAR
+ EGCDEF RF,EGRKF
+ EGCDEF NF,EGNTF
+ EGCDEF NNF,EGNNTF
+ EGCDEF SAFE,EGSAFE
+ EGCDEF WPC,EGWPC
+ EGCDEF WSQ,EGWSQ
+ EGCDEF KING,EGKING
+ EGCDEF PAWN,EGPAWN
+ EGCDEF QUEEN,EGQUEEN
+ EGCDEF ROOK,EGROOK
+ EGCDEF NIGHT,EGNIGHT
+ EGCDEF BISH,EGBISH
+ EGCDEF CAPT,EGCAPT
+ EGCDEF CHECK,EGCHK
+ EGCDEF OPP,EGOPPC
+ EGCDEF PASSD,EGPASS
+ EGCDEF PDP,EGPDP
+ EGCDEF RWK=,EGRWKE
+;;ORDERING OPERATIONS
+
+DEFINE EGODEF A1,A2
+ CONC EON,\NEGO,==SIXBIT \A1\
+IF2, CONC EGO,\NEGO,==PUSHJ P,A2
+ NEGO==NEGO+1
+TERMIN
+
+ EGODEF ,CPOPJ
+ EGODEF DEEP,EGDEEP
+;;INTERPRETER
+
+EGL==3000 ;MAX EGPROG SIZE
+LEGFS==1000 ;EG FREE STORAGE SIZE
+MXEGV==400 ;MAX # EG VARS (#>400)
+MXEGL==400 ;MAX # EG LITS (#>400)
+MXEGDS==100 ;MAX # DISTINGUISHED SETS (FOR SET LITERAL STORAGE EFFICIENCY)
+MXEGT==400 ;MAX # EG TAGS (#>1000)
+EGDTBL==200 ;MAXIMUM # EG DISPATCHES
+
+EGPC: 1100,,EGPROG-1 ;END GAME PROGRAM PC
+
+EGITAB: REPEAT NEGI,CONC EGI,\.RPCNT ;END GAME INSTRUCTION TABLE
+EGCTAB: REPEAT NEGC,CONC EGC,\.RPCNT ;END GAME CONDITION TABLE
+EGOTAB: REPEAT NEGO,CONC EGO,\.RPCNT ;END GAME ORDERING TABLE
+
+EGPROG: BLOCK EGL ;END GAME PROGRAM
+ 1100,,EGPROG-1
+EGSTAT: BLOCK MXEGT ;STATEMENT TAG TABLE, 1100 IN LEFT HALVES
+
+EGVARA: .(A)
+EGVARB: .(B)
+EGVARC: .(C)
+EGVARX: .
+
+EGXM: 0
+ 0
+
+EGNVAR: 0 ;NUMBER OF EGVARS - 1 (IN BOTH HALVES)
+
+
+;BEGIN:
+EGBEG: SKIPE B,EGTSW
+ PUSHJ P,EGBEGT
+ SKIPN @EGLM
+ JRST EGMATE ;NO LEGAL MOVES
+ MOVE A,LMGD
+ HRRM A,EGDEPT
+ ;ORDER PAWNS
+ PUSHJ P,EGFSP ;GENERATE PG (SET OF PAWN GROUPS)
+ MOVEI T1,1
+ MOVEM T1,1(TT)
+ HRRM TT,EGPG
+ MOVE T,TT
+ MOVEI TT,0
+ MOVE C,[-100,,BOARD+2*BW+1]
+EGPGL: SKIPE A,(C)
+ JRST EGPG1
+EGPGLE: ADDI C,BW-1
+ AOBJN C,EGPGL
+ SKIPE TT
+ SETZM (TT)
+ SETZM (T)
+ PUSH P,WPLAN(I)
+ PUSH P,EGXM(I)
+ PUSH P,P
+ PUSH P,EGXM(I)
+ MOVEI A,1(P)
+ HRLI A,EGIVAR
+ MOVEI B,NIEGW+1(P)
+ HRRM P,EGVARA
+ HRRM P,EGVARB
+ HRRM P,EGVARC
+ HRRM P,EGVARX
+ ADD P,EGNVAR
+ JUMPG P,[ERRTTY [ASCIZ \PDL OVERFLOW IN EG\]]
+ BLT A,-2(B)
+ SETZM -1(B)
+ HRLI B,-1(B)
+ BLT B,(P)
+ SETZM EGMVC ;SET MOVE COUNTER TO 0
+ MOVE Q,STVT1(I)
+ MOVE R,Q
+ SETZM CVPR
+ MOVEI T2,-1
+EGLP: SKIPGE QTF
+ JRST EGLEAV
+ SKIPE B,EGTSW
+ PUSHJ P,EGTRAC
+ ILDB T,EGPC
+ ILDB A,EGPC
+ ILDB B,EGPC
+ ILDB C,EGPC
+ XCT EGITAB(T)
+ JRST EGLP
+
+EGPG1: JUMPL A,EGPG2 ;GENERATING PAWN GROUPS
+ SKIPL LMGT-PIECE(A)
+ JRST EGPGLE
+ JUMPN TT,EGPG1A
+ PUSHJ P,EGFSP
+ MOVEM TT,(T)
+ MOVE T,TT
+ PUSHJ P,EGFSP
+ HRLI TT,EGSETT_14
+ MOVEM T1,1(TT)
+ MOVEM TT,1(T)
+EGPG1A: MOVNI D,1
+ PUSHJ P,EGFSP
+ SUBI A,PIECE
+ HRLI A,EGPCT_14
+ MOVEM A,1(TT)
+ JRST EGPGLE
+EGPG2: SUBI C,10*BW-1
+ JUMPE TT,EGPGL
+ AOJLE D,EGPGL
+ SETZB TT,(TT)
+ JRST EGPGL
+
+EGMATE: AOS (P) ;NO LEGAL MOVES, RETURN TO MAIN PROGRAM WITHOUT EVALUATION
+ MOVE A,EGLM
+ JRST EGGC1
+;;FREE STORAGE
+
+EGFSP: MOVE TT,EGFSS ;FREE STORAGE POINTER
+ EXCH TT,EGFSP
+ POPJ P,
+EGFSS: REPEAT LEGFS,[MOVE TT,.+2
+ 0
+ ]
+ EGRTTY [ASCIZ \EG FREE STORAGE EXHAUSTED\]
+ 0
+
+EGGCIB: TLOA B,EGINTT_14
+EGGCIA: TLOA A,EGINTT_14
+EGGCBA: EXCH A,B
+EGGCAB: EXCH A,@EGVARB
+EGGC: LDB B,[360600,,A] ;GARBAGE COLLECT
+ CAIE B,EGSETT
+ POPJ P, ;NOT A SET
+EGGC1: SOSE 1(A)
+ POPJ P,
+ PUSH P,EGFSP
+ HRLI A,(MOVE TT,)
+ MOVEM A,EGFSP
+ PUSH P,A
+ JRST EGGC3
+EGGC2: MOVEM A,(P)
+ MOVE A,1(A)
+ PUSHJ P,EGGC ;RECURSE
+EGGC3: SKIPE A,@(P)
+ JRST EGGC2
+ POP P,A
+ POP P,(A)
+ POPJ P,
+
+;;TRACE
+
+EGTSW: 0 ;0 OR POINTER TO OUTPUT ROUTINE
+
+EGBEGT: PUSHJ P,FORMF
+ HRLM I,(P)
+ PUSHJ P,BDOUT ;PRINT BOARD
+ PUSHJ P,DCRR
+ MOVE T,PLYN
+ SUB T,LMGD
+ AOS T
+ TRZ T,1
+ MOVEI S,GAME-1(T)
+ MOVEM T,PGMCNT
+ SETZB T,PMRDF
+ PUSHJ P,APG5 ;PRINT CURRENT MOVE SEQUENCE
+ HLRZ I,(P)
+ JRST DCRR
+
+EGTRAC: MOVE TT,EGPC
+EGTRI: PUSHJ P,EGPLOC
+ SOUT [ASCIZ \/ \]
+ PUSHJ P,EGPINS
+ JRST DCRR
+
+EGBRK: MOVEI B,TYO
+ MOVE TT,EGPC
+ SOS TT
+ PUSHJ P,EGTRI
+ .VALUE
+ POPJ P,
+
+EGPLOC: MOVNI D,1 ;PRINT LOCATION
+ MOVE T1,EGSTAT-1
+ HRLZ C,EGTCNT
+EGPLCL: CAML TT,EGSTAT(C)
+ CAMLE T1,EGSTAT(C)
+ JRST EGPLC1
+ MOVE T1,EGSTAT(C)
+ MOVE D,C
+EGPLC1: AOBJN C,EGPLCL
+ SUBM TT,T1
+ MOVE D,EGTAG(D)
+ PUSHJ P,EGSPNT
+ JUMPE T1,CPOPJ
+ MOVEI A,"+
+ PUSHJ P,(B)
+ JRST DPT2
+
+EGPINS: ILDB T,TT ;PRINT INSTRUCTION
+ MOVE D,EGINST(T)
+ PUSHJ P,EGSPNT
+ MOVEI A," ;SPACE
+ PUSHJ P,(B)
+ HLLZ T,EGITYP(T)
+ JUMPE T,CPOPJ
+EGPIN1: ROT T,3
+ ILDB A,TT
+ XCT EGPNT(T)
+ TRZ T,-1
+ JUMPE T,CPOPJ
+ MOVEI A,",
+ PUSHJ P,(B)
+ PUSHJ P,MCRR
+ JRST EGPIN1
+
+EGPNT: JFCL ;TABLE FOR PRINTING ARGUMENTS OF INSTRUCTION
+ PUSHJ P,EGVARP
+ PUSHJ P,EGVAWP
+ PUSHJ P,EGUVWP
+ PUSHJ P,EGTAGP
+ PUSHJ P,EGCNDP
+ PUSHJ P,EGORDP
+ SOUT [ASCIZ \ITYPE7?\]
+
+EGVARP: TRZE A,400 ;PRINT READ-ONLY VARIABLE
+ JRST EGLITP
+EGUVWP: PUSH P,@EGVARA
+ PUSHJ P,EGVAWP
+ SOUT [ASCIZ \:=\]
+ POP P,C
+EGVP1: LDB A,[360600,,C]
+ XCT EGVPNT(A)
+ POPJ P,
+
+EGLITP: SOUT [ASCIZ \"\] ;PRINT LITERAL
+ MOVE C,EGLIT(A)
+ JRST EGVP1
+
+EGVAWP: MOVE D,EGVAR(A) ;PRINT WRITABLE VARIABLE
+ JRST EGSPNT
+
+EGTAGP: MOVE D,EGTAG(A) ;PRINT TAG
+ JRST EGSPNT
+
+EGCNDP: TRZE A,400 ;PRINT CONDITION
+ SOUT [ASCIZ \#\]
+ MOVE D,EGCOND(A)
+ JRST EGSPNT
+
+EGORDP: TRZE A,400 ;PRINT ORDER
+ SOUT [ASCIZ \#\]
+ MOVE D,EGORDR(A)
+ JRST EGSPNT
+
+EGVPNT: SOUT [ASCIZ \#\] ;TABLE FOR PRINTING VARIABLES
+ PUSHJ P,EGLOGP
+ PUSHJ P,EGINTP
+ PUSHJ P,EGSETP
+ PUSHJ P,EGPCP
+ PUSHJ P,EGSQP
+ PUSHJ P,EGMOVP
+ SOUT [ASCIZ \VTYPE7?\]
+
+EGLOGP: MOVEI A,"? ;PRINT LOGICAL VARIABLE
+ CAMN C,EGT
+ MOVEI A,"T
+ CAMN C,EGF
+ MOVEI A,"F
+ JRST (B)
+
+EGINTP: MOVE A,C ;PRINT INTEGER
+ LSH A,6
+ ASH A,-6
+ JRST DPT
+
+EGSETP: MOVEI A,"( ;PRINT SET
+ PUSHJ P,(B)
+ SKIPN D,(C)
+ JRST EGSTP2
+ JRST EGSTP1
+EGSTPL: MOVEI A,",
+ PUSHJ P,(B)
+ PUSHJ P,MCRR
+EGSTP1: PUSH P,D
+ MOVE C,1(D)
+ PUSHJ P,EGVP1
+ POP P,D
+ SKIPE D,(D)
+ JRST EGSTPL
+EGSTP2: MOVEI A,")
+ JRST (B)
+
+EGPCPC: MOVEI A,"*
+ PUSHJ P,(B)
+ SUBI C,PIECE
+ PUSHJ P,EGPCP
+ JRST EGMVP1
+
+EGPCP: MOVE A,PLYN ;PRINT PIECE
+ AOS A
+ MOVEM A,PGMCNT
+ MOVE A,C
+ PUSHJ P,PCOUTP
+ MOVEI A,"/
+ PUSHJ P,(B)
+ SKIPA A,PIECEL(C)
+EGSQP: MOVE A,C ;PRINT SQUARE
+ JRST SQOUT
+
+EGMOVP: LDB D,[170300,,C] ;PRINT MOVE
+ HRRM D,EGMVP1
+ CAIG D,2
+ JUMPN D,EGCASP
+ TRNE C,200
+ JRST EGCAS1 ;CASTLE
+ LDB D,[700,,C]
+ LDB C,[110600,,C]
+ PUSHJ P,EGPCP
+ SKIPLE C,BOARD(D)
+ JRST EGPCPC
+ CAMN D,GHLOC
+ JRST EGPEP
+ MOVEI A,"-
+ PUSHJ P,(B)
+EGMVP2: MOVE A,D
+ PUSHJ P,SQOUT
+EGMVP1: MOVEI A,.
+ CAIL A,4
+ SOUT PROTXT-4(A)
+ POPJ P,
+
+EGPEP: SOUT [ASCIZ \P EP/\]
+ JRST EGMVP2
+
+EGCAS1: MOVEI D,-375(C)
+EGCASP: SOUT [ASCIZ \O-O\]
+ CAIN D,2
+ SOUT [ASCIZ \-O\]
+ POPJ P,
+
+EGSPNT: JUMPE D,CPOPJ ;PRINT SIXBIT SYMBOL
+ MOVEI C,0
+ LSHC C,6
+ MOVEI A,40(C)
+ PUSHJ P,(B)
+ JRST EGSPNT
+
+EGSACS: 0
+ PUSH P,A
+ PUSH P,B
+ PUSH P,C
+ PUSH P,D
+ PUSH P,T
+ PUSH P,TT
+ PUSH P,S
+ PUSH P,T1
+ PUSH P,T2
+ JRST 2,@EGSACS
+
+EGRACS: 0
+ POP P,T2
+ POP P,T1
+ POP P,S
+ POP P,TT
+ POP P,T
+ POP P,D
+ POP P,C
+ POP P,B
+ POP P,A
+ JRST 2,@EGRACS
+
+;;INPUT ROUTINES
+
+EGSYLR: MOVE TT,[440600,,B]
+ MOVEI B,0
+EGSYL1: PUSHJ P,TYI
+ CAIN A,":
+ JRST EGTAGD ;DEFINE TAG
+EGSYL3: CAIE A," ;SPACE
+ CAIN A,",
+ POPJ P,
+ CAIE A,"(
+ CAIN A,")
+ POPJ P,
+ CAIE A,"&
+ CAIN A,^I ;TAB
+ POPJ P,
+ CAIN A,""
+ POPJ P,
+ CAIN A,";
+ JRST EGSYL2
+ SUBI A,40
+ JUMPL A,CPOPJ
+ TLNE TT,770000
+ IDPB A,TT
+ JRST EGSYL1
+
+EGSYL2: PUSHJ P,TYI ;IGNORE REST OF LINE
+EGSYL4: CAIE A," ;TAB
+ SUBI A,40
+ JUMPGE A,EGSYL2
+ POPJ P,
+
+EGREAD: SETZB Q,EGDTBP
+ MOVNI T,NIEGV ;NUMBER OF INITIAL VARS
+ MOVEM T,EGVCNT
+ SETZM EGTCNT
+ MOVNI T,NIEGL
+ EXCH T,EGLCNT
+ HRLZS T ;GARBAGE COLLECT SET LITERALS FROM PREVIOUS READ
+ ADD T,[NIEGL,,NIEGL]
+ JUMPGE T,EGRD0
+EGRD0L: MOVE A,EGLIT(T)
+ PUSHJ P,EGGC
+ AOBJN T,EGRD0L
+EGRD0: SETZM EGSCNT
+ SETZM EGSTAT
+ MOVE T,[EGSTAT,,EGSTAT+1]
+ BLT T,EGSTAT+MXEGT-1
+ MOVE T,[1100,,EGPROG-1]
+EGRD1: PUSHJ P,EGSYLR
+ JUMPE B,EGRD1
+ CAMN B,[SIXBIT \ENTRY\]
+ JRST EGENTR
+ CAMN B,[SIXBIT \END\]
+ JRST EGRCHK
+ CAML T,[1100,,EGPROG+EGL-1]
+ ERRTTY [ASCIZ \EGPROG STORAGE EXHAUSTED\]
+ PUSHJ P,EGIGET ;GET INSTRUCTION
+ IDPB C,T
+ MOVE D,EGITYP(C)
+EGRD2: JUMPL A,EGSTI
+ PUSHJ P,EGSYLR
+ ROT D,3
+ XCT EGSYME(D)
+ IDPB C,T
+ TRZ D,777777
+ TLNE T,770000
+ JRST EGRD2
+ PUSHJ P,EGSYL4
+ JRST EGRD1
+
+EGSTI: MOVEI C,0
+EGSTI1: TLNN T,770000
+ JRST EGRD1
+ IDPB C,T
+ JRST EGSTI1
+;DISPATCHING
+
+EGDSPT: IRP A1,,[QB,QN,Q,R2B,RBN,R2N,2R,RB,RN,2BN,B2N,2B,BN,2N,R,B,N,K]
+ SIXBIT \A1\
+TERMIN
+
+EGDTB: BLOCK 3*EGDTBL ;PIECES,PAWNS,EGPC DISPATCH
+EGDTBP: 0 ;# ENTRIES IN EGDTB
+
+EGGDSP: MOVSI T1,-22
+EGGDPL: CAMN B,EGDSPT(T1)
+ JRST EGGDP1
+ AOBJN T1,EGGDPL
+ JSP C,EGALOC
+ ASCIZ \UNDEFINED DISPATCH TYPE\
+EGGDP1: MOVEI C,1
+ LSH C,(T1)
+ POPJ P,
+
+EGENTR: CAIL Q,3*EGDTBL
+ ERRTTY [ASCIZ \ENTRY STORAGE EXHAUSTED\]
+ MOVEI T2,0
+ PUSHJ P,EGSYLR
+ PUSHJ P,EGGDSP
+ MOVSM C,EGDTB(Q)
+ PUSHJ P,EGGDPN
+ DPB C,[WPWNN,,EGDTB+1(Q)]
+ PUSHJ P,EGSYLR
+ PUSHJ P,EGGDSP
+ HRRM C,EGDTB(Q)
+ PUSHJ P,EGGDPN
+ DPB C,[BPWNN,,EGDTB+1(Q)]
+ JUMPE T2,EGENT1
+ MOVEI T2,0
+ JUMPL A,EGENT1
+ PUSHJ P,TYI
+ CAIL A,"<
+ CAILE A,">
+ JRST EGENT1
+ MOVEI T2,-"<+1(A)
+ MOVEI D,0
+EGENT2: PUSHJ P,TYI
+ CAIL A,"0
+ CAIL A,"9
+ JRST EGENT3
+ MOVEI C,-"0(A)
+ TRNE D,1
+ MOVNS C
+ DPB C,[WRLNUM,,EGDTB+1(Q)]
+EGENT1: DPB T2,[WPRLOP,,EGDTB+1(Q)]
+ MOVEM T,EGDTB+2(Q)
+ ADDI Q,3
+ SOS EGDTBP
+ PUSHJ P,EGSYL4
+ JRST EGRD1
+EGENT3: CAIE A,"
+ CAIN A,"+
+ JRST EGENT2
+ CAIN A,"-
+ AOJA D,EGENT2
+ MOVEI T2,0
+ JRST EGENT1
+
+EGGDPN: SETZB C,TT
+ CAIE A,"&
+ AOJA T2,CPOPJ
+ PUSHJ P,TYI
+ CAIL A,"0
+ CAIL A,"9
+ JRST EGGDN1
+ MOVEI C,-"0+20(A)
+ JRST EGSYL1 ;ADVANCE TO BREAK CHAR
+EGGDN1: CAIE A,"P
+ AOJA T2,EGSYL3 ;ADVANCE TO BREAK CHAR
+ MOVEI C,21
+ JRST EGSYL1 ;ADVANCE TO BREAK CHAR
+;SYMBOL TABLE HACKING
+
+EGIGET: MOVSI C,-NEGI ;LOOK UP EG INST
+EGIGTL: CAMN B,EGINST(C)
+ POPJ P,
+ AOBJN C,EGIGTL
+ JSP C,EGALOC
+ ASCIZ \UNDEFINED INSTRUCTION\
+
+EGTAGD: TLNE T,770000
+ JRST EGBTAG
+ PUSHJ P,EGTAGG ;DEFINE TAG
+ MOVE B,EGSTAT(C)
+ MOVEM T,EGSTAT(C)
+ JUMPE B,EGSYLR
+ PUSHJ P,EGTGPS
+ PTTY [ASCIZ \REDEFINED\]
+ JRST EGSYLR
+
+EGBTAG: PUSHJ P,EG6PNT
+ PTTY [ASCIZ \ILLEGALLY PLACED TAG\]
+ JRST EGSYLR
+
+EGSYME: MOVEI C,0
+ PUSHJ P,EGVARG
+ PUSHJ P,EGVAWG
+ PUSHJ P,EGVAWG
+ PUSHJ P,EGTAGG
+ PUSHJ P,EGCNDG
+ PUSHJ P,EGORDG
+ PTTY [ASCIZ \UNDEFINED SYMBOL TYPE\]
+
+EGVARG: HRLZ C,EGVCNT ;GET VARIABLE NUMBER
+ JUMPE B,EGVRG1
+EGVRGL: CAMN B,EGVAR(C)
+ POPJ P,
+ AOBJN C,EGVRGL
+ HRRZS C
+ CAIL C,MXEGV
+ ERRTTY [ASCIZ \VARIABLE STORAGE EXHAUSTED\]
+ MOVEM B,EGVAR(C)
+ SOS EGVCNT
+ POPJ P,
+
+EGVRG1: CAIE A,""
+ POPJ P,
+ PUSHJ P,EGLG ;LITERAL
+ MOVE B,C
+ HRLZ C,EGLCNT
+EGVLGL: CAMN B,EGLIT(C)
+ JRST EGVLG1
+ AOBJN C,EGVLGL
+ HRRZS C
+ CAIL C,MXEGL
+ ERRTTY [ASCIZ \LITERAL STORAGE EXHAUSTED\]
+ MOVEM B,EGLIT(C)
+ SOS EGLCNT
+EGVLG1: TRO C,400
+ POPJ P,
+
+EGLG: PUSHJ P,EGLITR ;GET A LITERAL
+ JUMPE B,EGLTG0
+ JUMPE T1,EGLNM
+EGLG0: PUSHJ P,EGLITG
+ MOVE C,EGLIT(C)
+ POPJ P,
+
+EGLTG0: CAIN A,"(
+ JRST EGLSET
+ CAIE A,")
+ JUMPGE A,EGLG0
+ MOVEI C,0
+ POPJ P,
+
+EGLSET: PUSHJ P,EGFSP
+ MOVEI T1,1
+ MOVEM T1,1(TT)
+ PUSH P,TT
+EGLSTL: PUSH P,TT
+ PUSHJ P,EGLG
+ POP P,T1
+ JUMPE C,EGLST1
+EGLST2: PUSHJ P,EGFSP
+ MOVEM TT,(T1)
+ MOVEM C,1(TT)
+ CAIE A,")
+ JUMPGE A,EGLSTL
+ SETZM (TT)
+EGLST3: POP P,C
+ PUSH P,A ;SEE IF THIS SET = ONE READ IN BEFORE
+ HRLZ TT,EGSCNT
+ JUMPGE TT,EGLSTE
+EGLSTS: MOVE A,C
+ MOVE B,EGSLIT(TT)
+ PUSHJ P,EGSEQ
+ AOBJN TT,EGLSTS
+ JUMPGE TT,EGLSTD
+ MOVE A,C
+ PUSHJ P,EGGC1
+ MOVE C,EGSLIT(TT)
+ JRST EGLSTF
+
+EGLSTD: HRRZS TT
+ CAIL TT,MXEGDS
+ JRST EGLSTF
+EGLSTE: MOVEM C,EGSLIT(TT)
+ SOS EGSCNT
+EGLSTF: POP P,A
+ HRLI C,EGSETT_14
+ JUMPL A,CPOPJ
+ SETZB T1,TT
+ AOJA T1,EGLR0 ;GO TO NEXT BREAK CHAR
+
+EGLST1: JUMPN B,EGLST2
+ CAIE A,")
+ JUMPGE A,EGLST2
+ SETZM (T1)
+ JRST EGLST3
+
+EGLITG: MOVSI C,-NIEGL ;LOOK UP LITERAL
+EGLTGL: CAMN B,EGLITN(C)
+ POPJ P,
+ AOBJN C,EGLTGL
+ JSP C,EGALOC
+ ASCIZ \UNDEFINED LITERAL\
+
+EGLNM: SKIPE EGSGNF
+ MOVNS C
+ LSH C,6
+ TRO C,EGINTT
+ ROT C,-6
+ POPJ P,
+
+EGLITR: MOVE TT,[440600,,B] ;READ A LITERAL
+ SETZB B,T1
+ SETZB C,EGSGNF'
+EGLR0: PUSHJ P,TYI
+ CAIE A,"
+ CAIN A,",
+ POPJ P,
+ CAIE A,"(
+ CAIN A,")
+ POPJ P,
+ CAIN A,^I
+ POPJ P,
+ CAIN A,";
+ JRST EGLR1
+ SUBI A,40
+ JUMPL A,CPOPJ
+ TLNE TT,770000
+ IDPB A,TT
+ JUMPN T1,EGLR0
+ CAIN A,'-
+ JUMPE C,EGLMIN
+ CAIN A,'+
+ JUMPE C,EGLPLU
+ CAIL A,'0
+ CAILE A,'9
+ AOJA T1,EGLR0
+ IMULI C,10.
+ ADDI C,-'0(A)
+ JRST EGLR0
+
+EGLPLU: AOSA EGSGNF
+EGLMIN: SOS EGSGNF
+ JRST EGLR0
+
+EGLR1: PUSHJ P,TYI ;IGNORE REST OF LINE
+ CAIE A,^I
+ SUBI A,40
+ JUMPGE A,EGLR1
+ POPJ P,
+
+EGVAWG: PUSHJ P,EGVARG
+ HRRZS C
+ TRNE C,400
+ JRST EGVWG1
+ CAIL C,NIEGW
+ POPJ P,
+EGVWG0: JSP C,EGALOC
+ ASCIZ \STORED INTO\
+
+EGVWG1: MOVE B,[SIXBIT \"\]
+ JRST EGVWG0
+
+EGTAGG: HRLZ C,EGTCNT ;GET TAG VALUE
+ JUMPE C,EGTGG1
+EGTGGL: CAMN B,EGTAG(C)
+ POPJ P,
+ AOBJN C,EGTGGL
+ HRRZS C
+ CAIL C,MXEGT
+ ERRTTY [ASCIZ \TAG STORAGE EXHAUSTED\]
+EGTGG1: MOVEM B,EGTAG(C)
+ SOS EGTCNT
+ POPJ P,
+
+EGCNDG: LDB C,[360600,,B]
+ CAIN C,'#
+ JRST EGCNG1
+ MOVSI C,-NEGC ;LOOK UP CONDITION
+EGCNGL: CAMN B,EGCOND(C)
+ POPJ P,
+ AOBJN C,EGCNGL
+ JSP C,EGALOC
+ ASCIZ \UNDEFINED CONDITION\
+
+EGCNG1: LSH B,6
+ PUSHJ P,EGCNDG
+ TRC C,400
+ POPJ P,
+
+EGORDG: LDB C,[360600,,B]
+ CAIN C,'#
+ JRST EGORG1
+ MOVSI C,-NEGO ;LOOK UP ORDERING OPERATION
+EGORGL: CAMN B,EGORDR(C)
+ POPJ P,
+ AOBJN C,EGORGL
+ JSP C,EGALOC
+ ASCIZ \UNDEFINED ORDERING OPERATION\
+
+EGORG1: LSH B,6
+ PUSHJ P,EGORDG
+ TRC C,400
+ POPJ P,
+
+EGRCHK: MOVNI D,1 ;CHECK IF ALL TAGS DEFINED
+ HRLZ C,EGTCNT
+EGRCKL: SKIPN EGSTAT(C)
+ PUSHJ P,EGTAGU
+ AOBJN C,EGRCKL
+ MOVEI B,TYO
+ SOUT [ASCIZ \
+EGPROG SIZE = \]
+ MOVE T1,T
+ SUB T1,EGSTAT-1
+ PUSHJ P,DPT2
+ SOUT [ASCIZ \
+# EGVARS = \]
+ MOVN T1,EGVCNT
+ PUSHJ P,DPT2
+ SOUT [ASCIZ \
+# EGLITS = \]
+ MOVN T1,EGLCNT
+ PUSHJ P,DPT2
+ SOUT [ASCIZ \
+# EGTAGS = \]
+ MOVN T1,EGTCNT
+ PUSHJ P,DPT2
+ SOUT [ASCIZ \
+EGDISP SIZE = \]
+ MOVN T1,EGDTBP
+ PUSHJ P,DPT2
+ SETCM A,EGVCNT ;SET EGNVAR
+ HRLS A
+ MOVEM A,EGNVAR
+ HRLZS EGDTBP ;SET EGDTBP
+ JRST CRR
+
+EGTAGU: AOJN D,EGTGU1
+ PTTY [ASCIZ \UNDEFINED TAGS:\]
+ MOVNI TT,110-6
+EGTGU1: PUSHJ P,EGTGPS
+ JUMPL TT,CPOPJ
+ MOVNI TT,110-6
+ JRST CRR
+
+EGTGPS: MOVE B,EGTAG(C) ;PRINT OUT TAG FOLLOWED BY SPACE
+EG6PNT: MOVEI A,0
+ LSHC A,6
+ ADDI A,40
+ PUSHJ P,TYO
+ CAIE A,40
+ AOJA TT,EG6PNT
+ AOJA TT,CPOPJ
+
+EGALOC: PUSH P,A
+ PUSHJ P,EG6PNT
+ MOVEI B,TYO
+ SOUT (C)
+ MOVE TT,T
+ TLZE TT,770000
+ SOS TT
+ SOUT [ASCIZ \ @ \]
+ PUSH P,D
+ PUSHJ P,EGPLOC
+ POP P,D
+ PUSHJ P,CRR
+ MOVEI C,0
+ JRST POPAJ
+;SYMBOL TABLES
+
+EGITYP: REPEAT NEGI,_33
+ ;TABLE OF INSTRUCTION TYPES
+ ;4.9-4.7,4.6-4.4,4.3-4.1 FOR ARGUMENT TYPES
+ ;1=VAR,2=VAW,3=TAG,4=COND,5=ORDER,6=KONSTANT
+ ;TABLE OF EGINSTRUCTION NAMES:
+EGINST: REPEAT NEGI,CONC EIN,\.RPCNT
+EGTCNT: 0 ;-NUMBER OF EGTAGS
+ SIXBIT \EGPROG\
+EGTAG: BLOCK MXEGT ;TABLE OF EGTAG NAMES
+EGVCNT: -NIEGV ;-NUMBER OF EGVARS
+ ;TABLE OF EGVAR NAMES:
+EGVAR: REPEAT NIEGV,CONC EVN,\.RPCNT
+ BLOCK MXEGV-NIEGV
+EGIVAR: REPEAT NIEGW-1,CONC EGV,\1+.RPCNT ;TABLE OF INITIAL VARIABLE VALUES
+EGCOND: REPEAT NEGC,CONC ECN,\.RPCNT ;TABLE OF CONDITIONS
+EGORDR: REPEAT NEGO,CONC EON,\.RPCNT ;TABLE OF ORDERING OPERATIONS
+EGLCNT: -NIEGL ;-NUMBER OF LITERALS
+EGLITN: REPEAT NIEGL,CONC ELN,\.RPCNT ;TABLE OF INITIAL LITERAL NAMES
+EGLIT: REPEAT NIEGL,CONC ELV,\.RPCNT ;TABLE OF LITERAL VALUES
+ BLOCK MXEGL-NIEGL
+EGSCNT: 0 ;-NUMBER OF DISTINGUISHED SETS (FORMED BY LITERAL READ)
+EGSLIT: BLOCK MXEGDS
+;;INSTRUCTION INTERPRETING
+
+;CONTROL
+
+EGRET: TRZE A,400 ;RETURN
+ SKIPA A,EGLIT(A)
+ MOVE A,@EGVARA
+ POPJ P,
+
+EGCND: PUSH P,EGPC ;COND
+ PUSH P,A
+ PUSH P,EGSTAT(C)
+ MOVE A,EGSTAT(B)
+ MOVEM A,EGPC
+ PUSHJ P,EGLP
+ POP P,C
+ POP P,B
+ POP P,EGPC
+EGCND1: TRZN B,400
+ EXCH C,EGPC
+ XCT EGCTAB(B)
+ MOVEM C,EGPC
+ POPJ P,
+
+EGCNDV: EXCH A,B ;CONDV
+ TRZE A,400
+ SKIPA A,EGLIT(A)
+ MOVE A,@EGVARA
+ MOVE C,EGSTAT(C)
+ JRST EGCND1
+
+EGCNDT: TRZE B,400 ;CONDT
+ SKIPA B,EGLIT(B)
+ MOVE B,@EGVARB
+ LDB D,[360600,,B]
+ CAIN D,EGSETT
+ AOS 1(B)
+ EXCH B,@EGVARX
+ PUSH P,B
+ PUSH P,EGPC
+ PUSH P,EGSTAT(C)
+EGCDT1: MOVE A,EGSTAT(A)
+ MOVEM A,EGPC
+ PUSHJ P,EGLP
+ POP P,B
+ POP P,C
+ PUSHJ P,EGTRUE
+ EXCH B,C
+ MOVEM B,EGPC
+ POP P,A
+ EXCH A,@EGVARX
+ JRST EGGC
+
+EGCNDF: TRZE B,400 ;CONDF
+ SKIPA B,EGLIT(B)
+ MOVE B,@EGVARB
+ LDB D,[360600,,B]
+ CAIN D,EGSETT
+ AOS 1(B)
+ EXCH B,@EGVARX
+ PUSH P,B
+ PUSH P,EGSTAT(C)
+ PUSH P,EGPC
+ JRST EGCDT1
+
+EGJUMP: TRZE A,400 ;JUMP?
+ SKIPA A,EGLIT(A)
+ MOVE A,@EGVARA
+ TRZE B,400
+ SKIPA B,EGLIT(B)
+ MOVE B,@EGVARB
+ LDB T1,[360600,,A]
+ LDB T2,[360600,,B]
+ CAIE T,EGJMPI+1
+ CAIN T,EGJMPI+4
+ JRST EGJMPE
+ CAIN T1,EGINTT
+ CAIE T2,EGINTT
+ EGRTTY [ASCIZ \NON-NUMERIC ARG\]
+ LSH A,6
+ LSH B,6
+EGJMP1: MOVE C,EGSTAT(C)
+ XCT EGJMPT-EGJMPI(T)
+ MOVEM C,EGPC
+ POPJ P,
+EGJMPT: CAMGE A,B ;<
+ CAMN A,B ;=
+ CAMLE A,B ;>
+ CAML A,B ;#<
+ CAME A,B ;#=
+ CAMG A,B ;#>
+
+EGJMPE: CAIN T1,EGSETT
+ CAIE T2,EGSETT
+ JRST EGJMP1
+ CAMN A,B
+ JRST EGJMP1
+ PUSHJ P,EGSEQ ;TWO SETS IN A AND B
+ JRST EGJMP1 ;#= [NOTE A #= B]
+ JRST EGJMP1 ;= [NOTE A = B]
+
+EGEQ: CAMN A,B
+ JRST POPJ1
+ LDB T1,[360600,,A]
+ LDB T2,[360600,,B]
+ CAIN T1,EGSETT
+ CAIE T2,EGSETT
+ POPJ P,
+EGSEQ: MOVEM P,EGSEQP
+EGSEQ0: SKIPN A,(A)
+ JRST EGSEQA
+ SKIPN B,(B)
+ JRST EGSNEQ
+ HRL A,B
+ PUSH P,A
+ MOVE A,1(A)
+ MOVE B,1(B)
+ CAMN A,B
+ JRST EGSEQ1
+ LDB T1,[360600,,A]
+ LDB T2,[360600,,B]
+ CAIN T1,EGSETT
+ CAIE T2,EGSETT
+ JRST EGSNEQ
+ PUSHJ P,EGSEQ0
+ JRST EGSNEQ ;SHOULD NEVER GET HERE
+EGSEQ1: POP P,A
+ HLRZ B,A
+ JRST EGSEQ0
+
+EGSEQA: SKIPN B,(B)
+ AOSA (P)
+EGSNEQ: MOVE P,EGSEQP
+ POPJ P,
+
+EGSEQP: 0 ;P FOR RETURN
+;VARIABLE SETTING
+
+EGSET: PUSH P,EGPC ;SET
+ PUSH P,A
+ PUSH P,@EGVARX
+ TRZE C,400
+ SKIPA A,EGLIT(C)
+ MOVE A,@EGVARC
+ LDB D,[360600,,A]
+ CAIN D,EGSETT
+ AOS 1(A)
+ MOVEM A,@EGVARX
+ MOVE A,EGSTAT(B)
+ MOVEM A,EGPC
+ PUSHJ P,EGLP
+ EXCH A,(P)
+ EXCH A,@EGVARX
+ PUSHJ P,EGGC
+ POP P,A
+ POP P,B
+ POP P,EGPC
+EGSET1: LDB D,[360600,,A]
+ CAIN D,EGSETT
+ AOS 1(A)
+ JRST EGGCAB
+
+EGSETV: EXCH A,B ;SETV
+ TRZE A,400
+ SKIPA A,EGLIT(A)
+ MOVE A,@EGVARA
+ JRST EGSET1
+
+EGEXCH: MOVE D,@EGVARA ;EXCH
+ EXCH D,@EGVARB
+ MOVEM D,@EGVARA
+ POPJ P,
+
+EGORD: PUSHJ P,EGOGET ;ORDER
+ MOVEM C,EGORDI
+ MOVEI T,@EGVARA
+ MOVEI TT,@EGVARB
+ MOVE A,(T)
+ MOVE B,(TT)
+EGORDI: .
+ MOVEM A,(T)
+ MOVEM B,(TT)
+ POPJ P,
+
+EGOGET: TRZN C,400
+ JRST EGOGT1
+ MOVE C,EGOTAB(C)
+ MOVEM C,EGREVO
+ SKIPA C,[PUSHJ P,EGREVO]
+EGOGT1: MOVE C,EGOTAB(C)
+ POPJ P,
+
+EGREVO: .
+ JUMPE C,CPOPJ ;C=0 FOR TIE
+ EXCH A,B
+ POPJ P,
+
+EGSTSQ: TRZE B,400 ;SETSQ
+ SKIPA B,EGLIT(B)
+ MOVE B,@EGVARB
+ TRZE C,400
+ SKIPA C,EGLIT(C)
+ MOVE C,@EGVARC
+ LDB T,[360600,,B]
+ LDB TT,[360600,,C]
+ CAIN T,EGINTT
+ CAIE TT,EGINTT
+ EGRTTY [ASCIZ \NON-NUMERIC ARG\]
+ SKIPE I
+ MOVE B,REVERS(B)
+ MOVEI B,1(B)
+ IMULI B,BW
+ ADDI B,(C)
+ HRLI B,EGSQT_14
+ JRST EGGCBA
+
+EGSTMV: TRZE B,400 ;SETMOV
+ SKIPA B,EGLIT(B)
+ MOVE B,@EGVARB
+ LDB D,[360600,,B]
+ CAIN D,EGSQT
+ JRST EGSMV1
+ CAIE D,EGPCT
+ EGRTTY [ASCIZ \WRONG TYPE ARG1\]
+EGSMV2: TRZE C,400
+ SKIPA C,EGLIT(C)
+ MOVE C,@EGVARC
+ LDB D,[360600,,C]
+ CAIN D,EGPCT
+ JRST EGSMV3
+ CAIE D,EGSQT
+ EGRTTY [ASCIZ \WRONG TYPE ARG2\]
+EGSMV4: DPB B,[61100,,C]
+ HRLI C,EGMOVT_14
+ EXCH C,@EGVARA
+ MOVE A,C
+ JRST EGGC
+EGSMV1: MOVE B,BOARD(B)
+ JRST EGSMV2
+EGSMV3: MOVE C,PIECEL(C)
+ JRST EGSMV4
+;SET OPERATIONS
+
+EGSELT: PUSH P,EGPC ;SELECT
+ PUSH P,A
+ PUSHJ P,EGFSP
+ MOVEI A,1
+ MOVEM A,1(TT)
+ PUSH P,TT
+ TRZE C,400
+ SKIPA A,EGLIT(C)
+ MOVE A,@EGVARC
+ LDB D,[360600,,A]
+ CAIE D,EGSETT
+ EGRTTY [ASCIZ \NON-SET ARG\]
+ AOS 1(A)
+ PUSH P,A
+ PUSH P,@EGVARX
+ PUSH P,TT
+ PUSH P,A
+ PUSH P,EGSTAT(B)
+EGSLT1: SKIPN T,@-1(P)
+ JRST EGSLTD
+ MOVEM T,-1(P)
+ MOVE A,1(T)
+ MOVEM A,@EGVARX
+ MOVE A,(P)
+ MOVEM A,EGPC
+ PUSHJ P,EGLP
+ MOVE B,@EGVARX
+ CAME A,EGT
+ JRST EGSLT1
+ LDB A,[360600,,B]
+ CAIN A,EGSETT
+ AOS 1(B)
+ PUSHJ P,EGFSP
+ MOVEM B,1(TT)
+ MOVEM TT,@-2(P)
+ MOVEM TT,-2(P)
+ JRST EGSLT1
+EGSLTD: SETZM @-2(P)
+ SUB P,[3,,3]
+ POP P,@EGVARX
+ POP P,A
+ PUSHJ P,EGGC1
+ POP P,A
+ HRLI A,EGSETT_14
+ POP P,B
+ POP P,EGPC
+ JRST EGGCAB
+
+EGSELC: SETZM EGSCNT ;SELECC
+ PUSH P,A
+ PUSHJ P,EGFSP
+ PUSH P,TT
+ MOVEI A,1
+ MOVEM A,1(TT)
+ TRZE C,400
+ SKIPA T,EGLIT(C)
+ MOVE T,@EGVARC
+ LDB D,[360600,,T]
+ CAIE D,EGSETT
+ EGRTTY [ASCIZ \NON-SET ARG\]
+ TRZN B,400
+ JRST EGSLC0
+ MOVE A,EGCTAB(B)
+ MOVEM A,EGREVC
+ SKIPA A,[PUSHJ P,EGREVC]
+EGSLC0: MOVE A,EGCTAB(B)
+ MOVEM A,EGSLC
+EGSLC1: SKIPN T,(T)
+ JRST EGSLCD
+ MOVE A,1(T)
+EGSLC: . ;SHOULD NOT CLOBBER T OR TT
+ JRST EGSLC1
+ AOS EGSCNT
+ MOVE A,1(T)
+ LDB B,[360600,,A]
+ CAIN B,EGSETT
+ AOS 1(A)
+ PUSHJ P,EGFSP
+ MOVEM A,1(TT)
+ JRST EGSLC1
+EGSLCD: SETZM (TT)
+ POP P,A
+ HRLI A,EGSETT_14
+ POP P,B
+ JRST EGGCAB
+
+EGREVC: .
+ AOS (P)
+ POPJ P,
+
+EGMAP: PUSH P,EGPC ;MAP
+ PUSH P,A
+ PUSHJ P,EGFSP
+ MOVEI A,1
+ MOVEM A,1(TT)
+ PUSH P,TT
+ TRZE C,400
+ SKIPA A,EGLIT(C)
+ MOVE A,@EGVARC
+ LDB D,[360600,,A]
+ CAIE D,EGSETT
+ EGRTTY [ASCIZ \NON-SET ARG\]
+ AOS 1(A)
+ PUSH P,A
+ PUSH P,@EGVARX
+ PUSH P,TT
+ PUSH P,A
+ PUSH P,EGSTAT(B)
+EGMAP1: SKIPN T,@-1(P)
+ JRST EGSLTD
+ MOVEM T,-1(P)
+ MOVE A,1(T)
+ MOVEM A,@EGVARX
+ MOVE A,(P)
+ MOVEM A,EGPC
+ PUSHJ P,EGLP
+ LDB B,[360600,,A]
+ CAIN B,EGSETT
+ AOS 1(A)
+ PUSHJ P,EGFSP
+ MOVEM A,1(TT)
+ MOVEM TT,@-2(P)
+ MOVEM TT,-2(P)
+ JRST EGMAP1
+
+EGPAIR: TRZE C,400
+ SKIPA C,EGLIT(C)
+ MOVE C,@EGVARC
+ TRZE B,400
+ SKIPA D,EGLIT(B)
+ MOVE D,@EGVARB
+ PUSHJ P,EGFSP
+ MOVE B,TT
+ MOVEI T1,1
+ MOVEM T1,1(TT)
+ PUSHJ P,EGFSP
+ LDB T,[360600,,D]
+ CAIN T,EGSETT
+ AOS 1(D)
+ MOVEM D,1(TT)
+ PUSHJ P,EGFSP
+ LDB T,[360600,,C]
+ CAIN T,EGSETT
+ AOS 1(C)
+ MOVEM C,1(TT)
+ SETZM (TT)
+ HRLI B,EGSETT_14
+ JRST EGGCBA
+
+EGMEMP: PUSHJ P,EGMEM ;MEMBER
+ MOVSI B,EGLOGT_14
+ JUMPE D,EGGCBA
+ AOJA B,EGGCBA
+
+EGMEMN: PUSHJ P,EGMEM ;MEMNUM
+ MOVE B,D
+ TLO B,EGINTT_14
+ JRST EGGCBA
+
+EGMEM: TRZE B,400
+ SKIPA T,EGLIT(B)
+ MOVE T,@EGVARB
+ LDB D,[360600,,T]
+ CAIE D,EGSETT
+ EGRTTY [ASCIZ \NON-SET ARG\]
+ TRZE C,400
+ SKIPA C,EGLIT(C)
+ MOVE C,@EGVARC
+ MOVEI D,1
+ LDB TT,[360600,,C]
+ CAIN TT,EGSETT
+ JRST EGMEM2
+EGMEM1: SKIPN T,(T)
+ JRST EGMEM0
+ CAME C,1(T)
+ AOJA D,EGMEM1
+ POPJ P,
+
+EGMEMZ: HLRZ A,(P)
+EGMEM0: MOVEI D,0
+ POPJ P,
+
+EGMEM2: HRLM A,(P)
+EGMEM3: SKIPN T,(T)
+ JRST EGMEMZ
+ MOVE A,1(T)
+ MOVE B,C
+ PUSHJ P,EGEQ
+ AOJA D,EGMEM3
+ HLRZ A,(P)
+ POPJ P,
+
+EGCARD: TRZE B,400 ;CARD
+ SKIPA C,EGLIT(B)
+ MOVE C,@EGVARB
+ LDB D,[360600,,C]
+ CAIE D,EGSETT
+ EGRTTY [ASCIZ \NON-SET ARG\]
+ MOVSI B,EGINTT_14
+ SKIPE C,(C)
+ AOJA B,.-1
+ JRST EGGCBA
+
+EGGETE: TRZE B,400 ;GETEL
+ SKIPA T,EGLIT(B)
+EGGTE0: MOVE T,@EGVARB
+ LDB D,[360600,,T]
+ CAIE D,EGSETT
+ EGRTTY [ASCIZ \NON-SET ARG\]
+ TRZE C,400
+ SKIPA C,EGLIT(C)
+ MOVE C,@EGVARC
+ LDB D,[360600,,C]
+ CAIE D,EGINTT
+ EGRTTY [ASCIZ \NON-NUMERIC ARG\]
+ LSH C,6
+ ASH C,-6
+ MOVEI B,0
+ JUMPG C,EGGTE1
+ MOVE S,T
+ SKIPE S,(S)
+ AOJA C,.-1
+ AOJLE C,EGGCBA
+EGGTE1: SKIPN T,(T)
+ JRST EGGCBA
+ SOJN C,.-2
+ MOVE B,1(T)
+ LDB D,[360600,,B]
+ CAIN D,EGSETT
+ AOS 1(B)
+ JRST EGGCBA
+
+EGSETE: PUSHJ P,EGSTE ;SETEL
+ JUMPLE C,CPOPJ
+EGSTE0: MOVE D,1(T)
+ SOJN D,EGSTEC ;MUST MAKE COPY
+EGSTEL: MOVE D,T
+ SKIPN T,(T)
+ JRST EGSTEX ;MUST EXTEND SET
+ SOJN C,EGSTEL
+ EXCH A,1(T)
+ JRST EGGC
+
+EGXCLX: MOVEI A,0 ;EXTEND
+ EXCH A,1(B)
+EGSTEX: PUSHJ P,EGFSP ;EXTEND SET
+ MOVEM TT,(D)
+ SOJE C,EGSEX1
+EGSEX0: SETZM 1(TT)
+ PUSHJ P,EGFSP
+ SOJN C,EGSEX0
+EGSEX1: MOVEM A,1(TT)
+ SETZM (TT)
+ POPJ P,
+
+EGSTEC: PUSHJ P,EGFSP ;COPY
+ MOVEI T1,1
+ MOVEM T1,1(TT)
+ MOVE D,TT
+ SOJE C,EGSEC2
+EGSECL: PUSHJ P,EGFSP
+ SKIPN T,(T)
+ JRST EGSEC0
+ MOVE T1,1(T)
+ LDB T2,[360600,,T1]
+ CAIN T2,EGSETT
+ AOS 1(T1)
+ MOVEM T1,1(TT)
+ SOJN C,EGSECL
+EGSEC2: PUSHJ P,EGFSP
+ MOVEM A,1(TT)
+ SKIPE T,(T)
+EGSEC3: SKIPN T,(T)
+ JRST EGSECD
+ PUSHJ P,EGFSP
+ MOVE T1,1(T)
+ LDB T2,[360600,,T1]
+ CAIN T2,EGSETT
+ AOS 1(T1)
+ MOVEM T1,1(TT)
+ JRST EGSEC3
+
+EGSEC0: SETZM 1(TT)
+ PUSHJ P,EGFSP
+ SOJN C,EGSEC0
+ MOVEM A,1(TT)
+EGSECD: SETZM (TT)
+ MOVE A,D
+ HRLI A,EGSETT_14
+ JRST EGGCAB
+
+EGINSE: PUSHJ P,EGSTE ;INSERT
+ JUMPLE C,CPOPJ
+ MOVE D,1(T)
+ SOJE D,EGINS1
+EGINSC: PUSHJ P,EGFSP ;COPY
+ MOVEI T1,1
+ MOVEM T1,1(TT)
+ MOVE D,TT
+ SOJE C,EGINC0
+EGINCL: PUSHJ P,EGFSP
+ SKIPN T,(T)
+ JRST EGSEC0
+ MOVE T1,1(T)
+ LDB T2,[360600,,T1]
+ CAIN T2,EGSETT
+ AOS 1(T1)
+ MOVEM T1,1(TT)
+ SOJN C,EGINCL
+EGINC0: PUSHJ P,EGFSP
+ MOVEM A,1(TT)
+ JRST EGSEC3
+
+EGINSL: MOVE D,T
+ SKIPN T,(T)
+ JRST EGINSX
+EGINS1: SOJN C,EGINSL
+ PUSHJ P,EGFSP
+ MOVEM A,1(TT)
+ EXCH TT,(T)
+ MOVEM TT,@(T)
+ POPJ P,
+
+EGINSX: PUSHJ P,EGFSP ;EXTEND
+ MOVEM TT,(D)
+EGINXL: SETZM 1(TT)
+ PUSHJ P,EGFSP
+ SOJN C,EGINXL
+ MOVEM A,1(TT)
+ SETZM (TT)
+ POPJ P,
+
+EGUNSE: PUSHJ P,EGSTES ;UNSERT
+ JUMPLE C,EGUNSU
+ MOVE D,1(T)
+ SOJN D,EGUNSC ;MUST MAKE COPY
+EGUNS0: MOVE D,T
+ SKIPN T,(T)
+ JRST EGUNSU
+ SOJN C,EGUNS0
+ MOVE B,1(T)
+ EXCH T,EGFSP
+ EXCH T,@EGFSP
+ MOVEM T,(D)
+ JRST EGGCBA
+
+EGUNSU: MOVEI B,0
+ JRST EGGCBA
+
+EGUNSC: PUSHJ P,EGFSP
+ MOVEI T1,1
+ MOVEM T1,1(TT)
+ MOVE D,TT
+EGUSC0: SKIPN T,(T)
+ JRST EGUNSA ;CAN ABORT
+ MOVE S,1(T)
+ LDB T2,[360600,,S]
+ CAIN T2,EGSETT
+ AOS 1(S)
+ SOJE C,EGUSC1
+ PUSHJ P,EGFSP
+ MOVEM S,1(TT)
+ JRST EGUSC0
+
+EGUSCL: PUSHJ P,EGFSP
+ MOVE T1,1(T)
+ LDB T2,[360600,,T1]
+ CAIN T2,EGSETT
+ AOS 1(T1)
+ MOVEM T1,1(TT)
+EGUSC1: SKIPE T,(T)
+ JRST EGUSCL
+ SETZM (TT)
+ EXCH A,D
+ HRLI A,EGSETT_14
+ PUSHJ P,EGGCAB
+ MOVE A,S
+ MOVE B,D
+ JRST EGGCAB
+
+EGUNSA: SETZB B,(TT) ;ABORT
+ PUSHJ P,EGGCBA
+ MOVE A,D
+ JRST EGGC1
+
+EGXCWE: CAMN A,B ;EXCHWE
+ JRST EGGTE0
+ PUSHJ P,EGSTES
+ JUMPLE C,EGUNSU
+ MOVE D,1(T)
+ SOJN D,EGXWEC ;MUST MAKE COPY
+EGXCW0: MOVE D,T
+ SKIPN T,(T)
+ JRST EGXWEE ;MUST EXTEND
+ SOJN C,EGXCW0
+ MOVE S,1(T)
+ EXCH S,@EGVARA
+ MOVEM S,1(T)
+ POPJ P,
+
+EGXWEE: MOVEI S,0 ;EXTEND
+ EXCH S,@EGVARA
+ MOVE A,S
+ JRST EGSTEX
+
+EGXWEC: PUSHJ P,EGFSP ;COPY
+ MOVE D,TT
+ MOVEI T1,1
+EGXWCL: MOVEM T1,1(TT)
+ PUSHJ P,EGFSP
+ SKIPN T,(T)
+ JRST EGXWC1
+ MOVE T1,1(T)
+ LDB T2,[360600,,T1]
+ CAIN T2,EGSETT
+ AOS 1(T1)
+ SOJN C,EGXWCL
+ EXCH T1,@EGVARA
+ MOVEM T1,1(TT)
+ JRST EGSEC3
+
+EGXWC0: SETZM 1(TT)
+ PUSHJ P,EGFSP
+EGXWC1: SOJN C,EGXWC0
+ MOVEI S,0
+ EXCH S,@EGVARA
+ MOVEM S,1(TT)
+ JRST EGSECD
+
+EGSTE: PUSHJ P,EGSTES
+ JUMPLE C,CPOPJ
+ TRZE A,400
+ SKIPA A,EGLIT(A)
+ MOVE A,@EGVARA
+ LDB D,[360600,,A]
+ CAIN D,EGSETT
+ AOS 1(A)
+ MOVE D,1(T)
+ POPJ P,
+
+EGSTES: TRZE C,400
+ SKIPA C,EGLIT(C)
+ MOVE C,@EGVARC
+ LDB D,[360600,,C]
+ CAIE D,EGINTT
+ EGRTTY [ASCIZ \NON-NUMERIC ARG\]
+ LSH C,6
+ ASH C,-6
+ MOVE T,@EGVARB
+ LDB D,[360600,,T]
+ CAIE D,EGSETT
+ EGRTTY [ASCIZ \NON-SET ARG\]
+ JUMPG C,CPOPJ
+ MOVE S,T
+ SKIPE S,(S)
+ AOJA C,.-1
+ AOJA C,CPOPJ
+
+EGXCHL: MOVE T,@EGVARA ;EXCHEL
+ LDB T1,[360600,,T]
+ CAIE T1,EGSETT
+ EGRTTY [ASCIZ \NON-SET ARG\]
+ PUSHJ P,EGINTU
+ LSH B,6
+ ASH B,-6
+ LSH C,6
+ ASH C,-6
+ CAMLE B,C
+ EXCH B,C
+ JUMPG B,EGXL2
+ MOVEI D,1
+ MOVE S,T
+ SKIPE S,(S)
+ AOJA D,.-1
+ JUMPG C,EGXL1
+ ADD C,D
+ JUMPLE C,CPOPJ
+EGXL1: ADD B,D
+ JUMPLE B,EGXCL1
+EGXL2: SUB C,B
+ JUMPE C,CPOPJ
+ MOVE D,1(T)
+ SOJN D,EGXCLC ;MUST DO COPY
+EGXLL: SKIPN T,(T)
+ POPJ P,
+ SOJN B,EGXLL
+ MOVE B,T
+EGXLL2: MOVE D,T
+ SKIPN T,(T)
+ JRST EGXCLX ;MUST EXTEND
+ SOJN C,EGXLL2
+ MOVE D,1(B)
+ EXCH D,1(T)
+ MOVEM D,1(B)
+ POPJ P,
+
+EGXCL1: LSHC A,-44 ;MOVE B,A
+ ;MOVEI A,0
+ JRST EGSTE0
+
+EGXCLC: PUSHJ P,EGFSP ;COPY
+ MOVEI T1,1
+ MOVEM T1,1(TT)
+ MOVE D,TT
+EGXLCL: SKIPN T,(T)
+ JRST EGXLCA ;CAN ABORT
+ PUSHJ P,EGFSP
+ MOVE T1,1(T)
+ LDB T2,[360600,,T1]
+ CAIN T2,EGSETT
+ AOS 1(T1)
+ MOVEM T1,1(TT)
+ SOJN B,EGXLCL
+ MOVE B,TT
+EGXLCM: SKIPN T,(T)
+ JRST EGXLC2
+ PUSHJ P,EGFSP
+ MOVE T1,1(T)
+ LDB T2,[360600,,T1]
+ CAIN T2,EGSETT
+ AOS 1(T1)
+ MOVEM T1,1(TT)
+ SOJN C,EGXLCM
+ EXCH T1,1(B)
+ MOVEM T1,1(TT)
+ MOVE B,A
+ JRST EGSEC3
+
+EGXLCA: SETZM (TT) ;ABORT
+ MOVE A,D
+ JRST EGGC1
+
+EGXLC1: SETZM 1(TT)
+EGXLC2: PUSHJ P,EGFSP
+ SOJN C,EGXLC1
+ EXCH T,1(B) ;T HAS 0
+ MOVEM T,1(TT)
+ MOVE B,A
+ JRST EGSECD
+
+EGCAP: PUSHJ P,EGSETU ;INTERS(ECTION)
+ SKIPE C,(C)
+ JRST EGCAP2
+EGCAP0: SETZM (TT)
+ JRST EGGCBA
+EGCAP1: PUSHJ P,EGFSP
+ MOVEM T,1(TT)
+EGCAP2: SKIPN D,(D)
+ JRST EGCAP0
+ MOVE S,C
+ MOVE T,1(D)
+ LDB T1,[360600,,T]
+ CAIN T1,EGSETT
+ JRST EGCAP4
+EGCAP3: CAMN T,1(S)
+ JRST EGCAP1
+ SKIPE S,(S)
+ JRST EGCAP3
+ JRST EGCAP2
+
+EGCAP4: HRLM A,(P)
+ PUSH P,B
+EGCAP5: MOVE A,T
+ MOVE B,1(S)
+ PUSHJ P,EGEQ
+ JRST EGCAP6
+ POP P,B
+ HLRZ A,(P)
+ AOS 1(T)
+ JRST EGCAP1
+
+EGCAP6: SKIPE S,(S)
+ JRST EGCAP5
+ POP P,B
+ HLRZ A,(P)
+ JRST EGCAP2
+
+EGCUP: PUSHJ P,EGSETU ;UNION
+ MOVE S,D
+ JRST EGCUP2
+EGCUP1: PUSHJ P,EGFSP
+ MOVE T,1(S)
+ LDB T1,[360600,,T]
+ CAIN T1,EGSETT
+ AOS 1(T)
+ MOVEM T,1(TT)
+EGCUP2: SKIPE S,(S)
+ JRST EGCUP1
+EGCUP3: EXCH C,D
+ JRST EGDIF1
+
+EGDIFF: PUSHJ P,EGSETU ;DIFFER(ENCE)
+EGDIF1: SKIPN D,(D)
+ JRST EGCAP0
+ MOVE T,1(D)
+ LDB T1,[360600,,T]
+ CAIN T1,EGSETT
+ JRST EGDIF4
+ SKIPN S,(C)
+ JRST EGDIF3
+EGDIF2: CAMN T,1(S)
+ JRST EGDIF1
+ SKIPE S,(S)
+ JRST EGDIF2
+EGDIF3: PUSHJ P,EGFSP
+ MOVEM T,1(TT)
+ JRST EGDIF1
+
+EGDIF4: SKIPN S,(C)
+ JRST EGDIF7
+ HRLM A,(P)
+ PUSH P,B
+EGDIF5: MOVE A,T
+ MOVE B,1(S)
+ PUSHJ P,EGEQ
+ JRST EGDIF6
+ POP P,B
+ HLRZ A,(P)
+ JRST EGDIF1
+
+EGDIF6: SKIPE S,(S)
+ JRST EGDIF5
+ POP P,B
+ HLRZ A,(P)
+EGDIF7: PUSHJ P,EGFSP
+ AOS 1(T)
+ MOVEM T,1(TT)
+ JRST EGDIF1
+
+EGAPP: PUSHJ P,EGSETU ;APPEND
+EGAPP1: SKIPN D,(D)
+ JRST EGAPP2
+ PUSHJ P,EGFSP
+ MOVE T,1(D)
+ LDB T1,[360600,,T]
+ CAIN T1,EGSETT
+ AOS 1(T)
+ MOVEM T,1(TT)
+ JRST EGAPP1
+EGAPP2: SKIPN C,(C)
+ JRST EGCAP0
+ PUSHJ P,EGFSP
+ MOVE T,1(C)
+ LDB T1,[360600,,T]
+ CAIN T1,EGSETT
+ AOS 1(T)
+ MOVEM T,1(TT)
+ JRST EGAPP2
+
+EGSETU: TRZE B,400 ;SET CHECK
+ SKIPA D,EGLIT(B)
+ MOVE D,@EGVARB
+ TRZE C,400
+ SKIPA C,EGLIT(C)
+ MOVE C,@EGVARC
+ LDB T,[360600,,C]
+ LDB TT,[360600,,D]
+ CAIN T,EGSETT
+ CAIE TT,EGSETT
+ EGRTTY [ASCIZ \NON-SET ARG\]
+ PUSHJ P,EGFSP
+ MOVEI T1,1
+ MOVEM T1,1(TT)
+ MOVE B,TT
+ HRLI B,EGSETT_14
+ POPJ P,
+;CHESS PLAYING
+
+EGPLAY: PUSHJ P,EGOGET ;PLAY
+ MOVEM C,EGPL1
+ MOVE C,A
+ PUSH P,@EGVARX
+ SETZB A,@EGVARX
+ PUSHJ P,EGSELC
+ POP P,A
+ EXCH A,@EGVARX
+ SKIPN T,(A)
+ JRST EGGC1
+ MOVE A,1(T)
+EGPLP: SKIPN T,(T)
+ JRST EGPLA
+ MOVE B,1(T)
+EGPL1: .
+ JRST EGPLP
+EGPLA: LDB B,[110600,,A] ;PLAY MOVE IN A
+ ANDI A,700177
+ PUSHJ P,TMOVE
+ EGRTTY [ASCIZ \PLAYED ILLEGAL MOVE\]
+ SKIPE C,CVPR
+ PUSHJ P,LFSRC
+ SETZM CVPR
+ MOVSI C,40000
+ PUSHJ P,RECMH
+ PUSHJ P,UNMOVE
+ MOVE A,EGVAL
+ MOVEI D,CPOPJ
+ JRST EGVLRP
+
+EGPLAB: PUSHJ P,EGTRYA ;PLAYB
+ SKIPN T,(A)
+ JRST EGGC1
+ MOVE TT,A
+ JSP D,EGPOP
+ MOVE A,TT
+ PUSHJ P,EGTRYP
+ SKIPN EGMVC
+ AOS (P)
+ POPJ P,
+
+EGPLAN: MOVE A,EGSTAT(A) ;PLAN
+ MOVEM A,WPLAN(I)
+ TRZE B,400
+ SKIPA A,EGLIT(B)
+ MOVE A,@EGVARB
+ LDB T,[360600,,A]
+ CAIE T,EGSETT
+ EGRTTY [ASCIZ \NON-SET ARG\]
+ AOS 1(A)
+ TRZE C,400
+ SKIPA C,EGLIT(C)
+ MOVE C,@EGVARC
+ MOVEM C,EGXM(I)
+ JRST EGTRY1
+
+EGTRY: PUSHJ P,EGTRYA ;TRY
+EGTRY1: SKIPN T,(A)
+ JRST EGGC1
+ PUSH P,EGVARX
+ PUSH P,EGPC
+ PUSHJ P,EGTRYP
+ POP P,EGPC
+ POP P,A
+ HRRM A,EGVARA
+ HRRM A,EGVARB
+ HRRM A,EGVARC
+ HRRM A,EGVARX
+ POPJ P,
+
+EGTRYA: PUSHJ P,EGOGET
+ MOVEM C,EGTR1
+ MOVE C,A
+ PUSH P,@EGVARX
+ SETZB A,@EGVARX
+ PUSHJ P,EGSELC
+EGTRLP: MOVE T,@EGVARX
+ MOVE T,(T)
+ SOSG TT,EGSCNT
+ JRST EGTRA
+EGTRL: MOVE A,1(T)
+ MOVE B,(T)
+ MOVE B,1(B)
+EGTR1: . ;SHOULDN'T CLOBBER T OR TT
+ MOVEM A,1(T)
+ MOVE T,(T)
+ MOVEM B,1(T)
+ SOJG TT,EGTRL
+ JRST EGTRLP
+EGTRA: POP P,A
+ EXCH A,@EGVARX ;RESTORE OLD X
+ POPJ P,
+
+EGTRYP: PUSH P,A ;TRY MOVES IN SET IN ORDER
+ PUSH P,LGLMST
+ PUSH P,HSADR
+ PUSH P,EGMVC ;MOVE COUNTER
+EGMOVC==-5
+ PUSH P,R ;MAX VAL
+EGBMX==-4
+ PUSH P,CVPR ;PRINCIPAL VARIATION
+EGBPV==-3
+ PUSH P,Q ;MIN VAL
+EGBMN==-2
+ PUSH P,T2 ;HASH ADR OF PRINC VAR
+EGBHSH==-1
+EGTRAL: PUSH P,(T)
+ MOVE A,1(T)
+ LDB B,[110600,,A] ;TRY MOVE IN A
+ ANDI A,700177
+ SKIPL QTF
+ PUSHJ P,TMOVE
+ JRST EGTRA1 ;ILLEGAL OR IMPOSSIBLE MOVE
+ AOS EGMOVC(P)
+ TRC I,1
+ PUSHJ P,LMG
+ TRC I,1
+ XCT EGBMNC(I)
+ XCT EGNBMN(I)
+ XCT EGBSFC(I)
+ JRST EGNBSF ;NEW BEST SO FAR
+ SKIPE C,CVPR
+ PUSHJ P,LFSRC
+ CLEARM CVPR
+EGTRA2: PUSHJ P,UNMOVE
+EGTRA1: POP P,T
+ JUMPN T,EGTRAL
+EGTRA3: POP P,T2 ;HASH ADDRESS OF PRINCIPAL VARIATION
+ POP P,Q ;MIN VAL
+ POP P,CVPR ;PRINCIPAL VARIATION
+ POP P,R ;MAX VAL
+ POP P,EGMVC
+ POP P,HSADR ;HASH ADDRESS OF CURRENT POSITION
+ POP P,LGLMST ;SAVED PDL
+ POP P,A
+ JRST EGGC1
+
+EGBSFC: CAMLE R,EGBMX(P) ;SKIP ON DONT WANT MOVE
+ CAMGE Q,EGBMN(P)
+
+EGBMNC: CAMLE Q,EGBMN(P) ;BEST MIN?
+ CAMGE R,EGBMX(P)
+
+EGNBMN: MOVEM Q,EGBMN(P) ;NEW BEST MIN
+EGNBMX: MOVEM R,EGBMX(P) ;NEW BEST MAX
+ MOVEM Q,EGBMN(P)
+
+EGNBSF: MOVE A,POSHSA
+ MOVEM A,EGBHSH(P)
+ SKIPE C,EGBPV(P)
+ PUSHJ P,LFSRC
+ MOVSI C,40000
+ PUSHJ P,RECMH
+ MOVE C,CVPR
+ MOVE A,EGMOVC(P)
+ DPB A,[PUSNM,,(C)]
+ MOVEM C,EGBPV(P)
+ XCT ABTST(I)
+ JRST EGABC
+ XCT EGNBMX(I)
+ XCT ABUPT(I)
+ PUSHJ P,BPRVS
+ JRST EGTRA2
+
+EGABC: XCT ABVLI(I) ;CLOBBER LEADING VALUE TO INFINITY
+ XCT EGNBMX(I)
+ PUSHJ P,UNMOVE
+ POP P,T
+ JRST EGTRA3
+
+EGUPLN: SETZM EGXM(I) ;UNPLAN
+ SETZM WPLAN(I)
+ POPJ P,
+
+EGVRET: PUSHJ P,EGVRUT ;VALRET
+ JRST EGLEAV
+
+EGRB: CAMG R,A
+ CAML Q,A
+
+EGRETB: PUSH P,EGVAL ;RETURN CURRENT BEST SO FAR IF BETTER THAN SPECIFIED VALUE ;RETBET
+ PUSHJ P,EGVCVT
+ POP P,EGVAL
+ XCT EGRB(I) ;SKIPS IF BEST SO FAR GOOD ENOUGH
+ POPJ P,
+
+EGDONE: MOVEI D,CPOPJ ;DONE
+ SKIPN EGMVC
+EGLEAV: MOVEI D,POPJ1 ;LEAVE
+ JRST EGPOP
+
+EGVRUT: PUSHJ P,EGVCVT ;VALRUT
+ MOVE TT,LMGD
+ SOJE TT,CPOPJ
+ MOVEI D,CPOPJ
+EGVALR: SKIPE C,CVPR
+ PUSHJ P,LFSRC
+ SETZM CVPR
+EGVLRP: MOVEI T2,-1
+ MOVE R,A
+ MOVE Q,R
+EGPOP: HRLZ C,EGVCNT ;UNBIND ALL VARS
+ HRR C,EGVARX
+ AOBJP C,EGPOPE ;EXCEPT X
+EGPOPL: MOVE A,(C)
+ PUSHJ P,EGGC
+ AOBJN C,EGPOPL
+EGPOPE: MOVEI A,-1 ;RESTORE PDL
+ MOVE P,@EGVARA
+ POP P,EGXM(I)
+ POP P,WPLAN(I)
+ SKIPN B,EGTSW
+ JRST (D)
+ CAIN D,CPOPJ
+ ISOUT [.ASCII ?*U!Q *U!R?]
+ SOUT [ASCIZ \
+
**********
+
\]
+ JRST (D)
+
+EGVCVT: TRZE A,400 ;CONVERT CHEG VALUE TO MAIN PROGRAM VALUE
+ SKIPA A,EGLIT(A)
+ MOVE A,@EGVARA
+ LDB D,[360600,,A]
+ CAIE D,EGINTT
+ EGRTTY [ASCIZ \NON-NUMERIC ARG\]
+ PUSHJ P,EGINTU
+ SUB A,B
+ CAIGE C,500.
+ JRST EGVCVA
+ JUMPE A,EGVSTO ;CERTAIN WIN, LOSS, OR DRAW
+ CAILE A,500.
+ MOVEI A,500.
+ CAMGE A,[-500.]
+ MOVNI A,500.
+ MOVEI B,67400-500._5
+ SUB B,LMGD
+ SKIPG A
+ MOVNS B
+ ASH A,5
+ ADD A,B
+EGVCV1: JUMPE I,EGVSTO
+ MOVNS A
+EGVSTO: MOVEM A,EGVAL
+ POPJ P,
+
+EGVCVA: IMULI A,PWNV ;NOT CERTAIN
+ IDIVI A,100.
+ JRST EGVCV1
+
+EGVAL: 0 ;SAVED VALUE FOR PLAY
+
+EGMVC: 0 ;MOVE COUNTER
+;CHESS DATA MANIPULATION
+
+EGGTSA: TRZE A,400
+ SKIPA A,EGLIT(A)
+ MOVE A,@EGVARA
+EGGTSQ: LDB D,[360600,,A] ;GET SQUARE VALUE OF ARG
+ ANDI A,177
+ CAIE D,EGSQT
+ CAIN D,EGMOVT
+ POPJ P,
+ CAIE D,EGPCT
+ EGRTTY [ASCIZ \EGGTSQ: WRONG TYPE ARG\]
+ MOVE A,PIECEL(A)
+ POPJ P,
+
+EGGTPA: TRZE A,400
+ SKIPA A,EGLIT(A)
+ MOVE A,@EGVARA
+EGGTPC: LDB D,[360600,,A] ;GET PIECE VALUE OF ARG
+ CAIN D,EGPCT
+ POPJ P,
+ CAIE D,EGMOVT
+ JRST EGGTP1
+ LDB A,[110600,,A]
+ POPJ P,
+EGGTP1: CAIE D,EGSQT
+ EGRTTY [ASCIZ \EGGTPC: WRONG TYPE ARG\]
+ SKIPG A,BOARD(A)
+ EGRTTY [ASCIZ \EGGTPC: NO PIECE ON SQUARE\]
+ SUBI A,PIECE
+ POPJ P,
+
+EGPIEC: EXCH A,B ;PIECE
+ PUSHJ P,EGGTPA
+ HRLI A,EGPCT_14
+ JRST EGGCAB
+
+EGSQUA: EXCH A,B ;SQUARE
+ PUSHJ P,EGGTSA
+ HRLI A,EGSQT_14
+ JRST EGGCAB
+
+EGSSID: EXCH A,B ;SIDE
+ PUSHJ P,EGGTSA
+ LDB A,[BFILE,,BPREL(A)]
+ SOS A
+ LSH A,-2
+ JRST EGGCIA
+
+EGFILE: EXCH A,B ;FILE
+ PUSHJ P,EGGTSA
+ LDB A,[BFILE,,BPREL(A)]
+ JRST EGGCIA
+
+EGRANK: EXCH A,B ;RANK
+ PUSHJ P,EGGTSA
+ LDB A,[BRANK,,BPREL(A)]
+ JUMPE I,EGGCIA
+ MOVE A,REVERS(A)
+ JRST EGGCIA
+
+EGSCOL: EXCH A,B ;SCOLOR
+ PUSHJ P,EGGTSA
+ LDB C,[BCOLR,,BPREL(A)]
+ JRST EGGCIA
+
+EGPCOL: EXCH A,B ;PCOLOR
+ PUSHJ P,EGGTPC
+ LDB A,[430100,,PIECE(A)]
+ XOR A,I
+ JRST EGGCIA
+
+EGMVDS: EXCH A,B ;MVDIST
+ PUSHJ P,EGGTSA
+ LDB T,[BFILE,,BPREL(A)]
+ LDB TT,[BRANK,,BPREL(A)]
+ MOVE A,@EGVARC
+ PUSHJ P,EGGTSQ
+ LDB C,[BFILE,,BPREL(A)]
+ LDB A,[BRANK,,BPREL(A)]
+ SUB A,TT
+ SUB C,T
+ MOVMS A
+ MOVMS C
+ CAMGE A,C
+ MOVE A,C
+ JRST EGGCIA
+
+EGINSQ: EXCH A,B ;INSQ
+ PUSHJ P,EGGTPA
+ EXCH A,C
+ PUSHJ P,EGGTPA
+ SKIPGE RPIECE(C)
+ SKIPL LMGT(A)
+ EGRTTY [ASCIZ \INSQ: ARGS NOT K,P\]
+ MOVE D,PIECE(A)
+ HLR D,PIECE(C)
+ MOVE T,PIECEL(C)
+ MOVE TT,PIECEL(A)
+ LDB A,[BFILE,,BPREL(T)]
+ LDB C,[BFILE,,BPREL(TT)]
+ SUB C,A
+ MOVMS C
+ LDB T,[BRANK,,BPREL(T)]
+ LDB TT,[BRANK,,BPREL(TT)]
+ JUMPL D,EGISQ1 ;D<0 IF PAWN BLACK
+ MOVE T,REVERS(T)
+ MOVE TT,REVERS(TT)
+EGISQ1: CAIN TT,7
+ MOVEI TT,6
+ MOVSI A,EGLOGT_14
+ TLC D,(D)
+ JUMPGE D,EGISQ2 ;D<0 IF PAWN AND KING OF OPPOSING COLORS
+ TLC D,(D)
+ SKIPE I
+ TLC D,400000
+ SKIPGE D ;D<0 IF KING TO MOVE
+ AOS TT
+EGISQ2: CAMLE T,TT ;SEE IF KING CLOSER TO 8TH RANK
+ JRST EGGCAB
+ CAMGE C,TT ;SEE IF KING CLOSER TO PAWN THAN PAWN IS TO QUEENING
+ AOJA A,EGGCAB
+ JRST EGGCAB
+
+EGOPPI: EXCH A,B ;OPP
+ PUSHJ P,EGGTSA
+ EXCH A,C
+ PUSHJ P,EGGTSA
+ MOVE C,BPREL(C)
+ XOR C,BPREL(A)
+ MOVSI A,EGLOGT_14
+ TLNE C,1001
+ JRST EGGCAB
+ AOJA A,EGGCAB
+
+EGSQGR: EXCH A,B ;SQ>RNK
+ PUSHJ P,EGGTSA
+ TRZE C,400
+ SKIPA C,EGLIT(C)
+ MOVE C,@EGVARC
+ LDB D,[360600,,C]
+ CAIE D,EGINTT
+ EGRTTY [ASCIZ \NON-NUMERIC ARG\]
+ LSH C,6
+ ASH C,-6
+ SKIPE I
+ MOVNS C
+ IMULI C,BW
+ ADD A,C
+ HRLI A,EGSQT_14
+ JRST EGGCAB
+;LOGICAL OPERATIONS
+
+EGNOR: MOVE D,[PUSHJ P,EGNORI] ;NOR
+ JRST EGANOR
+EGNORI: IOR B,C
+ TRC B,1
+ POPJ P,
+
+EGAND: SKIPA D,[AND B,C] ;AND
+EGOR: MOVE D,[IOR B,C] ;OR
+EGANOR: TRZE B,400
+ SKIPA B,EGLIT(B)
+ MOVE B,@EGVARB
+ TRZE C,400
+ SKIPA C,EGLIT(C)
+ MOVE C,@EGVARC
+ LDB T,[360600,,B]
+ LDB TT,[360600,,C]
+ CAIN T,EGLOGT
+ CAIE TT,EGLOGT
+ EGRTTY [ASCIZ \NON-LOGICAL ARG\]
+ XCT D
+ JRST EGGCBA
+;INTEGER ARITHMETIC
+
+EGADD: SKIPA D,[ADD B,C] ;ADD
+EGSUB: MOVE D,[SUB B,C] ;SUB
+EGADSB: PUSHJ P,EGINTU
+ XCT D
+ TLZ B,770000
+ JRST EGGCIB
+
+EGMUL: SKIPA D,[IMUL B,C] ;MUL
+EGDIV: MOVE D,[IDIV B,C] ;DIV
+EGMD: PUSHJ P,EGINTU
+ LSH B,6
+ LSH C,6
+ ASH B,-6
+ ASH C,-6
+ XCT D
+ TLZ B,770000
+ JRST EGGCIB
+
+EGMOD: MOVE D,[PUSHJ P,EGMOD1] ;MOD
+ JRST EGMD
+
+EGMOD1: IDIV B,C
+ MOVE B,C
+ POPJ P,
+
+EGDIF: PUSHJ P,EGINTU ;DIF [ABS OF SUB]
+ SUB B,C
+ JRST EGABS1
+
+EGMIN: SKIPA D,[CAMLE B,C] ;MIN
+EGMAX: MOVE D,[CAMGE B,C] ;MAX
+EGMNX: PUSHJ P,EGINTU
+ LSH B,6
+ LSH C,6
+ XCT D
+ MOVE B,C
+ LSH B,-6
+ JRST EGGCIB
+
+EGABS: TRZE B,400 ;ABS
+ SKIPA B,EGLIT(B)
+ MOVE B,@EGVARB
+ LDB D,[360600,,B]
+ CAIE D,EGINTT
+ EGRTTY [ASCIZ \NON-NUMERIC ARG\]
+EGABS1: LSH B,6
+ ASH B,-6
+ MOVMS B
+ JRST EGGCIB
+
+EGINTU: TRZE B,400
+ SKIPA B,EGLIT(B)
+ MOVE B,@EGVARB
+ TRZE C,400
+ SKIPA C,EGLIT(C)
+ MOVE C,@EGVARC
+ LDB T1,[360600,,B]
+ LDB T2,[360600,,C]
+ CAIN T1,EGINTT
+ CAIE T2,EGINTT
+ EGRTTY [ASCIZ \NON-NUMERIC ARG\]
+ POPJ P,
+;;CONDITION INTERPRETING
+
+EGDEFD: LDB D,[360600,,A] ;DEFD
+ JUMPN D,POPJ1
+ POPJ P,
+
+;INTEGER CONDITIONS
+
+EGCEQ0: PUSHJ P,EGINCK ;=0
+ EGRTTY [ASCIZ \=0: NON-NUMBERIC ARG\]
+ JUMPE A,POPJ1
+ POPJ P,
+
+EGCL0: PUSHJ P,EGINCK ;<0
+ EGRTTY [ASCIZ \<0: NON-NUMERIC ARG\]
+ JUMPL A,POPJ1
+ POPJ P,
+
+EGCG0: PUSHJ P,EGINCK ;>0
+ EGRTTY [ASCIZ \>0: NON-NUMERIC ARG\]
+ JUMPG A,POPJ1
+ POPJ P,
+
+EGCODD: PUSHJ P,EGINCK ;ODD
+ EGRTTY [ASCIZ \ODD: NON-NUMERIC ARG\]
+ TRNE A,1_6
+ AOS (P)
+ POPJ P,
+
+EGINCK: LDB D,[360600,,A] ;CHECK FOR INTEGER IN A
+ LSH A,6
+ CAIN D,EGINTT
+ AOS (P)
+ POPJ P,
+
+;LOGICAL CONDITIONS
+
+EGTRUE: CAMN A,EGT ;TRUE
+ AOSA (P)
+ CAMN A,EGF
+ POPJ P,
+ EGRTTY [ASCIZ \T: NON-LOGICAL ARG\]
+
+;SET CONDITIONS
+
+EGMT: LDB D,[360600,,A] ;EMPTY
+ CAIE D,EGSETT
+ EGRTTY [ASCIZ \EMPTY: NON-SET ARG\]
+ SKIPN (A)
+ AOS (P)
+ POPJ P,
+;CHESS CONDITIONS
+
+EGFAR: PUSHJ P,EGGTSQ ;FAR
+ LDB A,[BFILE,,BPREL(A)]
+ SOS D,A
+ LSH D,-2
+ MOVEI A,EGSIDE
+ SKIPN A,@EGVARA
+ EGRTTY [ASCIZ \FAR: SIDE UNDEFINED\]
+ CAIE D,(A)
+ AOS (P)
+ LDB D,[360600,,A]
+ CAIE D,EGINTT
+ EGRTTY [ASCIZ \FAR: SIDE NON-NUMERIC\]
+ POPJ P,
+
+EGRKF: PUSHJ P,EGGTSQ ;RF
+ LDB A,[BFILE,,BPREL(A)]
+ CAIE A,1
+ CAIN A,8
+ AOS (P)
+ POPJ P,
+
+EGNTF: PUSHJ P,EGGTSQ ;NF
+ LDB A,[BFILE,,BPREL(A)]
+ CAIE A,2
+ CAIN A,7
+ AOS (P)
+ POPJ P,
+
+EGNNTF: PUSHJ P,EGNTF ;NNF
+ POPJ P,
+ SOS D,A
+ LSH D,-2
+ MOVEI A,EGSIDE
+ SKIPN A,@EGVARA
+ EGRTTY [ASCIZ \NNF: SIDE UNDEFINED\]
+ CAIN D,(A)
+ AOS (P)
+ LDB D,[360600,,A]
+ CAIE D,EGINTT
+ EGRTTY [ASCIZ \NNF: SIDE NON-NUMERIC\]
+ POPJ P,
+
+EGKING: PUSHJ P,EGGTPC ;KING
+ SKIPGE RPIECE(A)
+ AOS (P)
+ POPJ P,
+
+EGPAWN: PUSHJ P,EGGTPC ;PAWN
+ SKIPGE LMGT(A)
+ AOS (P)
+ POPJ P,
+
+EGQUEE: PUSHJ P,EGGTPC ;QUEEN
+ LDB A,[PTID,,PIECE(A)]
+ CAIN A,QID
+ AOS (P)
+ POPJ P,
+
+EGROOK: PUSHJ P,EGGTPC ;ROOK
+ LDB A,[PTID,,PIECE(A)]
+ CAIN A,RID
+ AOS (P)
+ POPJ P,
+
+EGBISH: PUSHJ P,EGGTPC ;BISH
+ LDB A,[PTID,,PIECE(A)]
+ CAIN A,BID
+ AOS (P)
+ POPJ P,
+
+EGNIGH: PUSHJ P,EGGTPC ;(K)NIGHT
+ LDB A,[PTID,,PIECE(A)]
+ CAIN A,KNID
+ AOS (P)
+ POPJ P,
+
+EGCAPT: LDB D,[360600,,A] ;CAPT
+ CAIE D,EGMOVT
+ EGRTTY [ASCIZ \CAPT: NON-MOVE ARG\]
+ LDB D,[110600,,A]
+ ANDI A,177
+ SKIPE BOARD(A)
+ JRST POPJ1
+ SKIPGE LMGT(D)
+ CAME A,GHLOC
+ POPJ P,
+ JRST POPJ1
+
+EGPASS: PUSHJ P,EGGTPC ;PASSD
+ SKIPL LMGT(A)
+ EGRTTY [ASCIZ \PASSD: NON-PAWN ARG\]
+ SKIPE PPASED(A)
+ AOS (P)
+ POPJ P,
+
+EGCHK: LDB D,[360600,,A] ;CHECK
+ CAIE D,EGMOVT
+ EGRTTY [ASCIZ \CHECK: NON-MOVE ARG\]
+ LDB B,[110600,,A]
+ ANDI A,700177
+ PUSH P,T
+ PUSH P,TT
+ PUSHJ P,TMOVE
+ JRST EGCHK1 ;NOT LEGAL, SO NOT A CHECK
+ MOVE A,@GAMP
+ TRNE A,CHKBT
+ AOS -2(P)
+ PUSHJ P,UNMOVE
+EGCHK1: POP P,TT
+ POP P,T
+ POPJ P,
+
+EGPDP: PUSHJ P,EGGTPC ;PDP
+ SKIPL LMGT(A)
+ EGRTTY [ASCIZ \PDP: NON-PAWN ARG\]
+ SKIPGE PPTP(A)
+ AOS (P)
+ POPJ P,
+
+EGKMV: LDB D,[360600,,A] ;KING MOVE?
+ CAIE D,EGMOVT
+ EGRTTY [ASCIZ \EGKMV: NON-MOVE ARG\]
+ LDB D,[110600,,A]
+ SKIPGE RPIECE(D)
+ AOS (P)
+ POPJ P,
+
+EGRWKE: PUSHJ P,EGKMV ;RWK=
+ JRST POPJ1
+ ANDI A,177
+ LDB A,[BRANK,,BPREL(A)]
+ MOVE D,PIECEL(D)
+ LDB D,[BRANK,,BPREL(D)]
+ CAMN A,D
+ AOS (P)
+ POPJ P,
+
+EGWPC: PUSHJ P,EGGTPC ;WPC
+ JUMPN I,EGWPC1
+ SKIPL PIECE(A)
+ AOS (P)
+ POPJ P,
+EGWPC1: SKIPGE PIECE(A)
+ AOS (P)
+ POPJ P,
+
+EGWSQ: PUSHJ P,EGGTSQ ;WSQ
+ TRNN A,1
+ AOS (P)
+ POPJ P,
+
+EGSAFE: PUSHJ P,EGKMV ;SAFE
+ JRST EGSF1
+ ANDI A,177
+EGSF1A: MOVEI B,EGWP-EGIVAR+1
+ MOVE B,@EGVARB
+ MOVE B,PIECEL(B)
+ JRST EGSF2
+EGSF1: SKIPL LMGT(D)
+ JRST EGSF3
+ ANDI A,177
+ MOVEI B,EGWK-EGIVAR+1
+ MOVE B,@EGVARB
+ MOVE B,PIECEL(B)
+ EXCH A,B
+EGSF2: MOVEI C,EGBK-EGIVAR+1
+ MOVE C,@EGVARC
+ MOVE C,PIECEL(C)
+ LDB D,[BRANK,,BPREL(B)]
+ LDB B,[BFILE,,BPREL(B)]
+ LDB T1,[BRANK,,BPREL(C)]
+ LDB C,[BFILE,,BPREL(C)]
+ SUB C,B
+ MOVMS C
+ SUB T1,D
+ MOVMS T1
+ CAMGE C,T1
+ MOVE C,T1
+ LDB T1,[BRANK,,BPREL(A)]
+ LDB A,[BFILE,,BPREL(A)]
+ SUB A,B
+ MOVMS A
+ SUB T1,D
+ MOVMS T1
+ CAMGE A,T1
+ MOVE A,T1
+ CAMG A,C
+ AOS (P)
+ POPJ P,
+
+EGSF3: MOVEI A,EGWK-EGIVAR+1
+ MOVE A,@EGVARA
+ MOVE A,PIECEL(A)
+ JRST EGSF1A
+
+EGOPPC: PUSHJ P,EGKMV ;OPP
+ JRST EGOPC1
+ ANDI A,177
+ JRST EGOPC2
+EGOPC1: MOVEI A,EGWK-EGIVAR+1
+ MOVE A,@EGVARA
+ MOVE A,PIECEL(A)
+EGOPC2: MOVE A,BPREL(A)
+ MOVEI B,EGBK-EGIVAR+1
+ MOVE B,@EGVARB
+ MOVE B,PIECEL(B)
+ XOR A,BPREL(B)
+ TLNN A,1001
+ AOS (P)
+ POPJ P,
+;;ORDERING OPERATION INTERPRETING
+
+EGDEEP: LDB C,[360600,,A] ;DEEP
+ LDB D,[360600,,B]
+ CAIN C,EGMOVT
+ CAIE D,EGMOVT
+ EGRTTY [ASCIZ \DEEP: NON-MOVE ARG\]
+ LDB C,[700,,A]
+ LDB D,[700,,B]
+ LDB C,[BRANK,,BPREL(C)]
+ LDB D,[BRANK,,BPREL(D)]
+ SUB C,D
+ SKIPE I
+ MOVNS C
+ JUMPGE C,CPOPJ
+ EXCH A,B
+ POPJ P, ;RANK(A)# PC ATTACKED, THAXV APPROX VALUE OF THIS ATT
+
+
+ATHRP: 0 ;ALLOCATOR POINTER TO AUX THREAT TBL
+
+;MVDST ENTRY
+NWMVE==2 ;# WDS IN MOVE TABLE DESC ENTRY
+;WD1
+;4.9 USED FOR MARKED OUT BIT
+MVDSFT==11. ;SHIFT TO MOVE MVDCAP ETC INTO MVDCD (+SWAP)
+MVDCD=350600 ;DESCRIPTION CODE 0 CAPT. LOSS OR GAIN; 1 DEFENSE 2 BLOCKED DEFENSE
+ ;3 ABANDONMENT 4 PIN 5 ATTACK 6 ATTACK ON SQUARE NEAR K 7 SUPPORT OF OTHER ATTACK
+ ;10 PUSH PASSED P 11 BLOCK PASSED P 12 BLOCKING HIS DEFENSE
+ ;13 CAPTURE CONSTRAINED PIECE 14 MVING INTO PRISE CALC LOSS
+ ;15 UNBLOCKING HIS ATTACK 16 SETTING UP DISCOVERY
+ ;17 RELEASING PIN ON HIM 20 RELEASING ATTACK ON PIN
+ ;21 HOLDING PIN 22 ATT PINNED PIECE 23 HELPING TO RELIEVE
+ ;PIN BY DEFENDING BASE PIECE 24 PAWN BREAK
+ ;25 RELEASING ATTACK ON HIS PIECE 26 RELEASING PIN
+ ;27 GAINING CONTROL OF SQUARE
+ ;30 TOO EARLY TO MOVE THIS PC W/O POSITIVE REASON
+ ;31 INITIAL DEVELOPING MOVE 32 PINNING CONSTRAINED PC
+ ;33 MVING THREATNED PIECE 34 UNBLOCKING PASSED P
+ ;35 RELEASING ATT ON SQ NEAR K 36 RLSING DEF
+ ;37 INTERPOSING
+MVSAB==200,, ;STRONG THREAT BIT ADD TO SAGAIN INSTEAD OF USUAL
+MVDAB==400,, ;DOUBLE ATTACK MARKER (SET IN ATT ENTRY IF A DISCOVERY ALSO
+ ;ATTACKS SAME SQ)
+MVBDAB==320100 ;BIT ASSOC WITH ABOVE
+MVWAB==1000,, ;WEAK ATTACK BIT (ADD TO PGAIN)
+MVATB==2000,, ;SET IF "ATTACKING THRU"
+MVATBB==340100 ;BYTE PNTR ASSOC WITH ABOVE
+MVDSQ=220700 ;SQUARE
+;2.8,2.9 FREE
+MVDPC2=120600 ;OUR PIECE MOVING
+MVDDIR==70300 ;DIRECTION OF ATTACK
+MVDDIS=60100 ;ASSOCIATED WITH DISCOVERY
+MVDDIB==100 ;BIT ASSOC WITH ABOVE
+MVDPC=600 ;PIECE BLOCKED/UNBLOCKED IF DISCOVERED OR LEFT LOOSE IF CONSTRAINT BROKEN
+
+;WD2 RH ASSOCIATED VALUE
+
+MVDCAP==0 ;CAPT
+MVDDEF==1 ;DEFENSE
+MVDBDF==2 ;BLOCKING OUR DEFENSE
+MVDABN==3 ;BREAKING CONSTRAINT
+MVDPIN==4 ;MVDSQ HAS BASE SQUARE MVDPC PIECE MAYBE PINNED
+MVDAT==5 ;ATTACK WD2 HAS THREATNED CALC GAIN
+MVDDSQ==6 ;DENYING SQUARE
+MVDPPP==10 ;PUSH PASSED P
+MVDBPP==11 ;BLOCK PASSED P
+MVBHD==12 ;WD2 HAS THREATNED GAIN
+MVCCP==13 ;CAPT CONSTRAINED PIECE
+MVEP==14 ;MOVING INTO PRISE
+MVDHA==15 ;DISCOVERING ATTACK BY HIM
+MVDSD==16 ;SETTING UP POSSIBLE DISCOVERY BY ATTACKING OUR GUY
+ ;WHO COULD MOVE AWAY EXPOSING ATTACK ON HIM
+ ;MVDPC => PIECE MAYBE DISCOVERED ON
+ ;MVDPC2 => OUR GUY TO MOVE TO EFFECT DISCOVERY
+ ;MVDSQ => SQUARE OF OUR GUY TO MOVE OUT OF WAY
+ ;(HIS GUY MAY BE ON SQUARE NOW IF MOVE IS CAPTURE)
+ ;VAL => VAL IF DISCOVERY WERE ATTACK
+MVDRPN==17 ;RELEASING PIN ON HIS PC AT SQ BY MOVING PINNING PC
+MVDRPA==20 ;RELEASING ATT ON HIS PINNED P AT SQ
+MVDHPN==21 ;HOLDING PIN (NEGATES MVDRPN)
+MVDAPP==22 ;ATTACKING HIS PINNED PIECE
+MVDDBP==23 ;DEFENDING BASE PIECE
+MVDPWB==24 ;PAWN BREAK
+MVDRLA==25 ;RELEASING ATTACK ON HIS PIECE
+MVDROP==26 ;RELEASING PIN ON US BY MOVING BASE PIECE
+MVDGSQ==27 ;GAINING CONTROL OF SQUARE
+MVDTE==30 ;TOO EARLY TO MOVE THIS PIECE W/O POSITIVE REASON
+MVDDVM==31 ;INITIAL DEVEL MOVE
+MVDPCP==32 ;PIN CONSTRAINED PIECE VAL = DIF VALUE OF PIN
+MVDMTP==33 ;MOVING THREATNED PIECE
+MVDUBP==34 ;UNBLOCKING PASSED P
+MVDUOP==35 ;UNBLOCKING OUR PASSED P
+MVDRDF==36 ;RELEASING DEFENSE
+MVDINT==37 ;INTERPOSING
+MVDTHU==40 ;DEFENDING THRU OPP'S PIECE
+MVDRPI==41 ;RELEASING PIN ON US BY INTERPOSING
+MVDFHI==42 ;FORCING HIM TO IGNORE CONSTRAINTS
+ ;(MVDAB MAY BE SET)
+MVDPPT==43 ;PINNING + THREATNIING W/PAWN
+MVDAPS==44 ;ATTACK STOPSQ OF OPPOSING P P
+MVDCPB==45 ;MOVE COVERED BY PIN, IE IF
+ ;HE CAPTS, THAT PIECE (HIS) WOULD BECOME BASE PIECE OF PIN
+ ;PINNING A CONSTRAINED PC
+MVDXRY==46 ;ATTACKING PC WITH LESSOR SLIDING PC.
+ ;IF IT MOVES, ATTACK WILL BE DISCVERED ON THIRD PC WITH POTENTIAL VALUE
+MVDTRD==47 ;OFFERING TRADE. JUST LIKE MVDAT BUT WAIT TO SEE IF TREAT LIKE
+ ;TRADE OR ATTACK
+MVDPRP==50 ;RELIEVING PIN OR CONSTRAINT AND THUS
+ ;REINFORCING CURRENTLY OUTSTANDING (BUT QUESTIONABLE) THREAT
+MVDPRM==51 ;THREATNING PROMOTION IE MVING P TO 7TH RANK.
+ ;ENTRY FOR EACH ACCESSIBLE 8TH RANK SQUARE
+MVDGBP==52 ;GIVING HIM BACKWARD P (P MOVE MAKING RAM, HE HAS P ON ADJOINING
+ ;FILE THAT WILL NOT BE SUPPORTED BY P AS IT ADVANCES PAST
+MVDPNK==53 ;MOVING P NEAR HIS K POSITION
+MVDRS==54 ;SEVERLY RESTRICTING HIS PC (NO NSQS LEFT)
+MVDTF==55 ;THREATEN FORK
+
+TR6THT: [ASCIZ / CAPT /] ;THREAT CODES
+ [ASCIZ / M ATTACK /]
+ [ASCIZ / MATE THREAT /]
+ [ASCIZ / STRONG ATTACK /]
+ [ASCIZ / TRADE THREATNED /]
+ [ASCIZ / PUSH P P/]
+ [ASCIZ / TRD WEAK P /]
+ [ASCIZ / PUSH PAST /]
+ [ASCIZ / THR TO GET CRADLE TRAP /]
+
+TR6ATT: [ASCIZ / SEC ATT /] ;AUX THREAT CODES
+ [ASCIZ / MULT ATTED /]
+
+DEFINE MVDM A,B,C/
+IFSN A,, A==.-TR6PT
+ MVDMR [B
+]
+ C
+TERMIN
+
+DEFINE MVDDTA B,C
+B!C!TERMIN
+
+DEFINE MVDMR A
+MVDDTA [DEFINE MVDDTA B,C
+B!][A!C!TERMIN]
+TERMIN
+
+TR6PT: MVDM ,0,[ASCIZ / CAPT /] ;MOVE DESCRIPTION CODES
+ MVDM ,DFSAVE,[ASCIZ / DEF /]
+ MVDM ,ALOSS,[ASCIZ / BLOCKED OUR DEF /]
+ MVDM ,ALOSS,[ASCIZ / BREAK CONSTRAINT /]
+ MVDM ,IGAIN,[ASCIZ / PIN /]
+ MVDM ,MOVE AGAIN,[ASCIZ / ATTACK /]
+ MVDM ,SQGAIN,[ASCIZ / DENYING SQ /]
+ MVDM ,0,[ASCIZ / SUPPORT /]
+ MVDM ,PPPGN,[ASCIZ / PUSH P P /]
+ MVDM ,DFSVP,[ASCIZ / BLOCK P P /]
+ MVDM ,MOVE AGAIN,[ASCIZ / BLK HIS DEF /]
+ MVDM ,MOVE AGAIN,[ASCIZ / CAPT CONSTRAINED PIECE /]
+ MVDM ,0,[ASCIZ / MVING INTO PRISE, CALC LOSS /]
+ MVDM ,ALOSS,[ASCIZ / UNBLOCKING HIS ATTACK /]
+ MVDM ,IGAIN,[ASCIZ / SETTING UP DISCOVERY /]
+ MVDM ,0,[ASCIZ / RELEASING PIN ON HIM /]
+ MVDM ,0,[ASCIZ / RELEASING ATT HIS PINNED PIECE /]
+ MVDM ,0,[ASCIZ / HOLDING PIN /]
+ MVDM ,IGAIN,[ASCIZ / ATT PINNED PIECE /]
+ MVDM ,PINRLS,[ASCIZ / DEFENDING BASE PIECE /]
+ MVDM ,SQGAIN,[ASCIZ / PAWN BREAK /]
+ MVDM ,0,[ASCIZ / RELEASING ATTACK /]
+ MVDM ,PINRLS,[ASCIZ / RELEASING PIN ON US BY MOVING BASE PIECE /]
+ MVDM ,SQGAIN,[ASCIZ / GAINING CONTROL OF SQUARE /]
+ MVDM ,PMLSS,[ASCIZ ? TOO EARLY TO MOVE PC W/O REASON ?]
+ MVDM ,0,[ASCIZ / INIT DEVL MV / ]
+ MVDM ,MOVE AGAIN,[ASCIZ / PIN CONSTRAINED PC /]
+ MVDM ,0,[ASCIZ / MVING THREATNED PC /]
+ MVDM ,ALOSS,[ASCIZ / UNBLOCK HIS P P /]
+ MVDM ,SQGAIN,[ASCIZ / UNBLOCK OUR P P /]
+ MVDM ,0,[ASCIZ / RELEASING DEF /]
+ MVDM ,DFSAVE,[ASCIZ / INTERPOSING /]
+ MVDM ,0,[ASCIZ / DEFENDING THRU /]
+ MVDM ,PINRLS,[ASCIZ / RELIEVING PIN BY INTERPOSING /]
+ MVDM ,MOVE AGAIN,[ASCIZ / FORCING HIM TO IGNORE CONSTRAINT /]
+ MVDM ,MOVE AGAIN,[ASCIZ / PINNING + THREATNING W P /]
+ MVDM ,DFSVP,[ASCIZ / ATT STOPSQ OF P.P. /]
+ MVDM ,PINRCV,[ASCIZ / COVERED BY PIN /]
+ MVDM ,MOVE AGAIN,[ASCIZ / XRAY /]
+ MVDM ,MOVE AGAIN,[ASCIZ / OFFER TRADE /]
+ MVDM ,OSTPRP,[ASCIZ / PREP OS THREAT /]
+ MVDM ,AGAIN,[ASCIZ / THREAT TO Q /]
+ MVDM ,AGAIN,[ASCIZ / GIVE HIM WEAK P /]
+ MVDM ,AGAIN,[ASCIZ / MOVE P NEAR HIS K /]
+ MVDM ,SQGAIN,[ASCIZ / TRAPPING HIS PC /]
+ MVDM ,MOVE AGAIN,[ASCIZ / THREATEN FORK /]
+
+THRUTB: MVDDTA
+ ;WHAT TO DO WITH VALUES OF MVDST AT "ADD UP TIME".
+ ;0 IGNORE VALUE
+ ;4.9=1 PUSHJ TO ROUTINE
+ ;4.8=1 (MOVE) COMBINE INTO "AGAIN CHAIN" (IF NO MVSAB)
+ ;OTHERWISE ADD TO VARIABLE SPECIFIED IN RH
+
+EXPUNGE MVDM,MVDDTA,MVDMR
+
+;MOVE FORMAT ON PDL
+;WD1 LH SQUARE RH PIECE (NORMAL HACK FOR O-O ETC)
+;WD2 PLAUSIBILITY
+;WD3 4.9 ALWAYS INVESTIGATE RH EXPECTED DELTA
+BMTHR==200000 ; 4.8 MOVE IS A FORK (IE LMFORS >1)
+BIDSF==100000 ;4.7 MOVE DISCOVERS AN IMPORTANT ATTACK (LMFOR)
+BPTHDS==410200 ;BYTE POINTER TO BMTHR AND BIDSF
+BATH==40000 ;ANSWERS ALL THREATS
+BASTH==20000 ;ANSWERS SOME THREATS
+BATHM==10000 ;ANSWERS ALL BUT MINOR THREATS
+PCGMCL==340200 ;4.3-4.2 PCG MOVE CLASS
+ ;0 LGL MV (NO REAL THREAT ANSWERING OR ATTACK PWR)
+ ;1 HOLDING MV (NO ATT PWR BUT ANSWERS THREATS)
+ ;2 ATTACKING MV
+BTMPM==1000 ;TEMPO MOVE IE AUATHV=ALOSS=0 POS VAL >0 NTMPS >0
+BNEGF==400 ;HAD (ACTIVE) NEG FACTORS (IE ALOSS, ETC, .NE. 0)
+BSOS==200 ;HAD SOSTV .NE. 0
+BQMV==100 ;QUEENING MV
+BMATH==40 ;MOVE SEEMS TO BE A MATE (HMM)
+BRPLY==20 ;"REPLYING" MOVE. IE BOTH SIDES HAVE OUTSTANDING THREATS
+ ;AND THIS MOVE ANSWERS HIS MAINTAINING OURS
+
+;WD4 POSITIONALITY
+;WD5
+MPCLBS==360600 ;4.9-4.4 MOVE CLASS (COMP WITH BEST SO FAR)
+MPCLAB==300600 ;4.3-3.7 MOVE CLASS (COMP WITH NEED FOR AB FLUSH)
+MPCSPC==220600 ;3.6-3.1 SPECIAL CLASS 0 NONE
+ ;RH PNTR TO WD0 MVDST SAVE BLOCK (OR 0)
+;WD6 MAX POSSIBLE GAIN
+
+NWPOS==2 ;# WDS PER INERATION OF OPEN SORT
+NOCM==50. ;NUMBER INTERATIONS IN OPEN SORT
+NWDPM==6 ;NUMBER WDS PER MOVE ON PDL
+
+;PIN TABLE ENTRY
+;WD1 LINK 4.9 PIN TO K
+;WD2 4.9-4.4 ATTACKING PIECE
+PINATP==360600
+;4.3-3.5 PINNED SQUARE (OCC BY PIECE WHICH IS PINNED)
+PINOPS==261000
+;3.1-3.4 PIN DIRECTION
+PINDIR==220400
+;1.1-1.6 PIN BASE SQUARE
+PINBS==700
+;BIT 2.9 USED IN IC CHECKER
+DPBIT==200000 ;PIN BY DOUBLED P
+BPDPB==200100 ;BYTE PNTR TO ABOVE SET ON PIN BY DOUBLED PIEECES
+IPBIT==100000 ;PIN AT LEAST PARTIALLY DUE TO INADEQUATE PROTECTION OF BASE PIECE
+BIPBIT==170100 ;PNTR TO ABOVE
+WSBIT==40000 ;PIECE PINNED IS NOT SUPPORTED BY A P AND CANNOT BE IN ONE MOVE
+BWSBIT==160100 ;PNTR TO ABOVE
+;WD3 PIN VALUE (APPROX LOSS IF BROKEN)
+
+;DSCOV TABLE ENTRY (PIN BUT BASE PIECE NOT E.P. EVEN IF BROKEN)
+;LIKE PINT BUT WD3 NOT PRESENT
+
+;MV PREP TBL
+MPTYP==410300 ;0 RLS PIN 1 RLS CONSTRAINT
+MPTHN==221100 ;INDEX OF OUR THREAT (FROM ORIGON OF OUR THREAT TBL)
+MPPNR==2200 ;PNTR TO PIN OR CON
+
+NWPPE==1 ;# WDS IN OUR PREP ENTRY
+
+IFN UTAPE-TS,[
+TAPAC"==A
+NURBUF"==3
+NUWBUF"==2
+UTCCHN"==2
+TPCHN"=1
+TPCHNA"==100
+NDIR"==2
+BLKSPC"==3
+CLKCHN"==3
+APRINT"=10005
+]
+
+IFN TS,[
+TYIC==1
+TYOC==2
+UTYIC==3
+LPTC==4
+ALPTC==14
+UTYOC==5
+AUXTYO==6
+TYINT==1
+PDLOVI==200000
+CLKINT==10000
+]
+
+IFN DECTS,[
+TYIC==1
+TYOC==1
+UTYIC==3
+LPTC==4
+UTYOC==5
+
+RELEASE=71000,,
+INIT=41000,,
+ENTER=77000,,
+OUTBUF=65000,,
+OUTPUT=67000,,
+LOOKUP=76000,,
+INBUF=64000,,
+CALLI=47000,,
+JOBOPC==130
+JOBFF==121
+INPUT=66000,,
+IN=56000,,
+CALL=40000,,
+]
+
+IFN DSPLY,[
+IFE TS,[DISCHN==7
+FLGCHN==6
+]
+DISIZE==1740
+]
+IFE DEC,[
+LPTCHN==5
+LPTBSZ==300.
+]
+TTYCHN==4
+APRCHN==3
+
+IFE TS,DDT=34000+IFE DEC,140000
+
+PDLL=4000.
+
+
+;ASSORTED OUTPUT UUO'S
+PTTY=1000,,
+SOUT=2000,,
+ERRTTY=3000,,
+;UUOS 4-12 USED FOR PLS MOVE TRACE
+ISOUT=13000,, ;LIKE SOUT BUT INTERPRET * FROBS ETC
+
+IFE DEC,[HSTB=200000 ;IF AT HACK USE MOBY TABLE IN MOBY MEMORY
+ HTNE=100000-1
+ HSTBV=HSTB+HTNE
+ HSTBL==HSTB+2*HTNE
+ HSTBVV==HSTB+3*HTNE
+]
+
+IFE DECTS,IFN DEC,HTNE=10000-1
+IFN DECTS,HTNE=300-1
+
+IFN BOOK,[BMXS==200. ;MAX NO TAGS
+ BKSS==9000. ;NO BYTES IN ACTUAL BOOK]
+
+IFN DECTS,[
+BKSS=5900.
+BXMS==85.
+]
+
+DEFINE RC A,B/
+ RCSTO \.+1,[A]\NRMM,ZZ
+ NRMM==NRMM+1
+ B
+ TERMIN
+
+DEFINE RCSTO A,B,C,D
+ DEFINE D!C
+ A,,[.ASCII ?B?]
+ TERMIN
+ TERMIN
+
+DEFINE RS A,B/
+ RCSTO \.+1,[A]\NSMM,ZQ
+ NSMM==NSMM+1
+ B
+ TERMIN
+
+DEFINE RP A,B/
+ RCSTO \.+1,[A]\NPMM,ZX
+ NPMM==NPMM+1
+ B
+ TERMIN
+
+DEFINE RQ A,B/
+ RCSTO \.+1,[A]\NQMM,ZY
+ NQMM==NQMM+1
+ B
+ TERMIN
+
+
+NRMM==0 ;NUMBER REMOTE MACROS OF FORM ZZ...
+NSMM==0 ;NUMBER REMOTE MACROS OF FORM ZQ...
+NPMM==0 ;# OF FORM ZX...
+NQMM==0 ;# OF FORM ZY...
+
+;MACRO TO DEFINE BOARD SIZE ARRAY THAT WILL NOT BE REFERENCED OFF ACTUAL BOARD
+DEFINE BSIZE A
+IRPS Z,,A
+Z=.-2*BW-1
+TERMIN
+BLOCK 8*BW-2
+TERMIN
+
+DEFINE FIX A
+.ZZQ==A
+ MULI .ZZQ,400
+ TSC .ZZQ,.ZZQ
+ ASH .ZZQ+1,-243(.ZZQ)
+TERMIN
+
+DEFINE FLOAT A
+.ZZQ==A
+ TLC .ZZQ,232000
+ FAD .ZZQ,.ZZQ
+TERMIN
+
+DEFINE MMSA1
+ MOVEM 16,MMSSAC+16
+ MOVEI 16,MMSSAC
+ BLT 16,MMSSAC+15
+TERMIN
+
+DEFINE MMRA1
+ MOVSI 16,MMSSAC
+ BLT 16,16
+TERMIN
+
+DEFINE MMSAVAC
+ MOVEM 16,CATCSA+16
+ MOVEI 16,CATCSA
+ BLT 16,CATCSA+15
+TERMIN
+
+DEFINE MMRSAC
+ MOVSI 16,CATCSA
+ BLT 16,16
+ TERMIN
+
+;CLOCK ROUTINES HERE SO AS TO NOT GET SWAPPED OUT
+IFN TS,[
+INT: 0
+ 0
+ MOVEM A,INTA
+ MOVE A,INT
+ MOVEM B,INTB
+ MOVEM C,INTC
+ TRZE A,CLKINT
+ JRST CINT
+CINT1: TRZE A,PDLOVI
+ JRST INT2
+ TRZE A,TYINT
+ JRST CTYIN
+CTYIN1: JUMPE A,INT1
+ .VALUE
+INT1: MOVE A,INTA
+ MOVE B,INTB
+ MOVE C,INTC
+ .DISMIS INT+1
+
+CTYIN: SKIPE TWOGTS
+ JRST @TWINTS
+CINT2: MOVEI B,TYIC
+ .ITYIC B,
+ JRST INT1
+ CAIN B,^W
+ JRST ITYOF
+ CAIN B,^V
+ JRST ITYON
+ CAIE B,^G
+ JRST INTNG
+ SETOM QTF
+ SETZM TRLMVP
+ SETZM UREADF
+ SKIPGE TTYOFF
+ JRST ITYON
+INTNG: CAIN B,^S
+ CLEARM UREADF
+ CAIN B,^F
+ JRST DISFL
+ CAIN B,^X
+ .DSTOP
+ JRST CTYIN1
+
+DISFL: .DCLOSE
+ MOVNI B,2
+ MOVEM B,FFANCY
+ JRST INT1
+
+CINT: SKIPGE CLKCOK
+ JRST CINT1
+ MOVE C,CURCLK
+ CAIN C,OCLOCK
+ JRST CINT1
+ MOVEM T,CINTTS
+ SKIPL CLKSW
+ JRST CINT1A
+ MOVEI B,5
+ ADDM B,(C)
+CINT1C: MOVEI C,WCLOCK
+ JSP T,CINT1B
+ MOVEI C,BCLOCK
+ JSP T,CINT1B
+ MOVE T,CINTTS
+ JRST CINT1
+
+CINT1A: AOSGE CTMR1
+ JRST CINT1
+ MOVNI A,30.
+ MOVEM A,CTMR1
+ MOVE A,[64,,B]
+ .GETLOC A,
+ SUB B,BWCLK
+ MOVEM B,WCLOCK
+ MOVE A,[65,,B]
+ .GETLOC A,
+ SUB B,BBCLK
+ MOVEM B,BCLOCK
+ JRST CINT1C
+
+CINT1B: MOVE B,(C)
+ MOVE C,2(C) ;GET BYTE PNTR
+ MOVEM C,DISIP
+ IDIVI B,10.
+ JSR DISC
+ MOVEI C,".-"0
+ JSR DISC
+ JSR DIS1
+ JSR DIS1
+ MOVE C,B
+ JSR DISC
+ JRST (T)
+
+DIS1: 0
+ IDIVI B,10.
+ JSR DISC
+ IDIVI B,6.
+ JSR DISC
+ MOVEI C,":-"0
+ JSR DISC
+ JRST @DIS1
+
+DISC: 0
+ ADDI C,"0
+ DPB C,DISIP
+ MOVSI C,60000
+ ADD C,DISIP
+ SKIPGE C
+ SUB C,[440000,,1]
+ MOVEM C,DISIP
+ JRST @DISC
+
+CINTTS: 0
+CTMR1: 0
+
+INTA: 0
+INTB: 0
+INTC: 0
+DISIP: 0
+
+DISL2: 20156220054
+ 61200274040
+WNUM: 607260607260
+ 605660343337
+ 20000
+ 61200024040
+BNUM: 607260607260
+ 605660373737
+ 3000,,
+
+]
+
+;SUMMARY OF ARRAYS AFFECTED BY MOVE AND UNMOVE
+
+;PIECE (PIECE NUMBER)
+ ;4.9=BLACK 3.6-3.8=TYPE OF PIECE
+ ;1.1-2.9=ADR OF "MM" ROUTINE OR ZERO IF PIECE NON EXTANT
+
+;NMOVES (PIECE NUMBER)
+ ;=NUMBER OF MOVES MADE SO FAR
+
+;NMKING (SIDE)
+ ;0=>UNCASTLED 1=>CASTLED
+
+;NUMORP (SIDE)
+ ;=NUMBER OF ORTHOGONALLY SLIDING PIECES
+
+;PCATV (PIECE NUMBER)
+ ;1
+
+;RPIECE (PIECE NUMBER)
+ ;4.9=KING
+
+;BOARD (SQUARE NUMBER)
+ ;-1=>OFF BOARD
+ ;0=>EMPTY
+ ;>0=POINTER INTO PIECE ARRAY
+
+;PIECEL (PIECE NUMBER)
+ ;FOR EXISTANT PIECES THEIR SQUARE NUMBER
+
+;RFPCS (PIECE NUMBER)
+ ;4.9=ORTHOGONALLY SLIDING
+
+;DDPCS (PIECE NUMBER)
+ ;4.9=DIAGONALLY SLIDING
+
+;SLDPC (PIECE NUMBER)
+ ;4.9=SLIDING
+
+;PVALUE (PIECE NUMBER)
+ ;=VALUE OF PIECE
+
+;RPVAL (PIECE NUMBER)
+ ;=REAL VALUE OF PIECE
+
+;PCBAL (SIDE)
+ ;TOTAL MATERIAL (K=600) EXCEPT PAWNS
+
+;PNBAL (SIDE)
+ ;PAWN MATERIAL
+
+;LMGT (PIECE NUMBER)
+ ;4.9=PAWN
+ ;1.1-2.9=ADR OF "LM" ROUTINE
+
+;LMGSTD (PIECE NUMBER)
+ ;4.9=WHITE PAWN
+ ;1.1-2.9=ADR OF "LM" OR "LS" ROUTINE
+
+;SNFBP (PIECE NUMBER)
+ ;4.9=BLACK PAWN
+
+;PLPWN (PIECE NUMBER)
+ ;PLY AT WHICH PAWN WAS PROMOTED OR -1
+
+;ASSOCIATED WITH BOARD CONTROL HACK
+;NWK BOARD SIZE JFCL EXCEPT ADD C,NSKI FOR
+;SQUARES IN 8 NEIGHBORHOOD OF WK.
+;NBK SAME FOR NEAR BK
+;PINVF VALUE INV. PROPORTIONAL TO PIECE VALUE
+
+;RMDTB (PIECE NUMBER)
+;DISPATCH FOR INCREMENTAL UPDATING ROUTINES
+;SIGN SET FOR BISHOPS
+
+;WPNC(SIDE)
+ ;=NUMBER OF PAWNS
+
+;WQNC(SIDE)
+ ;=NUMBER OF QUEENS
+
+;WRKC(SIDE)
+ ;=NUMBER OF ROOKS
+
+;WBSC(SIDE)
+ ;=NUMBER OF BISHOPS
+
+;WKNC(SIDE)
+ ;=NUMBER OF KNIGHTS
+
+;WLBC(SIDE)
+ ;=NUMBER OF BISHOPS ON LIGHT SQS
+
+;WDBC(SIDE)
+ ;=NUMBER OF BISHOPS ON DARK SQS
+
+;SUMMARY OF ARRAYS SET BY CAT
+
+;BDBLK (SQUARE NUMBER)
+ ;BLOCKING DATA
+
+;ONEB (SQ N)
+ ;POTENTIAL PIN DATA ETC
+ ;SQUARE NUMBER OF FIRST OBSTRUCTION A SLIDING PIECE HITS FROM THAT SQUARE TO
+ ;SECOND OBSTRUCTION
+
+;PPASED (PIECE NUMBER)
+ ;4.9=PASSED PAWN BLOCKED BY FRIENDLY PAWN
+ ;1.1-2.9=RANK IF PASSED PAWN,0 OTHERWISE
+
+;PPTP (PIECE NUMBER)
+ ;-1=>PAWN DEFENDED BY PAWN
+ ;1=>FORWARD, 2=>BACKWARD, 3=>ISOLATED PAWN
+ ;0 OTHERWISE
+
+;WPNFLS (FILE)
+ ;=NUMBER OF WHITE PAWNS
+
+;BPNFLS (FILE)
+ ;=NUMBER OF BLACK PAWNS
+
+;WNPNFL (FILE)
+ ;=NUMBER OF NON PASSED WHITE PAWNS
+
+;BNPNFL (FILE)
+ ;=NUMBER OF NON PASSED BLACK PAWNS
+
+;PINT (PIECE NUMBER)
+ ;PIN DATA
+
+;BDA1, BDA2, AND BDA3 (SQUARE NUMBER)
+ ;ATTACK DIRECTION DATA
+
+;BA (SQUARE NUMBER)
+ ;=BLACK ATTACKS
+
+;WA (SQUARE NUMBER)
+ ;=WHITE ATTACKS
+
+
+;SUMMARY OF MISCELLANEOUS ARRAYS
+
+;NSM (PIECE NUMBER)
+ ;=NUMBER OF APPARENTLY SAFE MOVES AVAILABLE
+
+;PNTB (PIECE NUMBER)
+ ;=BYTE POINTER TO BIT IN BPCSOP
+
+;NPODT (PIECE NUMBER)
+ ;BYTE POINTER TO BIT IN NPODBT(C)
+
+;NPOD (PIECE NUMBER)
+ ;=NUMBER OF ATTACKED PIECES GIVEN PIECE IS ONLY DEFENDER OF
+
+;NPODBT (PIECE NUMBER)
+ ;BITS FOR NPOD
+
+;BPREL (SQUARE NUMBER)
+ ;4.1-4.9=FILE NUMBER
+ ;3.1-3.9=RANK NUMBER
+ ;2.1-2.9=POSITIVE DIAGONAL NUMBER
+ ;1.1-1.9=NEGATIVE DIAGONAL NUMBER
+
+;CDEVT (PIECE NUMBER)
+ ;CURRENT DEVELOPMENT VALUE
+
+;NPCPT(PIECE NUMBER)
+ ;=ADDRESS OF W- OR B- -PNC, -KNC, -BSC, -RKC, OR -QNC
+ ;SIGN SET FOR QUEENS
+
+;ASSIGNMENTS IN PIECE ARRAY
+
+NPC==32.
+NPCS==16.
+BD2==12.*10.
+BW==10.
+PTID==270300
+PID==0
+KNID==1
+BID==2
+RID==3
+QID==4
+KID==5
+
+LGAME==300. ;MAX LENGTH OF GAME IN PLIES
+
+;BOARD ORG.
+; WHITE
+; -1 ...
+; -1 ...
+; -1 WKR1 WKN1 ... -1
+; ..
+
+
+;STANDARD INTERNAL MOVE FORMAT
+
+;4.9 =0 NO CAPT 1 = CAPT
+;4.8 =0 WHITE =1 BLACK
+;4.7-4.2 =NO OF MOVING PIECE 6 BITS
+;4.1 3.4 =ORG SQUARE 7 BITS
+;3.3 2.7 =CAP PIECE 6 BITS
+;1.9 2.6 DESTIN SQ 7 BITS
+;1.8 1 IF MOVE A CHECK
+;1.4 1.7 GHOST ELIM 4 BITS
+; IF WHITE MOVES, SQUARE IS 2*BW+5*BW+N+1
+; IF BLACK MOVES, 2*BW+2*BW+N+1
+;1.1 1.3 0 - 1 O-O 2 O-O-O 3 EP
+;4 PROMOTED TO QUEEN 5 ROOK 6 BIS 7 KNT
+
+
+;HASH TABLE FORMAT
+
+;1 WD KEY 1.1=0 WHITE TO MOVE 1 BLACK (HSTB)
+;SECOND SECTION
+;4.9 4.7 INFO CODE 0 ACTUAL POS VALU (HSTBV)
+;1 ACTUAL VALUE IS >= THIS VALUE(BETTER FOR SIDE TO MOVE) (NOT USED NOW)
+;2 ACT VALUE IS <= THIS VALUE(WORSE FOR SIDE TO MOVE) (NOT USED NOW)
+;3 POSITION REACHED IN GAME
+;4 POSITION PENDING IN CURRENT SEARCH
+;4.6 => 1 POS AFTER PRINC VAR IS IN GAME OR EARLIER IN SEARCH
+;3.1-3.4 PLYS DEEP THIS INFO BASED ON (SUM OF BASE PLYS LEFT+PCG PLYS+FEEDOVERS LEFT) MHPLN ACT GAME
+;3.6-3.5 BMTHR BIDSF
+;4.4 3.7 - PUSNM1 FLD
+;2.2-2.5 ACTUAL DEPTH IN TREE ENTRY GEN AT
+HNPIT==120400
+MHPIT==17 ;MAX # IN ABOVE
+;2.1 1-> THIS MV WAS A HASH FORCE (IF PMG OR PMGIN PCG) FEEDOVER TRY LOST IN PCG
+;1.9 1-> MV SAVED FROM PREV SEARCH AT INCREASED DEPTH (USE ONLY FOR HASH FORCES)
+;1.7 1.8 MV GEN ID
+;1.1 1.6 PLAUS # OF MV AT PREV LVL
+HNPLB==220400 ;PLYS DEEP FIELD
+MHPLN==15. ;LARGEST # IN ABOVE
+HRBTS==260200 ;BMTHR,BIDSF
+HPUSNM==300700
+HPRMN==600 ;MV # OF MV THAT LED TO THIS AT PREV LVL
+HPVMGI==60200 ;0 PMG 1 STATEV 2 EGHACK 3 PMG IN PCG MODE
+HPPMB==400 ;SAVED FROM PREV SEARCH, USE ONLY FOR HASH FORCES
+BHPPMB==100100 ;BYTE PNTR TO ABOVE
+HHFRC==1000 ;THIS MOVE WAS A HASH FORCE
+HHFRCB==110100 ;BYTE PNTR TO ABOVE
+
+
+;HSTBL
+;RH LINK TO PRINC VARIATION IN HASH TBL OR -1
+HSTPON==310700 ;SQ OF PC TO MOVE (PRINC VAR)
+HSTSQN==220700 ;SQ TO MOVE TO OR 0 NONE OR 1 O-O OR 2 O-O-O
+HSTPRN==400300 ;SPECIAL MOVE BITS
+
+;HSTBVV
+;LH MAX LIM RH MIN LIM
+
+;HASH TBL STORED ON DSK
+
+;WD0,1,2,3, AS IN HASH TBL
+;WD4 FULL HASH OF LINK POS
+
+;MVDST SAVE FORMAT
+;WD0 LH # WDS IN THREAT SECTION, RH # WDS IN MVDST SECTION (OR 0=END)
+;WD1 MV
+;THREAT SECTION
+;MVDST SECTION
+;SAVE NON-CANCELLED MVDST ENTRIES
+NWOSMV==2 ;# OVERHEAD WDS
+
+;NOTE: SAFSP POINTS TO FREE WD
+
+;SURPRISE TRY TABLE
+
+;WD0
+
+;4.9 NEGATED
+QTCD==350600 ;BASIC CODE CAPT PC (1), DEF SQ (2), MV PC (3)
+QARG==220700 ;ARG PC OR SQ
+QTVAL==2200 ;BASIC MAX VALUE
+
+;WD1
+;# MVS THAT SATISIFY + TRIED (LH)
+;# MVS THAT SATISFY + UNTRIED (RH)
+
+;WD2
+;HIGHEST UNTRIED OR -1
+;ORIG PLAUS (LH) PNTR TO MV (RH)
+
+;WD3
+;# TIMES ENTERED-1
+
+;WD4
+;MAX EXPT OF MV THAT KEYED THIS (LH)
+;MAX POSSIBLE " " (RH)
+
+QTNWE==5 ;# WDS IN SURPRISE TRY ENTRY
+
+
+;EVALUATION SPECIAL FACTORS TBL
+;PC DIST FROM SQ
+;IMMOBILIZE PG (W OUR P'S)
+;FORCE PG TO ADVANCE (NO P P THO)
+;ADV PG
+;ADV K
+;MAX DIST BASE OF PG -OPP K
+
+;OPENING BOOK FORMAT
+
+;6 BIT BYTES, 77=E 76=T (NEXT 2 CHRS GIVE TAG NO TRANSFERRED TO)
+;75 MOVE >= ADD 75 TO NEXT CHR UNLESS IT IS A 75 ETC
+;REST = NO OF MOVE AS GEN BY PLAUS MOVE GEN PRIOR TO SORT
+;BOOK SYM TAB FIRST BLOCK BKSMT 6 BIT SYM
+;SECOND BKSMTV RH=CHR ADR LH=DEPTH ALONG TREE
+
+;MACRO FOR ASSEMBLING WORDS WITH VARIOUS BITS SET
+DEFINE BIT A/
+ZZ==0
+IRPS Q,CC,[A]
+IFSE [CC]+,[ ZZ=ZZ+Q
+ .STOP
+]
+ZZ==ZZ+_-
+TERMIN
+ZZ
+TERMIN
+
+DEFINE CONC A,B
+A!B!TERMIN
+
+DEFINE FLT A
+<.OP FADR <.OP TLC A 233000 > 0 >TERMIN
+
+;MACRO FOR TAGGING ARRAYS OFFSET BY ONE
+DEFINE PP A
+IRPS Z,,A
+ Z=.-1
+ TERMIN
+ TERMIN
+
+;SYMBOLIC BYTE POINTERS INTO STANDARD MOVE FORMAT
+MPC=340600
+MPO=250700
+MPTK=170600
+MPTO=100700
+MGHEL=30400
+CHKBT==200
+
+PTIDS=320400 ;BDAST ASSOC IN PIECE
+SBRLNG==40 ;SEARCH WIDTH VECTOR LENGTH
+
+IFE TS+DECTS,[.ZZ=.
+LOC 41
+ JSR ERROR
+LOC 40+2*TTYCHN
+ JSR TTYBRK
+LOC 40+2*APRCHN
+ JSR IAPRBRK
+LOC .ZZ]
+
+IFN TS,[.ZZ==.
+LOC 41
+ JSR ERROR
+ JSR INT
+LOC .ZZ]
+
+IFN DECTS,[
+.ZZ=.
+LOC 41
+ JSR ERROR
+LOC 124
+ JRST RENTER
+LOC 140
+ JRST GO
+LOC DECASA
+]
+
+JRST GO
+
+LMGD: 0 ;REAL PLY DEPTH OF CURRENT ANALYSIS
+LMGD2: 0 ;PSEUDO DEPTH
+
+PP PIECE:,
+OPIECE: REPEAT 2,[
+ZZ=1
+ REPEAT 8,0 PID,MMWPWN ;WHITE
+IFE .RPCNT,WKR:
+ <_3+RID>_23.+MMRK
+ZZ=ZZ+1
+ 0 KNID,RMWN
+ <_3+BID>_23.+MMBS
+ZZ=ZZ+1
+IFE .RPCNT,WKING:
+ 0 KID,RMWK
+ <_3+QID>_23.+MMQN
+ZZ=ZZ+1
+ <_3+BID>_23.+MMBS
+ZZ=ZZ+1
+ 0 KNID,RMWN
+IFE .RPCNT,WQR:
+ <_3+RID>_23.+MMRK
+ZZ=ZZ+1
+
+IFE .RPCNT, BPIECE: BPV=.-PIECE
+
+ REPEAT 8,SETZ PID,MMBPWN ;BLACK
+IFE .RPCNT,BKR:
+ SETZ+<_3+RID>_23.+MMRK
+ZZ=ZZ+1
+ SETZ KNID,RMBN
+ SETZ+<_3+BID>_23.+MMBS
+ZZ=ZZ+1
+IFE .RPCNT,BKING:
+ SETZ KID,RMBK
+ SETZ+<_3+QID>_23.+MMQN
+ZZ=ZZ+1
+ SETZ+<_3+BID>_23.+MMBS
+ZZ=ZZ+1
+ SETZ KNID,RMBN
+IFE .RPCNT,BQR:
+ SETZ+<_3+RID>_23.+MMRK
+ZZ=ZZ+1
+]
+
+PP NMOVES:, BLOCK NPC ;NUMBER OF MOVES FOR EACH PIECE
+
+NMKING: 0 ;0=UNCASTLED 1=CASTLED FOR WHITE
+ 0 ;FOR BLACK
+
+NUMORP: 3 ;NUMBER OF ORTHOGONALLY SLIDING PIECES FOR WHITE
+ 3 ;FOR BLACK
+
+BDAST: 0 ;MAPS COMPACTED CODE USED IN BDBLK TO PIECE NUMBER
+ REPEAT 2,[
+ IRP A,,[WKR,WKR+2,WKING+1,WKING+2,WQR]
+ A+NPCS*.RPCNT-PIECE
+TERMIN
+]
+ LOC BDAST+20
+
+
+PP PCATV:, REPEAT 32., 1
+
+PP NSM:, BLOCK NPC ;NUMBER OF APPARENTLY SAFE MOVES PER PIECE
+
+
+PP RPIECE:, REPEAT 2,[
+ REPEAT 11.,0 ;SIGN NEG FOR KINGS
+ SETZ
+ REPEAT 4,0
+]
+
+PP CDEVT:, BLOCK NPC
+
+TXTB: ASCII /WP!/
+ ASCII /WN!/
+ ASCII /WB!/
+ ASCII /WR!/
+ ASCII /WQ!/
+ ASCII /WK!/
+
+ ASCII /BP!/
+ ASCII /BN!/
+ ASCII /BB!/
+ ASCII /BR!/
+ ASCII /BQ!/
+ ASCII /BK!/
+
+TXTB1: ASCII /P!/+"P
+ ASCII /N!/+"N
+ ASCII /B!/+"B
+ ASCII /R!/+"R
+ ASCII /Q!/+"Q
+ ASCII /K!/+"K
+
+
+PP TXTB2:, REPEAT 2,[
+ ASCII /KRP!/
+ ASCII /KNP!/
+ ASCII /KBP!/
+ ASCII /KP!/
+ ASCII /QP!/
+ ASCII /QBP!/
+ ASCII /QNP!/
+ ASCII /QRP!/
+ ASCII /KR!/
+ ASCII /KN!/
+ ASCII /KB!/
+ ASCII /K!/
+ ASCII /Q!/
+ ASCII /QB!/
+ ASCII /QN!/
+ ASCII /QR!/
+]
+
+PP PLPWN:, REPEAT NPC,-1 ;PLY AT WHICH PAWN WAS PROMOTED
+
+PP RMDTB:, REPEAT 8,RMWP ;REMOVE PIECES ROUTINES SIGN SET FOR B'S
+ RMWR
+ RMWN
+ SETZ RMWB
+ RMWK
+ RMWQ ;RMWQ +RMBQ REALLY SAME
+ SETZ RMWB
+ RMWN
+ RMWR
+ REPEAT 8, RMBP
+ RMBR
+ RMBN
+ SETZ RMBB
+ RMBK
+ RMBQ
+ SETZ RMBB
+ RMBN
+ RMBR
+
+GHLOC: 0 ;LOCN OF GHOST OR ZERO IF NONE
+GHSD: 0 ; - = BLACK + WHITE
+
+DIRDT: 0
+RDT: -1
+ 1
+ BW
+ -BW
+
+BDT: BW-1
+ BW+1
+ -BW+1
+ -BW-1
+
+RBDIR: 1
+ 1
+ 2
+ 2
+
+BBDIR: 3
+ 4
+ 3
+ 4
+
+TXDIR: ASCII /LR!/ ;NAMES OF DIRECTION AS PER ENTIRES IN BDA'S
+ ASCII /RR!/
+ ASCII /DF!/
+ ASCII /UF!/
+ ASCII /LLD!/
+ ASCII /LRD!/
+ ASCII /URD!/
+ ASCII /ULD!/
+ ASCII /NLR2!/
+ ASCII /NLL2!/
+ ASCII /NUR2!/
+ ASCII /NRL2!/
+ ASCII /NLR!/
+ ASCII /NLL!/
+ ASCII /NUR!/
+ ASCII /NUL!/
+ ASCII /EPL!/
+ ASCII /EPR!/
+
+INVDT: 1 ;NUMBER OF OPPOSITE DIRECTION
+ 0
+ 3
+ 2
+ 6
+ 7
+ 4
+ 5
+
+
+BOARD: REPEAT 2*BW,-1 ;THE INTERNAL BOARD
+ REPEAT 8,[-1
+ REPEAT 8,0
+ -1
+]
+ REPEAT 2*BW,-1
+
+PP PIECEL:, ;FOR EACH EXISTANT PIECE, A POINTER INTO BOARD
+ BLOCK NPC
+
+
+PP PFILE:, BLOCK NPC ;FILE PC ON
+PP PRANK:, BLOCK NPC ;RANK (FROM BPREL DIRECT)
+PP RPRANK:, BLOCK NPC ;RANK (REVERSED IF BLACK PC)
+
+PP NPCPT:, ;ADDRESS TO SOS IF PIECE GOES AWAY
+ REPEAT 8,WPNC
+ WRKC
+ WKNC
+ WBSC
+ NWKG ;!
+ SETZ WQNC
+ WBSC
+ WKNC
+ WRKC
+ REPEAT 8,BPNC
+ BRKC
+ BKNC
+ BBSC
+ NBKG ;!
+ SETZ BQNC
+ BBSC
+ BKNC
+ BRKC
+
+PP NPCP1:, ;ANOTHER ADDRESS TO SOS IF PC GOES AWAY
+ REPEAT 10.,NPCTEM ;DOES SOMETHING ONLY FOR B'S
+ WLBC
+ REPEAT 2,NPCTEM
+ WDBC
+ REPEAT 12.,NPCTEM
+ BDBC
+ REPEAT 2,NPCTEM
+ BLBC
+ REPEAT 2,NPCTEM
+
+NPCTEM: 0 ;RANDOM
+
+;BELOW ARRAYS MUST BE IN GROUP
+PP SPINT:, BLOCK NPC ;CONSTRAINT TABLE
+PP IATT:, BLOCK NPC ;I ATTACK
+PP ATTME:, BLOCK NPC ;ATTACK ME
+PP NSQDF:, BLOCK NPC ;SQS I DEF, HIS N ATTS, AND IT LOOKS LIKE HE COULD GO THERE EXCEPT FOR ME
+PP IDEF:, BLOCK NPC ;I DEF
+PP DEFME:, BLOCK NPC ;DEF ME
+
+SPINFS: 0 ;FREE STG CNR FOR SPINDT
+SPINFM: 0 ;SPINFS LVL BETWEEN CONSIDERING PARTICUAR MOVE
+
+LSPINLT==600
+SPINDT=.-1
+ BLOCK LSPINLT ;STG FOR SPINT, THRU DEFME
+
+MSSW: 1 ;MULTIPLE SEARCH SWITCH
+ICSW: -2 ;INCREMENTAL CAT SWITCH 0 NO IC -1 CHK OR 1 IC -2 SPOT CHECK
+LNSW: 0 ;.NE. 0 ENABLE LINE ANALYSIS
+PPVSW: 0 ;+ PRINT STATIC EVAL - ALSO DEVEL VALUES AFTER MOVE TYPED IN
+INVCLK: 0 ;XORED WITH CLOCK KLUDGE
+PARSW: 0 ;1 MACHINE SELECTS PARAMETERS
+ALGSW: 0 ;0 DESCRIPTIVE 1 ALGBRADIC -1 BOTH
+PMDDSW: 0 ;1 SHOW THREATS SECONDARY PINS PINS EN PRISE
+DFDSW: 0 ;1 USED DELAYED FEEDOVER HACK
+PCGSW: 2 ; USE P.C.G. FOR N PLYS AFTER BASIC DEPTH (PLUS FEEDOVERS)
+EST: 0 ;ESTIMATE FOR MULT SEARCH
+ESTSW: 0 ;-1 EST SET BY COMMAND DONT RECOMPUTE IF SAME PLYN
+SETESP: 0 ;PLYN FOR ABOVE
+
+EGSW: 0 ;1 USE END GAME HACK
+DBDSSW: 1 ;1 DEBUGGING OUT TO DIS, 0 TO TTY
+FCSW: 1 ;1 USE FORWARD CUTOFF HACK
+SASW: 0 ;DO SUPRISE AND THIS MANY PLIES DOWN
+SATRC: 0 ;TRACE SA
+SATRC1: JRST SATR1 ;MUST FOLLOW SATRC
+PMSASW: 1 ;DO POOR MAN'S SURPRISE ANAL THIS MANY PLIES DEEP
+CORSIZ: ICORSZ ;CURRENT COR SIZE
+HRCSW: 1 ;UPDATE HSH TBL FEATURE
+PARCSW: 0 ;DO PAR CHECK CYCLES
+TWOGTS: 0 ;1 THINK WHILE OTHER GUY THINKING
+SQCTSW: 1 ;1 USE SQUARE CTL IN STATEV
+MVNSW: 1 ;1 USE PC MOBILITY
+CASSW: 0 ;1 O-O,O-O-O ARE "PLAUSIBLE CAPTURES"
+SFSW: 0 ;ENABLE SPECIAL FACTOR HACK IN STATEV
+HMACP: 0 ;DEPTH TO COMPUTE HIS MULT ATT THREATS
+
+;4.9-4.7 0 SOUT 1 TYPE AS SIXBIT 2 PUSHJ 3 DPT 4 DPT RIGHT ADJ TO 24 MULT
+; 5 FLOATING PT 4.6 SAYS NO CR 4.5 SAYS TAB TO 24 MULT 6 FIXED FRACTION
+INFDT: 100000,,VNAME1
+ 100000,,VNAME2
+IFN TS,[ 200000,,DATP
+ 200000,,TIMP
+]
+ 40000,,[ASCIZ /SETD=/]
+ 300000,,HK1V
+ 40000,,[ASCIZ /SETW=/]
+ 200000,,PSETW
+ 40000,,[ASCIZ /SETP=/]
+ 200000,,PSETP
+ 40000,,[ASCIZ /SETF=/]
+ 300000,,FDCUT
+ 40000,,[ASCIZ /SETFD=/]
+ 300000,,FDDCUT
+ 40000,,[ASCIZ /PCGSW=/]
+ 300000,,PCGSW
+ 40000,,[ASCIZ /EST=/]
+ 300000,,MSIBB
+ 40000,,[ASCIZ /SETEST=/]
+ 300000,,ESTSW
+ 40000,,[ASCIZ /ALPHA/]
+ 300000,,BPREV
+ 40000,,[ASCIZ /BETA/]
+ 300000,,BPREV+1
+ 40000,,[ASCIZ /ACTIVITY DELTA/]
+ 600000,,ACTV
+ 40000,,[ASCIZ /BCS=/]
+ 300000,,NSBVS
+ 40000,,[ASCIZ /HASH=/]
+ 300000,,NHSW
+ 40000,,[ASCIZ /KINGSA=/]
+ 300000,,KINGSW
+ 40000,,[ASCIZ /SFS=/]
+ 300000,,FIS
+ 40000,,[ASCIZ /DFDSW=/]
+ 300000,,DFDSW
+ 40000,,[ASCIZ /EMTLSW=/]
+ 300000,,EMTLSW
+ 40000,,[ASCIZ /WTPWSW=/]
+ 300000,,WTPWSW
+ 40000,,[ASCIZ /WTPCSW=/]
+ 300000,,WTPCSW
+ 40000,,[ASCIZ /PWBSW=/]
+ 300000,,PWBSW
+ 40000,,[ASCIZ /ACTVSW=/]
+ 300000,,ACTVSW
+ 40000,,[ASCIZ /LNSW=/]
+ 300000,,LNSW
+ 40000,,[ASCIZ /ICSW=/]
+ 300000,,ICSW
+ 40000,,[ASCIZ /EGSW=/]
+ 300000,,EGSW
+ 40000,,[ASCIZ /FCSW=/]
+ 300000,,FCSW
+ 40000,,[ASCIZ /SASW=/]
+ 300000,,SASW
+ 40000,,[ASCIZ /HRCSW=/]
+ 300000,,HRCSW
+ 40000,,[ASCIZ /PARCSW=/]
+ 300000,,PARCSW
+ 40000,,[ASCIZ /TWOGTS=/]
+ 300000,,TWOGTS
+ 40000,,[ASCIZ /CSQSW=/]
+ 300000,,CSQSW
+ 40000,,[ASCIZ /SQCTSW=/]
+ 300000,,SQCTSW
+ 40000,,[ASCIZ /MVNSW=/]
+ 300000,,MVNSW
+ 40000,,[ASCIZ /BOOK=/]
+ 300000,,UBKF
+ 40000,,[ASCIZ /PMSASW=/]
+ 300000,,PMSASW
+ 40000,,[ASCIZ /CASSW=/]
+ 300000,,CASSW
+ 40000,,[ASCIZ /SFSW=/]
+ 300000,,SFSW
+ 40000,,[ASCIZ /HMACP/]
+ 300000,,HMACP
+
+LINFDT==.-INFDT
+
+VNAME1: .FNAM1
+VNAME2: .FNAM2
+
+STAPT: 60000,,[ASCIZ /P.M.G. RUN/]
+ 400000,,NPL
+ 60000,,[ASCIZ /STATEV RUN/]
+ 400000,,NSV
+ 60000,,[ASCIZ /PMG IN PCG MODE/]
+ 400000,,PCGMC
+ 60000,,[ASCIZ /FEEDOVERS/]
+ 400000,,NFD
+ 60000,,[ASCIZ /FEEDOV LIM REACHED/]
+ 400000,,NMFD
+ 60000,,[ASCIZ /MOVES MADE/]
+ 400000,,NMMV
+ 60000,,[ASCIZ /HASH MATCH P.M./]
+ 400000,,NHMCH
+ 60000,,[ASCIZ /HASH MATCH STATEV/]
+ 400000,,NHMSB
+ 60000,,[ASCIZ /TOTAL HASH MATCH/]
+ 400000,,THTM
+ 60000,,[ASCIZ /SECONDARY LINE ANAL/]
+ 400000,,NSLA
+ 60000,,[ASCIZ /MULT SEARCHES/]
+ 400000,,NSRCHS
+ 60000,,[ASCIZ /SFS CUTOFFS/]
+ 400000,,NSFSC
+ 60000,,[ASCIZ /# INV AT PMG/]
+ 400000,,NMINV
+ 60000,,[ASCIZ /# REJ PRIOR TO BEST/]
+ 400000,,NMRJ
+ 60000,,[ASCIZ /DLY DFOV ATT/]
+ 400000,,NDFDA
+ 60000,,[ASCIZ /# LOSERS/]
+ 400000,,NDFDL
+ 60000,,[ASCIZ /NATEVC=/]
+ 400000,,NATEVC
+ 60000,,[ASCIZ /ATEVLC=/]
+ 400000,,ATEVLC
+ 60000,,[ASCIZ /ATEVEC=/]
+ 400000,,ATEVEC
+ 60000,,[ASCIZ /NEVRCP/]
+ 400000,,NEVRCP
+ 60000,,[ASCIZ /# FORW CUT/]
+ 400000,,NFCO
+ 60000,,[ASCIZ /# POS W FCO/]
+ 400000,,NPWFCO
+ 60000,,[ASCIZ /# HSH FORCES/]
+ 400000,,NHFRC
+ 60000,,[ASCIZ /# PAR CHECK CYCLS/]
+ 400000,,NPCCY
+ 60000,,[ASCIZ /# SURPRISES/]
+ 400000,,NSPRS
+ 60000,,[ASCIZ /AVG # OF BEST MV/]
+ 500000,,RJRTO
+
+LSTAPT==.-STAPT
+
+SWSTF: 40000,,[ASCIZ /PARS DFR EMTLSW=/]
+ 300000,,EMTLSW
+ 40000,,[ASCIZ /WTPWSW=/]
+ 300000,,WTPWSW
+ 40000,,[ASCIZ /WTPCSW=/]
+ 300000,,WTPCSW
+ 40000,,[ASCIZ /PWBSW=/]
+ 300000,,PWBSW
+ 40000,,[ASCIZ /ACTVSW=/]
+ 300000,,ACTVSW
+
+LSWSTF==.-SWSTF
+
+LHFLT==20
+HFLT: BLOCK LHFLT ;RECORD LEVELS OF HASH MATCHES
+LSHFLT==20
+SHFLT: BLOCK LSHFLT ;MUST IMMEDIATELY FOLLOW HFLT
+
+IFN TS,[
+EHRNM: 0 ;RUN TIME AT WHICH ENTERED HACK1
+EHRTM: 0 ;REAL TIME AT WHICH ENTERED HACK1
+]
+MSIB: 200 ;OFFSET FOR INITIAL ALPHA AND BETA
+MSIBB: 0 ;INITIAL GUESS EVALUATION
+LSSFL: 0 ;-1 IF CURRENT SEARCH MUST GIVE FINAL RESULTS
+NPLNCP: 0 ;NUMBER PLY SINCE P MOVE OR CAPTURE
+CURCKS: 0 ;CLOCK AT ENTRY
+PPNTF1: 0
+PPNTF2: 0
+DBSUPS: 0 ;-1 DONT UPDATE DATA BASE AT MMOVE, ETC
+
+NPL: 0 ;NO TIMES PLAUS MV GEN RUN
+NSV: 0 ;NO TIMES STATEV RUN
+NFD: 0 ;NO FEEDOVERS
+NABF: 0 ;NO ALPHA BETA FLUSHES
+NMFD: 0 ;NO TIMES REACHED MAX FEEDOVER LIMIT
+NSVS: 0 ;NO TIMES STATEV CALLED SELF
+NCAT: 0 ;NO TIMES CAT RUN
+NMMV: 0 ;NO TIMES MMOVE RUN
+NHMCH: 0 ;NO HASH MATCHES PLS MOVE
+NHMSB: 0 ;NO HASH MATCHES STAT BOARD EV
+NFDCK: 0 ;NO OF FEEDOVERS IN CH AND NO KING MOVES
+NSLA: 0 ;NO SECONDARY LINE ANAL
+THTM: 0 ;NET TOTAL HASH MATCHES
+.TIME: 0 ;THINKING TIME
+..TIME: 0 ;THINK PER MAIN VARIATION
+OPNMID: 0 ;-1 => MV < 20 LOSS !!!
+
+NSFSC: 0 ;NUMBER SFS CUTOFFS
+NMRJ: 0 ;NUMBER MOVES REJECTED
+NMINV: 0 ;NUMBER MOVES INVESTIGATED AT PMG
+NDFDA: 0 ;NUMBER DELAYED FEEDOVERS
+NDFDL: 0 ;NUMBER THAT LOST
+PCGMC: 0 ;PMG IN PCG MODE
+NATEVC: 0 ;NUMBER TIMES ATEVE USED BECAUSE MORE THAN 5 BEAR ON A SQ
+ATEVLC: 0 ;NUMBER TIMES ATEVL CALLED
+ATEVEC: 0 ;NUMBER TIMES ATEVE CALLED
+NEVRCP: 0 ;NUMBER TIMES SQUARE RECOMPUTED DUE TO HACKAGE IN PMG
+NFCO: 0 ;# FORW CUTTOFFS
+NSPRS: 0 ;# SURPRISES
+NPWFCO: 0 ;# POS W/ AT LEAST ONE FCO
+NHFRC: 0 ;# HASH FORCES
+OPENF: 0 ;-1 => MV <10
+ ;LAST LOCN CLEARED AT HACK1
+
+PCRAT1: 0 ;CHANGE IN RATIO HACK (SEE STVL4)
+PNRAT1: 0 ;ABOVE FOR PAWNS
+PCRAT2: 0 ;PCBAL DIFF AT TOP
+PNRAT2: 0 ;PNBAL DIFF AT TOP
+CCANF1: 0 ;TEMP AT CCAN
+LPPMN: 0 ;PLAUSIBILITY RANK OF MOVE THAT GOT TO THIS POSITION
+SAFSP: 0 ;FREE P TO SAVE AREA F S
+SABEG: 0 ;BEG OF SAVE AREA
+SATEM: 0 ;PNTR TO FIRST WD SAVE AREA OF CURRENT MOVE
+
+IFN TS,..TSTM: 0 ;RUN TIME AT LAST P.V.
+
+NSRCHS: 0 ;NUMBER SEARCHES REQUIRED
+RJRTO: 0 ;AVG NUMBER MOVES INVESTIGATED BEFORE BEST FOUND AT PMG
+DISSUP: 0 ;-1 DONT UPDATE DISPLAY AT MNLP2
+GESTSW: 0 ;-1 EST FROM GAME 0 OTHERWISE
+NPCCY: 0 ;# PARAMETER CHECK CYCLES
+
+;TREE RELATIVE SWITCHES
+;MAY HAVE VALUES OF 1,0,-1,-2 (STORED IN 2 BITS IN GAMEV)
+EMTLSW: 0 ;-1 IF MATERIAL SUBSTANTUALLY EVEN AT TOP
+ ;IE SAVE TIME BY ELEMINATING PIECE RATIO HACK
+WTPWSW: 0 ;1 W WANTS TO TRADE PAWNS 0 DOESNT CARE -1 DOESNT WANT TO
+WTPCSW: 0 ;1 W WANTS TO TRADE PCS 0 DOESNT CARE -1 DOESNT WANT TO
+PWBSW: 0 ;0 NO P BREADTH HACK 1 FOR W -1 FOR BLACK
+ACTVSW: 0 ;0 NOT ACTIVITY HACK 1 LACK OF ACTIVITY BENEFITS WHITE
+ ;-1 BLACK
+NRLSWS==.-EMTLSW
+
+SRLSWS: BLOCK NRLSWS ;SAVED STATE OF SWITCHES
+
+SRLCPF: JFCL ;COMPARE FUNCTIONS XCT THIS IF SWITCH DFRS TO DEFERMINE IF IMPORTANT OF NOT
+ SKIPA ;SKIP IF RECOMPUTE
+ SKIPA
+ SKIPA
+ PUSHJ P,ACTC1
+
+
+ACTC1: IMUL R,ACTVSW
+ SKIPE ACTV
+ CAMG R,[-2*PWNV]
+ POPJ P,
+ JRST POPJ1
+
+
+LGMST1: 0
+ NPCS
+ 0
+
+LGMST2: -NPCS,,0+1
+ -NPCS,,NPCS+1
+ -NPCS,,0+1
+
+TRPPCF: 0 ;-1 IF B MAY BE TRAPPED BY P-N3
+
+;PRELIM THREAT ANALYSIS
+HTHRP: 0 ;POINTER TO BEG OF BLACK AGAINST WHITE THREAT TABLE
+ 0 ;PNTR TO WHITE AGAINST BLACK THREATS
+NHTHR: 0 ;NUMBER BLACK AGAINST WHITE THREATS
+ 0 ;# WHITE AGAINST BLACK
+TTLHT: 0 ;SUM VALUE BLACK AGAINST WHITE THREATS
+ 0 ;VAL WHITE AGAINST BLACK
+LTHR: 0 ;LARGEST OUTSTANDING THREAD B VS W
+ 0 ;W VS B
+NQTHR: 0 ;# QUESTIONABLE THREATS B AGAINST W
+ 0 ;# W AGAINST B
+OLTHR: LTHR+1
+ LTHR
+
+MPBAS: 0 ;PNTR TO MOVE PREP TBL
+NMP: 0 ;# ENTRIES IN MV PREP TBL
+
+SIDTM: 0 ;SIDE TO MOVE
+PLSUPV: 0 ;IF THIS VALUE EXCEEDED FOR SIDE TO MOVE, WILL
+ ;CAUSE SURPRISE AT HIGHER LEVEL (OR SETZ => NONE)
+PLMVDP: 0 ;PNTR TO THREAD-MVDST SAVE TBL FOR MOVE WE PLAYED PREV LEVEL
+ ;OR 0=> NONE
+MVDSP: 0 ;POINTER TO MOVE DESCRIPTION TABLE
+MVDMF: 0 ;POINTER TO MVDST AFTER CONSTANT FACTORS FOR ALL MOVES OF PIECE
+ ;COMPUTED AT LMGCD
+MVDDP: 0 ;POINTER TO MVDST AFTER FACTORS GENERATED BY DISCOVERIES
+NPPIN: 0 ;# POSSIBLE PINS STORED IN MVDST
+PCSATS: 0 ;SUPER STATIC VALUE OF BOARD AS IT STANDS
+AHDATS: 0 ;NET LACKING FOR AB CUT (-POSBGF)
+ABFATS: 0 ;NET LACKING FOR BSF (-POSBGF)
+POSBGF: 30 ;AMT TO ALLOW EXTRA IN ABOVE CALCS TO ALLOW FOR
+ ;POSSIBLE POSITIONAL CHNGS ETC.
+PMVORG: 0 ;PNTR TO BEG OF MOVE TABLE ON PDL
+HPMVP: 0 ;PNTR TO PMV FOR HIS PCS ON PDL.
+ ;(USE TO PASS CPCMVL TO LOWER LVL IF THEY GET CAPTED)
+THRT1: 0 ;TEMP
+THRT2: 0 ;-1 IF FIRST THREAT TO CAPTURE PIECE
+THR3CT: 0 ;TMP
+THRSAF: -1 ;0 AT LEAST 1 SEC THREAT STORED FOR THIS THREAT
+ATHRPP: 0 ;TEM FOR LAST D AT CLOS1
+ATHRPS: 0 ;ATHRP AT BEG OF THREAT
+THQST: 0 ;-1 IF FACT HIS PC WAS PINNED WAS IGNORED IN FIGURING THREAT OR E.P.
+PMDDT1: 0 ;PDL AT PMDD1
+PMDDT2: 0 ;TEMP AT PMDDN
+GDNMAG: 0 ;AMT ATS IS BETTER THAN NEEDED IF GDNATS = -1
+GDNATS: 0 ;-1 PCS ATS GOOD ENUF IF HIS THREATS ANSWERED
+INCHK: 0 ;0 NOT IN CHECK (IN CURRENT POSITION)
+ ;1 IN CHECK -1 DOUBLE CHECK
+QMOVE: 0 ;CURRENT MOVE AT PMG INVOLVES QUEENING (IF -1)
+TPNTM1: 0 ;VALUE OF THREAT AGAINST BASE PC AT TPN1
+CANTK: 0 ;IN PCG MODE, -1=> SIDE TO MOVE CAN TAKE PCSATS
+CANMV: 0 ;IN PCG MODE -1=> NOT IN CHECK OR HAVE LGL MV
+HEXP: 0 ;HIGHEST "EXPECTATION" FOR ANY MV
+NNBLDR: 0 ;# NON "BLUNDERS" AVAIL (IE EXPECTATION>-100)
+NTMPMV: 0 ;# TEMPO MVS
+NRPYMV: 0 ;# REPLYING MOVES
+BSTPMV: 0 ;BEST POSITION MOVE (WITH EGAIN >0)
+BSTPV: 0 ;POSITIONALITY OF ABOVE
+SBPMV: 0 ;SECOND BEST POSITIONAL MOVE
+SBPV: 0 ;POSITIONALITY OF ABOVE
+PCGMD: 0 ;-1 PMG IN PCG MODE
+PCGCF: 0 ;PCG CUTTOF IF -1
+PCGT1: 0 ;TEM
+SRTI: 0 ;-1 IF 4SORT RUN THIS LVL
+SASWL: 0 ;-1 STORE THREAT-MVDST SAVE STUFF THIS LVL
+EVHCL: 0 ;CLASS OF HIGHEST CLASS MV THAT EXISTS
+NTPCC: 0 ;.NE. 0 => HAVE PCS WITH NO SAFE MVS
+LGCLSW: 0 ;STG FOR CLASS WD PRIOR TO PUSHAGE
+TTLTVI: 0 ;INITIAL VALUE OF THTVAT
+THTVAT: 0 ;AMT OF CURRENT SUBTHREAT UNANSWERED
+THSMUA: 0 ;LARGEST AMT ANY SUBTHREAT UNANSWERED
+THLST: 0 ;LARGEST SUBTHREAT
+THVTAS: 0 ;THTVAT AFTER ANSWERING ANAL GOING INTO COUNTERING ANAL
+THANCT: 0 ;TEM
+CCAL: 0 ;RE CAPT THREAT LEFT (DURING SUBTHREAT ANAL)
+TMVTRC: 0 ;LARGEST AMT COUNTERED IN ANY SUBTHREAT
+TMLTPO: 0 ;TEMPO OF CURRENT SUBTHREAT
+VALTPO: 0 ;TEMPO OF LARGEST UNANSWERED SUBTHREAT SO FAR
+THAIDF: 0 ;# INADEQUATE DEFS (THIS THREAT)
+THAIDS: 0 ;SQUARE OF ABOVE
+IDFSQ: 0 ;INAD DEF SQ (MV AS A WHOLE)
+TEMSQ: 0 ;SQ OF TEMPO ATT
+TEMGY: 0 ;GUY
+TEMDIR: 0 ;DIRECTION IF SLIDING
+TEMORG: 0 ;ORGION OF TEMPO ATTACK
+LMPLF: 0 ;# PLYS OF BASIC DEPTH LIMIT LEFT
+RPVD: 6 ;DEPTH IN PCG INVESTIGATE "PROMISING" MOVES
+PMGTRF: 0 ;IF -1 WANT TO TRACE PMC IN AFTER MODE
+POSHSA: 0 ;HASH ADR
+LMGGPS: 0 ;GAME LVL AT LMGH1
+THJS: 0 ;SAVE J AROUND THREAT ANAL
+NSCTHR: 0 ;# SINGLE CAPT THREATS
+NMCTHR: 0 ;# MULT CAPT THREATS
+PCMVNG: 0 ;PIECE MOVING
+ORGPCL: 0 ;ORG LOCN OF MVING PC
+PCMPLL: 0 ;PDL LEVEL AT LMGRA
+CKDIR: 0 ;DIRECTION OF CHECK (IF SLIDING)
+CKPC: 0 ;PC CHECKING
+HFCTMP: 0 ;TMP
+ESPHM: 0 ;PNTR TO RET THR-MVDST ENTRY HIS MOVE (OR 0)
+ESAVL: 0 ;SURPRISE ANAL VAL (AT ESA)
+ESPCHT: 0 ;PC HE TOOK (IN SURPRISE ANAL)
+PUATHV: 0 ;PC ASSOC WITH UATHV
+PSLUAT: 0 ;2ND LARGEST
+P3LUAT: 0 ;3RD
+P4LUAT: 0 ;4TH
+3LUAT: 0 ;VAL OF 3RD
+4LUAT: 0 ;VAL OF 4TH
+
+
+NSACSQ: -1 ;# SQUARES TO SAC PC (DEF ONLY BY K) -1
+SACSQ: BLOCK 8 ;SQUARE
+SACPC: BLOCK 8 ;PC
+SACAMT: BLOCK 8 ;AMT OF SAC
+SACVL: BLOCK 8 ;EXCESS VALUES OF MVS ATTACKING SAC SQ
+SACLK: BLOCK 8 ;LINKS TO OTHER SACS ALSO THREATNED (DURING ANAL OF SINGLE MV)
+SACQA: BLOCK 8 ;-1 IF Q CAN CHECK AFTER SAC
+
+SACFL: -1 ;LINK TO SACLK OF SACS THREATNED BY MV OR -1
+
+WTSI: WTPWI(I) ;WANT TO TRADE SW 0 PW
+ WTPCI(I) ;1 PC
+
+WTPWI: SKIPG WTPWSW ;SKIP ON WANT TO TRADE PAWNS
+ SKIPL WTPWSW
+
+WTPCI: SKIPG WTPCSW ;SKIP ON WANT TO TRADE PCS
+ SKIPL WTPCSW
+
+DCTSI: SKIPE WTPWSW ;SKIP ON DONT CARE IF TRADE PAWNS
+ SKIPE WTPCSW ;PCS
+
+OTRPP: HTHRP+1 ;PNTR TO OUR THREATS AGAINST HIM
+ HTHRP
+
+OTVPP: TTLHT+1 ;PNTR TO TOTAL VALUE OUR PRELIM THREATS AGAINST HIM
+ TTLHT
+
+OTNPP: NHTHR+1 ;PNTR TO # OUR THREATS AGAINST HIM
+ NHTHR
+
+
+DEFINE DGDTA B,C
+B!C!TERMIN
+
+DEFINE DGMR A
+DGDTA [DEFINE DGDTA B,C
+B!][A!C!TERMIN]
+TERMIN
+
+DEFINE DGCLS A,B,C/
+A 0
+ DGMR [[ASCIZ ? B ?]
+]
+TERMIN
+;# OF MOVES IN SEARCH PRIORITY CLASSES
+
+;CHARACTERISTIC OF MOVE IF REALIZED GOOD ENUF FOR A,B CUTTOFF
+;IN DESCENDING ORDER OF SEARCH PRIORITY. PARTICULAR MOVE ENTERED ONLY
+;IN HIGHEST CLASS IT QUALIFIES FOR.
+
+DGCLSB:
+DGCLS DGNG:,[DG>,UATV,ALOSS=0] ;DIRECT GAIN GOOD ENUF, UATV,ALOSS=0
+DGCLS DGNGU:,[DG-UATV-ALOSS>] ;DIRECT GAIN-UATV-ALOSS
+DGCLS DGST:,[DG+STHR-UATV-ALOSS>] ;DIRECT GAIN +STRONG THREATS - UATHV -ALOSS
+DGCLS DGSTA:,[DG+STHR-ALOSS-UATV(IMMED ONLY)>] ;DIRECT GAIN+ STRONG THREAT DOES NOT ANSWER
+ ;ALL THREATS, BUT TEMPO VALUE OF ATTACK IS GREATER THAN
+ ;VALUE OF THREAT.
+DGCLS DGOT:,[DG+STHR+THREAT-UATHV-ALOSS>] ;DIRECT GAIN +SA + ORDINARY THREATS -UATHV-ALOSS
+DGCLS DGOTA:,[DG+STHR+THREAT-ALOSS-UATHV(IMMED ONLY)>] ;SAME BUT DONT SUBTRACT VALUE OF UNANSWERED
+ ;THREATS WHOSE TEMPO VALUE IS LESS THAN OUR SA+ ORDINARY THREATS
+DGCLS DTHR:,[+ALL POS VALUES-NONE>] ;"THREATENS" TO BE GOOD ENUF (ALL POSITIVE VALUES
+ ;NO NEGATIVE ONES
+DGCLS DPOSV:,[HAS POSITIVE VIRTUE] ;"HAS POSITIVE VIRTUE"
+DGCLS DIRVM:,[INDIFFERENT] ;APPARENT IRRELAVENT MOVES
+DGCLS DDBDM:,[HAS - VIRTUE] ;DISTINCTLY BAD MOVE
+DGPRCL==.-DGNG ;NUMBER PRIMARY CLASSES
+
+;SPECIAL CLASSES HAVING RELAVANCE ONLY IN CERTAIN GLOBAL SITUATIONS
+DGCLS DDESP:,[DESPERADO] ;"DESPERATO MOVE"
+ ;IF 1) HAVE MV OF LARGE + GAIN (POST) 2) HE HAS OUTSTANDING THREAT
+ ;AGAINST PC P (PRE)3) MV AVAIL TO ANSWER THREAT (POSSIBLY AT LOSS)
+ ;WITH TEMPO > HIS THREAT WITH E.P. PIECE
+ ;4) HIS E.P. PIECE CANNOT RECAPT 5) NUMBERS ADD UP
+DGCLS DATM:,[MV MAY ATTACK K] ;MOVE MIGHT CONTAIN THREAT TO HIS K
+DGCLE1:
+DGCLS2: ;CORRESP WITH ABOVE BUT COMPARE TO NEED FOR BEST SO FAR
+ BLOCK DGCLE1-DGCLSB
+DGCLE:
+DGTXT: DGDTA
+EXPUNGE DGDTA,DGCLS,DGMR
+
+DEFINE GAINM A
+IRPS B,,[A]
+B: 0
+ GAINRM [[ASCIZ /B/]
+]
+TERMIN
+TERMIN
+
+DEFINE GAINRM A
+GAIND [DEFINE GAIND B,C
+B!][A!C!TERMIN]
+TERMIN
+
+DEFINE GAIND B,C
+B!C!TERMIN
+
+
+;VALUES ASSOCIATED WITH VARIOUS PHASES OF MOVE
+BGNS:
+HPVAL:
+GAINM CGAIN:, ;VALUE OF MATERIAL CAPTURED
+GAINM EGAIN:, ;NET ESTIMATED ON CAPTURE + EP OF DIR MOVE
+GAINM OSTCMP:, ;OUTSTANDING THREAT COMP (UP TO MAX OF CCA)
+ ;IE IF HE TAKES US, WE TAKE OUTSTANDING THREAD (OFFSETS -EGAIN)
+GAINM AGAIN:, ;"SUM" VALUE OF THREATS UPPER BOUND
+GAINM PGAIN:, ;"POTENTIAL GAIN" (LESSOR THREATS)
+GAINM IGAIN:, ;INDIRECT THREATS (THREATNED DISCOVERIES ETC)
+GAINM SAGAIN:, ;VALUE OF STRONG THREATS (IE PIECE PINNED, MULT ATTACK ETC)
+;VALUES IN DAGAIN AND SDAGN CANCEL THAT MUCH -EGAIN (IN MOST CASES)
+GAINM DAGAIN:, ;VALUE OF THREAT ASSOCIATED WITH DISCOVERED ATTACKS OR FORCING HIM TO IGNORE CONSTRAINT
+GAINM SDAGN:, ;STRONG THREAT WITH DISCOVERED ATTACK OR FORCING HIM TO IGNORE CONSTRAINT
+ ;POSSIBLE GAIN BY CAPTURING HIS PIECES THAT WERE CONSTRAINED
+ ;OR BLOCKING HIS DEFS
+GAINM PPPGN:, ;GAIN DUE TO PUSHING PASSED P'S
+GAINM DFSAVE:, ;VALUE OF POSSIBLE LOSS AVOIDED (DEFS, ETC)
+ ;ACCOUNTED FOR IN THREAT HACKAGE
+GAINM DFSVP:, ;LOSS AVOIDED NOT ACCOUNTED FOR IN THREAT HACKAGE (ATT STOPSQ OF P.P.)
+ ;(OR BLOCK P P)
+GAINM RICKF:, ;-1 REAL CHECK FLAG
+GAINM MATTH:, ;-1 "MATE" OR NEAR MATE THREATNED
+GAINM ALOSS:, ;POSSIBLE LOSS DUE TO LEAVING THINGS LOOSE, BLOCKING DEFS, ETC
+GAINM NSTPAL:, ;-1 => MV DOESNT "STOP ALL" EVEN THO IT "ANSWERS ALL"
+ ;(FOR PCG PURPOSES)
+GAINM STPALL:, ;-1 MV REALLY ANSWERS (NOT JUST COUNTERS OR DEFERS)
+ ;ALL HIS THREATS (SUBJECT TO NSTPAL)
+GAINM UATHV:, ;VALUE OF LARGEST UNANSWERED THREAT
+GAINM SLUATV:, ;VALUE OF SECOND LARGEST UNANSWERED THREAT
+GAINM AUATHV:, ;VALUE OF ALL UNANSWERED THREATS COMBINED
+GAINM UALTPO:, ;TEMPO OF UATHV
+GAINM VTHRA:, ;SUM VALUE OF THREATS ANSWERED
+GAINM CMTHRA:, ;SUM "COMPONENT" THREATS ANSWERED
+GAINM PMLSS:, ;"LOSS" DUE TO PREMATURE MOVING OF PC W/O REASON
+GAINM TGAIN:, ;GAIN THREATNED, BUT HE CAN TRADE IF NOT OCCUPIED
+GAINM TPPOC:, ;TRADE PIECE PINNED OR CONSTRAINED FLAG
+GAINM BCONGN:, ;VALUE OF CONSTRAINTS HE HAS TO BREAK
+GAINM RCTMPO:, ;AMT HE LOSES FROM EGAIN IF HE FAILS TO RECAPTURE
+GAINM OFTRCL:, ;AMT WE LOOSE BY "FAILING TO CAPTURE LAST"
+GAINM VTHRAC:, ;VALUE OF THREATS "COUNTERED" BY COUNTER ATTACKS
+ ;WITH VAL+TMPO OF HIS THREAT < RCTMPO
+GAINM ALOSSC:, ;VALUE OF CONSTRAINTS "COUNTERED"
+GAINM 20LAGN:, ;SUM (20 LOG TERMS OF AGAIN)
+GAINM LAGN:, ;LARGEST TERM IN AGAIN
+GAINM SLAGN:, ;SECOND LARGEST TERM IN AGAIN
+GAINM NTMPS:, ;# TIMES MV INVOLVES ATTACT HIM WITH LESS
+GAINM LRCCOD:, ;LOCAL RECAPTURE CODE -2 IMPOSS -1 UNLIKELY
+ ;0 POSSIBLE (TRADE) 1 EXPECTED 2 CERTAIN
+GAINM RCCOD:, ;GLOBAL RECAPTURE CODE (VALS SAME AS ABOVE)
+GAINM HCL:, ;-1 TO GET EGAIN, HE TAKES LAST
+GAINM NHC:, ;# TIMES HE CAPTS TO GET EGAIN
+GAINM CCA:, ;CAPT COUNTER AVAIL
+GAINM PINRCV:, ;"RECAPT VAL" OF PIN HE GETS INTO IF HE CAPTS US
+GAINM PINRLS:, ;VALUES DUE TO RELEVING PINS ON US
+GAINM OSTV:, ;SUM OF VALUE OF CURRENT THREAT AGAINST HIM THAT WILL STILL BE THREATNED
+GAINM LOSTV:, ;LARGEST OF ABOVE
+GAINM SOSTV:, ;STRONG
+GAINM LSOSTV:, ;LARGEST STRONG
+GAINM OSTPRP:, ;VALUE OF CURRENT QUESTIONABLE OUTSTANDING THREATS NOW DEFINITELY THREATNED (DUE TO RELIEVING PINS, ETC)
+GAINM RCTHR:, ;TO HOLD LOSS TO INDICATED ON UNANSWERED THREATS, WE MUST
+ ;RECAPTURE OR LOOSE THIS ADDTL AMT
+GAINM SQGAIN:, ;VALS ASSOC WITH CONTROLLING SQS (ALSO WITH TRAPPING HIS PCS)
+GAINM DSQGAI:, ;AS ABOVE, BUT WE GET THESE EVEN IF CAPTED
+GAINM NDA:, ;# DISCOVERED ATTS ON HIS PCS
+GAINM NIUBLK:, ;# IMPORTANT DISCOVERIES ON OUR PCS
+GAINM NINTP:, ;# TIMES INTERPOSING
+GAINM CEGAIN:, ;AMT (-) EGAIN COUNTERED
+GAINM QGAIN:, ;GAIN FOR THREATNING TO QUEEN
+GAINM CCQST:, ;-1 EGAIN MAY WELL BE WORSE BECAUSE WE HAVE ASSUMED
+ ;DEFENCE BY A PINNED GUY
+GAINM NCB:, ;# OF CONSTRAINTS WE BREAK
+GAINM NIDF:, ;# INADEQUATE DEFS (MVING PC)
+GAINM DISPOS:, ;POSITIONAL FACTORS ASSOC WITH DISCOVERIES
+GAINM DISBLU:, ;POSITIONAL FACTORS ASSOC WITH BLOCKING US (SUBTRACT THIS)
+GAINM DISBLH:, ;POSITIONAL FACTORS ASSOC WITH BLOCKING HIM
+GAINM POSRLS:, ;POSITITIONAL FACTORS DEFINITELY RELEASED (SUBTRACT)
+GAINM POSFP:, ;POSITIONAL VALUE FOR "FINAL" PC TO OCCUPY DEST SQ (ALWAYS ADD, SIGN IS - FOR HIS PC)
+GAINM POSNET:, ;NET FINAL POS VALUE
+GAINM PVPCCP:, ;POS VAL OF PC CAPTED
+GAINM PTRPC:, ;COUNT POSSIBLE HIS PCS TRAPPED (PNSQS =>0)
+;THESE VAR MUST BE TOGETHER
+;USED TO DECIDE WHETHER TO TREAT OFFERED TRADES AS
+;TRADES OR ATTACKS
+GAINM PATVL:, ;PRELIM VAL OF ATTACKS (DIRECT)
+GAINM DPATVL:, ;" (DISCOV)
+GAINM TRDS:, ;# TIMES TRADE OFFERED DIRECT
+GAINM DTRDS:, ;" " (DISCOV)
+EGNS:
+GAINM EPGNE:, ;MOVING PIECE OUT OF PRISE
+GAINM RUMVLU:, ;MAKING ROOM FOR E.P. PC
+GAINM FREVLU:, ;MAKING ROOM FOR PC W/ NO SAFE MVS (COUNT # SQS)
+EGNNMS: ;END OF GAIN NAMES
+
+GANNTB: GAIND
+EXPUNGE GAIND,GAINRM,GAINNM
+
+PP LNCP:, BLOCK NPC ;PIECE CAPTURED IN PRINCIPAL VARIATION
+
+BPREV: 0 ;BEST KNOWN WHITE
+ 0 ;BEST KNOWN BLACK
+
+BPPOS: 0 ;POSITIONAL WDS
+ 0
+
+IBPRV: 0 ;INITIALIZED VALUES OF BPREV AT HACK1
+ 0 ;IF NOT = TO EVMST OK FOR BEST SO FAR TO BE POSSIBLY BETTER
+
+LMG5T1: 0
+
+PCSWSM: 0 ;NO PIECES W/ SAFE MOVES
+NSMVS: 0 ;NO SAFE MOVES FOR CURRENT PIECE
+NCKF: 0 ;NO SAFE CHECKS
+ICKF: 0 ;CURRENT MOVE A SAFE CHECK
+
+;IN REPLAY MODE
+RWPF: 0 ;-1 PLAY WHITE MOVES 0 READ WHITE MOVES
+RBPF: 0 ;SAME FOR BLACK
+RPLYPN: 0 ;PLY #
+
+TACNTP: 0 ;PNTR TO ATTACK CONSTRAINTS TBL
+TACTB: BLOCK 40 ;CONSTRAINTS DEVEL AS A RESULT OF ATTACKS
+ ;WD1 PC,,SQ
+ ;WD2 AMT
+
+;MEDIUM RANGE GOAL TABLE
+;FREE PIECE
+;DISLODGE HIS PIECE
+;DEFEND SQUARE
+;PREPARE BREAK
+;ATTACK WEAKNESS
+;EXCHANGE PIECES
+;AVOID EXCHANGES
+;OCCUPY WEAK SQUARE WITH (P)
+;RELIEVE PIN
+;MAKE LUFT
+;ATTACK STOPSQAURE OF P P
+;OCCUPY STOPSQUARE OF P P
+;CENTRALISE K
+;RELEASE K (IF PENNED IN BY R ETC
+;REMOVE CONSTRAINT ON OUR PIECE
+;OCCUPY OPEN FILE
+;DOUBLE, TRIPLE ETC ON FILE
+;EXECUTE ROOK LIFT
+;EXECTUTE K ATTACK
+;REDEPLOY PIECES TO AREA
+;ATTEMPT TO TRAP PIECE
+;CHASE OFF (BLOCK) ATTACK ON SQUARE (TO PERMIT O-O ETC)
+
+
+;GAME STATUS DESC
+;QUICK SAFE WIN FOR WHITE
+;LONG WINNING ENDGAME FOR WHITE
+;PROBABLE WINNING ADVANTAGE FOR WHITE
+;SUBSTANTUAL ADVANTAGE FOR WHITE
+;SLIGHT ADVANTAGE FOR WHITE
+;EVEN
+;ETC FOR BLACK
+
+;GAME CHARACTER DESC
+;CLOSED - HALF OPEN - OPEN
+
+;GAME TEMPO DESC
+;WHITE HAS INITIATIVE
+;WHITE HAS ADVANTAGE + CAN EXPLOIT STRAIGHT-FORWARDLY
+;WHITE CAN MAKE MAJOR IMPROVEMENTS BY WAY OF REDEPLOYMENT, DEVELOPMENT
+;WHITE CAN MAKE MINOR IMPROVEMENTS
+;WHITE REDUCED TO WAITING STRATEGY
+
+;ETC FOR BLACK
+
+;GAME STRATEGY
+;WHITE PLAYING FOR WIN
+;WHITE PLAYING FOR DRAW
+;WHITE DESPERATE
+;BLACK PLAYING FOR WIN
+;BLACK PLAYING FOR DRAW
+;BLACK DESPERATE
+
+;WINNING/LOSING/CERTAINITY HACK
+;PRED WINNING PRED LOSING
+; WC > EVENT WIN, THEN MIN (LC + INV C) LC > SURE LOSS, MAX WC+ INV C
+
+;CONTRIBUTIONS TO UNCERTAINTY
+;FEEDOVER IN THIS LINE
+;REL OF REJECTED LINES TRIED THIS LVL
+;PCS AT THEY STAND AT THIS LVL-P.V. VALUES
+
+;PASS THREATS TO LOWER LEVELS
+;AGGRESSIVE-DEFENSIVE VARIABLE
+
+;K + PIECE VS K + PAWNS STRATEGY
+
+;IF HE HAS P. P. OUTSIDE SQUARE
+; IF WE HAVE K ONLY --> -1-> NSTPAL
+; IF WE HAVE NO P. P. OUTSIDE SQ -> MAYBE FORWARD CUT
+; IF WE HAVE ONE MINOR PC
+; IF NOW CONTROLLING ONE OF HIS STOPSQS
+; EITHER K-> HIS P.P. OR PUSH OUR P.P.
+; IF NOT, IF CAN -> DO IF NOT, DON'T STOP..
+
+RDAT: BDARL(A)
+ BDARR(A)
+ BDAFB(A)
+ BDAFT(A)
+BDAT: BDALL(A)
+ BDALR(A)
+ BDAUR(A)
+ BDAUL(A)
+
+ BDALR2(A)
+ BDALL2(A)
+ BDAUR2(A)
+ BDAUL2(A)
+ BDALR1(A)
+ BDALL1(A)
+ BDAUR1(A)
+ BDAUL1(A)
+ BDAEPL(A)
+ BDAEPR(A)
+
+RDATS: BDARL(C)
+ BDARR(C)
+ BDAFB(C)
+ BDAFT(C)
+ BDALL(C)
+ BDALR(C)
+ BDAUR(C)
+ BDAUL(C)
+
+RDATSS: BDARL(S)
+ BDARR(S)
+ BDAFB(S)
+ BDAFT(S)
+ BDALL(S)
+ BDALR(S)
+ BDAUR(S)
+ BDAUL(S)
+
+ BDALR2(S)
+ BDALL2(S)
+ BDAUR2(S)
+ BDAUL2(S)
+ BDALR1(S)
+ BDALL1(S)
+ BDAUR1(S)
+ BDAUL1(S)
+ BDAEPL(S)
+ BDAEPR(S)
+
+RDATSQ: BDARL(Q)
+ BDARR(Q)
+ BDAFB(Q)
+ BDAFT(Q)
+ BDALL(Q)
+ BDALR(Q)
+ BDAUR(Q)
+ BDAUL(Q)
+
+RDAT1: BDARL(T1)
+ BDARR(T1)
+ BDAFB(T1)
+ BDAFT(T1)
+ BDALL(T1)
+ BDALR(T1)
+ BDAUR(T1)
+ BDAUL(T1)
+
+RDATI: BDARR(A) ;RDAT FOR OPPOSITE DIRECTION
+ BDARL(A)
+ BDAFT(A)
+ BDAFB(A)
+ BDAUR(A)
+ BDAUL(A)
+ BDALL(A)
+ BDALR(A)
+
+
+RMPPT1: CAIE B,6
+ CAIE B,3
+
+RMPPT2: SKIPLE T1,BOARD+BW(A)
+ SKIPLE T1,BOARD-BW(A)
+
+RMPPT3: SKIPL SNFBP-PIECE(T1)
+ SKIPL LMGSTD-PIECE(T1)
+
+RMPPT4: CAIN B,5
+ CAIN B,4
+
+RMPPT5: SKIPE T1,BOARD+2*BW(A)
+ SKIPE T1,BOARD-2*BW(A)
+
+RMPPT7: BOARD+BW+1(A)
+ BOARD-BW+1(A)
+
+RMPPT8: BOARD+BW-1(A)
+ BOARD-BW-1(A)
+
+RMPTA: BOARD-BW+1(A)
+ BOARD+BW+1(A)
+
+RMPTB: BOARD-BW-1(A)
+ BOARD+BW-1(A)
+
+RMINS: ADDM R,WA(A)
+ ADDM R,BA(A)
+
+
+RMDTT: CAILE C,5 ;SKIP ON DIAG TOWARD BLACK
+ CAIG C,5 ;SKIP ON DIAG TOWARD WHITE
+ CAILE C,5
+
+RMDTT1: CAILE D,5
+ CAIG D,5
+
+
+RMP5T: REPEAT 4,RFPCS(S)
+ REPEAT 4,DDPCS(S)
+
+RMP5T1: REPEAT 4,RFPCS-PIECE(D)
+ REPEAT 4,DDPCS-PIECE(D)
+
+
+ ;DATA BASE ARRAYS SET UP BY CAT
+ ;
+BDBLK: BLOCK BD2 ;BLOCKING DATA
+ONEB1: BLOCK BD2 ;SQUARES HIT BY SLIDING PIECE THRU ONE OBSTRUCTION
+ONEB2: BLOCK BD2
+WPAS: BLOCK BD2 ;VALUE OF ATTACK ON SQUARE FOR PDV
+BPAS: BLOCK BD2
+;PNTRS TO WPAS AND BPAS
+NPPAS==300 ;NUMBER P POTENTIALLY ATTACKING SQ
+NPPASB==1 ;1.1-1.3
+NPAS1==30300 ;NUMBER P ATTACKING IN ONE MOVE
+NPAS1B==10 ;1.4-1.6
+NPAS==60300 ;NUMBER P ACTUALLY ATTACKING SQ
+NPASB==100 ;1.7-1.9
+NNAS==110300 ;NUMBER N S
+NNASB==1000 ;2.1-2.3
+NBAS==140300 ;NUMBER B S
+NBASB==10000 ;2.4-2.6
+NRAS==170300 ;NUMBER R S
+NRASB==100000
+NQAS==220300 ;NUMBER Q S
+NQASB==1,,
+NKAS==250300 ;N K S
+NKASB==10,,
+
+OPOM: NPAS1,,WPAS(T1) ;# OUR P IN ONE MV
+ NPAS1,,BPAS(T1)
+
+PP ATLSP:, REPEAT 8,0 ;BYTE PNTR TO FIELDS IN HIS AS FOR GUYS LESS THAN ME
+ 61100,,BPAS(A) ;R
+ 60300,,BPAS(A) ;N
+ 60600,,BPAS(A) ;B
+ 61700,,BPAS(A) ;K
+ 61400,,BPAS(A) ;Q
+ 60600,,BPAS(A) ;B
+ 60300,,BPAS(A) ;N
+ 61100,,BPAS(A) ;R
+ REPEAT 8,0
+ 61100,,WPAS(A)
+ 60300,,WPAS(A)
+ 60600,,WPAS(A)
+ 61700,,WPAS(A)
+ 61400,,WPAS(A)
+ 60600,,WPAS(A)
+ 60300,,WPAS(A)
+ 61100,,WPAS(A)
+
+PASI: ADDM J,WPAS(A)
+ ADDM J,BPAS(A)
+ ADDM J,WPAS(A)
+
+PASIS: ADDM J,WPAS(S)
+ ADDM J,BPAS(S)
+ ADDM J,WPAS(S)
+
+
+PP PASIN:, REPEAT 2,[
+ REPEAT 8,NPPASB
+ NRASB
+ NNASB
+ NBASB
+ NKASB
+ NQASB
+ NBASB
+ NNASB
+ NRASB
+]
+PP PMV:, BLOCK NPC ;PIECE MOBILITY VALUE ACCUMULATED FOR SQUARES
+ ;TO WHICH PIECE COULD MOVE WITHOUT BEING E.P.
+ ;COMPUTED AT STVL4
+PP NSQS:, BLOCK NPC ;# OF SQUARES REPRESENTED IN ABOVE
+PP PNSQS:, BLOCK NPC ;PROJECTED # OF SQS AVAIL AFTER MOVE (IN PMG)
+PP PGLST:, BLOCK NPC ;PNTR TO OTHER P'S IN PAWN GROUP
+
+PP PDV:, BLOCK NPC ;CURRENT PIECE DEVELOPMENT VAL
+ ;VALUES FOR HITTING SQUARES REGARDLESS
+ ;OF SQUARE CONTROL ASSIGNED
+ ;FROM WAV, BAV (MAINTAINED INCREMENTALLY)
+
+WAV: BLOCK BD2 ;VALUE FOR WHITE ATTACK ON EACH SQUARE
+BAV: BLOCK BD2 ;VALUE FOR BLACK ATTACK ON EACH SQUARE
+
+;ALL RANKS IN WDPRK,BDPRK EXPRESSED FROM WHITE'S POINT OF VIEW
+WDPRK: REPEAT 10.,10. ;RANK OF LEAST ADV W P IN FILE (10. IF NONE)
+BDPRK: REPEAT 10.,0 ;RANK OF LEAST ADV B P IN FILE (0 IF NONE)
+
+AT: ADD W,WAV(A)
+ ADD W,BAV(A)
+
+ATS: SUB W,WAV(A) ;MUST IMMEDIATELY FOLLOW AT
+ SUB W,BAV(A)
+
+ ;
+ ;PAWN STRUCTURE ARRAYS
+PP PPASED:, ;RANK IF PASSED PAWN, 0 OTHERWISE
+ ;4.9=1 IF PASSED AND BLOCKED BY FRIENDLY PAWN
+ BLOCK NPC
+PP PPTP:, ;-1=PAWN DEFENDED BY PAWN
+ ;1=FORWARD, 2=BACKWARD, 3=ISOLATED PAWN
+ ;0 OTHERWISE
+ BLOCK NPC ;CAT DEPENDS ON LAST REGISTER OF PPTP TO =0
+;START OF AREA CLEARED BY COMMON BLT IN CAT
+
+WPNFLS: BLOCK 10. ;NUMBER OF WHITE PAWNS IN FILES
+BPNFLS: BLOCK 10. ;BLACK (MUST HAVE 0 FOR FILES 0 & 9)
+WNPNFL: BLOCK 10. ;NUMBER OF NON-PASSED WHITE PAWNS IN FILES
+BNPNFL: BLOCK 10. ;BLACK (MUST HAVE 0 FOR FILES 0 & 9)
+
+WPPRK: BLOCK 10. ;RANK OF MOST ADV W P.P. ON FILE
+BPPRK: BLOCK 10. ;" " BLACK "
+
+WAAPP: BLOCK 10. ;WHITE ATTACKS ON SQS IN FRONT OF MOST ADV BLACK P P ON FILE
+BAAPP: BLOCK 10. ;BLACK ... WHITE P.P.
+
+WNPRK: BLOCK 10. ;RANK OF MOST ADV W NON PASSED P ON FILE
+BNPRK: BLOCK 10. ;" " B
+
+MAWPP: 0 ;RANK OF MOST ADV W PP
+MABPP: 0 ;RANK OF MOST ADV B PP
+
+NWPPP: 0 ;# WHITE PASSED P
+NBPPP: 0 ;# BLACK PASSED P
+
+PP PNSTS:, BLOCK NPC ;4.9=0 UNFREE =1 HALF-FREE OR PASSED
+ ;4.8,4.7 0 RANGER 1 HOME 2 CENTER
+ ;4.6-4.4 0 NIL 1 CANDIDATE 2 HELPER 3 HELPER TO THE N
+ ;4.3 FAKER
+ ;4.2-4.1 0 NIL 1 RAM 2 LEVER 3 DUO
+
+PP PGRPP:, BLOCK 8 ;PNTR TO PG P'S IN THIS FILE PART OF
+
+WPGRPS: 0 ;PNTR TO WHITE PAWN GRPS
+BPGRPS: 0 ;PNTR TO BLACK P.G.
+
+PP ODSCV:, BLOCK NPC ;LIKE PINT BUT "PINNED PIECE" IS OURS
+;(IE THREATENING DISCOVERY ON HIM).
+
+PP BPINT:, BLOCK NPC ;0 OR PNTR TO PINDT (CONTENTS IDENTICAL TO CORRESP ENTRY
+ ;FOR PIECE PINNED) IN WHICH GIVEN PIECE IS BASE PIECE
+PP DSCOV:, BLOCK NPC ;LIKE PINT BUT BASE PIECE THEORITICALLY NOT E.P. EVEN IF "PIN" BROKEN
+PP PINT:, ;PIN DATA
+ BLOCK NPC ;0 PIECE NOT PINNED ELSE PNTR TO PINDT
+ ;
+; END OF AREA CLEARED IN COMMON BLT
+BDA1: BLOCK BD2 ;ATTACK DIRECTION DATA
+BDA2: BLOCK BD2
+BDA3: BLOCK BD2
+ ;
+BA: BLOCK BD2 ;BLACK ATTACKS ON EACH SQUARE
+ ;
+WA: BLOCK BD2 ;WHITE ATTACKS ON EACH SQUARE
+
+WIMP=WAV ;TEMP (?)
+BIMP=BAV
+;BSIZE WIMP:, ;ESTIMATED IMPORTANCE OF SQUARE TO WHITE
+;BSIZE BIMP:, ;ESTIMATED IMPORTANCE OF SQUARE TO BLACK
+BSIZE WPCOR:, ;4.9 MORE THAN 6 WHITE PIECES BEAR ON SQUARE
+ ;4.8-4.3 LEAST VALUABLE W PC. SEVEN BIT BYTES FROM THERE
+ ;100 BIT PC UNCOVERED REST PC NUMBER
+BSIZE BPCOR:, ;SIMILAR FOR BLACK
+
+BSIZE CNTRL:, ;STATUS OF SQUARE AND PNTRS TO PIECES
+ ;THAT HAVE BEEN AWARDED PNTS FOR THIS SQUARE
+BSQSP==330400 ;4.4-4.1 STATUS
+ ;4.8 PUSHABLE INTOABLE WHITE
+ ;4.7 PUSHABLE INTOABLE BLACK
+OBSQP==220400 ;OLD SQ CTL PREV TO DISCOVERY (DURING LMG)
+WCTLF==60600 ;2.3-1.7 WHITE PC CREDITED
+BCTLF==600 ;1.6-1.1 BLACK PC CREDITED
+MCFMSK==777760,,-1 ;MASK TO AVOID CLEARING OBSQP
+
+MSQWUC==0 ;WHITE UNCONTESTED
+MSQWSC==1 ;WHITE STRONGLY CONTROLLED
+MSQWC==2 ;WHITE CONTROLLED
+MSQWD==3 ;WHITE DEFENDED
+MSQE==4 ;EVEN
+MSQUC==5 ;UNCONTESTED
+MSQBD==6 ;BLACK DEFENDED
+MSQBC==7 ;BLACK CONTROLLED
+MSQBSC==10 ;BLACK STRONGLY CONTROLLED
+MSQBUC==11 ;BLACK UNCONTESTED
+
+;STRONGLY CONTROLLED MEANS AT LEAST A 2 TO 1
+;NUMERICAL ADVANTAGE WITH OUR LEAST < HIS
+;CONTROLLED MEANS LEAST VAL PCS EVEN
+;AND NUMERICAL ADV FOR US
+;DEFENDED MEANS FEWER NUMBER BUT OUR SMALLEST < HIS
+
+BPCHD: BLOCK BD2 ;0 IF SQUARE NEEDS RECALULATION -1 OTHERWISE
+
+LPGT==20 ;LENGTH PAWN GROUP TABLE
+PGT: BLOCK LPGT ;4.8 W P'S UNOPPOSED THIS GROUP
+ ;4.7 W HAS PP THIS GROUP
+ ;4.6 B UNOPPOSED
+ ;4.5 B HAS PP THIS GROUP
+ ;4.4 W HAS 1/2 OPEN P IN GROUP
+ ;4.3 B HAS (")
+ PGTMNF==220400 ;MIN FILE
+ PGTMXF==260400 ;MAX FILE
+ PGNWP==400 ;# W PAWNS IN GROUP (NOT PASSED)
+ PGNBP==40400 ;# B PAWNS IN GROUP
+
+ ;P GROUPS DIVIDED ONLY BY OPEN FILES
+
+; 0 ;2.1-2.5 PNTR TO PAWN LIST
+; ;2.6-3.3 PNTR TO OPPOSING GROUP 0 PASSED
+; ;4.8-4.7 0 EVEN 1 MAJ 2 MINORITY
+; ;4.9 WEAK (ONE OR MORE PAWNS IN GRP WEAK)
+; ;4.6 1 CRIPPLED MAJORITY
+; ;4.5-4.4 0 NIL 1 ONE OR MORE CANDIDATE 2 1 OR MORE PASSED
+;MAX RANK
+;MIN CONNECTED RANK
+
+
+PGTP: -1 ;FS PNTR TO PGT
+
+CTLTXT: ASCIZ /WUC /
+ ASCIZ /WSC /
+ ASCIZ / WC /
+ ASCIZ / WD /
+ ASCIZ / E /
+ ASCIZ / U /
+ ASCIZ / BD /
+ ASCIZ / BC /
+ ASCIZ /BSC /
+ ASCIZ /BUC /
+
+CTLFAC: 10 ;4.9 =0 USE WAV =1 USE BAV
+ 6
+ 4
+ 3
+ 0
+ 0
+ -3
+ -4
+ -6
+ -10
+
+NHPPP: NBPPP ;PNTR TO # HIS PASSED P
+ NWPPP
+ NBPPP
+
+PPSTSW: 0 ;PASSED P STATUS W # P.P. OUTSIDE SQ OF BLACK K
+PPSTSB: 0 ;# B P.P. ..
+PP PSQFIL:, BLOCK 8 ;4.9 W HAS P P OUTSIDE SQUARE THIS FILE 2.9, B
+ ;FILLED IN AT STATEV
+ ;CLEARED IN BLOCK AT STVL4A
+
+
+PPSTSP: PPSTSW ;PNTR TO STATUS WD (SIDE)
+ PPSTSB
+ PPSTSW
+
+ [0] ;MUST BE AT PPT, MAY BE REFERENCED AT MMBPWN
+PP PPT:, REPEAT 2,[REPEAT 8,PIECEL+.-PPT
+ REPEAT 8, [0]
+]
+
+BDBSQ: 400400,,BDBLK(A)
+ 340400,,BDBLK(A)
+ 300400,,BDBLK(A)
+ 240400,,BDBLK(A)
+
+BDBD: 200400,,BDBLK(A)
+ 140400,,BDBLK(A)
+ 100400,,BDBLK(A)
+ 40400,,BDBLK(A)
+
+ONEBSQ: 331100,,ONEB1(A)
+ 221100,,ONEB1(A)
+ 111100,,ONEB1(A)
+ 1100,,ONEB1(A)
+
+ONEBBD: 331100,,ONEB2(A)
+ 221100,,ONEB2(A)
+ 111100,,ONEB2(A)
+ 1100,,ONEB2(A)
+
+ONEBS: 331100,,ONEB1(S)
+ 221100,,ONEB1(S)
+ 111100,,ONEB1(S)
+ 1100,,ONEB1(S)
+ 331100,,ONEB2(S)
+ 221100,,ONEB2(S)
+ 111100,,ONEB2(S)
+ 1100,,ONEB2(S)
+
+REVERS: REPEAT 10.,9-.RPCNT ;RANKS FROM BLACKS SIDE
+
+OURGY: SKIPGE (D)
+ SKIPL (D)
+ SKIPGE (D)
+
+HKNG: CAIN D,BKING
+ CAIN D,WKING
+
+BPINTK: WKING-PIECE+BPINT ;PNTR TO BPINT FOR OUR K (THINGS PINNED TO K)
+ BKING-PIECE+BPINT
+
+OURGY1: SKIPL (T1)
+ SKIPGE (T1)
+ SKIPL (T1)
+
+OURGY2: SKIPGE (T2)
+ SKIPL (T2)
+ SKIPGE (T2)
+
+OURGY3: SKIPGE (B)
+ SKIPL (B)
+ SKIPGE (B)
+
+OURGY4: SKIPGE (Q)
+ SKIPL (Q)
+ SKIPGE (Q)
+
+RMOY: SKIPGE PIECE(B)
+ SKIPL PIECE(B)
+ SKIPGE PIECE(B)
+
+RMOY1:
+RMOY3: SKIPGE PIECE(S)
+ SKIPL PIECE(S)
+ SKIPGE PIECE(S)
+
+RMOY2: SKIPGE PIECE(Q)
+ SKIPL PIECE(Q)
+ SKIPGE PIECE(Q)
+
+RMOY4: SKIPGE PIECE(T1)
+ SKIPL PIECE(T1)
+ SKIPGE PIECE(T1)
+
+RMOY5: SKIPGE PIECE(D)
+ SKIPL PIECE(D)
+
+RMOY6: SKIPGE PIECE(T2)
+ SKIPL PIECE(T2)
+ SKIPGE PIECE(T2)
+
+RMOYTT: SKIPGE PIECE(TT)
+ SKIPL PIECE(TT)
+ SKIPGE PIECE(TT)
+
+LPINDT==30. ;MAX NUMBER OF ACTIVE PINS
+PINFS: PINDT ;PIN TABLE FREE STG PNTR
+PINDT: BLOCK LPINDT*2*3 ;THREE WDS/PIN ENTRY, TWO ENTRIES/PIN
+ ;(PIECE PINNED AND BASE PIECE)
+
+EPINDT:
+
+
+;WHITE NEAR SIDE
+;HIGHER NOS TOWARD BLACK
+BDARL=360600,,BDA1 ;RANK FROM LEFT
+BDARR=300600,,BDA1 ;" " RIGHT
+BDAFB= 220600,,BDA1 ;FILE " BOT
+BDAFT=140600,,BDA1 ; " " TOP
+BDALL=60600,,BDA1 ;DIAG " LOWER LEFT
+BDALR=600,,BDA1 ;DIAG " " RIGHT
+BDAUR=360600,,BDA2 ;DIAG " UPPER "
+BDAUL=300600,,BDA2 ;" " " LEFT
+BDALR2=220600,,BDA2 ;KNIGHT 2*BW FROM LR
+BDALL2=140600,,BDA2 ;KNIGHT " " LL
+BDAUR2=60600,,BDA2 ;" " " UR
+BDAUL2=600,,BDA2 ;" " " UL
+BDALR1=360600,,BDA3 ;" BW " LR
+BDALL1=300600,,BDA3 ;" " " LL
+BDAUR1=220600,,BDA3 ;" " " " UR
+BDAUL1=140600,,BDA3 ;" " " UL
+BDAEPL=60600,,BDA3 ;EP FROM L
+BDAEPR=600,,BDA3 ;EP FROM R
+
+MCATT2: REPEAT 4, SKIPL RFPCS(D)
+ REPEAT 4, SKIPL DDPCS(D)
+
+MCATT3: -1 ;PIECE AND SIDE BEING PINNED AGREE
+ 1 ;DISAGREE
+
+
+CATFLG: -1
+
+MMPWNF: 0 ;PASSED PAWN BLOCKED BY FRIENDLY PAWN FLAG
+
+PP PTPTB:,
+PP RFPCS:, ;NEGATIVE FOR ORTHAGONALLY SLIDING PIECES
+ REPEAT 8,PTPWP
+ SETZ RMWR
+ RMWN
+ RMWB
+ RMWK
+ SETZ RMWQ
+ RMWB
+ RMWN
+ SETZ RMWR
+ REPEAT 8,PTPBP
+ SETZ RMBR
+ RMBN
+ RMBB
+ RMBK
+ SETZ RMBQ
+ RMBB
+ RMBN
+ SETZ RMBR
+
+PP DDPCS:, ;NEGATIVE FOR DIAGONALLY SLIDING PIECES
+ REPEAT 2,[
+ BLOCK 12
+ -1
+ 0
+ -1
+ -1
+ BLOCK 2
+]
+PP SLDPC:, ;NEG FOR SLIDING PIECES
+ REPEAT 2,[
+ BLOCK 8
+ -1
+ 0
+ -1
+ 0
+ -1
+ -1
+ 0
+ -1
+]
+
+
+LPINTB=100
+PINTB: BLOCK LPINTB
+RMERR1: 0 ;PDL SAVED AT GSYL
+LCHAR: 0 ;LAST CHAR READ (AT GSYL4)
+ALGSW1: 0 ;SWITCH TO HOLD SQ WHILE RETN PIECE
+CALGNF: 0 ;COMMITTED TO ALGEBRADIC
+
+IFN HSCOD,NHSW: 1 ;-1=SUPPRESS ALL HASH 0=ALLOW DRAW DET ONLY
+IFN BOOK,UBKF: 0 ;0=DON'T USE BOOK 1=USE BOOK
+IVVDD: 2 ;EFFECTIVE SETD FOR SEC INV
+INVD: 0 ;SEC INVEST START FROM THIS PLY OR LESS
+
+HACKMX: 0 ; MAX POSITON VALUE FROM LAST SEARCH
+HACKMN: 0 ;MIN VALUE
+HACKSD: 0 ;SIDE LAST MV MADE FOR
+POSMAX: 0 ;KNOW POS VAL NO HIGHER THAN THIS
+POSMIN: 0 ;NO LOWER
+CATSCC: 0 ;I C CAT SPOT CHECK COUNT
+CSQSW: 1 ;1 CALC WPCOR BPCOR FOR ALL SQS AT STVL4
+
+PP EVMPB:, REPEAT NPC, <43-.RPCNT>_12.+100,,ESPHI(P)
+SBR: ;SEARCH BREADTH VECTOR
+ REPEAT SBRLNG,6
+
+PSBR: 6 ;MAX # POSITIONAL ONLY MVS TO LOOK AT (LVL)
+ 6
+ 3
+ 3
+ REPEAT SBRLNG-.+PSBR,2
+
+IFN KILLH,[
+AKHS: 1
+IRPC X,,ABC
+ABFT!X: BLOCK SBRLNG+1
+TERMIN
+]
+
+
+PP LGLMPT:, ;PIECE IN B CUR LOC IN S DESTIN IN A
+ REPEAT 8,LWPWN
+ LROOK
+ LKNT
+ LBIS
+ LKING
+ LQUEEN
+ LBIS
+ LKNT
+ LROOK
+ REPEAT 8,LBPWN
+ LROOK
+ LKNT
+ LBIS
+ LKING
+ LQUEEN
+ LBIS
+ LKNT
+ LROOK
+
+STPLVL: 0 ;DISPLAY STOP LEVEL
+DBS1: 0 ;0 NO DISP 1 DISPLAY 2 DISPLAY FEEDOVERS 3 TYPE LIST OF PLAUS MOVES
+DBS2: 0 ;0 NO LOOK AHEAD 1 LOOK AHEAD AFTER DISPLAY MUST FOLLOW DBS1
+SDBS1: 0 ;SAVED AT TRACE
+SDBS2: 0 ;SAVED AT TRACE MUST FOLLOW
+MVDS: 0 ;MAIN VARIATION DIS SWITCH
+
+DSPACE: MOVEI A,40
+ JRST (B)
+
+DTAB: MOVEI A,11
+ JRST (B)
+
+DCOLON: MOVEI A,":
+ JRST (B)
+
+DSLASH: MOVEI A,"/
+ JRST (B)
+
+DPERD: MOVEI A,".
+ JRST (B)
+
+FORMF: MOVEI A,14
+ JRST (B)
+
+LATYO: MOVEI A,"_
+ JRST TYO
+
+QMTYO: MOVEI A,"?
+ JRST TYO
+
+OKINGT: WKING-PIECE+PIECEL
+ BKING-PIECE+PIECEL
+ WKING-PIECE+PIECEL
+
+KRNK: PRANK+WKING-PIECE ;PNTR TO K'S RANK (FROM BPREL)
+ PRANK+BKING-PIECE
+ PRANK+WKING-PIECE
+
+RKRNK: RPRANK+WKING-PIECE ;PNTR TO K'S RANK (REVERSED FOR BLACK)
+ RPRANK+BKING-PIECE
+ RPRANK+WKING-PIECE
+
+KFILE: PFILE+WKING-PIECE
+ PFILE+BKING-PIECE
+ PFILE+WKING-PIECE
+
+LMUATS: 0
+LMUDR: 0
+ATTHF: 0 ;-1 IF S ROUTINE MOVES THRU OPPONENTS PIECE OF HIGHER VAL (OR=)
+ATTHFP: 0 ;PC (+PIECE) ATTACKING THRU
+
+LMUAT1: BRANK,,BPREL(S)
+ BRANK,,BPREL(S)
+ BFILE,,BPREL(S)
+ BFILE,,BPREL(S)
+ BPDAG,,BPREL(S)
+ BMDAG,,BPREL(S)
+ BPDAG,,BPREL(S)
+ BMDAG,,BPREL(S)
+
+LMUAT: BRANK,,BPREL(A)
+ BRANK,,BPREL(A)
+ BFILE,,BPREL(A)
+ BFILE,,BPREL(A)
+ BPDAG,,BPREL(A)
+ BMDAG,,BPREL(A)
+ BPDAG,,BPREL(A)
+ BMDAG,,BPREL(A)
+
+
+BDLNR: BRANK,,BPREL(R)
+ BRANK,,BPREL(R)
+ BFILE,,BPREL(R)
+ BFILE,,BPREL(R)
+ BPDAG,,BPREL(R)
+ BMDAG,,BPREL(R)
+ BPDAG,,BPREL(R)
+ BMDAG,,BPREL(R)
+
+
+BDLNC: BRANK,,BPREL(C)
+ BRANK,,BPREL(C)
+ BFILE,,BPREL(C)
+ BFILE,,BPREL(C)
+ BPDAG,,BPREL(C)
+ BMDAG,,BPREL(C)
+ BPDAG,,BPREL(C)
+ BMDAG,,BPREL(C)
+
+
+;ATTRIBUTE VALUES
+
+OPATV: 10 ;UNCOVERING ATTACK ON ADEQUATELY DEFENDED PIECE
+IVLU: 2000. ;INITIAL
+MJVLU: 100 ;MORE ATTACKS THAN OPP
+TTVLU: 20 ;ATTACK POORLY DEFENDED PIECE
+BSQVAL: 10 ;BASIC SQUARE VALUE
+NKVLU: 20 ;NEAR KING VALUE
+CSQV: 20 ;CENTER SQUARE VALUE EARLY
+NCSQV: 10 ;NEAR CENTER VALUE EARLY
+WPVLU: -400 ;TOO EARLY TO MOVE PIECE UNLESS ATTACKED
+BRKVLU: 50 ;PAWN BREAK
+FMKING: 40 ;FIRST KING MOVE
+KKCAS: 200 ;FIRST KING MOVE IF CASTLE IS POSSIBLE
+FMROOK: 60 ;FIRST ROOK MOVE IF CASTLE IS POSSIBLE
+MPFMV: 44 ;FIRST MOVE OF MINOR PIECE
+
+PCASV: 25. ;INITIAL VALUE FOR MVING PC MAKING WAY FOR CASTLING
+PCASVI: 5 ;LESS THIS FOR EACH PC IN THE WAY NOW
+
+PTFVLU: 20 ;MOVING TO SAME RANK OR FILE AS OPP KING +
+POFVLU: 60 ;MOVEING TO OPEN FILE SAME AS KING +
+BCPVLU: 1000. ;BLOCKING PAWN BY PLAYING TO K3 OR Q3 - (POSITIONAL FACTOR)
+BDDMT: -60 ;THRES FOR MOVE TO BE BAD DEVL WISE
+GMAVLU: 140 ;CHANGE BALANCE OF POWER ON OTHER THAN PAWN DEF. BY PAWN +
+ACSPV: 50 ;PLAUSIBLITITY VAL ATTACKING CENTER SQUARE W PAWN +
+APVLU: 100 ;ATTACKING A PINED PIECE +
+APDPV: 20 ;ATTACKING A PINNED PAWN WHICH IS DEFENDED BY PAWN +
+APFVLU: 14 ;ATTACKING PAWN ON FILE +
+AWPVLU: 50 ;ATTACKING WEAK P (FOR B ISO) +
+APFPV: 20 ;EXTRA IF PASSED AND NOT BLOCKED BY FRIENDLY P +
+
+LMMPDP: 0 ;MOVING P DEFENDED BY P -
+LMMFP: 4 ;MOVING FORWARD P + (MAYBE TRY TO TRADE)
+LMMBP: 30 ;MOVING BACKWARD P +
+LMMIP: 4 ;MOVING ISOLATED P +
+RDEFVLU: 10 ;VALUE FOR RANDOMLY DEFENDING OUR PIECE
+
+PINVLT: 60 ;VALUE FOR PIN OF PIECE AS FUNCTION OF RANK (ATTACK NOT SIG)
+ 50
+ 50
+ 60
+ 70
+ 100
+ 110
+ 110
+
+PINVAT: 140 ;ALSO REPRESENTS ATTACK
+ 120
+ 120
+ 140
+ 160
+ 200
+ 220
+ 220
+
+;PLAUS VALUES ADDED TO MOVE
+LMFPT: 100 ;ATTACKING TWO
+ 240 ;3
+ 400 ;4
+ 600 ;5 OR MORE
+
+;PASSED PAWN PUSH VALUES(PLAUS)
+
+PPP: 10 ;NOTE RANK PSEUDO REDUCED BY 2 FOR PP BLOCKED BY FRIENDLY
+ 10
+ 40 ;BLOCKING PP ON RANK 2
+ 60 ;PP TO OR BLOCK PP ON RANK 3
+ 100 ;...
+ 140
+ 200 ;...
+ 300 ;PP TO OR BLOCK PP ON RANK 7
+ 400 ;TO RANK 8
+
+PWNV==200
+NV==640 ;3 1/4 P
+BV==700 ;3 1/2 P
+RV==1200 ;5 P
+KQV==2340 ;9 3/4 P
+BVMNV==BV-NV
+TPCS==2*+KQV+600 ;INITIAL MATERIAL PER SIDE (K=600) EXCEPT PAWNS
+TPNS==8.*PWNV ;INITIAL PAWN MATERIAL PER SIE
+
+GDMF: 0 ;SAFE MOVE FLAG
+LLMGPL==500
+LMGPDL: BLOCK LLMGPL
+LGLMST: 0
+TEFAL: 0
+LMQS: 0
+LMJS: 0 ;SAVE J AROUND LMG (DIR OF MOVE FOR SLDPC)
+LMAS: 0 ;SAVE A ROUND LMG (SQ MOVED TO)
+CDEVV: 0
+CDVCF: 0 ;CURRENT DEVEL VAL COMPUTED FLAG
+TEFFORT: 0
+LMOA: 0
+PCBAL: TPCS ;MATERIAL FOR WHITE
+ TPCS ;FOR BLACK
+PNBAL: TPNS ;PAWN MATERIAL FOR W
+ TPNS ;FOR B
+
+OPCBAL: BLOCK 2 ;PCBAL AT TOP OF TREE
+OPNBAL: BLOCK 2 ;PNBAL AT TOP OF TREE
+LMFORS: 0 ;NUMBER FORCING POSSIBILITIES
+CPOSV: 0 ;VALUE OF CURRENT POSITIONALLY
+LMGT1: 0 ;TEMP USED IN CAPT SECT OF LMGR
+BPCSOP: 0 ;BITS SET FOR PIECE ON PREY
+MMSSAC: BLOCK 17 ;STORE ACS MMSA1 MACRO
+
+
+OWPNC: 0 ;WHITE P CNT AT TOP OF TREE
+OBPNC: 0 ;B " "
+WPNC: 8 ;WHITE PAWN COUNT
+BPNC: 8 ;BLACK PAWN COUNT
+WQNC: 1 ;WHITE QUEEN COUNT
+BQNC: 1 ;BLACK QUEEN COUNT
+WRKC: 2 ;WHITE ROOK COUNT
+BRKC: 2 ;BLACK ROOK COUNT
+WBSC: 2 ;WHITE BISHOP COUNT
+BBSC: 2 ;BLACK BISHOP COUNT
+WKNC: 2 ;WHITE KNIGHT COUNT
+BKNC: 2 ;BLACK KNIGHT COUNT
+NWKG: 1 ;# WHITE KINGS !
+NBKG: 1 ;# BLACK KINGS!
+
+WLBC: 1 ;WHITE BISH ON LIGHT SQ
+BLBC: 1 ;BLACK BISH ON LIGHT SQ
+WDBC: 1 ;WHITE BISH ON DARK SQ
+BDBC: 1 ;BLACK BISH ON DARK SQ
+
+WPCCNT: 7 ;# WHITE PCS (EXCLUDE K + PAWNS)
+BPCCNT: 7 ;BLACK
+
+PCCNTP: WPCCNT ;PNTR TO WPPCNT
+ BPCCNT
+ WPCCNT
+
+SLBC: WLBC
+ BLBC
+ WLBC
+
+SDBC: WDBC
+ BDBC
+ WDBC
+
+SPNC: WPNC
+ BPNC
+ WPNC
+
+SQNC: WQNC
+ BQNC
+ WQNC
+
+SRKC: WRKC
+ BRKC
+ WRKC
+
+SBSC: WBSC
+ BBSC
+ WBSC
+
+SKNC: WKNC
+ BKNC
+ WKNC
+
+SNUOP: NUMORP
+ NUMORP+1
+ NUMORP
+
+;SQVAL: BLOCK BD2
+
+OSPNC: OWPNC
+ OBPNC
+ OWPNC
+
+ 0 ;MUST BE AT PVALUE REF AT CLOSSC
+PP PVALUE:, REPEAT 2,[
+ REPEAT 8,PWNV
+ RV
+ NV
+ BV
+ 3000
+ KQV
+ BV
+ NV
+ RV
+]
+
+CSQP=.-2*BW
+ REPEAT 3*BW,0
+ REPEAT 2,[
+ REPEAT 4,0
+ REPEAT 2,-1
+ REPEAT 4,0
+]
+ REPEAT 3*BW,0
+
+LMRDT: BW
+ 1
+ -BW
+ -1
+
+LMBDT: BW+1
+ BW-1
+ -BW-1
+ -BW+1
+
+PP LMGT:, ;SIGN SET FOR PAWNS
+ IRPS PWC,,LMWPW LMBPW
+ REPEAT 8, SETZ PWC
+ LMROOK
+ LMKNT
+ LMBIS
+ LMKING
+ LMQUEEN
+ LMBIS
+ LMKNT
+ LMROOK
+
+TERMIN
+
+
+PP LMGSTD:, ;SCORING TALE DIFFERENT ROUTINES FOR SLIDING PIECES
+ ;SIGN NEG FOR WHITE PAWNS
+IRP PWC,,[SETZ LMWPW,LMBPW]
+ REPEAT 8,PWC
+ LSROOK
+ LMKNT
+ LSBIS
+ LMKING
+ LSQUEEN
+ LSBIS
+ LMKNT
+ LSROOK
+ TERMIN
+
+PP SNFBP:, ;SIGN NEG FOR BLACK PAWNS (RH X DISP ROUTINES)
+ IRP PWC,,[LMWPW,SETZ LMBPW]
+ REPEAT 8,PWC
+ LXROOK
+ LMKNT
+ LXBIS
+ LMKING
+ LXQUEEN
+ LXBIS
+ LMKNT
+ LXROOK
+ TERMIN
+
+PP PNTB:, ;PIECE TO BIT
+ REPEAT NPC,<43-.RPCNT>_12.+100,,BPCSOP
+
+PP DEFVL:, BLOCK NPC ;VALUE FOR DEFENDING THIS P
+
+
+PP ENPCL:, BLOCK NPC ;CALCULATED LOSS IN ENPRISE
+ ;MUST FOLLOW DEFVL
+
+LMVDST==400
+MVDST: BLOCK LMVDST ;MOVE DESCRIPTION TABLE
+;;SYM1
+
+SYMT: SIXBIT /K/
+ SIXBIT /Q/
+ SIXBIT /RK/
+ SIXBIT /NK/
+ SIXBIT /BK/
+ SIXBIT /RQ/
+ SIXBIT /NQ/
+ SIXBIT /BQ/
+ SIXBIT /B/
+ SIXBIT /N/
+ SIXBIT /R/
+ SIXBIT /G/
+ SIXBIT /PK/
+ SIXBIT /PQ/
+ SIXBIT /PRK/
+ SIXBIT /PNK/
+ SIXBIT /PBK/
+ SIXBIT /PRQ/
+ SIXBIT /PNQ/
+ SIXBIT /PBQ/
+ SIXBIT /PB/
+ SIXBIT /PN/
+ SIXBIT /PR/
+ SIXBIT /P/
+ SIXBIT /O/
+
+;;;SYMT
+
+SYMPS:IFN DSPLY,[
+ SIXBIT /SDS/
+ SIXBIT /SLS/
+] SIXBIT /DVSP/
+ SIXBIT /M/
+ SIXBIT /U/
+ SIXBIT /DVMS/
+ SIXBIT /DB/
+ SIXBIT /ES/
+ SIXBIT /TESER/
+ SIXBIT /GP/
+ SIXBIT /WP/
+ SIXBIT /BP/
+ SIXBIT /SP/
+ SIXBIT /NP/
+IFN DSPLY, SIXBIT /YCNAF/
+ SIXBIT /TNP/
+ SIXBIT /PLLAW/
+ SIXBIT /WTES/
+ SIXBIT /DTES/
+ SIXBIT /FTES/
+ SIXBIT /DFTES/
+ SIXBIT /CTES/
+IFE DEC, SIXBIT /YTT/
+ SIXBIT /WARD/
+IFN HSCOD, SIXBIT /HSAH/
+IFE DECTS, SIXBIT /EMITT/
+IFE DECTS, SIXBIT /ULKKLC/
+IFE DECTS, SIXBIT /MRAPS/
+IFN BOOK, SIXBIT /KOOB/
+IFN UTAPE, SIXBIT /DAERU/
+ SIXBIT /DSTES/
+ SIXBIT /DSSTES/
+IFE DECTS, SIXBIT /LCTES/
+IFN UTAPE,[
+ SIXBIT /ELIF/
+ SIXBIT /ETIRWU/
+ SIXBIT /EVAS/
+ SIXBIT /SR/
+] SIXBIT /TOPS/
+IFN BOOK, SIXBIT /KOOBC/
+ SIXBIT /ECART/
+
+IFE DECTS, SIXBIT /WST/
+IFN BOOK, SIXBIT /KOOBR/
+ SIXBIT /TSIL/
+ SIXBIT /SCB/
+ SIXBIT /CPT/
+IFN KILLH, SIXBIT /SHK/
+ SIXBIT /SFS/
+ SIXBIT /BKOOBW/
+ SIXBIT /BKOOBR/
+ SIXBIT /SSMS/ ;MULTIPLE SEARCH MODE
+ SIXBIT /WSCI/ ;INCREMENTAL CAT MODE
+ SIXBIT /WSALS/
+ SIXBIT /SVPS/
+ SIXBIT /VDPT/
+ SIXBIT /KCOLCI/
+ SIXBIT /POTS/
+ SIXBIT /RETSAF/
+ SIXBIT /REWOLS/
+ SIXBIT /WSRAP/
+ SIXBIT /ASGNIK/
+ SIXBIT /GLA/
+ SIXBIT /BDGMP/
+ SIXBIT /WSDFD/
+ SIXBIT /WSGCP/
+ SIXBIT /YALPER/
+ SIXBIT /T/
+ SIXBIT /PT/
+ SIXBIT /TLLA/
+ SIXBIT /DVPTES/
+ SIXBIT /RAELC/
+ SIXBIT /SOPW/
+ SIXBIT /SOPR/
+ SIXBIT /TUP/
+ SIXBIT /EDIS/
+ SIXBIT /TSETES/
+ SIXBIT /GDNER/
+ SIXBIT /WSGE/
+ SIXBIT /SIDBD/
+ SIXBIT /WSCF/
+ SIXBIT /WSSH/
+ SIXBIT /VPH/
+ SIXBIT /KSDHR/
+ SIXBIT /KSDHW/
+ SIXBIT /KSDHVS/
+ SIXBIT /NEPOH/
+ SIXBIT /DAERH/
+ SIXBIT /PIKS/
+ SIXBIT /NIPOTS/
+ SIXBIT /WSCRH/
+ SIXBIT /WSCRAP/
+ SIXBIT /PTES/
+ SIXBIT /WSQSC/
+ SIXBIT /STGOWT/
+ SIXBIT /TPBH/
+ SIXBIT /WSTCQS/
+ SIXBIT /WSNVM/
+ SIXBIT /SKWA/
+ SIXBIT /WSASMP/
+ SIXBIT /WSAS/
+ SIXBIT /WSSAC/
+ SIXBIT /QST/
+ SIXBIT /CRTAS/
+ SIXBIT /WSFS/
+ SIXBIT /PCAMH/
+ ;ADD NEW PSEUDOS HERE ^
+
+IFN BOOK,[
+BKSMS: SIXBIT /V/
+ SIXBIT /E/
+ SIXBIT /L/
+ SIXBIT /T/
+]
+
+NSYMS=.-SYMT
+
+;;SYM2
+PTB:
+REPEAT 3,[
+ BIT 12
+;0 1 2 3 4 5 6 7 8
+IFE .RPCNT,PTBQ:
+ BIT 13
+;G KRP KNP KBP KP QP QBP QNP QRP
+ BIT 9
+;9 10 11 12 13 14 15 16
+ BIT 10
+;KR KN KB K Q QB QN QR
+ BIT 11
+ BIT 16
+ BIT 15
+ BIT 14
+IFE .RPCNT,PTBB:
+ BIT 11 14
+IFE .RPCNT,PTBN:
+ BIT 10 15
+IFE .RPCNT,PTBR:
+ BIT 9 16
+ BIT 0
+IFE .RPCNT,PTBP:
+ BIT 18 4+
+ BIT 18 5+
+ BIT 18 1+
+ BIT 18 2+
+ BIT 18 3+
+ BIT 18 8+
+ BIT 18 7+
+ BIT 18 6+
+ BIT 18 60+6+
+ BIT 18 40+7+
+ BIT 18 20+8+
+ BIT 1 2 3 4 5 6 7 8
+ BIT 17
+;CASTLE
+IFE .RPCNT,PTBL=.-PTB
+]
+
+SQTB: 4 ;1 2 3 4 5 6 7 8
+ 5 ;KR KN KB K Q QB QN QR
+ 1
+ 2
+ 3
+ 8
+ 7
+ 6
+ 3,,6
+ 7,,2
+ 1,,8
+ REPEAT 14.,600000,,
+
+;;;SYMTV
+PSDS:IFN DSPLY,[
+ 600000,,DBS1 ;4.9 USE STANDARD OUTPUT
+ 600000,,DBS2 ;4.8 USE STANDARD INPUT
+] 600000,,PMVS ;IF 4.9 BUT NOT 4.8 VARIABLE IS IN DISP ADR -1
+ HACK1
+ HACK2
+ 600000,,MVDS
+ PBOARD
+ 600000,,ECHOS
+ ARESET
+ APG
+ PWHITE
+ PBLACK
+ PSELF
+ PNORM
+IFN DSPLY,SETZ FANCY
+ SETZ PNT
+ SETZ AWALLP
+ ASETW
+ 600000,,HK1V
+ 600000,,FDCUT
+ 600000,,FDDCUT
+ 600000,,CATCUT
+IFE DEC,600000,,HEAR
+ ADRAW
+IFN HSCOD, 600000,,NHSW
+IFE DECTS, ATTIME ;TYPE TIME
+IFE DECTS, 600000,,CLKSW ;SWITCH CLOCK KLUDGE ON AND OFF
+IFE DECTS, ASPARM ;STORE PARAMETERS
+IFN BOOK, 600000,,UBKF
+IFN UTAPE,AUREAD
+ 600000,,IVVDD ;SET DEPTH OF SECONDARY ANAL
+ 600000,,INVD ;SET PLYN FROM WHICH SEC ANAL MADE
+IFE DECTS, ASETCL ;SET CLOCK
+IFN UTAPE,[
+ AFILE
+ AWRT
+ ASAVE
+ ARST
+] ASPOT ;ODDS
+IFN BOOK, ACBOOK
+ ATRACE
+
+IFE DECTS, 600000,,TSW
+IFN BOOK, ARBOOK
+ ALIST
+ 600000,,NSBVS
+ ATPCG
+IFN KILLH,600000,,AKHS
+ 600000,,FIS
+ AWBKB
+ ARBKB
+ 600000,,MSSW ;MULTIPLE SEARCH SWITCH
+ 600000,,ICSW ;INCREMENTAL CAT SWITCH
+ 600000,,LNSW
+ 600000,,PPVSW
+ ATPCC
+ 600000,,INVCLK
+ ASTOP
+ AFASTER
+ ASLOWER
+ 600000,,PARSW
+ 600000,,KINGSW
+ 600000,,ALGSW
+ 600000,,PMDDSW
+ 600000,,DFDSW
+ 600000,,PCGSW
+ AREPLAY
+ ATRACE
+ APTRCE
+ ALTRCE
+ 600000,,RPVD
+ ACLEAR
+ AWPOS
+ ARPOS
+ APUT
+ ASIDE
+ ASTEST
+ EGREAD
+ 600000,,EGSW
+ 600000,,DBDSSW
+ 600000,,FCSW
+ 400000,,HSSW+1 ;CROCK
+ AHPV
+ ARHDSK
+ AWHDSK
+ ASVHDK
+ ARDBB ;HOPEN
+ HFILER ;HREAD
+ ASKIP
+ ASTPIN
+ 600000,,HRCSW
+ 600000,,PARCSW
+ ASETP
+ 600000,,CSQSW
+ 600000,,TWOGTS
+ AHBPT
+ 600000,SQCTSW
+ 600000,,MVNSW
+ 400000,,AUXTTY
+ 600000,,PMSASW
+ 600000,,SASW
+ 600000,,CASSW
+ ATSQ
+ 400000,,SATRC1
+ 600000,,SFSW
+ 600000,,HMACP
+ ;ADD NEW PSEUDOS HERE ^
+
+IFN BOOK,[
+ BKV ;VARIATION NAME
+ BKE ;POP 1
+ BKM ;POP MULTIPLE
+ BKT ;TRANSPOSITION
+]
+
+IFN .-SQTB-NSYMS,[PRINTC /SYM TAB LOSSAGE!
+/]
+
+
+
+PDL: BLOCK PDLL
+
+SQN: 0
+TAKES: 0
+TAKES1: 0
+TAKES2: 0
+EQSGNF: 0
+RNPCS: 0
+RNSQS: 0
+GME: 0
+LGLMV: 0
+SIDE: NPCS
+CASLF: 0
+PLYN: 0
+ -1 ;FOR APUT
+GAME: BLOCK LGAME ;MOVE
+IFN HSCOD,[
+GHK1: BLOCK LGAME ;HASH KEY THIS POSITION
+]
+GAMEV: BLOCK LGAME ;VALUE OF POSITION OR SETZ IF MOVE TYPED IN OR BOOK
+ ;ALSO USED FOR HASH VALUE DURING HASH RECONSTRUCTIONS
+GAMP: GAME-1
+GSYLNF: 0
+GSYLMF: 0
+
+ 777776,,
+ -1
+SYLT: BLOCK 5
+
+;;;MCAF
+
+MCAF: ;RECALC WPCOR BPCOR AT SQUARE IN A AND SIMUL ATEVL DOES NOT CLOBBER S
+ CLEARM WPCOR(A) ;CLEAR PIECE WORDS
+ CLEARM BPCOR(A)
+ SETOM BPCHD(A) ;RESET CHANGED INDICATOR
+ PUSHJ P,ATEVE ;CALC DATA
+ CLEARM NWDP ;# WHITE DIRECT PCS
+ CLEARM NBDP
+ CAIL C,DFPCT
+ JRST MCAF2
+ MOVE T2,ATEVLT(I)
+MCAF3: TLNN T2,770000
+ JRST MCAF4
+ SKIPGE T1,1(C)
+ JRST MCAF3A ;NOT BEARING DIRECTLY
+ SKIPL LMGT(T1)
+ AOS @NDPP(I) ;# DIRECT PCS
+MCAF3B: IDPB T1,T2
+ CAIGE C,DFPCT-1
+ AOJA C,MCAF3
+MCAF2: CAIL D,ATPCT
+ JRST MCAF5
+ MOVE T2,ATEVLT+1(I)
+MCAF6: TLNN T2,770000
+ JRST MCAF7
+ SKIPGE T1,1(D)
+ JRST MCAF6A
+ SKIPL LMGT(T1)
+ AOS @NDPP+1(I)
+MCAF6B: IDPB T1,T2
+ CAIGE D,ATPCT-1
+ AOJA D,MCAF6
+MCAF5: MOVE T1,[MCFMSK]
+ ANDCAM T1,CNTRL(A) ;CLEAR IT EXCEPT FOR OBSQP
+ SKIPN WA(A)
+ JRST MSQC1 ;NOT CONTESTED BY WHITE
+ SKIPN BA(A)
+ JRST MSQC2 ;NOT CONTESTED BY BLACK
+ LDB T1,[340600,,WPCOR(A)]
+ LDB T2,[340600,,BPCOR(A)]
+ MOVE ZR,PVALUE(T1)
+ CAMN ZR,PVALUE(T2)
+ JRST MSQC4 ;LEAST VAL PCS EVEN
+ CAML ZR,PVALUE(T2)
+ JRST MSQC5 ;BLACK HAS SMALLEST
+ MOVE ZR,BA(A) ;WHITE HAS SMALLEST
+ SOJN ZR,MSQC8A ;BLACK HAS MORE THAN 1
+ MOVE ZR,WA(A)
+ MOVEI C,MSQWSC
+ SKIPE NWDP
+ SOJN ZR,MSQC7 ;XFER ON WHITE HAS 2 OR MORE
+ MOVEI TT,MSQWD
+ JRST MSQC2A
+
+MCAF3A: TRO T1,100
+ JRST MCAF3B
+
+MCAF6A: TRO T1,100
+ JRST MCAF6B
+
+MSQC1: MOVEI C,MSQUC
+ SKIPN BA(A)
+ JRST MSQCX ;UNCONTESTED BY EITHER
+ MOVEI C,MSQBUC
+ MOVEI TT,MSQBD
+ SKIPN NBDP
+ JRST MSQC1A ;ATT ONLY BY P CAN OTHER P MOVE IN?
+MSQC1C:
+MSQC6: CAIG C,MSQBD
+ JRST MSQC6A
+ SKIPLE T2,BOARD(A)
+ SKIPL (T2)
+ JRST .+2
+ MOVEI C,MSQBD
+MSQC6A: LDB T2,[340600,,BPCOR(A)] ;CREDIT LEAST BLACK PC AND EXIT
+ JUMPE T2,MSQC6C
+ CAIL C,MSQBC
+ SKIPL LMGT(T2)
+ JRST MSQC6C
+ MOVE T1,[340700,,BPCOR(A)] ;GIVING CREDIT ABOVE DEFENDED- DONT CREDIT P
+MSQC6E: TLNN T1,770000
+ JRST MSQC6C
+ ILDB TT,T1
+ JUMPE TT,MSQC6C
+ TRZE TT,100
+ JRST MSQC6E
+ SKIPGE LMGT(TT)
+ JRST MSQC6E
+MSQC6D: MOVE T2,TT
+MSQC6C: DPB T2,[BCTLF,,CNTRL(A)]
+ JRST MSQCX
+
+MSQC1A: SKIPE BOARD(A) ;RET VAL IN C IF BLACK CAN PUSH IN
+ JRST MSQC1B ;VAL IN TT IF NOT
+ SKIPLE D,BOARD+BW(A)
+ SKIPL SNFBP-PIECE(D)
+ JRST MSQC1D
+ JRST MSQC1C
+
+MSQC1D: SKIPL 4RNKP(A)
+ JRST MSQC1B
+ SKIPLE D,BOARD+2*BW(A)
+ SKIPL SNFBP-PIECE(D)
+MSQC1B: SKIPA C,TT
+ JRST MSQC1C
+ JRST MSQC6
+
+MSQC8A: MOVE D,WA(A)
+ CAIL ZR,-1(D)
+ SKIPA TT,[MSQWD]
+ MOVEI TT,MSQWC
+ MOVEI C,MSQWSC ;IF WHITE CAN MV IN P
+ JRST MSQC2A
+
+MSQC4: MOVEI C,MSQE
+ MOVE ZR,WA(A)
+ SKIPL LMGT(T1) ;SKIP ON LEAST VAL PC IS P
+ CAMN ZR,BA(A)
+ JRST MSQCX
+ CAMG ZR,BA(A)
+ JRST MSQC6B
+ MOVEI C,MSQWC
+ JRST MSQC7
+
+MSQC2: MOVEI C,MSQWUC
+ MOVEI TT,MSQWD
+ SKIPN NWDP
+ JRST MSQC2A ;ATT ONLY BY P CAN OTHER P MOVE IN?
+MSQC2C:
+MSQC7: CAIL C,MSQWD
+ JRST MSQC7A
+ SKIPLE T2,BOARD(A)
+ SKIPG (T2)
+ JRST .+2
+ MOVEI C,MSQWD ;OUR GUY THERE
+MSQC7A: LDB T2,[340600,,WPCOR(A)] ;CREDIT LEAST WHITE PC AND EXIT
+ JUMPE T2,MSQC7C
+ CAIG C,MSQWC
+ SKIPL LMGT(T2)
+ JRST MSQC7C
+ MOVE T1,[340700,,WPCOR(A)]
+MSQC7E: TLNN T1,770000
+ JRST MSQC7C
+ ILDB TT,T1
+ JUMPE TT,MSQC7C
+ TRZE TT,100
+ JRST MSQC7E
+ SKIPGE LMGT(TT)
+ JRST MSQC7E
+MSQC7D: MOVE T2,TT
+MSQC7C: DPB T2,[WCTLF,,CNTRL(A)]
+ JRST MSQCX
+
+MSQC2A: SKIPE BOARD(A) ;NO DIRECT PCS EX PAWNS, CAN A P MOVE IN?
+ JRST MSQC2B ;NO SQ OCC
+ SKIPLE D,BOARD-BW(A)
+ SKIPL LMGSTD-PIECE(D)
+ JRST MSQC2D
+ JRST MSQC2C ;P CAN MOVE IN
+
+MSQC2D: SKIPG 4RNKP(A)
+ JRST MSQC2B
+ SKIPLE D,BOARD-2*BW(A)
+ SKIPL LMGSTD-PIECE(D)
+MSQC2B: SKIPA C,TT
+ JRST MSQC2C
+ JRST MSQC7
+
+MSQC5: MOVE ZR,WA(A)
+ SOJN ZR,MSQC5A
+ MOVE ZR,BA(A)
+ MOVEI C,MSQBSC
+ SKIPE NBDP
+ SOJN ZR,MSQC6
+ MOVEI TT,MSQBD
+ JRST MSQC1A
+
+
+MSQC5A: MOVE D,BA(A)
+ CAIL ZR,-1(D)
+ SKIPA TT,[MSQBD]
+ MOVEI TT,MSQBC
+ MOVEI C,MSQBSC
+ JRST MSQC1A
+
+MSQC6B: MOVEI C,MSQBC
+ JRST MSQC6
+
+MSQCX: DPB C,[BSQSP,,CNTRL(A)]
+ MOVE C,DFPCP
+ MOVE D,ATPCP
+ MOVE TT,NATKS
+ POPJ P,
+
+MCAF4: MOVSI T2,(SETZ)
+ IORM T2,@ATEVLT(I)
+ JRST MCAF2
+
+MCAF7: MOVSI T2,(SETZ)
+ IORM T2,@ATEVLT+1(I)
+ JRST MCAF5
+SQCAF: MOVE T1,WA(A) ;COMPUTE SQ CNTRL AFTER PC IN B ATTS (IT IS KNOWN NOT TO BE ATTACKING NOW)
+ MOVE T2,BA(A) ;AND PC IN S GOES AWAY (WHICH MAY OR MAY NOT BE ATTACKING SQ ORIGIONALLY)
+ LDB Q,[340600,,WPCOR(A)] ;IN EITHER CASE 0 = NULL
+ LDB J,[340600,,BPCOR(A)]
+ CLEARM SQCWI
+ CLEARM SQCBI
+ JUMPN S,SQCAF3
+SQCAF5: MOVEI C,100000
+ MOVEI D,100000
+ SKIPE Q
+ MOVE C,PVALUE(Q)
+ SKIPE J
+ MOVE D,PVALUE(J)
+ JUMPE B,SQCAF1
+ MOVE ZR,PASIN(B)
+ SKIPGE PIECE(B)
+ AOJA T2,SQCAF2
+ ADDM ZR,SQCWI
+ CAMG C,PVALUE(B)
+ AOJA T1,SQCAF1
+ HRRZ Q,B
+ MOVE C,PVALUE(B)
+ AOJA T1,SQCAF1
+
+SQCAF2: ADDM ZR,SQCBI
+ CAMG D,PVALUE(B)
+ JRST SQCAF1
+ HRRZ J,B
+ MOVE D,PVALUE(J)
+SQCAF1: JUMPE T1,SQC1 ;NOT CONTESTED BY W
+ JUMPE T2,SQC2 ;NOT CONTESTED BY B
+ CAMN C,D
+ JRST SQC4 ;LEAST VAL PCS EVEN
+ CAML C,D
+ JRST SQC5 ;BLACK HAS SMALLEST
+ SOJN T2,SQC8A ;BLACK HAS MORE THAN 1
+ MOVEI TT,MSQWSC
+ SOJN T1,SQCX ;XFER ON WHITE HAS 2 OR MORE
+ MOVEI TT,MSQWD
+ JRST SQCX
+
+SQCAF3: SKIPGE PIECE(S)
+ JRST SQCAF4
+ MOVE ZR,[430700,,WPCOR(A)]
+SQCAF7: ILDB TT,ZR
+ JUMPE TT,SQCAF5
+ TRZ TT,100
+ CAMN TT,S
+ JRST SQCAF6
+ TLNE ZR,770000
+ JRST SQCAF7
+ JRST SQCAF5 ;DOESNT BEAR
+
+SQCAF6: CAMN Q,S
+ LDB Q,[250600,,WPCOR(A)]
+ MOVN ZR,PASIN(S)
+ ADDM ZR,SQCWI
+ SOJA T1,SQCAF5
+
+SQCAF4: MOVE ZR,[430700,,BPCOR(A)]
+SQCAF8: ILDB TT,ZR
+ TRZ TT,100
+ JUMPE TT,SQCAF5
+ CAMN TT,S
+ JRST SQCAF9
+ TLNE ZR,770000
+ JRST SQCAF8
+ JRST SQCAF5
+
+SQCAF9: CAMN J,S
+ LDB J,[250600,,BPCOR(A)]
+ MOVN ZR,PASIN(S)
+ ADDM ZR,SQCBI
+ SOJA T2,SQCAF5
+
+SQC1: MOVEI TT,MSQUC
+ JUMPE T2,SQCX ;NOT CONTESTED BY EITHER
+ LDB T1,[111700,,BPAS(A)]
+ LSH T1,9
+ ADD T1,SQCBI
+ SKIPN T1
+ SKIPA TT,[MSQBD]
+ MOVEI TT,MSQBUC
+SQCX: MOVEM TT,SQCAFA
+ POPJ P,
+
+SQC8A: CAIL T2,-1(T1)
+ SKIPA TT,[MSQWD]
+SQC7B: MOVEI TT,MSQWC
+ JRST SQCX
+
+SQC4: MOVEI TT,MSQE
+ SKIPL LMGT(Q)
+ CAMN T1,T2
+ JRST SQCX
+ CAMG T1,T2
+ JRST SQC6B
+ JRST SQC7B
+
+SQC2: LDB T1,[111700,,WPAS(A)]
+ LSH T1,9
+ ADD T1,SQCWI
+ SKIPN T1
+ SKIPA TT,[MSQWD]
+ MOVEI TT,MSQWUC
+ JRST SQCX
+
+SQC5: SOJN T1,SQC5A ;BLACK HAS SMALLEST
+ MOVEI TT,MSQBSC ;W HAS ONLY 1
+ SOJN T2,SQCX ;XFER ON B HAS >1
+ MOVEI TT,MSQBD
+ JRST SQCX
+
+SQC5A: CAIL T1,-1(T2) ;BLACK HAS SMALLEST, W HAS >1
+ SKIPA TT,[MSQBD] ;BLACK HAS SMALLEST, W HAS MORE OR EVEN
+SQC6B: MOVEI TT,MSQBC
+ JRST SQCX
+
+MCAFS: MMSAVAC
+ PUSHJ P,MCAF
+ MMRSAC
+ POPJ P,
+
+SQCAFS: MMSAVAC
+ PUSHJ P,SQCAF
+ MMRSAC
+ POPJ P,
+
+SQCAFA: 0 ;ANS FROM SQCAF
+
+SQCWI: 0
+SQCBI: 0
+
+NWDP: 0 ;# WHITE DIRECT PCS (NON-PAWNS)
+NBDP: 0 ;# B (")
+
+NDPP: NWDP
+ NBDP
+ NWDP
+
+
+;;;CATP
+
+MCAT4: POP T,A ;RH OF A HAS LOCN OF BASE PIECE
+ LDB B,[PINATP,,A] ;PIECE PINNING
+ LDB TT,[PINDIR,,A] ;DIRECTION OF PIN
+ MOVEI I,0
+ SKIPGE @BOARD(A)
+ MOVEI I,1 ;I GETS SIDE PINNED
+ MOVE D,BOARD(A) ;PICK UP BASE PIECE
+ MOVE S,PVALUE-PIECE(D) ;VALUE OF BASE PIECE
+ SKIPGE RPIECE-PIECE(D)
+ JRST MCAT6C ;PINNED TO K
+ SKIPN @LMGST(I)
+ JRST MCAT6B ;YES REAL PIN (NOT DEFENDED)
+ MOVE T2,PVALUE(B) ;SEE IF BASE PIECE WOULD BE E.P. IF "PIN" BROKEN
+ SUB T2,PVALUE-PIECE(D) ;SKIP ON PIECE PINNED TO MORE VAL THAN PINNING PIECE
+ MOVEM T2,MCT4T1 ;SAVE LOSS ON FIRST CAPT-RECAPT
+ CLEARM MCT4T2 ;ATTACKERS BEST CHOICE SO BAR
+ SKIPL BPCHD(A)
+ PUSHJ P,MCAF ;RECOMPUTE WPCOR,BPCOR IF NECC.
+ MOVE C,ATEVLT(I) ;PNTR TO DEFENDING BPCOR
+ MOVE D,ATEVL2+1(I) ;PNTR TO ATTACKING BPCOR
+ LDB B,[PINATP,,A] ;RESTORE DATA CLOBBERED AT MCAF
+ LDB TT,[PINDIR,,A]
+ MOVE S,BOARD(A)
+ MOVE S,PVALUE-PIECE(S)
+ MOVEM S,MCT4T4 ;DEFENDERS BEST CHOICE SO FAR
+MCEPP5: MOVEM S,MCT4T3 ;SAVE VALUE IN CASE RECAPTURE NOT POSSIBLE
+ LDB T1,D ;PICK UP NEXT ATTACKER IN LINE
+ JUMPE T1,MCEPP1 ;NO MORE DIRECT SEE IF ANY MORE UNCOVERED BY BREAKING PIN
+ MOVE T2,PVALUE(T1) ;SELECT LEAST VAL ATTACKER, DIRECT OR THRU PIN
+ JUMPE B,MCEPP3 ;JUMP ON NO MORE THRU PIN
+ CAMGE T2,PVALUE(B)
+ JRST MCEPP3 ;DIRECT LESS VAL
+MCEPP1: JUMPE B,MCEPP7 ;OUT OF FURTHER OPTIONS, SEE WHAT BEST ATTACKER OPTION WAS
+ SUB S,PVALUE(B) ;EXPEND PIECE ATTACKING THRU PIN
+ MOVE T1,PIECEL(B) ;SEE IF HE HAS A FRIEND BEHIND HIM
+ LDB B,RDAT1(TT)
+ JUMPE B,MCEPP4 ;NO
+ SKIPGE SLDPC(B)
+ XCT RMOY+1(I)
+ MOVEI B,0 ;HES NOT OURS OR NOT SLIDING
+MCEPP4: CAMLE S,MCT4T4 ;COMPARE WITH DEFENDERS BEST OPTION
+ MOVE S,MCT4T4 ;DEFENDER WILL NEVER LET US GET THAT
+ CAMLE S,MCT4T2 ;SEE IF THIS BEST ATTACKER OPTION SO FAR
+ MOVEM S,MCT4T2
+ CAMN S,MCT4T4
+ JRST MCEPP7 ;ISSUE RESOLVED
+ TLNN C,770000 ;EXPEND NEXT DEFENDER
+ JRST MCEPP7 ;DONT CONSIDER DEFENDERS PAST 5
+ ILDB T1,C ;NEXT DEFENDER IN LINE
+ JUMPE T1,MCEPP6 ;NONE AVAIL SO REALLY COULDNT MAKE LAST RECAPTURE
+ ADD S,PVALUE(T1)
+ JUMPLE S,MCEPP7 ;DEFENDER WONT GO ANY FARTHER THAN THIS
+ CAMGE S,MCT4T2 ;COMPARE WITH ATTACKERS BEST SO FAR
+ MOVE S,MCT4T2 ;ATTACKER WONT LET US GET THAT
+ CAMGE S,MCT4T4 ;DEFENDERS BEST CHOICE
+ MOVEM S,MCT4T4
+ CAMN S,MCT4T2
+ JRST MCEPP7 ;ISSUE RESOLVED
+ JRST MCEPP5
+
+MCEPP3: SUB S,T2 ;EXPEND NEXT DIRECT PIECE
+ TLNN D,770000
+ MOVEI D,0 ;SET FLAG NO MORE DIRECT PIECES
+ IBP D
+ JRST MCEPP4
+
+MCEPP6: MOVE S,MCT4T3 ;DEFENDER REALLY COULDNT MAKE LAST RECAPTURE
+ CAMG S,MCT4T2
+ JRST MCEPP7
+ MOVEM S,MCT4T2
+ TROA A,IPBIT
+MCEPP7: MOVE S,MCT4T2
+ JUMPLE S,MCDSE1 ;NOT REALLY E.P.
+ CAMLE S,MCT4T4
+ MOVE S,MCT4T4 ;DEFENDER CAN MINIMIZE LOSS BY NOT GOING ALL THE WAY THRU
+ CAMGE S,MCT4T1
+MCAT6B: TRO A,IPBIT ;LOSS GREATER THAN THAT ON FIRST CAPT-RECAPT, SO ADDTL DEFENCE COULD HELP
+
+MCAT6: LDB T1,[PINOPS,,A] ;SQUARE OF PIECE PINNED
+ MOVE T1,BOARD(T1)
+ SKIPGE RPIECE-PIECE(T1)
+ JRST MCDSE2 ;CAN'T PIN K
+ MOVE C,PIECEL(B)
+ LDB T2,RDATS(TT)
+ JUMPE T2,MCAT6X
+ XCT RMOY6(I)
+ SKIPL SLDPC(T2)
+ JRST MCAT6X
+ TRO A,DPBIT ;PIN BY DOUBLED PIECES
+MCAT6X: AOS B,PINFS
+ CAIL B,EPINDT-3
+ JRST PINNFS
+ AOS PINFS
+ AOS PINFS
+ MOVEM A,1(B)
+ MOVEM S,2(B) ;STORE PIN VALUE
+ EXCH B,PINT-PIECE(T1)
+ TLNE S,-1
+ TLO B,400000 ;PINNED TO K
+ MOVEM B,@PINT-PIECE(T1)
+ AOS B,PINFS
+ CAIL B,EPINDT-3
+ JRST PINNFS
+ AOS PINFS
+ AOS PINFS
+ LDB T1,[PINBS,,A]
+ MOVE T1,BOARD(T1)
+ MOVEM A,1(B)
+ MOVEM S,2(B)
+ EXCH B,BPINT-PIECE(T1)
+ MOVEM B,@BPINT-PIECE(T1)
+ POPJ P,
+
+PINNFS: PTTY [ASCIZ /PIN FS EXH/]
+ POPJ P,
+
+
+MCAT6C: MOVSI S,1 ;PINNED TO K
+ JRST MCAT6
+
+MCDSE1: LDB T1,[PINOPS,,A]
+ MOVE T1,BOARD(T1)
+MCDSE2: AOS B,PINFS
+ CAIL B,EPINDT-2
+ JRST PINNFS
+ AOS PINFS
+ MOVEM A,1(B)
+ EXCH B,DSCOV-PIECE(T1)
+ MOVEM B,@DSCOV-PIECE(T1)
+ POPJ P,
+
+MCT4T1: 0 ;LOSS ON FIRST CAPT-RECAPT
+MCTNT2: 0 ;T2 INDEX FOR VAL IN MCT4T2 (CCAN)
+MCT4T3: 0 ;SAVE VALUE IN CASE DEF CAN'T RECAPT
+MCT4T4: 0 ;DEFENDERS BEST CHOICE SO FAR TO MINIMIZE LOSS
+MCTNT4: 0 ;T2 INDEX FOR VAL IN MCT4T4 (CCAN)
+EPPEPC: 0 ;EXTRA ATTACKING PC AT EPP
+EPPEP1: 0 ;AS ABOVE, BUT LH GAURENTEED CLEAR
+EPPCPP: 0 ;PNTR TO CAPT PIECE BUFFER (FOR ATTACKER)
+EPPCPT: 0 ;TEMP
+EPIPF: 0 ;IF EPIPC IS .NE. 0, -1 => IT IS CLOSER TO ATT SQ THAN PC INB
+ ;0 => FARTHER
+
+EPPIP: 0 ;PC TO IGNORE AT EPP (FOR DEF)
+
+EPPDPP: 0 ;PNTR TO CAPT PC BUF FOR ATT
+
+SEPPC: 0 ;AREA CLEARED AT START OF EPP
+EPBPC: 0 ;PC BACKING ONE IN B
+EPBPC1: 0
+MCT4T2: 0 ;ATTACKERS BEST CHOICE SO FAR
+MCT4T5: 0 ;SAVE VALUE IN CASE ATTACKER CAN'T RECAPT
+EPPCPB: 0 ;CAPTURED PIECE BUFFER AT EPP FOR ATTACKER
+ 0 ;MUST BE AFTER EPPCPB
+EPPCPD: 0 ;CAPT PC BUFFER (FOR DEFENDER)
+ 0 ;MUST FOLLOW EPPCPD
+EPIPC: 0 ;PC INTERFERING (ALONG SAME LINE) WITH PC IN B
+EEPPC: ;END OF CLEARED AREA
+;PC IN B ATTS (EVEN IF DOESNT NOW)
+;FROM SQ IN C
+;IF SLIDING, ATT FROM DIR IN D
+
+EPP: MOVE T1,[SEPPC,,SEPPC+1]
+ BLT T1,EEPPC-1 ;CLEAR STUFF
+ JUMPE B,EPBP3
+ SKIPGE LMGT(B)
+ JRST EPBP1
+ SKIPGE SLDPC(B)
+ JRST EPBP2
+EPBP3: MOVEM S,EPPIP ;PC TO IGNORE (FOR DEFENDER)
+ PUSH P,TT
+ MOVEM B,EPPEPC ;I=0 WHITE ATTACKS BLACK DEFENDS
+ HRRZM B,EPPEP1
+ MOVE TT,[440700,,EPPCPB]
+ MOVEM TT,EPPCPP
+ MOVE TT,[440700,,EPPCPD]
+ MOVEM TT,EPPDPP
+ MOVE S,BOARD(A) ;SEE IF PIECE ON SQ IN A IS EP
+ MOVE S,PVALUE-PIECE(S)
+; CLEARM MCT4T2 ;ATTACKERS BEST CHOICE SO FAR
+ SKIPL BPCHD(A)
+ PUSHJ P,MCAF
+ MOVE C,ATEVLT+1(I) ;PNTR TO DEFENDING BPCOR
+ MOVE D,ATEVL2(I) ;PNTR TO ATTACKING BPCOR
+ MOVEM S,MCT4T4 ;DEFENDERS BEST CHOICE SO FAR
+; CLEARM MCT4T5
+EPP5: MOVEM S,MCT4T3
+EPP5A: LDB T1,D
+ JUMPE T1,EPP1
+ CAME T1,EPBPC
+ CAMN T1,EPPEP1
+ JRST EPP3A ;DONT COUNT PC TWICE
+ TRZ T1,100 ;IGNORE UNBLOCKED BIT
+ MOVE T2,PVALUE(T1)
+ JUMPE B,EPP3
+ CAMN T1,EPIPC
+ CAME B,EPPEPC
+ JRST EPP1A
+ SKIPGE EPIPF ;INTERF SITUATION
+ JRST EPP3 ;ORIG ATTACKER CLOSER
+ JRST EPP1 ;NEW ATTACKER CLOSER
+
+EPP1A: CAMGE T2,PVALUE(B)
+ JRST EPP3 ;DIRECT ATTACKING LESS VAL
+EPP1: JUMPE B,EPP7A ;ATTACKERS EXAUSTED
+ IDPB B,EPPCPP ;STORE IN CAPTURED ATTACKER BUFFER
+ SUB S,PVALUE(B) ;EXPEND EXTRA ATTACKER
+EPP4A: MOVE B,EPBPC1
+ CLEARM EPBPC1
+EPP4: CAMLE S,MCT4T4 ;COMPARE WITH DEFS BEST OPTION SO FAR
+ MOVE S,MCT4T4 ;HE WONT LET US GET HERE
+ CAMLE S,MCT4T2
+ MOVEM S,MCT4T2 ;ATTACKERS BEST CHOICE SO FAR
+ CAMN S,MCT4T4
+ JRST EPP7 ;ISSUE RESOLVED
+EPPP3: TLNN C,770000
+ JRST EPP6 ;NO MORE DEFENDERS
+ ILDB T1,C
+ JUMPE T1,EPP6 ;NO MORE DEFENDERS
+ TRZ T1,100 ;IGNORE UNBLOCKED BIT
+ CAMN T1,EPPIP
+ JRST EPPP3
+ SKIPE TT,PINT(T1)
+ JRST EPPP1 ;HONOR PIN?
+EPPP2: SKIPE TT,SPINT(T1)
+ JRST EPC1 ;HONOR CONSTRAINT?
+EPC2: SKIPE TT,NHC
+ JRST EPHC1 ;DID THIS PC FIGURE IN TRADE OFF OF MAIN MV?
+EPHC2: IDPB T1,EPPDPP
+ MOVE T2,S
+ CAMGE T2,MCT4T2 ;GIVE HIM AT LEAST WHAT HE HAD
+ MOVE T2,MCT4T2
+ MOVEM T2,MCT4T5
+ ADD S,PVALUE(T1) ;EXPEND NEXT DEFENDER
+ JUMPLE S,EPP7 ;NOT E.P. IF HE LETS US GET HERE, NOT E.P. UNLESS HE HAD BETTER OPTION EARLIER
+ CAMGE S,MCT4T2 ;SEE IF ATTACKER HAD BETTER OPTION EARLIER
+ MOVE S,MCT4T2 ;YES ATTACKER WONT LET US GET HERE
+ CAMGE S,MCT4T4
+ MOVEM S,MCT4T4 ;SEE IF BEST DEFENDERS CHOICE SO FAR
+ CAMN S,MCT4T2
+ JRST EPP7 ;ISSUE RESOLVED
+ JRST EPP5
+
+EPPP1: HRRZ ZR,(TT)
+ JUMPN ZR,EPPP3 ;MULT PIN, HONOR
+ LDB ZR,[BPDPB,,1(TT)]
+ JUMPN ZR,EPPP3 ;PIN BY DOUBLED PCS, HONOR
+ LDB ZR,[PINATP,,1(TT)] ;PINNING PC CAPTURED?
+ PUSHJ P,EPACP
+ JRST EPPP2 ;PINNING PC CAPTED, IGNORE PIN
+ JRST EPPP3 ;PIN HOLDS, FLUSH PC
+
+EPACP: MOVE T2,[440700,,EPPCPB] ;ATTACKING PC IN ZR CAPTED?
+ MOVEM T2,EPPCPT
+EPPP4: ILDB T2,EPPCPT
+ JUMPE T2,POPJ1 ;NO
+ CAME ZR,T2
+ JRST EPPP4
+ POPJ P, ;YES IGNORE PIN
+
+EPDCP: MOVE T2,[440700,,EPPCPD]
+ MOVEM T2,EPPCPT
+EPDC1: ILDB T2,EPPCPT
+ JUMPE T2,POPJ1
+ CAME ZR,T2
+ JRST EPDC1
+ POPJ P,
+
+EPP3: IDPB T1,EPPCPP
+ SUB S,T2 ;EXPEND NEXT DIRECT ATTACKER
+ TLNN D,770000 ;ONLY CONSIDER FIRST 5 ATTACKERS
+ MOVEI D,0
+ IBP D
+ JRST EPP4
+
+EPP3A: TLNN D,770000
+ MOVEI D,0
+ IBP D
+ JRST EPP5A
+
+EPP7A: MOVE S,MCT4T5 ;ATTACKER CANT REALLY MAKE LAST CAPT
+ CAMGE S,MCT4T4
+ MOVEM S,MCT4T4
+ JRST EPP7
+
+EPP6: MOVE S,MCT4T3 ;DEF COULD NOT REALLY MAKE LAST RECAPT
+ CAMGE S,MCT4T2 ;TEST IF THIS CHOICE BETTER THAN ATTACKERS OTHER OPTIONS
+EPP7: MOVE S,MCT4T2 ;ATTACKERS BEST CHOICE
+ CAMLE S,MCT4T4
+ MOVE S,MCT4T4 ;DEFENDER CAN MINIMIZE LOSSES BY NOT GOING ALL THE WAY
+ MOVE B,EPPEPC
+ POP P,TT
+ POPJ P,
+
+EPBP1: MOVNI D,1
+ SKIPGE PIECE(B)
+ JRST EPBP4
+ CAIN A,BW-1(C)
+ MOVEI D,4
+ CAIN A,BW+1(C)
+ MOVEI D,5
+EPBP5: JUMPL D,EPBP3
+EPBP2: LDB T1,RDATS(D)
+ JUMPE T1,EPBP6
+ SKIPL SLDPC(T1)
+ JRST EPBP6
+ MOVE T2,PIECE(T1)
+ XOR T2,PIECE(B)
+ JUMPL T2,EPBP6
+ MOVEM T1,EPBPC
+ MOVEM T1,EPBPC1
+EPBP6: LDB T1,RDAT(D) ;ALREADY AN ATTACKER FROM THIS DIR?
+ JUMPE T1,EPBP3
+ CAIN T1,(B)
+ JRST EPBP3
+ MOVE T2,PIECE(T1)
+ XOR T2,PIECE(B)
+ JUMPL T2,EPBP3 ;HIS GUY
+ MOVEM T1,EPIPC ;OUR GUY, WILL CAUSE INTERFERENCE
+ CLEARM EPIPF
+ XCT EPIPT(D)
+ SETOM EPIPF
+ JRST EPBP3
+
+EPIPT: CAML C,PIECEL(T1) ;SKIP IF PIECEL(T1) IS CLOSER TO EDGE OF BD THAN SQ IN C (INDEX BY DIRECTION)
+ CAMG C,PIECEL(T1)
+ CAMG C,PIECEL(T1)
+ CAML C,PIECEL(T1)
+ CAMG C,PIECEL(T1)
+ CAMG C,PIECEL(T1)
+ CAML C,PIECEL(T1)
+ CAML C,PIECEL(T1)
+
+
+EPBP4: CAIN A,-BW+1
+ MOVEI D,6
+ CAIN A,-BW-1
+ MOVEI D,7
+ JRST EPBP5
+
+EPC1: LDB T2,[SPINSQ,,(TT)] ;HONOR CONSTRAINT?
+ CAMN T2,A
+ JRST EPC3 ;CONSTRAINT TO THIS SQ
+ MOVE ZR,BOARD(T2)
+ JUMPE ZR,EPC5
+ SUBI ZR,PIECE
+ PUSHJ P,EPDCP
+ JRST EPC3 ;PC CONSTRAINED TO GONE
+EPC5: LDB ZR,[SPINCP,,1(TT)]
+ JUMPE ZR,EPC4
+ CAMN ZR,PCMVNG
+ JRST EPC5A ;PC CAUSING CONSTRAINT MOVING IN MAIN MV (RELEASING CONSTRAINT?)
+ PUSHJ P,EPACP
+ JRST EPC3 ;PC CAUSING CONSTRAINT GONE
+EPC4: LDB ZR,[PTID,,PIECE(T1)]
+ SOJLE ZR,EPPP3 ;P OR N WONT HOLD FLUSH PC
+ MMSAVAC
+ MOVE B,T1
+ LDB S,[SPINSQ,,(TT)]
+ CLEARM CCANF1
+ PUSHJ P,@LGLMPT(B)
+ SETOM CCANF1 ;DIDNT HOLD
+ MMRSAC
+ SKIPGE CCANF1
+ JRST EPPP3
+EPC3: LDB TT,[SPNLK,,1(TT)]
+ JUMPN TT,EPC1
+ JRST EPC2
+
+EPHC1: CAMN T1,CLACLP-1(TT)
+ JRST EPHC3
+ SOJG TT,EPHC1
+ JRST EPHC2
+
+EPHC3: SKIPGE HCL
+ CAME TT,NHC
+ JRST EPPP3 ;ITS FLUSHED
+ LDB ZR,[PTID,,PIECE(T1)] ;IT CAPTED LAST, CAN IT GET BACK?
+ SOJLE ZR,EPPP3 ;P OR N, NO
+ MMSAVAC
+ MOVE B,T1
+ MOVE S,LMAS
+ CLEARM CCANF1
+ PUSHJ P,@LGLMPT(B)
+ SETOM CCANF1
+ MMRSAC
+ SKIPGE CCANF1
+ JRST EPPP3
+ JRST EPHC2
+
+
+EPC5A: MOVE T2,ZR
+ LDB ZR,[PTID,,PIECE(T2)]
+ SOJLE ZR,EPC3
+ MOVEI T2,MVDST ;CONSTRAINT CAUSED BY MOVING PC
+EPC5A1: CAML T2,MVDMF
+ JRST EPC4
+ LDB ZR,[MVDCD,,(T2)]
+ SKIPL (T2)
+ CAIE ZR,MVDRLA
+ JRST EPC5A2
+ LDB ZR,[MVDSQ,,(T2)]
+ MOVEM ZR,EPC5T1
+ LDB ZR,[SPINSQ,,(TT)]
+ CAMN ZR,EPC5T1
+ JRST EPC3 ;RELIEVING CONSTRAINT
+EPC5A2: ADDI T2,NWMVE
+ JRST EPC5A1
+
+EPC5T1: 0
+
+;;CAT
+DEFINE ATA
+ XCT RMINS(I)
+ XCT AT(I)
+ XCT PASI(I)
+ CLEARM BPCHD(A)
+TERMIN
+
+DEFINE ATAS
+ XCT RMINS(I)
+ XCT ATS(I)
+ XCT PASI(I)
+ CLEARM BPCHD(A)
+TERMIN
+
+CAT: ;CALCULATE ATTACKS
+ ;COMPUTE, AS A FUNCTION OF THE CURRENT POSITION, THE DATA BASE
+ ;USED BY THE PLAUSIBLE MOVE GENERATOR AND STATIC BOARD EVALUATOR
+.CAT: SKIPLE B,ICSW
+ POPJ P, ;USE I C CAT
+ JUMPL B,CATC ;CHECK MODE
+.CAT1: AOS NCAT ;ENTRY TO IGNORE INCREMENTAL MODE
+ PUSH P,I
+ PUSH P,R
+ PUSH P,T
+ PUSH P,J
+IFN HSCOD, PUSHJ P,HSKG ;CALCULATE HASH KEY
+ MOVEI ZR,100.
+ MOVEM ZR,CATSCC ;RESET SPOT CHECK COUNT
+ MOVE T,[-LPINTB,,PINTB]
+
+
+IRP X,,[BDBLK,BDA1,BDA2,BDA3,BA,WA,ONEB1,ONEB2,WPAS,BPAS,BPCHD,CNTRL,NWK,NBK] ;CLEAR DATA BASE ARRAYS
+IFSN X,BDBLK, SETZM X+2*BW
+IFSE X,BDBLK, CLEARB I,X+2*BW
+ MOVE A,[X+2*BW,,X+2*BW+1]
+ BLT A,X+2*BW+8*BW-2
+ TERMIN
+IRP X,,[PPASED,PPTP]
+ SETZM X+1
+ MOVE A,[X+1,,X+1+1]
+ BLT A,X+8+1
+ SETZM X+NPCS+1
+ MOVE A,[X+NPCS+1,,X+NPCS+1+1]
+ BLT A,X+NPCS+1+8
+ TERMIN
+ MOVE A,[WPNFLS-1,,WPNFLS]
+ BLT A,PINT+NPC-1+1
+ MOVE A,[WDPRK,,WDPRK+1]
+ BLT A,WDPRK+9
+ MOVE A,[BDPRK,,BDPRK+1]
+ BLT A,BDPRK+9
+ MOVEI A,PINDT-1
+ MOVEM A,PINFS
+ PUSHJ P,ATEV
+
+ MOVE B,[-NPCS,,1]
+MCAT1: MOVE R,PCATV(B)
+ MOVEI W,0
+ MOVE J,PASIN(B)
+ SKIPE A,PIECEL(B)
+ PUSHJ P,@PIECE(B)
+ MOVEM W,PDV(B)
+ AOBJN B,MCAT1 ;LOOP FOR ALL WHITE PCS
+ HRLI B,-NPCS ;RIGHT HALF UNCHANGED
+ MOVEI I,1 ;SET UP FOR BLACK PCS
+MCAT2: MOVE R,PCATV(B)
+ MOVEI W,0
+ MOVE J,PASIN(B)
+ SKIPE A,PIECEL(B)
+ PUSHJ P,@PIECE(B)
+ MOVEM W,PDV(B)
+ AOBJN B,MCAT2
+MCAT3: CAMN T,[-LPINTB,,PINTB]
+ JRST MCAT3A
+ PUSHJ P,MCAT4 ;EXAMINE POSSIBLE PIN
+ JRST MCAT3
+MCAT3A:
+ MOVE B,[-8,,1]
+MCAT8: PUSHJ P,WPBAK ;IDENTIFY ISO + BACK P'S, ETC
+ AOBJN B,MCAT8
+ MOVE B,[-8,,NPCS+1]
+MCAT9: PUSHJ P,BPBAK
+ AOBJN B,MCAT9
+MCATGZ: SKIPE NWPPP
+ PUSHJ P,WPPAC ;COMPUTE BLACK ATTS ON STOPSQS OF W PP AS A FUNCTION OF FILE
+ SKIPE NBPPP
+ PUSHJ P,BPPAC ;COMPUTE W ATTS ON B PP
+ PUSHJ P,PGCMP ;COMPUTE P GROUPS
+ POP P,J
+ POP P,T
+ POP P,R
+ POP P,I
+CPOPJ: POPJ P,
+
+
+WPBAK: SKIPE A,PIECEL(B)
+ SKIPL LMGT(B) ;SKIP ON NOT QUEENED
+ POPJ P,
+ SKIPE PPTP(B)
+ POPJ P, ;ALREADY KNOWN TO BE P DEF BY P
+ LDB T1,[BFILE,,BPREL(A)]
+ SKIPN WPNFLS-1(T1)
+ SKIPE WPNFLS+1(T1)
+ JRST MCAT82
+ MOVEI T2,3 ;ISOLATED PAWN
+MCAT80: MOVEM T2,PPTP(B)
+ POPJ P,
+
+BPBAK: SKIPE A,PIECEL(B)
+ SKIPL LMGT(B)
+ POPJ P,
+ SKIPE PPTP(B)
+ POPJ P,
+ LDB T1,[BFILE,,BPREL(A)]
+ SKIPN BPNFLS-1(T1)
+ SKIPE BPNFLS+1(T1)
+ JRST MCAT92
+ MOVEI T2,3
+MCAT90: MOVEM T2,PPTP(B)
+ POPJ P,
+
+
+MCAT82: SETZB C,D
+ SKIPG T1,BOARD-1(A)
+ JRST .+3
+ SKIPGE LMGSTD-PIECE(T1)
+ JRST MCAT84
+ SKIPG T1,BOARD+1(A)
+ JRST .+3
+ SKIPGE LMGSTD-PIECE(T1)
+MCAT84: TRO D,1 ;WILL BE DEFENDED IF ADVANCED
+ SKIPLE T1,BOARD+BW(A)
+ CAIGE T1,BPIECE
+ XCT WBKPT1(D) ;ADV NOT BLOCKED
+ IOR C,D ;ADV BLOCKED
+ TRNE C,1
+ POPJ P, ;NOT BACK IF BOTH BLOCKED+WOULD BE DEF SINCE HIS PIECE ATTACKED
+ LDB T2,[BRANK,,BPREL(A)]
+ JRST @WPDIS-2(T2) ;C=0 UNLESS P BLOCKED BY OPPOSITION IN WHICH CASE 1.1 MEANS
+ ;WOULD BE DEF IF COULD BE ADV 3.1==0
+ ;IF P BLOCKED, C=D, IF NOT 3.1 OF D SET ALL ELSE CLEAR
+
+
+WPDIS: MCT8.2
+ MCAT8B
+ MCT8.4
+ MCT8.4
+ MCT8.4
+ MCT8.4
+
+MCT8.2: TLZN D,1 ;BLOCKED BY OPPONENT AT RANK 3
+ JRST MCAT8B
+ SKIPG T1,BOARD+BW-1(A) ;WILL BE DEFENDED IF DOUBLE ADVANCED
+ JRST .+3
+ SKIPGE LMGSTD-PIECE(T1)
+ JRST MCAT8A
+ SKIPLE T1,BOARD+BW+1(A)
+ SKIPL LMGSTD-PIECE(T1)
+ JRST MCAT8B
+MCAT8A: SKIPG T1,BOARD+2*BW(A)
+ JRST .+3
+ CAIL T1,BPIECE
+ JRST MCAT8B ;BLOCKED BY OPPONENT AT RANK 4
+ SKIPLE T1,BOARD+2*BW+1(A)
+ SKIPL SNFBP-PIECE(T1)
+ JRST .+2
+ JRST MCAT8B ;BACKWARD DUE TO EP CAPTURE
+ SKIPLE T1,BOARD+2*BW-1(A)
+ SKIPL SNFBP-PIECE(T1)
+ POPJ P,
+ JRST MCAT8B
+
+WBKPT1: TLOA D,1
+ POPJ P,
+
+MCAT8B: MOVEI T2,2 ;BACKWARD
+ JRST MCAT80
+
+MCT8.4: SKIPLE T1,BOARD-2*BW+1(A) ;WILL BE DEFENDED BY ADVANCE OF ADJACENT PAWN
+ SKIPL LMGSTD-PIECE(T1)
+ JRST MCT84.
+ SKIPLE T1,BOARD-BW+1(A) ;THAT PAWNBLOCKED BY OPPONENT
+ CAIGE T1,BPIECE
+ POPJ P,
+MCT84.: SKIPLE T1,BOARD-2*BW-1(A)
+ SKIPL LMGSTD-PIECE(T1)
+ JRST @WPDIS2-4(T2)
+ SKIPLE T1,BOARD-BW-1(A)
+ CAIGE T1,BPIECE
+ POPJ P,
+ JRST @WPDIS2-4(T2) ;AT TIME OF DISP IT IS KNOWN THAT P IS
+ ; NOT PDP, NOT ISO, NOT (WOULD BE DEF
+ ;BY SINGLE PUSH OF ADJ P AND THAT P NOT BLOCKED)
+
+
+WPDIS2: MT8.4A ;FOURTH ROW BACKWARD UNLESS ADJ PAWN BLOCKED
+ MCT8.5
+ MCT8.6
+ MCAT8F
+
+MT8.4A: SKIPG T1,BOARD-2*BW+1(A)
+ JRST MT8.4B
+ SKIPGE LMGSTD-PIECE(T1)
+ JRST MCAT8F ;PAWN MUST BE BLOCKED SO THIS P IS F
+MT8.4B: SKIPLE T1,BOARD-2*BW-1(A)
+ SKIPL LMGSTD-PIECE(T1)
+ JRST MCAT8B
+ JRST MCAT8F
+
+MCT8.5: SKIPLE T1,BOARD-3*BW+1(A) ;WILL BE DEFENDED BY DOUBLE ADVANCE OF ADJACENT PAWN
+ SKIPL LMGSTD-PIECE(T1)
+ JRST MCAT8X
+ SKIPG T1,BOARD-2*BW+1(A) ;BLOCKED BY OPPONENT AT RANK 3
+ JRST .+3
+ CAIL T1,BPIECE
+ JRST MCAT8X
+ SKIPLE T1,BOARD-BW+1(A) ;BLOCKED BY OPPONENT AT RANK 4
+ CAIGE T1,BPIECE
+ POPJ P, ;NOT BLOCKED OR BLOCKED BY OUR PIECE
+MCAT8X: SKIPLE T1,BOARD-3*BW-1(A)
+ SKIPL LMGSTD-PIECE(T1)
+ JRST MCAT8Y
+ SKIPG T1,BOARD-2*BW-1(A)
+ JRST .+3
+ CAIL T1,BPIECE
+ JRST MCAT8Y
+ SKIPLE T1,BOARD-BW-1(A)
+ CAIGE T1,BPIECE
+ POPJ P,
+MCAT8Y: SKIPG T1,BOARD+BW+1(A) ;BACKWARD OR FORWARD
+ JRST .+3
+ SKIPGE LMGSTD-PIECE(T1)
+ JRST MCAT8B
+ SKIPG T1,BOARD+BW-1(A)
+ JRST .+3
+ SKIPGE LMGSTD-PIECE(T1)
+ JRST MCAT8B
+ SKIPG T1,BOARD+2*BW+1(A)
+ JRST .+3
+ SKIPGE LMGSTD-PIECE(T1)
+ JRST MCAT8B
+ SKIPG T1,BOARD+2*BW-1(A)
+ JRST MCAT8F
+ SKIPGE LMGSTD-PIECE(T1)
+ JRST MCAT8B
+MCAT8F: AOS PPTP(B) ;FORWARD
+ POPJ P,
+
+MCT8.6: SKIPG T1,BOARD+BW+1(A) ;BACKWARD OR FORWARD
+ JRST .+3
+ SKIPGE LMGSTD-PIECE(T1)
+ JRST MCAT8B
+ SKIPG T1,BOARD+BW-1(A)
+ JRST MCAT8F
+ SKIPGE LMGSTD-PIECE(T1)
+ JRST MCAT8B
+ JRST MCAT8F
+
+MCAT92: SETZB C,D
+ SKIPG T1,BOARD-1(A) ;WILL BE DEFENDED IF ADVANCED
+ JRST .+3
+ SKIPGE SNFBP-PIECE(T1)
+ JRST MCAT94
+ SKIPG T1,BOARD+1(A)
+ JRST .+3
+ SKIPGE SNFBP-PIECE(T1)
+MCAT94: TRO D,1
+ SKIPLE T1,BOARD-BW(A) ;ADVANCE BLOCKED
+ CAIL T1,BPIECE
+ XCT BBKPT1(D)
+ IOR C,D
+ TRNE C,1
+ POPJ P,
+ LDB T2,[BRANK,,BPREL(A)]
+ JRST @BPDIS-2(T2)
+
+BPDIS: MCT9.4
+ MCT9.4
+ MCT9.4
+ MCT9.4
+ MCAT9B
+ MCT9.2
+
+MCT9.2: TLZN D,1 ;BLOCKED BY OPPONENT AT RANK 3
+ JRST MCAT9B
+ SKIPG T1,BOARD-BW-1(A) ;WILL BE DEFENDED IF DOUBLE ADVANCED
+ JRST .+3
+ SKIPGE SNFBP-PIECE(T1)
+ JRST MCAT9A
+ SKIPLE T1,BOARD-BW+1(A)
+ SKIPL SNFBP-PIECE(T1)
+ JRST MCAT9B
+MCAT9A: SKIPG T1,BOARD-2*BW(A)
+ JRST .+3
+ CAIGE T1,BPIECE
+ JRST MCAT9B ;BLOCKED BY OPPONENT AT RANK 4
+ SKIPLE T1,BOARD-2*BW+1(A) ;BACKWARD DUE TO EP CAPTURE
+ SKIPL LMGSTD-PIECE(T1)
+ JRST .+2
+ JRST MCAT9B
+ SKIPLE T1,BOARD-2*BW-1(A)
+ SKIPL LMGSTD-PIECE(T1)
+ POPJ P,
+ JRST MCAT9B
+
+BBKPT1: TLOA D,1
+ POPJ P,
+
+MCAT9B: MOVEI T2,2
+ JRST MCAT90
+
+MCT9.4: SKIPLE T1,BOARD+2*BW+1(A) ;WILL BE DEFENDED BY ADVANCE OF ADJACENT PAWN
+ SKIPL SNFBP-PIECE(T1)
+ JRST MCT94.
+ SKIPLE T1,BOARD+BW+1(A) ;BLOCKED BY OPPONENT
+ CAIL T1,BPIECE
+ POPJ P,
+MCT94.: SKIPLE T1,BOARD+2*BW-1(A)
+ SKIPL SNFBP-PIECE(T1)
+ JRST BPDIS2-2(T2)
+ SKIPLE T1,BOARD+BW-1(A)
+ CAIL T1,BPIECE
+ POPJ P,
+ JRST BPDIS2-2(T2)
+
+BPDIS2: JRST MCAT9F
+ JRST MCT9.6
+ JRST MCT9.5
+ SKIPG T1,BOARD+2*BW+1(A) ;REACHED BY DISP
+ JRST MT9.4A
+ SKIPGE SNFBP-PIECE(T1)
+ JRST MCAT9F
+MT9.4A: SKIPLE T1,BOARD+2*BW-1(A)
+ SKIPL SNFBP-PIECE(T1)
+ JRST MCAT9B
+ JRST MCAT9F
+
+MCT9.5: SKIPLE T1,BOARD+3*BW+1(A) ;WILL BE DEFENDED BY DOUBLE ADVANCE OF ADJACENT PAWN
+ SKIPL SNFBP-PIECE(T1)
+ JRST MCAT9X
+ SKIPG T1,BOARD+2*BW+1(A) ;BLOCKED BY OPPONENT AT RANK 3
+ JRST .+3
+ CAIGE T1,BPIECE
+ JRST MCAT9X
+ SKIPGE T1,BOARD+BW+1(A) ;BLOCKED BY OPPONENT AT RANK 4
+ CAIL T1,BPIECE
+ POPJ P,
+MCAT9X: SKIPLE T1,BOARD+3*BW-1(A)
+ SKIPL SNFBP-PIECE(T1)
+ JRST MCAT9Y
+ SKIPG T1,BOARD+2*BW-1(A)
+ JRST .+3
+ CAIGE T1,BPIECE
+ JRST MCAT9Y
+ SKIPLE T1,BOARD+BW-1(A)
+ CAIL T1,BPIECE
+ POPJ P,
+MCAT9Y: SKIPG T1,BOARD-BW+1(A) ;BACKWARD OR FORWARD
+ JRST .+3
+ SKIPGE SNFBP-PIECE(T1)
+ JRST MCAT9B
+ SKIPG T1,BOARD-BW-1(A)
+ JRST .+3
+ SKIPGE SNFBP-PIECE(T1)
+ JRST MCAT9B
+ SKIPG T1,BOARD-2*BW+1(A)
+ JRST .+3
+ SKIPGE SNFBP-PIECE(T1)
+ JRST MCAT9B
+ SKIPG T1,BOARD-2*BW-1(A)
+ JRST MCAT9F
+ SKIPGE SNFBP-PIECE(T1)
+ JRST MCAT9B
+MCAT9F: AOS PPTP(B)
+ POPJ P,
+
+MCT9.6: SKIPG T1,BOARD-BW+1(A) ;BACKWARD OR FORWARD
+ JRST .+3
+ SKIPGE SNFBP-PIECE(T1)
+ JRST MCAT9B
+ SKIPG T1,BOARD-BW-1(A)
+ JRST MCAT9F
+ SKIPGE SNFBP-PIECE(T1)
+ JRST MCAT9B
+ JRST MCAT9F
+
+WPPSD: LDB T1,[BFILE,,BPREL(A)] ;CHECK IF WP IN B AT SQ A PASSED ALSO AOS WPNFLS + WNPNFL AS APPROPRIATE
+ AOS WPNFLS(T1)
+ LDB C,[BRANK,,BPREL(A)]
+ CAMGE C,WDPRK(T1)
+ MOVEM C,WDPRK(T1)
+IRP X,,[,+1,-1] ;IS IT PASSED?
+ SKIPE C,@PPT+NPCS!X(B)
+ CAIGE C,BW-1(A)
+ JRST .+5
+ LDB D,[BFILE,,BPREL(C)]
+ SUB D,T1
+ MOVMS D
+ SOJLE D,NOTPPW
+ TERMIN
+ LDB C,[BRANK,,BPREL(A)]
+ MOVEI D,BW(A)
+ SETZM MMPWNF
+MMWPPL: CAIL C,7
+ JRST MMPPW
+ SKIPG T2,BOARD(D)
+ JRST MMWPL2
+ SKIPGE SNFBP-PIECE(T2)
+ JRST NOTPPW
+ SKIPGE LMGSTD-PIECE(T2)
+ SETOM MMPWNF
+MMWPL2: IRP X,,[+1,-1]
+ SKIPLE T2,BOARD!X(D)
+ SKIPL SNFBP-PIECE(T2)
+ JRST .+2
+ JRST NOTPPW
+ TERMIN
+ ADDI D,BW
+ AOJA C,MMWPPL
+
+MMPPW: LDB T2,[BRANK,,BPREL(A)] ;MARK PASSED PAWN
+ CAMLE T2,WPPRK(T1)
+ MOVEM T2,WPPRK(T1)
+ AOS NWPPP
+ SKIPE MMPWNF
+ TLO T2,400000
+ MOVEM T2,PPASED(B)
+ JRST MMPPW1
+NOTPPW: AOS WNPNFL(T1)
+ LDB T2,[BRANK,,BPREL(A)]
+ CAMLE T2,WNPRK(T1)
+ MOVEM T2,WNPRK(T1)
+MMPPW1: SKIPLE T1,BOARD-BW+1(A) ;SEE IF DEFENDED BY PAWN
+ SKIPL LMGSTD-PIECE(T1)
+ JRST .+2
+ JRST MMWPDP
+ SKIPLE T1,BOARD-BW-1(A)
+ SKIPL LMGSTD-PIECE(T1)
+ JRST .+2
+MMWPDP: SETOM PPTP(B)
+ POPJ P,
+
+MMWPWN: PUSHJ P,WPPSD
+PTPWP:
+RMWP: PUSH P,A
+WPAS1: CLEARM BPCHD(A) ;MAY AFFECT CNTRL STATUS
+ ADDM J,WPAS+BW-1(A)
+ ADDM J,WPAS+BW+1(A)
+ ADDI A,BW
+ SKIPL BOARD+BW(A)
+ JRST WPAS1
+ POP P,A
+ ASH J,3
+ ADDM J,WPAS+2*BW-1(A)
+ ADDM J,WPAS+2*BW+1(A)
+ LDB T1,[BRANK,,BPREL(A)]
+ CAIE T1,2
+ JRST WPAS2
+ ADDM J,WPAS+3*BW-1(A)
+ ADDM J,WPAS+3*BW+1(A)
+WPAS2: ASH J,3
+ ADDM J,WPAS+BW+1(A)
+ ADDM J,WPAS+BW-1(A)
+ ADDM R,WA+BW+1(A) ;SET UP ATTACKS
+ ADD W,WAV+BW+1(A)
+ DPB B,[BDALR+BW+1(A)]
+ CLEARM BPCHD+BW+1(A)
+ ADDM R,WA+BW-1(A)
+ ADD W,WAV+BW-1(A)
+ DPB B,[BDALL+BW-1(A)]
+ CLEARM BPCHD+BW-1(A)
+ SKIPE BOARD+BW(A)
+ JRST WPAS3
+ LDB J,[NPAS,,WPAS+BW(A)]
+ JUMPE J,WPAS3
+ CLEARM BPCHD+BW(A)
+WPAS3: SKIPN BOARD+2*BW(A)
+ SKIPG 4RNKP+2*BW(A)
+ JRST WPAS4
+ LDB J,[NPAS,,WPAS+2*BW(A)]
+ JUMPE J,WPAS4
+ CLEARM BPCHD+2*BW(A)
+WPAS4: SKIPL GHSD
+ POPJ P, ;NOT BLACK GHOST
+ MOVEI T1,BW+1(A)
+ CAMN T1,GHLOC
+ JRST RMWP1
+ MOVEI T1,BW-1(A)
+ CAME T1,GHLOC
+ POPJ P,
+ ADDM R,WA-1(A)
+ ADD W,WAV-1(A)
+ DPB B,[BDAEPL-1(A)]
+ CLEARM BPCHD-1(A)
+ POPJ P,
+
+MMWP1: ADDM R,BA+1(A)
+ ADD W,BAV+1(A)
+ DPB B,[BDAEPR+1(A)]
+ CLEARM BPCHD+1(A)
+ POPJ P,
+
+RMWP1: ADDM R,WA+1(A)
+ ADD W,WAV+1(A)
+ DPB B,[BDAEPR+1(A)]
+ CLEARM BPCHD+1(A)
+ POPJ P,
+
+
+BPPSD: LDB T1,[BFILE,,BPREL(A)]
+ AOS BPNFLS(T1)
+ LDB C,[BRANK,,BPREL(A)]
+ CAMLE C,BDPRK(T1)
+ MOVEM C,BDPRK(T1)
+IRP X,,[,+1,-1] ;IS IT PASSED?
+ SKIPE C,@PPT-NPCS!X(B)
+ CAILE C,1-BW(A)
+ JRST .+5
+ LDB D,[BFILE,,BPREL(C)]
+ SUB D,T1
+ MOVMS D
+ SOJLE D,NOTPPB
+ TERMIN
+ LDB C,[BRANK,,BPREL(A)]
+ MOVEI D,-BW(A)
+ SETZM MMPWNF
+MMBPPL: CAIG C,2
+ JRST MMPPB
+ SKIPG T2,BOARD(D)
+ JRST MMBPL2
+ SKIPGE LMGSTD-PIECE(T2)
+ JRST NOTPPB
+ SKIPGE SNFBP-PIECE(T2)
+ SETOM MMPWNF
+MMBPL2: IRP X,,[+1,-1]
+ SKIPLE T2,BOARD!X(D)
+ SKIPL LMGSTD-PIECE(T2)
+ JRST .+2
+ JRST NOTPPB
+ TERMIN
+ SUBI D,BW
+ SOJA C,MMBPPL
+
+MMPPB: LDB T2,[BRANK,,BPREL(A)]
+ MOVE T2,REVERS(T2)
+ CAMLE T2,BPPRK(T1)
+ MOVEM T2,BPPRK(T1)
+ AOS NBPPP
+ SKIPE MMPWNF
+ TLO T2,400000
+ MOVEM T2,PPASED(B)
+ JRST MMPPB1
+NOTPPB: AOS BNPNFL(T1)
+ LDB T2,[BRANK,,BPREL(A)]
+ MOVE T2,REVERS(T2)
+ CAMLE T2,BNPRK(T1)
+ MOVEM T2,BNPRK(T1)
+MMPPB1: SKIPLE T1,BOARD+BW+1(A) ;SEE IF DEFENDED BY PAWN
+ SKIPL SNFBP-PIECE(T1)
+ JRST .+2
+ JRST MMBPDP
+ SKIPLE T1,BOARD+BW-1(A)
+ SKIPL SNFBP-PIECE(T1)
+ JRST .+2
+MMBPDP: SETOM PPTP(B)
+ POPJ P,
+
+MMBPWN: PUSHJ P,BPPSD
+PTPBP:
+RMBP: PUSH P,A
+BPAS1: CLEARM BPCHD(A)
+ ADDM J,BPAS-BW-1(A)
+ ADDM J,BPAS-BW+1(A)
+ SUBI A,BW
+ SKIPL BOARD-BW(A)
+ JRST BPAS1
+ POP P,A
+ ASH J,3
+ ADDM J,BPAS-2*BW-1(A)
+ ADDM J,BPAS-2*BW+1(A)
+ LDB T1,[BRANK,,BPREL(A)]
+ CAIE T1,7
+ JRST BPAS2
+ ADDM J,BPAS-3*BW-1(A)
+ ADDM J,BPAS-3*BW+1(A)
+BPAS2: ASH J,3
+ ADDM J,BPAS-BW-1(A)
+ ADDM J,BPAS-BW+1(A)
+ ADDM R,BA-BW+1(A) ;SET UP ATTACKS
+ ADD W,BAV-BW+1(A)
+ DPB B,[BDAUR-BW+1(A)]
+ CLEARM BPCHD-BW+1(A)
+ ADDM R,BA-BW-1(A)
+ ADD W,BAV-BW-1(A)
+ DPB B,[BDAUL-BW-1(A)]
+ CLEARM BPCHD-BW-1(A)
+ SKIPE BOARD-BW(A)
+ JRST BPAS3
+ LDB J,[NPAS,,BPAS-BW(A)]
+ JUMPE J,BPAS3
+ CLEARM BPCHD-BW(A) ;MIGHT AFFECT DEFENDED STATUS
+BPAS3: SKIPN BOARD-2*BW(A)
+ SKIPL 4RNKP-2*BW(A)
+ JRST BPAS4
+ LDB J,[NPAS,,BPAS-2*BW(A)]
+ JUMPE J,BPAS4
+ CLEARM BPCHD-2*BW(A)
+BPAS4: SKIPG GHSD
+ POPJ P, ;NOT WHITE GHOST
+ MOVEI T1,-BW+1(A)
+ CAMN T1,GHLOC
+ JRST MMWP1
+ MOVEI T1,-BW-1(A)
+ CAME T1,GHLOC
+ POPJ P,
+ ADDM R,BA-1(A)
+ ADD W,BAV-1(A)
+ DPB B,[BDAEPL-1(A)]
+ CLEARM BPCHD-1(A)
+ POPJ P,
+
+MMRK: MOVSI C,-4
+MMRK1: LDB T2,[PTIDS,,PIECE(B)]
+ MOVE A,PIECEL(B)
+MMRK3: ADD A,RDT(C)
+ SKIPGE D,BOARD(A)
+ JRST MMRK2
+ ATA
+ DPB B,RDAT(C)
+ JUMPE D,MMRK3
+ MOVE T1,A
+ DPB T2,BDBSQ(C)
+ XCT OURGY(I)
+ JRST MMRK7
+ SKIPGE RFPCS-PIECE(D)
+ JRST MMRK6 ;RUNNING INTO OUR OWN ROOK OR QUEEN
+MMRK4: ADD A,RDT(C)
+ SKIPGE D,BOARD(A)
+ JRST MMRK2
+ DPB T1,ONEBSQ(C)
+ JUMPE D,MMRK4
+MMRK2: AOBJN C,MMRK1
+ POPJ P,
+
+MMRK6: ADD A,RDT(C)
+ SKIPGE D,BOARD(A)
+ JRST MMRK2
+ ATA
+ DPB T1,ONEBSQ(C)
+ JUMPE D,MMRK6
+ XCT OURGY(I)
+ JRST MMRK2
+ SKIPL RFPCS-PIECE(D)
+ JRST MMRK2
+MMRK6B: ADD A,RDT(C)
+ SKIPGE D,BOARD(A)
+ JRST MMRK2
+ ATA
+ JUMPE D,MMRK6B
+ XCT OURGY(I)
+ JRST MMRK2
+ SKIPL RFPCS-PIECE(D)
+ JRST MMRK2
+ JRST MMRK6B
+
+MMRK7: ADD A,RDT(C) ;CHECK FOR POSSIBLE PINS
+ SKIPGE D,BOARD(A)
+ JRST MMRK2
+ DPB T1,ONEBSQ(C)
+ JUMPE D,MMRK7
+ XCT OURGY+1(I)
+ JRST MMRK2
+ PUSH T,A ;RECORD POSSIBLE PIN
+ HRLM C,(T)
+ DPB B,[PINATP,,(T)]
+ DPB T1,[PINOPS,,(T)]
+ JRST MMRK2
+
+
+RMWR:
+RMBR: MOVSI C,-4 ;Q=0 REMOVE PIECE 1 REINSERT PIECE
+RMBR1: LDB T2,[PTIDS,,PIECE(B)]
+ MOVE A,PIECEL(S)
+RMBR3: ADD A,RDT(C)
+ SKIPGE D,BOARD(A)
+ JRST RMBR2
+ ATA
+ DPB B,RDAT(C)
+ JUMPE D,RMBR3
+RMRE2: MOVE T1,A
+ XCT RMBRT2(Q) ;HACK BDBLK
+ XCT OURGY(I)
+ JRST RMBR7
+ SKIPGE RFPCS-PIECE(D)
+ JRST RMBR6
+RMBR4: ADD A,RDT(C)
+ SKIPGE D,BOARD(A)
+ JRST RMBR2
+ XCT RMBRT3(Q)
+ JUMPE D,RMBR4
+RMBR2: AOBJN C,RMBR1
+ POPJ P,
+
+
+RMRE: MOVEI T2,0 ;EXTEND ON RANK OR FILE
+RMRE1: ADD A,RDT(C)
+ SKIPGE D,BOARD(A)
+ POPJ P, ;C KNOWN TO BE -1,,N
+ ATA
+ DPB B,RDAT(C)
+ DPB T2,ONEBSQ(C)
+ JUMPE D,RMRE1
+ LDB T2,[PTIDS,,PIECE(B)]
+ JRST RMRE2
+
+RMBR6: ADD A,RDT(C)
+ SKIPGE D,BOARD(A)
+ JRST RMBR2
+ ATA
+ XCT RMBRT3(Q)
+ JUMPE D,RMBR6
+ XCT OURGY(I)
+ JRST RMBR2
+ SKIPL RFPCS-PIECE(D)
+ JRST RMBR2
+RMBR6B: ADD A,RDT(C)
+ SKIPGE D,BOARD(A)
+ JRST RMBR2
+ ATA
+ JUMPE D,RMBR6B
+ XCT OURGY(I)
+ JRST RMBR2
+ SKIPL RFPCS-PIECE(D)
+ JRST RMBR2
+ JRST RMBR6B
+
+RMBRT3: DPB B,ONEBSQ(C)
+ DPB T1,ONEBSQ(C)
+
+RMBRT2: DPB B,BDBSQ(C)
+ DPB T2,BDBSQ(C)
+
+RMBR7: ADD A,RDT(C)
+ SKIPGE D,BOARD(A)
+ JRST RMBR2
+ XCT RMBRT3(Q)
+ JUMPE D,RMBR7
+ JRST RMBR2
+
+
+MMQN: PUSHJ P,MMRK
+MMBS: MOVSI C,-4
+MMBS1: LDB T2,[PTIDS,,PIECE(B)]
+ MOVE A,PIECEL(B)
+MMBS3: ADD A,BDT(C)
+ SKIPGE D,BOARD(A)
+ JRST MMBS2
+ ATA
+ DPB B,BDAT(C)
+ JUMPE D,MMBS3
+ MOVE T1,A
+ DPB T2,BDBD(C)
+ XCT OURGY(I)
+ JRST MMBS7
+ SKIPGE LMGT-PIECE(D) ;OUR GUY
+ JRST MMBS5
+ SKIPGE DDPCS-PIECE(D)
+ JRST MMBS6
+MMBS4A: ADD A,BDT(C)
+MMBS4B: SKIPGE D,BOARD(A)
+ JRST MMBS2
+ DPB T1,ONEBBD(C)
+ JUMPE D,MMBS4A
+MMBS2: AOBJN C,MMBS1
+ POPJ P,
+
+MMBS6: ADD A,BDT(C)
+ SKIPGE D,BOARD(A)
+ JRST MMBS2
+ ATA
+ DPB T1,ONEBBD(C)
+ JUMPE D,MMBS6
+ XCT OURGY(I)
+ JRST MMBS2
+ SKIPGE LMGT-PIECE(D)
+ JRST MMBS5A
+ SKIPL DDPCS-PIECE(D)
+ JRST MMBS2
+MMBS6A: ADD A,BDT(C)
+ SKIPGE D,BOARD(A)
+ JRST MMBS2
+ ATA
+ JUMPE D,MMBS6A
+ XCT OURGY(I)
+ JRST MMBS2
+ SKIPGE LMGT-PIECE(D)
+ JRST MMBS5A
+ SKIPL DDPCS-PIECE(D)
+ JRST MMBS2
+ JRST MMBS6A
+
+MMBS5A: HRRZ ZR,C
+ XCT MMBST1(I)
+ JRST MMBS2
+ ADD A,BDT(C)
+ ATA
+ JRST MMBS2
+
+
+MMBS5: HRRZ ZR,C
+ XCT MMBST1(I)
+ JRST MMBS4A
+ ADD A,BDT(C)
+ ATA
+ JRST MMBS4B
+
+MMBST1: CAIL ZR,2
+ CAIGE ZR,2
+
+MMBST: CAIL T2,2
+ CAIGE T2,2
+
+MMBS7:
+MMBS7A: ADD A,BDT(C)
+ SKIPGE D,BOARD(A)
+ JRST MMBS2
+ DPB T1,ONEBBD(C)
+ JUMPE D,MMBS7A
+ XCT OURGY+1(I)
+ JRST MMBS2
+ PUSH T,A ;PIN BASE SQUARE TO RH
+ MOVEI ZR,4(C)
+ HRLM ZR,(T) ;PIN DIRECTION TO LH
+ DPB B,[PINATP,,(T)]
+ DPB T1,[PINOPS,,(T)]
+ JRST MMBS2
+
+
+RMWQ:
+RMBQ: PUSHJ P,RMWR
+RMWB:
+RMBB: MOVSI C,-4
+ LDB T2,[PTIDS,,PIECE(B)]
+RMBB1: MOVE A,PIECEL(S)
+RMBB3: ADD A,BDT(C)
+ SKIPGE D,BOARD(A)
+ JRST RMBB2
+ ATA
+ DPB B,BDAT(C)
+ JUMPE D,RMBB3
+RMDE2: MOVE T1,A
+ XCT RMDT2(Q)
+ XCT OURGY(I)
+ JRST RMBB7 ;HIS GUY
+ SKIPGE LMGT-PIECE(D)
+ JRST RMBB5
+ SKIPGE DDPCS-PIECE(D)
+ JRST RMBB6
+RMBB4A: ADD A,BDT(C)
+RMBB4B: SKIPGE D,BOARD(A)
+ JRST RMBB2
+ XCT RMDT3(Q)
+ JUMPE D,RMBB4A
+RMBB2: AOBJN C,RMBB1
+ POPJ P,
+
+
+RMDE: MOVEI T2,0
+RMDE1: ADD A,BDT(C)
+ SKIPGE D,BOARD(A)
+ POPJ P,
+ ATA
+ DPB B,BDAT(C)
+ DPB T2,ONEBBD(C)
+ JUMPE D,RMDE1
+ LDB T2,[PTIDS,,PIECE(B)]
+ JRST RMDE2
+
+RMBB6: ADD A,BDT(C)
+ SKIPGE D,BOARD(A)
+ JRST RMBB2
+ ATA
+ XCT RMDT3(Q)
+ JUMPE D,RMBB6
+ XCT OURGY(I)
+ JRST RMBB2
+ SKIPGE LMGT-PIECE(D)
+ JRST RMBB5A
+ SKIPL DDPCS-PIECE(D)
+ JRST RMBB2
+RMBB6A: ADD A,BDT(C)
+ SKIPGE D,BOARD(A)
+ JRST RMBB2
+ ATA
+ JUMPE D,RMBB6A
+ XCT OURGY(I)
+ JRST RMBB2
+ SKIPGE LMGT-PIECE(D)
+ JRST RMBB5A
+ SKIPL DDPCS-PIECE(D)
+ JRST RMBB2
+ JRST RMBB6A
+
+
+RMBB5A: HRRZ ZR,C
+ XCT MMBST1(I)
+ JRST RMBB2
+ ADD A,BDT(C)
+ ATA
+ JRST RMBB2
+
+RMBB5: HRRZ ZR,C
+ XCT MMBST1(I)
+ JRST RMBB4A
+ ADD A,BDT(C)
+ ATA
+ JRST RMBB4B
+
+RMDT3: DPB B,ONEBBD(C)
+ DPB T1,ONEBBD(C)
+
+RMDT2: DPB B,BDBD(C)
+ DPB T2,BDBD(C)
+
+
+RMBB7: ADD A,BDT(C) ;REMOVE ONEB
+ SKIPGE D,BOARD(A)
+ JRST RMBB2
+ XCT RMDT3(Q)
+ JUMPE D,RMBB7
+ JRST RMBB2
+
+
+IRPS BA,,BA WA,TAG,,RMBN RMWN,BAV,,BAV WAV,BPAS,,BPAS WPAS
+TAG: ADDM R,BA+2*BW+1(A)
+ ADD W,BAV+2*BW+1(A)
+ CLEARM BPCHD+2*BW+1(A)
+ DPB B,[BDALR2+2*BW+1(A)]
+ ADDM J,BPAS+2*BW+1(A)
+ ADDM R,BA+2*BW-1(A)
+ ADD W,BAV+2*BW-1(A)
+ CLEARM BPCHD+2*BW-1(A)
+ DPB B,[BDALL2+2*BW-1(A)]
+ ADDM J,BPAS+2*BW-1(A)
+ ADDM R,BA+-2*BW+1(A)
+ ADD W,BAV+-2*BW+1(A)
+ CLEARM BPCHD+-2*BW+1(A)
+ DPB B,[BDAUR2-2*BW+1(A)]
+ ADDM J,BPAS-2*BW+1(A)
+ ADDM R,BA-2*BW-1(A)
+ ADD W,BAV-2*BW-1(A)
+ CLEARM BPCHD-2*BW-1(A)
+ DPB B,[BDAUL2-2*BW-1(A)]
+ ADDM J,BPAS-2*BW-1(A)
+ ADDM R,BA+BW+2(A)
+ ADD W,BAV+BW+2(A)
+ CLEARM BPCHD+BW+2(A)
+ DPB B,[BDALR1+BW+2(A)]
+ ADDM J,BPAS+BW+2(A)
+ ADDM R,BA+BW-2(A)
+ ADD W,BAV+BW-2(A)
+ CLEARM BPCHD+BW-2(A)
+ DPB B,[BDALL1+BW-2(A)]
+ ADDM J,BPAS+BW-2(A)
+ ADDM R,BA-BW+2(A)
+ ADD W,BAV-BW+2(A)
+ CLEARM BPCHD-BW+2(A)
+ DPB B,[BDAUR1-BW+2(A)]
+ ADDM J,BPAS-BW+2(A)
+ ADDM R,BA-BW-2(A)
+ ADD W,BAV-BW-2(A)
+ CLEARM BPCHD-BW-2(A)
+ DPB B,[BDAUL1-BW-2(A)]
+ ADDM J,BPAS-BW-2(A)
+ POPJ P,
+
+TERMIN
+IRPS BA,,BA WA,TAG,,RMBK RMWK,BAV,,BAV WAV,BPAS,,BPAS WPAS
+TAG: ADDM R,BA+BW(A)
+ ADD W,BAV+BW(A)
+ CLEARM BPCHD+BW(A)
+ DPB B,[BDAFB+BW(A)]
+ ADDM J,BPAS+BW(A)
+ ADDM R,BA-BW(A)
+ ADD W,BAV-BW(A)
+ CLEARM BPCHD-BW(A)
+ DPB B,[BDAFT-BW(A)]
+ ADDM J,BPAS-BW(A)
+ ADDM R,BA+1(A)
+ ADD W,BAV+1(A)
+ CLEARM BPCHD+1(A)
+ DPB B,[BDARR+1(A)]
+ ADDM J,BPAS+1(A)
+ ADDM R,BA-1(A)
+ ADD W,BAV-1(A)
+ CLEARM BPCHD-1(A)
+ DPB B,[BDARL-1(A)]
+ ADDM J,BPAS-1(A)
+ ADDM R,BA+BW+1(A)
+ ADD W,BAV+BW+1(A)
+ CLEARM BPCHD+BW+1(A)
+ DPB B,[BDALR+BW+1(A)]
+ ADDM J,BPAS+BW+1(A)
+ ADDM R,BA+BW-1(A)
+ ADD W,BAV+BW-1(A)
+ CLEARM BPCHD+BW-1(A)
+ DPB B,[BDALL+BW-1(A)]
+ ADDM J,BPAS+BW-1(A)
+ ADDM R,BA-BW+1(A)
+ ADD W,BAV-BW+1(A)
+ CLEARM BPCHD-BW+1(A)
+ DPB B,[BDAUR-BW+1(A)]
+ ADDM J,BPAS-BW+1(A)
+ ADDM R,BA-BW-1(A)
+ ADD W,BAV-BW-1(A)
+ CLEARM BPCHD-BW-1(A)
+ DPB B,[BDAUL-BW-1(A)]
+ ADDM J,BPAS-BW-1(A)
+ POPJ P,
+
+TERMIN
+
+
+
+RMPC: LDB I,[430100,,PIECE(S)] ;T SET UP TO RECORD POSSIBLE NEW PINS
+ MOVE A,PIECEL(S) ;REMOVE PIECE IN S
+IFN HSCOD,[ ;UPDATE HSKEY
+ LDB Q,[PTID,,PIECE(S)]
+ SKIPE I
+ ADDI Q,10
+ MOVE B,RANDN(A)
+ ROT B,1(Q)
+ XORM B,HSKEY
+] LDB Q,[BFILE,,BPREL(A)]
+ SKIPL LMGT(S)
+ JRST RMPCD
+ SKIPE PPASED(S)
+ SOS NWPPP(I)
+ CLEARM PPASED(S)
+ SETOM MMPIVF ;PAWNS INVOLVED
+ SETOM MMFL-1(Q)
+ SETOM MMFL(Q)
+ SETOM MMFL+1(Q)
+RMPCD: LDB B,[BRANK,,BPREL(A)]
+ XCT RMPPT4(I)
+ PUSHJ P,PTPCD ;POSSIBLY ALTERING PAWN STRUCTURE BY STOPPING DOUBLE ADV
+ XCT RMPPT1(I)
+ JRST RMPCB
+ XCT RMPPT2(I) ;PICK UP CONTENTS OF RANK 2 SQUARE
+ XCT RMPPT3(I) ;SKIP ON HIS PAWN
+ JRST RMPCB
+ MOVE D,PPTP-PIECE(T1)
+ CAIN T1,2
+ JRST RMPCB
+ SETOM MMPIVF
+ SETOM MMFL(Q) ;MAYBE THIS P ISNT BACKWARD ANY MORE
+ SETOM MMFL+1(Q)
+ SETOM MMFL-1(Q) ;PAWNS MAY BE MADE FORWARD
+RMPCB: XCT RMPPT2(I)
+ XCT RMPPT3(I) ;CHECK IF UNBLOCKING P WHICH CAN DEFEND FORWARD P
+ JRST RMPCE
+ SKIPLE T1,@RMPTA(I)
+ XCT RMPPT3(I)
+ JRST RMPCE1
+ SKIPN PPTP-PIECE(T1)
+ JRST RMPCE1
+ SETOM MMPIVF
+ SETOM MMFL+1(Q)
+RMPCE1: SKIPLE T1,@RMPTB(I)
+ XCT RMPPT3(I)
+ JRST RMPCE
+ SKIPN PPTP-PIECE(T1)
+ JRST RMPCE
+ SETOM MMPIVF
+ SETOM MMFL-1(Q)
+RMPCE: MOVN R,PCATV(S)
+ MOVN J,PASIN(S)
+ CLEARB B,Q
+ PUSHJ P,@RMDTB(S) ;REMOVE BDA WA BA ONEB DUE TO THIS PIECE
+ MOVE A,PIECEL(S)
+ SKIPN T2,BDBLK(A)
+ JRST RMPC1 ;NO COMPLICATION DUE TO UNBLOCKING SOMETHING
+ MOVEI C,0
+RMPC3: MOVEI T1,0
+ LSHC T1,4
+ JUMPE T1,RMPC4
+ MOVE B,BDAST(T1)
+ PUSH P,S
+ PUSH P,T2
+ PUSH P,C
+ LDB I,[430100,,PIECE(B)]
+ MOVN R,PCATV(B)
+ MOVN J,PASIN(B)
+ MOVE A,PIECEL(B) ;COMPUTE TOTAL PCATV OF WHATS BEING UNBLOCKED
+
+RMPC3B: LDB Q,RDAT(C)
+ JUMPE Q,RMPC3A
+ SKIPGE SLDPC(Q)
+ XCT RMOY2(I)
+ JRST RMPC3A
+ SUB R,PCATV(Q)
+ SUB J,PASIN(Q)
+ MOVE A,PIECEL(Q)
+ JRST RMPC3B
+RMPC3A: MOVEI W,0
+ SKIPGE SLDPC(S)
+ JRST RMPC5 ;WA BA ENTRIES POSSIBLY ALREADY MADE
+ SKIPGE LMGT(S)
+ JRST RMPC6 ;WA BA ENTRY POSSIBLY MADE FOR SQUARE IMMEDIATELY BEYOND PAWN
+RMPC6R: MOVE A,PIECEL(S)
+ MOVE T1,C
+ HRROS C
+ TRZ C,4 ;COMPENSATE IF DIAG
+ LSH T1,-2
+ MOVNS R
+ MOVNS J
+ MOVEI Q,1
+ PUSHJ P,@RMLCT(T1) ;EXTEND PIECE IN B ALONG LINE IN C STARTING FROM SQ IN A
+ ADDM W,PDV(B)
+ MOVE A,PIECEL(B)
+ POP P,C
+RMPC4A: LDB Q,RDAT(C)
+ JUMPE Q,RMPC4B
+ SKIPGE SLDPC(Q)
+ XCT RMOY2(I)
+ JRST RMPC4B
+ ADDM W,PDV(Q)
+ MOVE A,PIECEL(Q)
+ JRST RMPC4A
+RMPC4B: POP P,T2
+ POP P,S
+RMPC4: JUMPE T2,RMPC1A
+RMPC2: AOJA C,RMPC3
+
+
+RMPO2: TDZA C,C
+RMPO2A: MOVEI C,4
+ HRLI C,-4
+RMPO2C: LDB T1,ONEBSQ(C)
+ JUMPN T1,RMPO3
+RMPO2B: AOBJN C,RMPO2C
+ POPJ P,
+
+
+RMPO3:
+RMPO3A: ADD A,RDT(C)
+ SKIPGE D,BOARD(A)
+ JRST RMPO3R
+ DPB T1,ONEBSQ(C)
+ JUMPE D,RMPO3A
+RMPO3R: MOVE A,PIECEL(S)
+ JRST RMPO2B
+
+RMLCT: RMRE ;EXTEND ON RANK OR FILE
+ RMDE ;EXTEND ON DIAG
+
+RMPC1A: MOVE A,PIECEL(S)
+ CLEARM BDBLK(A)
+RMPC1: SKIPE ONEB1(A)
+ PUSHJ P,RMPO2
+ SKIPE ONEB2(A)
+ PUSHJ P,RMPO2A
+ POPJ P,
+
+RMPC6: CAIL C,4 ;NOT DIA
+ XCT RMDTT(I) ;SKIP ON DIAG TOWARD OPPOSITION
+ JRST RMPC6R
+ XCT RMOY3(I)
+ JRST RMPC6R ;NOT OUR SIDE
+ MOVE A,PIECEL(S)
+ ADD A,RDT(C)
+ ATAS
+ JRST RMPC6R
+
+
+RMPC5: SKIPGE @RMP5T(C)
+ XCT RMOY3(I)
+ JRST RMPC6R ;NOT SLIDING ALONG THIS LINE
+ MOVE A,PIECEL(S)
+RMPC5A: ADD A,RDT(C)
+ SKIPGE D,BOARD(A)
+ JRST RMPC6R
+ ATAS
+ JUMPE D,RMPC5A
+ XCT OURGY(I)
+ JRST RMPC6R
+ SKIPGE @RMP5T1(C)
+ JRST RMPC5A ;OUR PIECE ALSO SLIDING ALONG THIS LINE
+ CAIGE C,4
+ JRST RMPC6R
+ SKIPGE LMGT-PIECE(D)
+ XCT RMDTT(I)
+ JRST RMPC6R
+ ADD A,RDT(C)
+ ATAS
+ JRST RMPC6R
+
+
+PTPC: MOVE A,PIECEL(S) ;PUT ON PIECE IN S
+ LDB I,[430100,,PIECE(S)]
+IFN HSCOD,[ ;UPDATE HSKEY
+ LDB Q,[PTID,,PIECE(S)]
+ SKIPE I
+ ADDI Q,10
+ MOVE B,RANDN(A)
+ ROT B,1(Q)
+ XORM B,HSKEY
+] LDB Q,[BFILE,,BPREL(A)]
+ SKIPL LMGT(S)
+ JRST PTPCB
+ SETOM MMFL-1(Q)
+ SETOM MMFL(Q)
+ SETOM MMFL+1(Q)
+ SETOM MMPIVF
+PTPCB: LDB B,[BRANK,,BPREL(A)]
+ XCT RMPPT4(I)
+ PUSHJ P,PTPCD
+; XCT RMPPT1(I)
+; JRST PTPCA
+ XCT RMPPT2(I)
+ XCT RMPPT3(I)
+ JRST PTPCA
+ SETOM MMPIVF
+ SETOM MMFL(Q) ;MAYBE P IS BACKWARD NOW
+ SETOM MMFL+1(Q) ;OTHER PAWNS MAY BECOME FORWARD
+ SETOM MMFL-1(Q)
+PTPCA: SKIPE T1,ONEB1(A)
+ PUSHJ P,PTPO2
+ SKIPE T2,ONEB2(A)
+ PUSHJ P,PTPO2A
+ SKIPE T1,BDA1(A)
+ PUSHJ P,PTPC1
+ MOVE A,PIECEL(S)
+ SKIPE T1,BDA2(A)
+ PUSHJ P,PTPC1A
+ MOVE R,PCATV(S)
+ MOVE J,PASIN(S)
+ MOVEI Q,1
+ MOVE B,S
+ LDB I,[430100,,PIECE(S)]
+ MOVE A,PIECEL(S)
+ MOVEI W,0
+ PUSHJ P,@PTPTB(S)
+ MOVEM W,PDV(B)
+ POPJ P,
+
+PTPC1A: SKIPA T2,[-2,,6] ;COUNT AND INITIAL DIRECTION
+PTPC1: MOVSI T2,-6
+ MOVE C,[440600,,T1]
+PTPC1C: ILDB Q,C
+ JUMPN Q,PTPC1B
+PTPC1D: AOBJN T2,PTPC1C
+ POPJ P,
+
+
+PTPC1B: SKIPL SLDPC(Q)
+ JRST PTPC1D
+ LDB I,[430100,,PIECE(Q)]
+
+PTP2: MOVN R,PCATV(Q)
+ MOVN J,PASIN(Q)
+ MOVE A,PIECEL(Q) ;COMPUTE TOTAL PCATV OF WHATS BEING CUT OFF
+ MOVEM Q,PTP2T1
+PTP2E: LDB Q,RDAT(T2)
+ JUMPE Q,PTP2D
+ SKIPGE SLDPC(Q)
+ XCT RMOY2(I)
+ JRST PTP2D
+ SUB R,PCATV(Q)
+ SUB J,PASIN(Q)
+ MOVE A,PIECEL(Q)
+ JRST PTP2E
+PTP2D: CLEARB Q,TT ;DECIDE WHETHER TO LEAVE WA-BA ALONE Q=0
+ SKIPGE @RMP5T(T2) ;OR SUB OUT Q=1 SKIP ON PIECE NOT SLIDING IN THAT DIRECTION
+ XCT RMOY1(I)
+ MOVEI Q,1
+ MOVE A,PIECEL(S)
+ MOVE B,PTP2T1
+ LDB D,[PTIDS,,PIECE(B)]
+ MOVE B,A ;SAVE SQUARE BLOCKED AT
+ DPB D,BDBSQ(T2) ;NOW BLOCKED HERE
+ MOVEI W,0
+PTP2A: ADD A,RDT(T2)
+ SKIPGE D,BOARD(A)
+ JRST PTP3
+ XCT PTP2T(Q)
+ XCT ATS(I)
+ XCT PASI(I)
+PTP2A1: CLEARM BPCHD(A)
+ DPB TT,RDAT(T2)
+ DPB B,ONEBSQ(T2) ;NOW THRU ONE BLOCKER
+ JUMPE D,PTP2A
+ DPB TT,BDBSQ(T2) ;NO LONGER BLOCKED HERE
+ JUMPE Q,PTPO1
+PTP2C: XCT OURGY(I)
+ JRST PTPO1 ;WA BA OK BUT REMOVE OLD ONEB
+ SKIPGE LMGT-PIECE(D)
+ JRST PTP2C1
+ SKIPL @RMP5T1(T2) ;SLIDING PIECE IN RIGHT DIRECTION?
+ JRST PTPO1
+PTP3B: ADD A,RDT(T2) ;REMOVE OLD ONEB + ALSO SUB OUT
+ SKIPGE D,BOARD(A)
+ JRST PTP3
+ ATAS
+ DPB TT,ONEBSQ(T2) ;NOW 2 AWAY SO CLEAR OUT
+ JUMPE D,PTP3B
+PTPC3D: XCT OURGY(I) ;JUST SUB OUT
+ JRST PTP3
+ SKIPGE LMGT-PIECE(D)
+ JRST PTP2C2
+ SKIPL @RMP5T1(T2)
+ JRST PTP3
+PTPC3C: ADD A,RDT(T2)
+ SKIPGE D,BOARD(A)
+ JRST PTP3
+ ATAS
+ JUMPE D,PTPC3C
+ JRST PTPC3D
+
+PTP2C2: HRRZ D,T2
+ TRNE T2,4
+ XCT RMDTT1(I)
+ JRST PTP3
+ ADD A,RDT(T2)
+ ATAS
+ SUB A,RDT(T2)
+PTP3: SKIPGE LMGT(S)
+ TRNN T2,4 ;SKIP ON DIAGS
+ JRST PTPVL
+ HRRZ D,T2 ;PIECE MUST BE DDPCS BECAUSE OF DIRECTION
+ XCT RMOY3+1(I)
+ XCT RMDTT1(I)
+ JRST PTPVL
+ MOVE A,PIECEL(S)
+ ADD A,RDT(T2)
+ MOVNS R
+ MOVNS J
+ ATA ;STILL ATTACKING HERE THRU PAWN
+ MOVNS J
+ MOVNS R
+PTPVL: MOVE Q,PTP2T1
+ ADDM W,PDV(Q)
+ MOVE A,PIECEL(Q)
+PTPVL1: LDB Q,RDAT(T2)
+ JUMPE Q,PTPC1D
+ SKIPGE SLDPC(Q)
+ XCT RMOY2(I)
+ JRST PTPC1D
+ ADDM W,PDV(Q)
+ MOVE A,PIECEL(Q)
+ JRST PTPVL1
+
+
+PTP2T: JRST PTP2A1
+ XCT RMINS(I)
+
+
+PTP2C1: HRRZ D,T2
+ TRNE T2,4
+ XCT RMDTT1(I)
+ JRST PTPO1
+ ADD A,RDT(T2)
+ ATAS
+ JRST PTPO1A
+
+PTP2T1: 0 ;TEMP
+
+PTPO1: ADD A,RDT(T2) ;JUST CLEAR ONEB
+PTPO1A: SKIPGE D,BOARD(A)
+ JRST PTP3
+ DPB TT,ONEBSQ(T2)
+ JUMPE D,PTPO1
+ JRST PTP3
+
+PTPO2: TDZA T2,T2
+PTPO2A: MOVEI T2,4
+ HRLI T2,-4
+ MOVEI B,0
+PTPO2B: LDB C,ONEBSQ(T2)
+ JUMPN C,PTPO2C
+PTPO2D: AOBJN T2,PTPO2B
+ POPJ P,
+
+PTPO2C: ADD A,RDT(T2)
+ SKIPGE D,BOARD(A)
+ JRST PTPO2R
+ DPB B,ONEBSQ(T2)
+ JUMPE D,PTPO2C
+PTPO2R: MOVE A,PIECEL(S)
+ JRST PTPO2D
+
+
+PTPCD: XCT RMPPT5(I)
+ XCT RMPPT3(I)
+ POPJ P, ;RANK 2 NOT OCC OR NOT HIS P
+ LDB T2,[BFILE,,BPREL(A)]
+ SKIPE T1,@RMPPT7(I)
+ XCT RMPPT3(I)
+ JRST PTPCD1
+PTPCD2: SETOM MMFL(T2)
+ SETOM MMPIVF
+PTPCD3: SKIPE T1,@RMPTA(I)
+ XCT RMPPT3(I)
+ JRST PTPCD4
+ SETOM MMPIVF
+ SETOM MMFL+1(T2)
+PTPCD4: SKIPE T1,@RMPTB(I)
+ XCT RMPPT3(I)
+ POPJ P,
+ SETOM MMPIVF
+ SETOM MMFL-1(T2)
+ POPJ P,
+
+PTPCD1: SKIPE T1,@RMPPT8(I)
+ XCT RMPPT3(I)
+ JRST PTPCD3
+ JRST PTPCD2
+CATC: AOJE B,CATSC1
+ SOSL CATSCC
+ POPJ P,
+CATSC1: MMSAVAC
+ CLEARM ICERRF
+ PUSHJ P,CORCMP
+ PUSHJ P,ICSTO
+ PUSHJ P,ATEV
+ PUSHJ P,.CAT1
+ PUSHJ P,CORCMP
+ MOVEI B,TYO
+ PUSHJ P,ICCMP
+ SKIPGE ICERRF
+ JRST CATC1
+CATC2: MMRSAC
+ POPJ P,
+
+CATC1: PUSHJ P,DISUP
+ PUSHJ P,TYI
+ JRST CATC2
+
+CATCSA: BLOCK 17
+
+CORCMP: MOVSI W,-8 ;COMPUTE WPAS, BPAS FOR ALL SQS
+ MOVE A,[-8,,2*BW+1]
+ MOVEI I,0
+CORC1: SKIPL BPCHD(A)
+ PUSHJ P,MCAF
+ AOBJN A,CORC1
+ ADD A,[-8,,2]
+ AOBJN W,CORC1
+ POPJ P,
+
+MMIC1: MMSAVAC
+ LDB S,[MPC,,LMV]
+ PUSHJ P,RMPC ;REMOVE PIECE MOVING
+MMICR: MMRSAC
+ POPJ P,
+
+
+MMIC3: MMSAVAC
+ MOVE A,PIECEL(B)
+ PUSH P,BOARD(A)
+ CLEARM BOARD(A)
+ PUSH P,A ;AVOID POSSIBLE INTERFERENCE FROM PIECE MAKING CAPTURE
+ LDB S,[MPTK,,LMV]
+ PUSHJ P,RMPC
+MMICR1: POP P,A
+ POP P,BOARD(A)
+ JRST MMICR
+
+MMIC7: MMSAVAC
+ LDB S,[MPC,,LMV]
+ PUSHJ P,PTPC
+ JRST MMICR
+
+MMIC2: MMSAVAC
+ CLEARM BPINT+1 ;RECALCULATE PINS
+ MOVE A,[BPINT+1,,BPINT+1+1]
+ BLT A,PINT+NPC+1-1
+ MOVEI A,PINDT-1
+ MOVEM A,PINFS
+
+ MOVE T,[-LPINTB,,PINTB]
+ MOVE B,[-NPC,,1]
+MMP1: SKIPN A,PIECEL(B)
+ JRST MMP2
+ SKIPE ONEB1(A) ;SEE IF THIS PIECE IS BASE OF PIN
+ PUSHJ P,MMP3
+ SKIPE ONEB2(A)
+ PUSHJ P,MMP3A
+MMP2: AOBJN B,MMP1
+MMP2B: CAMN T,[-LPINTB,,PINTB]
+ JRST MMP2A
+ PUSHJ P,MCAT4 ;CHECK OUT POSSIBLE PINS
+ JRST MMP2B
+
+MMP2A: SKIPL MMPIVF ;SKIP IF PAWNS INVOLVED
+ JRST MMP4
+ MOVSI B,-8
+MMIC2H: SKIPL MMFL+1(B)
+ JRST MMIC2G
+ CLEARM WPNFLS+1(B)
+ CLEARM BPNFLS+1(B)
+ CLEARM WNPNFL+1(B)
+ CLEARM BNPNFL+1(B)
+ CLEARM WPPRK+1(B)
+ CLEARM BPPRK+1(B)
+ CLEARM WNPRK+1(B)
+ CLEARM BNPRK+1(B)
+MMIC2G: AOBJN B,MMIC2H
+
+ PUSHJ P,MMICP
+ PUSHJ P,PGCMP
+MMP4: CLEARM WAAPP
+ MOVE A,[WAAPP,,WAAPP+1]
+ BLT A,BAAPP+9
+ SKIPE NWPPP
+ PUSHJ P,WPPAC
+ SKIPE NBPPP
+ PUSHJ P,BPPAC
+ JRST MMICR
+
+
+MMICP: MOVE B,[-8,,1]
+MMIC2D: SKIPE A,PIECEL(B)
+ SKIPL LMGT(B)
+ JRST MMIC2C
+ LDB C,[BFILE,,BPREL(A)]
+ SKIPL MMFL(C)
+ JRST MMIC2C ;THIS P NOT AFFECTED
+ SKIPE PPASED(B)
+ SOS NWPPP
+ CLEARM PPASED(B)
+ CLEARM PPTP(B)
+ PUSHJ P,WPPSD
+ HRLM B,(P)
+ PUSH P,[MMICPW]
+MMIC2C: AOBJN B,MMIC2D
+
+ MOVE B,[-8,,NPCS+1]
+MMIC2E: SKIPE A,PIECEL(B)
+ SKIPL LMGT(B)
+ JRST MMIC2F
+ LDB C,[BFILE,,BPREL(A)]
+ SKIPL MMFL(C)
+ JRST MMIC2F
+ SKIPE PPASED(B)
+ SOS NBPPP
+ CLEARM PPASED(B)
+ CLEARM PPTP(B)
+ PUSHJ P,BPPSD
+ HRLM B,(P)
+ PUSH P,[MMICPB]
+MMIC2F: AOBJN B,MMIC2E
+ POPJ P,
+
+MMICPW: HLRZ B,(P)
+ MOVE A,PIECEL(B)
+ JRST WPBAK
+
+MMICPB: HLRZ B,(P)
+ MOVE A,PIECEL(B)
+ JRST BPBAK
+
+
+MMP3: SKIPA T2,[-4,,0]
+MMP3A: MOVE T2,[-4,,4]
+MMP3D: LDB C,ONEBSQ(T2)
+ JUMPN C,MMP3B
+MMP3C: AOBJN T2,MMP3D
+ POPJ P,
+
+
+
+WPPAC: MOVSI B,-8 ;COMPUTE BLACK ATTS ON STOPSQS OF WHITE P'S AS A FUNCTION OF FILE
+ CLEARM MAWPP
+WPPAC2: SKIPN A,WPPRK+1(B)
+ JRST WPPAC1 ;NO P P ON FILE
+ CAMLE A,MAWPP
+ MOVEM A,MAWPP
+ IMULI A,BW
+ ADDI A,2*BW+1(B) ;SQ OF MOST ADV ONE
+WPPAC3: SKIPGE C,BOARD+BW(A)
+ JRST WPPAC1
+ JUMPG C,WPPAC4 ;XFER ON ITS BLOCKED
+WPPAC5: MOVE C,BA+BW(A)
+ ADDM C,BAAPP+1(B)
+ ADDI A,BW ;ADV TO NEXT STOPSQ
+ JRST WPPAC3
+
+WPPAC4: SKIPL (C)
+ JRST WPPAC5
+ SETOM BAAPP+1(B) ;W GUY PATH BLOCKED
+WPPAC1: AOBJN B,WPPAC2
+ POPJ P,
+
+BPPAC: MOVSI B,-8
+ CLEARM MABPP
+BPPAC2: SKIPN A,BPPRK+1(B)
+ JRST BPPAC1
+ MOVE A,REVERS(A)
+ CAMLE A,MABPP
+ MOVEM A,MABPP
+ IMULI A,BW
+ ADDI A,2*BW+1(B)
+BPPAC3: SKIPGE C,BOARD-BW(A)
+ JRST BPPAC1
+ JUMPG C,BPPAC4
+BPPAC5: MOVE C,WA-BW(A)
+ ADDM C,WAAPP+1(B)
+ SUBI A,BW
+ JRST BPPAC3
+
+BPPAC4: SKIPGE (C)
+ JRST BPPAC5
+ SETOM WAAPP+1(B)
+BPPAC1: AOBJN B,BPPAC2
+ POPJ P,
+
+PGCMP: SETOM PGTP ;COMPUTE P GROUPS
+ MOVE B,[-8,,1]
+PGCMP1: MOVSI T1,240000 ;INITIALLY W+B UNOPPOSED
+PGCMP3: SKIPN WPNFLS(B)
+ SKIPE BPNFLS(B)
+ JRST PGCMP2
+ SETOM PGRPP(B)
+ AOBJN B,PGCMP3
+ POPJ P,
+
+PGCMP2: AOS T2,PGTP ;INDEX TO NEXT ENTRY IN PGT
+ DPB B,[PGTMNF,,T1] ;MIN FILE
+ CLEARB C,ZR
+PGCMP5: SKIPE WPNFLS(B)
+ TLZ T1,40000 ;W REPRESENTED (NOT B UNOPPOSED)
+ SKIPE BPNFLS(B)
+ TLZ T1,200000
+ SKIPE WPPRK(B)
+ TLO T1,100000
+ SKIPE BPPRK(B)
+ TLO T1,20000
+ SKIPN WNPNFL(B)
+ JRST .+3
+ SKIPN BNPNFL(B)
+ TLO T1,10000 ;W HAS 1/2 OPEN NON-PASSED P
+ SKIPN BNPNFL(B)
+ JRST .+3
+ SKIPN WNPNFL(B)
+ TLO T1,4000 ;B HAS (")
+ MOVEM T2,PGRPP(B)
+ ADD C,WNPNFL(B)
+ ADD ZR,BNPNFL(B)
+ AOBJP B,PGCMP6
+ SKIPN WPNFLS(B)
+ SKIPE BPNFLS(B)
+ JRST PGCMP5 ;CONTINUE GROUP
+ SETOM PGRPP(B) ;END GROUP
+PGCMP6: MOVEI A,-1(B)
+ DPB A,[PGTMXF,,T1]
+ DPB C,[PGNWP,,T1]
+ DPB ZR,[PGNBP,,T1]
+ MOVEM T1,PGT(T2)
+ JUMPL B,PGCMP1
+ POPJ P,
+
+MMP3B: MOVE D,@BOARD(C)
+ XOR D,PIECE(B)
+ JUMPL D,MMP3C
+ LDB Q,RDATS(T2)
+ MOVE D,PIECE(Q)
+ XOR D,PIECE(B)
+ JUMPGE D,MMP3C
+ PUSH T,A
+ HRLM T2,(T)
+ DPB Q,[PINATP,,(T)]
+ DPB C,[PINOPS,,(T)]
+ JRST MMP3C
+
+MMIC5Q: MOVEI S,WQR-PIECE(T)
+ JRST MMIC5A
+
+MMIC5: MOVEI S,WKR-PIECE(T)
+MMIC5A: MMSAVAC
+ PUSHJ P,RMPC
+ MOVE A,PIECEL(S)
+ PUSH P,BOARD(A)
+ CLEARM BOARD(A)
+ PUSH P,A ;AVOID POSSIBLE INTERFERENCE BY ROOK IN K REMOVAL
+ MOVE I,CATCSA+I
+ MOVE S,KINGT(I)
+ PUSHJ P,RMPC
+ JRST MMICR1
+
+KINGT: WKING-PIECE
+ BKING-PIECE
+
+MMIC6Q: MOVEI S,WQR-PIECE(T)
+ JRST MMIC6A
+
+
+MMIC6: MOVEI S,WKR-PIECE(T)
+MMIC6A: MMSAVAC
+ MOVE A,@OKINGT(I)
+ PUSH P,BOARD(A)
+ CLEARM BOARD(A)
+ PUSH P,A ;AVOID POSSIBLE INTERFERENCE BY K IN ROOK PLACEMENT
+ PUSHJ P,PTPC
+ POP P,A
+ POP P,BOARD(A)
+ MOVE I,CATCSA+I
+ MOVE S,KINGT(I)
+ PUSHJ P,PTPC
+ JRST MMICR
+
+MMIC8: MMSAVAC
+ LDB S,[MPTK,,LMV]
+ PUSHJ P,PTPC
+ JRST MMICR
+
+MMIC5B: CAIE T2,2
+ JRST MMIC5
+ JRST MMIC5Q
+
+MMIC6B: CAIE T2,2
+ JRST MMIC6
+ JRST MMIC6Q
+
+;;TYI
+GERR: MOVE P,RMERR1
+ PUSHJ P,QMTYO
+ JRST CRR
+
+GSYL: CLEARB B,SQN
+ CLEARM GSYLNF
+ SKIPE ALGSW1
+ JRST ALG4
+GSYL4: PUSHJ P,RCHA
+ MOVEM A,LCHAR
+IFN UTAPE,[
+ SETOM TERMF
+ CAIN A,40
+ CLEARM TERMF
+]
+ CAIN A,177
+ JRST GERR
+ CAIL A,"1
+ CAILE A,"9
+ JRST GSYL1
+ JUMPE B,GSYLN
+ SUBI A,"0-1
+ HRROI C,-11.(A)
+ SKIPE SIDE
+ MOVN A,C
+ IMULI A,BW
+ MOVEM A,SQN
+ TDNE B,[77,,777777]
+ JRST GSYL5
+ TLNE B,7700
+ JRST ALG1 ;LLN
+ALG4A: LDB W,[360600,,B]
+ CAIN W,'B ;LN
+ JRST ALG2
+ CAIL W,'A
+ CAILE W,'H
+ JRST GSYL5
+ALG3: MOVE A,LCHAR
+ SUBI A,"0-1
+ IMULI A,BW
+ ADD A,REVERS-'A+1(W)
+ SETOM CALGNF
+ MOVEM A,SQN
+ POPJ P,
+GSYL5: MOVSI C,-NSYMS
+ CAMN B,SYMT(C)
+ JRST GSYL6
+GSYL5B: AOBJN C,.-2
+ JRST GERR
+
+
+ALG2: SKIPL CALGNF
+ SKIPE ALGSW
+ JRST ALG3
+ JRST GSYL5
+
+ALG1: LDB W,[300600,,B]
+ CAIE W,'K
+ CAIN W,'Q
+ JRST ALG1A
+ LDB W,[360600,,B]
+ CAIL W,'A
+ CAILE W,'H
+ JRST GSYL5
+ALG1B: MOVEM B,ALGSW1
+ LSH B,6
+ TLZ B,7777
+ CLEARM SQN
+ SETOM CALGNF
+ JRST GSYL5
+
+ALG1A: LDB W,[360600,,B]
+ CAIL W,'A
+ CAILE W,'H
+ JRST GSYL5
+ SKIPL CALGNF
+ SKIPE ALGSW
+ JRST ALG1B
+ JRST GSYL5
+
+ALG4: MOVE B,ALGSW1
+ TLZ B,7777
+ CLEARM ALGSW1
+ JRST ALG4A
+
+GSYL1: CAIN A,"X
+ JRST GSYL1A
+ CAIL A,"A
+ CAILE A,"Z
+ JRST GSYL3
+ SUBI A,40
+ LSHC A,-6
+ JRST GSYL4
+GSYL3:
+IFN BOOK,[
+ SKIPL BOOKF1
+ JRST GSYL3A
+ CAIN A,40
+ MOVEI A,15 ;SPACE = CR IF READING BOOK
+GSYL3A:
+] CAIE A,"-
+ CAIN A,40
+ JRST GSYL5A
+ CAIE A,"(
+ CAIN A,")
+ JRST GSYL5A
+ CAIN A,"/
+ JRST GSYL5A
+ CAIE A,"=
+ CAIN A,"?
+ JRST GSYLEQ
+ CAIE A,"*
+ JRST GSYL7
+GSYL1A: SETOM TAKES
+ SETOM TAKES1
+ SKIPN B
+ SETOM TAKES2
+
+GSYL5A: JUMPN B,GSYL5
+ JRST GSYL4
+
+GSYLEQ: AOS EQSGNF
+ JUMPN B,GSYL5
+ POPJ P,
+
+GSYL7: CAIL A,11
+ CAILE A,15
+ JRST GERR
+ SETOM GME
+ JUMPE B,CPOPJ
+ JRST GSYL5
+
+
+
+GSYLN: MOVEI C,-"0(A)
+ SETOM GSYLNF
+GSYLN1: CLEARM GSYLMF
+GSYLN3: PUSHJ P,RCHA
+ CAIN A,177
+ JRST GERR
+ CAIN A,"-
+ JRST GSYLN5
+ CAIL A,"0
+ CAILE A,"9
+ JRST GSYLN4
+ IMULI C,10.
+ ADDI C,-"0(A)
+ JRST GSYLN3
+
+GSYLN5: SETOM GSYLMF
+ JRST GSYLN3
+
+GSYLN4: CAIL A,11
+ CAILE A,15
+ SKIPA
+ SETOM GME
+ SKIPE GSYLMF
+ MOVNS C
+ POPJ P,
+
+
+GSYL6A: MOVE P,RMERR1 ;PSEUDO DISPATCH OR PARAMETER HACKS
+ MOVE B,LCHAR
+ CAIL B,"0
+ CAILE B,"9
+ JRST GSYL6G
+ JRST GERR
+
+GSYL6G:IFN BOOK,[CAIL A,BKSMS-SYMT
+ JRST GSYL6B
+ SKIPE BOOKF1
+ JRST GSYL5B ;DONT ALLOW NON BOOK OPS IN BOOK
+]
+ SKIPG B,SQTB(A)
+ JRST GSYL6C
+GSYL6E: MOVEI B,0
+ PUSHJ P,@SQTB(A)
+ SKIPGE UREADF
+ POPJ P,
+GSYL6F: PUSHJ P,LATYO
+ JRST CRR
+
+GSYL6C: SKIPN EQSGNF
+ JRST GSYL6D
+ TLNN B,200000 ;OUTPUT PARAMETER VALUE
+ SKIPA A,-1(B)
+ MOVE A,(B)
+ MOVEI B,TYO
+ PUSHJ P,DPT
+ JRST GSYL6F
+
+GSYL6D: TLNN B,200000
+ JRST GSYL6E
+ PUSHJ P,GETNUM ;INPUT PARAMETER VALUE
+ MOVEM C,(B)
+ JRST GSYL6F
+
+
+IFN BOOK,[
+GSYL6B: SKIPN BOOKF1
+ JRST GERR ;NOT READING BOOK
+ JRST @SQTB(A)
+]
+
+
+GSYL6: HRRZ A,C
+ CAIL A,SYMPS-SYMT
+ JRST GSYL6A ;PSEUDO
+ MOVE A,SQN
+ HRLS A
+ ADD A,SQTB(C)
+ MOVE T1,SIDE
+ SKIPGE TAKES2
+ XORI T1,NPCS
+ SKIPE T1
+ ADDI C,PTBL ;BLACK PIECES
+ SKIPN SQN
+ MOVE A,PTB(C)
+ TLNE A,377777
+ JUMPL A,GERR
+ TRNE A,400000
+ JRST GSYP1 ;PAWN HACK
+GSYP3: AOSN TAKES1
+ SETOM TAKES2
+ POPJ P,
+
+
+GSYP1: SKIPE SQN
+ JRST GSYP3
+ LDB T1,[400,,A]
+ LDB T2,[40400,,A]
+ MOVEI A,0
+ MOVSI C,200000
+ MOVE S,SIDE
+ SKIPGE TAKES2
+ XORI S,NPCS
+
+GSYP2: SKIPE Q,PIECEL+1(S)
+ SKIPL LMGT+1(S)
+ JRST GSYP4
+ LDB Q,[BFILE,,BPREL(Q)]
+ CAME Q,T1
+ CAMN Q,T2
+ IOR A,C
+GSYP4: LSH C,-1
+ TLNN C,400
+ AOJA S,GSYP2
+ JRST GSYP3
+
+RMNI: LDB B,[014300,,PLYN]
+ CAIN C,1(B)
+ JRST RMOVE3
+ PTTY [ASCII /MOVE NUMBER DIFFERS!/]
+ JRST RMOVE3
+
+RMOVE: LDB A,[100,,PLYN]
+ IMULI A,NPCS
+ MOVEM A,SIDE ;0=>WHITE NPCS=>BLACK
+ PUSHJ P,CAT
+RMOVE0: MOVEM P,RMERR1
+ JRST RMOVE3
+
+PROMPC: 0 ;PIECE PAWN PROMOTED TO
+
+PROTX1: 'Q
+ 'R
+ 'B
+ 'N
+
+RMOVE5: PUSHJ P,RCHA
+ SUBI A,40
+ JUMPE A,RMOVE5
+ MOVSI B,-4
+ CAME A,PROTX1(B)
+ AOBJN B,.-1
+ JUMPGE B,RMERR
+ EXCH B,PROMPC
+ JUMPE B,RMOVE6
+
+RMERR0: JUMPE D,CPOPJ
+RMERR: PUSHJ P,QMTYO
+ PUSHJ P,TYO
+ PUSHJ P,CRR
+
+RMOVE3: CLEARM CALGNF
+ CLEARM ALGSW1
+ CLEARB B,CASLF
+ CLEARB D,TAKES
+ CLEARB TT,GME
+ CLEARM TAKES1
+ CLEARM TAKES2
+ CLEARM RNSQS
+ CLEARM RNPCS
+ SETZM PROMPC
+RMOVE6: CLEARM EQSGNF
+RMOVE2: SKIPE EQSGNF
+ JRST RMOVE5
+ PUSHJ P,GSYL
+ SKIPE GSYLNF
+ JRST RMNI
+ JUMPE B,RMOVE1
+ CAMN A,[1,,]
+ SETOM CASLF
+ CAILE D,4
+ JRST RMERR
+ SKIPN SQN
+ AOSA T,RNPCS
+ AOS I,RNSQS
+ MOVEM A,SYLT(D)
+ AOS D
+ LSH TT,1
+ SKIPN SQN
+ TRO TT,1
+ SKIPE SQN
+ JRST RMOVE1
+ SOJN T,RMOVE1
+ SKIPE RNSQS ;SQ BEFORE FIRST PC DOESNT WORK--BUG
+ JRST RMERR
+
+RMOVE1: SKIPL GME
+ JRST RMOVE2
+ CAIGE D,2
+ JRST RMERR0
+ SKIPE CASLF
+ JRST RMOVE4
+
+ ANDI TT,17
+ SKIPGE PSTB(TT)
+ JRST RMERR
+ LDB A,[PMI,,PSTB(TT)]
+ MOVE T,SYLT-2(A) ;POSS PIECE TO MOVE
+ LDB A,[SMI,,PSTB(TT)]
+ MOVE I,SYLT-2(A) ;POSS ORG SQUARE
+ LDB A,[DPMI,,PSTB(TT)]
+ MOVE R,SYLT-2(A) ;POSSIBLE PIECE TAKEN
+ LDB A,[DSMI,,PSTB(TT)]
+ MOVE Q,SYLT-2(A) ;POSSIBLE DESTIN LOCN
+
+;DROPS THRU;DROPS IN
+AMBC: CLEARM LGLMV
+ LSH T,1
+ MOVE J,SIDE
+ AOS J
+AMBC3: JUMPE T,AMBC1
+ JUMPG T,AMBC2
+ PUSHJ P,CHK1
+AMBC2: LSH T,1
+ AOJA J,AMBC3
+AMBC1: SKIPN A,LGLMV
+ JRST AMBC4
+ LDB D,[MPC,,A]
+ SKIPL LMGT(D)
+ JRST AMBC5 ;NOT PAWN
+ LDB D,[MPTO,,A]
+ CAIL D,3*BW
+ CAIL D,9*BW
+ JRST RPROMP ;PROMOTED PAWN
+AMBC5: SKIPN PROMPC
+ JRST POPJ1
+AMBC4: PTTY [ASCII /IMPOSSIBLE!/]
+ JRST RMERR
+
+RPROMP: MOVE B,PROMPC
+; SKIPN B,PROMPC
+; JRST RMERR2
+ TRO B,4
+ DPB B,[300,,A]
+ MOVEM A,LGLMV
+ JRST POPJ1
+
+RMOVE4: MOVEI A,1
+ CAIE D,2
+ MOVEI A,2
+ SKIPE SIDE
+ TLO A,200000
+ JRST POPJ1
+
+
+CHK1: PUSH P,J
+ PUSH P,I
+ JUMPL I,CHK2
+ HRRZ S,I
+ CAME S,PIECEL(J)
+ JRST CHK1A ;LOCN DOESNT AGREE
+CHK2: PUSH P,B
+ PUSH P,A
+ PUSH P,Q
+ MOVE B,J
+ JUMPL Q,CHK3 ;NO DESTIN SQ
+ PUSH P,Q
+ HRRZ A,Q
+ PUSHJ P,LGLMP
+ HLLZS (P)
+ HLRZ A,(P)
+ PUSHJ P,LGLMP
+ HRRZS (P)
+ POP P,Q
+ JUMPE Q,CHK2R
+
+CHK3: SKIPL TAKES
+ JRST FM1 ;LEGAL MOVE
+ PUSH P,R ;CHECK CAPTURED PIECE
+ MOVE C,SIDE
+ XORI C,NPCS
+ AOS C
+ JUMPGE R,CHK3C1 ;NOT GHOST
+ SKIPN A,GHLOC
+ JRST CHK3C1
+ PUSHJ P,LGLMP
+ JRST CHK3C1
+ MOVE Q,GHLOC
+ POP P,R
+ JRST FM1
+
+CHK3C1: LSH R,1
+CHK3C: JUMPE R,CHK3R
+ JUMPG R,CHK3A
+ MOVE A,PIECEL(C)
+ JUMPL Q,CHK3D
+ CAIN A,(Q)
+ JRST CHK3D
+ MOVSS Q
+ CAIE A,(Q)
+ JRST CHK3A
+CHK3D: PUSHJ P,LGLMP
+ JRST CHK3A
+
+ PUSHJ P,FM4A
+CHK3A: LSH R,1
+ AOJA C,CHK3C
+
+
+CHK3R: POP P,R
+CHK2R: POP P,Q
+ POP P,A
+ POP P,B
+CHK1R: POP P,I
+ POP P,J
+ POPJ P,
+
+CHK1A: HLRZ S,I
+ CAME S,PIECEL(J)
+ JRST CHK1R
+ JRST CHK2
+
+FM1: JUMPL Q,RMERR2
+ TRNN Q,-1
+ MOVSS Q
+ TLNE Q,-1
+ JRST RMERR2
+ SKIPE LGLMV
+ JRST RMERR2
+ SKIPE C,BOARD(Q)
+ JRST FM2
+ MOVEI A,0
+ DPB J,[MPC,,A]
+ SKIPE SIDE
+ TLO A,200000
+ MOVE S,PIECEL(J)
+ DPB S,[MPO,,A]
+ DPB Q,[MPTO,,A]
+ MOVEM A,LGLMV
+ JRST CHK2R
+
+FM2: MOVEI C,-PIECE(C)
+ PUSHJ P,FM4
+ JRST CHK2R
+
+FM4A: SKIPE LGLMV
+ JRST RMERR3 ;AMB
+FM4: MOVSI A,(SETZ)
+ DPB J,[MPC,,A]
+ SKIPE SIDE
+ TLO A,200000
+ MOVE S,PIECEL(J)
+ DPB S,[MPO,,A]
+ DPB C,[MPTK,,A]
+ MOVE S,PIECEL(C)
+ DPB S,[MPTO,,A]
+FM5: MOVEM A,LGLMV
+ POPJ P,
+
+
+RMERR3:
+RMERR2: PTTY [ASCII /AMBIGUOUS!/]
+ SETOM DISSUP
+ MOVE P,RMERR1
+ POPJ P,
+
+LGLMP: SKIPE S,PIECEL(B) ;LEGAL FOR PIECE B TO MOVE TO SQ A
+LGLMP2: SKIPGE T1,BOARD(A)
+ POPJ P,
+ JUMPE T1,@LGLMPT(B)
+ MOVE T2,(T1)
+ XOR T2,PIECE(B)
+ JUMPGE T2,CPOPJ ;OUR GUY THERE NOW
+ JRST @LGLMPT(B)
+
+FLGLMP: SKIPE S,PIECEL(B) ;DONT CONSIDER WHAT PIECE IS IN DESTIN SQ
+ SKIPGE T1,BOARD(A)
+ POPJ P,
+ SKIPL LMGT(B) ;SKIP ON PAWN
+ JRST @LGLMPT(B)
+ SKIPGE PIECE(B)
+ JRST FLGLP1
+ CAIN A,BW+1(S)
+ JRST POPJ1
+ CAIN A,BW-1(S)
+ AOS (P)
+ POPJ P,
+
+FLGLP1: CAIN A,-BW+1(S)
+ JRST POPJ1
+ CAIE A,-BW-1(S)
+ POPJ P,
+ AOS (P)
+ POPJ P,
+
+
+LWPWN: CAIN A,BW(S)
+ JRST LWPW1
+ CAIN A,2*BW(S)
+ JRST LWPW2
+ CAIE A,BW+1(S)
+ CAIN A,BW-1(S)
+ JRST LWPW3
+ POPJ P,
+
+LWPW2: CAIL S,4*BW
+ POPJ P,
+ SKIPN BOARD+2*BW(S)
+LWPW1: SKIPE BOARD+BW(S)
+ POPJ P,
+POPJ1: AOS (P)
+ POPJ P,
+
+LWPW3: SKIPE BOARD(A)
+ JRST POPJ1 ;SQUARE OCC + ITS NOT OUR GUY + ON BOARD
+ SKIPGE GHSD
+ CAME A,GHLOC
+ POPJ P,
+ AOS (P)
+ POPJ P,
+
+LBPWN: CAIN A,-BW(S)
+ JRST LBPW1
+ CAIN A,-2*BW(S)
+ JRST LBPW2
+ CAIE A,-BW+1(S)
+ CAIN A,-BW-1(S)
+ JRST LBPW3
+ POPJ P,
+
+LBPW2: CAIG S,8*BW
+ POPJ P,
+ SKIPN BOARD-2*BW(S)
+LBPW1: SKIPE BOARD-BW(S)
+ POPJ P,
+ AOS (P)
+ POPJ P,
+
+LBPW3: SKIPE BOARD (A)
+ JRST POPJ1
+ SKIPLE GHSD
+ CAME A,GHLOC
+ POPJ P,
+ AOS (P)
+ POPJ P,
+
+LROOK: MOVEM S,LBSS
+ MOVSI T2,-4
+LROOK1: MOVE S,LBSS
+LROOK4: ADD S,RDT(T2)
+ SKIPGE T1,BOARD(S)
+ JRST LROOK2
+ CAMN A,S
+ JRST LROOK5
+ JUMPE T1,LROOK4
+ CAIN T1,PIECE(B)
+ JRST LROOK4 ;DONT ALLOW PIECE TO BE BLOCKED BY ITSELF
+ ;POSSIBLE ON CALL FROM LR3A
+LROOK2: AOBJN T2,LROOK1
+ MOVE S,LBSS
+ POPJ P,
+
+LROOK5: MOVE S,LBSS
+ AOS (P)
+ POPJ P,
+
+LQUEEN: PUSHJ P,LROOK
+ JRST .+3
+ JRST POPJ1
+LBIS: MOVEM S,LBSS
+ MOVSI T2,-4
+LBIS1: MOVE S,LBSS
+LBIS4: ADD S,BDT(T2)
+ SKIPGE T1,BOARD(S)
+ JRST LBIS2
+ CAMN A,S
+ JRST LROOK5
+ JUMPE T1,LBIS4
+ CAIN T1,PIECE(B)
+ JRST LBIS4
+LBIS2: AOBJN T2,LBIS1
+ MOVE S,LBSS
+ POPJ P,
+
+
+LKNT: CAIE A,2*BW+1(S)
+ CAIN A,2*BW-1(S)
+ JRST POPJ1
+ CAIE A,-2*BW+1(S)
+ CAIN A,-2*BW-1(S)
+ JRST POPJ1
+ CAIE A,BW+2(S)
+ CAIN A,BW-2(S)
+ JRST POPJ1
+ CAIE A,-BW+2(S)
+ CAIN A,-BW-2(S)
+ JRST POPJ1
+ POPJ P,
+
+
+LKING: CAIE A,BW+1(S)
+ CAIN A,BW-1(S)
+ JRST POPJ1
+ CAIE A,BW(S)
+ CAIN A,-BW(S)
+ JRST POPJ1
+ CAIE A,1(S)
+ CAIN A,-1(S)
+ JRST POPJ1
+ CAIE A,-BW-1(S)
+ CAIN A,-BW+1(S)
+ JRST POPJ1
+ POPJ P,
+
+LBSS: 0
+
+
+;;INPF
+ASTOP: SETOM CLKCOK
+ POPJ P,
+
+ARST: PUSHJ P,AUREAD
+ARST1: SETOM UREADF
+ POPJ P,
+
+AREPLAY: MOVSI T2,600000
+ JRST AFILR2
+
+IFE DECTS,[
+
+IFN UTAPE,[
+IFN TS,[
+ARDB: SKIPA T2,[400000,,4] ;READ BINARY
+AWRB: MOVEI T2,5 ;WRITE BINARY
+ JRST AFILR2
+
+AWRBB: MOVEI T2,7 ;WRITE BLOCK BINARY
+ JRST AFILR2
+
+ARDBB: SKIPA T2,[400000,,6] ;READ BLOCK BINARY
+]
+IFE TS,AWRB: ;NO DIFFERENCE IN OPEN FOR BINARY OUT OF TS
+AWRT: MOVEI T2,1
+ JRST AFILR2
+
+AFILE: TDZA T2,T2
+
+IFE TS,ARDB: ;NO DIFFERENCE IN OPEN FOR BINARY OUT OF TS
+AUREAD: MOVSI T2,400000
+AFILR2: MOVEM T2,READF
+ PUSHJ P,FSYL
+ JRST UREDE
+AURD1: MOVSI A,(SETZ)
+ MOVEM A,CFILE
+ MOVEM B,CFILE+1
+ PUSHJ P,FSYL
+ JRST UREDE
+ EXCH B,CFILE+1
+ MOVEM B,CFILE
+ PUSHJ P,FSYL
+ JRST UREDE
+IFE TS,[
+ MOVE A,T1
+ PUSHJ P,TAPKIL"
+ EXCH A,TAPN
+ PUSHJ P,TAPKIL
+] ;CLOSE TS
+IFN TS,[
+ HLRM B,TAPN
+ SKIPE B
+] ;CLOSE TS
+UREDE: MOVE A,TAPN
+ PUSHJ P,FILEST"
+ JRST UNAB
+ MOVE A,CFILE
+ MOVE B,CFILE+1
+ MOVE C,READF
+IFN TS, HRLM C,UTIN
+ JUMPGE C,UWRR ;WRITE
+ PUSHJ P,OPNRD"
+ JRST FNF
+ MOVE C,READF
+ TLNN C,200000
+ JRST PSRET ;RETURN IF NOT REPLAY
+ CLEARM RWPF ;REPLAY
+ CLEARM RBPF
+ PTTY [ASCII /PLAY WHITE? !/]
+ PUSHJ P,RDYON
+ SETOM RWPF
+ PTTY [ASCII /
+BLACK? !/]
+ PUSHJ P,RDYON
+ SETOM RBPF
+ PTTY [ASCIZ /
+FROM PLY #? /]
+ PUSHJ P,GETNUM
+ MOVEM C,RPLYPN
+ MOVEI A,ARPLY
+ MOVEM A,GSW
+ SKIPE CLKSW
+ AOSE CLKCOK
+ JRST ARST1
+ CLEARM MACCLR
+ PTTY [ASCII /CLOCK STARTED!/]
+ JRST ARST1
+
+FNF: PTTY [ASCII /FILE NOT FOUND!/]
+ MOVE P,RMERR1
+ POPJ P,
+
+UNAB: ERRTTY [ASCII /UNIT UNABLE!/]
+
+READF: 0 ;-1 READ 0 WRITE 1 FILE
+
+UWRR: JUMPE C,AFILR1
+ PUSHJ P,OPNWR"
+ ERRTTY [ASCII /DIR FUL!/]
+ POPJ P,
+
+ASAVE: PUSHJ P,AWRT
+ MOVEI B,UWD
+ SKIPE TMSPOT
+ SOUT SPOTSW
+ SETOM PMRDF
+ PUSHJ P,APG6
+AFILR1: MOVE A,CFILE
+ MOVE B,CFILE+1
+ PUSHJ P,FILE"
+ PTTY [ASCII /U LOSE!/]
+ POPJ P,
+
+RDYON: PUSHJ P,TYI
+ CAIN A,"N
+ JRST POPJ1
+ CAIN A,"Y
+ POPJ P,
+ MOVEI A,"?
+ PUSHJ P,TYO
+ JRST RDYON
+
+FSYL: SKIPE TERMF
+ POPJ P,
+ CLEARB T1,B
+ MOVE C,[10600,,B-1]
+FSYL1: PUSHJ P,TYI
+ CAIN A,177
+ JRST GERR
+ CAIN A,";
+ JRST FSYL3
+ CAIG A,40
+ JRST FSYL2
+ IMULI T1,10.
+ ADDI T1,-"0(A)
+ SUBI A,40
+ TLNE C,770000
+ IDPB A,C
+ JRST FSYL1
+
+FSYL2: CAIE A,40
+ SETOM TERMF
+ CAMN C,[10600,,B-1]
+ JRST FSYL
+ JRST POPJ1
+
+FSYL3: .SUSET [.SSNAM,,B]
+ JRST FSYL
+TERMF: 0
+
+CFILE: SIXBIT /BOOK/
+ SIXBIT /MOVES/
+
+TAPN: IFE TS, 2
+ IFN TS, (SIXBIT /DSK/)
+IFN TS,[
+TAPKIL=CPOPJ
+FILEST: HRRM A,UTIN
+ JRST POPJ1
+
+OPNRD: MOVEM A,UTIN+1
+ MOVEM B,UTIN+2
+ .OPEN UTYIC,UTIN
+ POPJ P,
+ JRST POPJ1
+
+UTIN: (SIXBIT /DSK/)
+ SIXBIT /TEST/
+ SIXBIT /GAME/
+
+OPNWR: MOVEM A,UTIN+1
+ MOVEM B,UTIN+2
+ .OPEN UTYOC,UTIN
+ POPJ P,
+ JRST POPJ1
+
+FILE: .CLOSE UTYOC,
+ JRST POPJ1
+]
+]
+
+]
+
+IFN DECTS,[
+
+AFILE: PUSHJ P,AFILER
+AFILEW: RELEASE UTYOC,
+ SETZM UTINT
+ POPJ P,
+
+AFILER: RELEASE UTYIC,
+ SETZM UREADF
+ POPJ P,
+
+AWRT: SETZM UTINT
+ PUSHJ P,GFILE
+ INIT UTYOC,1
+DEVNAM: SIXBIT /FOOBAR/
+ UTYOO,,0
+ ERRTTY [ASCII /DEVICE NOT AVAILABLE!/]
+ ENTER UTYOC,CFILE
+ ERRTTY [ASCII /DIRECTORY FULL!/]
+ MOVEI T1,UTYOB
+ EXCH T1,JOBFF
+ OUTBUF UTYOC,1
+ MOVEM T1,JOBFF
+ OUTPUT UTYOC,
+ SETOM UTINT
+ POPJ P,
+
+UTYOO: BLOCK 3
+UTYOB: BLOCK 203
+UTINT: 0
+
+AUREAD: SETZM UREADF
+ PUSHJ P,GFILE
+ MOVE A,DEVNAM
+ MOVEM A,DEVNM1
+ INIT UTYIC,1
+DEVNM1: SIXBIT /FOOBAR/
+ 0,,UTYII
+ ERRTTY [ASCII /DEVIDE NOT AVAILABLE!/]
+ LOOKUP UTYIC,CFILE
+ ERRTTY [ASCII /FILE NOT FOUND!/]
+ MOVEI T1,UTYIB
+ EXCH T1,JOBFF
+ INBUF UTYIC,1
+ MOVEM T1,JOBFF
+ SETOM UREADF
+ POPJ P,
+
+UTYII: BLOCK 3
+UTYIB: BLOCK 203
+
+CFILE: SIXBIT /CHESS/
+ SIXBIT /MVS/
+ 0
+ 0
+
+GFILE: SETZM CFILE+3
+ SETZM TERMF
+ PUSHJ P,FSYL
+ MOVEM B,DEVNAM
+ PUSHJ P,FSYL
+ MOVEM B,CFILE
+ CAIE A,".
+ POPJ P,
+ PUSHJ P,FSYL ;GET FILENAME EXTENSION
+ HLLM B,CFILE+1 ;...
+ POPJ P, ;TRA 1,4
+
+TERMF: 0
+
+FSYL: SKIPE TERMF
+ JRST GERR
+ SETZB T1,B
+ MOVE C,[10600,,B-1]
+FSYL1: PUSHJ P,TYI
+ CAIN A,177
+ JRST GERR
+ CAIE A,".
+ CAIN A,":
+ JRST FSYL21
+ CAIG A,40
+ JRST FSYL2
+ IMULI T1,10.
+ ADDI T1,-"0(A)
+ SUBI A,40
+ TLNE C,770000
+ IDPB A,C
+ JRST FSYL1
+
+FSYL2: CAIE A,40
+ SETOM TERMF
+FSYL21: CAMN C,[10600,,B-1]
+ JRST FSYL
+ POPJ P,
+
+ASAVE: PUSHJ P,AWRT
+ MOVEI B,UWD
+ SETOM PMRDF
+ SETZM DISPGF
+ PUSHJ P,APG6
+AFILR1: JRST AFILEW
+
+]
+
+;;;AFTR
+
+AHBPT: PUSHJ P,GETNUM
+ MOVEM C,HBPTSW
+ JUMPE C,AHBPT1
+ LDB I,[100,,PLYN]
+ PUSHJ P,HASHR
+ JFCL
+ MOVEM S,HSBPT
+ POPJ P,
+
+AHBPT1: CLEARM HSBPT
+ POPJ P,
+
+IFN 0,[
+NAAFTT: PUSHJ P,GETNUM ;TRACE PMG AFTER ON NTH MULT SEARCH
+ MOVEM C,AFMSST
+ JRST AAFTT2
+
+AAFTT: SETZM AFMSST ;TRACE PMG AFTER
+AAFTT2: SETOM PMGTRF
+ JRST AAFTT1
+
+NAFTER: PUSHJ P,GETNUM ;DO AFTER ON NTH MULT SEARCH
+ MOVEM C,AFMSST
+ JRST NAFT1
+
+AAFTER: SETZM AFMSST ;ORDINARY AFTER
+NAFT1: CLEARM PMGTRF
+AAFTT1: MOVE T,GAMP
+ MOVEM T,AAFL
+ SETOM BOOKF1 ;SO SPACE=CR
+AAFT3: PUSHJ P,RMOVE
+ PUSHJ P,IMMOVE
+ JRST AAFT1
+ PUSHJ P,DISUP
+ MOVE A,LCHAR
+ CAIE A,15
+ CAIN A,12
+ JRST AAFT2
+ JRST AAFT3
+
+AAFT1: PTTY [ASCII /ILLEGAL!/]
+ JRST AAFT3
+
+AAFT2: SKIPL PMGTRF
+ JRST AAFT2B
+ MOVE A,@GAMP ;TRACE LAST MOVE IN LINE
+ MOVEM A,PMGTMV
+ PUSHJ P,UNMOVE
+AAFT2B: MOVE T2,GAMP
+ SUB T2,AAFL
+ JUMPE T2,PSRET
+ MOVEM T2,AAFL ;DEPTH OF GIVEN LINE
+ CLEARM AAFTB+1-1(T2)
+AAFT2A: MOVE A,@GAMP
+ MOVEM A,AAFTB-1(T2)
+ PUSH P,T2
+ PUSHJ P,UNMOVE
+ POP P,T2
+ SOJG T2,AAFT2A
+ PUSHJ P,DISUP
+ JRST HACK1
+
+]
+PMGTMV: 0 ;MOVE TO BE TRACED
+
+;;MISC3
+
+ALIST: MOVE B,PNTS ;LIST ALL PSEUDOS
+ PUSHJ P,DCRR
+ MOVSI J,SYMPS-BKSMS
+ALIST1: MOVE D,SYMPS(J)
+ALIST2: LDB A,[600,,D]
+ ADDI A,40
+ CAIE A,40
+ PUSHJ P,(B)
+ LSH D,-6
+ SKIPE D
+ JRST ALIST2
+ SKIPL D,PSDS(J)
+ JRST ALIST3
+ MOVEI A,"= ;STD I O
+ TLNN D,200000
+ JRST ALIST5 ;STD O
+ALIST4: PUSHJ P,(B)
+ MOVE A,(D)
+ PUSHJ P,DPT
+ALIST3: PUSHJ P,DCRR
+ SKIPL QTF
+ AOBJN J,ALIST1
+ POPJ P,
+
+ALIST5: MOVEI A,"-
+ SOS D
+ JRST ALIST4
+
+ASTEST: PUSHJ P,GETNUM
+ MOVEM C,EST
+ SETOM ESTSW
+ MOVE T1,PLYN
+ MOVEM T1,SETESP
+ POPJ P,
+
+HK1V: 4
+PSRET: POPJ P,
+
+ASETP: SKIPA I,[-SBRLNG,,PSBR]
+ASETW: MOVE I,[-SBRLNG,,SBR]
+ SKIPE EQSGNF
+ JRST ASETWA
+ASETW1: PUSHJ P,GETNUM
+ JUMPLE C,ASETW1
+ MOVEM C,(I)
+ AOBJP I,ASETW2
+ SKIPN GME
+ JRST ASETW1
+ASETW2: JUMPG I,CPOPJ
+ASETW6: MOVE A,-1(I)
+ MOVEM A,(I)
+ AOBJN I,ASETW6
+ POPJ P,
+
+ASETWA: MOVEI B,TYO
+ JRST ASETW5
+
+PSETP: SKIPA I,[-SBRLNG,,PSBR]
+PSETW: MOVE I,[-SBRLNG,,SBR]
+ASETW5: HLRO A,I
+ MOVNS A
+ ADDI I,-1(A)
+ ADD I,[1,,]
+ PUSHJ P,DSPACE
+ SETZM ASTWF
+ PUSH P,[0]
+ASETW3: MOVE A,-1(I)
+ CAME A,(I)
+ SETOM ASTWF
+ SKIPE ASTWF
+ PUSH P,(I)
+ ADDI I,-1
+ JUMPL I,ASETW3
+ASETW4: PUSHJ P,DPTS
+ POP P,A
+ JUMPE A,CPOPJ
+ JRST ASETW4
+
+ASTWF: 0
+
+;;PARS
+
+IFE DECTS,[
+ASPARM: PUSHJ P,GETNUM
+ CAIL C,NPARS
+ JRST ASPAR1
+ MOVE T1,HK1V
+ MOVEM T1,PARD(C)
+ MOVE T1,FDCUT
+ MOVEM T1,PARF(C)
+ MOVE T1,PCGSW
+ MOVEM T1,PARCG(C)
+ IMULI C,SBRLNG
+ MOVSI T1,SBR
+ HRR T1,PARW(C)
+ HRRZ T2,T1
+ BLT T1,SBRLNG-1(T2)
+ POPJ P,
+
+ASPAR1: PTTY [ASCII /ILLEGAL PARAMETER SET!/]
+ POPJ P,
+]
+GETNUM: MOVEI C,0
+ SETZM GME
+ JRST GSYLN1
+
+PBOARD: MOVE B,PNTS
+ JRST BDOUT
+
+ECHOS: 1
+
+
+;;BOOK
+
+IFN BOOK,[
+BYMG: MOVE C,[440600,,B]
+ MOVEI B,0
+BYMG2: PUSHJ P,RCHA
+ CAILE A,40
+ CAILE A,140
+ JRST BYMG1
+ SUBI A,40
+ TLNE C,770000
+ IDPB A,C
+ JRST BYMG2
+
+BYMG1: MOVE ZR,B
+ MOVEI Q,0
+
+BYMG4: CAMN B,BKSMT(Q)
+ POPJ P, ;FOUND TAG
+ CAMGE Q,BSYMPR
+ AOJA Q,BYMG4
+ JRST POPJ1 ;TAG NOT THERE
+
+BKPUTI: AOS C,BKFS
+BKPUT: CAIL C,BKSS
+ ERRTTY [ASCII /BOOK FULL!/]
+ IDIVI C,6
+ DPB A,BKPT(D)
+ POPJ P,
+
+BKPT: 360600,,BBK(C)
+ 300600,,BBK(C)
+ 220600,,BBK(C)
+ 140600,,BBK(C)
+ 60600,,BBK(C)
+ 600,,BBK(C)
+
+BSYMPR: -1
+BKFS: 0
+BOOKF1: 0 ;IN BOOK READIN IN -1
+BKTM1: 0
+BKTM2: 0
+BKTM3: 0
+BKF2R: 0 ;FLAG TO LMG TO RETN TO VARIOUS HACKS IF .NE. 0
+BOOKF3: 0 ;MAKE MOVE FLAG
+
+
+BKV: PUSHJ P,BYMG
+ JRST BKV1 ;MDV
+ AOS A,BSYMPR
+ CAIL A,BMXS
+ ERRTTY [ASCII /BOOK SYM TABLE FULL!/]
+ MOVEM B,BKSMT(A)
+ MOVE B,BKFS
+ HRL B,PLYN
+ MOVEM B,BKSMTV(A)
+ JRST BKML
+
+BKV1: PTTY [ASCII /MDT!/]
+
+BKV2: MOVEI A,0
+ ROTC ZR,6
+ JUMPE A,BKML
+ ADDI A,60
+ PUSHJ P,TYO
+ JRST BKV2
+
+BKT: PUSHJ P,BYMG
+ JRST BKT1
+ PTTY [ASCII /UNDEFINED GO TO!/]
+ JRST BKV2
+
+BKT1: MOVEI A,76
+ PUSHJ P,BKPUTI
+ LDB A,[60600,,Q]
+ PUSHJ P,BKPUTI
+ LDB A,[600,,Q]
+ PUSHJ P,BKPUTI
+ JRST BKT2
+
+BKE: MOVEI A,77
+ PUSHJ P,BKPUTI
+
+BKT2: SKIPN PLYN
+ JRST MNLP2
+ PUSHJ P,UNMOVE
+ JRST BKML
+
+
+BKM: PUSHJ P,BYMG
+ JRST BKM1
+ PTTY [ASCII /UNDEFINED MULTIPLE END!/]
+ JRST BKV2
+
+BKM1: HLRZ D,BKSMTV(Q)
+ CAMLE D,PLYN
+ JRST BKM2
+ CAMN D,PLYN
+ JRST BKML
+ AOS C,BKFS
+ MOVEI A,77
+ PUSHJ P,BKPUT
+ PUSH P,Q
+ PUSHJ P,UNMOVE
+ POP P,Q
+ JRST BKM1
+
+BKM2: PTTY [ASCII /ATTEMPT TO RETURN TO HIGHER PLYN!/]
+ JRST BKV1
+
+IFE DECTS,[
+AWBKB: PUSHJ P,AWRB
+ MOVE A,BKFS
+ IDIVI A,6
+ MOVNI A,1(A)
+ HRLZS B,A
+ PUSHJ P,UWRB
+ MOVE A,BBK(B)
+ PUSHJ P,UWRB
+ AOBJN B,.-2
+ MOVE B,BSYMPR
+ MOVNI B,1(B)
+ HRLZS B
+ MOVE A,B
+ PUSHJ P,UWRB
+ MOVE A,BKSMTV(B)
+ PUSHJ P,UWRB
+ AOBJN B,.-2
+ PUSHJ P,AFILR1
+ JRST PSRET
+
+ARBKB: PUSHJ P,ARDB
+ PUSHJ P,UREDB
+ HLRO C,A
+ IMULI C,-6
+ HRRZM C,BKFS ;SO RIGHT THING WILL HAPPEN ON SUBSEQUENT WRITEOUT
+ MOVE B,A
+ PUSHJ P,UREDB
+ MOVEM A,BBK(B)
+ AOBJN B,.-2
+ PUSHJ P,UREDB
+ MOVE B,A
+ HLROS A
+ MOVNI A,1(A)
+ HRRZM A,BSYMPR
+ PUSHJ P,UREDB
+ MOVEM A,BKSMTV(B)
+ AOBJN B,.-2
+IFN TS, .CLOSE UTYIC,
+ JRST PSRET
+
+]
+
+ARBOOK: SETOM BSYMPR
+ CLEARM BKSMT
+ CLEARM BKFS ;RESET BOOK
+ACBOOK: SETOM BOOKF1
+
+BKML: MOVE P,[-PDLL,,PDL-1]
+ PUSHJ P,RMOVE
+ JRST .-1
+ PUSHJ P,BKFND
+ ERRTTY [ASCII /MOVE NOT FOUND!/]
+BKME2: CAIL C,75
+ JRST BKME3
+ MOVE A,C
+ PUSHJ P,BKPUTI
+ MOVE A,BKTM1
+ PUSHJ P,IMMOVE
+ ERRTTY [ASCII /ILLEGAL!/]
+IFN DSPLY, PUSHJ P,DISUP
+ JRST BKML
+
+BKMM: SETOM BOOKF3
+ MOVEM B,BKTM3 ;GET PIECE TO SQUARE FOR MOVE NO IN A
+ LDB I,[100,,PLYN]
+ JRST BKMM2
+BKFND: CLEARM BOOKF3
+ MOVEM A,BKTM1
+ LDB I,[420100,,A]
+BKMM2: MOVEI A,BKME ;RET MOVE NO IN C THAT CORRESP TO STANDARD MOVE IN A
+ PUSH P,BKF2R
+ MOVEM A,BKF2R
+ MOVEM P,BKTM2
+ PUSHJ P,LMG
+ ERRTTY [ASCII /LMG RETURNED!/]
+
+BKME: HRRZ A,PMVORG
+ AOS A
+ SKIPGE BOOKF3
+ JRST BKMM1
+ LDB T1,[MPC,,BKTM1]
+ LDB T2,[MPTO,,BKTM1]
+ MOVEI C,0
+BKMEL: CAIN A,1(P)
+ JRST BKME5
+ LDB D,[300,,BKTM1]
+ LDB B,[170300,,(A)]
+ CAIN D,3
+ JRST BKMEL2
+ CAME B,D
+ JRST BKMEL1
+BKMEL2: HRRZ B,(A)
+ ANDI B,177
+ CAME B,T2
+ JRST BKMEL1
+ HLRZ B,(A)
+ CAMN B,T1
+ JRST BKME4
+BKMEL1: ADDI A,NWDPM
+ AOJA C,BKMEL
+
+BKME4: MOVE P,BKTM2
+ POP P,BKF2R
+ MOVE A,BKTM1
+ JRST POPJ1
+
+BKME5: MOVE P,BKTM2
+ POP P,BKF2R
+ MOVE A,BKTM1
+ POPJ P,
+
+BKMM1: REPEAT NWDPM,ADD A,BKTM3
+ CAIL A,1(P)
+ ERRTTY [ASCII /MOVE NUMBER TOO HIGH--BKMM!/]
+ MOVE B,(A)
+ JRST BKME5
+
+BKME3: PUSH P,C
+ MOVEI A,75
+ PUSHJ P,BKPUTI
+ POP P,C
+ SUBI C,75
+ JRST BKME2
+]
+
+
+;;;DRAW
+ADRAW: MOVEI B,TYO
+ PUSHJ P,GLV
+ SKIPE MACCLR
+ MOVNS T1
+ MOVE T2,PLYN
+ CAIG T2,20
+ JRST ADRWD
+ CAIG T2,50
+ CAMG T1,[-105]
+ SKIPA
+ JRST ADRWD
+ CAIL T1,105
+ JRST ADRWD
+ SOUT [ASCII / ACCEPT !/]
+ POPJ P,
+
+ADRWD: SOUT [ASCII / DECLINE !/]
+ POPJ P,
+
+GLV: MOVEI T1,0
+ MOVE T2,GAMP ;RETURN LAST POS VAL IN T1
+GLV1: CAIN T2,GAME-1
+ POPJ P,
+ SKIPGE T1,GAMEV-GAME(T2)
+ SOJA T2,GLV1
+ HRRES T1
+ POPJ P,
+
+IFE DECTS,[
+IFN DEC-TS, PILPT: POPJ P,
+IFN TS,[PILPT: CAIL A,40
+ AOS LINEPOS
+ CAIN A,11
+ JRST PILPTB
+ CAIE A,15
+ JRST PILPT1
+ SKIPN ALNBP
+ JRST PILPT2
+PILPT4: MOVEI A,40
+ PUSHJ P,PILPT1
+ AOS A,LINEPOS
+ CAMLE A,AUXLNP
+ JRST PILPT7
+ CAML A,AUXLNP
+ JRST PILPT3
+ JRST PILPT4
+
+PILPT7: MOVEI A,15
+ PUSHJ P,PILPT1
+ MOVEI A,12
+ PUSHJ P,PILPT1
+ CLEARM LINEPOS
+ JRST PILPT4
+
+PILPT3: CLEARM LINEPOS
+PILPT6: ILDB A,ALNBP
+ JUMPE A,PILPT5
+ PUSHJ P,PILPT1
+ CAIE A,15
+ JRST PILPT6
+ POPJ P,
+
+PILPTB: PUSH P,A
+ MOVE A,LINEPOS
+ ANDCMI A,7
+ ADDI A,10
+ MOVEM A,LINEPOS
+ POP P,A
+ JRST PILPT1
+
+PILPT5: CLEARM ALNBP
+ MOVEI A,15
+PILPT2: CLEARM LINEPOS
+PILPT1: .IOT LPTC,A
+ POPJ P,
+
+ALNBP: 0 ;BYTE PNTR AUX LPT
+AUXLNP: 0 ;COL # TO START AUX LPT
+AUXLPP: 0 ;BYTE PNTR (INPUT)
+AUXLPB: BLOCK 75. ;BUFFER FOR HOLDING CRUFT
+
+AUXLRS: SKIPN ALNBP
+ JRST AUXLR1
+ PUSH P,A
+ MOVEI A,15
+ PUSHJ P,PILPT
+ POP P,A
+ JRST AUXLRS
+
+AUXLR1: MOVEM A,AUXLNP ;RESET AUX LINE LPT (START AT COL IN A)
+ MOVE A,[440700,,AUXLPB]
+ MOVEM A,AUXLPP
+ MOVEM A,ALNBP
+ POPJ P,
+
+AUXLPT: CAIE A,12
+ IDPB A,AUXLPP
+ PUSH P,A
+ PUSH P,AUXLPP
+ MOVEI A,0
+ IDPB A,AUXLPP
+ POP P,AUXLPP
+ POP P,A
+ POPJ P,
+]
+]
+
+IFN DECTS,[
+PILPT: SKIPN LPTINT
+ POPJ P,
+ AOS LINEPOS
+ CAIN A,15
+ SETZM LINEPOS
+ SOSG LPTO+2
+ OUTPUT LPTC,
+ IDPB A,LPTO+1
+ POPJ P,
+]
+
+;;MISC
+ASPOT: SKIPN PLYN ;SETS ODDS FROM STRING ARGUMENT AFTER RESETING
+ JRST ASPOT1
+ PUSHJ P,UNMOVE ;P N B R Q FLUSH KBP QN QB QR Q FOR SIDE SET TO
+ JRST ASPOT ;V CHANGES SIDE. INITIALLY WHITE
+ASPOT1: PUSHJ P,BDINI ;R ALSO MOVES QRP-R3
+IFN DSPLY, PUSHJ P,DISUP
+ CLEARM TMSPOT
+ MOVE Q,[TMSPOT,,TMSPOT+1]
+ BLT Q,TMSPOT+3
+ MOVE Q,[440700,,TMSPOT]
+ SKIPE GME
+ JRST ASPOTX
+ SETZM ASSIDE
+ASPOT2: PUSHJ P,RCHA
+ CAIGE A,40
+ JRST ASPOTX
+ CAIN A,40
+ JRST ASPOT2
+ MOVEI T1,0
+IRPC X,,BNPQRV
+ CAIN A,"X
+ JRST ASPOT!X
+ TERMIN
+ASPOT3: PUSHJ P,QMTYO
+ JRST ASPOT2
+
+ASSIDE: 0
+
+SPOTSW: ASCII /SPOT /
+TMSPOT: BLOCK 4
+
+ASPOTR: SKIPE ASSIDE
+ JRST ASPOT4
+ MOVEI T1,4*BW+8
+ MOVEM T1,PIECEL-PIECE+WKR-1
+ SETZM BOARD+3*BW+8
+ MOVEI T1,WKR-1
+ MOVEM T1,BOARD+4*BW+8
+ MOVEI T1,3
+ MOVEM T1,PRANK+WKR-1-PIECE
+ MOVEM T1,RPRANK+WKR-1-PIECE
+ AOS NMOVES+WKR-1-PIECE
+ JRST ASPOT5
+
+ASPOT4: MOVEI T1,7*BW+8
+ MOVEM T1,PIECEL-PIECE+WKR-1+BPV-1
+ MOVEI T1,3
+ MOVEM T1,RPRANK+WKR-1-PIECE+BPV-1
+ MOVEI T1,6
+ MOVEM T1,PRANK+WKR-1-PIECE+BPV-1
+ SETZM BOARD+8*BW+8
+ MOVEI T1,WKR-1+BPV-1
+ MOVEM T1,BOARD+7*BW+8
+ AOS NMOVES+WKR-1+BPV-1-PIECE
+ASPOT5: MOVEI T1,WQR-
+ASPOTP: ADDI T1,-
+ASPOTB: ADDI T1,-
+ASPOTN: ADDI T1,-
+ASPOTQ: ADDI T1,
+ SKIPE ASSIDE
+ ADDI T1,BPV-1
+ SKIPN T2,PIECEL-PIECE(T1)
+ JRST ASPOT3
+ IDPB A,Q
+ MOVN A,PVALUE-PIECE(T1)
+ CAIE T1,WKR-6+BPV-1
+ CAIN T1,WKR-6
+ JRST ASPOT8
+ LDB W,[430100,,(T1)]
+ SOS @PCCNTP(W)
+ SKIPE ASSIDE
+ ADDM A,PCBAL+1
+ SKIPL ASSIDE
+ ADDM A,PCBAL
+ SOS @NPCP1-PIECE(T1)
+ASPOT9: SOS @NPCPT-PIECE(T1)
+ SETZM PIECEL-PIECE(T1)
+ SETZM BOARD(T2)
+ SETZM UBKF ;BOOK BITES WITH ODDS
+IFN DSPLY, PUSHJ P,DISUP
+ JRST ASPOT2
+
+ASPOTV: IDPB A,Q
+ SETCMM ASSIDE
+ JRST ASPOT2
+
+ASPOTX: PUSHJ P,.CAT1
+ JRST ARS1
+
+ASPOT8: SKIPE ASSIDE
+ ADDM A,PNBAL+1
+ SKIPL ASSIDE
+ ADDM A,PNBAL
+ JRST ASPOT9
+
+ARESET: CLEARM HACKMX
+ CLEARM HACKMN
+ SKIPL GME
+ JRST ARS2
+ SETZM UNPLYN
+ CLEARM HSTB
+ MOVE A,[HSTB,,HSTB+1]
+ BLT A,HSTB+HTNE-1
+ MOVE A,HASHSS
+ MOVEM A,HASHS
+ARS3: MOVE A,PLYN
+ CAMN A,UNPLYN
+ JRST ARS0
+ PUSHJ P,UNMOVE
+ JRST ARS3
+
+UNPLYN: 0
+
+ARS0: SKIPE PLYN
+ JRST ARS1
+ CLEARM TMSPOT
+ SETZM GHSD
+ SETZM GHLOC
+ PUSHJ P,BDINI
+ARS1: SETOM CLKCOK
+ CLEARM WCLOCK
+ CLEARM BCLOCK
+ CLEARM QDCOF
+ CLEARM PINVF+WKING+1-PIECE
+ CLEARM PINVF+BKING+1-PIECE
+IFN TS,[
+ CLEARM WCLOCK+1
+ CLEARM BCLOCK+1
+]
+IFE DECTS,[
+ MOVEI A,OCLOCK
+ MOVEM A,CURCLK
+]
+ MOVEI A,MNLPA
+ MOVEM A,GSW
+ PUSHJ P,.CAT
+IFN BOOK,CLEARM BKLFT
+ POPJ P,
+
+ARS2: PUSHJ P,GETNUM
+ LSH C,1
+ MOVEM C,UNPLYN
+ JRST ARS3
+
+.PNT: 0
+PNT: PUSHJ P,GETNUM
+PNT2: MOVEM C,.PNT
+ MOVEI A,PIALPT
+ SKIPN C
+ MOVEI A,TYO
+ SKIPGE C
+ MOVEI A,PPA
+ MOVEM A,PNTS
+IFN TS,[
+ JUMPLE C,PNT3
+ .OPEN ALPTC,LPTF
+ JRST PNT4
+ POPJ P,
+
+PIALPT: .IOT ALPTC,A
+ POPJ P,
+
+PNT4: SETZM .PNT
+ MOVEI A,TYO
+ MOVEM A,PNTS
+ JRST GERR
+
+PNT3: .CLOSE ALPTC,
+] JRST PSRET
+
+IFE TS, PIALPT==PILPT
+
+PNTS: TYO
+
+
+ACLEAR: PUSHJ P,ARESET ;CLEAR BOARD COMPLETELY
+ MOVE B,[-NPC,,1]
+ACLR1: MOVE A,PIECEL(B)
+ JUMPE A,ACLR2
+ CLEARM BOARD(A)
+ CLEARM PIECEL(B)
+ SOS @NPCPT(B)
+ SOS @NPCP1(B)
+ LDB I,[430100,,PIECE(B)]
+ MOVN T2,PVALUE(B)
+ SKIPL RPIECE(B)
+ SKIPGE LMGT(B)
+ JRST .+2
+ SOS @PCCNTP(I)
+ SKIPL LMGT(B)
+ XCT MMT4+1(I)
+ SKIPGE LMGT(B)
+ XCT MMT6+1(I)
+ SKIPGE RFPCS(B)
+ XCT MMT5+1(I)
+ACLR2: AOBJN B,ACLR1
+.CAT1X: PUSHJ P,ATEV
+ JRST .CAT1
+
+AWPOS: PUSHJ P,AWRT
+ MOVEI B,UWD
+ SOUT [ASCIZ \RESET
+RPOS
+\]
+ PUSHJ P,BDOUT
+ LDB I,[100,,PLYN]
+ XCT WSIDE(I)
+ JRST AFILR1
+
+WSIDE: SOUT [ASCIZ /SIDE W
+/]
+ SOUT [ASCIZ /SIDE B
+/]
+
+ARPOS: SKIPE PLYN
+ JRST QMTYO
+ SETOM GME
+ PUSHJ P,ACLEAR
+ MOVEI A,7
+ MOVEM A,RKN
+ARPOS2: MOVEI A,7
+ MOVEM A,FNN
+ARPOS1: PUSHJ P,RRSYL
+ MOVE A,RKN
+ IMULI A,BW
+ ADD A,FNN
+ ADDI A,2*BW+1
+ PUSHJ P,ARPUT
+ SKIPGE GME
+ JRST ARPOS3
+ SOSL FNN
+ JRST ARPOS1
+ PUSHJ P,TYI
+ARPOS3: SOSL RKN
+ JRST ARPOS2
+ JRST .CAT1X
+
+RRSYL: MOVE C,[440600,,B]
+ CLEARB B,GME
+RRSYL1: PUSHJ P,TYI
+ CAIN A,12
+ JRST RRSYL1
+ CAIG A,40
+ JRST RRSYL2
+ SUBI A,40
+ TLNE C,770000
+ IDPB A,C
+ JRST RRSYL1
+
+RRSYL2: CAIN A,15
+ SETOM GME
+ JUMPE B,CPOPJ
+ MOVSI C,ARPS1-ARPS2
+RRSYL3: CAMN B,ARPST(C)
+ POPJ P,
+ AOBJN C,RRSYL3
+ MOVEI B,0
+ POPJ P,
+
+ARPUT: JUMPE B,CPOPJ
+ LDB Q,[100,,PLYN]
+ MOVE B,ARPS1(C)
+ TLNE B,40000
+ JRST APUT5 ;GHOST
+ TLNE B,100000
+ POPJ P,
+ TLNE B,200000
+ JRST APUT4 ;BISHOP
+APUT3: MOVE D,(B)
+ SKIPN PIECEL-PIECE(D)
+ JRST APUT1 ;FOUND PLACE TO PUT IT
+ JUMPL D,APUT2
+ AOJA B,APUT3
+
+APT2T: CAIN B,ARWPP+7
+ CAMN B,[SETZ ARBPP+7]
+
+APUT2: SKIPL RPIECE-PIECE(D)
+ XCT APT2T(I)
+ ERRTTY [ASCIZ /CANT PUT PIECE /]
+ LDB I,[430100,,(D)]
+ MOVE B,ARPS1+10.(I) ;PUT PAWN
+ PUSHJ P,APUT3
+ MOVEI B,-PIECE(D)
+ SKIPE @GAMP
+ PUSHJ P,ASIDEB
+APUTC: MOVEI A,-2(C)
+ LSH A,-1
+ MOVE D,PIECEL(B)
+ DPB B,[MPC,,A]
+ DPB D,[MPTO,,A]
+ DPB I,[420100,,A]
+ SETOM DBSUPS
+ PUSH P,ICSW
+ SETZM ICSW
+ PUSH P,Q
+ PUSHJ P,MMS5P
+ ERRTTY [ASCIZ /PUT?/] ;SHOULD BE SKIPPED OVER
+ POP P,Q
+ POP P,ICSW
+ SETZM DBSUPS
+ SETOM MOVST
+ LDB A,[100,,PLYN]
+ CAMN A,Q
+ POPJ P,
+ASIDEB: AOS A,GAMP
+ SETZM (A)
+ SETZM GHK1-GAME(A)
+ MOVSI ZR,(SETZ)
+ MOVEM ZR,GAMEV-GAME(A)
+ AOS PLYN
+ POPJ P,
+
+APUT1: HRRZM A,PIECEL-PIECE(D)
+ HRRZM D,BOARD(A)
+ LDB T2,[BFILE,,BPREL(A)]
+ MOVEM T2,PFILE-PIECE(D)
+ LDB T2,[BRANK,,BPREL(A)]
+ MOVEM T2,PRANK-PIECE(D)
+ SKIPGE (D)
+ MOVE T2,REVERS(T2)
+ MOVEM T2,RPRANK-PIECE(D)
+ AOS @NPCPT-PIECE(D)
+ AOS @NPCP1-PIECE(D)
+ MOVE T2,PVALUE-PIECE(D)
+ LDB I,[430100,,(D)]
+ CLEARM NMOVES-PIECE(D)
+ SKIPGE LMGT-PIECE(D)
+ JRST APUT6
+ XCT MMT4+1(I)
+ SKIPL RPIECE-PIECE(D)
+ AOS @PCCNTP(I)
+APUT7: SKIPGE RFPCS-PIECE(D)
+ XCT UMT5+1(I)
+ SKIPGE RPIECE-PIECE(D)
+ AOS NMOVES-PIECE(D) ;NO CASTLING
+ SETZM UBKF ;BOOK LOSES
+ POPJ P,
+
+APUT6: XCT MMT6+1(I)
+ XCT APUTO(I) ;SKIP IF PAWN ON SECOND RANK
+ AOS NMOVES-PIECE(D)
+ JRST APUT7
+
+APUTO: CAIL A,4*BW
+ CAIGE A,8*BW
+
+APUT4: LDB D,[BCOLR,,BPREL(A)] ;SELECT APPRO COLOR B
+ ADD B,D
+ JRST APUT3
+
+APUT5: LDB D,[BRANK,,BPREL(A)]
+ SKIPGE B
+ MOVE D,REVERS(D)
+ CAIN D,3
+ SKIPE GHLOC
+ ERRTTY [ASCIZ /CANT PUT GHOST/]
+ HRRZM A,GHLOC
+ MOVEI D,1
+ SKIPGE B
+ MOVNI D,1
+ MOVEM D,GHSD
+ SETOM MOVST ;DONT STORE MOVE FOR GHOST
+ POPJ P,
+
+APUT: PUSHJ P,RRSYL
+ JUMPE B,QMTYO
+ PUSH P,B
+ PUSH P,C
+ CLEARM SIDE
+ PUSHJ P,GSYL
+ POP P,C
+ POP P,B
+ SKIPGE BOARD(A)
+ MOVSS A
+ SKIPE BOARD(A)
+ JRST QMTYO
+ SETZM MOVST
+ PUSHJ P,ARPUT
+ SKIPE MOVST
+ JRST .CAT1X
+ SKIPE @GAMP
+ PUSHJ P,ASIDEB
+ MOVEI B,-PIECE(D)
+ MOVE D,PIECEL(B)
+ DPB B,[MPC,,@GAMP]
+ DPB D,[MPTO,,@GAMP]
+ DPB I,[420100,,@GAMP]
+ LDB A,[100,,PLYN]
+ CAME A,Q
+ PUSHJ P,ASIDEB
+ JRST .CAT1X
+
+MOVST: 0 ;-1 IF MOVE ALREADY STORED
+
+ARPST: SIXBIT /WK/
+ SIXBIT /BK/
+ SIXBIT /WQ/
+ SIXBIT /BQ/
+ SIXBIT /WR/
+ SIXBIT /BR/
+ SIXBIT /WB/
+ SIXBIT /BB/
+ SIXBIT /WN/
+ SIXBIT /BN/
+ SIXBIT /WP/
+ SIXBIT /BP/
+ SIXBIT /--/
+ SIXBIT /**/
+ SIXBIT /WG/
+ SIXBIT /BG/
+
+ARPS1: ARWKP
+ SETZ ARBKP
+ ARWQP
+ SETZ ARBQP
+ ARWRP
+ SETZ ARBRP
+ 200000,,ARWBP
+ 600000,,ARBBP
+ ARWNP
+ SETZ ARBNP
+ ARWPP
+ SETZ ARBPP
+ 100000,,
+ 100000,,
+ 40000,,
+ 440000,,
+
+ARPS2:
+ARWKP: SETZ WKING
+ARBKP: SETZ BKING
+ARWQP: SETZ WKING+1
+ARBQP: SETZ BKING+1
+ARWRP: WKR
+ SETZ WQR
+ARBRP: BKR
+ SETZ BQR
+ARWBP: SETZ WKR+2 ;WHITE SQ B
+ SETZ WQR-2 ;BLACK SQ B
+ARBBP: SETZ BQR-2 ;WHITE SQ B
+ SETZ BKR+2 ;BLACK SQ B
+ARWNP: WKR+1
+ SETZ WQR-1
+ARBNP: BKR+1
+ SETZ BQR-1
+ARWPP: REPEAT 7,PIECE+1+.RPCNT
+ SETZ PIECE+1+7
+ARBPP: REPEAT 7,PIECE+NPCS+1+.RPCNT
+ SETZ PIECE+NPCS+1+7
+
+RKN: 0
+FNN: 0
+
+TXSID: "W
+ "B
+ "W
+
+ASIDE: LDB I,[100,,PLYN]
+ SKIPE EQSGNF
+ JRST ASIDEA
+ PUSHJ P,RCHA
+ CAIN A,40
+ JRST .-2
+ CAMN A,TXSID(I)
+ POPJ P,
+ CAME A,TXSID+1(I)
+ JRST RMERR
+ JRST ASIDEB
+
+ASIDEA: MOVE A,TXSID(I)
+ PUSHJ P,TYO
+ POPJ P,
+
+UNPUT: JUMPE B,POPIJ
+ SKIPE ICSW
+ PUSHJ P,MMIC1
+ SOS @NPCPT(B)
+ SOS @NPCP1(B)
+ SETZM BOARD(T)
+ SETZM PIECEL(B)
+ MOVN T2,PVALUE(B)
+ SKIPL RPIECE(B)
+ SKIPGE LMGT(B)
+ JRST .+2
+ SOS @PCCNTP(I)
+ SKIPL LMGT(B)
+ XCT MMT4+1(I)
+ SKIPGE LMGT(B)
+ XCT MMT6+1(I)
+ SKIPGE RFPCS(B)
+ XCT MMT5+1(I)
+ JRST POPIJ
+
+
+WALLP: -1
+AWALLP: PUSHJ P,GETNUM
+AWALPR: MOVEM C,WALLP
+IFE TS+DECTS, JRST PSRET
+IFE DECTS,[
+IFN TS,[ JUMPE C,AWALP1
+ JUMPL C,AWALP3 ;TO DISK
+WALP2: .OPEN LPTC,LPTF
+ SKIPA
+ POPJ P,
+ SETZM WALLP
+ JRST GERR
+
+AWALP3: .OPEN LPTC,LPTDSK
+ JRST GERR
+ POPJ P,
+
+LPTDSK: (1+SIXBIT /DSK/)
+ SIXBIT /WALL/
+ SIXBIT />/
+
+LPTF: (1+SIXBIT /LPT/)
+ SIXBIT /WALL/
+ SIXBIT /PAPER/
+
+AWALP1: .CLOSE LPTC,
+ JRST PSRET
+]
+
+PPA: IFE DEC-TS,[SKIPE WALLP
+ PUSHJ P,PILPT]
+UWD:
+IFE TS,[
+ PUSHJ P,UWR"
+ PTTY [ASCII /TAPE FULL!/]
+ POPJ P,
+
+UWRB: PUSHJ P,.UWR"
+ PTTY [ASCII /TAPE FULL!/]
+ POPJ P,
+]
+IFN TS,[
+UWRB: .IOT UTYOC,A
+ POPJ P,
+]
+]
+
+IFN DECTS,[
+ SETZM LPTINT
+ JUMPE C,AWALP1
+ INIT LPTC,1
+ SIXBIT /LPT/
+ XWD LPTO,0
+ JRST GERR
+ ENTER LPTC,LPTFF
+ JRST GERR
+ OUTBUF LPTC,2
+ SETOM LPTINT
+ JRST PSRET
+AWALP1: RELEASE LPTC,
+ JRST PSRET
+
+LPTINT: 0
+LPTO: 0
+LPTFF: SIXBIT /WALLPA/
+ SIXBIT /PER/
+ 0
+ 0
+
+PPA: SKIPE WALLP
+ PUSHJ P,PILPT
+UWD: SKIPN UTINT
+ POPJ P,
+ SOSG UTYOB+2
+ OUTPUT UTYOC,
+ IDPB A,UTYOB+1
+ POPJ P,
+]
+
+;;;TRACE
+
+SATR1: PUSHJ P,GETNUM
+ SKIPE C
+ MOVEI C,1
+ CAMN C,SATRC
+ POPJ P,
+ MOVEM C,SATRC
+ MOVEI I,4
+ MOVEM I,TRCSW1
+ JUMPE C,ASTRC3 ;REMOVE TRACE
+ MOVE R,[-TSAPL,,TSAPTC-1]
+ JRST ATRL
+
+APTRCE: MOVEI I,3 ;TRACE POSITIONAL FACTORS IN PMG
+ JRST APTR1
+
+ALTRCE: CLEARB I,TRCSW1 ;TRACE ALL MOVES
+ MOVEI A,0
+ JRST ALTRC1
+
+ATRACE: SKIPL GME
+ TDZA I,I
+ MOVEI I,1
+APTR1: MOVEM I,TRCSW1
+ SKIPGE GME
+ JRST ASTRC5 ;TRACE STATEV
+ PUSHJ P,RMOVE
+ JRST MNLP2
+ALTRC1: LDB T1,[MPC,,A] ;ENTRY ON AFTER (PMG TRACE)
+ MOVEM T1,TPIECE
+ LDB T1,[MPTO,,A]
+ MOVEM T1,TSQ
+ MOVE I,TRCSW1
+ASTRC1: MOVE R,[-TPCHL,,TPATCH-1] ;ENTRY ON AFTER HACK STATEV (STVTR1)
+ AOSE TSSW
+ ERRTTY [ASCIZ /ALREADY PATCHED?/]
+ATRL: MOVE T1,ATRTT1(I)
+ATRL1: HLRZ T2,@ATRTT2(I)
+ LDB C,[270400,,-1(T2)] ;AC OF INST TO BE PATCHED
+ CAIE I,4 ;DONT HACK UUO'S FOR SA TRACE
+ CAME C,ATSAC(I) ;SUMAC FOR THIS FLAVOR TRACE?
+ JRST ATRL1B
+ATRL1A: LDB C,[331100,,-1(T2)] ;RIGHT AC, CAN INST WIN?
+ MOVSI D,-LTUUT
+ CAMN C,TUUT(D)
+ JRST ATRL2 ;YES REPLACE WITH APPRO UUO
+ AOBJN D,.-2
+ATRL1B: MOVSI C,(12000,,) ;UUO 12 JUST PRINTS HACK
+ HRRI C,@ATRTT2(I) ;INSERT PATCH
+ PUSH R,C
+ MOVSI D,(JRST)
+ HRR D,R
+ EXCH D,-1(T2)
+ PUSH R,D ;STORE PATCHED INST IN PATCH SPACE
+ ADD T2,[JRST]
+ PUSH R,T2 ;STORE RETURN
+ AOS T2
+ LDB C,[410300,,D]
+ CAIE C,3
+ CAIN C,6
+ PUSH R,T2 ;PATCHED INST MIGHT SKIP STORE RETURN+1
+ATRL3: AOBJN T1,ATRL1
+ CAIN I,4
+ POPJ P,
+ MOVE T1,ATSAC(I)
+ MOVEM T1,TRSAC ;STORE SUM AC FOR UUO HACKER
+ SKIPL ATRTT2(I)
+ JRST ASTRC4 ;DONT INSERT P.M.G. PATCHES (HACK STATEV INSTEAD)
+ MOVE T1,[JRST ATRSS1]
+ EXCH T1,TRS1
+ MOVEM T1,ITRS1
+ MOVE T1,[JRST ATRSS2]
+ EXCH T1,TRS2
+ MOVEM T1,ITRS2
+ MOVE T1,[JRST ATRSS3]
+ EXCH T1,TRS3
+ MOVEM T1,ITRS3
+
+
+IFN DSPLY, PUSHJ P,DISINS
+ MOVE A,[DBS1,,SDBS1]
+ BLT A,SDBS2
+ SETOM DBS1
+ CLEARM DBS2
+ JUMPL I,PMAF4 ;WANT TO PICK UP IN PMG
+ PUSH P,NHSW
+ SETOM NHSW ;DONT CLOBBER HT
+ PUSHJ P,HACK1
+ POP P,NHSW
+AFTR3: MOVS A,[DBS1,,SDBS1]
+ BLT A,DBS2
+ MOVE I,TRCSW1
+ MOVE T1,ITRS1
+ MOVEM T1,TRS1
+ MOVE T1,ITRS2
+ MOVEM T1,TRS2
+ MOVE T1,ITRS3
+ MOVEM T1,TRS3
+ASTRC3: MOVE T1,ATRTT1(I)
+AUTR1: HLRZ T2,@ATRTT2(I) ;UNTRACE
+ LDB C,[331100,,-1(T2)]
+ CAIN C,JRST_-27.
+ JRST AUTR2
+ MOVE C,TUUT-4(C)
+ DPB C,[331100,,-1(T2)]
+AUTR3: AOBJN T1,AUTR1
+ CAIN I,4
+ POPJ P,
+ SETOM TSSW
+ IFN DSPLY,PUSHJ P,DISCLG
+ SETOM DISSUP ;SO DISPLAY NOT CLOBBERED
+ POPJ P,
+
+ASTRC5:; PUSHJ P,VALPRE ;INITIALIZE BUGGER FACTOR SWITCHES
+ JRST ASTRC1
+
+AUTR2: HRRZ C,-1(T2)
+ MOVE C,1(C)
+ MOVEM C,-1(T2)
+ JRST AUTR3
+
+
+ATRL2: MOVEI D,4(D)
+ DPB D,[331100,,-1(T2)]
+ JRST ATRL3
+
+PMAF4: MMRSAC ;RETURN TO PMG
+ JRST PMAF2
+
+ATRSS1: SETOM TPSW ;IS THIS THE MOVE WE WANT?
+ HRRZ T1,B
+ SKIPN TSQ
+ RC *P!B TO *S!A,JRST ITRS1 ;WANT ALL
+ CAMN A,TSQ
+ CAME T1,TPIECE
+ CLEARM TPSW
+ SKIPE TPSW
+TM: JFCL ;BREAKPOINT HERE TO STOP PMG ON TRACED MOVE
+ITRS1: 0
+ JRST TRS1 1
+ JRST TRS1 2
+
+ATRSS2: CLEARM TPSW
+ HRRZ T1,B
+ SKIPE TPIECE
+ CAMN T1,TPIECE
+TP: SETOM TPSW ;BKPT HERE TO STOP ON TRACED PIECE
+ITRS2: 0
+ JRST TRS2+1
+ JRST TRS2+2
+
+ATRSS3: PUSH P,B
+ PUSH P,T1
+ PUSH P,T2
+ MOVE B,TRPSW
+ SKIPL TPSW
+ JRST ITRS3A
+ SETOM ITRS3T
+ MOVE T1,[-EGNNMS+BGNS,,1]
+ITRS3C: SKIPN BGNS-1(T1)
+ JRST ITRS3E
+ AOS T2,ITRS3T
+ TRNN T2,7
+ SOUT [ASCIZ /
+/]
+ SOUT @GANNTB-1(T1)
+ MOVE T2,BGNS-1(T1)
+ ISOUT 1,[.ASCII ? *U!T2 ?]
+ITRS3E: AOBJN T1,ITRS3C
+ SOUT [ASCIZ /
+/]
+ MOVEI T1,MVDST
+ITRS3B: CAML T1,MVDSP
+ JRST ITRS3A
+ ISOUT [.ASCII ?*V!T1?]
+ AOS T1
+ AOJA T1,ITRS3B
+
+ITRS3T: 0
+
+ITRS3A: POP P,T2
+ POP P,T1
+ POP P,B
+ SKIPN TSQ
+ JRST ITRS3D
+ITRS3: 0
+ JRST TRS3 1
+ JRST TRS3 2
+
+ITRS3D: MMSAVA
+IFN DSPLY,[
+ PUSHJ P,DISCLG
+ PUSHJ P,TYI
+ PUSHJ P,DISINS
+]
+ MMRSAC
+ JRST ITRS3
+
+ASTRC4: SETOM TPSW
+IFN DSPLY, PUSHJ P,DISINS
+ CAIL I,2
+ POPJ P,
+ PUSHJ P,STINI
+ LDB I,[100,,PLYN]
+ PUSHJ P,STVL4
+ATRAF1:RS TOTAL SUPER STATIC POSITION EVALUATION,MOVE I,TRCSW1
+ JRST ASTRC3
+TPIECE: 0 ;PIECE MAKING MOVE TO BE TRACED
+TSQ: 0 ;SQUARE ITS MOVING TO
+TSSW: -1 ;-1 NORMAL 0 OR > CLOBBERED
+TPSW: 0 ;-1 IF DESIRED MOVE IN PROGRESS
+TRCSW1: 0 ;0 TRACING P MOVE GEN (TACTICAL) 1 STATEV 2 AFTER HACK 3 P.M.G. (POSITIONAL) 4 SURPRISE TRACE
+TRSAC: 0 ;AC RESULTS BEING SUMMED IN (FOR UUOH HACKER)
+
+TPCHL==300
+TPATCH: BLOCK TPCHL ;SPACE FOR PATCHES TRACE PUTS IN
+
+TSAPL==200
+TSAPTC: BLOCK TSAPL ;SEPERATE PATCH SPACE FOR SA TRACE
+
+TUUT: MOVEI_-27. ;UUO 4
+ ADDI_-27.
+ SUBI_-27.
+ MOVE_-27.
+ ADD_-27.
+ SUB_-27.
+
+LTUUT==.-TUUT
+
+
+ATRTT1: -LTRT,,
+ -LSTRT,,
+ -LSTRT,,
+ -LPTRT,,
+ -LQTRT,,
+
+ATRTT2: SETZ TRT(T1) ;4.9 INSERT P.M.G. PATCHES ELSE STATEV PATCHES
+ STRT(T1)
+ STRT(T1)
+ SETZ PTRT(T1)
+ QTRT(T1)
+
+ATRTT3: TRT(C)
+ STRT(C)
+ STRT(C)
+ PTRT(C)
+ QTRT(C)
+
+ATSAC: R ;AC RESULTS BEING SUMMED IN
+ R
+ R
+ W
+ R
+
+STINI: PUSHJ P,CORCMP ;COMPUTE WPAS, BPAS FOR ALL SQS
+ PUSHJ P,CDVLV
+ MOVEM S,WTDLVL
+ MOVEM T1,BTDLVL
+ SUB S,T1
+ MOVEM S,PDVLV
+ CLEARM CPCDVL
+ PUSHJ P,STBCC
+ MOVEM T1,CTVLVW
+ MOVEM W,CTVLVB
+ SUB T1,W
+ MOVEM T1,CTVLVN
+ MOVE T,[-LLMGPL,,LMGPDL-1]
+ CLEARM PMV+1
+ MOVE A,[PMV+1,,PMV+2]
+ BLT A,PMV+NPC+1-1
+ PUSHJ P,CTMAV ;COMPUTE PMV ARY
+ PUSHJ P,MVNCC ;ADD IT UP
+ MOVEM T1,CTMLVW
+ MOVEM W,CTMLVB
+ SUB T1,W
+ MOVEM T1,CTMLVN
+ CLEARM CPCMVL
+ PUSHJ P,EKSF
+ MOVE S,KSAEXP
+ MOVEM S,PWKSF
+ MOVE S,KSAEXP+1
+ MOVEM S,PBKSF
+ POPJ P,
+
+;;MISC1
+IFE DECTS,[
+TIMIN: CLEARM TANS
+ SETOM TIMNF1 ;TYPE IN TIME IN FORM H:M:S.T
+
+TIM1: MOVEI C,0
+TIM2: PUSHJ P,RCHA
+ CAIN A,":
+ JRST TIM5
+ CAIN A,".
+ JRST TIM3
+ CAIL A,"0
+ CAILE A,"9
+ JRST TIM4
+ IMULI C,10.
+ ADDI C,-"0(A)
+ JRST TIM2
+
+TIM4: ADDB C,TANS
+ POPJ P,
+
+TIM5: AOSN TIMNF1
+ IMULI C,60.
+ IMULI C,60.
+TIM3: IMULI C,10.
+ ADDM C,TANS
+ JRST TIM1
+
+TANS: 0
+TIMNF1: 0
+
+ASETCL: PUSHJ P,RCHA
+ MOVEI T1,0
+ CAIN A,"B
+ MOVEI T1,BCLOCK
+ CAIN A,"W
+ MOVEI T1,WCLOCK
+ JUMPE T1,GERR
+ PUSH P,T1
+ PUSHJ P,TIMIN
+ POP P,T1
+ MOVEM C,(T1)
+ JRST PSRET
+î]
+
+IFN DSPLY,[
+DISPG: MOVEI B,DISAD
+ JRST .+2
+]
+APG: MOVE B,PNTS ;OUTPUT GAME SO FAR
+ CLEARM PMRDF
+APG6: SETZB T, PGMCNT ;T IS LINE POS. INDICATOR
+IFE DEC,CAIE B,PILPT
+ CAIN B,PPA
+ PUSHJ P,FORMF
+ PUSHJ P,DCRR
+ MOVEI S,GAME-1
+APG5: SKIPL QTF
+ CAMN S,GAMP
+ JRST DCRR
+ LDB I,[420100,,1(S)]
+ LDB A,[MPO,,1(S)]
+ JUMPE A,PGPUT
+APG10: XCT PGPOS1(I)
+ SOUT [ASCIZ /SIDE W
+/]
+ SETZM T
+APG8: JUMPN T,APG4
+ MOVEI A,-GAME+3(S)
+ LSH A,-1
+ PUSHJ P,DPT
+ SKIPN DPTNC
+ PUSHJ P,DSPACE
+APG3: PUSHJ P,DSPACE
+ JUMPE I,APG4
+ SOUT [ASCIZ /SIDE B/]
+ SETOM T
+ SKIPE PMRDF
+ JRST APG9
+ MOVEI D,7
+ PUSHJ P,DSPACE
+ SOJGE D,.-1
+ JRST APG4
+APG9: PUSHJ P,DTAB
+APG4: MOVE C,1(S)
+ PUSHJ P,PMOVE
+ JUMPN T, APG2
+ SETOM T
+ SKIPE PMRDF
+ AOJA S,APG7
+ MOVE D,SPNDD
+ PUSHJ P,DSPACE
+ SOJGE D,.-1
+ AOJA S,APG1
+
+APG2: PUSHJ P,DCRR
+ SETZM T
+ AOJA S,APG5
+
+APG7: PUSHJ P,DTAB
+APG1: JRST APG5
+
+PGPUT: SKIPN C,1(S)
+ AOJA S,APG5
+ TRNN C,7
+ JRST PGPUT2
+ TRNN C,4
+ JRST APG10
+PGPUT2: CAILE S,GAME ;???
+ JRST PGPUT1
+ CAIL S,GAME
+ SKIPE (S)
+ SOUT [ASCIZ /CLEAR
+/]
+PGPUT1: SKIPE T
+ PUSHJ P,DCRR
+ SOUT [ASCIZ /PUT /]
+ LDB A,[MPC,,C]
+ LDB A,[PTID,,PIECE(A)]
+ SKIPE I
+ ADDI A,6
+ SOUT TXTB(A)
+ PUSHJ P,DSPACE
+ LDB A,[MPTO,,C]
+ MOVEI I,0 ;SQUARE FROM WHITES SIDE
+ PUSHJ P,SQOUT
+ JRST APG2
+
+PGMCNT: 0 ;PLY NUMBER OF MOVE BEING PRINTED IF KNOWN ELSE -1
+
+PGPOS1: JUMPE T,APG8
+ JRST APG8
+
+EPMOVE: SETOM PGMCNT
+EPMOV1: SETZM PMRDF
+PMOVE: SKIPL PGMCNT
+ AOS PGMCNT
+ MOVEI A,2
+ MOVEM A,SPNDD
+ LDB I,[420100,,C]
+ TRNE C,7
+ JRST PMOVE1
+PMOVE5: PUSHJ P,PMOVE6
+PMOVE9: SKIPN PMRDF
+ TRNN C,CHKBT
+ POPJ P,
+ SOS SPNDD
+ MOVEI A,"+
+ JRST (B)
+
+PMOVE6: LDB A,[MPC,,C]
+ PUSHJ P,PCOUTP
+ PUSHJ P,DSLASH
+ LDB A,[MPO,,C]
+ PUSHJ P,SQOUT
+ JUMPL C,PMOVE2
+ REPEAT 2,AOS SPNDD
+ MOVEI A,"-
+ PUSHJ P,(B)
+PMOVE3: LDB A,[MPTO,,C]
+ JRST SQOUT
+
+PMOVE2: MOVEI A,"*
+ PUSHJ P,(B)
+ LDB A,[MPTK,,C]
+ PUSHJ P,PCOUTP
+PMV2B: PUSHJ P,DSLASH
+ JRST PMOVE3
+
+PMOVE1: LDB D,[300,,C]
+ CAILE D,2
+ JRST PMOVE4
+ SKIPN PGMCNT
+ SOUT TXSIDE(I)
+ SOUT TYPMT-1(D)
+ MOVE A,TYPMT2-1(D)
+ ADDM A,SPNDD
+ JRST PMOVE9
+
+PMOVE4: CAIN D,3
+ JRST PMOVE7
+ PUSHJ P,PMOVE6
+ SOUT PROTXT-4(D)
+PMOVE8: REPEAT 2,SOS SPNDD
+ JRST PMOVE9
+
+ ASCIZ / EP/
+PROTXT: ASCIZ /=Q/
+ ASCIZ /=R/
+ ASCIZ /=B/
+ ASCIZ /=N/
+
+PMOVE7: MOVNI A,1
+ SKIPE PMRDF
+ DPB A,[MPTK,,C]
+ PUSHJ P,PMOVE6
+ SKIPE PMRDF
+ POPJ P,
+ MOVE A,[35200536]
+IFN DSPLY,[
+ CAIN B,DISAD
+ PUSHJ P,DISSIX
+ CAIE B,DISAD
+]
+ SOUT [ASCII /EP!/]
+ JRST PMOVE8
+
+SPNDD: 0
+
+PMRDF: 0 ;1 OUTPUT IN FORM READABLE BACK
+
+TXSIDE: ASCII /W !/
+ ASCII /B !/
+;0 ALL PCS
+;1 -1
+;2 1ST THING TYPED
+;3 2ND THING TYPED
+;PSTBM PMOVING ORGL PTAKEN DESTIN
+
+DEFINE PSTBM A,B,C,D
+ A_11+B_6+C_3+D
+TERMIN
+
+PMI==110300
+SMI==60300
+DPMI==30300
+DSMI==300
+
+PSTB: PSTBM 0,2,0,3 ;SQ SQ
+ PSTBM 0,2,3,1 ;SQ PC
+ PSTBM 2,1,0,3 ;PC SQ
+ PSTBM 2,1,3,1 ;PC PC
+ PSTBM 2,3,0,4 ;PC SQ SQ
+ PSTBM 2,3,4,1 ;PC SQ PC
+ PSTBM 2,0,3,4 ;PC PC SQ
+ -1 ;PC PC PC
+ -1 ;PC SQ SQ SQ
+ -1 ;PC SQ SQ PC
+ PSTBM 2,3,4,5 ;PC SQ PC SQ
+
+ REPEAT 17-<.-PSTB>,-1
+
+
+;;TTY
+IFE TS+DECTS,[
+IFE DEC,[
+TTYBRK: 0
+ MOVEM A,TTYA
+ MOVEM B,TTYB
+ MOVEM C,TTYC
+ MOVEI B,1
+TTYB1: CONO TTY,@TTYLT(B)
+ CONSO TTY,40
+ JRST TTYB2
+ DATAI TTY,A
+ ANDI A,177
+ SKIPN HEAR
+ JUMPN B,TTYB2
+ CAIN A,^Z
+ MOVEM B,DEAF
+ SKIPE DEAF
+ JUMPE B,TTYB2
+ MOVEM B,WHOTYP
+ CAIN A,"[
+ SETOM COMCNT
+ SKIPN COMCNT
+ MOVEM A,TYIMP
+ CAIN A,"]
+ CLEARM COMCNT
+ MOVEM A,TTYEC(B)
+ MOVEM A,@TTYECD(B)
+ AOSN TTYON
+ CONO TTY,@TTYST
+ AOSN TTYON+1
+ CONO TTY,@TTYST+1
+ CONO TTY,@TTYLT(B)
+TTYB2: CONSO TTY,10
+ JRST TTYB3
+ MOVEI A,0
+ MOVE C,[-4,,SPECF]
+ HRRM B,TTYMOD
+TTYMOD: EXCH A,.(C)
+ JUMPN A,TTYB4
+ AOS C
+ AOBJN C,.-3
+ CONO TTY,200+TTYCHN
+ SETOM TTYON(B)
+TTYB3: SOJGE B,TTYB1
+ MOVE C,TTYC
+ MOVE B,TTYB
+ MOVE A,TTYA
+ JRST 12,@TTYBRK
+
+
+]
+
+IFN DEC,[
+TTYBRK: 0
+ MOVEM A,TTYA
+ MOVEM B,TTYB
+ MOVEM C,TTYC
+ CONSO TTY,40
+ JRST TTYB2
+ DATAI TTY,A
+ ANDI A,177
+ CAIN A,"[
+ SETOM COMCNT
+ SKIPN COMCNT
+ MOVEM A,TYIMP
+ CAIN A,"]
+ CLEARM COMCNT
+ MOVEM A,ECHOC
+ AOSN TTYON
+ CONO TTY,10+TTYCHN
+
+TTYB2: CONSO TTY,10
+ JRST TTYB3
+ MOVSI B,-2
+ MOVEI A,0
+
+TTYL: EXCH A,SPECF(B)
+ JUMPN A,TTYB4
+ AOBJN B,TTYL
+ CONO TTY,200+TTYCHN
+ SETOM TTYON
+TTYB3: MOVE C,TTYC
+ MOVE B,TTYB
+ MOVE A,TTYA
+ JRST 12,@TTYBRK
+
+]
+
+TTYB4: ANDI A,177
+ CAIL A,40
+ JRST TYOB5
+ CAIL A,^I
+ CAILE A,^M
+ CAIN A,^G
+ JRST TYOB5
+ TRO A,100
+ MOVEM A,SPECF(B)
+ MOVEI A,"^
+TYOB5: MOVEM B,TTYBS2
+ MOVE B,A ;COMPUTE PARITY
+ IMULI B,200401
+ AND B,[11111111]
+ IMUL B,[11111111]
+ TLNE B,10
+ TRO A,200
+ MOVE B,TTYBS2
+ DATAO TTY,A
+ TRZ A,200
+
+IFE DEC,[
+ CAMN C,[-3,,TYOMP]
+ JRST TTYB3
+]
+IFN DEC,[
+ TRNE B,-1
+ JRST TTYB3
+]
+
+ CAIN A,^G
+ SETOM QTF
+IFN UTAPE,[
+ CAIN A,^S
+ CLEARM UREADF
+]
+ SUBI A,3
+ CAIN A,12
+ MOVEM A,SPECF(B) ;[ HA HA
+ SUBI A,"]-20
+ CAIN A,15
+ MOVEM A,SPECF(B)
+ JRST TTYB3
+
+TTYBS2: 0
+]CRR: MOVEI A,15
+ PUSHJ P,TYO
+ MOVEI A,12
+
+TYO:
+IFN UTAPE,[ SKIPGE BOOKF1
+ CLEARM UREADF
+]
+ SKIPE WALLP
+ PUSHJ P,PILPT
+
+IFE TS+DECTS,[
+IFE DEC,[
+ PUSH P,B
+ MOVEI B,1
+TYO3: SKIPE TYOMP(B)
+ JRST .-1
+ MOVEM A,TYOMP(B)
+ AOSN TTYON(B)
+ CONO TTY,@TTYST(B)
+ SOJGE B,TYO3
+ POP P,B
+ POPJ P,
+
+]
+
+IFN DEC,[
+ SKIPE TYOMP
+ JRST .-1
+ MOVEM A,TYOMP
+ AOSN TTYON
+ CONO TTY,10+TTYCHN
+ POPJ P,
+]
+]
+
+IFN TS,[
+TYO1: SKIPGE TTYOFF
+ JRST TYO1C
+TYO1B: .IOT TYOC,A
+ SKIPL AUXTTS
+ .IOT AUXTYO,A
+TYO1C: CAIL A,40
+ AOS CRPOS
+ CAIN A,15
+ CLEARM CRPOS
+ CAIE A,11
+ POPJ P,
+ PUSH P,A
+TYO1A: AOS A,CRPOS
+ TRNN A,7
+ JRST POPAJ
+ JRST TYO1A
+]
+
+IFN DECTS,[
+ IDPB A,TYOO+1
+ OUTPUT TYOC,
+ POPJ P,
+]
+
+RCHA: MOVEI A,0
+ SKIPL QTF
+ PUSHJ P,TYI
+ CAIN A,":
+ SOS TRCOLF
+ AOSN QTF
+ JRST TYIQ
+ CAIN A,^G
+ JRST RCHA
+ POPJ P,
+TYI:
+RCH: IFN UTAPE,[
+ SKIPGE UREADF
+ JRST TYIUT
+]
+IFE TS+DECTS,[ SKIPN A,TYIMP
+ JRST TYI
+ CLEARM TYIMP
+]
+IFN TS, .IOT TYIC,A
+ SKIPL AUXTTS
+ .IOT AUXTYO,A
+IFN DECTS,[
+ SOSG TYII+2
+ INPUT TYIC,
+ ILDB A,TYII+1
+]
+ CAIGE A,140
+ JRST .+3
+ CAIE A,177
+ SUBI A,40
+
+CHARIN: SKIPE WALLP
+ PUSHJ P,LPTRA
+IFN DECTS,JUMPE A,TYI
+IFN TS+DECTS,[
+ CAIN A,"[
+ SETOM COMMENT
+ CAIN A,"]
+ CLEARM COMMENT
+ SKIPGE COMMENT
+ JRST TYI
+]
+ CAIN A,^D
+ JRST DDTA
+ CAIN A,^E
+ JRST EHACK1
+ CAIE A,^F
+ CAIN A,^X
+ JRST TYI
+IFN UTAPE,[
+ CAIN A,^Q
+ JRST TYISUT
+ CAIN A,^S
+ JRST TYI
+]
+ CAIN A,^U
+ JRST HACK2
+ POPJ P,
+
+ASTPIN: CLEARM UREADF
+ POPJ P,
+
+ASKIP: PUSHJ P,GETNUM
+ MOVEM C,ASKPT
+ SETOM UREADF
+ASKP1: PUSHJ P,URED
+ ERRTTY [ASCIZ /EOF?/]
+ CAIN A,^C
+ JRST .-2
+ CAIE A,"[
+ JRST ASKP1
+ PUSHJ P,GETNUM
+ CAME C,ASKPT
+ JRST ASKP1
+ CLEARM UREADF
+ POPJ P,
+
+ASKPT: 0
+
+IFN TS+DECTS,COMMENT: 0
+
+EHACK1: PUSHJ P,HACK1
+ JRST MNLP
+
+DDTA: IFE DEC,[PUSHJ P,LPTWAT
+ HRROS DDT-1
+ SKIPGE TTYON
+ SKIPL TTYON+1
+ JRST .-2
+ MOVE A,WHOTYP
+ CONO TTY,@TTYLT(A)
+]
+
+IFN DEC-TS-DECTS,[
+ SKIPL TTYON
+ JRST .-1
+]
+IFE TS, JRST DDT
+IFN TS,[.VALUE
+ JRST TYI
+]
+
+TYIQ: PTTY [ASCII /QUIT!/]
+ JRST PNORM
+
+
+IFN UTAPE,[
+TYISUT: SETOM UREADF
+TYIUT: PUSHJ P,URED"
+ JRST EOFUT
+ CAIN A,^C
+ JRST EOFUT
+ JRST CHARIN
+
+EOFUT: CLEARM UREADF
+ PUSHJ P,CRR
+ PUSHJ P,LATYO
+ JRST TYI
+
+UREADF: 0
+]
+
+AUXTTS: -1
+AUXTTY: PUSHJ P,GETNUM
+ JUMPL C,AUXTT1
+ MOVE D,C
+ DPB D,[300,,AUXO]
+ LSH D,-3
+ DPB D,[60300,,AUXO]
+ .OPEN AUXTYO,AUXO
+ JRST AUXL
+ MOVEM C,AUXTTS
+ POPJ P,
+
+AUXL: MOVEI B,TYO
+ SETOM AUXTTS
+ SOUT [ASCIZ /LOSE/]
+ POPJ P,
+
+AUXTT1: SETOM AUXTTS
+ .CLOSE AUXTYO,
+ POPJ P,
+
+
+AUXO: SIXBIT / !T00/
+ SIXBIT /AUX/
+ SIXBIT /OUT/
+
+IFN TS,[
+URED: .IOT UTYIC,A
+ SKIPL A
+ AOS (P)
+ POPJ P,
+
+UREDB: .IOT UTYIC,A
+ POPJ P,
+
+ITYON: CLEARB B,TTYOFF
+ JRST ITYOF1
+
+ITYOF: SETOB B,TTYOFF
+ITYOF1: MOVE B,ITYMT+1(B)
+ITYOF2: ILDB A,B
+ JUMPE A,INT1
+ PUSHJ P,TYO1B
+ JRST ITYOF2
+
+ITYMT: 440700,,[ASCIZ /TTY OFF
+/]
+ 440700,,[ASCIZ /TTY ON
+/]
+
+INT2: MOVEI B,TYO
+ ISOUT [.ASCII ?PDLOV PC=*O!INT+1?]
+ .VALUE
+
+]
+IFN DECTS,[
+URED: SOSLE UTYII+2
+ JRST URED1
+ IN UTYIC,
+ JRST URED1
+ POPJ P,
+
+URED1: ILDB A,UTYII+1
+ AOS (P)
+ POPJ P,
+]
+
+IFE TS+DECTS,[
+ UREDB: PUSHJ P, .URED"
+ JFCL
+ POPJ P,
+]
+
+IFE TS,[
+IFE DEC,[
+IRPS A,,SPECF TYOMP TTYEC TTYECO
+A: BLOCK 2
+TERMIN
+
+AUXTYN==1
+
+TTYON: -1
+ -1
+TTYST: 500010+TTYCHN
+ 500010+AUXTYN_12.+TTYCHN
+TTYLT: 500000+TTYCHN
+ 500000+AUXTYN_12.+TTYCHN
+TTYECD: TTYECO+1
+ TTYECO
+
+IRPS A,,TTYA TTYB TTYC TYIMP QTF DEAF WHOTYP COMCNT HEAR
+A: BLOCK 1
+TERMIN
+
+]
+IFN DEC,[
+TYIMP: 0
+SPECF:
+ECHOC: 0
+TYOMP: 0 ;MUST BE ECHOC+1
+TTYON: -1
+TTYA: 0
+TTYB: 0
+TTYC: 0
+COMCNT: 0
+QTF: 0
+]]
+
+LPTRA: PUSHJ P,PILPT
+ SUBI A,3
+ CAIN A,12
+ PUSHJ P,PILPT
+ ADDI A,3
+ POPJ P,
+
+IFN TS,QTF: 0
+
+;;MISC2
+STFPNT: MMSAVAC
+ MOVE W,CATCSA+W
+ MOVEM B,STFOSW
+ MOVEI T1,120.-15.
+ CAIE B,PILPT
+ MOVEI T1,80.-15.
+ MOVEM T1,STFPLL
+ MOVEI B,STFCHO
+ CLEARM STFPOS
+STFP1: LDB T1,[370100,,(W)]
+ JUMPE T1,STVA1
+STVA2: MOVE T1,STFPOS ;POSITION TO 24 BOUNDARY
+ IDIVI T1,24.
+ JUMPE T2,STVA1
+ MOVE T1,STFPOS
+ CAML T1,STFPLL
+ JRST STVA3
+ PUSHJ P,DSPACE
+ JRST STVA2
+STVA3: PUSHJ P,DCRR
+STVA1: LDB T1,[410300,,(W)]
+ HRRZ A,(W)
+ XCT STFPT(T1)
+STFP2: HLRZ T1,(W)
+ TRNN T1,40000
+ JRST STFP5
+STFP4: PUSHJ P,DSPACE
+STFP3: AOBJN W,STFP1
+ PUSHJ P,DCRR
+ MMRSAC
+ POPJ P,
+
+STFP5: MOVE A,STFPOS
+ CAMG A,STFPLL
+ JRST STFP4
+ PUSHJ P,DCRR
+ JRST STFP3
+
+STFPT: SOUT (A)
+ JRST STFP6
+ PUSHJ P,(A)
+ JRST STFDP
+ PUSHJ P,STFDPA
+ JRST STFFP
+ JRST STFFF
+ JRST LOSE
+
+STFP6: MOVE T2,A
+ HRLI T2,440600
+STFP6B: ILDB A,T2
+ JUMPE A,STFP6A
+ ADDI A,40
+ PUSHJ P,(B)
+STFP6A: TLNE T2,770000
+ JRST STFP6B
+ JRST STFP2
+
+STFDP: MOVE A,(A)
+ PUSHJ P,DPT
+ JRST STFP2
+
+STFFF: MOVE A,(A)
+ ASH A,-8
+ TLC A,177000
+ FAD A,A
+ JRST STFFF1
+
+STFFP: MOVE A,(A)
+STFFF1: PUSHJ P,FPFP
+ JRST STFP2
+
+STFCHO: CAIE A,15
+ CAIN A,12
+ JRST STFCH1
+ AOSA STFPOS
+STFCH1: CLEARM STFPOS
+ JRST @STFOSW
+
+STFOSW: 0 ;OUTPUT SWITCH
+STFPOS: 0 ;POSITION IN OUTPUT LINE
+STFPLL: 0 ;PREFERRED LINE LENGTH
+
+IFN TS,[
+
+DATP: .RDATE T1,
+ MOVEI T2,"/
+DATP1: MOVE S,[440600,,T1]
+ PUSHJ P,DATP2
+ PUSHJ P,DATP4
+DATP4: MOVE A,T2
+ PUSHJ P,(B)
+DATP2: PUSHJ P,DATP3
+DATP3: ILDB A,S
+ ADDI A,40
+ JRST (B)
+
+TIMP: .RTIME T1,
+ MOVEI T2,":
+ JRST DATP1
+]
+
+;;STFP
+
+IFE DECTS+TS,[ LOSE: ERRTTY [ASCII /LOSE!/]
+ JRST DDT
+]
+
+STFDPA: MOVM T1,(A)
+ CLEARM STFCNT
+STFDPB: IDIVI T1,10.
+ HRLM T2,(P)
+ AOS STFCNT
+ JUMPE T1,STFDPG
+ PUSH P,[STFDPE]
+ JRST STFDPB
+
+STFDPG: SKIPL (A)
+ JRST STFDPC
+ PUSH P,[".-60,,STFDPE]
+ AOS STFCNT
+STFDPC: AOS STFCNT ;ALLOW EXTRA SPACE AT END
+STFDPH: MOVE T1,STFPOS
+ IDIVI T1,24.
+ MOVNS T2
+ ADDI T2,24.
+ SUB T2,STFCNT
+ JUMPL T2,STFDPD ;MUST EXTEND PAST NEXT TAB STOP
+STFDPF: JUMPE T2,STFDPE
+ PUSHJ P,DSPACE
+ SOJA T2,STFDPF
+
+STFDPE: HLRZ A,(P)
+ ADDI A,60
+ JRST (B)
+
+STFCNT: 0 ;CHARACTERS TAKEN BY STUFF TO PRINT
+
+STFDPD: IMULI T1,24.
+ ADDI T1,24.*2-15.
+ ADDI T2,24.
+ CAMG T1,STFPLL
+ JRST STFDPF
+ PUSHJ P,DCRR
+ JRST STFDPH
+;;AHPV
+AHPV: PUSHJ P,DISINS
+ SETOM DISSUP ;SO DISPLAY WONT CLOBBER
+ MOVE B,TRPSW
+ CLEARB W,AHPHTS
+ PUSHJ P,AHPPV
+ SKIPN HSICT
+ POPJ P, ;NO VALID STORED HASH TBL
+ SETOB W,AHPHTS
+AHPPV: PUSHJ P,AHLOOK
+ POPJ P,
+ SOUT @AHPVT+1(W)
+ PUSH P,J
+ PUSH P,Q
+ PUSH P,R
+ PUSH P,D
+ PUSH P,C
+ PUSH P,NHSW
+ PUSH P,B
+NAHPSH==7
+ MOVEM P,BKTM2
+ MOVEI A,AHPPV1
+ MOVEM A,BKF2R
+ CLEARM LMGD
+ CLEARM LMGD2 ;MAKE SURE IT DOES NOT GO TO PCG
+ SETOM NHSW ;TO AVOID CLOBBERING HT AT LMG
+ LDB I,[100,,PLYN]
+ PUSHJ P,LMG
+ ERRTTY [ASCIZ /LMG RETURNED AHPV/]
+
+AHPPV1: AOS PMVORG
+ HRRZS T1,PMVORG
+AHPPV3: CAIN T1,1(P)
+ JRST AHPPV2
+ HLRZ B,(T1)
+ HRRZ A,(T1)
+ PUSH P,T1
+ LDB I,[100,,PLYN]
+ PUSHJ P,TMOVE ;PLAY MOVE
+ JRST AHPPV4
+ PUSHJ P,AHLOOK
+ JRST AHPPV6 ;NOT FOUND THEREFORE NOT INVESTIGATED
+ POP P,T1
+ LDB A,[HPRMN,,D]
+ LSH A,1
+ TRNE D,HPPMB
+ TRO A,1 ;HASH LEFTOVER
+ MOVEM A,1(T1) ;PLAUS #
+ MOVEM C,2(T1) ;HASH KEY OF NEXT POS
+ MOVEM Q,3(T1) ;VALUE
+ PUSH P,T1
+ PUSHJ P,UNMOVE
+ POP P,T1
+ JRST AHPPV5
+
+AHPPV6: PUSHJ P,UNMOVE
+AHPPV4: POP P,T1
+ SETOM 1(T1)
+AHPPV5: ADDI T1,NWDPM
+ JRST AHPPV3
+
+AHPVT: [ASCIZ /P.V. SAVED
+/]
+ [ASCIZ /P.V. IN HT
+/]
+
+AHPHTS: 0 ;0 USE REG HT, -1 USED STORED HT
+AHPTM: 0
+AHPTM1: 0
+AHPTM2: 0
+AHPTM3: 0
+HSTPSW: 0 ;FLAG TO TAKE ONE MORE STEP AROUND LOOP IN HSH TBL AND STOP
+
+AHLOOK: LDB I,[100,,PLYN]
+ PUSHJ P,HASHR0
+ JFCL
+ MOVE R,GAMP
+ SKIPE AHPHTS
+ JRST AHLK1
+ SKIPN C,HSTB(T2)
+ POPJ P, ;NOT FOUND
+ MOVE D,HSTBV(T2)
+ MOVEM D,GAMEV+1-GAME(R)
+ MOVEM C,GHK1+1-GAME(R)
+ MOVE R,HSTBL(T2)
+ MOVE Q,HSTBVV(T2)
+ MOVE J,HSTB(R) ;HSTB-1/ 0
+ JRST POPJ1
+
+AHLK1: MOVEI T2,HSICT
+AHLK3: SKIPN C,(T2)
+ POPJ P,
+ CAMN C,HSP
+ JRST AHLK2
+ ADDI T2,HSICNW
+ JRST AHLK3
+
+AHLK2: MOVE D,1(T2)
+ MOVEM D,GAMEV+1-GAME(R)
+ MOVEM C,GHK1+1-GAME(R)
+ MOVE R,2(T2)
+ MOVE Q,3(T2)
+ MOVE J,4(T2)
+ JRST POPJ1
+
+AHPPV2: MOVE T1,PMVORG
+ MOVEI T2,100000
+AHPPV7: CAIN T1,1(P) ;FIND MV INVESTIGATED NEXT
+ JRST AHPPV8
+ SKIPGE S,1(T1)
+ JRST AHPPV9
+ CAMGE S,T2
+ HRRZ Q,T1
+ CAMGE S,T2
+ MOVE T2,S
+AHPPV9: ADDI T1,NWDPM
+ JRST AHPPV7
+
+AHPPV8: CAIL T2,100000
+ JRST AHPPVD
+ LSH T2,-1
+ MOVE B,TRPSW
+ ISOUT 1,[.ASCII ?(*U!T2)?]
+ PUSHJ P,AHPP1
+ JRST AHPP2
+
+AHPP1: PUSH P,2(Q) ;HSH KEY OF POS RESULTING FROM THIS MV
+ SETOM 1(Q)
+ HRRZ A,(Q)
+ HLRZ B,(Q)
+ LDB I,[100,,PLYN]
+ PUSHJ P,TMOVE
+ JFCL
+ CLEARM AHPTM
+ AOSA AHPTM
+AHPP3: CLEARM AHPTM
+ SETOM AHPTM1
+ CLEARM HSTPSW
+AHPPVC: PUSHJ P,AHLOOK
+ JRST AHPPVA ;NOT FOUND
+ MOVEM D,AHPTM3 ;LAST TIME THRU SAVE GEN INDEX
+ AOSN AHPTM1
+ MOVEM Q,AHPTM2 ;FIRST TIME THRU, SAVE VALUE
+ EXCH J,(P)
+ JUMPE J,AHPP4A
+ CAME J,C
+ ERRTTY [ASCIZ /FALSE HASH MATCH/]
+AHPP4A: LDB B,[HSTPON,,R]
+ LDB A,[HSTSQN,,R]
+ LDB T1,[HSTPRN,,R]
+ SKIPN T1
+ JUMPE A,AHPPVB ;NO MORE FROM THIS POSITION
+ MOVE T2,GAMP
+ MOVE ZR,AHPTM
+ JUMPE ZR,AHPP4C
+AHPP4B: CAMN C,GHK1-GAME-1(T2) ;DETECT LOOP AND DROP OUT
+ JRST AHPPVB
+ SOS T2
+ SOJG ZR,AHPP4B
+AHPP4C: PUSH P,D ;HSTBV ENTRY
+ LDB I,[100,,PLYN]
+ PUSHJ P,TMOVE2 ;USES T1
+ ERRTTY [ASCIZ /HASH TBL MV ILLEGAL- AHPV/]
+ AOS AHPTM
+ POP P,D
+ AOSN HSTPSW
+ JRST AHPPVB
+ TLNE D,40000
+ SETOM HSTPSW ;LOOP CLOSING ENTRY
+ JRST AHPPVC
+
+AHPPVA: SKIPE (P)
+ ERRTTY [ASCIZ /HASH DIDNT MATCH, WAS SUPPOSED TO-HPV/]
+AHPPVB: CLEARM CVPR
+AHPPVE: MOVE T1,GAMP
+ SOSGE AHPTM
+ JRST AHPPVX
+ PUSHJ P,UMHR
+ JRST AHPPVE
+
+AHPP4: PUSH P,[0]
+ JRST AHPP3
+
+UMHR: LDB T2,[HPVMGI,,GAMEV-GAME(T1)] ;GAMP IN T1
+ MOVEI C,0
+ DPB T2,[PVMGI,,C]
+ PUSHJ P,RECMH
+ LDB T2,[HPUSNM,,GAMEV-GAME(T1)]
+ DPB T2,[PUSNM1,,@CVPR]
+ LDB T2,[HRBTS,,GAMEV-GAME(T1)]
+ DPB T2,[BPTHDS,,@CVPR]
+ LDB T2,[HHFRCB,,GAMEV-GAME(T1)]
+ DPB T2,[BHFRCB,,@CVPR]
+ LDB T2,[BHPPMB,,GAMEV-GAME(T1)]
+ DPB T2,[BHLFTB,,@CVPR]
+ JRST UNMOVE
+
+
+AHPPVX: SUB P,[1,,1]
+ POPJ P,
+
+AHPP2: MOVE C,BKTM2
+ MOVE B,(C)
+ MOVE R,CVPR
+ PUSHJ P,TYPLNE
+ MOVE C,CVPR
+ PUSHJ P,LFSRC
+ CLEARM CVPR
+ PUSHJ P,DCRR
+ SKIPGE AHPTM1
+ SOUT [ASCIZ /NO VAL?/]
+ HLRE A,AHPTM2
+ PUSHJ P,DPT
+ PUSHJ P,DTAB
+ HRRE A,AHPTM2
+ PUSHJ P,DPT
+ PUSHJ P,DTAB
+ LDB A,[HPVMGI,,AHPTM3]
+ SOUT MGITXT(A)
+ MOVEI A,"H
+ MOVE T1,AHPTM3
+ TRNE T1,HHFRC
+ PUSHJ P,(B)
+ PUSHJ P,DCRR
+ JRST AHPPV2
+
+AHPPVD: MOVE P,BKTM2
+ POP P,B
+ POP P,NHSW
+ POP P,C
+ POP P,D
+ POP P,R
+ POP P,Q
+ POP P,J
+ HLRE A,Q
+ PUSHJ P,DPT
+ PUSHJ P,DTAB
+ HRRE A,Q
+ PUSHJ P,DPT
+ PUSHJ P,DCRR
+ SKIPL GETTY
+ SETOM DISSUP
+ JRST DISCLG
+HPVCOM: PUSH P,DBSUPS ;SAVE DATA BASE UPDATE SUPPRESS
+ PUSH P,CVPR
+ SETOM DBSUPS ;SET IT TO SAVE TIME (BUT ELIMINATES PRINTOUT OF "+" FOR CHECKS)
+ MOVEM B,HPVCMB ;OUTPUT ROUTINE ENTRY
+ CLEARM AHPHTS ;USE MAIN HSH TBL
+ PUSHJ P,AHPP4 ;GET PRINC VAR FROM CUR POS
+ MOVE S,CVPR ;SAVE VAR
+ MOVEM S,HPVML
+ MOVE S,AHPTM2 ;AND VALUE
+ MOVEM S,HPVMLV
+ SETOM AHPHTS ;SELECT STORED HSH TBL
+ PUSHJ P,AHPP4 ;GET PRINC VAR
+ MOVE S,CVPR
+ MOVEM S,HPVSL
+ MOVE S,AHPTM2
+ MOVEM S,HPVSLV
+ PUSHJ P,CMPPNT
+ MOVE S,HPVSL
+ MOVE C,HPVSLV
+ EXCH S,HPVML
+ EXCH C,HPVMLV
+ MOVEM S,HPVSL
+ CLEARM AHPHTS
+ PUSHJ P,CMPPNT
+ MOVE C,HPVSL
+ PUSHJ P,LFSRC
+ MOVE C,HPVML
+ PUSHJ P,LFSRC
+ POP P,CVPR
+ POP P,DBSUPS
+ MOVE B,HPVCMB
+ JRST DCRR
+
+CMPPNT: MOVE B,HPVCMB
+ PUSHJ P,DCRR
+ MOVE R,HPVML
+ PUSHJ P,TYPLNE
+ HLRE T1,HPVMLV
+ HRRE T2,HPVMLV
+ ISOUT [.ASCII ?<*U!T1, *U!T2>?]
+ MOVE T1,HPVML
+ MOVE T2,HPVSL
+ CLEARM CMPPT1
+ JUMPN T1,CMPP3A
+ SOUT [ASCIZ /NO INFO/]
+ POPJ P,
+
+CMPP3: HRRZ T1,(T1)
+ HRRZ T2,(T2)
+CMPP3A: JUMPE T1,CMPP4
+ MOVE A,1(T1)
+ PUSH P,T1
+ PUSH P,T2
+ PUSHJ P,MMOVE
+ ERRTTY [ASCIZ /LOSE AT CMPPNT/]
+ AOS CMPPT1
+ POP P,T2
+ POP P,T1
+ JUMPE T2,CMPP2
+ MOVE A,1(T2)
+ CAMN A,1(T1)
+ JRST CMPP3
+CMPP2: JUMPE T2,CMPP4 ;GOT TO DFS PART, PRINT REMAINING SECOND LINE IF ANY
+ PUSH P,T1
+ PUSHJ P,AHPP4
+ MOVE T2,(P)
+ MOVE T1,CVPR
+ PUSH P,(T2)
+ HRRZM T1,(T2)
+ MOVE B,HPVCMB
+ MOVE R,HPVML
+ PUSHJ P,TYPLNE
+ HLRE T1,AHPTM2
+ HRRE T2,AHPTM2
+ ISOUT [.ASCII ?<*U!T1, *U!T2>?]
+ POP P,C
+ POP P,T2
+ EXCH C,(T2)
+ PUSHJ P,LFSRC
+CMPP5: SOSGE CMPPT1
+ POPJ P,
+ PUSHJ P,UNMOVE
+ JRST CMPP5
+
+CMPP4: MOVE B,HPVCMB
+ SOUT [ASCIZ /SAME
+/]
+ JRST CMPP5
+
+HPVCMB: 0 ;OUT ROUTINE
+HPVML: 0 ;"MAIN LINE" PRINC VAR
+HPVMLV: 0 ;VALUE
+HPVSL: 0 ;"SAVED LINE" PRINC VAR
+HPVSLV: 0 ;VALUE
+CMPPT1: 0 ;TEM
+HSICNW==5 ;#WORDS/ENTRY
+
+
+HSOO: SIXBIT \ 'DSKCHASHT>\
+
+HFILER: LDB I,[100,,PLYN]
+ PUSHJ P,HASHR0 ;HASH FILE RESTORE
+ JFCL
+HFILR1: HRROI A,S
+ .IOT UTYIC,A
+ JUMPL A,HFILR2 ;NOTHING LEFT IN FILE
+ HRROI A,T1
+ .IOT UTYIC,A
+ JUMPL A,HFILR2
+ JUMPE T1,HFILR1
+ MOVEI T1,HSICT(T1)
+ HRLM T1,HSICTE
+ PUSHJ P,CRSIZC
+ MOVSI T,HSICT
+ SUB T,HSICTE
+ .IOT UTYIC,T
+ JUMPL T,HFILR2
+ CAME S,HSP
+ JRST HFILR1
+ POPJ P,
+
+HFILR2: PTTY [ASCIZ \HASH NOT FOUND\]
+ POPJ P,
+
+HFILEU: PUSHJ P,HSIC ;HASH FILE UPDATE
+ LDB I,[100,,PLYN]
+ PUSHJ P,HASHR0
+ JFCL
+ .IOPOP UTYOC,
+ HRROI A,HSP
+ .IOT UTYOC,A
+ HLRZ T,HSICTE
+ SUBI T,HSICT
+ HRROI A,T
+ .IOT UTYOC,A
+ PUSHJ P,AWHDKA
+ .IOPUSH UTYOC,
+ POPJ P,
+
+HSSW: 1 ;0 DONT SAVE HASH 1 IN CORE -1 ON DSK
+ PUSHJ P,GETNUM
+HSSWR: .IOPDL
+ MOVEM C,HSSW
+ JUMPGE C,HSSW2
+ .OPEN UTYOC,HSOO
+ JRST HSSW1
+ .IOPUSH UTYOC,
+ POPJ P,
+
+HSSW2: .CLOSE UTYOC,
+ POPJ P,
+
+HSSW1: MOVMS HSSW
+ POPJ P,
+
+ARHDSK: PUSHJ P,ARDBB ;READ HASH FROM DISK
+ARHDKA: MOVEI C,ICORSZ
+ MOVEM C,CORSIZ
+ MOVE T,[HSICT-MEMT,,HSICT]
+ARHD1: .CORE (C)
+ JRST .-1
+ .IOT UTYIC,T
+ JUMPL T,[SOJA T,HSIC3]
+ AOS C,CORSIZ
+ HRLI T,-2000
+ JRST ARHD1
+
+AWHDSK: PUSHJ P,AWRBB ;WRITE HSIC ON DISK
+AWHDKA: MOVSI T,HSICT
+ SUB T,HSICTE
+ .IOT UTYOC,T
+ POPJ P,
+
+ASVHDK: PUSHJ P,AWRB ;WRITE HASH ON DISK
+HSODA: MOVSI A,-HTNE
+HSOD0: SKIPN B,HSTB(A)
+ JRST HSOD1
+ .IOT UTYOC,B
+ .IOT UTYOC,HSTBV(A)
+ MOVE B,HSTBL(A)
+ .IOT UTYOC,B
+ .IOT UTYOC,HSTBVV(A)
+ .IOT UTYOC,HSTB(B)
+HSOD1: AOBJN A,HSOD0
+ .IOT UTYOC,[0]
+ .CLOSE UTYOC,
+ POPJ P,
+
+HSIC: MOVEI C,ICORSZ ;HASH STORE IN CORE
+ .CORE (C)
+ JFCL
+ MOVSI A,-HTNE
+ MOVEI T,HSICT-1
+HSIC0: SKIPN B,HSTB(A)
+ JRST HSIC1
+ MOVEI D,2000+HSICNW+1(T)
+ LSH D,-12
+ CAMG D,C
+ JRST HSIC2
+ MOVE C,D
+ .CORE (C)
+ JRST .-1
+HSIC2: PUSH T,B
+ PUSH T,HSTBV(A)
+ MOVE B,HSTBL(A)
+ PUSH T,B
+ PUSH T,HSTBVV(A)
+ PUSH T,HSTB(B)
+HSIC1: AOBJN A,HSIC0
+ PUSH T,[0]
+ MOVEM C,CORSIZ
+HSIC3: HRLM T,HSICTE
+ POPJ P,
+
+HSICTE: HSICT,,-HSICT ;LH HAS LAST LOCN IN HSICT (A 0)
+
+
HRFC: SETZM HSTB ;HASH RESTORE FROM CORE
+ MOVE A,[HSTB,,HSTB+1]
+ BLT A,HSTB+HTNE-1
+ MOVE A,HASHSS
+ MOVEM A,HASHS
+ MOVEI T,0
+HRFC1: SKIPN S,HSICT(T)
+ POPJ P,
+ PUSHJ P,HSHK1
+ TRNA
+ MOVEM S,HSTB(T2)
+ MOVE A,HSICT+1(T)
+ MOVEM A,HSTBV(T2)
+ MOVE A,HSICT+2(T)
+ MOVEM A,HSTBL(T2)
+ MOVE A,HSICT+3(T)
+ MOVEM A,HSTBVV(T2)
+ ADDI T,5
+ SKIPN S,HSICT-1(T)
+ JRST HRFC1
+ MOVEI A,HSTBL(T2)
+ PUSHJ P,HSHK1
+ TRNA
+ MOVEM S,HSTB(T2)
+ HRRM T2,(A)
+ JRST HRFC1
+
+CRSIZC: LSH T1,-10.
+ AOS T1
+ CAMG T1,CORSIZ
+ POPJ P,
+ .CORE (T1)
+ JRST .-1
+ MOVEM T1,CORSIZ
+ POPJ P,
+
+
+;;;HK1A
+HACK1:
+IFN TS,[
+ SKIPE CLKSW
+ PUSHJ P,CLKUD
+ .RDTIME A,
+ MOVEM A,ITIME
+ SKIPN TSW
+ JRST HTIM1
+ MOVE A,@CURCLK
+ MOVEM A,EHRTM
+ .SUSET [.RRUNT,,A]
+ MOVEM A,EHRNM
+ MOVEM A,..TSTM
+HTIM1:]
+ LDB I,[100,,PLYN]
+ MOVE A,MACCLR
+ MOVE B,@CLKTB(I)
+ MOVEM B,CURCKS
+IFN BOOK,[
+ SKIPGE TSSW ;TRACE SWITCH
+ SKIPN UBKF
+ JRST HB1 ;USE NO BOOK
+
+;;PBKM
+ MOVE A,PLYN
+ MOVEM A,HBKTM2
+ SKIPE B,BKLFT
+ CAMLE A,B
+ JUMPN B,HB1 ;OUT OF BOOK
+ MOVE T1,GAMP
+ MOVEM T1,HBKTM1
+HB4: SKIPN PLYN
+ JRST HB3
+ PUSHJ P,UNMOVE
+ JRST HB4
+
+HB3: PUSHJ P,CAT
+ MOVE T1,[360600,,BBK]
+ MOVEI T2,GAME-1
+HB6A: CAMN T2,HBKTM1
+ JRST HB2 ;REACHED CURRENT POSITON IN BOOK,FIND MOVE
+ MOVE A,1(T2)
+ PUSH P,T2
+ PUSH P,T1
+ PUSHJ P,BKFND
+ ERRTTY [ASCII /CANT CONVERT GAME TO MOVE NO!/]
+ POP P,T1
+ POP P,T2
+HB7A: ILDB B,T1
+ CAIL B,75
+ JRST HB5
+ CAMN C,B
+ JRST HB6 ;MATCHED MOVE IN BOOK
+ MOVEI D,0 ;NOT THIS MOVE SPACE TO SAME PLYN FOR NEXT ALT
+HB7: ILDB B,T1
+ CAIGE B,75
+ AOJA D,HB7
+ CAIN B,75
+ JRST HB7
+ CAIN B,76
+ JRST HB7B
+HB7C: SOJGE D,HB7
+ JRST HB7A
+
+HB7B: ILDB B,T1
+ ILDB B,T1
+ JRST HB7C
+
+HB5: CAIE B,75
+ JRST HB5A
+ SUBI C,75
+ JRST HB7A
+
+HB5A: CAIE B,76
+ JRST HB5B
+ ILDB B,T1
+ ILDB D,T1 ;TRANSPOSITION
+ DPB B,[60600,,D]
+ HRRZ S,BKSMTV(D)
+ IDIVI S,6
+ MOVE T1,BKPT(T1)
+ TLZ T1,17
+ ADD T1,S
+ JRST HB7A
+
+HB5B: MOVE T1,HBKTM2
+ MOVEM T1,BKLFT ;LEAVING BOOK
+
+HBX: CAMN T2,HBKTM1
+ JRST HB1
+ PUSH P,T2
+ MOVE A,1(T2)
+ PUSHJ P,IMMOVE
+ ERRTTY [ASCII /BOOK RESTORE FOULUP!/]
+ POP P,T2
+ AOJA T2,HBX
+
+HB6: MOVE A,1(T2) ;MATCHED MOVE
+ PUSH P,T1
+ PUSH P,T2
+ PUSHJ P,IMMOVE
+ ERRTTY [ASCII /BOOK FOULUP!/]
+ POP P,T2
+ POP P,T1
+ AOJA T2,HB6A
+
+HB2: MOVEI D,0
+HB2C: ILDB B,T1
+ CAIL B,75
+ JRST HB2A
+ ADD B,D
+ PUSHJ P,BKMM ;B HAS NO OF MOVE WE WANT TO MAKE
+ HRRZ A,B
+ HLRZ B,B
+ PUSHJ P,TMOVE
+ ERRTTY [ASCII /BOOK MOVE ILLEGAL!/]
+ CLEARM BKLFT
+ CLEARM HACKMX
+ CLEARM HACKMN
+ CLEARM CVPR
+ SETOM MSPC ;DONT ALLOW PARAM CHANGE DOWN JUST AFTER BOOK MOVE
+ SETZM TWEXPM
+ MOVE A,GAMP
+ MOVSI T1,(SETZ)
+ JRST HB2D
+
+
+HB2A: CAIE B,75
+ JRST HB2B
+ ADDI D,75
+ JRST HB2C
+
+HB2B: CAIE B,76
+ JRST HB5B ;LEAVING BOOK
+ ILDB B,T1
+ ILDB Q,T1
+ DPB B,[60600,,Q]
+ HRRZ S,BKSMTV(Q)
+ IDIVI S,6
+ MOVE T1,BKPT(T1)
+ TLZ T1,17
+ ADD T1,S
+ JRST HB2
+
+HBKTM1: 0
+HBKTM2: 0
+BKLFT: 0 ;PLYN AT WHICH BOOK LEFT OR 0 IN BOOK
+
+HB1:
+]
+
+;;;HK1B
+
+ SKIPGE NHSW
+ JRST HK1H1
+ SKIPLE HSSW
+ PUSHJ P,HSIC ;STORE PREV HASH TBL IN CORE
+ SKIPE HRCSW
+ JRST HSHCL1 ;CLEAR "OBSOLETE" HASH TBL ENTRIES ONLY
+HSHCL3: MOVE A,HASHSS ;SET UP HASH TBL
+ MOVEM A,HASHS ;RESET SPACE LEFT
+ CLEARM HSTB
+ MOVE A,[HSTB,,HSTB+1]
+ BLT A,HSTB+HTNE-1 ;CLEAR HASH TABLE
+HSHCL2: MOVE A,PLYN
+ MOVEM A,HSHPLN
+ MOVE A,GAMP
+ SOS A ;DONT ENTER CURRENT POS
+ CLEARM NPLNCP ;NUMBER PLY NO CAPTURE OR P MOVE
+
+HK1H2: CAIG A,GAME-1 ;ENTER POSITIONS IN HASH TBL SINCE LAST P MOVE OR CAPT
+ JRST HK1H1 ;THESE ARE DRAWS IF REACHED
+ SKIPN S,GHK1-GAME(A)
+ JRST HK1H4
+ PUSHJ P,HSHK1
+ JFCL
+ MOVSI T1,300000+MHPLN
+ MOVEI J,-1
+ PUSHJ P,HASHE1
+ CLEARM HSTBVV(T2)
+HK1H3: LDB T1,[MPC,,(A)]
+ SKIPL LMGT(T1)
+ SKIPGE (A)
+ JRST HK1H1
+ AOS NPLNCP
+HK1H4: SOJA A,HK1H2
+
+HSHCL1: MOVE A,PLYN
+ SUB A,HSHPLN
+ JUMPLE A,HSHCL3
+ MOVSI T1,-HTNE
+ CLEARM RHFLG
+ SETOM RHFLG1
+ SKIPE HSTB(T1)
+ AOBJN T1,.-1 ;ADV TO FIRST 0 ENTRY
+HSHCL4: SKIPN S,HSTB(T1)
+ JRST HSHCL7
+ LDB T2,[410300,,HSTBV(T1)]
+ JUMPN T2,HSHCL5
+ LDB T2,[HPVMGI,,HSTBV(T1)]
+ CAIE T2,3
+ JUMPN T2,HSHCL5 ;NOT GEN BY PMG OR PMG IN PCG MODE
+ LDB TT,[HNPIT,,HSTBV(T1)]
+ ADD TT,HSHPLN ;ACTUAL PLY # AT POS
+ SUB TT,PLYN
+ JUMPL TT,HSHCL5
+ LDB R,[HSTSQN,,HSTBL(T1)]
+ JUMPE R,HSHCL5
+ DPB TT,[HNPIT,,HSTBV(T1)]
+ MOVEI TT,HPPMB
+ IORM TT,HSTBV(T1)
+ HLLOS HSTBL(T1)
+ SKIPGE RHFLG
+ JRST HSHCL8 ;REHASH
+HSHCL6: AOBJN T1,HSHCL4
+HSHCL9: MOVSI T1,-HTNE
+ CLEARM RHFLG1
+ JRST HSHCL4
+
+HSHCL5: SETOM RHFLG
+ CLEARM HSTB(T1)
+ AOS HASHS
+ AOBJN T1,HSHCL4
+ JRST HSHCL9
+
+HSHCL7: SKIPL RHFLG1
+ JRST HSHCL2
+ CLEARM RHFLG
+ JRST HSHCL6
+
+HSHCL8: CLEARM HSTB(T1)
+ PUSH P,HSTBV(T1)
+ PUSH P,HSTBL(T1)
+ PUSH P,HSTBVV(T1)
+ PUSH P,T1
+ PUSHJ P,HSHK1
+ JFCL
+ POP P,T1
+ MOVEM S,HSTB(T2)
+ POP P,HSTBVV(T2)
+ POP P,HSTBL(T2)
+ POP P,HSTBV(T2)
+ JRST HSHCL6
+
+
+RHFLG1: 0
+RHFLG: 0
+
+HK1H1:
+
+IRPS WKING,,WKING BKING,HK1XW,,HK1XW HK1XB,WKR,,WKR BKR,WQR,,WQR BQR,BKING,,BKING WKING
+ SKIPE PIECEL+WKING+1-PIECE
+ JRST HK1XW
+ SKIPN PIECEL+WKR-PIECE
+ JRST .+3
+ SKIPE PIECEL+WQR-PIECE
+HK1XW: SKIPA A,[1*2]
+ MOVEI A,4*2
+ MOVEM A,PINVF+BKING-PIECE ;DEFVAL FOR K HIGHER IN ENDGAME
+TERMIN
+
+ CLEARM DBSUPS
+
+ SKIPG SASW
+ JRST SASV1
+ HLRZ T1,HSICTE ;SET UP SPACE FOR MVDST,ETC, STG
+ AOS T1
+ MOVEM T1,SABEG
+ MOVEM T1,SAFSP
+ PUSHJ P,CRSIZC ;MAKE SURE ENUF ROOM
+;DROPS THRU;DROPS IN
+SASV1: CLEARM NSRCHS ;NUMBER SEARCHES REQUIRED
+ CLEARM ACTV ;VALUE IF NO ACTIVITY
+ CLEARM NPCCY ;# PAR CHECK CYCLES
+ MOVE A,GAMP
+ MOVEM A,ACTVP
+ JRST MSI1 ;COMPUTE INITIAL VALUES FOR ALPHA AND BETA
+
+MSINR: MOVE D,EVMST ;INITIALIZE ALPHA BETA
+ MOVE T1,EVMST+1
+HK1E1: MOVEM D,BPREV ;"ALPHA"
+ MOVEM T1,BPREV+1 ;"BETA"
+HKTRC1: LDB I,[100,,PLYN]
+ CLEARM STPLVL ;DISPLAY STOP LEVEL
+ CLEARM LMGD ;BASIC PLY DEPTH
+ CLEARM LMGD2 ;DEPTH FOR SECONDARY SEARCH
+IFN KILLH,[
+ SKIPN AKHS
+ JRST HK1KH1
+ SETZM ABFTA
+ MOVE D,[ABFTA,,ABFTA+1]
+ BLT D,ABFTC+SBRLNG
+HK1KH1:]
+ SKIPN WALLP
+ JRST HACK11
+ MOVEI B,PILPT
+ PUSHJ P,FORMF
+ SOUT [ASCII /
+[MOVE !/]
+ MOVE A,PLYN
+ ADDI A,2
+ LSH A,-1
+ PUSHJ P,DPT
+ SOUT @SIDTXT(I)
+ PUSHJ P,PWNPNT
+ MOVE W,[-LINFDT,,INFDT]
+ PUSHJ P,STFPNT
+HACK11: CLEARM NPL ;CLEAR STATISTICS
+ MOVE T1,[NPL,,NPL+1]
+ BLT T1,OPENF
+ MOVE T1,PLYN
+ MOVEI T2,2 ;NORMAL COEF FOR QUEEN
+ CAIG T1,20
+ JRST HKOPN1
+
+ CAIG T1,50
+HKOPN2: SETOM OPNMID
+ MOVEM T2,QDCOF
+ MOVEM T2,PINVF+WKING+1-PIECE
+ MOVEM T2,PINVF+BKING+1-PIECE
+ CLEARM HFLT
+ MOVE T1,[HFLT,,HFLT+1]
+ BLT T1,HFLT+LHFLT+LSHFLT-1 ;TBL TO RECORD LEVEL OF HASH FLUSHES AND MISC VARIABLES
+;CLEAR LEVEL TABLES FOR STATIC AND PLAUS HASH FLUSH RECORD
+ PUSHJ P,.CAT1 ;NON-INCREMENTAL CAT (TO HELP ASSURE REPRODUCABILITY)
+ PUSHJ P,STINI
+ CLEARM HSTTF
+ LDB I,[100,,PLYN]
+ PUSHJ P,LMG
+ MOVEM Q,HACKMN ;RETURNED MIN VALUE
+ MOVEM R,HACKMX ;RETURNED MAX VALUE
+ MOVEM I,HACKSD ;SIDE MV MADE FOR
+ PUSHJ P,CAT ;ASSURE CORRECT DATA IN NON-INCREMENTAL MODE
+ SKIPGE QTF
+ JRST HACK1L ;QUIT
+ MOVEI B,PILPT
+ SKIPN WALLP
+ JRST HACK1H ;NO PRINTOUT
+ PUSHJ P,DCRR
+ MOVE ZR,NMRJ
+ TLC ZR,232000
+ FADR ZR,ZR
+ MOVE W,NPL
+ TLC W,232000
+ FADR W,W
+ FDVR ZR,W
+ MOVEM ZR,RJRTO
+ MOVE W,[-LSTAPT,,STAPT]
+ PUSHJ P,STFPNT
+ SOUT [ASCIZ / TOTAL TIME /]
+ PUSHJ P,TMTPR
+ SOUT [ASCIZ /
+LEVELS OF P M HASH FLUSHES /]
+ MOVSI J,-LHFLT+1
+ MOVE A,HFLT+1(J)
+ PUSHJ P,DPT
+ PUSHJ P,DSPACE
+ AOBJN J,.-3
+
+ SOUT [ASCIZ /
+LEVELS OF S EV HASH FLUSHES /]
+ MOVSI J,-LSHFLT+1
+ MOVE A,SHFLT+1(J)
+ PUSHJ P,DPT
+ PUSHJ P,DSPACE
+ AOBJN J,.-3
+ PUSHJ P,DCRR
+HACK1H: MOVE R,HACKMX
+ CAME R,HACKMN ;NO MOVE
+ JRST MSR1 ;HACK MULT SEARCH
+MSR1B: SKIPN HSSW
+ JRST HACK1J
+ MOVEI B,PILPT
+ SKIPE WALLP
+ PUSHJ P,HPVCOM
+HACK1J: SKIPGE HSSW
+ PUSHJ P,HFILEU ;WRITE HASH TABLE ON DSK
+ SKIPN A,CVPR
+ JRST HACK1C ;NO MOVE IN PRINC VAR
+ PUSH P,DBSUPS ;CHECK PARAMETERS FOR CONSISTANCY WITH INITIAL ASSUMPTIONS
+ SETOM DBSUPS
+ PUSH P,PLYN
+ PUSHJ P,PLLLNE ;PLAY OUT PRINC VARIATION
+ MOVE T2,[EMTLSW,,SRLSWS]
+ BLT T2,SRLSWS+NRLSWS-1 ;SAVE PREV SWITCHES
+ MOVE D,HACKMX
+ PUSHJ P,RLSSET ;SET RELATIVE SWITCHES
+HKCSW2: MOVE T1,PLYN
+ CAMN T1,(P) ;TAKE BACK MOVES
+ JRST HKCSW1
+ PUSHJ P,UNMOVE
+ JRST HKCSW2
+
+HKCSW1: SUB P,[1,,1]
+ POP P,DBSUPS
+ MOVSI J,-NRLSWS
+HKCSW3: MOVE T1,EMTLSW(J)
+ CAME T1,SRLSWS(J)
+ JRST HKCSW4 ;SWITCHES DIFFER
+HKCSW5: AOBJN J,HKCSW3
+HKCSW8: MOVE A,CVPR
+ SKIPE B,(A)
+ MOVE B,1(B)
+ MOVEM B,TWEXPM
+ MOVE A,1(A)
+ PUSHJ P,IMMOVE ;PLAY MOVE
+ JFCL
+ MOVE A,GAMP
+ HRRZ T1,HACKMN
+ MOVE T2,[430200,,T1]
+ MOVSI J,-NRLSWS
+RLSWSL: MOVE ZR,EMTLSW(J)
+ IDPB ZR,T2
+ AOBJN J,RLSWSL
+HB2D: MOVEM T1,GAMEV-GAME(A) ;RECORD NET POSITION VALUE AND STATE OF REL SWITCHES
+ SKIPGE TWOGTF
+ POPJ P,
+IFN TS,[
+ SKIPGE GETTY
+ PUSHJ P,DISUP
+]
+ MOVEI B,TYO
+ SKIPE I,HACKSD
+ SOUT [ASCIZ / /]
+ PUSHJ P,TYPLM
+ MOVE A,@OKINGT+1(I)
+ MOVE C,@LMGST(I)
+ JUMPE C,HK1F1
+ PUSHJ P,DSPACE
+ SOUT [ASCII /CHECK!/]
+ MOVM A,HACKMX
+ CAIN A,70000-2
+ SOUT [ASCII /MATE!/]
+HK1F1: SKIPE TSW
+ PUSHJ P,TMTPR
+IFE TS,HK1F1:
+HACK1F: PUSHJ P,CRR
+IFN DSPLY,[
+ PUSHJ P,DISINI
+ HRROI B,DISAD
+ PUSHJ P,.DISBD
+ SKIPGE GETTY
+ MOVEI B,TYO
+]
+
+IFE DSPLY, MOVEI B,TYO
+ SKIPN PMVS
+ JRST HACK1B
+ SKIPGE PMVS
+ MOVEI B,TYO
+ ISOUT [.ASCII ?MAX *U!HACKMX MIN *U!HACKMN
+PRINCIPAL VARIATION
+?]
+ MOVE R,CVPR
+ PUSHJ P,TYPLNE
+HACK1B:
+IFN DSPLY, PUSHJ P,DISCLG
+ SETOM DISSUP
+ MOVE C,CVPR
+ PUSHJ P,LFSRC
+ CLEARM CVPR
+HACK1A:
+IFN HSCOD,[
+ PUSHJ P,HSREC ;PERMANENT MOVE RECORD FOR HASH TBL SETUP
+]
+IFE DECTS,[
+ MOVE I,HACKSD
+ CAME I,MACCLR
+ JRST CLKRC1
+ MOVE A,@CLKTB(I)
+ SUB A,CURCKS ;RECORD TIME FOR THIS MOVE
+HACK1T: AOS B,MMTMP
+ CAIL B,LTMDF
+ CLEARB B,MMTMP
+ MOVEM A,MMTMT(B)
+ AOS MSPC ;MOVES SINCE PARAMETER CHANGE
+CLKRC1:]
+ MOVE T1,LFS
+ MOVEI T2,0
+ JUMPE T1,FSCH1
+ HRRZ T1,(T1)
+ AOJA T2,.-2
+FSCH1: CAIE T2,LSPCL+1
+ PTTY [ASCII /FS LOST!/]
+ SKIPE PARSW
+ PUSHJ P,CCTIM ;MAYBE CHANGE PARAMETERS
+ POPJ P,
+
+HACK1C: SKIPN HK1V ;NO MOVE
+ JRST HACK1B ;JUST STAT BOARD EV
+ SKIPE DBS1 ;SDS
+ SKIPE DBS2 ;SLS
+ JRST . 2
+ JRST HACK1B
+ SKIPGE TWOGTF
+ JRST HACK1D
+ MOVEI B,TYO
+ MOVE R,HACKMX
+ JUMPE R,SMATE
+ SOUT [ASCII /
+CHECKMATE
+!/]
+;DROPS THRU;DROPS IN
+HACK1G: MOVEI A,MNLPA
+ MOVEM A,GSW
+ JRST HACK1B
+
+SMATE: SOUT [ASCII /
+STALEMATE
+!/]
+ JRST HACK1G
+
+HACK1D: SETZM TWEXPM ;MATE
+ AOS PLYN
+ AOS A,GAMP
+ SETZM (A) ;NULL REPLY
+ POPJ P,
+
+PMVS: 0
+HACK1L: SKIPE C,CVPR
+ PUSHJ P,LFSRC
+ SETZM CVPR
+ SKIPL TWOGTF
+ JRST PNORM
+ SETOM CVPR
+ POPJ P,
+
+MSI1: SKIPL TSSW
+ JRST HKTRC1 ;DONT DISTRUB PARAMETERS IN TRACE MD
+ PUSHJ P,VALPRE
+ MOVE T1,PLYN
+ CAME T1,SETESP
+ CLEARM ESTSW
+ SKIPGE ESTSW
+ JRST MSI2 ;USE TYPED IN ESTIMATE
+ MOVE T1,GAMP
+MSI1A: CAIN T1,GAME-1 ;SEARCH FOR PREVIOUS MOVE PLAYED BY COMPUTER
+ JRST MSI2 ;FIRST MOVE COMPUTER HAS PLAYED THIS GAME
+ MOVE D,GAMEV-GAME(T1)
+ SKIPGE D
+ SOJA T1,MSI1A ;THIS MOVE BY PLAYER OR READ IN
+ SETOM GESTSW
+ MOVE T2,[430200,,D]
+ MOVSI J,-NRLSWS
+RLSWSS: ILDB ZR,T2
+ TRNE ZR,2
+ ORCMI ZR,3
+ MOVEM ZR,EMTLSW(J)
+ AOBJN J,RLSWSS
+MSI3:
+ HRRES D
+ MOVEM D,MSIBB
+ MOVE T1,D
+ SUB D,MSIB ;ALLOW BUGGER FACTOR ON EITHER SIDE OR ESTIMATED RESULT
+ ADD T1,MSIB
+ SKIPE GESTSW
+ SKIPN MSSW
+VLCYRT: JRST MSINR
+ JRST HK1E1
+
+MSI2: CLEARM GESTSW
+ MOVE D,PCBAL ;HAVE MADE NO MVS IN GAME
+ SUB D,PCBAL+1
+ ADD D,PNBAL
+ SUB D,PNBAL+1
+ SKIPGE ESTSW
+ MOVE D,EST
+ PUSHJ P,RLSSET
+ JRST MSI3
+
+
+
+MSR1: SKIPE C,CVPR
+ PUSHJ P,LFSRC ;REMOVE WHEN PUT IN HACK BELOW
+ SKIPE DBS1
+ SKIPE DBS2 ;SKIP ON PM DEBUG MODE
+ SKIPL TSSW
+ JRST MSR1B ;TRACE HACKERY
+ SKIPN MSSW
+ JRST MSRE
+ CAML R,BPREV+1
+ JRST MSR1A
+ CAMG Q,BPREV
+ JRST MSR1A
+MSRE: PTTY [ASCII /MULTIPLE SEARCH ERROR!/]
+ CLEARM CVPR
+ JRST MSR1B
+
+MSR1A:; LDB I,[100,,PLYN]
+; XCT MSRT1(I) ;TRANSFER TO MSR1C IF WE LOSE
+; XCT EVMT5+1(I)
+; JRST MSRRS ;WE MATE
+; MOVE C,CVPR
+; MOVE A,1(C)
+; PUSHJ P,LFSRC
+; PUSHJ P,MMOVE
+
+MSRRS: XCT MMSRT5(I) ;UPDATE GUESS VALUE
+ MOVE D,EVMST ;MAKE FINAL SEARCH SET UP A B TO REFLECT RESULT OF ORG SEARCH
+ MOVE T1,EVMST+1
+ AOS C,NSRCHS
+; CAILE C,1
+ JRST HK1E1
+; CAML R,BPREV+1
+; SKIPA D,BPREV ;CLOBBER "WINNING" LIMIT TO INF
+; MOVE T1,BPREV+1
+; JRST HK1E1
+
+;MSRT1: JUMPL Q,MSR1C
+; JUMPG Q,MSR1C
+
+MMSRT5: MOVEM Q,MSIBB
+ MOVEM R,MSIBB
+
+HKOPN1: MOVEI T2,0
+ SETOM OPENF
+ JRST HKOPN2
+
+QDCOF: 2 ;DEVAL VAL OF QUEEN
+
+HKCSW4: MOVE R,HACKMX ;SWITCHES DIFFER
+ XCT SRLCPF(J) ;DETERMINE IMPORTANCE OF DIRRERENCE (SKIP ON IMPORTANT)
+ JRST HKCSW5 ;NOT IMPORTANT
+ SKIPN WALLP
+ JRST HKCSW7
+ MOVEI B,PILPT
+ MOVE W,[-LSWSTF,,SWSTF]
+ PUSHJ P,STFPNT
+HKCSW7: AOS T1,NPCCY
+ SKIPE PARCSW
+ CAILE T1,1
+ JRST HKCSW8 ;SECOND TRY, PLAY MOVE ANYWAY
+ MOVSI T1,-HTNE ;RESET HSH TBL
+HKCSH2: SKIPN HSTB(T1)
+ JRST HKCSH1
+ LDB TT,[410300,,HSTBV(T1)]
+ CAIN TT,3
+ JRST HKCSH1
+ MOVEI TT,HPPMB
+ IORM TT,HSTBV(T1)
+ HLLOS HSTBL(T1)
+HKCSH1: AOBJN T1,HKCSH2
+ CLEARM NSRCHS
+ SKIPE C,CVPR
+ PUSHJ P,LFSRC
+ JRST VLCYRT
+TWOGIT: MOVEM P,TWOGPM ;THINK WHILE OTHER GUY IS THINKING
+ MOVEI A,TWOGT1
+ MOVEM A,BKF2R
+ SETZM LMGD
+ SETZM LMGD2
+ MOVE A,NHSW
+ MOVEM A,NHSWM
+ SETOM NHSW
+ LDB I,[100,,PLYN]
+ PUSHJ P,LMG
+ ERRTTY [ASCIZ /LMG RETURNED TWOGT/]
+
+TWOGT1: MOVE A,PMVORG
+ HRRZM A,TMVORG
+ SETZM BKF2R
+ SKIPA B,TMVORG ;ALL MVS NOW ON PDL
+TWOGT4: ADDI B,NWDPM ;GET MOVES IN STD FORMAT AND ALSO IN FORMAT FOR INPUT ROUTINES
+ CAIL B,(P)
+ JRST TWOGTA
+ PUSH P,B
+ HRRZ A,1(B)
+ HLRZ B,1(B)
+ PUSHJ P,TMOVE
+ JRST TWOGTI
+ MOVE B,(P)
+ MOVE A,@GAMP
+ MOVEM A,1(B)
+ PUSHJ P,UNMOVE
+ POP P,B
+ MOVE A,1(B)
+ PUSHJ P,TWOGTP
+ MOVEM D,3(B)
+ SETZM 4(B)
+ SETZM 5(B)
+ JRST TWOGT4
+
+TWOGTI: POP P,B
+ SETZM 1(B)
+ SETZM 2(B)
+ JRST TWOGT4
+
+TWOGTP: LDB C,[MPC,,A]
+ LDB D,[MPTK,,A]
+ LDB C,[PTID,,PIECE(C)]
+ SKIPN D
+ TROA D,-1
+ LDB D,[PTID,,PIECE(D)]
+ HRLM C,D
+ POPJ P,
+
+TWOGTA: SKIPN A,TWEXPM ;GET EXPECTED MOVE
+ JRST TWOGT3
+ SKIPA B,TMVORG
+TWOGT2: ADDI B,NWDPM
+ CAIL B,(P)
+ JRST TWOGT3
+ CAME A,1(B)
+ JRST TWOGT2
+ SETOM 2(B)
+TWOGT3: MOVE A,TMVORG ;SORT MOVES
+ ADDI A,1
+ MOVEI B,+1(P)
+ PUSHJ P,4SORT
+TWOGTJ: SKIPE A,1-NWDPM(P)
+ JRST TWOGTK
+ SUB P,[NWDPM,,NWDPM]
+ JRST TWOGTJ
+TWOGTK: HRRZM P,TMVEND
+ PUSHJ P,TWOGTB
+ MOVE A,NHSWM
+ MOVEM A,NHSW
+ MOVE A,TMVORG
+ CAIL A,(P)
+ JRST TWMATE
+ SETZM TWNHF
+ .OPEN UTYOC,TWOO ;SAVE HASH ON DISK
+ JRST TWOGTW ;LOSE
+ PUSHJ P,HSIC
+ PUSHJ P,AWHDKA
+ .CLOSE UTYOC,
+ MOVE A,BKLFT
+ MOVEM A,OBKLFT
+ SETZM TWMXRT
+ SETZM TWTRT
+ SETZM TWNMVS
+ MOVE T1,GAMP
+ MOVSI A,400000
+ MOVEM A,GAMEV-GAME+1(T1)
+;DROPS THRU
+;USE OF REGISTER ON PDL
+;1 OPPONENT'S MOVE
+;2 VALUE OF GAMEV FOR OUR REPLY
+;3 "PIECE ID" OF PIECE MOVING AND PIECE TAKEN
+;4 0 IF HAVENT STARTED CONSIDERING MOVE, RH=BKLFT
+;5 OUR REPLY
+;6 HIS EXPECTED MOVE TO OUR REPLY
+ SKIPA B,TMVORG ;PLAY MVS
+TWOGT6: ADDI B,NWDPM
+ CAIL B,(P)
+ JRST TWOGTW ;TRIED ALL MVS, FOUND REPLIES
+ MOVEM B,TMVCUR
+ SKIPN A,1(B)
+ JRST TWOGT6
+ MOVEM A,TWOOM
+ SETOM 4(B)
+ PUSHJ P,MMOVE
+ ERRTTY [ASCIZ /LOSE AT TWOGT6/]
+TWOGT9: SKIPE WALLP
+ PUSHJ P,TWPLM
+ SETOM TWOGTF
+ PUSHJ P,HACK1
+ SETZM TWOGTF
+ SKIPGE C,CVPR
+ JRST TWOGT5
+ PUSHJ P,LFSRC
+ .RDTIME A,
+ SUB A,ITIME
+ ADDM A,TWTRT
+ AOS TWNMVS
+ CAMLE A,TWMXRT
+ MOVEM A,TWMXRT
+ MOVE B,TMVCUR
+ MOVE A,TWEXPM
+ MOVEM A,6(B)
+ MOVE C,GAMP
+ SKIPN A,(C)
+ MOVNI A,1
+ MOVEM A,5(B)
+ MOVE A,GAMEV-GAME(C)
+ MOVEM A,2(B)
+ MOVE A,BKLFT
+ HRRM A,4(B)
+ .OPEN UTYOC,TWOOO ;SAVE HASH
+ JRST TWOGW1 ;CANT HACK ANY MORE MVS, DISK FULL?
+ PUSHJ P,HSIC
+ PUSHJ P,AWHDKA
+ .CLOSE UTYOC,
+ PUSHJ P,UNMOVE
+TWOGT5: SETZM CVPR
+ PUSHJ P,UNMOVE
+ PUSHJ P,TWROH ;RESTORE OLD HASH TABLE
+TWOGT8: MOVE B,TMVCUR
+ SKIPGE TRLMVP
+ JRST TWOGT6
+TWOGTQ: SKIPG B,TRLMVP
+ JRST TWOGQ ;QUIT
+TWOGQA: SETZM QTF
+ MOVEM B,TMVCUR
+ MOVE A,1(B)
+ MOVEM A,TWIOM
+ PUSHJ P,MMOVE
+ ERRTTY [ASCIZ /LOSE AT TWOGTQ/]
+ PUSHJ P,HSREC
+ SKIPE WALLP
+ PUSHJ P,WTYPLM
+ MOVE B,TMVCUR
+ SKIPN A,5(B)
+ JRST TWOGT7
+ AOJE A,TWMATE
+ SOJ A,
+ MOVEM A,TWMLM
+ MOVE T1,GAMP
+ MOVE C,2(B)
+ MOVEM C,GAMEV-GAME+1(T1)
+ HRRZ C,4(B)
+ MOVEM C,BKLFT
+ MOVE C,6(B)
+ MOVEM C,TWEXPM
+ PUSHJ P,MMOVE
+ ERRTTY [ASCIZ /LOSE AT TWOGTQ/]
+ PUSHJ P,HSREC
+ PUSHJ P,DISUP
+ SETOM DISSUP
+ SKIPL TRDRF
+ PUSHJ P,ADRAW
+ MOVEI B,TYO
+ PUSHJ P,TYPLM
+ SOUT [ASCIZ \
+
\]
+ MOVE A,TWMLM
+ PUSHJ P,TWOGTP
+ MOVEM D,TWMLMP
+ .OPEN UTYIC,TWIOO ;RESTORE HASH
+ JRST TWOGTR
+ PUSHJ P,ARHDKA
+ PUSHJ P,HRFC
+ MOVE A,PLYN
+ SUBI A,1
+ MOVEM A,HSHPLN
+TWOGTR: PUSHJ P,TWCDSK
+ SKIPL TRCOLF
+ PUSHJ P,TWCOM
+; MOVE A,TWMXRT
+ MOVE A,TWTRT
+ IDIV A,TWNMVS
+ IDIVI A,3 ;30THS TO 10THS
+ MOVE P,TWOGPM
+ JRST HACK1T
+
+TMVCUR: 0 ;CURRENT MOVE BEING INVESTIGATED
+TMVEND: 0 ;MOVE END FOR TOURNAMENT
+TMVORG: 0 ;MOVE ORG FOR TOURNAMENT
+NHSWM: 0 ;SAVED STATE OF NHSW
+TWOGPM: 0 ;SAVED PDL
+OBKLFT: 0 ;SAVED BKLFT
+TWMXRT: 0 ;MAX REAL TIME USED THIS MV (30THS)
+TWTRT: 0 ;TOTAL REAL TIME USED FOR REPLIES
+TWNMVS: 0 ;# REPLIES FOUND
+TWOO: SIXBIT \ 'DSKHASHT CUR\
+TWIO: SIXBIT \ &DSKHASHT CUR\
+TWOOO: SIXBIT \ 'DSKHASHT\
+TWOOM: 0
+TWIOO: SIXBIT \ &DSKHASHT\
+TWIOM: 0
+TWNHF: 0 ;-1 IF NEW HASH IN
+TWOGTF: 0 ;-1 WHEN CALLING HACK1 TO FIND REPLY
+TWMLM: 0 ;LAST MOVE MADE BY MACHINE
+TWEXPM: 0 ;EXPECTED MOVE FOR NEXT TIME
+TWMLMP: 0 ;PIECES IN TWMLM
+
+TWOGT7: SKIPE TWNHF ;HASNT HACKED RIGHT MOVE
+ PUSHJ P,TWROH
+ PUSHJ P,DISUP
+ SKIPN TRLMVP
+ JRST TWOGQ1 ;QUIT
+ SKIPL TRCOLF
+ PUSHJ P,TWCOM
+ JRST TWOGT9
+
+TWROH: .OPEN UTYIC,TWIO ;RESTORE OLD HASH TABLE
+ .VALUE
+ PUSHJ P,ARHDKA
+ PUSHJ P,HRFC
+ MOVE A,PLYN
+ SUBI A,1
+ MOVEM A,HSHPLN
+ MOVE A,OBKLFT
+ MOVEM A,BKLFT
+ SETZM TWNHF
+ POPJ P,
+
+TWCD: SIXBIT \ DSKHASHT\
+TWCDM: 0
+ 0
+
+TWCDSK: SKIPA B,TMVORG ;CLEAR DISK OF OLD HASHTS
+TWCDK1: ADDI B,NWDPM
+ CAML B,TMVEND
+ POPJ P,
+ SKIPN A,1(B)
+ JRST TWCDK1
+ MOVEM A,TWCDM
+ SKIPE 4(B)
+ .FDELE TWCD
+ JRST TWCDK1
+ JRST TWCDK1
+
+TWOGTB: MOVEI A,TWINT
+ .SUSET [.SPICLR,,[0]]
+ MOVEM A,TWINTS
+ MOVEI A,TYINT
+ MOVEM A,INT
+ JSR INT+1
+ POPJ P,
+
+TWOGQ: SKIPL QTF
+ JRST TWCOM1 ;COMMAND WAITING
+ SKIPLE B,TRLMTP
+ JRST TWOGQA ;PLAY MOVE BEFORE QUITTING
+ SKIPE TWNHF
+ PUSHJ P,TWROH
+TWOGQ1: SETZM TWOGTF ;QUIT
+ PUSHJ P,TWCDSK
+ MOVE P,TWOGPM
+ MOVEI A,CINT2
+ MOVEM A,TWINTS
+ JRST PNORM
+
+TWOGW1: SETOM TWNHF
+TWOGTW: SKIPL TRLMVP ;WAIT FOR MV TO BE READ
+ JRST TWOGTQ
+ MOVEI A,1
+ .SLEEP A,
+ JRST TWOGTW
+
+TWMATE: MOVEI A,CINT2
+ MOVEM A,TWINTS
+ PUSHJ P,TWCDSK
+ MOVE P,TWOGPM
+ LDB A,[70100,,@GAMP] ;CHKBT
+ MOVEI B,TYO
+ SOUT @TWMATX(A)
+ JRST PNORM
+
+TWMATX: [ASCIZ \STALEMATE
+\]
+ [ASCIZ \CHECKMATE
+\]
+
+TWCOM: SETZM QTF ;COMMAND
+ PUSHJ P,RMOVE
+ TRNA
+ PTTY [ASCIZ \?\]
+ SOSGE TRCOLF
+ POPJ P,
+TWCOMI: .IOT TYIC,A
+ SKIPL AUXTTS
+ .IOT AUXTYOC,A
+ CAIN A,":
+ JRST TWCOM
+ JRST TWCOMI
+
+TWCOM1: PUSHJ P,TWCOM
+ PUSHJ P,TWOGTB
+ JRST TWOGT8
+
+WTYPLM: MOVEI B,PILPT
+ SOUT [ASCIZ \
+***************\]
+ PUSHJ P,TYPLM
+ JRST DCRR
+
+TWPLM: MOVEI A,100.
+ PUSHJ P,AUXLRS
+ MOVEI B,AUXLPT
+ PUSHJ P,TYPLM
+ JRST DCRR
+TWINT: MOVEM P,TWACS+P
+ MOVEI P,TWACS
+ BLT P,TWACS+P-1
+ MOVEI A,TWINT1
+ MOVEM A,TWINTS
+ JRST TRMOVE
+
+TWINTS: CINT2 ;OR TWINT OR TWINT1 OR TWINTC
+
+TWINT1: MOVEM P,TWACS+P
+ MOVEI P,TWACS
+ BLT P,TWACS+P-1
+ MOVSI P,TWINT0
+ BLT P,P
+ JRST TRCHAR
+
+TWINTC: MOVEI A,TYIC
+ .ITYIC A,
+ JRST INT1
+ CAIN A,^G
+ JRST TQUITC
+ CAIN A,":
+ JRST TWICC
+ SKIPG TRLMVP
+ CAIE A,177
+ JRST INT1
+TWICI: .IOT TYIC,A
+ SKIPL AUXTTS
+ .IOT AUXTYOC,A
+ CAIE A,177
+ JRST TWICI
+ MOVEM P,TWACS+P
+ MOVEI P,TWACS
+ BLT P,TWACS+P-1
+ MOVEI A,TWINT1
+ MOVEM A,TWINTS
+ JRST TRMVQ
+
+TQUITC: SETZM TRLMVP
+ SETOM QTF
+TQIC: .IOT TYIC,A
+ SKIPL AUXTTS
+ .IOT AUXTYOC,A
+ CAIE A,^G
+ JRST TQIC
+ SETOM TRCOLF
+ JRST INT1
+
+TWICC: AOSE TRCOLF
+ JRST INT1
+TWICCC: .IOT TYIC,A
+ SKIPL AUXTTS
+ .IOT AUXTYOC,A
+ CAIE A,":
+ JRST TWICCC
+ JRST INT1
+
+TWINTR: MOVEM P,TWINTP
+ MOVEI P,TWINT0
+ BLT P,TWINTP-1
+ MOVSI P,TWACS
+ BLT P,P
+ JRST INT1
+
+TQUIT: SETZM TRLMVP
+ JRST TRNMV
+
+TWACS: BLOCK 20
+
+TWINT0: BLOCK P
+TWINTP: -LPIPDL,,PIPDL
+TRMVQ: MOVEI B,[ASCIZ \?
+
+\]
+ PUSHJ P,TROUT
+TRMOVE: ;TOURNAMENT READ MOVE (PI LEVEL)
+TRMV: MOVE P,[-LPIPDL,,PIPDL-1]
+ MOVNI I,1
+ SETZM TRPS
+ SETOM TRLMVP
+ MOVE A,[TRLMVP,,TRLMVP+1]
+ BLT A,TRMVCD
+ PUSHJ P,TSYLR
+;MOVE READ COMPLETE
+ MOVNI I,1 ;COUNT OF MATCHING MOVES-1
+ SKIPA A,TMVORG ;LOOK FOR MATCHING MOVE
+TRMVL: ADDI A,NWDPM
+ CAML A,TMVEND
+ JRST TRMVD
+ MOVE C,1(A) ;MATCH MOVE
+ SKIPGE T,TRMVCD
+ JRST TRMVL1
+ LDB D,[300,,C]
+ CAME D,T
+ JRST TRMVL
+TRMVL1: SKIPGE T,TRMVPC-1
+ JRST TRMVL2
+ HLRE D,3(A)
+ CAME D,T
+ JRST TRMVL
+ SKIPGE T,TRMVPS-1
+ JRST TRMVL2
+ LDB D,[MPC,,C]
+ CAME T,TRMVST(D)
+ JRST TRMVL
+TRMVL2: SKIPGE TRMVK
+ JRST TRMVL3
+ HRRE D,3(A)
+ JUMPL D,TRMVL
+ SKIPGE T,TRMVPC
+ JRST TRMVL3
+ CAME D,T
+ JRST TRMVL
+ SKIPGE T,TRMVPS
+ JRST TRMVL3
+ LDB D,[MPTK,,C]
+ CAME T,TRMVST(D)
+ JRST TRMVL
+TRMVL3: LDB D,[MPO,,C]
+ MOVE D,BPREL(D)
+ SKIPGE T,TRMVSF-1
+ JRST TRMVL4
+ LDB TT,[BFILE,,D]
+ CAME T,TRMVFT(TT)
+ JRST TRMVL
+ SKIPGE T,TRMVSS-1
+ JRST TRMVL4
+ CAME T,TRMVFS(TT)
+ JRST TRMVL
+TRMVL4: SKIPGE T,TRMVSR-1
+ JRST TRMVL5
+ LDB TT,[BRANK,,D]
+ TLNE C,200000
+ MOVE TT,REVERS(TT)
+ CAME T,TT
+ JRST TRMVL
+TRMVL5: LDB D,[MPTO,,C]
+ MOVE D,BPREL(D)
+ SKIPGE T,TRMVSF
+ JRST TRMVL6
+ LDB TT,[BFILE,,D]
+ CAME T,TRMVFT(TT)
+ JRST TRMVL
+ SKIPGE T,TRMVSS
+ JRST TRMVL6
+ CAME T,TRMVFS(TT)
+ JRST TRMVL
+TRMVL6: SKIPGE T,TRMVSR
+ JRST TRMVL7
+ LDB TT,[BRANK,,D]
+ TLNE C,200000
+ MOVE TT,REVERS(TT)
+ CAME T,TT
+ JRST TRMVL
+TRMVL7: SKIPGE TRMVCK
+ JRST TRMVL8
+ TRNN C,CHKBT
+ JRST TRMVL
+TRMVL8: MOVEM A,TRLMTP+1(I)
+ AOJE I,TRMVL
+TRMVAM: MOVEI B,[ASCIZ \AMBIGUOUS
+\]
+ PUSHJ P,TROUT
+ JRST TRMVOK
+
+TRMVIM: MOVEI B,[ASCIZ \ILLEGAL\]
+ PUSHJ P,TROUT
+ JRST TRMVQ
+
+TRMVD: JUMPL I,TRMVIM
+TRMVOK: PUSHJ P,TRLMPT ;RETYPE INPUTTED MOVE
+ MOVEI B,[ASCIZ \ ? \]
+ PUSHJ P,TROUT
+ PUSHJ P,TRCHAR ;WAIT FOR "."
+ CAIE A,".
+ JRST TRMVQ
+ MOVEI B,[ASCIZ \*
+\]
+ PUSHJ P,TROUT
+ MOVE A,TRLMTP
+ MOVEM A,TRLMVP
+ SKIPL CLKSW
+ JRST TRMVNC
+ LDB I,[420100,,1(A)]
+ MOVE B,TRMVCC(I)
+ MOVEM B,CURCLK
+TRMVNC: SKIPE 4(A) ;LOOKING NOW OR EARLIER
+ SKIPE 5(A) ;REPLY
+TRNMV: SETOM QTF
+ MOVEI A,TWINTC
+ MOVEM A,TWINTS
+ JRST TWINTR ;RETURN TO SIMPLE PI HACKING, CHECKING ONLY FOR :, RUBOUT, AND BELL
+
+TRLMPT: MOVE I,TRLMTP ;PRINT MOVE POINTED TO BY TRLMTP
+TRLMP0: MOVE C,1(I)
+ LDB D,[300,,C]
+ JUMPN D,TRLMC
+TRLMP1: HLRZ T,3(I) ;PIECE ID OF PC MOVING
+ MOVE A,TXTB1(T)
+ PUSHJ P,TYO
+TRLMPA: MOVEI A,"/
+ PUSHJ P,TYO
+ LDB T,[MPO,,C]
+ PUSHJ P,TRLMPS
+ HRRE T,3(I)
+ JUMPL T,TRLMP2
+ MOVEI A,"*
+ PUSHJ P,TYO
+ MOVE A,TXTB1(T)
+ PUSHJ P,TYO
+ SKIPA A,TRLMPA
+TRLMP2: MOVEI A,"-
+ PUSHJ P,TYO
+ LDB T,[MPTO,,C]
+ CAIN D,3
+ TLO T,400000 ;HACK FOR EP
+ PUSHJ P,TRLMPS
+ JUMPE D,TRLMP3
+ MOVEI B,PROTXT-4(D)
+ PUSHJ P,TROUT
+TRLMP3: TRNN C,CHKBT
+ POPJ P,
+ MOVEI A,"+
+ JRST TYO
+
+TRLMC: CAILE D,2
+ JRST TRLMP1
+ MOVEI B,TYPMT-1(D)
+ PUSHJ P,TROUT
+ JRST TRLMP3
+
+TRLMPS: LDB B,[BFILE,,BPREL(T)]
+ MOVEI B,TXFILE(B)
+ PUSHJ P,TROUT
+ LDB A,[BRANK,,BPREL(T)]
+ TLNE C,200000
+ MOVE A,REVERS(A)
+ SKIPGE T
+ SOS A ;HACK FOR EP
+ MOVEI A,"0(A)
+ JRST TYO
+
+TRMVCC: BCLOCK
+ WCLOCK
+
+PP TRMVST: ;KING- OR QUEENSIDE TABLE (PIECE)
+ REPEAT 2,[
+ REPEAT 8,-1
+ REPEAT 3,KID
+ REPEAT 2,-1
+ REPEAT 3,QID
+]]
+PP TRMVFT: ;FILE TABLE (FILE)
+ RID
+ KNID
+ BID
+ KID
+ QID
+ BID
+ KNID
+ RID
+
+PP TRMVFS: ;KING- OR QUEENSIDE TABLE (FILE)
+ REPEAT 3,KID
+ REPEAT 2,-1
+ REPEAT 3,QID
+
+TRMVS: "-
+ "/
+ "*
+ "X
+ "
+ "K
+ "Q
+ "P
+ "R
+ "B
+ "N
+ "=
+ "O
+ "G
+ "E
+ "+
+ 15
+ 11
+ ":
+ "D
+ ^T
+
+TRMVNS==.-TRMVS
+
+;400000=COMMAND
+;200000=SETZM TRMVIF
+;100000=IGNORE ON 0 ARG
+;40000=SLASH
+;20000=SPACE OR DASH
+
+TRMVSV: 620000,,TDASH
+ 640000,,TSLASH
+ 600000,,TCAPT
+ 600000,,TCAPT
+ 520000,,TDASH
+ 140+KID
+ 140+QID
+ 700+PID
+ 540+RID
+ 540+BID
+ 540+KNID
+ 600000,,TPROM
+ 600000,,TCAST
+ 600000,,TGHOST
+ 600000,,TENP
+ 600000,,TCHECK
+ 400000,,TRDONE
+ 400000,,TRDONE
+ 400000,,TRCOLN
+ 400000,,TRDRAW
+ 400000,,TRTLM
+
+TDIGIT==640
+
+TDASH: SETOM TRPS
+ AOJA I,TSYLR
+
+TSLASH: SETOM TRPS
+ JRST TSYLR
+
+TCAPT: MOVEI A,1
+ MOVEM A,TRPS
+ AOSN TRMVK
+ AOJA I,TSYLR
+ JRST TRMVQ
+
+TPROM: PUSHJ P,TRCHAR
+ MOVEI C,4
+ CAIN A,"N
+ AOSA C
+ CAIN A,"B
+ AOSA C
+ CAIN A,"R
+ AOSA C
+ CAIN A,"Q
+ JRST TPROM1
+ JRST TRMVQ
+
+TPROM1: EXCH C,TRMVCD
+ JUMPGE C,TRMVQ
+ MOVEI D,0
+ PUSHJ P,TRCH
+ JRST (C)
+ JRST TRMVQ
+
+TCAST: JUMPN D,TRMVQ
+ SKIPE TRPS
+ JRST TRMVQ
+ MOVEI D,1
+ PUSHJ P,TRCH
+ TLNN C,20000
+ JRST TRMVQ
+TCAST1: CAILE D,2
+ JRST TRMVQ
+ PUSHJ P,TRCHAR
+ CAIE A,"O
+ JRST TRMVQ
+ PUSHJ P,TRCH
+ JRST .+2
+ JRST TRMVQ
+ TLNE C,20000
+ AOJA D,TCAST1
+ EXCH D,TRMVCD
+ JUMPGE D,TRMVQ
+ TLNN C,37777
+ JRST (C)
+ JRST TRMVQ
+
+TGHOST: JUMPN D,TRMVQ
+ SKIPG TRMVPC-1
+ SKIPG TRPS
+ JRST TRMVQ
+TGH1: MOVEI A,3
+ EXCH A,TRMVCD
+ JUMPGE A,TRMVQ
+ SETOM TRMVSR
+ PUSHJ P,TRCH
+ JRST (C)
+ JRST TRMVQ
+
+TENP: SKIPG TRMVPC-1
+ SKIPLE TRMVPC
+ JRST TRMVQ
+ PUSHJ P,TRCHAR
+ CAIE A,"P
+ JRST TRMVQ
+ SETZM TRMVK
+ JRST TGH1
+
+TCHECK: SETZM TRMVCK
+ PUSHJ P,TRCH
+ JRST (C)
+ JRST TRMVQ
+
+TSYLR: MOVEI D,0
+TSYLRA: PUSHJ P,TRCH
+ JRST TSYLRB
+ LSHC C,-9
+ TDNN D,[000200400777]
+ JRST TSYLRA
+ JRST TRMVQ
+
+TSYLRB: JUMPE D,(C) ;NOTHING BEFORE SEPARATOR
+ JUMPG I,TRMVQ
+ TLNN D,100000 ;FIGURE OUT WHETHER A PIECE OR A SQUARE AND GET VALUE
+ JRST TSYLRS ;SQUARE: LAST SYMBOL A DIGIT
+ TLNN D,40000
+ JRST TSYLRP ;PIECE: LAST SYMBOL P
+ SKIPGE TRPS
+ JRST TSYLRQ ;WANT A SQUARE
+ LDB A,[330500,,D] ;WANT A PIECE
+ MOVEM A,TRMVPC(I)
+ LDB A,[220500,,D]
+ JUMPE A,(C)
+ CAIE A,KID
+ CAIN A,QID
+ JRST TRKQS
+ JRST TRMVQ
+
+TRCH: PUSHJ P,TRCHAR
+ CAIG A,"8
+ CAIG A,"0
+ JRST TRCH1
+ MOVEI C,TDIGIT-"0(A) ;1-8
+TRCH2: AOS (P)
+TRCH3: SETZM TRMVIF
+ POPJ P,
+
+TRCH1: MOVSI C,-TRMVNS
+ CAME A,TRMVS(C)
+ AOBJN C,.-1
+ JUMPG C,TRMVQ
+ SKIPL C,TRMVSV(C)
+ JRST TRCH2
+ TLNE C,200000
+ JRST TRCH3
+ TLNE C,100000
+ JUMPE D,TRCH
+ POPJ P,
+
+TRCHAR: .STATUS TYIC,A
+ TRNE A,20000
+ JRST TRCHI
+ MOVEI A,TYIC
+ .ITYIC A,
+ JRST TWINTR ;NO CHARACTER WAITING
+ CAIN A,^G
+ JRST TQUIT
+TRCHI: .IOT TYIC,A
+ SKIPL AUXTTS
+ .IOT AUXTYOC,A
+ POPJ P,
+
+TSYLRS: SKIPLE TRPS
+ JRST TRMVQ
+ LDB A,[330400,,D]
+ MOVEM A,TRMVSR(I)
+TSYLRF: LDB A,[220500,,D] ;CONVERT FILE
+ JUMPE A,(C)
+ MOVEM A,TRMVSF(I)
+ LDB A,[110500,,D]
+ JUMPE A,(C)
+ MOVEM A,TRMVSS(I)
+ JRST (C)
+
+TSYLRP: SKIPGE TRPS
+ JRST TRMVQ ;P WHEN WANT SQUARE LOSES
+ SETZM TRMVPC(I) ;PID=0
+ JRST TSYLRF
+
+TRKQS: MOVEM A,TRMVPS(I)
+ JRST (C)
+
+TSYLRQ: TLNE C,40000
+ JRST TRMVQ ;/ AFTER SQUARE LOSES
+ LDB A,[330500,,D]
+ MOVEM A,TRMVSF(I)
+ LDB A,[220500,,D]
+ JUMPE A,(C)
+ MOVEM A,TRMVSS(I)
+ JRST (C)
+
+TRPS: 0 ;0 OR > IF WANT A PIECE, - IF WANT A SQUARE
+
+TRLMVP: 0 ;LEGAL MOVE POINTER
+TRLMTP: 0 ;TEMPORARY TRLMVP
+ 0
+TRMVPC: BLOCK 2 ;PIECE MOVING, PIECE CAPTURED
+TRMVPS: BLOCK 2
+TRMVSR: BLOCK 2 ;[RANK] LOC OF PIECE MOVING, DESTINATION OF PIECE MOVING
+TRMVSF: BLOCK 2 ;[FILE]
+TRMVSS: 0 ;[SIDE]
+TRMVIF: 0 ;0 IF THERE WAS SOME INPUT
+TRCOLF: 0 ;0 IF COLON TYPED
+TRDRF: 0 ;0 IF ASKING FOR DRAW
+TRMVCK: 0 ;0 IF A CHECK
+TRMVK: 0 ;0 IF A CAPTURE
+TRMVCD: 0 ;CODE 1=O-O,2=O-O-O,3=EP,4==Q,5==R,6==B,7==N
+
+TRDONE: SKIPE TRMVIF
+ JRST TRMV
+ POPJ P,
+
+TRCOLN: SETZM TRCOLF ;:
+ SKIPL TRMVIF
+ JRST CRR
+ SETZM TRLMVP
+ MOVEI A,TWINTC
+ MOVEM A,TWINTS
+ JRST TWINTR
+
+TRDRAW: SKIPE TRMVIF
+ JRST TRMVQ
+ PUSHJ P,TRCHAR
+ CAIE A,"R
+ JRST TRMVQ
+ PUSHJ P,TRCHAR
+ CAIE A,"A
+ JRST TRMVQ
+ PUSHJ P,TRCHAR
+ CAIE A,"W
+ JRST TRMVQ
+ PUSHJ P,TRCHAR
+ CAIE A,"?
+ JRST TRMVQ
+ SETZM TRDRF
+ JRST CRR
+
+TRTLM: SKIPL TRMVIF ;TYPE MACHINES LAST MOVE
+ JRST TRMVQ
+ MOVEI B,[ASCIZ \ \]
+ PUSHJ P,TROUT
+ MOVEI I,TWMLM-1
+ PUSHJ P,TRLMP0
+ PUSHJ P,CRR
+ JRST TRMV
+
+LPIPDL==10
+PIPDL: BLOCK LPIPDL
+
+TROUT: TLOA B,440700
+TROUT1: PUSHJ P,TYO
+ ILDB A,B
+ JUMPN A,TROUT1
+ POPJ P,
+
+MCRR: HRRZ A,B ;CR NEAR END OF LINE
+ CAIN A,PILPT
+ JRST MCRR2
+ CAIN A,TYO1
+ JRST MCRR3
+IFN DSPLY,[CAIE A,DISAD
+ POPJ P,
+ MOVN A,CHCNT
+ CAIL A,20
+ POPJ P,
+]
+ JRST DCRR
+
+MCRR2: MOVE A,LINEPOS
+ CAIGE A,120.-30.
+ POPJ P,
+MCRR4: PUSHJ P,DCRR
+ JRST DTAB
+
+MCRR3: MOVE A,CRPOS
+ CAIGE A,80.-25.
+ POPJ P,
+ JRST MCRR4
+
+
+IFN DEC,LINEPOS: 0
+CRPOS: 0 ;TTY CARRIGE POS
+TTYOFF: 0 ;-1 SUPPRESS ALL TTY OUTPUT (FOR SMOOTHER DISOWNED RUNNING)
+
+HACK2: MOVEI A,MNLPA
+ MOVEM A,GSW
+ SKIPG PLYN
+ JRST MNLP
+ PUSHJ P,UNMOVE
+ PUSHJ P,CAT
+IFN DSPLY,PUSHJ P,DISUP
+IFN BOOK,[MOVE A,PLYN
+ CAMGE A,BKLFT
+ CLEARM BKLFT
+]
+ JRST MNLP
+
+.DPT: IDIVI T1,60. ;OUTPUT TIME FOR WALLP
+ MOVE A,T1
+ PUSH P,T2
+ PUSHJ P,DPT
+ PUSHJ P,DPERD
+ POP P,T1
+ IMULI T1,100.
+ IDIVI T1,60.
+ IDIVI T1,10.
+ MOVE A,T1
+ PUSH P,T2 ;DON'T LEADING ZERO ELIMINATE
+ PUSHJ P,DPT
+ POP P,A
+ JRST DPT
+
+
+VALPRE: MOVE S,[PCBAL,,OPCBAL] ;COMPUTE ALG STUFF
+ BLT S,OPCBAL+4-1 ;NOTE: THIS DATA ALWAYS SET UP FOR POSITION AT TOP OF TREE
+ MOVE S,WPNC
+ MOVEM S,OWPNC
+ MOVE S,BPNC
+ MOVEM S,OBPNC
+ PUSHJ P,CDVLV
+ MOVEM S,ORGDSM
+ ADDM T1,ORGDSM
+ SUB S,T1
+ MOVEM S,DVLDIF
+ CLEARB TT,ACTV ;COMPUTE ADV THAT WOULD ACCRUE FOR INACTIVITY (IF ANY)
+ MOVE S,GAMP
+VALP1: CAIN S,GAME-1 ;COUNT MOVES SINCE LAST P MV OR CAPT
+ JRST VALP2
+ LDB Q,[MPC,,(S)]
+ SKIPL (S)
+ SKIPGE LMGT(Q)
+ JRST VALP2
+ AOS TT
+ SOJA S,VALP1
+
+VALP2: SUBI TT,10. ;NUMBER OF PLYS BEFORE PANIC
+ JUMPLE TT,VALP3
+ TLC TT,232000
+ FADR TT,TT
+ FMPR TT,[.015] ;AMOUNT LOST EACH PLY
+ CAMLE TT,[.75]
+ MOVE TT,[.75]
+ MULI TT,400
+ ASH R,-243+35.(TT)
+ MOVEM R,ACTV
+VALP3: POPJ P,
+
+RLSSET: CLEARM WTPWSW ;SET RELATIVE SWITCHES ACCORDING TO CURRENT POS, EST IN D
+ CLEARM WTPCSW ;NOTE: THIS DATA SOMETIMES SET UP FOR EXPECTED POSITION OR PREVIOUS GAME POSITION
+ CLEARM PWBSW
+ MOVM T2,D
+ SETOM EMTLSW
+ LDB S,[430100,,D] ;SIDE AHEAD
+ CAIL T2,PWNV
+ JRST RLS1 ;ONE SIDE AT LEAST A P AHEAD
+ MOVE ZR,T2
+ TLC ZR,232000
+ FADR ZR,ZR ;FLOAT AMT AHEAD
+ MOVE TT,PCBAL(S)
+ ADD TT,PNBAL(S)
+ TLC TT,232000
+ FADR TT,TT
+ FDVR ZR,TT
+ CAML ZR,[.15]
+RLS1: CLEARM EMTLSW ;ONE SIDE A P OR 15% AHEAD
+ CLEARM ACTVSW
+ CAIGE T2,2*PWNV
+ JRST RLS2
+ MOVEI ZR,1
+ SKIPN S
+ MOVNI ZR,1
+ MOVEM ZR,ACTVSW ;SIDE WHICH GAINS FROM LACK OF ACTIVITY
+RLS2: MOVE S,PCBAL
+ SUB S,PCBAL+1
+ MOVM T1,S
+ CAIL T1,PWNV
+ JRST VALPR1 ;PCS UNEVEN
+ MOVE S,PNBAL
+ SUB S,PNBAL+1
+ MOVM T1,S
+ CAIGE T1,PWNV
+ POPJ P, ;EVEN
+ LDB T1,[430100,,S]
+ XCT VALPR2(T1) ;SIDE P AHEAD WANTS TO TRD PCS
+ XCT VALPR6(T1) ;SIDE AHEAD WANTS TO KEEP P'S APT
+ POPJ P,
+
+VALPR1: LDB TT,[430100,,S] ;TT GETS SIDE AHEAD PCS
+ MOVE ZR,S
+ ADD ZR,PNBAL
+ SUB ZR,PNBAL+1
+ XOR ZR,S
+ JUMPL ZR,VALPR7 ;OTHER SIDE AHEAD ENUF P'S TO COUNTER BALANCE
+ CAIL T1,5*PWNV
+ JRST VALPR5 ;SUFFICENTLY AHEAD PAWNS DONT MATTER
+ XCT VALPR4(TT)
+ JRST VALPR5 ;SAME SIDE AHEAD
+ XCT VALPR2(TT) ;SIDE AHEAD PCS WANTS TO TRD PCS
+ XCT VALPR3+1(TT) ;AND NOT PAWNS
+ POPJ P,
+
+VALPR7: XCT VALPR2+1(TT) ;SIDE AHEAD PCS WANTS TO TRADE NEITHER
+ XCT VALPR3+1(TT)
+ POPJ P,
+
+VALPR4: SKIPLE PNRAT2 ;WHITE AHD ON PCS SKIP BLACK AHEAD ON PAWNS
+ SKIPGE PNRAT2
+
+VALPR5: XCT VALPR2(TT) ;SUPER AHEAD, TRD PCS AND PAWNS
+ XCT VALPR3(TT)
+ POPJ P,
+
+VALPR2: AOS WTPCSW ;WHITE WANTS TO TRD PCS
+ SOS WTPCSW
+ AOS WTPCSW
+
+VALPR3: AOS WTPWSW ;WHITE WANTS TO TRD PAWNS
+ SOS WTPWSW
+ AOS WTPWSW
+
+VALPR6: AOS PWBSW
+ SOS PWBSW
+
+;;PNP
+
+PWNPNT: PUSHJ P,DCRR
+ SETZM PPNTF1
+ MOVSI C,-5
+PWNPT2: SETZM PPNTF2
+ MOVE D,[-NPC,,1]
+PNPT2A: SKIPN PIECEL(D)
+ JRST PWNPT3
+ XCT PNPTB1(C)
+ JRST PWNPT5
+PWNPT3: AOBJN D,PNPT2A
+ SKIPE PPNTF2
+ PUSHJ P,DCRR
+ AOBJN C,PWNPT2
+PWNPT4: SKIPE PPNTF1
+ JRST DCRR
+ POPJ P,
+
+PWNPT5: SKIPN PPNTF2
+ SOUT @PNPTB2(C)
+ SETOM PPNTF2
+ SETOM PPNTF1
+ PUSHJ P,DSPACE
+ MOVE A,PIECEL(D)
+ PUSHJ P,SQOUT
+ JRST PWNPT3
+
+PNPTB1: SKIPE PPASED(D)
+ PUSHJ P,PWNPT6
+ PUSHJ P,PWNPT6
+ PUSHJ P,PWNPT6
+ SKIPGE PPTP(D)
+
+PNPTB2: [ASCII /PASSED PAWN: !/]
+ [ASCII /FORWARD PAWN: !/]
+ [ASCII /BACKWARD PAWN: !/]
+ [ASCII /ISOLATED PAWN: !/]
+ [ASCII /PAWN DEFENDED BY A PAWN: !/]
+
+SIDTXT: [ASCIZ / FOR WHITE
+/]
+ [ASCIZ / FOR BLACK
+/]
+
+PWNPT6: HRRZ A,C
+ CAME A,PPTP(D)
+ AOS (P)
+ POPJ P,
+
+
+TYPLM: MOVE A,GAMP
+ MOVE C,(A)
+ SUBI A,GAME
+ MOVEM A,PGMCNT
+ JRST EPMOV1
+
+TYPMT: ASCIZ /O-O/
+ ASCIZ /O-O-O/
+
+TYPMT2: 11.-.LENGTH /O-O/
+ 11.-.LENGTH /O-O-O/
+
+TYPLNE: JUMPE R,CPOPJ
+ PUSHJ P,MCRR
+ MOVE C,1(R)
+ PUSHJ P,EPMOV1
+ MOVE C,(R)
+ LDB T1,[PVMGI,,C]
+ SOUT MGITXT(T1) ;MV GEN CODE
+ MOVEI A,"M
+ TLNE C,BMTHR ;MULT
+ PUSHJ P,(B)
+ MOVEI A,"D ;DISC
+ TLNE C,BIDSF
+ PUSHJ P,(B)
+ MOVEI A,"H ;HASH MATCH
+ TLNE C,BHASH
+ PUSHJ P,(B)
+ MOVEI A,"F ;HASH FORCE
+ TLNE C,BHFRC
+ PUSHJ P,(B)
+ MOVEI A,"X ;HASH LEFTOVER
+ TLNE C,BHLFT
+ PUSHJ P,(B)
+ PUSHJ P,DSPACE
+ LDB A,[PUSNM,,(R)]
+ JUMPE A,TYPLN1
+ MOVEI A,"(
+ PUSHJ P,(B)
+ LDB A,[PUSNM,,(R)]
+ PUSHJ P,DPT
+ LDB A,[PUSABB,,(R)]
+ JUMPE A,TYPLN2
+ MOVEI A,"-
+ PUSHJ P,(B)
+TYPLN2: MOVEI A,")
+ PUSHJ P,(B)
+ PUSHJ P,DSPACE
+TYPLN1: HRRZ R,(R)
+ JRST TYPLNE
+
+MGITXT: ASCIZ // ;PMG
+ ASCIZ /C/ ;OLD STYLE
+ ASCIZ /E/ ;ENG GAME
+ ASCIZ /?/ ;PMG IN PCG MODE
+
+
+IFN TS,[
+CLKUD: .SUSET [.RRUNT,,B]
+ EXCH B,LRNTIM
+ SUB B,LRNTIM
+ MOVE C,CURCLK
+ MOVMS B
+ ADDM B,1(C)
+ SKIPG CLKSW
+ POPJ P,
+ JRST CLKRD
+]
+
+;;;GO
+
+GO: .SUSET [.SSNAM,,[SIXBIT /CHESS/]]
+ MOVE P,[-PDLL+40,,PDL-1]
+IFE DECTS,[
+IFE TS,[CONO 633550+APRCHN
+ CONO DIS,100
+ MOVEI A,0
+IFE DEC,[CONO TTY,400200(A)
+ DATAI TTY,
+ ADDI A,10000
+ CAIE A,100000
+ JRST .-4
+ MOVE A,[373737,,373737]
+ MOVEM A,DISBUF
+ SETOM TTYON
+ SETOM TTYON+1
+ CONO TTY,500000+TTYCHN
+]
+IFN DEC,[CONO TTY,TTYCHN
+ SETOM TTYON
+]
+ CONO PTP,0
+ CONO PI,12377
+]
+]
+IFN DECTS,[ CALLI
+ INIT TYIC,101
+ SIXBIT /TTY/
+ TYOO,,TYII
+ CALL [SIXBIT /EXIT/]
+ OUTPUT TYOC,
+ SETZM UREADF
+ SETZM UTINT
+ SETZM LPTINT
+]
+
+ MOVEI A,OCLOCK
+ MOVEM A,CURCLK
+IFN TS,[ .OPEN TYOC,TYOF
+ .VALUE
+ .OPEN TYIC,TYIF
+ ERRTTY [ASCII /NO TYPE IN!/]
+ CLEARM GETTY
+ .STATUS TYOC,A
+ ANDI A,77
+ CAIN A,2
+ SETOM GETTY
+ SKIPL GETTY
+ JRST GO1A
+ MOVEI A,2
+ MOVNM A,FFANCY
+ MOVEI B,TYO
+GO1B: MOVEM B,TRPSW
+GO1: MOVEI A,TYINT+PDLOVI+CLKINT
+ .SUSET [.SMASK,,A]
+ .SUSET [.RRUNT,,A]
+ MOVEM A,LRNTIM
+]
+ SETZB TT,B
+ PUSHJ P,BDINI
+ CLEARM HSTB
+ MOVE A,[HSTB,,HSTB+1]
+ BLT A,HTNE+HSTB-1
+ MOVEI A,1005
+ MOVEM A,HSHPLN
+ MOVE A,HASHSS
+ MOVEM A,HASHS
+ SKIPE C,WALLP
+ PUSHJ P,AWALPR
+ SKIPE C,HSSW
+ PUSHJ P,HSSWR
+ PUSHJ P,ARS1
+ JRST MNLP2
+
+
+IFN TS,[
+GO1A: MOVEI B,PNTDIS
+ JRST GO1B
+]
+IFN TS,[TYIF: (SIXBIT /TTY/)
+ SIXBIT /CHESS/
+ SIXBIT /INPUT/
+
+TYOF: (21+SIXBIT /TTY/)
+ SIXBIT /CHESS/
+ SIXBIT /OUTPUT/
+GETTY: 0 ;-1 => GE CONSOLES WIN WIN
+]
+
+IFN DECTS,[
+TYII: BLOCK 3
+TYOO: BLOCK 3
+RENTER: SETOM QTF
+ JRST 2,@JOBOPC
+]
+
+MNLP1:
+IFN DSPLY,PUSHJ P,DISUP
+ PTTY [ASCII /ILLEGAL!/]
+
+MNLP: CLEARM DISSUP ;DISPLAY SUPPRESS SWITCH
+IFE TS+DECTS,[CONO PI,12377
+ CONO 2000+APRCHN
+ CONO TTY,TTYCHN
+]
+ CLEARM BKF2R
+IFN BOOK,[CLEARM BOOKF1
+]
+IFE DECTS,[
+IFE TS, SKIPL CLKSW
+IFN TS, SKIPN CLKSW
+ JRST MNCL1
+IFN TS, PUSHJ P,CLKUD
+ MOVE A,GSW
+ MOVE B,PLYN
+ MOVEI C,WCLOCK
+ TRNE B,1
+ MOVEI C,BCLOCK
+ CAIN A,MNLPA
+ MOVEI C,OCLOCK
+ MOVEM C,CURCLK
+]
+MNCL1: MOVE P,[-PDLL+40,,PDL-1]
+ LDB A,[100,,PLYN]
+ PUSHJ P, @GSW
+ JRST MNLP
+
+MNLPA: PUSHJ P,RMOVE
+ JRST MNLP2B
+ PUSHJ P,IMMOVE
+ JRST MNLP1
+IFN HSCOD,[
+ PUSHJ P,HSREC ;PERMANENT MOVE RECORD FOR HASH TBL SETUP
+]
+ MOVSI A,(SETZ)
+ MOVE T1,GAMP
+ MOVEM A,GAMEV-GAME(T1)
+ MOVEI A,"_
+ SKIPN UREADF
+ PUSHJ P,TYO
+ SKIPE UREADF
+ SETOM DISSUP
+ SKIPE PMDDSW
+ JRST PMDD1 ;PRODUCE P.M. DEBUGGING PRINTOUT
+ SKIPN PPVSW
+ JRST MNLP2
+ LDB I,[100,,PLYN]
+ PUSHJ P,STVL4
+ MOVE A,R
+ MOVEI B,TYO
+ PUSHJ P,DPT
+ SKIPGE PPVSW
+ JRST MNLPP1
+MNLPP2: PUSHJ P,DCRR
+MNLP2:
+IFN DSPLY,[
+ AOSE DISSUP ;IF DISPLAY ALREADY GENERATED, DONT CLOBBER
+ PUSHJ P,DISUP
+]
+ JRST MNLP
+
+
+MNLP2B: SKIPGE UREADF
+ SETOM DISSUP
+ JRST MNLP2
+
+MNLPP1: PUSHJ P,DTAB
+ MOVE T1,WTDVL
+ MOVE T2,BTDVL
+ MOVE D,T1
+ SUB D,T2
+ ISOUT [.ASCII /WTDVL *U!T1 BTDVL *U!T2 DIF *U!D
+/]
+ PUSHJ P,ATPCC
+ JRST MNLP
+
+AFASTER: SKIPE A,CPRAMS
+ JRST CCTM2
+ PTTY [ASCII /FASTEST!/]
+ POPJ P,
+
+ASLOWER: MOVEI B,TYO
+ MOVE A,CPRAMS
+ CAIL A,NPARS-1
+ JRST ASLOW1
+ AOS A,CPRAMS
+ ISOUT [.ASCII ?PARAM *O!A?]
+ JRST PARLD
+
+ASLOW1: SOUT [ASCII /SLOWEST!/]
+ POPJ P,
+
+MYBORD: BLOCK BD2
+
+PATH3: LDB C,PATHLD+1(I)
+ JUMPN C,PATH2
+ JRST PATH2+1
+
+PATH: LDB I,[100,,PLYN]
+ MOVSI A,-BD2
+PATH1: SKIPN B,BOARD(A)
+ JRST PATH3
+ JUMPL B,PATH2
+ SKIPGE LMGT-PIECE(B)
+PATH2: SKIPA C,[-1]
+ MOVEI C,69.
+ MOVEM C,MYBORD(A)
+ AOBJN A,PATH1
+ MOVE Q,@OKINGT(I)
+ SETZM MYBORD(Q)
+ MOVEI Q,MYBORD(Q)
+ MOVEI C,1
+ PUSHJ P,PTHFND
+ MOVE B,PNTS
+ PUSHJ P,DCRR
+ MOVSI Q,-BD2
+ MOVEI R,10.
+PATH5: MOVE A,MYBORD(Q)
+ PUSHJ P,DPT
+ SKIPN DPTNC
+ PUSHJ P,DSPACE
+ PUSHJ P,DSPACE
+ SOJG R,PATH6
+ PUSHJ P,DCRR
+ MOVEI R,10.
+PATH6: AOBJN Q,PATH5
+ POPJ P,
+
+PTHFND: MOVSI A,-8
+PTFND1: MOVEI B,@RADTAB(A)
+ CAML C,(B)
+ JRST PTFND2
+ MOVEM C,(B)
+ PUSH P,Q
+ PUSH P,A
+ MOVE Q,B
+ AOJ C,
+ PUSHJ P,PTHFND
+ POP P,A
+ POP P,Q
+ MOVE C,(Q)
+ AOJ C,
+PTFND2: AOBJN A,PTFND1
+ POPJ P,
+
+PATHLD: NPAS,,WPAS(A)
+ NPAS,,BPAS(A)
+ NPAS,,WPAS(A)
+
+RADTAB: 1(Q) ;SQUARES ADJACENT TO SQ IN Q
+ 0 -1(Q)
+ BW(Q)
+ 0 -BW(Q)
+ BW+1(Q)
+ 0 -BW-1(Q)
+ BW-1(Q)
+ 0 -BW+1(Q)
+
+;;;PMDBG
+
+PMDD1:
+IFN DSPLY,[
+ MOVEI B,1
+ MOVEM B,FFANCY
+]
+ MOVEI A,PMDDR
+ MOVEM A,BKF2R
+ PUSH P,UBKF
+ CLEARM UBKF
+ MOVEM P,PMDDT1
+ PUSHJ P,HACK1
+
+PMDDR:
+IFN DSPLY, PUSHJ P,DISINS
+ MOVE B,TRPSW
+IFN DSPLY, PUSHJ T,TD2C
+ SETOM PMDDT2
+ MOVE TT,[-NPC,,1]
+PMDD2B: SKIPE C,SPINT(TT)
+ JRST PMDD2
+PMDD2A: AOBJN TT,PMDD2B
+ SETOM PMDDT2
+ MOVE TT,[-NPC,,1]
+PMDD3B: SKIPE C,PINT(TT)
+ JRST PMDD3
+PMDD3A: AOBJN TT,PMDD3B
+ MOVE TT,[-NPC,,1]
+ SETOM PMDDT2
+PMDD4B: SKIPE C,ENPCL(TT)
+ JRST PMDD4
+PMDD4A: AOBJN TT,PMDD4B
+ PUSHJ P,DCNTRL
+IFN DSPLY, PUSHJ P,.DISB1
+ MOVE P,PMDDT1
+ POP P,UBKF
+ JRST MNLP
+
+DCNTRL: PUSHJ P,DCRR ;DISPLAY CNTRL STATUS
+ MOVE A,[-8,,7*BW+2*BW+BW-2]
+ MOVEI I,0
+PMCP1: SKIPL BPCHD(A)
+ PUSHJ P,MCAF
+ LDB C,[BSQSP,,CNTRL(A)]
+ SOUT CTLTXT(C)
+ SUBI A,2
+ AOBJN A,PMCP1
+ PUSH P,A
+ PUSHJ P,DCRR
+ POP P,A
+ ADD A,[-8-1,,-2]
+ SKIPL BOARD(A)
+ JRST PMCP1
+ POPJ P,
+
+PMDD2: AOSN PMDDT2
+ ISOUT [ASCIZ /CONSTRAINTS/]
+ MOVE A,PIECEL(TT)
+ LDB T2,[410300,,(C)]
+ LDB T1,[SPINSQ,,(C)]
+ LDB R,[SPINVL,,(C)]
+ ISOUT [.ASCII ?*P!TT AT *S!A CD *O!T2 TO *S!T1 LOSS *U!R?]
+ LDB C,[SPNLK,,1(C)]
+ JUMPE C,PMDD2A
+ JRST PMDD2
+
+PMDD3: AOSN PMDDT2
+ ISOUT [ASCIZ /PINS/]
+ MOVE A,PIECEL(TT)
+ LDB T1,[PINBS,,1(C)]
+ LDB T2,[PINATP,,1(C)]
+ MOVE S,2(C) ;PICK UP VALUE
+ ISOUT [.ASCII ?*P!TT AT *S!A PINNED TO *S!T1 BY *P!T2 VAL *U!S?]
+ HRRZ C,(C)
+ JUMPE C,PMDD3A
+ JRST PMDD3
+
+PMDD4: AOSN PMDDT2
+ ISOUT [ASCIZ /EN PRISE/]
+ MOVE A,PIECEL(TT)
+ MOVE D,DEFVL(TT)
+ ISOUT [.ASCII ?*P!TT AT *S!A ENPCL *U!C DEFVL *U!D?]
+ JRST PMDD4A
+
+ARPLY: MOVE T1,PLYN
+ CAML T1,RPLYPN ;DONT START YET
+ SKIPN RWPF(A)
+ JRST MNLPA ;READ MOVE
+ PUSHJ P,HACK1
+ SKIPGE QTF
+ POPJ P,
+ MOVE A,@GAMP
+ MOVEM A,ARPLYT
+ LDB I,[100,,PLYN]
+ XORI I,1
+ PUSHJ P,UNMOVE
+ARPLY1: SKIPN UREADF
+ JRST PNORM
+ PUSHJ P,RMOVE
+ JRST ARPLY1
+ PUSHJ P,IMMOVE
+ JRST MNLP1
+ MOVE A,ARPLYT
+ CAMN A,@GAMP
+ POPJ P,
+ MOVEI B,TYO
+ ISOUT [.ASCII ?MV DFRS AT PLY *U!PLYN?]
+ POPJ P,
+
+ARPLYT: 0
+
+;;PARLD
+
+IFE DECTS,[
+PARLD: PUSH P,A ;LOAD SET OF PAR IN A
+ MOVEI B,TYO
+ SOUT [ASCII /CHANGING TO PARAMETER NOS !/]
+ MOVE A,(P)
+ PUSHJ P,DPT
+ PUSHJ P,DCRR
+ MOVE A,(P)
+ MOVE C,PARD(A)
+ MOVEM C,HK1V
+ MOVE C,PARF(A)
+ MOVEM C,FDCUT
+ MOVE C,PARCG(A)
+ MOVEM C,PCGSW
+ IMULI A,SBRLNG
+ HRLI B,PARW(A)
+ HRRI B,SBR
+ BLT B,SBR+SBRLNG-1
+ JRST POPAJ
+
+LTMDF==3 ;NO OF MOVES IN TIME RING BUFFER
+
+NPARS==7 ;NO POSSIBLE SETS PARAMENTERS
+
+PARD: 2 ;DEPTH
+ 3
+ 3
+ 4
+ 4
+ 5
+ 6
+
+PARF: 1
+ 1
+ 1
+ 1
+ 2
+ 2
+ 3
+
+PARCG: 0
+ 1
+ 2
+ 1
+ 2
+ 2
+ 2
+
+PARW: REPEAT 3,[
+ 5
+ 5
+ REPEAT SBRLNG-2,4
+]
+ 7
+ 5
+ 5
+ 5
+ REPEAT SBRLNG-4,5
+REPEAT 3,[
+ 8
+ 6
+ 6
+ 6
+ REPEAT SBRLNG-4,6
+]
+
+MMCUTM: 45.*60.*10. ;TAKE NO ACTION FOR THIS AMT OF TIME
+MSPC: 0 ;MOVES SINCE PAR CHANGE
+CPRAMS: 3 ;NUMBER OF CURRENT PARAMETERS
+MMTMP: 0 ;POINTER TO MMTMT
+MMTMT: BLOCK LTMDF ;TIME TAKEN BY MACHINE FOR LAST N MOVES
+
+CLKSW: -1 ;-1 RUN TIME ACCORDING TO SIDE TO MOVE
+ ;0 DONT RUN TIME
+ ;1 RUN TIME ACCORDING TO CLOCK KLUDGE
+
+CLKTB: WCLOCK
+ BCLOCK
+
+BWCLK: 0 ;CLOCK READING WHEN CLOCK "STARTED"
+BBCLK: 0
+
+TIML: 115.*60.*10. ;TIME LIMIT IN TENTHS OF SEC
+MOVL: 45. ;NO OF PLYS THAT HAVE TO BE MADE BY THEN
+TIMLI: 1*55.*60.*10. ;INCREMENT TO TIML FOR NEXT LIMIT
+MOVLI: 25. ;INCREMENT TO MOVL
+BASPAR: 3 ;BASE PARAMETER SET
+
+
+CCTIM: MOVE T2,PLYN
+ AOS T2
+ LSH T2,-1
+ CAML T2,MOVL
+ JRST CCTM1 ;HAVE MET OLD LIMIT
+ MOVE I,MACCLR
+ MOVE A,MSPC
+ CAIGE A,LTMDF
+ POPJ P, ;HAVE CHANGED PARAMS IN LAST 3 MOVES
+ MOVSI A,-LTMDF
+ MOVEI B,0
+ ADD B,MMTMT(A)
+ AOBJN A,.-1
+ IDIVI B,LTMDF ;AVG TIME FOR LAS LTMDF MVS
+ ADDI B,15.*10. ;EXTRA FOR OVERHEAD
+ MOVE T1,T2 ;NUMBER OF MOVES PLAYED SO FAR
+ SUB T1,MOVL
+ MOVNS T1
+ IMUL B,T1
+ MOVE T2,B ;SAVE ESTIMATED TIME TO COMPLETE
+ ADD B,@CLKTB(I) ;PROJECTED CLOCK READING AT TIME CONTROL
+ CAMG B,TIML
+ JRST CCTM3 ;MAYBE GO SLOWER
+ MOVE A,BASPAR ;WOULD OVERSTEP
+ CAMGE A,CPRAMS
+ JRST CCTM2 ;HAVE SWITCHED UP SO ALLOW SWITCH BACK DOWN
+ MOVE A,@CLKTB(I)
+ CAMG A,MMCUTM ;DONT SPEED UP UNTIL USED THIS MUCH TIME
+ POPJ P,
+
+;DROPS THRU;DROPS IN
+CCTM2: SKIPN CPRAMS
+ POPJ P,
+ SOS CPRAMS
+CCTM2A: MOVEI B,TYO
+ SOUT [ASCII /
+PARAM !/]
+ MOVE A,CPRAMS
+ PUSHJ P,DPT
+ PUSHJ P,DCRR
+ MOVE A,CPRAMS
+ CLEARM MSPC
+ JRST PARLD
+
+CLKRD: SKIPG CLKSW
+ POPJ P,
+ PUSHJ P,CLKR1
+ SUB A,BWCLK
+ SUB B,BBCLK
+ MOVEM A,WCLOCK
+ MOVEM B,BCLOCK
+ POPJ P,
+
+CLKR1: MOVE ZR,[64,,A]
+ .GETLOC
+ MOVE ZR,[65,,B]
+ .GETLOC
+ POPJ P,
+
+CCTM3: ADD B,T2
+ MOVE S,TIML
+ SUB S,@CLKTB(I)
+ CAIL S,15.*60.*10. ;SKIP ON LESS THAN 15 MIN REMAINING
+ CAML B,TIML
+ POPJ P,
+ MOVE A,CPRAMS ;WILL USE LESS THAN 1/2 TIME SLOW DOWN
+ CAIL A,NPARS-1
+ POPJ P,
+ AOS CPRAMS
+ JRST CCTM2A
+
+CCTM1: MOVE A,TIMLI
+ ADDM A,TIML
+ MOVE A,MOVLI
+ ADDM A,MOVL
+ MOVEI B,TYO
+ PUSHJ P,LMTYP
+ MOVE A,BASPAR
+ CAMLE A,CPRAMS
+ POPJ P,
+ MOVEM A,CPRAMS
+ JRST CCTM2A
+
+LMTYP: SOUT [ASCII /NOW SET FOR !/]
+ MOVE A,MOVL
+ PUSHJ P,DPT
+ SOUT [ASCII / IN !/]
+ MOVE C,TIML
+ PUSHJ P,TIMTP
+ JRST DCRR
+]
+
+GSW: MNLPA
+
+PNORM: MOVEI B,MNLPA
+ JRST SPMS1
+
+PSELF: MOVEI B,HACK5-HACK3
+PWHITE: ADDI B,HACK3
+ MOVEI I,0
+ JRST SPMS2
+
+PBLACK: MOVEI B,HACK4
+ MOVEI I,1
+SPMS2:
+IFE DECTS,[
+ SKIPE CLKSW
+ AOSE CLKCOK
+ JRST SPMS1
+ PTTY [ASCII /CLOCK STARTED!/]
+]
+ MOVEM I,MACCLR
+ CLEARM WCLOCK
+ CLEARM BCLOCK
+ CLEARM BWCLK
+ CLEARM BBCLK
+ SKIPG CLKSW
+ JRST SPMS1
+ PUSH P,A
+ PUSH P,B
+ PUSHJ P,CLKR1
+ MOVEM A,BWCLK
+ MOVEM B,BBCLK
+ POP P,B
+ POP P,A
+SPMS1: HRRZM B,GSW
+ JRST PSRET
+
+HACK3: JUMPE A,HACK1
+ JRST HACK4A
+
+HACK4: JUMPN A,HACK1
+HACK4A: SKIPN TWOGTS
+ JRST MNLPA
+ JRST TWOGIT
+
+HACK5:IFN TS,[ MOVEM A,HACT5
+ .LISTEN A,
+ EXCH A,HACT5
+ SKIPE HACT5
+]
+IFE TS, SKIPE TYIMP
+ JRST PNORM
+ SKIPE CLKSW
+ AOSE CLKCOK
+ JRST SPSM3
+ PTTY [ASCIZ /CLOCK STARTED!/]
+ CLEARM MACCLR
+SPSM3: PUSHJ P,HACK1
+IFN TS,[
+ SKIPL GETTY
+ JRST MNLP
+]
+ JRST MNLP2
+
+IFN TS,HACT5: 0
+
+MACCLR: 0 ;MACHINE COLOR FOR CLOCK PURPOSES
+CLKCOK: -1 ;DO NOT RUN CLOCK UNTIL A PW OR PB TYPED IN -1
+
+
+;;UUO
+
+ERROR: 0 ;UUO HANDLER
+ MOVEM A,UUOAS
+ MOVEM B,UUOBS
+ MOVEM C,UUOCS
+ LDB A,[330600,,40]
+ CAIL A,4
+ CAILE A,13 ;ISOUT
+ JRST ER5
+ MOVEM 16,TUACS+16
+ MOVEI 16,TUACS
+ BLT 16,TUACS+15
+ MOVE A,UUOAS
+ MOVEM A,TUACS+A
+ MOVE T1,ERROR
+TUX2: HRRM T1,TU5
+ LDB T2,[331100,,-1(T1)]
+ CAIE T2,XCT_-27.
+ JRST TUX3
+ SOS T1
+ HRRM T1,TUX1
+ MOVSI 16,TUACS
+ BLT 16,16
+TUX1: MOVEI T1,@.
+ AOJA T1,TUX2
+TUX3: LDB D,[330600,,40]
+ CAIN D,ISOUT_-27.
+ JRST TUIS1
+ HRRZ T1,ERROR
+ CAILE T1,TSAPTC
+ CAILE T1,TSAPTC+TSAPL
+ JRST TUX3Q
+ CAIE D,12
+ JRST ERT3
+ JRST TUIS2
+
+TUX3Q: SKIPGE TSSW
+ JRST ERT3 ;TRACE NOT ON
+ SKIPL TPSW
+ JRST TU1 ;PRINTOUT NOT DESIRED
+ MOVE B,TRPSW
+ CAIN D,12
+ JRST TUX3F
+ LDB TT,[270400,,40]
+ MOVE T1,ERROR
+ HLRZ T1,-1(T1)
+ TRZ T1,(17,)
+ CAIN T1,10000+P ;ADD (P)
+ JRST TUX3A
+ PUSHJ P,TUCOP
+ JUMPE A,TU1 ;OPERAND=0
+TUX3A: MOVEI A,40
+ LDB T1,[420100,,TUT1-4(D)]
+ JUMPN T1,TUX3B ;MOVE OP DONT PRINT PREV CONTENTS
+ MOVEI A,"?
+ MOVE T1,TUACS(TT)
+ CAME T1,TUSR
+TUX3D: PUSHJ P,(B)
+
+TUX3E: MOVE A,TUACS(TT)
+ PUSHJ P,DPT
+TUX3B: PUSHJ P,DTAB
+ PUSHJ P,TUCOP
+ PUSHJ P,DPT
+ PUSHJ P,DTAB
+TU5: MOVEI A,. ;EFFECTIVE LOCN OF UUO+1
+ CAIN A,ITRS1+1
+ MOVEI A,TRS1 1 ;HACK HACK
+ MOVE J,TRCSW1
+ MOVE C,ATRTT1(J)
+TU3: HLRZ T1,@ATRTT3(J)
+ CAMN T1,A
+ JRST TU2
+ AOBJN C,TU3
+ MOVEI C,[ASCII /UNKNOWN TRACE UUO!/]
+ JRST ERT4
+
+TUIS2: MOVE B,TRPSW
+ HRRZ TT,40
+ HRRZ TT,(TT)
+ JRST TU3B
+
+TUIS1: MOVE B,TUACS+B
+ HRRZ TT,40
+ JRST TU3B
+
+TUX3F: MOVE TT,TRSAC ;STRING OP (PRODUCED WHEN "UNKNOWN INST" PATCHED AT)
+ MOVE TT,TUACS(TT)
+ MOVEI A,"?
+ CAME A,TUSR
+ PUSHJ P,(B)
+ MOVEI A,"R
+ PUSHJ P,(B)
+ PUSHJ P,DSPACE
+ MOVE A,TUACS+R
+ PUSHJ P,DPT
+ PUSHJ P,DTAB
+ MOVEI A,"W
+ PUSHJ P,(B)
+ PUSHJ P,DSPACE
+ MOVE A,TUACS+W
+ PUSHJ P,DPT
+ PUSHJ P,DTAB
+TU3A: HRRZ TT,40
+ HRRZ TT,(TT)
+ JRST TU3B
+
+TU2: HRRZ TT,@ATRTT3(J)
+TU3B: HRLI TT,440700
+TR6L: ILDB A,TT
+TR6L4: JUMPE A,TR7
+ CAIN A,"*
+ JRST TR6L1 ;HACK HACK
+ PUSHJ P,(B)
+ JRST TR6L
+
+TR6L1: ILDB A,TT
+ MOVEI T1,0
+TR6L3: ILDB T2,TT
+ CAIL T2,"0
+ CAILE T2,"7
+ JRST TR6L2
+ LSH T1,3
+ ADDI T1,-"0(T2)
+ JRST TR6L3
+
+TR6L2: MOVEM T2,TR6LCS
+ CAIG T1,20
+ ADDI T1,TUACS
+ MOVE T2,(T1)
+ EXCH A,T2
+ PUSH P,UUOCS
+ PUSH P,UUOBS
+ PUSH P,UUOAS
+ PUSH P,40
+ PUSH P,ERROR
+ PUSH P,TT
+;;;STD
+ CAIN T2,"S ;SQUARE
+ JRST TR6LS
+ CAIN T2,"P ;PIECE
+ JRST TR6LP
+ CAIN T2,"M ;PIECE AFTER SUBTRACTING "PIECE"
+ JRST TR6LM
+ CAIN T2,"O ;OCTAL
+ JRST TR6LO
+ CAIN T2,"F ;FILE
+ JRST TR6LF
+ CAIN T2,"D ;DIRECTION
+ JRST TR6LD
+ CAIN T2,"H ;RH IN OCTAL
+ JRST TR6LH
+ CAIN T2,"U ;DECIMAL
+ JRST TR6LU
+ CAIN T2,"L ;LEFT HALF IN OCTAL
+ JRST TR6LL
+ CAIN T2,"Q ;FLOATING
+ JRST TR6LQ
+ CAIN T2,"T
+ JRST TR6TH ;PRINT C(E) AS THREAT
+ CAIN T2,"V
+ JRST TR6PM ;PRINT C(E), +1 AS MV DESC ENTRY
+ CAIN T2,"C
+ JRST TR6PC ;PRINT CLASS
+ CAIN T2,"X
+ JRST TR6CN ;CONSTRAINT
+ CAIN T2,"Y
+ JRST TR6PN ;PIN (PNTR TO THREE WD BLOCK)
+ CAIN T2,"G
+ JRST TR6GN ;AS "GAIN" ADDRESS
+ CAIN T2,"Z
+ JRST TR6ZP ;RH AS DECIMAL
+ CAIN T2,"R
+ JRST TR6PR ;AS PREP TBL ENTRY
+;;UUO1
+ MOVEI C,[ASCII /UNKNOWN * CODE!/]
+ JRST ERT4
+
+TR7: CAIE D,ISOUT_-27.
+ JRST TR7A
+ LDB T1,[270400,,40]
+ SKIPN T1
+TR7A: PUSHJ P,DCRR
+TU1: CAIE D,ISOUT_-27.
+ CAIN D,12
+ JRST TU1C
+ PUSHJ P,TUCOP
+ LDB T1,[420100,,TUT1-4(D)]
+ LDB T2,[270400,,40]
+ XCT TUT2(T1)
+ MOVEM A,TUSR
+TU1C: MOVSI 16,TUACS
+ BLT 16,16
+ JRST TUUX
+
+TRPSW: PNTDIS ;ENTRY OF ROUTINE FOR TRACE OUTPUT
+
+PNTDIS: SKIPN DBDSSW
+ JRST PNTD1
+ SKIPL HV340
+ SKIPGE GETTY
+ JRST .+2
+ JRST PNTD1
+ SKIPE WALLP
+ PUSHJ P,PILPT
+PNTD2:
+IFN DSPLY, JRST DISAD
+IFE DSPLY, JRST TYO
+
+PNTD1: PUSHJ P,TYO
+ JRST PNTD2
+
+TUCOP: HRRE A,40
+ CAIGE D,7
+ JRST TU1A
+ CAIGE A,20
+ JUMPGE A,TU1B
+ MOVE A,(A)
+TU1A: SKIPGE TUT1-4(D)
+ MOVNS A
+ POPJ P,
+
+TU1B: MOVE A,TUACS(A)î
+ JRST TU1A
+
+ER5: CAIN A,SOUT_-27.
+ JRST ER3
+ CLEARM TTYOFF
+IFN UTAPE, CLEARM UREADF
+ CAIN A,PTTY_-27.
+ JRST ER4
+ CAIE A,ERRTTY_-27.
+ JRST ERT3
+ LDB A,[270100,,40]
+ JUMPE A,ERT5
+ PUSH P,40
+ PUSH P,ERROR
+ PUSH P,UUOAS
+ PUSH P,UUOBS
+ PUSH P,UUOCS
+ PUSH P,D
+ PUSH P,T
+ PUSH P,TT
+ PUSH P,T1
+ PUSH P,T2
+ MOVEI B,TYO
+ MOVE TT,EGPC
+ SOS TT
+ PUSHJ P,CRR
+ PUSHJ P,EGTRI
+ POP P,T2
+ POP P,T1
+ POP P,TT
+ POP P,T
+ POP P,D
+ POP P,UUOCS
+ POP P,UUOBS
+ POP P,UUOAS
+ POP P,ERROR
+ POP P,40
+ERT5:
+IFE TS+DECTS,[CONO PI,400 ;FATAL ERROR, TURN OFF INTERRUPTS
+ CONO TTY,0
+] PUSHJ P,ECRR
+ HRRZ C,40
+ERT4: HRLI C,440700
+ERT2: ILDB A,C
+ CAIN A,"!
+ JRST ERT1
+ JUMPE A,ERT1
+ PUSHJ P,ETYO
+ JRST ERT2
+
+ERT1: PUSHJ P,ECRR
+ MOVE A,UUOAS
+ MOVE B,UUOBS
+ LDB C,[300100,,40]
+ JUMPN C,ERT1R ;RETURN AFTER ERRTTY
+ MOVE C,UUOCS
+IFE TS+DECTS,[
+ CONI APRCON
+ JRST DDT
+]
+IFN TS,LOSE: .VALUE
+ JRST .-1
+
+IFN DECTS, LOSE: JRST 4,.
+TUACS: BLOCK 20
+
+ERT1R: MOVE C,UUOCS
+ JRST 2,@ERROR
+
+TUT1: 2_33. ;4.9 1=SUB
+ 0_33. ;4.8 1=MOVE
+ 4_33.
+ 2_33.
+ 0_33.
+ 4_33.
+ 0 ;JUST STRING PRINT
+
+TUT2: ADDB A,TUACS(T2)
+ MOVEM A,TUACS(T2)
+
+TUSR: 0 ;SAVED VAL OF R
+
+;;;STD1
+TR6LS: PUSH P,I
+ LDB I,[100,,PLYN]
+ PUSHJ P,SQOUT
+ POP P,I
+TR6LR: POP P,TT
+ POP P,ERROR
+ POP P,40
+ POP P,UUOAS
+ POP P,UUOBS
+ POP P,UUOCS
+ MOVE A,TR6LCS
+ JRST TR6L4
+
+TR6LCS: 0
+
+TR6LH: TLZA A,-1 ;RH
+TR6LL: HLRZS A ;LH
+TR6LO: PUSHJ P,OCTPNT
+ JRST TR6LR
+
+TR6ZP: HRRZS A
+TR6LU: PUSHJ P,DPT
+ JRST TR6LR
+
+TR6LM: SUBI A,PIECE
+TR6LP: PUSHJ P,PCOUT
+ JRST TR6LR
+
+
+TR6LF: SOUT TXFILE(A)
+ JRST TR6LR
+
+TR6LD: SOUT TXDIR(A)
+ JRST TR6LR
+
+TR6LQ: PUSHJ P,FPFP ;FLOATING POINT
+ JRST TR6LR
+
+TR6TH: MOVE J,A ;OUTPUT THREAT
+ LDB A,[THRTP,,(J)]
+ PUSHJ P,PCOUT
+ SOUT [ASCIZ / TO /]
+ LDB A,[THRTS,,(J)]
+ PUSHJ P,SQOUT
+ LDB T1,[THRCD,,(J)]
+ SOUT @TR6THT(T1)
+ SOUT [ASCIZ /VAL /]
+ LDB A,[THRVAL,,(J)]
+ PUSHJ P,DPTS
+ SKIPGE A,1(J)
+ SOUT [ASCIZ /SINGLE /]
+ TLNE A,THSTR
+ SOUT [ASCIZ /STRONG /]
+ TLNE A,THQTH
+ SOUT [ASCIZ /QUEST /]
+ SOUT [ASCIZ /TEMPO /]
+ HRRZ A,1(J)
+ PUSHJ P,DPTS
+ LDB A,[THRRL,,1(J)]
+ JUMPE A,TR6TH1
+ SOUT [ASCIZ / M/]
+TR6TH1: LDB TT,[THAUXP,,(J)]
+ JUMPE TT,TR6LR ;NO AUX ENTRIES
+TR6AT1: MOVE J,THAUXT(TT)
+ LDB T1,[THAXCD,,J]
+ SOUT @TR6ATT(T1)
+ LDB A,[THAXPC,,J]
+ PUSHJ P,PCOUT
+ PUSHJ P,DSPACE
+ LDB A,[THAXV,,J]
+ PUSHJ P,DPT
+ JUMPL J,TR6LR
+ AOJA TT,TR6AT1
+
+TR6PM: MOVE J,A
+ SKIPGE (J)
+ SOUT [ASCIZ /CANCELLED /]
+ LDB T1,[MVDCD,,(J)]
+ SOUT @TR6PT(T1)
+ LDB A,[MVDPC2,,(J)]
+ PUSHJ P,PCOUT
+ PUSHJ P,DSPACE
+ LDB T1,[MVDDIS,,(J)]
+ JUMPE T1,TR6PM1
+ SOUT [ASCIZ / DISCOV /]
+TR6PM1: LDB A,[MVDPC,,(J)]
+ SKIPE A
+ PUSHJ P,PCOUT
+ PUSHJ P,DSPACE
+ LDB A,[MVDSQ,,(J)]
+ PUSHJ P,SQOUT
+ PUSHJ P,DSPACE
+ MOVE A,1(J)
+ PUSHJ P,DPT
+ MOVSI A,(MVSAB)
+ TDNE A,(J)
+ SOUT [ASCIZ / STRONG/]
+ MOVSI A,(MVDAB)
+ TDNE A,(J)
+ SOUT [ASCIZ / DBLED/]
+ MOVSI A,(MVWAB)
+ TDNE A,(J)
+ SOUT [ASCIZ / WEAK/]
+ MOVSI A,(MVATB)
+ TDNE A,(J)
+ SOUT [ASCIZ / THRU/]
+ JRST TR6LR
+
+
+TR6PC: SOUT @DGTXT(A)
+ JRST TR6LR
+
+TR6CN: MOVE J,A
+TR6CN1: SOUT [ASCIZ /CON TO /]
+ LDB A,[SPINSQ,,(J)]
+ PUSHJ P,SQOUT
+ SOUT [ASCIZ / VAL /]
+ LDB A,[SPINVL,,(J)]
+ PUSHJ P,OCTPNT
+ JRST TR6LR
+
+
+TR6PN: MOVE J,A
+TR6PR1: LDB A,[PINOPS,,1(J)]
+ MOVE A,BOARD(A)
+ SUBI A,PIECE
+ PUSHJ P,PCOUT
+ SOUT [ASCIZ / PINNED TO /]
+ LDB A,[PINBS,,1(J)]
+ MOVE A,BOARD(A)
+ SUBI A,PIECE
+ PUSHJ P,PCOUT
+ SOUT [ASCIZ / BY /]
+ LDB A,[PINATP,,1(J)]
+ PUSHJ P,PCOUT
+ SOUT [ASCIZ / VAL /]
+ MOVE A,2(J)
+ PUSHJ P,OCTPNT
+ JRST TR6LR
+
+TR6GN: SOUT @GANNTB-BGNS(A)
+ JRST TR6LR
+
+TR6PR: MOVE TT,A
+ PUSH P,TT
+ SOUT [ASCIZ /PREP /]
+ LDB J,[MPTHN,,(TT)]
+ ADD J,@OTRPP(I)
+ LDB A,[THRTP,,(J)]
+ PUSHJ P,PCOUT
+ SOUT [ASCIZ / TO /]
+ LDB A,[THRTS,,(J)]
+ PUSHJ P,SQOUT
+ POP P,J
+ LDB A,[MPTYP,,(J)]
+ LDB J,[MPPNR,,(J)]
+ JUMPE A,TR6PRP
+ SOJE A,TR6PRC
+ SOUT [ASCIZ /???/]
+ JRST TR6LR
+
+TR6PRP: SOUT [ASCIZ / RLV PIN /]
+ JRST TR6PR1
+
+TR6PRC: SOUT [ASCIZ / RLV CON /]
+ LDB A,[SPCCN,,(J)]
+ PUSHJ P,PCOUT
+ PUSHJ P,DSPACE
+ JRST TR6CN1
+
+;;UUO2
+
+ECRR: MOVEI A,15
+ PUSHJ P,ETYO
+ MOVEI A,12
+ETYO:IFE TS+DECTS,[ CONO TTY,400000
+ CONSZ TTY,20
+ JRST .-1
+ DATAO TTY,A
+ POPJ P,]
+IFN TS,[.IOT TYOC,A
+ POPJ P,
+]
+
+IFN DECTS, JRST TYO
+
+ERT3: MOVEI C,[ASCII /UNKNOWN UUO!/]
+ JRST ERT4
+
+ER4: HRROI B,TYO
+ER3: HRRZ C,40
+ HRLI C,440700
+ER2: ILDB A,C
+ CAIN A,"!
+ JRST ER1
+ JUMPE A,ER1
+ PUSHJ P,(B)
+ JRST ER2
+
+ER1: CAMN B,[-1,,TYO]
+ PUSHJ P,CRR
+TUUX: MOVE C,UUOCS
+ MOVE B,UUOBS
+ MOVE A,UUOAS
+ JRST 2,@ERROR
+
+UUOCS: 0
+UUOBS: 0
+UUOAS: 0
+
+IFN TS,[
+
+TSMTP: IDIVI C,4069.*6. ;TYPE TIME IN 4 US ES
+
+]
+
+IFE DECTS,[
+TIMTP: IDIVI C,10. ;TYPE TIME IN C IN TENTHS
+ PUSH P,D
+ IDIVI C,60.
+ PUSH P,D
+ IDIVI C,60.
+ PUSH P,D
+ MOVE A,C
+ JUMPE A,.+3
+ PUSHJ P,DPT
+ PUSHJ P,DCOLON
+ POP P,A
+ JUMPE A,.+3
+ PUSHJ P,DPT
+ PUSHJ P,DCOLON
+ POP P,A
+ PUSHJ P,DPT
+ PUSHJ P,DPERD
+ POP P,A
+ JRST DPT
+]
+TMTPR: PUSHJ P,DSPACE
+ PUSH P,B
+ PUSHJ P,CLKUD
+ POP P,B
+ MOVE C,LRNTIM
+ SUB C,EHRNM
+ PUSHJ P,TSMTP
+ SOUT [ASCII / IN !/]
+ MOVE C,@CURCLK
+ SUB C,EHRTM
+ JRST TIMTP
+
+;;NTSAI
+
+IFE TS+DECTS,[
+IAPRBRK: 0
+ CONSO 1000
+ ERRTTY [ASCII /APR LOSSAGE!/]
+IFN UTAPE,JSR APRBRK"
+ AOS ..TIME
+IFE DEC,[
+ AOS DTIME
+ CONSO DIS,7
+ CONSO DIS,70
+ SKIPA
+ CONO DIS,DISCHN+FLGCHN_3
+]
+ AOSG CLKUDF
+ JRST APREX1 ;ONLY UPDATE CLOCK EVERY 1/10 SEC
+ MOVEM A,CASAVE
+ MOVEM B,CBSAVE
+ SKIPGE CLKCOK
+ JRST APREX ;CLOCK NOT COCKED, DO NOTHING
+ SKIPG CLKSW
+ JRST APRC1 ;DONT USE TOURN KLUDGE, UPDATE SIDE TO MOVE
+ MOVEI A,0 ;READ IN REMOTE CLOCK STATUS
+ CONSO TTY,400000
+ MOVEI A,1
+ XOR A,INVCLK ;ALLOW FOR POSSIBLE INVERSIONS
+ XOR A,MACCLR ;XOR MACHINE COLOR (MICROSWITCH ALWAYS ON MACHINE SIDE)
+ MOVE B,CLKTB(A)
+ MOVEM B,CURCLK ;SET CLOCK TO UPDATE
+APRC1: AOS A,@CURCLK
+ MOVE B,CURCLK
+ CAIN B,OCLOCK
+ JRST APREX ;IN NULL MODE
+ ADDI B,WNUM+1-WCLOCK ;OBTAIN PNTR TO DISLIST TO UPDATE
+ HRLI B,220600
+ MOVEM B,DISIP
+ IDIVI A,10.
+ JSR DISC ;DISPLAY LOW ORDER DIGIT
+ MOVEI B,".-"0
+ JSR DISC
+ JSR DIS1
+ JSR DIS1
+ MOVE B,A
+ JSR DISC
+ MOVNI A,5
+ MOVEM A,CLKUDF ;SETUP 1/10 SEC COUNTER
+ JRST APREX
+]
+
+IFE DECTS,[
+IFE TS,[
+ATTIME: MOVEI B,TYO
+ SOUT [ASCII /WHITE !/]
+ MOVE C,WCLOCK
+ PUSHJ P,TIMTP
+ SOUT [ASCII / BLACK !/]
+ MOVE C,BCLOCK
+ PUSHJ P,TIMTP
+ PUSHJ P,DCRR
+ JRST PSRET
+]
+
+TSW: 1 ;IF 1 TYPE TIMES AFTER EACH MOVE
+
+IFN TS,[
+ATTIME: PUSHJ P,CLKUD
+ MOVEI B,TYO
+ SOUT [ASCII /WHITE !/]
+ MOVE C,WCLOCK+1
+ PUSHJ P,TSMTP
+ SOUT [ASCII / IN !/]
+ MOVE C,WCLOCK
+ PUSHJ P,TIMTP
+ SOUT [ASCII / BLACK !/]
+ MOVE C,BCLOCK+1
+ PUSHJ P,TSMTP
+ SOUT [ASCII / IN !/]
+ MOVE C,BCLOCK
+ PUSHJ P,TIMTP
+ PUSHJ P,DCRR
+ JRST PSRET
+]
+
+]
+IFE TS+DECTS,[
+
+DIS1: 0
+ IDIVI A,10.
+ JSR DISC
+ IDIVI A,6.
+ JSR DISC
+ MOVEI B,":-"0
+ JSR DISC
+ JRST @DIS1
+
+DISC: 0
+ ADDI B,"0
+ DPB B,DISIP
+ MOVE B,DISIP
+ ADD B,[60000,,]
+ SKIPGE B
+ SUB B,[440000,,1]
+ MOVEM B,DISIP
+ JRST @DISC
+
+APREX: MOVE A,CASAVE
+ MOVE B,CBSAVE
+APREX1: CONO 1000+APRCHN
+ JRST 12,@IAPRBRK
+
+DISL2: 20156220054
+ 61200274040
+WNUM: 607260607260
+ 605660343337
+ 20000
+ 61200024040
+BNUM: 607260607260
+ 605660373737
+ 3000,,
+]
+;REAL TIME UNITS 10THS OUT OF TS 30THS IN
+;RUNTIME UNITS 4US IN TS
+
+WCLOCK: 0 ;REAL TIME IN TS
+IFN TS,[
+WMTIM: 0 ;MACHINE TIME IN TS MUST BE WCLOCK +1 IN TS
+ 220600,,WNUM+1 ;BYTE PNTR TO UPDATE DIS LIST
+]
+OCLOCK: 0
+IFN TS,OMTIM: 0
+CURCLK: OCLOCK
+CASAVE: 0
+BCLOCK: 0 ;MUST BE WCLOCK+4 OUT OF TS
+IFN TS,[
+BMTIM: 0
+ 220600,,BNUM+1
+]
+CBSAVE: 0
+IFE DECTS+TS,[
+DISIP: 0
+CLKUDF: 0
+]
+APRCON: 0
+
+LRTIM: 0 ;REAL TIME LAST READ
+LRNTIM: 0 ;RUN TIME LAST READ
+ITIME: 0 ;REAL TIME AT HACK1
+
+CONSTANTS
+
+;;MN1
+
+RECMP: TDZA C,C
+RECMS: MOVSI C,20000
+RECMH: MOVEM C,RECMPT
+ HRR C,LFS ;RECORD MOVE
+ TRNN C,-1
+ ERRTTY [ASCII /RECMOV, NO FS!/] ;SQUARE
+ MOVE A,@GAMP
+ MOVEM A,1(C)
+ MOVE S,CVPR
+ HRRZM C,CVPR
+ IOR S,RECMPT
+ EXCH S,(C)
+ MOVEM S,LFS
+ POPJ P,
+
+RECMPT: 0
+
+TMOVE3: LDB I,[100,,PLYN]
+ JUMPE I,TMOVE1
+ TLO T1,200000
+ JRST TMOVE1
+
+TMOVE2: LDB I,[100,,PLYN]
+ JUMPE A,TMOVE3
+ DPB B,[MPO,,T1]
+ SKIPG B,BOARD(B)
+ ERRTTY [ASCIZ \LOSE AT TMOVE2\]
+ SUBI B,PIECE
+ DPB B,[MPC,,T1]
+ JRST TMOVE4
+
+TMOVE: LDB T1,[170300,,A] ;MOVE PIECE IN B TO SQUARE A, SIDE TO MOVE IN I
+ ANDI A,177
+ JUMPE A,TMOVE3
+ DPB B,[MPC,,T1]
+ SKIPL BOARD(A)
+ SKIPG C,PIECEL(B)
+ ERRTTY [ASCIZ /LOSE AT TMOVE/]
+ DPB C,[MPO,,T1]
+TMOVE4: DPB A,[MPTO,,T1]
+ SKIPE C,BOARD(A)
+ SUBI C,PIECE
+ DPB C,[MPTK,,T1]
+ SKIPE BOARD(A)
+ TLO T1,400000
+ SKIPGE PIECE(B)
+ TLO T1,200000
+TMOVE1: MOVE A,T1
+;;MV
+MMOVE:
+IMMOVE:
+MMVNC: MOVE I,PLYN
+ CAIL I,LGAME
+ ERRTTY [ASCIZ /GAME FULL/]
+ LDB I,[100,,PLYN]
+ LDB B,[420100,,A]
+ CAME B,I
+ ERRTTY [ASCIZ /MV FOR WRONG SIDE--MMOVE/]
+ CLEARM MMPIVF
+ MOVE B,[MMPIVF,,MMPIVF+1]
+ BLT B,MMFL+9
+ MOVEM A,LMV
+IFN DBG,[
+ TDNN A,[177777,,-1]
+ ERRTTY [ASCII /MMOVE CALLED WITH ZERO!/]
+]
+ AOS NMMV
+ TRNE A,7
+ JRST MMOVE3 ;"SPECIAL" MOVE (O-O O-O-O ETC)
+MMV3A: LDB B,[MPC,,A] ;MAKE MOVE IN A
+ LDB C,[MPO,,A]
+IFN DBG,[
+ CAME C,PIECEL(B)
+ JSP ZR,MMERR
+]
+ MOVEM C,OKGLCN ;SAVE ORG LOCN FOR USE IN KING UPDATE
+;IFN DBG,[
+; LDB A,[MPTO,,A]
+; PUSHJ P,LGLMP
+; JSP ZR,MMERR
+;]
+ SKIPE ICSW
+ PUSHJ P,MMIC1 ;REMOVE PIECE MOVING
+ LDB S,[MPTO,,LMV]
+ SKIPGE LMGT(B)
+ CAME S,GHLOC
+ JRST MMOV1
+ MOVE A,LMV
+ TDO A,[SETZ 3] ;EP+CAPTURE
+ XCT MMT1(I)
+ MOVE T1,BOARD(R)
+ SUBI T1,PIECE
+ DPB T1,[MPTK,,A] ;PAWN ACTUALLY BEING CAPTURED
+ MOVEM A,LMV
+ CLEARM BOARD(R)
+ PUSH P,T1
+ PUSH P,S
+ MOVE T1,GHLOC
+ SKIPE ICSW
+ PUSHJ P,MMGF3
+ POP P,S
+ POP P,T1
+ CLEARM GHLOC
+ CLEARM GHSD
+ JRST MMS4
+MMOV1: SKIPN T2,BOARD(S)
+ JRST MMOVE1
+MMS3: LDB T1,[MPTK,,LMV]
+IFN DBG,[
+ CAIE T2,PIECE(T1)
+ JSP ZR,MMERR
+]
+
+MMS4: SKIPE ICSW
+ PUSHJ P,MMIC3 ;REMOVE PIECE CAPTURED
+ MOVN T2,PVALUE(T1) ;T1 HAS NO OF PIECE CAPTURED
+ SKIPL LMGT(T1)
+ SOS @PCCNTP+1(I)
+ SKIPL LMGT(T1)
+ XCT MMT4(I)
+ SKIPGE LMGT(T1)
+ XCT MMT6(I)
+ SOS @NPCPT(T1)
+ SKIPGE RFPCS(T1) ;ADJUST NUM SLIDING PIECES
+ XCT MMT5(I)
+ SOS @NPCP1(T1)
+MMOV1A: CLEARM PIECEL(T1)
+MMOVE1: AOS NMOVES(B)
+ MOVE T1,PIECEL(B)
+ MOVEM S,PIECEL(B)
+ LDB T2,[BFILE,,BPREL(S)]
+ MOVEM T2,PFILE(B)
+ LDB T2,[BRANK,,BPREL(S)]
+ MOVEM T2,PRANK(B)
+ SKIPGE PIECE(B)
+ MOVE T2,REVERS(T2)
+ MOVEM T2,RPRANK(B)
+ MOVE T2,BOARD(T1)
+ CLEARM BOARD(T1)
+ MOVEM T2,BOARD(S)
+ SKIPE ICSW
+ PUSHJ P,MMIC7 ;PUT BACK MOVING PIECE
+ MOVE A,LMV
+MMOVE5: AOS PLYN
+ AOS T2,GAMP
+ SKIPE T1,GHLOC
+ JRST MMGF1 ;GHOST ELIM
+MMGF2: MOVEM A,(T2)
+
+MMOVE7: SKIPGE RPIECE(B) ;SKIP ON NOT KING
+ PUSHJ P,MMKG1 ;KING MOVE UPDATE KING POS TABLE
+ SKIPL LMGT(B) ;SKIP ON PAWN
+ JRST MMS2
+ MOVE Q,NMOVES(B) ;FIRST SEE IF DOUBLE ADV AND GHOST SHOULD BE GENERATED
+ SOJN Q,MMS5 ;NOT DOUBLE ADV, IS P QUEENING
+ MOVE Q,PIECEL(B)
+ CAIL Q,5*BW
+ CAIL Q,7*BW
+ JRST MMS5 ;NOT DOUBLE ADV
+ XCT MMT2(I) ;GENERATE GHOST
+ SKIPLE T2,BOARD+1(Q) ;T1 GETS LCN OF POTENTIAL GHOST
+ SKIPL LMGT-PIECE(T2) ;CAN IT BE CAPTURED BY OPP PAWN
+ JRST MMGH1
+ MOVE T2,(T2)
+ XOR T2,PIECE(B)
+ JUMPL T2,MMGH2 ;GHOST CAN BE CAPTURED
+MMGH1: SKIPLE T2,BOARD-1(Q)
+ SKIPL LMGT-PIECE(T2)
+ JRST MMS2 ;GHOST CANT BE CAPTURED BY PAWN,FORGET IT
+ MOVE T2,(T2)
+ XOR T2,PIECE(B)
+ JUMPL T2,MMGH2
+MMS2: SKIPGE DBSUPS
+ JRST POPJ1 ;ASSUME MOVE LGL
+ SKIPE ICSW
+ PUSHJ P,MMIC2 ;PAWN HACK AND PIN HACK
+ PUSHJ P,CAT
+ MOVEI T1,CHKBT
+ MOVE A,@OKINGT+1(I)
+ SKIPE @LMGST(I)
+ IORM T1,@GAMP ;HES IN CHECK
+ MOVE A,@OKINGT(I)
+ XCT MMT3(I)
+ JRST POPJ1
+MOVE2A: JRST UNMOVE
+
+MMPIVF: 0 ;-1 IF PAWNS INVOLVED IN MOVE
+MMFL: BLOCK 10. ;-1 ON FILES PAWNS INVOLVED OR ADJ TO THEM
+LMV: 0 ;TEMP STG FOR LAST MOVE PROCESSED
+
+MMKG1: SKIPGE DBSUPS
+ POPJ P,
+ MMSAVAC ;MOVE KING
+ MOVN R,NKSI ;REMOVE KING
+ SKIPE ICSW
+ PUSHJ P,MMKG1C ;DECREDIT PDV OF PCS ATTACKING NEAR K LOCN
+ PUSHJ P,MMKG3 ;DECREDIT WAV OF NEAR KING SQUARES
+ MOVE R,PIECEL(B)
+ MOVEM R,OKGLCN
+ MOVE R,NKSI
+ PUSHJ P,MMKG3 ;RECREDIT NEW SQUARES
+ SKIPE ICSW
+ PUSHJ P,MMKG1C ;AND NEW PCS
+ MMRSAC
+ POPJ P,
+
+MMKG3: MOVE T1,OKGLCN
+ JUMPE I,MMKG3A
+IRP A,,[0,1,-1,BW,-BW,BW+1,BW-1,-BW+1,-BW-1]
+ SKIPGE BOARD+A(T1)
+ JRST .+3
+ ADDM R,NBK+A(T1)
+ ADDM R,WAV+A(T1)
+ TERMIN
+ POPJ P,
+
+MMKG3A: IRP A,,[0,1,-1,BW,-BW,BW+1,BW-1,-BW+1,-BW-1]
+ SKIPGE BOARD+A(T1)
+ JRST .+3
+ ADDM R,NWK+A(T1)
+ ADDM R,BAV+A(T1)
+ TERMIN
+ POPJ P,
+
+OKGLCN: 0 ;KING LOCN PRIOR TO MOVE
+
+MMKG1C: MOVSI T1,-9 ;UPDATE PDV OF AFFECTED PCS
+MMKG1A: MOVE A,OKGLCN
+ ADD A,DIRDT(T1) ;STEP TO 8 NEIGHBORHOOD AND CENTER
+ SKIPGE BOARD(A)
+ JRST MMKG5 ;OFF BOARD
+ MOVSI T2,-18.
+MMKG4A: LDB S,RDAT(T2) ;UPDATE PDV OF PIECES THAT ARE BEARING ON THIS SQ
+ JUMPE S,MMKG4 ;NO PC FROM THIS DIRECTION
+ XCT RMOY1+1(I)
+ JRST MMKG4 ;OUR GUY SO HES NOT AFFECTED
+ ADDM R,PDV(S)
+ TRNE T2,30
+ JRST MMKG4 ;NOT RANK OR FILE
+ SKIPGE LMGT(S)
+ JRST MMKG4B
+ SKIPGE SLDPC(S)
+ JRST MMKG4C
+MMKG4: AOBJN T2,MMKG4A
+MMKG5: AOBJN T1,MMKG1A
+ POPJ P,
+
+
+
+MMKG4C: MOVE C,PIECEL(S)
+MMKG4D: LDB Q,RDATS(T2)
+ JUMPE Q,MMKG4
+ SKIPGE SLDPC(Q)
+ XCT RMOY2+1(I)
+ JRST MMKG4
+ ADDM R,PDV(Q)
+ MOVE C,PIECEL(Q)
+ JRST MMKG4D
+
+MMKG4B: HRRZ C,T2
+ CAIL C,3
+ CAILE C,7
+ JRST MMKG4
+ XCT RMDTT+1(I)
+ JRST MMKG4
+ JRST MMKG4C
+
+IFN DBG,[
+MMERR: ERRTTY [ASCII /BAD MOVE --MMOVE!/]
+]
+
+MMGH2: MOVEM T1,GHLOC ;STORE GHOST LOCN
+ SKIPE ICSW
+ PUSHJ P,MMGH2A
+ MOVE T1,PMT(I)
+ MOVEM T1,GHSD
+ JRST MMS2
+
+MMGH2A: SKIPLE R,@MMGHT1(I) ;REFLECT ADDING GHOST LOCN IN T1 SIDE IN I
+ XCT MMGHT2(I) ;DOES SQUARE CONTAIN HIS P
+ JRST MMGH2B
+ SUBI R,PIECE ;YES
+ MOVE S,PCATV(R)
+ ADDM S,@MMGHT3(I)
+ MOVE S,@MMGHT7(I)
+ ADDM S,PDV(R)
+ DPB R,MMGHT4(I)
+ CLEARM @MMGHT8(I)
+MMGH2B: SKIPLE R,@MMGHT5(I)
+ XCT MMGHT2(I)
+ POPJ P,
+ SUBI R,PIECE
+ MOVE S,PCATV(R)
+ ADDM S,@MMGHT3(I)
+ MOVE S,@MMGHT7(I)
+ ADDM S,PDV(R)
+ DPB R,MMGHT6(I)
+ CLEARM @MMGHT8(I)
+ POPJ P,
+
+MMGHT1: BOARD+BW+1(T1)
+ BOARD-BW+1(T1)
+
+MMGHT2: SKIPL SNFBP-PIECE(R)
+ SKIPL LMGSTD-PIECE(R)
+
+MMGHT3: BA+BW(T1)
+ WA-BW(T1)
+
+MMGHT4: BDAEPL+BW(T1)
+ BDAEPL-BW(T1)
+
+MMGHT5: BOARD+BW-1(T1)
+ BOARD-BW-1(T1)
+
+MMGHT6: BDAEPR+BW(T1)
+ BDAEPR-BW(T1)
+
+MMGHT7: BAV+BW(T1)
+ WAV-BW(T1)
+
+MMGHT8: BPCHD+BW(T1)
+ BPCHD-BW(T1)
+ BPCHD+BW(T1)
+
+MMS5: MOVE Q,PIECEL(B)
+ CAIL Q,3*BW
+ CAIL Q,9*BW
+ JRST .+2
+ JRST MMS2 ;NOT PROMOTION
+MMS5P: SKIPE ICSW ;PROMOTION
+ PUSHJ P,MMIC1
+ SOS WPNC(I)
+ TRO A,4
+ MOVEM A,@GAMP
+ MOVNI T2,PWNV
+ ADDM T2,PNBAL(I)
+ MOVE T2,PLYN
+ MOVEM T2,PLPWN(B)
+ MOVEI R,[0]
+ MOVEM R,PPT(B)
+ MOVSI T1,(SETZ)
+ MOVE R,B
+ CAIL R,BPV
+ SUBI R,NPCS
+ MOVNS R
+ ROT T1,(R)
+ MOVEI T2,PTB
+ SKIPGE PIECE(B)
+ ADDI T2,PTBL
+ HRLI T2,-12.
+ ANDCAM T1,PTBP-PTB(T2)
+ AOBJN T2,.-1
+ LDB R,[200,,A]
+ AOS @PCCNTP(I)
+ JRST @.+1(R)
+ MMS5Q
+ MMS5R
+ MMS5B
+ MMS5N
+
+MMS5A: MOVSI T2,-17 ;MAKE BDAST ENTRY FOR SLIDING PC
+ SKIPE BDAST+1(T2) ;FIND FREE BDAST CODE
+ AOBJN T2,.-1
+ JUMPGE T2,[ERRTTY [ASCII /MMS5, BDAST FULL!/]] ;NO BDAST SPACE LEFT
+ HRRZM B,BDAST+1(T2) ;STORE ASSOCIATED PC
+ AOS T2
+ DPB T2,[PTIDS,,PIECE(B)]
+ POPJ P,
+;;;MVQ
+MMS5Q: IORM T1,PTBQ-PTB-12.(T2) ;TYPIN TABLE
+ PUSHJ P,MMS5A ;GET BDAST ENTRY
+ AOS WQNC(I)
+ AOS NUMORP(I)
+ MOVEI T2,MMQN
+ HRRM T2,PIECE(B)
+ MOVEI T2,KQV
+ MOVEM T2,PVALUE(B)
+ ADDM T2,PCBAL(I)
+ MOVEI T2,LMQUEEN
+ MOVEM T2,LMGT(B)
+ MOVEI T2,LSQUEEN
+ MOVEM T2,LMGSTD(B)
+ MOVEI T2,LXQUEEN
+ MOVEM T2,SNFBP(B)
+ MOVEI T2,RMWQ
+ MOVEM T2,RMDTB(B)
+ MOVEI T2,WQNC(I)
+ HRLI T2,(SETZ)
+ MOVEM T2,NPCPT(B)
+ MOVSI R,61400
+ HRR R,PASI+1(I)
+ MOVEM R,ATLSP(B)
+ MOVEI R,QID ;PAWN QUEENING
+ DPB R,[PTID,,PIECE(B)]
+ MOVEI R,LQUEEN
+ MOVEM R,LGLMPT(B)
+ MOVEI T2,1*2
+ MOVEM T2,PINVF(B)
+ MOVE T2,[SETZ RMWQ]
+ MOVEM T2,RFPCS(B)
+ MOVE T2,[NQASB]
+ MOVEM T2,PASIN(B)
+ MOVSI T1,400000
+ IORM T1,DDPCS(B)
+ IORM T1,SLDPC(B)
+ SKIPE ICSW
+ PUSHJ P,MMIC7
+ JRST MMS2
+;;;MVR
+MMS5R: IORM T1,PTBR-PTB-12.(T2)
+ PUSHJ P,MMS5A
+ AOS WRKC(I)
+ AOS NUMORP(I)
+ MOVEI T2,MMRK
+ HRRM T2,PIECE(B)
+ MOVEI T2,RV
+ MOVEM T2,PVALUE(B)
+ ADDM T2,PCBAL(I)
+ MOVEI T2,LMROOK
+ MOVEM T2,LMGT(B)
+ MOVEI T2,LSROOK
+ MOVEM T2,LMGSTD(B)
+ MOVEI T2,LXROOK
+ MOVEM T2,SNFBP(B)
+ MOVEI T2,RMWR
+ MOVEM T2,RMDTB(B)
+ MOVEI T2,WRKC(I)
+ MOVEM T2,NPCPT(B)
+ MOVSI R,61100
+ HRR R,PASI+1(I)
+ MOVEM R,ATLSP(B)
+ MOVEI R,RID ;PAWN ROOKING
+ DPB R,[PTID,,PIECE(B)]
+ MOVEI R,LROOK
+ MOVEM R,LGLMPT(B)
+ MOVEI T2,2*2
+ MOVEM T2,PINVF(B)
+ MOVE T2,[SETZ RMWR]
+ MOVEM T2,RFPCS(B)
+ MOVEI T2,NRASB
+ MOVEM T2,PASIN(B)
+ MOVSI T1,400000
+ IORM T1,SLDPC(B)
+ SKIPE ICSW
+ PUSHJ P,MMIC7
+ JRST MMS2
+;;;MVB
+MMS5B: IORM T1,PTBB-PTB-12.(T2)
+ PUSHJ P,MMS5A
+ AOS WBSC(I)
+ LDB T2,[BCOLR,,BPREL(Q)]
+ MOVEI T2,@MMS5BT(T2)
+ AOS (T2)
+ MOVEM T2,NPCP1(B)
+ MOVEI T2,MMBS
+ HRRM T2,PIECE(B)
+ MOVEI T2,BV
+ MOVEM T2,PVALUE(B)
+ ADDM T2,PCBAL(I)
+ MOVEI T2,LMBIS
+ MOVEM T2,LMGT(B)
+ MOVEI T2,LSBIS
+ MOVEM T2,LMGSTD(B)
+ MOVEI T2,LXBIS
+ MOVEM T2,SNFBP(B)
+ MOVE T2,[SETZ RMWB]
+ MOVEM T2,RMDTB(B)
+ MOVEI T2,WBSC(I)
+ MOVEM T2,NPCPT(B)
+ MOVSI R,60600
+ HRR R,PASI+1(I)
+ MOVEM R,ATLSP(B)
+ MOVEI R,BID ;PAWN BISHOPING
+ DPB R,[PTID,,PIECE(B)]
+ MOVEI R,LBIS
+ MOVEM R,LGLMPT(B)
+ MOVEI T2,3*2
+ MOVEM T2,PINVF(B)
+ MOVEI T2,RMWB
+ MOVEM T2,RFPCS(B)
+ MOVEI T2,NBASB
+ MOVEM T2,PASIN(B)
+ MOVSI T1,400000
+ IORM T1,DDPCS(B)
+ IORM T1,SLDPC(B)
+ SKIPE ICSW
+ PUSHJ P,MMIC7
+ JRST MMS2
+
+MMS5BT: WLBC(I)
+ WDBC(I)
+;;;MVN
+MMS5N1: RMWN
+ RMBN
+
+MMS5N: IORM T1,PTBN-PTB-12.(T2)
+ AOS WKNC(I)
+ MOVE T2,MMS5N1(I)
+ HRRM T2,PIECE(B)
+ MOVEM T2,RMDTB(B)
+ MOVEM T2,RFPCS(B)
+ MOVEI T2,NV
+ MOVEM T2,PVALUE(B)
+ ADDM T2,PCBAL(I)
+ MOVEI T2,LMKNT
+ MOVEM T2,LMGT(B)
+ MOVEM T2,LMGSTD(B)
+ MOVEM T2,SNFBP(B)
+ MOVEI T2,WKNC(I)
+ MOVEM T2,NPCPT(B)
+ MOVSI R,60300
+ HRR R,PASI+1(I)
+ MOVEM R,ATLSP(B)
+ MOVEI R,KNID ;PAWN KNIGHTING
+ DPB R,[PTID,,PIECE(B)]
+ MOVEI R,LKNT
+ MOVEM R,LGLMPT(B)
+ MOVEI T2,3*2
+ MOVEM T2,PINVF(B)
+ MOVEI T2,NNASB
+ MOVEM T2,PASIN(B)
+ SKIPE ICSW
+ PUSHJ P,MMIC7
+ JRST MMS2
+
+;;MV1
+MMGF1: SKIPE ICSW
+ PUSHJ P,MMGF3
+ SUBI T1,4*BW+1
+ SKIPN I
+ SUBI T1,3*BW
+ TRO T1,10
+ DPB T1,[MGHEL,,A]
+ CLEARM GHLOC
+ CLEARM GHSD
+ JRST MMGF2
+
+MMGF3: MOVEI Q,0 ;REFLECT REMOVING GHOST LOCN IN T1
+ LDB R,MMGFT1(I)
+ JUMPE R,MMGF4
+ DPB Q,MMGFT1(I)
+ CLEARM @MMGHT8+1(I)
+ MOVN S,PCATV(R)
+ ADDM S,@MMGFT2(I)
+ MOVN S,@MMGFT5(I)
+ ADDM S,PDV(R)
+MMGF4: LDB R,MMGFT3(I)
+ JUMPE R,CPOPJ
+ DPB Q,MMGFT3(I)
+ CLEARM @MMGHT8+1(I)
+ MOVN S,PCATV(R)
+ ADDM S,@MMGFT4(I)
+ MOVN S,@MMGFT5(I)
+ ADDM S,PDV(R)
+ POPJ P,
+
+MMGFT2: WA-BW(T1)
+ BA+BW(T1)
+
+MMGFT4: WA-BW(T1)
+ BA+BW(T1)
+
+MMGFT1: BDAEPL-BW(T1)
+ BDAEPL+BW(T1)
+
+MMGFT3: BDAEPR-BW(T1)
+ BDAEPR+BW(T1)
+
+MMGFT5: WAV-BW(T1)
+ BAV+BW(T1)
+
+;;FANCY
+IFN DSPLY,[
+HV340: 0 ;-1 IF HAVE 340 (.DSTAR SKIPPED)
+FFANCY: -2
+FANCY: PUSHJ P,GETNUM
+ MOVEM C,FFANCY
+ AOJL C,DISOFF
+ PUSHJ P,DISUP
+ JRST PSRET
+
+DISOFF: IFE TS+DECTS,CONO DIS,100
+ IFN TS,.DCLOSE
+ CLEARM HV340
+ JRST PSRET
+
+IFN TS,[
+DISUP1: HRROI B,TYO1
+ MOVEI A,^P
+ PUSHJ P,TYO1
+ MOVEI A,"T
+ PUSHJ P,TYO1
+ MOVEI A,^P
+ PUSHJ P,TYO1
+ MOVEI A,"]
+ PUSHJ P,TYO1 ;CLEAR LINE ON IMLAC
+ JRST .DISB0
+]
+
+DISUP:
+IFN TS,[
+ SKIPGE GETTY
+ PUSHJ P,DISUP1
+]
+ MOVEI B,DISAD
+ PUSHJ P,DISINI
+.DISBD: SKIPLE FFANCY
+ SKIPE DBS1
+ SKIPA
+.DISB0: SOUT [ASCII / !/] ;3 TAB'S
+ MOVE T1,PLYN
+ IDIVI T1,2
+ AOS T1
+ SKIPE T2
+ ISOUT [.ASCII ?*U!T1 BLACK TO MOVE?]
+ SKIPN T2
+ ISOUT [.ASCII ?*U!T1 WHITE TO MOVE?]
+
+.DISB1:
+IFN TS,[
+ CAMN B,[-1,,TYO1]
+ JRST BDOUT
+]
+ SKIPLE FFANCY
+ SKIPE DBS1
+ JRST DISUP2
+ PUSH P,B
+ PUSHJ P,DISFIL
+ MOVEM A,DISPNR
+ MOVEI J,220640
+ SETZB C,T2
+ SETOM FDBDPT
+ MOVEI T,7
+FDOL: MOVEI I,101666
+ MOVEI T1,7
+FDIL: SKIPE FDBDPT
+ JRST FDVECT
+ SKIPE T
+ CAIN T,7
+ JRST FDVCTH
+FDVHR: SKIPE T1
+ CAIN T1,7
+ JRST FDVCTV
+ JRST FDPEC
+FDVECT: PUSHJ P,FDFOO
+ MOVEI B,2*9-1-1
+ MOVE A,[100611,,200011]
+ IDPB A,DISPNR
+ MOVSS A
+ SOJN B,.-2
+ MOVEI A,600011
+ IDPB A,DISPNR
+FDPEC: SETCMM FDBDPT
+ MOVEI S,2*BW+1(T2)
+ CAMN S,GHLOC
+ JRST FDGH
+ SKIPN C,BOARD+2*BW+1(T2)
+ JRST FDLVP
+ LDB A,[270300,,(C)]
+ SKIPG (C)
+ ADDI A,6
+ HLRZ B,BLTTBL(A)
+ HRRZ C,BLTTBL(A)
+FDGH1: ADDI I,40016
+ SUBI J,76
+ MOVEI A,20157
+ PUSHJ P,FDFOOO
+
+FDPECL: MOVS A,(C)
+ IDPB A,DISPNR
+ HLRZS A
+ SKIPE A
+ IDPB A,DISPNR
+ AOS C
+ SOJN B,FDPECL
+ SUBI I,40016
+ ADDI J,76
+FDLVP: SUBI I,110
+ AOS T2
+ SOJGE T1,FDIL
+ SETCMM FDBDPT
+ ADDI T2,BW-8
+ ADDI J,110
+ SOJGE T,FDOL
+ MOVEI A,2
+ CAMLE A,FFANCY
+ JRST FDX2
+; SETOM DISOVF
+ MOVEI A,20136
+ IDPB A,DISPNR
+ MOVEI A,261777
+ IDPB A,DISPNR
+ PUSHJ P,FDBARF
+ PUSHJ P,DISPG
+ PUSHJ P,DISFIL
+ MOVEM A,DISPNR
+; SETZM DISOVF
+FDX2: MOVEI A,20117
+ IOR A,CHSIZ
+ IDPB A,DISPNR
+ MOVEI A,260450
+ IDPB A,DISPNR
+ PUSHJ P,FDBARF
+ POP P,B
+ JRST DISUP3
+
+DISUP2: SKIPL FFANCY
+ PUSHJ P,BDOUT
+DISUP3: JUMPL B,CPOPJ
+ JRST DISCLG
+
+FDGH: MOVEI C,0
+ SKIPG GHSD
+ MOVEI C,1
+ HLRZ B,BLTTBG(C)
+ HRRZ C,BLTTBG(C)
+ JRST FDGH1
+
+FDVCTH: SKIPE T
+ SUBI J,100
+ PUSHJ P,FDFOO
+ SKIPE T
+ ADDI J,100
+ MOVEI A,600011
+ IDPB A,DISPNR
+ JRST FDVHR
+
+FDVCTV: ADDI J,10
+ ADDI I,10
+ SKIPE T1
+ ADDI I,100
+ PUSHJ P,FDFOO
+ SUBI I,10
+ SUBI J,10
+ SKIPE T1
+ SUBI I,100
+ MOVEI A,704400
+ IDPB A,DISPNR
+ JRST FDPEC
+
+FDFOO: MOVEI A,20175
+FDFOOO: IDPB A,DISPNR
+ IDPB J,DISPNR
+ IDPB I,DISPNR
+ POPJ P,
+
+FDBARF: MOVE A,DISPNR
+ MOVEI B,343335
+ IDPB B,A
+ TLC A,600#2200
+ MOVEM A,DISPNR
+ POPJ P,
+
+FDBDPT: 0
+
+
+BLTTBL: 8,,FBPAWN
+ 20,,FBKNT
+ 14,,FBBISH
+ 17,,FBROOK
+ 21,,FBQUN
+ 24,,FBKING
+ 7,,FWPAWN
+ 10,,FWKNT
+ 12,,FWBISH
+ 12,,FWROOK
+ 13,,FWQUN
+ 11,,FWKING
+
+BLTTBG: 14,,FBGHST
+ 12,,FWGHST
+]
+
+MMT1: MOVEI R,-BW(S)
+ MOVEI R,BW(S)
+
+MMT2: MOVEI T1,-BW(Q)
+ MOVEI T1,BW(Q)
+
+MMT3: SKIPN BA(A)
+ SKIPN WA(A)
+ SKIPN BA(A)
+
+MMT4: ADDM T2,PCBAL+1
+ ADDM T2,PCBAL
+ ADDM T2,PCBAL+1
+
+MMT5: SOS NUMORP+1
+ SOS NUMORP
+ SOS NUMORP+1
+
+MMT6: ADDM T2,PNBAL+1
+ ADDM T2,PNBAL
+ ADDM T2,PNBAL+1
+
+
+;;UMV
+UNMOVE: SOSGE PLYN
+ ERRTTY [ASCIZ /OVER UNMOVE/]
+ PUSH P,I
+ CLEARM MMPIVF
+ MOVE B,[MMPIVF,,MMPIVF+1]
+ BLT B,MMFL+9
+ SKIPE T1,GHLOC
+ JRST UMG3
+
+UMG4: SOS T,GAMP
+ MOVE A,1(T)
+UMOVE1: MOVEM A,LMV
+ LDB I,[420100,,A]
+ TRNE A,170
+ JRST UMG1 ;RESTORE GHOST
+UMG2: LDB B,[MPC,,A]
+ LDB C,[MPO,,A]
+ LDB D,[MPTK,,A]
+ LDB T,[MPTO,,A]
+ TRNE A,7
+ JRST UMOVE2
+ JUMPE C,UNPUT
+UMOVE7: SKIPE ICSW
+ PUSHJ P,MMIC1 ;REMOVING PIECE MOVING
+ MOVE S,PIECEL(B)
+ MOVEM S,OKGLCN
+ LDB S,[BFILE,,BPREL(C)]
+ MOVEM S,PFILE(B)
+ LDB S,[BRANK,,BPREL(C)]
+ MOVEM S,PRANK(B)
+ SKIPGE PIECE(B)
+ MOVE S,REVERS(S)
+ MOVEM S,RPRANK(B)
+ MOVE S,BOARD(T)
+ CLEARM BOARD(T)
+ MOVEM S,BOARD(C)
+ MOVEM C,PIECEL(B)
+ SOS NMOVES(B)
+ SKIPE ICSW
+ PUSHJ P,MMIC7
+ SKIPGE RPIECE(B)
+ PUSHJ P,MMKG1
+ JUMPGE A,UMOVE3 ;NO CAPTURE
+ MOVEM T,PIECEL(D)
+ LDB T2,[BFILE,,BPREL(T)]
+ MOVEM T2,PFILE(D)
+ LDB T2,[BRANK,,BPREL(T)]
+ MOVEM T2,PRANK(D)
+ SKIPGE PIECE(D)
+ MOVE T2,REVERS(T2)
+ MOVEM T2,RPRANK(D)
+ MOVEI T2,PIECE(D)
+ MOVEM T2,BOARD(T)
+ MOVE T2,PVALUE(D)
+ SKIPL LMGT(D)
+ AOS @PCCNTP+1(I)
+ SKIPL LMGT(D)
+ XCT MMT4(I)
+ SKIPGE LMGT(D)
+ XCT MMT6(I)
+ AOS @NPCPT(D)
+ SKIPGE RFPCS(D) ;ADJUST NUMORP
+ XCT UMT5(I)
+ AOS @NPCP1(D)
+UMG9: SKIPE ICSW
+ PUSHJ P,MMIC8
+UMOVE8: SKIPE ICSW
+ PUSHJ P,MMIC2
+POPIJ: POP P,I
+ POPJ P,
+
+
+UMOVE3: SKIPN NMOVES(B)
+ SKIPL LMGT(B) ;SKIP ON PAWN
+ JRST UMOVE8
+ SUB C,T
+ MOVMS C
+ SKIPE ICSW
+ PUSHJ P,MMIC2
+ POP P,I
+ POPJ P,
+
+UMOVE2: LDB T2,[300,,A]
+ CAILE T2,2
+ JRST UMOVE5
+ CLEARM NMKING(I)
+ MOVEI T,0 ;UNCASTLE
+ TLNE A,200000
+ MOVEI T,NPCS
+ SKIPE ICSW
+ PUSHJ P,MMIC5B
+ MOVE C,PIECEL+WKING-PIECE(T)
+ MOVEM C,OKGLCN
+ MOVE D,BOARD(C)
+ CLEARM BOARD(C)
+ ADDI C,2
+ CAIE T2,1
+ SUBI C,4
+ MOVEM C,PIECEL+WKING-PIECE(T)
+ MOVEM D,BOARD(C)
+ LDB S,[BFILE,,BPREL(C)]
+ MOVEM S,PFILE+WKING-PIECE(T)
+ LDB S,[BRANK,,BPREL(C)]
+ MOVEM S,PRANK+WKING-PIECE(T)
+ SKIPGE WKING(T)
+ MOVE S,REVERS(S)
+ MOVEM S,RPRANK+WKING-PIECE(T)
+ SUBI C,1
+ CAIE T2,1
+ ADDI C,2
+ MOVE D,BOARD(C)
+ CLEARM BOARD(C)
+ SUBI C,2
+ CAIE T2,1
+ ADDI C,5
+ MOVEM D,BOARD(C)
+ MOVEM C,PIECEL-PIECE(D)
+ LDB S,[BFILE,,BPREL(C)]
+ MOVEM S,PFILE-PIECE(D)
+ LDB S,[BRANK,,BPREL(C)]
+ MOVEM S,PRANK-PIECE(D)
+ SKIPGE (D)
+ MOVE S,REVERS(S)
+ MOVEM S,RPRANK-PIECE(D)
+ SOS NMOVES+WKING-PIECE(T)
+ SKIPE ICSW
+ PUSHJ P,MMIC6B
+ MOVEI B,WKING-PIECE(T)
+ PUSHJ P,MMKG1
+ SKIPE ICSW
+ PUSHJ P,MMIC2
+ POP P,I
+ POPJ P,
+
+UMG1: LDB T1,[30300,,A]
+ ADDI T1,4*BW+1
+ SKIPN I
+ ADDI T1,3*BW
+ MOVEM T1,GHLOC
+ SKIPE ICSW
+ PUSHJ P,UMG5
+UMG5A: MOVE T1,PMT+1(I)
+ MOVEM T1,GHSD
+ TRZ A,170
+ MOVEM A,1(T)
+ JRST UMG2
+
+UMG5: XORI I,1
+ PUSHJ P,MMGH2A
+ XORI I,1
+ POPJ P,
+
+
+UMG3: CLEARM GHLOC
+ CLEARM GHSD
+ LDB I,[420100,,@GAMP]
+ XORI I,1
+ SKIPE ICSW
+ PUSHJ P,MMGF3
+ JRST UMG4
+
+;;;UMVQ
+UMOVE5: CAIN T2,3
+ JRST UMOVE6
+ SKIPE ICSW ;UNQUEEN
+ PUSHJ P,MMIC1
+ SOS @PCCNTP(I)
+ JRST @UMT0-4(T2)
+UMT0: UMVQ
+ UMVR
+ UMVB
+ UMVN
+
+UMVQ: SOS WQNC(I)
+ SOS NUMORP(I)
+ MOVNI T2,KQV
+ ADDM T2,PCBAL(I)
+ MOVEI C,PTBQ-PTB
+ JRST UMOVE9
+
+UMVR: SOS WRKC(I)
+ SOS NUMORP(I)
+ MOVNI T2,RV
+ ADDM T2,PCBAL(I)
+ MOVEI C,PTBR-PTB
+ JRST UMOVE9
+
+UMVB: SOS WBSC(I)
+ SOS @NPCP1(B)
+ MOVEI T2,NPCTEM
+ MOVEM T2,NPCP1(B)
+ MOVNI T2,BV
+ ADDM T2,PCBAL(I)
+ MOVEI C,PTBB-PTB
+ JRST UMOVE9
+
+UMVN: SOS WKNC(I)
+ MOVNI T2,NV
+ ADDM T2,PCBAL(I)
+ MOVEI C,PTBN-PTB
+
+UMOVE9: MOVEI T2,PWNV
+ MOVEM T2,PVALUE(B)
+ AOS WPNC(I)
+ XCT UMT3(I)
+ HRRM T2,PIECE(B)
+ LDB T2,[PTIDS,,PIECE(B)]
+ CLEARB T1,BDAST(T2)
+ DPB T1,[PTIDS,,PIECE(B)]
+ MOVEI T2,PWNV
+ ADDM T2,PNBAL(I)
+ MOVE T2,UMT4(I)
+ MOVEM T2,LMGT(B)
+ HRRZM T2,LMGSTD(B)
+ HRRZM T2,SNFBP(B)
+ MOVE T2,UMT6(I)
+ MOVEM T2,RMDTB(B)
+ SETOM PLPWN(B)
+ MOVEI T2,WPNC(I)
+ MOVEM T2,NPCPT(B)
+ CLEARM ATLSP(B)
+ MOVEI T2,PID ;UNQUEEN A PAWN
+ DPB T2,[PTID,,PIECE(B)]
+ MOVEI T2,PIECEL(B)
+ MOVEM T2,PPT(B)
+ MOVE T2,UMT8(I)
+ MOVEM T2,LGLMPT(B)
+ MOVE T2,B
+ CAIL T2,NPCS
+ SUBI T2,NPCS
+ MOVNS T2
+ MOVEI T1,4*2
+ MOVEM T1,PINVF(B)
+ MOVE T1,UMT7(I)
+ MOVEM T1,RFPCS(B)
+ MOVEI T1,NPPASB
+ MOVEM T1,PASIN(B)
+ MOVSI T1,(SETZ)
+ SKIPE I
+ IORM T1,SNFBP(B)
+ SKIPN I
+ IORM T1,LMGSTD(B)
+ ANDCAM T1,DDPCS(B)
+ ANDCAM T1,SLDPC(B)
+ ROT T1,(T2)
+ MOVEI T2,PTB
+ SKIPGE PIECE(B)
+ ADDI T2,PTBL
+ HRLI C,T2
+ ANDCAM T1,@C
+ HRLI T2,-12.
+ MOVEI C,0
+ TDNE T1,PTBP+2*PTBL(C)
+ IORM T1,PTBP-PTB(T2)
+ AOS C
+ AOBJN T2,.-3
+ SKIPE ICSW
+ PUSHJ P,MMIC7
+ MOVE T,GAMP
+ MOVE A,1(T)
+ TRZ A,7
+ JRST UMOVE1
+;;UMV1
+UMOVE6: MOVEI T2,-BW(T) ;TAKE BACK E.P. CAPT
+ TLNE A,200000
+ ADDI T2,2*BW
+ MOVEI S,PIECE(D)
+ MOVEM S,BOARD(T2)
+ MOVEM T2,PIECEL(D)
+ LDB T1,[BFILE,,BPREL(T2)]
+ MOVEM T1,PFILE(D)
+ LDB T1,[BRANK,,BPREL(T2)]
+ MOVEM T1,PRANK(D)
+ SKIPGE PIECE(D)
+ MOVE T1,REVERS(T1)
+ MOVEM T1,RPRANK(D)
+ MOVE T2,PVALUE(D)
+ XCT MMT6(I)
+ AOS @NPCPT(D)
+ MOVEM T,GHLOC
+ MOVE T1,PMT+1(I)
+ MOVEM T1,GHSD
+ TLZ A,400000
+ SKIPN ICSW
+ JRST UMOVE7
+ PUSHJ P,MMIC8
+ MOVE T1,GHLOC
+ PUSHJ P,UMG5
+ JRST UMOVE7
+
+UMT3: MOVEI T2,MMWPWN
+ MOVEI T2,MMBPWN
+
+UMT4: SETZ LMWPW
+ SETZ LMBPW
+
+UMT5: AOS NUMORP+1
+ AOS NUMORP
+ AOS NUMORP+1
+
+UMT6: RMWP
+ RMBP
+
+UMT7: PTPWP
+ PTPBP
+
+UMT8: LWPWN
+ LBPWN
+
+PMT: 1
+ -1
+ 1
+
+POPAJ: POP P,A
+ POPJ P,
+
+MMOVE3: LDB D,[300,,A]
+ CAILE D,2
+ JRST MMV3A
+ PUSH P,D ;O-O OR O-O-O
+ PUSH P,A
+ SKIPL DBSUPS
+ PUSHJ P,CAT
+ POP P,A
+ POP P,D
+ MOVEI T,0
+ TLNE A,200000
+ MOVEI T,NPCS
+ MOVE T1,PIECEL+WKING-PIECE(T)
+ MOVEM T1,OKGLCN
+ SKIPGE DBSUPS
+ JRST MMOVE4
+ SOJN D,MLQCAS
+
+MLKCAS: PUSHJ P,LKCAS
+ POPJ P,
+MLCK1: SKIPE ICSW
+ PUSHJ P,MMIC5
+ MOVE T1,PIECEL+WKING-PIECE(T)
+ MOVE T2,BOARD(T1)
+ CLEARM BOARD(T1)
+ MOVEM T2,BOARD-2(T1)
+ SUBI T1,2
+ MOVEM T1,PIECEL+WKING-PIECE(T)
+ LDB T2,[BFILE,,BPREL(T1)]
+ MOVEM T2,PFILE+WKING-PIECE(T)
+ LDB T2,[BRANK,,BPREL(T1)]
+ MOVEM T2,PRANK+WKING-PIECE(T)
+ SKIPGE WKING(T)
+ MOVE T2,REVERS(T2)
+ MOVEM T2,RPRANK+WKING-PIECE(T)
+ MOVE T1,PIECEL+WKR-PIECE(T)
+ MOVE T2,BOARD(T1)
+ CLEARM BOARD(T1)
+ MOVEM T2,BOARD+2(T1)
+ ADDI T1,2
+ MOVEM T1,PIECEL+WKR-PIECE(T)
+ LDB T2,[BFILE,,BPREL(T1)]
+ MOVEM T2,PFILE+WKR-PIECE(T)
+ LDB T2,[BRANK,,BPREL(T1)]
+ MOVEM T2,PRANK+WKR-PIECE(T)
+ SKIPGE WKR(T)
+ MOVE T2,REVERS(T2)
+ MOVEM T2,RPRANK+WKR-PIECE(T)
+ SKIPE ICSW
+ PUSHJ P,MMIC6
+ MOVEI T2,1
+MMOVE6: MOVEM T2,NMKING(I)
+ AOS NMOVES+WKING-PIECE(T)
+ MOVEI B,WKING-PIECE(T)
+ PUSHJ P,MMKG1
+ JRST MMOVE5
+
+MMOVE4: SOJN D,MLCQ1
+ JRST MLCK1
+
+;;;CCL
+
+CCAN: SETOM CCRCYF ;RECYCLE FLAG
+CCRCY: CLEARM PDIGF ;PAWN DEFENDER IGNORED FLAG (T1) HAS GUY CAPTING
+ CLEARM CCQST
+ SETOM NAPI
+ SETOM NDPI
+ CLEARM APIV
+ CLEARM DPIV
+ CLEARM CCTRDV
+ CLEARM CCMXDF ;MAX DEF WILL SETTLE FOR (OR ELSE RECYCLE)
+ MOVE C,[WPNFLS,,CWPNFL] ;COPY # OF PAWNS IN FILES
+ BLT C,CBPNFL+9.
+ MOVE C,DFPCP ;OUR GUYS
+ MOVE D,ATPCP ;HIS GUYS
+ PUSH P,R ;POSITIVE VALUES IN S FAVOR SIDE TO MOVE
+ PUSH P,Q
+ PUSH P,W
+ PUSH P,J
+ CLEARM NHGYS
+ CLEARM NOGYS
+ MOVE T2,D
+CCAN1B: CAIN T2,ATPCT
+ JRST CCAN1A
+ MOVE J,1(T2)
+ TLNN J,200000
+ AOS NHGYS
+ AOJA T2,CCAN1B
+
+CCAN1A: MOVE T2,C
+CCAN1D: CAIN T2,DFPCT
+ JRST CCAN1C
+ MOVE J,1(T2)
+ TLNE J,200000
+ AOJA T2,CCAN1D
+ HRRZS J
+ CAIE J,(B)
+ AOS NOGYS
+ AOJA T2,CCAN1D
+
+CCAN1C: CAIG D,ATPCT-2
+ SKIPGE T2,2(D)
+ JRST CC2D1 ;NOT AT LEAST TWO DEF OR ONE BEHIND OTHER
+ MOVE S,1(D)
+ SKIPE PINT(S)
+ JRST CC2D2
+ SKIPN SPINT(S)
+ JRST CC2D1 ;FIRST NOT PINNED OR CONSTRAINED
+CC2D2: TLNN T2,200000
+ TLNE S,200000
+ JRST CC2D1
+ MOVE ZR,PVALUE(S)
+ CAME ZR,PVALUE(T2)
+ JRST CC2D1
+ SKIPN PINT(T2)
+ SKIPE SPINT(T2)
+ JRST CC2D1
+ MOVEM S,2(D)
+ MOVEM T2,1(D) ;PUT NON-PINNED GUY FIRST
+CC2D1: CLEARM MCTNT2 ;DEF WOULD CAPT ONCE TO GET THIS
+ SETOM MCTNT4
+;STORE INITIAL BEST CHOICE FOR SIDE TO MOVE (MCT4T2) ON FIRST PASS THRU LOOP
+;= LOSS OF MVING PC + POSSIBLE CHANGE IN HIS P STRUCT
+ CLEARM MCT4T4 ;BEST CHOICE FOR SIDE NOT TO MOVE (NO CAPT OR ANYTHING)
+ CLEARB S,T2 ;PIECE CAPTURED (IF ANY) IN T1
+ MOVEM T1,CLACLP-1 ;STORE PC CAPT IF ANY
+ CLEARM CLACL-1
+ JUMPE T1,CCAN2 ;PIECE CAPTURING (MOVING) IN B JUMP ON NO CAPT
+ MOVE TT,PIECEL(T1)
+ CLEARM BOARD(TT) ;REMOVE PC FROM BOARD
+ MOVE S,PVALUE(T1)
+ SKIPGE LMGT(T1)
+ JRST CCCP1C ;CAPTING P
+ SKIPN WTPCSW ;CAPTING PC, CARE ABOUT TRADING?
+ JRST CCCP1D ;NO
+ LDB ZR,[430100,,PIECE(T1)]
+ SKIPGE WTPCSW
+ XORI ZR,1
+ JUMPE ZR,CCCP1D
+ MOVE ZR,PVALUE(T1)
+ LSH ZR,-3
+ ADD S,ZR
+CCCP1D: MOVEM S,CLACL-1
+ MOVEM S,MCT4T4 ;BEST CHOICE FOR SIDE NOT TO MOVE (NO RECAPT)
+ SKIPE TT,IDEF(T1)
+ JRST CCDF1 ;I WAS DEFING SOMETHING, ARE OTHER DEFS TURNED INTO
+ ;CONSTRAINTS BY MY DEMISE?
+CCDF2:
+CCAN2: HRRZ T1,B ;PC TO BE CAPT THIS ROUND
+CCAN3: CAIN D,ATPCT
+ JRST CCAN2A ;NO MORE DEFENDING (SIDE NOT ON MOVE AND OTHER SIDE FROM PC IN B)
+ SOS NHGYS
+ SKIPGE J,1(D)
+ JRST CCNBD1 ;PC DOESNT BEAR DIRECTLY, ONLY THRU FRIEND
+CCNBD2: TLNE J,200000
+CCAN3A: AOJA D,CCAN3 ;DISABLED
+ MOVE TT,NDPI ;SAVE VALUES IN CASE DECIDE NOT TO IGNORE
+ MOVEM TT,NDPIS
+ MOVE TT,DPIV
+ MOVEM TT,DPIVS
+ SKIPGE RPIECE(T1)
+ JRST CCAN9R ;TAKING K! DONT HONOR ANYTHING
+ SKIPE TT,PINT(J)
+ JRST CCAN4 ;HONOR PIN?
+CCAN4R: SKIPN TT,SPINT(J)
+ JRST CCAN8R
+ PUSHJ P,CCAN8 ;HONOR CONSTRAINT?
+ JSP ZR,CCCV ;CONSTRAINT BROKEN, IS IT POWERFUL ENUF TO FLUSH PC?
+CCAN8R: SKIPE TT,NSQDF(J)
+ JRST CCNF1 ;HOLDING AGAINST N FORK ?
+CCNFRX: SKIPE TT,DSCOV(J) ;SKIP UNLESS THIS PIECE IS UNBLOCKING HIM
+ JRST CCAN9 ;WHILE THIS UNBLOCKAGE IS KNOWN NOT TO BE A PIN,
+ ;IT MAY RESULT IN ADDTL CONSTRAINTS ON OUR PCS
+CCAN9R: SKIPGE LMGT(J)
+ JRST CCCP2 ;CAPTING W/PAWN
+CCCP2R: SKIPN NMOVES(J)
+ SKIPL RPIECE(J)
+ JRST CCAN3B
+ SKIPGE OPNMID
+ ADDI S,20 ;FORCING HIM TO LOSE O-O PRIV
+CCAN3B: HRRZM T1,CLDCLP(T2)
+ MOVE TT,PIECEL(T1)
+ CLEARM BOARD(TT)
+ SUB S,PVALUE(T1)
+ SKIPGE LMGT(T1)
+ JRST CCCP1A ;CAPTING P
+ SKIPN WTPCSW
+ JRST CCCP1B
+ LDB ZR,[430100,,PIECE(T1)]
+ SKIPGE WTPCSW
+ XORI ZR,1
+ JUMPE ZR,CCCP1B
+ MOVN ZR,PVALUE(T1)
+ ASH ZR,-3
+ ADDM ZR,CCTRDV ;DIDNT WANT TO TRD
+CCCP1B: PUSHJ P,CCVLV
+ MOVEM T1,CLDCL(T2)
+ SKIPN T2
+ MOVEM T1,MCT4T2 ;INITIAL BEST CHOICE FOR SIDE TO MOVE
+CCAN5: CAIN C,DFPCT
+ JRST CCAN6 ;NO MORE ATTACKERS
+ SOS NOGYS
+ MOVE T1,1(C)
+ HRRZ J,T1
+ CAIE J,(B)
+ TLNE T1,200000
+ AOJA C,CCAN5
+ ;SIDE OF ORIG MOVER RECAPTS...
+ SKIPE TT,PINT(J)
+ JRST CCCAP1 ;IGNORING FACT HE'S PINNED?
+CCCAP2: SKIPGE LMGT(J)
+ JRST CCCP5 ;RECAPTS W/P
+CCCP5R: MOVE T1,1(D)
+ ADD S,PVALUE(T1)
+ MOVE TT,PIECEL(T1)
+ SKIPGE LMGT(T1)
+ JRST CCPA1A ;PC GETTING RECAPTED IS P
+ SKIPN WTPCSW
+ JRST CCAN5B
+ LDB ZR,[430100,,PIECE(T1)]
+ SKIPGE WTPCSW
+ XORI ZR,1
+ JUMPE ZR,CCAN5B
+ MOVE ZR,PVALUE(T1)
+ LSH ZR,-3
+ ADD S,ZR
+CCAN5B: MOVEM T1,CLACLP(T2)
+ PUSHJ P,CCVLV
+ MOVEM T1,CLACL(T2)
+ CLEARM BOARD(TT)
+ MOVE T1,1(C)
+ AOS T2
+ AOS C
+ AOJA D,CCAN3
+
+CCVLV: MOVE T1,S ;ADD IN LOSS DUE TO NOT WANTING TO TRADE UNLESS AHEAD
+ JUMPG T1,CPOPJ
+ ADD T1,CCTRDV
+ POPJ P,
+
+CCCAP1: LDB W,[PINATP,,1(TT)]
+ MOVE T1,1(D)
+ CAIN W,(T1)
+ JRST CCCAP3
+ MOVE T1,PIECEL(W)
+ SKIPN BOARD(T1)
+ JRST CCCAP3
+ SETOM CCQST ;YES HE MAY BE PINNED
+ JRST CCCAP2
+
+CCCAP3: HRRZ TT,(TT)
+ JUMPN TT,CCCAP1
+ JRST CCCAP2
+
+CCCV: MOVE TT,CCAN8V ;AMT OF CONSTRAINT BRKN
+ ADD TT,PVALUE(J)
+ CAMGE TT,PVALUE(T1) ;TAKING MORE THAN POSSIBLY LOSING
+ JRST @ZR ;IGNORE CONSTRAINT
+ SKIPE NOGYS ;NOT HIS LAST GUY
+ JRST CCANFP
+ SKIPE NHGYS
+ JRST CCANFP
+ MOVE TT,CCAN8V
+ CAMLE TT,PVALUE(T1)
+ JRST CCANFP
+ JRST @ZR
+
+CCVLA: ADD S,PVALUE(T1)
+ SKIPGE LMGT(T1)
+ SKIPN J,PPASED(T1)
+ POPJ P,
+ ADD S,PPV(J)
+ POPJ P,
+
+CCVLS: SUB S,PVALUE(T1)
+ SKIPGE LMGT(T1)
+ SKIPN J,PPASED(T1)
+ POPJ P,
+ SUB S,PPV(J)
+ POPJ P,
+
+CCAN6: PUSHJ P,CCVLV
+ MOVEM T1,CLACL(T2)
+ MOVE T1,1(D)
+ MOVEM T1,CLACLP(T2)
+ JRST CCAN2B
+
+CCAN2A: TLO T1,(SETZ)
+ MOVEM T1,CLDCLP(T2) ;SET SIGN BIT AS END MARKER
+ JUMPN T2,CCAN2L
+ SKIPGE LMGT(B)
+ JRST CCAN2M ;HE ISNT GOING TO CAPT AND OUR MOVE W/P. COMPUTE EFFECT ON OUR P STRUCT
+CCAN2L: PUSHJ P,CCVLV
+ MOVEM T1,CLDCL(T2)
+ CLEARM CLACLP(T2)
+CCAN2B: HRRZM T2,CLDMX
+ SKIPL PDIGF
+ JRST CCN2B1
+ MOVE T1,PDIGY
+ AOS T2 ;RECORD DEFERED P AS ATTACKING
+ MOVEM T1,CLACLP(T2)
+CCN2B1: CAIN D,ATPCT ;STORE EXTRA DEFENDERS NOT USED
+ JRST CCN2B2
+ SKIPLE T1,1(D)
+ TLNE T1,200000
+ AOJA D,CCN2B1
+ HRRZ S,CLDMX
+CCN2B3: HRRZ ZR,(S)
+ CAIN ZR,(T1)
+ AOJA D,CCN2B1
+ SOJGE S,CCN2B3
+ AOS T2
+ MOVEM T1,CLACLP(T2)
+ AOJA D,CCN2B1
+
+CCN2B2: HRRZM T2,CLDRMX
+ MOVEI T2,0 ;EXAMINE EACH SIDE'S OPTIONS AND DETERMINE "PRINCIPLE VARIATION"
+CCAN2D: MOVE S,CLDCL(T2) ;SIDE TO MOVE'S NEXT CHOICE
+ CAMLE S,MCT4T4
+ JRST CCAN2E ;TOO GOOD,HE WONT LET US GET HERE
+ CAMG S,MCT4T2
+ JRST CCAN2J
+ MOVEM T2,MCTNT2
+ MOVEM S,MCT4T2 ;BEST CHOICE SO FAR
+CCAN2J: CAME S,MCT4T4 ;ISSUE RESOLVED
+ SKIPG CLDCLP(T2)
+ JRST CCAN2C
+ MOVE S,CLACL(T2)
+ CAMGE S,MCT4T2
+ JRST CCAN2F
+ CAML S,MCT4T4
+ JRST CCAN2K
+ MOVEM T2,MCTNT4
+ MOVEM S,MCT4T4
+CCAN2K: SKIPN CLACLP(T2)
+ JRST CCAN2C
+ CAME S,MCT4T2 ;SKIP ON ISSUE RESOLVED
+ AOJA T2,CCAN2D
+CCAN2C: AOS T1,MCTNT4
+ CAME S,MCT4T4
+ AOS T1,MCTNT2
+CCAN2G: MOVEM T1,NHC
+ SKIPL T2,NDPI
+ JRST CCACI1 ;MAKE SURE IGNORED CONSTRAINTS ARE BEFORE NHC
+CCACI2: SETOB Q,CLAFL
+CCAN8C: SKIPG R,CLDCLP(Q)
+ JRST CCAN8J
+ ADDI R,PIECE
+ MOVE TT,PIECEL-PIECE(R)
+ HRRZM R,BOARD(TT)
+CCAN8J: CAME S,CLDCL(Q)
+ JRST CCN8J
+ AOSN CLAFL
+ SETOM HCL
+CCN8J: SKIPN R,CLACLP(Q)
+ JRST CCAN8E
+ ADDI R,PIECE
+ MOVE TT,PIECEL-PIECE(R)
+ HRRZM R,BOARD(TT)
+CCAN8E: CAME S,CLACL(Q)
+ JRST CCN8E
+ AOSN CLAFL
+ CLEARM HCL
+CCN8E: AOS Q
+ CAMG Q,CLDMX
+ JRST CCAN8C
+ SKIPGE CLAFL
+ ERRTTY [ASCIZ /LOSE AT CCAN8J/]
+ SKIPN NHC
+ CLEARM HCL ;WOULD RANDOMLY BE SET
+
+ POP P,J
+ POP P,W
+ POP P,Q
+ POP P,R
+ AOS T1,CCRCYF
+ SOJL T1,CCRC1 ;COMPLETING NORMAL CYCLE- RECYCLE?
+ SOJL T1,CCRC2 ;COMPLETING RECYCLE, DID THAT HELP?
+ ;DROP THRU ON RETURN RESULTS OF REVERT
+ POPJ P,
+
+CCRC1: MOVE T1,S
+ SUB T1,DPIV
+ CAMG T1,CCMXDF
+ POPJ P, ;TURNED OUT OK
+ SKIPL PDIGF
+ POPJ P, ;DEFENDER HAD NO OTHER OPTIONS
+ MOVEM T1,CCRCV
+CCRCY1: MOVE T1,CLACLP-1
+ JRST CCRCY ;TRY OTHER OPTION(S)
+
+CCRC2: MOVE T1,S
+ SUB T1,DPIV
+ CAMG T1,CCRCV
+ POPJ P, ;"OTHER" OPTION WAS INDEED BETTER
+ MOVEM T1,CCRVV ;FOO- GO BACK TO FIRST THING
+ JRST CCRCY1
+
+CCACI1: CAMLE T1,DPIGPL(T2)
+ JRST CCACI2 ;OK BEFORE NHC
+ SOS T2,NDPI
+ JUMPGE T2,CCACI1
+ JRST CCACI2
+
+CCAN2E: MOVE S,MCT4T4
+ AOS T1,MCTNT4
+ JRST CCAN2G
+
+CCAN2F: MOVE S,MCT4T2
+ AOS T1,MCTNT2
+ JRST CCAN2G
+
+CCDF1: MOVE T2,(TT)
+ TLNE T2,(DFCNB)
+ JRST CCDF3 ;ALREADY CONSTRAINT
+ LDB T2,[SPINSQ,,(TT)]
+ SKIPLE R,BOARD(T2)
+ SKIPN Q,DEFME-PIECE(R)
+ ERRTTY [ASCIZ /LOSE AT CCDF2/]
+ SKIPN ATTME-PIECE(R)
+ JRST CCDF3 ;NOT ATTACKED
+ MOVEI W,0 ;PC LEFT
+CCDF4: MOVE J,(Q)
+ TLNE J,(DFCNB)
+ JRST CCDF5 ;THIS ONE ALREADY CONSTRAINT
+ LDB J,[SPCCN,,(Q)]
+ CAMN J,T1
+ JRST CCDF5
+ JUMPN W,CCDF3 ;MORE THAN ON DEF LEFT
+ MOVE W,J
+CCDF5: LDB Q,[SPNLK,,1(Q)]
+ JUMPN Q,CCDF4
+ JUMPE W,CCDF3
+ PUSH P,T1
+ PUSH P,A
+ PUSH P,S
+ MOVE T1,W
+ MOVEI J,0
+ MOVE A,T2
+ MOVE S,PVALUE-PIECE(R)
+ PUSHJ P,SPSRS
+ POP P,S
+ POP P,A
+ POP P,T1
+CCDF3: LDB TT,[SPNLK,,1(TT)]
+ JUMPN TT,CCDF1
+ MOVEI T2,0 ;RESTORE T2
+ JRST CCDF2
+
+CCAN9: LDB R,[PINATP,,1(TT)] ;SEE IF HIS PC WAS CAPT EARLIER
+ MOVE Q,PIECEL(R)
+ SKIPN BOARD(Q)
+ JRST CCAN9R ;YES FLUSH
+ LDB Q,[PINBS,,1(TT)] ;BASE SQ OF PIN
+ MOVE R,@LMGSTQ+1(I)
+ CAILE R,3
+ JRST CCAN9R ;HE HAS MORE THAN 3 DEFS SO WILL PROBABLY NOT BE CONSTRAINED
+ SKIPL BPCHD(Q)
+ PUSHJ P,CCAN9A ;MUST RECOMPUTE BPCHD PAIN PAIN
+CCAN9B: MOVEI ZR,0 ;GETS ACTIVE DEF IF ANY
+ MOVE R,ATEVL3+1(I)
+ MOVEM R,CCAN9T ;PNTR TO DEFS OF BASE SQ
+CCAN9D: ILDB R,CCAN9T
+ JUMPE R,CCAN9E ;NO MORE DEFS
+ MOVE W,PIECEL(R)
+ SKIPN BOARD(W)
+ JRST CCAN9D ;YES GO TO NEXT
+ JUMPN ZR,CCAN9R ;NO IF PREV EFF DEF FLUSH
+ MOVE ZR,R ;SAVE EFF DEF
+ JRST CCAN9D
+
+CCAN9E: JUMPE ZR,CCANFP ;HE HAS NO EFF DEF (ITS TURNED INTO A PIN BY NOW)
+ PUSH P,T1
+ PUSH P,J
+ PUSH P,S
+ PUSH P,A
+ MOVE T1,ZR ;PC CON
+ LDB J,[PINATP,,1(TT)] ;CAUSE
+ MOVE S,BOARD(Q)
+ MOVE S,PVALUE-PIECE(S) ;VALUE OF PC THAT WOULD BE LEFT LOOSE
+ MOVE A,Q
+ PUSHJ P,SPSRS
+ POP P,A
+ POP P,S
+ POP P,J
+ POP P,T1
+ JRST CCAN9R
+
+CCAN9A: MMSAVAC ;HOPEFULLY RARELY GET HERE
+ MOVE S,[BATSVB,,ATSVBB] ;SAVE ATPCP, DFPCP, NATKS, ATPCT AND DFPCT
+ BLT S,ATSVBB+EATSVB-BATSVB-1
+ MOVE A,Q
+ PUSHJ P,MCAF
+ MOVE S,[ATSVBB,,BATSVB]
+ BLT S,EATSVB-1
+ MMRSAC
+ POPJ P,
+
+CCAN4: CLEARM CCAN8V
+CCAN4D: LDB Q,[PINATP,,1(TT)] ;PIECE PINNED BY
+ LDB ZR,[BPDPB,,1(TT)]
+ JUMPN ZR,CCAN4B ;DONT IGNORE PIN BY DOUBLED PIECES (EVEN IF ABT TO CAPT FIRST OF THEM)
+ CAIN Q,(B)
+ JRST CCAN4C ;ABOUT TO CAPTURE HIM
+ MOVE R,PIECEL(Q)
+ SKIPN BOARD(R)
+ JRST CCAN4C ;IGNORE PIN IF PINNING PIECE CAPT EARLIER IN EXCH
+ LDB W,[PINDIR,,1(TT)]
+ LDB ZR,LMUAT(W)
+ LDB R,BDLNR(W)
+ CAMN ZR,R
+ JRST CCAN4C ;ON LINE OF PIN
+CCAN4B: MOVE ZR,2(TT)
+ CAIL ZR,KQV
+ JRST CCANFP ;DONT IGNORE PIN TO K
+ ADDM ZR,CCAN8V
+ ADDM ZR,DPIV
+ AOS R,NDPI
+ HRRZM T2,DPIGPL(R) ;SAVE CAPT # HAPPENED AT
+ HRRZM TT,DPIGT(R)
+CCAN4C: HRRZ TT,(TT)
+ JUMPN TT,CCAN4D
+ MOVE ZR,CCAN8V ;NET LOSSES ON BREAKING PIN
+ CAML ZR,PVALUE(J) ;AMT OF LOSS LESS THAN PC SO HE WONT RETAKE BASE
+ CAMG ZR,PVALUE(T1) ;DONT SKIP IF CAPTING MORE THAN WOULD LOOSE
+ JRST CCAN4R ;FLUSH PIN
+CCANFP: MOVE TT,DPIVS ;NOT IGNORING THESE
+ MOVEM TT,DPIV
+ MOVE TT,NDPIS
+ MOVEM TT,NDPI
+ AOJA D,CCAN3 ;HONOR PIN
+
+CCAN8: CLEARM CCAN8V
+ MOVE R,PIECEL(T1)
+ CLEARM BOARD(R) ;AVOID INTERFERENCE BY PIECES OFF BOARD AT TIME
+ PUSH P,T1
+ PUSH P,T2 ;MUST BE LAST
+CCAN8I: LDB W,[SPINCP,,1(TT)] ;PC CAUSING CON OR 0
+ JUMPE W,CCAN8L
+ MOVE T2,PIECEL(W)
+ SKIPN BOARD(T2)
+ JRST CCAN8G ;CONSTRAINT CAUSED BY FLUSHED PC
+CCAN8L: LDB ZR,[SPINSQ,,(TT)] ;SKIP ON IGNORE CONSTRAINT
+ CAIN ZR,(A)
+ JRST CCAN8G ;CONSTRAINT IS TO THIS SQUARE
+ MOVE T2,(P)
+CCAN8A: MOVE T1,CLACLP-1(T2) ;CONSTRAINT TO PC ALREADY CAPTED
+ CAMN ZR,PIECEL(T1)
+ JRST CCAN8G ;YES CONSTRAINT IS TO CAPTED PC
+ SOJG T2,CCAN8A
+ LDB ZR,[PTID,,PIECE(J)]
+ SOJLE ZR,CCAN8K ;P OR N WILL NOT HOLD
+ PUSH P,S
+ PUSH P,B
+ MOVE B,J
+ LDB S,[SPINSQ,,(TT)]
+ CLEARM CCANF1
+ PUSHJ P,@LGLMPT(B) ;CAN MOVE TO SQ IN A FORM SQ IN S? SKIP ON YES
+ SETOM CCANF1 ;NO
+ POP P,B
+ POP P,S
+ SKIPL CCANF1
+ JRST CCAN8G
+CCAN8K: MOVSI R,-18. ;PC WONT HOLD, CAPTED PCS BEARING HERE?
+ CLEARM OCGB
+ CLEARM HCGB
+ PUSH P,A
+ LDB A,[SPINSQ,,(TT)]
+CCCB1: LDB T1,RDAT(R)
+ JUMPE T1,CCCB2 ;NONE FROM THIS DIR
+ MOVE T2,PIECEL(T1)
+ SKIPN BOARD(T2)
+ JRST CCCB3 ;CAPTED IN SWAP OUT SO FAR
+CCCB2: AOBJN R,CCCB1
+ POP P,A
+ MOVE R,OCGB
+ CAMLE R,HCGB
+ TLO TT,(NSTRB) ;MORE OF OURS GONE THAN HIS, SO CONSTRAINT MAY NOT BE HERE BY NOW
+ HRRZ ZR,(TT) ;SPINVL
+ ADDM ZR,CCAN8V ;HONOR CONSTRAINT, ADD VALUE TO TOTAL OF VALID CONSTRAINTS
+ ADDM ZR,DPIV
+ AOS R,NDPI
+ TLO TT,(SETZ) ;INDICATE CONSTRAINT
+ MOVEM TT,DPIGT(R)
+ MOVE T2,(P)
+ MOVEM T2,DPIGPL(R)
+CCAN8G: LDB TT,[SPNLK,,1(TT)]
+ JUMPN TT,CCAN8I
+
+CCAN8X: POP P,T2
+ POP P,T1
+ MOVE Q,PIECEL(T1) ;RESTORE BOARD
+ MOVEI R,PIECE(T1)
+ MOVEM R,BOARD(Q)
+ SKIPN CCAN8V ;SKIP ON SOME BROKEN
+ AOS (P) ;NONE BROKEN
+ POPJ P,
+
+CCCB3: XCT RMOY4(I)
+ AOSA HCGB ;HIS GUY
+ AOS OCGB ;OURS
+ JRST CCCB2
+
+CCAN9T: 0 ;TEMP
+CCAN8V: 0 ;TOTAL VALUE OF CONSTRAINTS BROKEN (AT CCAN8)
+
+CCNBD1: MOVSI TT,-4 ;PC DOESNT BEAR DIRECTLY, ONLY THRU FRIEND
+ MOVE Q,PIECEL(J) ;MAKE SURE FRIEND OUT OF THE WAY
+CCNBD3: LDB ZR,CCNBT1(TT) ;FIND COMMON LINE BTWEEN CURRENT LOCN AND SQ IN QUEST
+ LDB R,CCNBT2(TT)
+ CAMN ZR,R
+ JRST CCNBD4
+ AOBJN TT,CCNBD3
+CCNBD6: PTTY [ASCIZ /CONFUSED AT CCNBD3/]
+ JRST CCNBD2
+
+CCNBD4: LSH TT,1
+ CAML A,Q
+ TRO TT,1 ;DETERMINE IF "BACKWARDS OR FORWARDS" ALONG LINE
+ MOVE TT,CCNBT3(TT) ;STRAIGHTEN OUT MAPPING
+ MOVE Q,A
+CCNBD5: LDB W,RDATSQ(TT)
+CCNBD9: JUMPE W,CCNBD6
+ MOVE R,PIECEL(W)
+ SKIPE BOARD(R)
+ AOJA D,CCAN3 ;NOT THERE SO HE MUST STILL BE IN THE WAY
+ MOVE Q,PIECEL(W) ;THAT ONE GONE, ANY MORE IN WAY?
+ LDB W,RDATSQ(TT)
+ CAIN W,(J)
+ JRST CCNBD2 ;NO ALL CLEAR
+ JRST CCNBD9 ;SEE IF HE'S OUT OF THE WAY
+
+CCNBT1: BRANK,,BPREL(A)
+ BFILE,,BPREL(A)
+ BPDAG,,BPREL(A)
+ BMDAG,,BPREL(A)
+
+CCNBT2: BRANK,,BPREL(Q)
+ BFILE,,BPREL(Q)
+ BPDAG,,BPREL(Q)
+ BMDAG,,BPREL(Q)
+
+CCNBT3: 0 ;RANK - TO RANK -
+ 1 ;RANK + TO RANK +
+ 3 ;FILE - TO FILE +
+ 2 ;FILE + TO FILE -
+ 6 ;P DIAG - TO DIAG P -+
+ 4 ;P DIAG + TO DIAG P +-
+ 7 ;M DIAG - TO DIAG M --
+ 5 ;M DIAG + TO DIAG M ++
+
+;TO ADD
+;1) EFFECT ON P STRUCTURE OF CAPT A P --DONE
+;2) EFFECT OF MOVING P FROM S1 TO S2 --DONE
+;3) IF UNFAVORABLE P ACTION ON CAPT AND OTHER PIECES COULD HAVE, TRY THAT
+;4) ESTIMATE VALUES IF OPPOSITE ASSUMPTIONS MADE FOR PINS CONSTRAINTS
+
+;3 MVS OF PC
+;2 MVS OF PCS THAT CAN MOVE TO VACATED SQ
+;EFFECT OF ATTACK (ON WEAK, CONSTRAINED, CANT MOVE ETC)
+;TEMPO ATTACKS ON SQUARES
+;CAPT OF PC ONLY DEFENDED BY K
+
+; ISOLATE OR DE ISOLATE --DONE
+; PASS OR DEPASS --DONE
+; WEAKEN OR DE WEAKEN (BACK OR FORWARD) (DOUBLE ETC) ITSELF OR OTHERS --DONE
+; BREAKING OR FORMING RAMS, LEVERS ETC
+
+;ADD ALTERNATIVE STRUCTURE AND ALT TRYER
+;TEMPO EVALUATOR S (PC FINALLY ARRIVING ON SQ
+;AND ALT OPTIONS)
+
+CCCP1A: SKIPE T2 ;ON FIRST RECAPT, PC ON ORIG SQ
+ MOVE TT,A ;P IS NOW ON EXCH SQ (EXCEPT FIRST RECAPT)
+ PUSHJ P,CCCP
+ ADD S,ZR
+ JRST CCCP1B
+
+CCCP1C: PUSHJ P,CCCP ;PC ACTUALLY BEING CAPTED BY ORIG MV
+ SKIPL S ;IF WE ARE CAPTING W/P, HE COULD TAKE US ANYWAY
+ SKIPL LMGT(B) ;(SO HIS P IS AT LEAST FULL NORMAL VALUE)
+ SUB S,ZR
+ JRST CCCP1D
+
+CCAN2M: MOVE TT,PIECEL(T1) ;ORIG MOVE IS W/P AND HE'S NOT GOING TO RECAPT
+ PUSHJ P,CCCP ;TAKE P OFF WHERE IT IS
+ ADD S,ZR
+ MOVE TT,A
+ PUSHJ P,CCPA ;PUT IT BACK ON ;"MOVED TO" SQUARE
+ ADD S,ZR
+ JRST CCAN2L
+
+CCCP1: PUSHJ P,CCCP
+ SUB S,ZR
+ POPJ P,
+
+
+CCCP2: PUSH P,S
+ PUSH P,T1 ;DEF RECAPTING W/P
+ MOVE T1,J
+ MOVE TT,PIECEL(T1)
+ PUSHJ P,CCCP ;TAKE IT OFF WHERE IT IS
+ SUB S,ZR
+ MOVE TT,A
+ PUSHJ P,CCPA ;PUT IT BACK ON CAPT SQ
+ SUB S,ZR
+ POP P,T1
+ CAMLE S,(P)
+ JRST CCCP2A ;THIS CAUSED BAD P STRUCTURE- IS OTHER RECAPT AVAIL?
+CCCP2B: SUB P,[1,,1]
+ JRST CCCP2R
+
+CCCP2A: SKIPN PDIGF ;HAVE ALREADY HACKED THIS
+ SKIPN CCRCYF
+ JRST CCCP2B ;RECYCLE PASS
+ SKIPN NOGYS
+ SKIPN NHGYS
+ JRST CCCP2B
+ MOVE TT,S
+ SUB TT,(P)
+ MOVEM TT,PDAMT ;AMT OF BAD P STRUCTURE INVOLVED
+ MOVE TT,S
+ SUB TT,PVALUE(T1)
+ CAIN C,DFPCT-1
+ JRST CCCP2C
+ CAIE C,DFPCT ;SKIP ON HE HAS NO MORE
+CCCP2D: ADD TT,PVALUE(J)
+CCCP2E: CAMGE TT,CCMXDF
+ MOVEM TT,CCMXDF ;DEFENDER "OUGHT" NOT TO SETTLE FOR MORE THAN THIS
+ PUSH P,T1 ;PUT IT BACK THERE
+ MOVE T1,J
+ MOVEM J,PDIGY ;P DEFENDING
+ MOVE TT,A
+ PUSHJ P,CCCP
+ MOVE TT,PIECEL(T1)
+ PUSHJ P,CCPA
+ POP P,T1
+ POP P,S ;WE HAVE ANOTHER RECAPT AVAIL, SO TRY THAT
+ SETOM PDIGF
+ JRST CCANFP
+
+CCCP2C: HRRZ ZR,1(C)
+ CAIE ZR,(T1)
+ JRST CCCP2D
+ JRST CCCP2E ;WE'RE TAKING HIS LAST
+
+CCCP5: PUSH P,T1
+ MOVE T1,J
+ MOVE TT,PIECEL(T1)
+ PUSHJ P,CCCP
+ ADD S,ZR
+ MOVE TT,A
+ PUSHJ P,CCPA
+ ADD S,ZR
+ POP P,T1
+ JRST CCCP5R
+
+CCCP: MOVEI ZR,0 ;REMOVE PW IN T1 FROM SQ IN TT
+ PUSH P,I ;ZR GETS PAWN VAL DECREMET IF ZR IS -, P IS MORE VAL THAN NORMAL
+ PUSH P,T2
+ LDB I,[430100,,PIECE(T1)]
+ LDB W,[BFILE,,BPREL(TT)]
+ SKIPN @CCPT2(I)
+ SKIPE @CCPT4(I)
+ JRST .+2
+ ADDI ZR,45 ;THIS P WAS ISO
+ LDB T2,[BRANK,,BPREL(TT)]
+ XCT CCPT6(I)
+ XCT CCPT7(I)
+ JRST CCCP4
+ XCT CCPT8(I)
+ JRST CCCP4A ;THIS P WAS PASSED
+CCCP4: SOSE @CCPT1(I)
+ JRST CCCPR
+ SKIPE @CCPT2(I) ;ISO'ING P'S TO K SIDE?
+ SKIPE @CCPT3(I)
+ JRST CCCP3
+ SUBI ZR,45 ;MAKING ISO P'S ON K SIDE
+CCCP3: SKIPE @CCPT4(I)
+ SKIPE @CCPT5(I)
+ JRST CCCPR
+ SUBI ZR,45
+CCCPR: SKIPN T2,WTPWSW
+ JRST CCCPR1
+ SKIPE I
+ XOR T2,[-1]
+ JUMPG T2,CCCPR1
+ SUBI ZR,40 ;DIDNT WANT TO LOSE P
+CCCPR1: POP P,T2
+ POP P,I
+ POPJ P,
+
+
+CCCP4A: SKIPE I
+ MOVE T2,REVERS(T2)
+ CAIN T2,8
+ JRST CCCP4B
+ SUB ZR,PPV(T2)
+ JRST CCCP4
+
+CCCP4B: SUBI ZR,KQV-PWNV
+ JRST CCCP4
+
+CCPT1: CWPNFL(W)
+ CBPNFL(W)
+
+CCPT2: CWPNFL-1(W)
+ CBPNFL-1(W)
+
+CCPT3: CWPNFL-2(W)
+ CBPNFL-2(W)
+
+CCPT4: CWPNFL+1(W)
+ CBPNFL+1(W)
+
+CCPT5: CWPNFL+2(W)
+ CBPNFL+2(W)
+
+CCPT6: CAMLE T2,BDPRK(W) ;SKIP ON NOT PASSED (RANK OF WP IN T2)
+ CAMGE T2,WDPRK(W) ;SKIP ON NOT PASSED (RANK OF BP IN T2)
+
+CCPT7: CAMG T2,BDPRK+1(W) ;SKIP ON MAYBE PASSED
+ CAML T2,WDPRK+1(W)
+
+CCPT8: CAMLE T2,BDPRK-1(W) ;SKIP ON NOT PASSED
+ CAMGE T2,WDPRK-1(W)
+
+CCPA: MOVEI ZR,0 ;ADD P IN T1 TO SQ IN TT
+ PUSH P,I
+ PUSH P,T2
+ LDB I,[430100,,PIECE(T1)]
+ LDB W,[BFILE,,BPREL(TT)]
+ SKIPN @CCPT2(I)
+ SKIPE @CCPT4(I)
+ JRST .+2
+ SUBI ZR,45 ;THIS P WILL BE ISO
+ LDB T2,[BRANK,,BPREL(TT)]
+ XCT CCPT6(I)
+ XCT CCPT7(I)
+ JRST CCPA4
+ XCT CCPT8(I)
+ JRST CCPA4A ;THIS P IS PASSED
+CCPA4: AOS T2,@CCPT1(I)
+ SOJN T2,CCPAR
+ SKIPE @CCPT2(I)
+ SKIPE @CCPT3(I)
+ JRST CCPA3
+ ADDI ZR,45 ;DE ISOLATE TO K SIDE
+CCPA3: SKIPE @CCPT4(I)
+ SKIPE @CCPT5(I)
+ JRST CCPAR
+ ADDI ZR,45
+CCPAR: SKIPN T2,WTPWSW
+ JRST CCCPR1
+ SKIPE I
+ XOR T2,[-1]
+ JUMPG T2,CCCPR1
+ ADDI ZR,40 ;CANCEL AMT SUB AT CCCP
+ JRST CCCPR1
+
+CCPA1A: PUSH P,TT
+ MOVE TT,A
+ PUSHJ P,CCCP ;RECAPTING P THAT CAPTED
+ SUB S,ZR
+ POP P,TT
+ JRST CCAN5B
+
+CCPA4A: SKIPE I
+ MOVE T2,REVERS(T2)
+ CAIN T2,8
+ JRST CCPA4B
+ ADD ZR,PPV(T2)
+ JRST CCPA4
+
+CCPA4B: ADDI ZR,KQV-PWNV
+ JRST CCPA4
+
+CCNF1: CLEARM CCAN8V
+ MOVE R,PIECEL(T1)
+ CLEARM BOARD(R)
+ PUSH P,T1
+ PUSH P,T2
+CCNF2: LDB W,[SPINCP,,1(TT)]
+ MOVE T2,PIECEL(W)
+ SKIPN BOARD(T2)
+ JRST CCNF3 ;PC OFF BOARD
+ LDB ZR,[SPINSQ,,(TT)]
+ CAIN ZR,(A)
+ JRST CCNF3 ;MVING TO THIS SQ NOW
+ LDB ZR,[PTID,,PIECE(J)]
+ SOJLE ZR,CCNF4 ;P OR N WONT HOLD
+ PUSH P,S
+ PUSH P,B
+ MOVE B,J
+ LDB S,[SPINSQ,,(TT)]
+ CLEARM CCANF1
+ PUSHJ P,@LGLMPT(B)
+ SETOM CCANF1
+ POP P,B
+ POP P,S
+ SKIPL CCANF1
+ JRST CCNF3
+CCNF4: MOVEM A,CCNSSQ ;SO HE CAN MOVE THERE, WILL IT DO ANY GOOD?
+ PUSH P,B
+ LDB A,[SPINSQ,,(TT)]
+ MOVEI Q,CCNFR
+ LDB B,[SPINCP,,1(TT)]
+ CLEARM CCNNTP ;# THR HE GETS
+ CLEARM CCNLV ;LARGEST THR GAIN
+ CLEARM CCNSLV ;SECOND LARGEST GAIN
+ CLEARM CCNDSF ;FLAG IF HITS TRADEOFF SQ
+ PUSHJ T,LMKNT
+ POP P,B
+ MOVE A,CCNSSQ
+ SKIPN CCNNTP
+ JRST CCNF3 ;DOESNT HIT ANYTHING
+ SKIPGE CCNDSF
+ JRST CCNF5 ;ATT AT LEAST ONE OTHER THING AND TRADE-OFF SQ
+CCNF6: MOVE ZR,CCNSLV
+ ADDM ZR,CCAN8V
+CCNF3: LDB TT,[SPNLK,,1(TT)]
+ JUMPN TT,CCNF2
+ POP P,T2
+ POP P,T1
+ MOVE Q,PIECEL(T1)
+ MOVEI R,PIECE(T1)
+ MOVEM R,BOARD(Q)
+ SKIPE CCAN8V
+ JSP ZR,CCCV
+ JRST CCNFRX
+
+CCNF5: MOVE ZR,PVALUE(J)
+ SKIPE NHGYS
+ SUBI ZR,NV
+ JUMPLE ZR,CCNF6
+ CAMLE ZR,CCNLV
+ EXCH ZR,CCNLV
+ CAMLE ZR,CCNSLV
+ EXCH ZR,CCNSLV
+ JRST CCNF6
+
+
+CCNFR: CAMN A,CCNSSQ
+ JRST CCNFR1
+ SKIPLE T1,BOARD(A)
+ XCT OURGY1(I)
+ POPJ T,
+ MOVE ZR,PVALUE-PIECE(T1)
+ SKIPN @LMGST+1(I)
+ JRST CCNFR2
+ SUB ZR,PVALUE(B)
+ JUMPLE ZR,CPOPJT
+CCNFR2: CAMLE ZR,CCNLV
+ EXCH ZR,CCNLV
+ CAMLE ZR,CCNSLV
+ EXCH ZR,CCNSLV
+ AOS CCNNTP
+ POPJ T,
+
+CCNFR1: SETOM CCNDSF
+ POPJ T,
+
+CCNNTP: 0 ;# OF USEFUL THINGS N WOULD DO
+CCNLV: 0 ;LARGEST OF THESE
+CCNSLV: 0 ;SECOND LARGEST OF THESE
+CCNDSF: 0 ;-1 IF HITS TRADEOFF SQ
+CCNSSQ: 0 ;SQ OF ORIG SWAPOUT
+
+;;MV2
+MLQCAS: PUSHJ P,LQCAS
+ POPJ P,
+MLCQ1: SKIPE ICSW
+ PUSHJ P,MMIC5Q
+ MOVE T1,PIECEL+WKING-PIECE(T)
+ MOVE T2,BOARD(T1)
+ CLEARM BOARD(T1)
+ MOVEM T2,BOARD+2(T1)
+ ADDI T1,2
+ MOVEM T1,PIECEL+WKING-PIECE(T)
+ LDB T2,[BFILE,,BPREL(T1)]
+ MOVEM T2,PFILE+WKING-PIECE(T)
+ LDB T2,[BRANK,,BPREL(T1)]
+ MOVEM T2,PRANK+WKING-PIECE(T)
+ SKIPGE WKING(T)
+ MOVE T2,REVERS(T2)
+ MOVEM T2,RPRANK+WKING-PIECE(T)
+ MOVE T1,PIECEL+WQR-PIECE(T)
+ MOVE T2,BOARD(T1)
+ CLEARM BOARD(T1)
+ MOVEM T2,BOARD-3(T1)
+ SUBI T1,3
+ MOVEM T1,PIECEL+WQR-PIECE(T)
+ LDB T2,[BFILE,,BPREL(T1)]
+ MOVEM T2,PFILE+WQR-PIECE(T)
+ LDB T2,[BRANK,,BPREL(T1)]
+ MOVEM T2,PRANK+WQR-PIECE(T)
+ SKIPGE WQR(T)
+ MOVE T2,REVERS(T2)
+ MOVEM T2,RPRANK+WQR-PIECE(T)
+ SKIPE ICSW
+ PUSHJ P,MMIC6Q
+ MOVEI T2,2
+ JRST MMOVE6
+
+
+LKCAS: SKIPN @NKM(I)
+ SKIPE @SNKRMV(I)
+ POPJ P,
+ SKIPN @LMGKT3(I)
+ POPJ P,
+ MOVE T1,@OKINGT(I)
+ SKIPN BOARD-1(T1)
+ SKIPE BOARD-2(T1)
+ POPJ P,
+ SKIPE I
+ ADDI T1,BD2
+ SKIPE BA(T1)
+ POPJ P,
+ SKIPN BA-1(T1)
+ SKIPE BA-2(T1)
+ POPJ P,
+ AOS (P)
+ POPJ P,
+
+LQCAS: SKIPN @NKM(I)
+ SKIPE @SNQRMV(I)
+ POPJ P,
+ MOVE T1,@OKINGT(I)
+ SKIPN BOARD+1(T1)
+ SKIPE BOARD+2(T1)
+ POPJ P,
+ SKIPE @LMGKT1(I)
+ SKIPE BOARD+3(T1)
+ POPJ P,
+ SKIPE I
+ ADDI T1,BD2
+ SKIPE BA(T1)
+ POPJ P,
+ SKIPN BA+1(T1)
+ SKIPE BA+2(T1)
+ POPJ P,
+ AOS (P)
+ POPJ P,
+
+;;;CLC
+CCONS: TDZA T1,T1 ;COMPUTING CONSTRAINT SO BE OPTIMISTIC
+ ;IE CONSTRAIN PIECE IF IT MAY BE DOING ANY GOOD
+ ;EVEN IF UNCLEAR
+CLOS1: MOVNI T1,1 ;COMPUTING LOSS SO BE PESSIMISTIC
+ MOVEM T1,CLOSF
+ MOVN S,PVALUE(B)
+ MOVEM S,MCT4T2 ;BEST OPTION FOR SIDE TO MOVE (LOSS OF PC IN QUESTION)
+ CLEARM MCT4T4 ;BEST CHOICE FOR SIDE NOT TO MOVE (NO CAPT)
+ HRRZ T1,B ;SQUARE IN A PIECE ON SQUARE IN B
+ CLEARB S,T2
+CLOS3: CAIN D,ATPCT
+ JRST CLOS2A ;OUT OF ATTACKERS
+ MOVE ZR,1(D)
+ TLNE ZR,200000
+ AOJA D,CLOS3
+ PUSHJ P,CCVLA
+ MOVEM S,CLACL(T2)
+ MOVEM T1,CLACLP(T2)
+CLOS3B: CAIN C,DFPCT
+ AOJA T2,CLOS4
+ MOVE T1,1(C)
+ TLNE T1,200000
+ AOJA C,CLOS3B ;IGNORE THIS PIECE
+ SKIPN TT,PINT(T1)
+ JRST CLOS3A
+; LDB Q,[PINBS,,1(TT)] ;THIS LOSES FOR NOW BECAUSE WILL ALSO DISCOVER ADDITIONAL ATTACKERS
+; CAMN Q,A
+; JRST CLOS3C ;PINNED TO PIECE CONSIDERING DEFENDING
+ SKIPE NATKS
+ AOJA C,CLOS3B ;MORE THAN ONE ATTACKER SO PIN EFFECTIVE
+ MOVE J,ATPCP
+ MOVE Q,1(J)
+ SKIPGE RPIECE(Q)
+ JRST CLOS3A ;ONLY ATTACKER IS K SO PIN NOT EFFECTIVE
+ LDB ZR,[BPDPB,,1(TT)]
+ JUMPN ZR,CLOS3L ;PIN BY DOUBLED PCS
+ LDB ZR,[PINATP,,1(TT)]
+ CAME ZR,Q ;SKIP ON PINNED BY FIRST ATTACKER SO PIN NOT EFFECTIVE
+CLOS3L: AOJA C,CLOS3B
+CLOS3A: MOVE T1,1(D)
+ PUSHJ P,CCVLS
+ MOVEM S,CLDCL(T2)
+ MOVEM T1,CLDCLP(T2)
+ MOVE T1,1(C)
+ AOS T2
+ AOS C
+ AOJA D,CLOS3
+
+;CLOS3C: HRRZ TT,(TT)
+; JUMPE TT,CLOS3A ;THAT PIN NOT EFFECTIVE
+; AOJA C,CLOS3B ;ANY OTHER PIN EFFECTIVE
+
+CLOS2A: JUMPE T2,CLAX2 ;OUT OF ATTACKERS
+ PUSHJ P,FELS1
+ JRST CLOS2B
+
+CLOS4: MOVEM S,CLDCL-1(T2)
+ CLEARM CLDCLP-1(T2)
+ PUSHJ P,FELS ;OUT OF DEFENDERS
+CLOS2B: MOVEM TT,CCLSP ;STORE NUMBER OF TRADES(-1) AND SIDE THAT CAPTURED LAST
+ JRST CLAX1 ;TEMP
+
+CLAX1: SKIPGE S
+CLAX2: MOVEI S,0
+ POPJ P,
+
+
+LCLACL==10.
+ 0
+CLACL: BLOCK LCLACL ;NET IF ATTACKER CAPTURES LAST
+ 0 ;PC CAPTURED ON MOVE AT CCAN
+CLACLP: BLOCK LCLACL
+ 0
+CLDCL: BLOCK LCLACL ;NET IF DEFENDER CAPTURES LAST
+ 0 ;MUST BE 0 FOR SYMMETRY WITH CLACLP-1
+CLDCLP: BLOCK LCLACL
+CLATMP: BLOCK LCLACL ;TEMPO ON ATTACKER CAPTURE
+CLDTMP: BLOCK LCLACL ;TEMPO ON DEF CAPT
+
+CCLSS: 0 ;ADJUSTED CALCULATED LOSS
+CCLSP: 0 ;RH NUMBER PREDICTED TRADES LH -1 DEFENDER CAPTURES LAST
+
+CLOSF: 0 ;-1 COMPUTING LOSS SO BE PESSIMISTIC (GET MAX LOSS)
+ ;0 COMPUTING CONSTRAINT SO BE OPTMISITIC (GET MIN LOSS)
+
+NAPI: -1 ;# ATTACKER PINS + CONSTRAINTS IGNORED (DUE TO
+ ;NOT STRONG ENUF)
+APIV: 0 ;NET VALUE OF THESE
+NDPI: -1 ;# DEF
+DPIV: 0 ;VALUE OF THESE
+
+NDPIS: 0 ;SAVED VALUES
+NAPIS: 0
+DPIVS: 0
+APIVS: 0
+
+APIGT: BLOCK LCLACL ;INFO ON IGNORED FROBS LH => 0 PNTR TO PIN INFO
+DPIGT: BLOCK LCLACL ;.NE. 0 CONSTRAINT WD
+DPIGPL: BLOCK LCLACL ;PLY # FROB HAPPENED AT
+
+CWPNFL: BLOCK 10. ;COPIED FROM WPNNFL AT START
+CBPNFL: BLOCK 10.
+
+CLDMX: 0 ;MAX VALID CLACLP , ETC INDEX (REG SWAPOUT)
+CLDRMX: 0 ;AS ABOVE, BUT ALSO INCLUDES ANY EXTRA DEFENDERS
+
+CLAFL: 0 ;TEM
+
+HCGB: 0 ;HIS PCS BEARING ON CONSTRAINT SQ GONE ALREADY IN EXCH
+OCGB: 0 ;OURS
+
+NHGYS: 0 ;HIS PCS BEARING NOT YET CONSIDERED
+NOGYS: 0 ;OURS
+
+CCTRDV: 0 ;VALUES FOR WANT TO TRADE OR NOT (NEG FACTORS)
+
+CCRCYF: -1 ;-1 NORMAL PASS, 0 RECYCLE PASS, 1 REVERT PASS
+;AFTER NORMAL PASS DOES RECYCLE PASS IF "THINGS TURN OUT
+;BADLY" AND OTHER OPTIONS WERE AVAIL
+;THEN DOES REVERT PASS IF THOSE OTHER OPTIONS TURN OUT WORSE
+
+CCRCV: 0 ;VALUE PRIOR TO RECYCLE
+CCRVV: 0 ;VALUE PRIOR TO REVERT
+PDIGF: 0 ;-1 => OTHER P CAPTING OPTIONS AVAIL
+PDIGY: 0 ;PC # OF DEFERRED P
+PDAMT: 0 ;AMT OF BAD P STRUCTURE INVOLVED
+CCMXDF: 0 ;MAX DEF WILL SETTLE FOR W/O RECYCLE IN CASE OF BAD P STRUCTURE
+
+FELS1: MOVEI TT,-1(T2)
+ TLO TT,400000
+ MOVE S,CLDCL(TT) ;D ALSO HAS OPTION TO CAPTURE LAST
+CLOS5A: MOVEI T1,0
+ JRST CLOS5
+
+FELS: MOVE S,CLACL ;RET IN TT NUMBER TRADES (4.9 => D CAPT LAST) OUTCOME IN S
+ MOVEI T1,1
+ MOVE TT,T1
+CLOS5: CAML T1,T2
+ JRST CLOS6
+ CAMGE S,CLACL(T1) ;D HAS OPTION OF ALLOWING A TO CAPT LAST AT ANY POINT
+ AOJA T1,CLOS5
+ MOVE TT,T1
+ MOVE S,CLACL(T1)
+ AOJA T1,CLOS5
+
+CLOS6: HRREI T1,-1(TT)
+ JUMPL T1,CLOS7A
+CLOS8: CAML S,CLDCL(T1)
+ JRST CLOS7
+ MOVE S,CLDCL(T1) ;A CAN ALLOW D TO CAPTURE LAST IF FAVORABLE
+ HRRO TT,T1
+CLOS7: SOJGE T1,CLOS8
+CLOS7A: HRREI T2,-1(TT)
+ JUMPL T2,CPOPJ
+ TLZN TT,377777
+ POPJ P,
+ JRST CLOS5A
+
+;BACK RANK HACK
+;1 OUR K ON BACK RANK NO-> FLUSH
+;2 HE HAS RFPCS NO-> FLUSH
+;3 OUR K HAS NO MVS EXCEPT ON BACK RANK NO->FLUSH
+;4 HIS RFPCS HAS ACCESS TO BACK RANK NO->FLUSH
+;5 A) HE THREATNENS MATE
+; B) OUR PC THAT CAN INTERPOSE IS CONSTRAINED
+; C) OUR PC OCC IS CONSTRAINED
+
+;;;MN2A
+
+WKB3=2*BW+2*BW+2+1
+WKP==4
+WQP==5
+WK3=WKB3+1
+WQ3=WK3+1
+BKP=WKP+NPCS
+BQP=WQP+NPCS
+BK3=WK3+3*BW
+BQ3=WQ3+3*BW
+
+
+LMGQ: SKIPE BKF2R
+ JRST LMGQ1
+LMGQ2: CLEARB R,CVPR
+ SETZB Q,POSMAX
+ SETZB J,POSMIN
+ MOVEI D,-1
+ MOVEM D,POSHSA
+ POPJ P,
+
+LMG: CLEARB D,LPPMN ;SEARCH #, ENTRY FOR NOT FEEDING INFO DOWN
+ MOVSI R,(SETZ)
+LMG0: SKIPGE QTF ;ENTRY FOR FEEDING DOWN INFO
+ ;RETURN LARGEST POSSIBLE VALUE IN R AND POSMAX, SMALLEST IN Q AND POSMIN
+ ;HASH INDEX IN POSHSA AND PRINC VARIATION IN CVPR
+ JRST LMGQ ;QUIT
+LMGQ1: ;CROSS CHECK/ SURPRISE ARGS
+ ;R VALUE IF EXCEEDED FOR SIDE TO MOVE "SURPRISE" WILL OCCUR AT HIGHER LEVEL (SETZ => NONE)
+ ;D PNTR TO SAVED THREAT- MVDST SAVED TBL OF MOVE PLAYED AT HIGHER LEVEL, 0 NONE
+ ;RETURN IN J PNTR TO THREAT/MVDST SAVED BLOCK OF BEST MOVE (OR 0)
+ MOVE C,EVMST
+ MOVEM C,POSMIN
+ MOVE C,EVMST+1
+ MOVEM C,POSMAX
+ CLEARM SFB ;CLEAR IN A FEEDOVER FLAG
+ PUSH P,SABEG
+ MOVE A,SAFSP
+ MOVEM A,SABEG
+ PUSH P,PDVLV
+ PUSH P,WTDLVL
+ PUSH P,BTDLVL
+ PUSH P,CTVLVN
+ PUSH P,CTVLVW
+ PUSH P,CTVLVB
+ PUSH P,CTMLVN
+ PUSH P,CTMLVW
+ PUSH P,CTMLVB
+ PUSH P,PWKSF
+ PUSH P,PBKSF
+ PUSH P,BPREV(I) ;MUST BE LAST THING PUSHED
+ MOVEM P,LGLMST
+ AOS LMGD
+ AOS C,LMGD2 ;CURRENT DEPTH
+ SUB C,HK1V ;BASIC DEPTH LIMIT
+ MOVEM C,LMPLF
+
+ SETOM HSHMOV
+ MOVN W,C
+ ADD W,PCGSW
+ ADD W,FDCUT
+ ADD W,FDDCUT
+ AOSGE W ;GET # PLYS LOOKING LEFT
+ MOVEI W,0
+ CAILE W,MHPLN
+ MOVEI W,MHPLN
+ SKIPGE NHSW ;SUPRESS ALL HASH
+ JRST LMGH6
+ PUSHJ P,HASHR0
+ JRST LMGH1 ;POSITION FOUND
+LMGH2: MOVSI T1,400000(W) ;POSITION PENDING
+ MOVE J,PLYN
+ SUB J,HSHPLN
+ CAIL J,MHPIT
+ MOVEI J,MHPIT
+ DPB J,[HNPIT,,T1] ;STORE PLY DEPTH IN TREE
+ MOVEI J,-1 ;NO MOVE OR LINK OUT
+ PUSHJ P,HASHE1
+
+LMGH6: SKIPG EGSW
+ JRST LMGH5 ;DONT USE END GAME HACK
+ PUSHJ P,EGINT
+ JRST EGVR1 ;IT APPLIED
+LMGH5: PUSHJ P,STVL4T ;ENTRY ON DELAYED FEEDOVER
+ MOVE S,WTDVL
+ MOVEM S,WTDLVL
+ MOVE S,PDVDF
+ MOVEM S,PDVLV ;SET UP DIFFERENCE FOR NEXT TIME
+ MOVE S,BTDVL
+ MOVEM S,BTDLVL
+ MOVE S,CTVVW
+ MOVEM S,CTVLVW
+ MOVE S,CTVV
+ MOVEM S,CTVLVN
+ MOVE S,CTVVB
+ MOVEM S,CTVLVB
+ MOVE S,CTMVW
+ MOVEM S,CTMLVW
+ MOVE S,CTMV
+ MOVEM S,CTMLVN
+ MOVE S,CTMVB
+ MOVEM S,CTMLVB
+ MOVE S,KSAEXP
+ MOVEM S,PWKSF
+ MOVE S,KSAEXP+1
+ MOVEM S,PBKSF
+ MOVE T,[-LLMGPL,,LMGPDL-1]
+ MOVEM R,PCSATS ;PIECES AS THEY SIT
+ SUB R,@HASV(I) ;HIS BEST SO FAR
+ SKIPN I
+ MOVNS R ;OBTAIN AMT NEEDED TO CAUSE A/B FLUSH
+ SUB R,POSBGF ;ALLOWABLE FOR KING SAFETY POSITIONAL ETC
+ MOVEM R,AHDATS
+ MOVE R,PCSATS
+ SUB R,@OASV(I)
+ SKIPN I
+ MOVNS R
+ SUB R,POSBGF
+ MOVEM R,ABFATS
+ SKIPGE SFB
+ JRST STATE2
+ CLEARM PCGMD
+ MOVE C,LMPLF
+ JUMPLE C,PCGS1 ;NOT TO BASIC DEPTH
+ SUB C,PCGSW
+ JUMPG C,STATE1 ;REACHED END OF BOTH PMG AND PCG, DO OLD STYLE
+STATE2: SETOM PCGMD ;SET P.C.G. SWITCH FOR PMG (ENTRY ON REG FEEDOVER)
+ AOS PCGMC
+PCGS1:
+
+ AOS NPL ;ENTRY ON REG FEEDOVER
+ CLEARM BPCSOP ;BIT SET FOR PIECES ON PREY
+ CLEARM DEFVL+1
+ MOVE T1,[DEFVL+1,,DEFVL+2]
+ BLT T1,ENPCL+NPC-1+1 ;DEFVL ENPCL CONSEC
+ CLEARM SPINFS
+ CLEARM SPINT+1
+ MOVE T1,[SPINT+1,,SPINT+2]
+ BLT T1,DEFME+NPC+1-1
+ JRST THR1A
+
+
+EGVR1: MOVE D,HSADR
+ MOVEI J,0
+ MOVEI TT,2 ;DEFAULT HPVMGI IF NO MV
+ JSP ZR,EVMX
+
+PMAF2: MMSAVAC
+ MOVSI I,(SETZ)
+ MOVEM I,TRCSW1
+ MOVE A,PMGTMV ;MOVE TO TRACE
+ PUSHJ P,ALTRC1 ;RETURN AFTER TRACE COMPLETE BUT UNTRACE NOT DONE
+ MMSAVAC
+ PUSHJ P,AFTR3 ;UNTRACE
+ MMRSAC
+ SETOM QTF
+ POPJ P,
+
+
+LMEN: MOVE R,PCSATS
+ CLEARM GDNATS
+ CLEARM GDNMAG
+ CLEARM NTMPMV
+ CLEARM NRPYMV
+ CLEARM CANTK
+ CLEARM INCHK
+ CLEARM NNBLDR
+ CLEARM HEXP
+ CLEARM BSTPMV
+ CLEARM SBPMV
+ CLEARM SRTI
+ CLEARM SASWL
+ MOVE A,LMGD
+ CAMG A,SASW
+ SETOM SASWL
+ MOVNI A,100000
+ MOVEM A,BSTPV
+ MOVEM A,SBPV
+ MOVE A,@OKINGT(I)
+ CLEARM CANMV
+ SKIPN NHTHR(I)
+ SKIPE @LMGST+1(I)
+ JRST PCGM5A ;IN CHECK OR HE HAS THREATS
+ SETOM CANTK
+ MOVE Q,R
+PCGM4: XCT PCGABT(I)
+ JRST PCGM2 ;NOT GOOD ENUF FOR A B CUOFF
+ SETOM GDNATS
+ MOVE ZR,R
+ SUB ZR,@PCGABT(I)
+ MOVMM ZR,GDNMAG ;OVER A B CUT BY THIS
+ SKIPE PCGMD
+ JRST PCGM1
+PCGM2: SKIPL PCGMD
+ JRST PCGM5
+ XCT ABUPT(I)
+ PUSHJ P,BPRVS
+PCGM5: MOVEI A,1(P)
+ MOVEM A,HPMVP ;SAVE PMV FOR HIS PCS TO COMP AT LOWER LEVEL IN THEY GET CAPTED
+ HRL A,SPMV1(I)
+ ADD P,[16.,,16.]
+ BLT A,(P)
+ HRRZM P,PMVORG
+ CLEARM PCSWSM ;PIECES WITH SAFE MOVES
+ JUMPN I,LMG2A
+ CLEARM NSM+1
+ MOVE T1,[NSM+1,,NSM+1+1]
+ BLT T1,NSM+NPCS-1+1
+ CLEARM CDEVT+1
+ MOVE T1,[CDEVT+1,,CDEVT+1+1]
+ BLT T1,CDEVT+NPCS-1+1
+LMG2B: CLEARM DGCLSB
+ MOVE T1,[DGCLSB,,DGCLSB+1]
+ BLT T1,DGCLE-1 ;CLEAR CLASS TBLS
+
+ MOVE A,@OKINGT(I)
+ MOVE B,LGMST2(I)
+ MOVEI Q,LMGR
+ CLEARM TEFAL ;TOTAL EFFORT ALLOCATED
+ MOVEM Q,LMQS
+ CLEARM NCKF
+ CLEARM NSMVS ;NO. SAFE MOVES
+ CLEARM PCGCF ;PLAUS CAPT CUTOFF FLAG
+ MOVNI T2,100000
+ MOVEM T2,HEXP
+ SKIPE S,@LMGST+1(I)
+ JRST LMG1 ;IN CHECK
+
+LMG2:
+LMG2C: SETOM CDVCF ;CURRENT DEV VALUE COMPUTED FLAG
+ SKIPE A,PIECEL(B)
+ PUSHJ T,@LMGT(B)
+ SKIPGE PCGCF
+ JRST PCGF3 ;PCG CUTTOFF
+ SKIPE T1,NSMVS
+ JRST LMG2D ;STORE PCS W/SAFE MOVES
+ AOBJN B,LMG2C
+
+LMG2E: SKIPN @NKM(I)
+ JRST LMCAS ;TRY CASTLING
+LMCAS3: SKIPL T1,NSACSQ
+ JRST SACC1 ;CREDIT SAC'S
+SACC2: MOVEI T1,0
+ EXCH T1,BKF2R
+ JUMPN T1,LMGRET
+IFN DSPLY,[
+ SKIPN DBS1
+ SKIPE WALLP
+ JRST TDISPL
+]
+TD7: JRST EVM
+
+SPMV1: PMV+NPCS+1 ;PNTR TO PMV FOR HIS PCS
+ PMV+1
+
+LMGRET: SOS LMGD
+ SOS LMGD2
+ JRST (T1)
+
+SACC1: HRRZ T2,PMVORG
+SACC6: CAILE T2,-NWDPM(P)
+ JRST SACC3
+ HRRZ ZR,1(T2)
+ CAMN ZR,SACSQ(T1)
+ JRST SACC4
+SACC5: ADDI T2,NWDPM
+ JRST SACC6
+
+SACC4: HLRZ ZR,1(T2)
+ CAME ZR,SACPC(T1)
+ JRST SACC5
+ MOVE ZR,SACVL(T1)
+ SKIPGE SACQA(T1)
+ ADDI ZR,300.
+; SUB ZR,SACAMT(T1) ;ALREADY SUBTRACTED IN EGAIN
+ JUMPLE ZR,SACC3
+ ADDM ZR,2(T2) ;CREDIT SACCING MV WITH POSSIBLE GAIN OF SAC
+ ADDM ZR,6(T1) ;ALSO INCR MAX POSSIBLE GAIN OF MV
+SACC3: SOJGE T1,SACC1
+ JRST SACC2
+
+LMGH2A: LDB A,[HPVMGI,,HSTBV(T2)]
+ CAIE A,3
+ JUMPN A,LMGH2 ;NOT BY PMG
+ LDB A,[HSTSQN,,HSTBL(T2)]
+ LDB T1,[HSTPRN,,HSTBL(T2)]
+ SKIPN T1
+ JUMPE A,LMGH2
+ LDB B,[HSTPON,,HSTBL(T2)]
+ MOVEM A,HSHMOV
+ JUMPE T1,LMGH2B
+ CAIGE T1,3
+ JRST LMGH2C
+ CAIN T1,3
+ MOVEI T1,0 ;E.P. CAPT, NOT ON PDL
+LMGH2B: SKIPG D,BOARD(B)
+ ERRTTY [ASCIZ /LOSE AT LMGH2A/]
+ SUBI D,PIECE
+LMGH2D: HRLM D,HSHMOV
+ DPB T1,[170300,,HSHMOV]
+ JRST LMGH2
+
+LMGH2C: MOVEI D,0
+ JRST LMGH2D
+
+LMGH1: PUSHJ P,HHVC
+ JRST LMGH2A ;DATA NOT SIG
+ AOS NHMCH
+ MOVE T1,LMGD
+ CAIGE T1,LHFLT
+ AOS HFLT(T1) ;INCREMENT COUNTER AS A FUNCTION OF DEPTH
+LMGHX: HRRZM T2,POSHSA ;HASH EXIT
+ CLEARM HSTPSW
+ CLEARM CVPR
+ PUSH P,ICSW ;RECONSTRUCT PRINC VARIATION
+ CLEARM ICSW ;DONT WASTE TIME UPDATING SINCE COMING BACK TO SAME POSITION
+ SETOM DBSUPS
+ PUSH P,T2
+ MOVE T1,GAMP
+ MOVEM T1,LMGGPS ;SAVE LVL IN GAME
+LMGPV3: LDB B,[HSTPON,,HSTBL(T2)]
+ LDB A,[HSTSQN,,HSTBL(T2)]
+ LDB T1,[HSTPRN,,HSTBL(T2)]
+ SKIPN T1
+ JUMPE A,LMGPV2 ;NO MOVE FROM THIS POSITION
+ MOVE ZR,HSTBV(T2)
+ MOVE T2,GAMP
+ MOVEM ZR,GAMEV+1-GAME(T2)
+ PUSHJ P,TMOVE2
+ ERRTTY [ASCIZ /HASH TBL MOVE ILLEGAL/]
+ LDB I,[100,,PLYN]
+ PUSHJ P,HASHR0
+ JRST .+2
+ JRST LMGPV2 ;NOT FOUND
+ HRRZ T1,(P)
+ HRRZ A,HSTBL(T1)
+ CAIE A,(T2)
+ ERRTTY [ASCIZ /FALSE HASH MATCH/]
+ AOSN HSTPSW
+ JRST LMGPV1
+ MOVE A,HSTBV(T1)
+ TLNE A,40000
+ SETOM HSTPSW ;THIS VAL GOTTEN BY MATCHING GAME OR PREV SEARCH (TAKE ONE MORE STEP)
+ HRRZM T2,(P)
+ JRST LMGPV3
+
+LMGPV2: HRRZ T1,(P)
+ HRRZ T1,HSTBL(T1)
+ CAIE T1,-1
+ ERRTTY [ASCIZ /HASH DIDNT MATCH, WAS SUPPOSED TO/]
+LMGPV1: MOVE T1,GAMP
+ CAMN T1,LMGGPS
+ JRST LMGPV4
+ PUSHJ P,UMHR
+ JRST LMGPV1
+
+LMGPV4: MOVSI T1,BHASH
+ SKIPE CVPR
+ IORM T1,@CVPR
+ SUB P,[1,,1]
+ POP P,ICSW
+ PUSHJ P,HSKG
+ CLEARM DBSUPS
+ MOVE T2,POSHSA
+ MOVE A,LPPMN
+ LDB J,[410300,,HSTBV(T2)]
+ CAIN J,3 ;SKIP IF NOT POS IN GAME
+ DPB A,[HPRMN,,HSTBV(T2)]
+ MOVE R,POSMAX
+ MOVE Q,POSMIN
+ MOVE T1,LMGD ;HASH EXIT
+ MOVEI J,0
+ JSP ZR,EVM5B1
+
+PCGM1: SKIPN NHTHR(I)
+ SKIPE @LMGST+1(I) ;IN CHECK OR HE HAS THREATS
+ JRST PCGM2
+PCGF3: ;A B CUTTOF W/O SEARCH
+
+ MOVE R,PCSATS
+ MOVE Q,R
+ XCT ABVLI(I)
+ SKIPL D,HSADR
+ SKIPGE T1,NHSW
+ JRST PCGF1
+ JUMPE T1,PCGF2
+ MOVEI T1,0
+ DPB T1,[410300,,HSTBV(D)]
+ MOVEM Q,HSTBVV(D)
+ HRLM R,HSTBVV(D)
+ MOVE A,LPPMN
+ DPB A,[HPRMN,,HSTBV(D)]
+ MOVEI A,3
+ DPB A,[HPVMGI,,HSTBV(D)]
+PCGF1: CLEARM CVPR
+ MOVEI J,0
+ JSP ZR,EVM5B2
+
+
+PCGF2: CLEARM HSTB(D)
+ AOS HASHS
+ MOVNI D,1
+ JRST PCGF1
+
+
+PCGABT: CAMGE R,BPREV+1
+ CAMLE R,BPREV
+
+PCGM5A: XCT PCGABT(I)
+ JRST PCGM5
+ SETOM GDNATS
+ JRST PCGM5
+
+LMG4T: CAMLE S,[-PWNV]
+ CAIGE S,PWNV
+
+THR1A: SETOM NSACSQ
+ CLEARM ATHRP ;PNTR TO AUX THREAT TBL
+ CLEARM NTPCC ;# PCS W/ NO SAFE MVS
+ MOVEM I,SIDTM
+ SKIPE T1,@SKNC(I)
+ PUSHJ P,CNNDF ;COMPUTE NSQDF
+ XORI I,1
+ PUSHJ T,THRC ;LOOK AT HIS PCS, FIND OUR THREATS
+ CLEARM NSCTHR ;# SINGLE CAPT THREATS
+ CLEARM NMCTHR ;# MULT CAPT THR
+ MOVE I,SIDTM ;LOOK AT PIECES OF SIDE TO MOVE
+ PUSHJ T,THRC
+ MOVEI J,0
+ SKIPE T1,NHTHR
+ PUSHJ T,STRM1 ;MARK STRONG THREATS (PC THREATNED IS PINNED OR HAS NO MVS)
+ MOVEI J,1
+ SKIPE T1,NHTHR+1
+ PUSHJ T,STRM1 ;MARK STRONG THREATS
+ MOVE T1,SPINFS
+ MOVEM T1,SPINFM ;SAVE BASE LVL OF SPINFS
+ SKIPE NSCTHR
+ SKIPN T1,NMCTHR
+ JRST MPM
+ HRRZ T2,HTHRP(I) ;"SORT" NECC TO ASSURE SINGLE CAPT FROBS FIRST
+ MOVE A,NHTHR(I)
+IFN NWTHE-2, IMULI A,NWTHE
+IFE NWTHE-2, LSH A,1
+ ADD A,T2
+THRSR2: SKIPGE -NWTHE+2(A)
+ JRST THRSR1 ;SINGLE ENTRY, MOVE IT DOWN
+ SUBI A,NWTHE
+ SOJG T1,THRSR2
+MPM: HRRZM P,MPBAS ;SET UP MV PREP TBL
+ CLEARM NMP ;# ENTRIES IN MV PREP TBL
+ SKIPN T1,@OTNPP(I)
+ JRST MPM1 ;WE HAVE NO THREATS
+ MOVE T2,@OTRPP(I)
+MPM2: LDB B,[THRTP,,1(T2)]
+ SKIPE TT,PINT(B)
+ JRST MPM3 ;OUR PC PINNED (EVENTUALLY CREDIT UNPINNING MVS)
+MPM4: SKIPE TT,SPINT(B)
+ JRST MPM5 ;OUR PC CONSTRAINED (EVENTUALLY CREDIT FREEING MVS
+MPM6: ADDI T2,NWTHE
+ SOJG T1,MPM2
+MPM1: JRST LMEN
+
+MPM3: LDB S,[PINATP,,1(TT)] ;PC PINNING OUR GUY
+ LDB ZR,[THRTS,,1(T2)] ;SQ OUR GUY MOVES TO TO EXECUTE THREAT
+ CAMN ZR,PIECEL(S)
+ JRST MPM3A ;ABT TO CAPT HIM
+ MOVEI ZR,0
+ PUSHJ T,MPME
+MPM3A: HRRZ TT,(TT)
+ JUMPE TT,MPM4
+ JRST MPM3
+
+MPME: HRR ZR,TT
+ MOVEI S,1(T2)
+ SUB S,@OTRPP(I)
+ DPB S,[MPTHN,,ZR]
+ PUSH P,ZR
+ AOS NMP
+ POPJ T,
+
+MPM5: LDB J,[SPINCP,,1(TT)]
+ LDB S,[THRTS,,1(T2)]
+ CAMN S,PIECEL(J)
+ JRST MPM5A
+ LDB ZR,[PTID,,PIECE(B)]
+ SOJLE ZR,MPM5B ;P OR N
+ LDB A,[SPINSQ,,1(TT)]
+ CLEARM CCANF1
+ PUSH P,T1
+ PUSH P,T2
+ PUSHJ P,@LGLMPT(B)
+ SETOM CCANF1
+ POP P,T2
+ POP P,T1
+ SKIPL CCANF1
+ JRST MPM5A
+MPM5B: MOVSI ZR,100000
+ PUSHJ T,MPME
+MPM5A: LDB TT,[SPNLK,,1(TT)]
+ JUMPE TT,MPM6
+ JRST MPM5
+
+THRSR1: REPEAT NWTHE, PUSH T,-NWTHE+1+.RPCNT(A) ;SAVE THREAT
+ MOVE TT,A
+THRSR3: MOVE B,-NWTHE(TT) ;MOVE EVERYTHING DOWN
+ MOVEM B,(TT)
+ CAILE TT,NWTHE-1+NWTHE(T2)
+ SOJA TT,THRSR3
+ REPEAT NWTHE, POP T,NWTHE-.RPCNT(T2) ;PUT BACK THREAT
+ JRST THRSR2
+
+STRM1: MOVE T2,HTHRP(J) ;MARK STRONG THREATS
+STRM3: LDB A,[THRTS,,1(T2)]
+ SKIPG B,BOARD(A)
+ JRST STRM2
+ MOVSI C,200000
+ SKIPGE LMGT-PIECE(B)
+ JRST STRM4
+ SKIPN PMV-PIECE(B)
+ JRST STRM5 ;PC HAS NO MVS
+STRM4: SKIPN PINT-PIECE(B)
+ SKIPE SPINT-PIECE(B)
+STRM5: IORM C,2(T2)
+STRM2: ADDI T2,NWTHE
+ SOJG T1,STRM3
+ POPJ T,
+
+THRC: CLEARM NHTHR(I) ;FIND THREATS AGAINST SIDE IN I
+ MOVEM P,HTHRP(I)
+ CLEARM TTLHT(I)
+ CLEARM LTHR(I)
+ SKIPE @NHPPP
+ JRST THPP1 ;HE HAS P.P. - CAN HE PUSH THEM?
+THPP2: MOVE B,LGMST2(I)
+THR1: SKIPE A,PIECEL(B)
+ SKIPGE RPIECE(B)
+ JRST THR2 ;NON EXISTANT OR K
+ SKIPN PMV(B)
+ CAME I,SIDTM
+ JRST THR1B
+ SKIPL LMGT(B)
+ AOS NTPCC ;PCS WITH NO MVS
+THR1B: PUSHJ P,ATEVL ;FOUND EXISTANT PC
+ CAIL C,DFPCT
+ JRST SDF1
+ MOVEI T2,DFPCT-1
+SDF2: MOVE T1,1(T2)
+ PUSHJ P,SIDF1 ;PC DEFENDED, SET UP IDEF AND DEFME
+ CAMGE C,T2
+ SOJA T2,SDF2
+SDF1: CAIL D,ATPCT
+ JRST SAT1
+ MOVEI T2,ATPCT-1
+SAT2: MOVE T1,1(T2)
+ PUSHJ P,SIAT1 ;PC ATTACKED, SET UP IATT AND ATTME
+ CAMGE D,T2
+ SOJA T2,SAT2
+SAT1:
+ SKIPN @LMGST+1(I)
+ JRST THR2 ;NOT ATTACKED
+ SETOM THRT2
+ CAME I,SIDTM
+ CAIE C,DFPCT-1
+ JRST OKD1 ;NOT OTHER SIDE OR NOT 1 DEF
+ MOVE T1,1(C)
+ SKIPGE RPIECE(T1)
+ CAIE D,ATPCT-1
+ JRST OKD1 ;NOT ONE ATTACKER OR DEF NOT K
+ AOS T2,NSACSQ ;SAC HACK
+ CLEARM SACVL(T2)
+ CLEARM SACQA(T2)
+ MOVEM A,SACSQ(T2)
+ MOVE T1,1(D) ;ATTACKER
+ MOVEM T1,SACPC(T2)
+ MOVE S,PVALUE(T1)
+ SUB S,PVALUE(B)
+ SKIPGE S
+ MOVEI S,0
+ MOVEM S,SACAMT(T2)
+OKD1: MOVE S,PVALUE(B)
+ CAIE C,DFPCT
+THR4R: PUSHJ P,THRPC ;LOAD T2 WITH NEXT DEF DONT SKIP IF NONE
+ JRST THR3 ;ONLY DEF PINNED
+ MOVE C,DFPCP
+ MOVEM D,THRT1
+ MOVEM D,ATHRPP ;SAVE FOR USE AT ATHRCH
+ PUSHJ P,CLOS1
+ JUMPLE S,THR6 ;NOT E.P.
+ MOVEM S,ENPCL(B) ;E.P. STORE DIRECT CALC LOSS
+ MOVE D,ATPCP
+ MOVE T1,1(D)
+ MOVE T2,PVALUE(B)
+ SUB T2,PVALUE(T1) ;CALC LOSS ON EXCH AND RECAPT, NO RE-RECAPT
+ SKIPGE T2
+ MOVEI T2,0 ;MUST LOSE AT LEAST THIS IF DONT MOVE
+ SUBM S,T2 ;SAVINGS ON TOTAL LOSS POSSIBLE BY DEFENCE
+ CAMLE T2,PVALUE(T1)
+ MOVE T2,PVALUE(T1) ;CANNOT BE GREATER THAN VAL OF ATTACKER
+ MOVE ZR,CCLSP
+ CAMN ZR,[SETZ]
+ MOVEI T2,0 ;ALREADY ADEQUATE DEFENCE
+ MOVEM T2,DEFVL(B)
+THR5: CLEARM THQST
+ AOS T2,THRT1
+ CAIN T2,ATPCT+1
+ JRST THR2 ;THREAT DOESNT REALLY EXIST (EVIDENTLY THREATNED ONLY BY PCS PINNED TO K)
+ SKIPGE T1,(T2) ;ATTACK PC
+ JRST THR5 ;NOT DIRECT
+ SKIPE C,PINT(T1)
+ JRST THR5B1 ;PC PINNED, SEE IF TO K
+THR5B2: PUSHJ T,THRST1 ;STORE THREAT
+ PUSHJ T,ATHRCH ;CHECK FOR SECONDARY ATTACKERS
+THR5B: MOVE T2,THRT1 ;TRY CAPTURES BY OTHER THAN HIS LEAST VALUABLE
+ CAIN T2,ATPCT
+ JRST THR6
+ SKIPGE T1,1(T2)
+ JRST THR5A ;PIECE DOESNT BEAR DIRECTLY
+ CLEARM THQST
+ SKIPE C,PINT(T1)
+ JRST THR5B4 ;MAKE SURE NOT PINNED TO K
+THR5B5: MOVE C,DFPCP
+ MOVE D,ATPCP
+ SOS D
+ MOVEM T1,1(D) ;MOVE P TO BOTTOM OF HEAP
+ MOVSI T1,200000
+ IORM T1,1(T2) ;DISABLE OTHER APPEARANCE
+ MOVEM D,ATHRPP
+ PUSHJ P,CLOS1
+ AOS T2,THRT1
+ JUMPLE S,THR5G
+ MOVE T1,(T2)
+ PUSHJ T,THRST1
+ PUSHJ T,ATHRCH
+THR5G: MOVSI T1,200000
+ ANDCAM T1,@THRT1
+ JUMPG S,THR5B
+THR6: MOVE C,DFPCP ;DETERMINE CONSTRAINT VALUES FOR OUR DEFENDERS
+ MOVEM C,THRT1
+ CAIN C,DFPCT-1
+ JRST THR6A ;ONLY 1 DEFENDER
+THR6B: AOS T2,THRT1
+ CAIN T2,DFPCT+1
+ JRST THR7
+ MOVSI T1,200000
+ IORM T1,(T2) ;DISABLE DEFENDER
+ MOVE C,DFPCP
+ MOVE D,ATPCP
+ PUSHJ P,CLOS1
+ MOVE T2,THRT1 ;FIND LOSS
+ MOVSI T1,200000
+ ANDCAB T1,(T2)
+ JUMPLE S,THR7A ;NOT CONSTRAINED
+ MOVE D,ATPCP
+ MOVE J,PVALUE(B)
+ MOVE T1,1(D)
+ SUB J,PVALUE(T1)
+ SKIPGE J
+ MOVEI J,0 ;GET VALUE OF LOSS DUE TO FIRST EXCHANGE (NO DEFENSE WILL HELP THIS)
+ SUBM S,J
+ JUMPLE J,THR7 ;J GETS MAX POSSIBLE BENEFIT
+ SUB S,ENPCL(B)
+ CAIGE S,PWNV
+ MOVEI S,PWNV
+ CAMLE S,J ;CREDIT SOME FOR DEFENCE EVEN IF IT DOESNT APPARENTLY HELP
+ MOVE S,J ;(AS LONG AS IT IS POSSIBLE FOR DEFENCES TO HELP)
+ HRRZ T1,(T2)
+ PUSHJ P,SPS1
+ JRST THR6B
+THR7:
+ MOVSI T1,THSCF
+ SKIPN T2,THRT2
+ IORM T1,-NWTHE+2(P) ;ONLY 1 PC THREATNING TO TAKE
+ JUMPL T2,THR2
+ SKIPN T2
+ AOSA NSCTHR
+ AOS NMCTHR
+THR2: AOBJN B,THR1
+ POPJ T,
+
+THR7A: SKIPN PINT(T1) ;PLF NOT CONSTRAINED
+ JRST THR7 ;NOT BECAUSE OF PIN SO NEXT WONT BE EITHER
+ JRST THR6B ;BECAUSE OF PIN SO CHECK NEXT
+
+THRPC: CAIN C,DFPCT
+ POPJ P,
+ MOVE T2,1(C)
+ SKIPN TT,PINT(T2)
+ AOJA C,POPJ1 ;NOT PINNED
+; LDB Q,[PINBS,,1(TT)] ;THIS LOSES FOR NOW BECAUSE WILL ALSO DISCOVER ADDTL ATTACKERS
+; CAMN Q,A
+; JRST THRPC1 ;CONSIDERING DEFENDING PIECE PINNED TO
+ SKIPE NATKS
+ AOJA C,THRPC ;MORE THAN ONE ATTACKER SO PIN EFFECTIVE
+ MOVE Q,1(D)
+ SKIPGE RPIECE(Q)
+ AOJA C,POPJ1 ;ONLY ATTACKER IS K SO DISREGARD PIN
+ LDB ZR,[PINATP,,1(TT)]
+ MOVE J,ATPCP
+ CAME ZR,1(J)
+ AOJA C,THRPC ;NOT PINNED BY FIRST ATTACKER
+ AOJA C,POPJ1 ;PINNED BY FIRST A SO DISREGARD PIN
+
+;THRPC1: HRRZ TT,(TT)
+; JUMPE TT,POPJ1 ;PIN NOT EFFECTIVE IF ONLY ONE
+; AOJA C,THRPC ;ANY OTHER PIN EFFECTIVE
+
+THR3: MOVE S,PVALUE(B) ;ATT AND NO EFF DEFENCE
+ SKIPE Q,PPASED(B)
+ ADD S,PPV(Q)
+ MOVE Q,D
+ SETOM THR3CT
+THR3C: CAIN Q,ATPCT
+ JRST THR3B
+ SKIPGE T1,1(Q)
+ AOJA Q,THR3C ;NOT DIRECT THREAT
+ CLEARM THQST
+ SKIPE T2,PINT(T1)
+ JRST THRCP1 ;PIN, TO K?
+THRCP2: SKIPGE THR3CT
+ MOVEM T1,THR3CT
+ PUSH P,S ;APPARENT GAIN
+ ADDM S,TTLHT(I)
+ DPB T1,[THRTP,,(P)]
+ DPB A,[THRTS,,(P)]
+ AOS NHTHR(I)
+ PUSHJ T,ETTMPO ;EVALUATE TEMPO OF THREAT
+ AOSN THRT2
+ AOJA Q,THR3C
+ MOVEI ZR,1
+ DPB ZR,[THRRL,,-NWTHE+1+1(P)]
+ AOJA Q,THR3C
+
+THRCP1: LDB ZR,[PINATP,,1(T2)]
+ CAIN ZR,(B)
+ JRST THRCP4 ;PIN BY PC ABOUT TO GO
+ SETOM THQST ;HIS PC PINNED
+ CAME I,SIDTM
+ JRST THRCP2
+ SKIPGE (T2)
+ AOJA Q,THR3C ;PIN TO K (NOT REALLY THREAT)
+THRCP4: HRRZ T2,(T2)
+ JUMPN T2,THRCP1
+ JRST THRCP2
+
+THR5B1: LDB ZR,[PINATP,,1(C)] ;HIS PC PINNED
+ CAIN ZR,(B)
+ JRST THR5B3
+ SETOM THQST
+ CAME I,SIDTM
+ JRST THR5B2
+ SKIPGE (C)
+ JRST THR5 ;PINNED TO K
+THR5B3: HRRZ C,(C)
+ JUMPN C,THR5B1
+ JRST THR5B2
+
+THR5B4: LDB ZR,[PINATP,,1(C)] ;HIS (NOT LEAST VAL) PC PINNED
+ CAIN ZR,(B)
+ JRST THR5B6
+ SETOM THQST
+ JRST THR5B5
+
+THR5B6: HRRZ C,(C)
+ JUMPN C,THR5B4
+ JRST THR5B5
+
+THR3B: SKIPGE T1,THR3CT
+ JRST THR7
+ MOVEM S,ENPCL(B)
+ MOVE T2,PVALUE(B)
+ SUB T2,PVALUE(T1) ;SEE COMMENTS AT SPDPB1 ETC
+ SKIPGE T2
+ MOVEI T2,0
+ SUBM S,T2
+ CAMLE T2,PVALUE(T1)
+ MOVE T2,PVALUE(T1)
+ MOVEM T2,DEFVL(B)
+ JRST THR7
+
+THR5A: AOS T2,THRT1
+ JRST THR5B
+
+THR6A: MOVE S,PVALUE(B)
+ MOVE D,ATPCP
+ MOVE J,S
+ MOVE T1,1(D)
+ SUB J,PVALUE(T1)
+ SKIPGE J
+ MOVEI J,0
+ SUBM S,J
+ JUMPLE J,THR7 ;J GETS MAX POSSIBLE BENEFIT FROM DEFENCE
+ SUB S,ENPCL(B)
+ CAIGE S,PWNV
+ MOVEI S,PWNV
+ CAMLE S,J
+ MOVE S,J
+ MOVE T1,1(C)
+ PUSHJ P,SPS1
+ JRST THR7
+
+
+ATHRCH: MOVE Q,ATHRPP
+ CAIL Q,ATPCT-1
+ POPJ T, ;ONLY ONE ATTACKER
+ PUSH P,S
+ MOVE T1,ATHRP
+ MOVEM T1,ATHRPS
+ SETOM THRSAF ;SET SWITCH SO WILL KNOW IF SECONDARY THREAT STORED
+THR5E: MOVSI T1,200000
+ TDNE T1,2(Q)
+ JRST THR5F ;PIECE ALREADY DISABLED
+ IORM T1,2(Q)
+ PUSH P,Q
+ MOVE C,DFPCP
+ MOVE D,ATHRPP ;C(D) WHEN THREAT GENERATED
+ PUSHJ P,CLOS1
+ POP P,Q
+ MOVSI T1,200000
+ ANDCAM T1,2(Q)
+ SUB S,(P)
+ JUMPGE S,THR5D ;DISABLING THIS ATTACKER DID NOT REDUCE NET LOSS
+ MOVNS S
+ ANDI S,7777
+ MOVE T1,2(Q)
+ DPB T1,[THAXPC,,S] ;STORE AUX THREAT
+ AOS T1,ATHRP
+ CAIL T1,LTHAUXT
+ JRST THR5C
+ MOVEM S,THAUXT(T1)
+ CLEARM THRSAF
+THR5F: CAIGE Q,ATPCT-2
+ AOJA Q,THR5E
+THR5D: POP P,S
+ SKIPGE THRSAF
+ POPJ T,
+ MOVE T1,ATHRP
+ MOVSI ZR,400000
+ IORM ZR,THAUXT(T1) ;SET END CODE IN THAUXT
+ AOS T1,ATHRPS
+ DPB T1,[THAUXP,,-NWTHE+1(P)]
+ POPJ T,
+
+THR5C: SOS ATHRP ;AUX THREAT TBL FULL
+ JRST THR5D
+
+SPS1: MOVEI J,0
+ HRRZ D,ATPCP
+ CAIN D,ATPCT-1
+ MOVE J,1(D) ;J HAS PC CAUSING CONSTRAINT (IF ONLY ONE, ELSE 0)
+ SKIPN D,IDEF(T1)
+SPS1D: ERRTTY [ASCIZ /LOSE AT SPS1/]
+SPS1C: LDB Q,[SPINSQ,,(D)]
+ CAIN Q,(A)
+ JRST SPS1B
+ LDB D,[SPNLK,,1(D)]
+ JUMPN D,SPS1C
+ JRST SPS1D
+
+SPS1B: MOVSI Q,(DFCNB)
+ IORM Q,(D) ;INDICATE THIS DEF A CONSTRAINT
+ SKIPLE D,BOARD(A)
+ SKIPN Q,DEFME-PIECE(D)
+SPS2A: ERRTTY [ASCIZ /LOSE AT SPS2A/]
+SPS2B: LDB D,[SPCCN,,(Q)]
+ CAIN D,(T1)
+ JRST SPS2C
+ LDB Q,[SPNLK,,1(Q)]
+ JUMPN Q,SPS2B
+ JRST SPS2A
+
+SPS2C: MOVSI D,(DFCNB)
+ IORM D,(Q) ;INDICAT THIS A CONSTRAINT
+SPS1A: AOS D,SPINFS
+ CAIL D,LSPINLT-NWCN
+ POPJ P,
+ AOS SPINFS
+ HRRZM S,SPINDT(D)
+ DPB A,[SPINSQ,,SPINDT(D)]
+ DPB T1,[SPCCN,,SPINDT(D)]
+ MOVE Q,SPINT(T1)
+ HRRZM Q,SPINDT+1(D)
+ DPB J,[SPINCP,,SPINDT+1(D)]
+ ADDI D,SPINDT
+ MOVEM D,SPINT(T1)
+ POPJ P,
+
+SPSRS: PUSH P,D
+ PUSH P,Q
+ PUSH T,SPINT(T1) ;STORE CON AND ARRANGE FOR IT TO UNHAPPEN AT END OF MOVE
+ HRLM T1,(T)
+ PUSH T,[SPSRES]
+ PUSHJ P,SPS1A
+ POP P,Q
+ POP P,D
+ POPJ P,
+
+SPSRES: POP T,T1
+ MOVSS T1
+ HLRZM T1,SPINT(T1)
+ POPJ T,
+
+SIDFSA: AOS J,SPINFS
+ CAIL J,LSPINLT-NWCN
+ JRST SIDFS1
+ ADDI J,SPINDT
+ CLEARM (J)
+ CLEARM 1(J)
+ AOS SPINFS
+ POPJ P,
+
+SIDFS1: SUB P,[1,,1]
+ POPJ P,
+
+SIDF1: PUSHJ P,SIDFSA
+ DPB A,[SPINSQ,,(J)]
+ DPB T1,[SPCCN,,(J)]
+ MOVE Q,IDEF(T1)
+ HRRZM Q,1(J)
+ MOVEM J,IDEF(T1)
+ PUSHJ P,SIDFSA
+ DPB A,[SPINSQ,,(J)]
+ DPB B,[SPCCN,,(J)]
+ DPB T1,[SPCCN,,(J)]
+ MOVE Q,DEFME(B)
+ HRRZM Q,1(J)
+ MOVEM J,DEFME(B)
+ POPJ P,
+
+SIAT1: PUSHJ P,SIDFSA
+ DPB A,[SPINSQ,,(J)]
+ DPB T1,[SPCCN,,(J)]
+ MOVE Q,IATT(T1)
+ HRRZM Q,1(J)
+ MOVEM J,IATT(T1)
+ PUSHJ P,SIDFSA
+ DPB A,[SPINSQ,,(J)]
+ DPB B,[SPCCN,,(J)]
+ DPB T1,[SPCCN,,(J)]
+ MOVE Q,ATTME(B)
+ HRRZM Q,1(J)
+ MOVEM J,ATTME(B)
+ POPJ P,
+CNNDF: MOVEI Q,CNNDS ;# HIS N'S IN T1 (I SET UP FOR SIDE NOT TO MOVE)
+ MOVE B,CNNT1(I)
+ SKIPG A,PIECEL(B)
+ JRST CNNDF2
+ PUSHJ T,LMKNT
+ SOJLE T1,CPOPJ
+CNNDF2: MOVE B,CNNT2(I)
+ SKIPG A,PIECEL(B)
+ JRST CNNDF3
+ PUSHJ T,LMKNT
+ SOJLE T1,CPOPJ
+CNNDF3: MOVE B,CNNT3(I)
+CNNDF5: SKIPG A,PIECEL(B)
+ JRST CNNDF4
+ LDB T2,[PTID,,PIECE(B)]
+ SOJN T2,CNNDF4 ;NOT N
+ PUSHJ T,LMKNT
+ SOJLE T1,CPOPJ
+CNNDF4: AOBJN B,CNNDF5
+ ERRTTY [ASCIZ /CANT FIND N S- CNNDF4/]
+ POPJ P,
+
+CNNT1: 1+8+1
+ 1+8+1+NPCS
+
+CNNT2: 1+8+6
+ 1+8+6+NPCS
+
+CNNT3: -8,,1
+ -8,,1+NPCS
+ -8,,1
+
+
+CNNDS: SKIPL T2,BOARD(A)
+ SKIPG TT,@LMGST+1(I)
+ POPJ T,
+ JUMPE T2,CNNDS1
+ XCT OURGY2+1(I)
+ POPJ T,
+CNNDS1: SOJN TT,CPOPJT ;DEF BY >1
+ SKIPN T2,@LMGST(I)
+ ERRTTY [ASCIZ /LOSE AT CNNDS1/]
+ CAILE T2,2
+ POPJ T,
+ SOJE T2,CNNDS2
+ LDB T2,CNNDT(I) ;ALREADY SUPPORTED, IS DEF BY LESS OR =?
+ JUMPE T2,CPOPJT ;CAN PROBABLY GO THERE ANYWAY
+CNNDS2: SKIPL BPCHD(A)
+ PUSHJ P,MCAFS
+ LDB T2,ATEVL2+1(I)
+ SKIPN T2 ;PC IN T2 ONLY THIMG STOPPING N MOVE (IT LOOKS LIKE)
+ ERRTTY [ASCIZ /ERR AT CNNDS2/]
+ PUSHJ P,SIDFSA
+ DPB A,[SPINSQ,,(J)]
+ MOVE ZR,NSQDF(T2)
+ DPB B,[SPCCN,,ZR]
+ MOVEM ZR,1(J)
+ MOVEM J,NSQDF(T2)
+ POPJ T,
+
+CNNDT: 60600,,BPAS(A) ;P OR N ATTACKING SQ
+ 60600,,WPAS(A)
+
+THPP1: MOVE B,CNNT3+1(I) ;GEN P.P THR FOR OTHER SIDE THAN I
+THPP4: SKIPE C,PIECEL(B)
+ SKIPG D,PPASED(B)
+ JRST THPP5
+ MOVEI A,@TPPT1(I)
+ SKIPE BOARD(A)
+ JRST THPP5
+ MOVE S,PPTHRV(D)
+ PUSHJ T,THPP3
+ XCT TPPT2(I)
+ JRST THPP5 ;NOT 2ND RANK
+ MOVEI A,@TPPT3(I)
+ MOVEI S,20
+ SKIPN BOARD(A)
+ PUSHJ T,THPP3
+THPP5: AOBJN B,THPP4
+ JRST THPP2
+
+THPP3: SKIPN @LMGST(I)
+ JRST THPP3A
+ SKIPL BPCHD(A)
+ PUSHJ P,MCAFS
+ LDB T1,[BSQSP,,CNTRL(A)]
+ XCT TPPT4(I)
+ POPJ T,
+THPP3A: MOVSI ZR,5 ;PUSH PASSED P THREAT CODE
+ DPB B,[THRTP,,ZR]
+ DPB A,[THRTS,,ZR]
+ DPB S,[THRVAL,,ZR]
+ PUSH P,ZR
+ ADDM S,TTLHT(I)
+ CAMLE S,LTHR(I)
+ MOVEM S,LTHR(I)
+ AOS NHTHR(I)
+ PUSH P,[THSCF,,0] ;NO TEMPO BUT BY SINGLE PC
+ POPJ T,
+
+PPTHRV: 0 ;THREAT VAL OF PUSH PASSED P
+ 0
+ 4
+ 14
+ 34
+ 74
+ 100
+ KQV-PWNV
+
+TPPT1: ,-BW(C)
+ BW(C)
+
+TPPT2: SKIPL 4RNKP-2*BW(C)
+ SKIPG 4RNKP+2*BW(C)
+
+TPPT3: ,-2*BW(C)
+ 2*BW(C)
+
+TPPT4: CAILE T1,MSQWSC
+ CAIGE T1,MSQBSC
+
+
+THRST1: PUSH P,S
+ ADDM S,TTLHT(I)
+ CAMLE S,LTHR(I)
+ MOVEM S,LTHR(I)
+ DPB T1,[THRTP,,(P)]
+ DPB A,[THRTS,,(P)]
+ AOS NHTHR(I)
+ MOVEI ZR,4
+ CAIG S,BVMNV
+ DPB ZR,[THRCD,,(P)] ;ONLY MINOR EXCHANGE THREATNED
+ AOSN THRT2
+ JRST ETTMPO
+ PUSH P,[BTHRRL,,0] ;ALTERNATE WAY TO TAKE SAME WAY
+ JRST ETTMP1
+
+ETTMPO: PUSH P,[0]
+ETTMP1: MMSAVAC
+ MOVE B,T1
+ MOVEI S,0
+ MOVEI Q,ETTM1
+ PUSHJ T,@LMGT(B)
+ SKIPGE THQST
+ TLO S,THQTH
+ IORM S,(P) ;STORE LARGEST THREAT (IE TEMPO VALUE)
+ MMRSAC
+ POPJ T,
+
+2ATKR: MOVE Q,ATPCP
+2ATKR1: CAIN Q,ATPCT
+ POPJ P,
+ CAMN Q,D
+ AOJA Q,2ATKR1 ;D POINTS TO FIRST ATTACKER
+ CAML D,Q
+ SKIPL 1(Q)
+ JRST POPJ1
+ AOJA Q,2ATKR1 ;NOT DIRECT AND APPROX NOT UNBLOCKED
+
+ETTM1: SKIPLE D,BOARD(A)
+ XCT OURGY(I)
+ POPJ T,
+ SKIPGE RPIECE-PIECE(D) ;OUR GUY
+ JRST ETTM2 ;K
+ MOVE T1,PVALUE-PIECE(D)
+ SKIPN @LMGST(I)
+ JRST ETTM3
+ SUB T1,PVALUE(B)
+ JUMPLE T1,CPOPJT
+ETTM3: CAMGE S,T1
+ MOVE S,T1
+ POPJ T,
+
+ETTM2: MOVEI S,400000
+ POPJ T,
+
+LMG2A: CLEARM NSM+NPCS+1
+ MOVE T1,[NSM+NPCS+1,,NSM+NPCS+1+1]
+ BLT T1,NSM+NPC-1+1
+ CLEARM CDEVT+NPCS+1
+ MOVE T1,[CDEVT+NPCS+1,,CDEVT+NPCS+1+1]
+ BLT T1,CDEVT+NPC-1+1
+ JRST LMG2B
+
+LMG2D: MOVEM T1,NSM(B)
+ AOS PCSWSM ;PIECES W SAFE MOVES
+ AOBJN B,LMG2
+ JRST LMG2E
+
+
+LMCAS: PUSHJ P,LKCAS ;STORE CASTLING IF LEGAL
+ JRST LMCAS1
+ MOVEI T1,0
+ PUSHJ T,LMCAS2
+LMCAS1: PUSHJ P,LQCAS
+ JRST LMCAS3
+ MOVEI T1,1
+ PUSHJ T,LMCAS2
+ JRST LMCAS3
+
+LMCAS2: PUSH P,LMCT1(T1) ;MOVE
+ MOVE T2,@LMCT2(I) ;APPROP R
+ MOVE TT,PMVORG
+LMCAS4: CAIL TT,(P)
+ ERRTTY [ASCIZ /CANT FIND ROOK MV (CASTLE)/]
+ HLRZ ZR,1(TT)
+ CAMN ZR,@LMCT2(I)
+ JRST LMCAS5
+LMCAS6: ADDI TT,NWDPM
+ JRST LMCAS4
+
+LMCAS5: HRRZ ZR,1(TT)
+ CAME ZR,@LMCT5(I) ;TO APPRO SQ
+ JRST LMCAS6
+ MOVE ZR,2(TT) ;FOUND CORRESP R MOVE
+ ADDI ZR,10
+ ADD ZR,FMROOK ;CANCEL "MOVING R WHEN O-O (O) POSSIBLE"
+ SKIPE @SQNC+1(I)
+ ADDI ZR,200 ;HIS Q ON BD
+ SKIPE @BPINTK(I)
+ ADDI ZR,200 ;SOMETHING PINNED TO K
+ PUSH P,ZR ;STORE BASIC PLAUS
+ MOVE T2,3(TT) ;MISC BITS
+ HRRI T2,20(T2) ;ADD 20 TO EXPECTED DELTA
+ MOVEI ZR,2
+ DPB ZR,[PCGMCL,,T2]
+ PUSH P,T2
+ PUSH P,[0] ;POSITIONALITY
+ MOVE ZR,5(TT) ;CLASS WD
+ LDB T2,[MPCLBS,,ZR] ;CLASS COM WITH B.S.F.
+ CAILE T2,DPOSV-DGCLSB
+ MOVEI T2,DPOSV-DGCLSB ;MAKE IT AT LEAST HAS + VIRTUE
+ MOVN C,ABFATS ;EXCESS OVER NEED
+ SUB C,TTLHT(I)
+ SKIPL C
+ MOVEI T2,DGNG-DGCLSB ;IF HOLDING WILL DO, MAKE IT DIR GAIN GOOD ENUF
+ DPB T2,[MPCLBS,,ZR]
+ LDB T2,[MPCLAB,,ZR] ;CLASS COMP WITH NEED FOR A-B CUT
+ CAIL T2,DPOSV-DGCLSB
+ MOVEI T2,DPOSV-DGCLSB ;AT LEAST HAS + VIRTUE
+ MOVN C,AHDATS
+ SUB C,TTLHT(I)
+ SKIPL C
+ MOVEI T2,DGNG-DGCLSB ;IF HOLDING WILL DO, MAKE IT DIR GAIN GOOD ENUF
+ DPB T2,[MPCLAB,,ZR]
+ PUSH P,ZR
+ MOVE T2,6(TT) ;POTENTIAL GAIN WD
+ HRRI T2,20(T2)
+ PUSH P,T2
+ POPJ T,
+
+NKM: NMOVES+WKING-PIECE
+ NMOVES+BKING-PIECE
+
+LMCT1: 100000
+ 200000
+
+LMCT2: LMCT3(T1)
+ LMCT4(T1)
+
+LMCT3: WKR-PIECE
+ WQR-PIECE
+
+LMCT4: BKR-PIECE
+ BQR-PIECE
+
+LMCT5: LMCT6(T1)
+ LMCT7(T1)
+
+LMCT6: 2*BW+1+2 ;KB1
+ 2*BW+1+4 ;Q1
+
+LMCT7: 2*BW+7*BW+1+2 ;KB1
+ 2*BW+7*BW+1+4 ;Q1
+;AMT OF PC ADV LOSE IF LOST P'S AND LEFT WITH N
+TRDSM6: .15_35. ;0 (IF PC ADV > BV+NV)
+ .10_35. ;1
+ .05_35. ;2
+ 0
+ 0
+ 0
+ 0
+ 0
+
+TRDSM7: .75_35. ;IF PC ADV < BV+NV
+ .30_35.
+ .20_35.
+ .10_35.
+ .05_35.
+ 0
+ 0
+ 0
+
+EVM: PUSH P,P ;-60 MUST BE TOP
+EVMET==-60
+ PUSH P,SAFSP ;-57 PNTR TO SURPRISE TRY TABLE
+ESSTP==-57
+ PUSH P,[0] ;-56 # ENTRIES IN SURPRISE TRY LIST
+ESSTC==-56
+ PUSH P,NRPYMV ;-55 .NE. 0 HAVE NOT LOOKED AT REPLY MV
+ESTRPT==-55
+ PUSH P,HPMVP ;-54 PNTR TO SAVED PMV FOR HIS PCS
+ESHPMV==-54
+ PUSH P,[10000] ;EXPECTATION OF MOVE WITH BEST SO FAR SCORE
+ESBEXP==-53
+ PUSH P,INCHK ;IN CHECK INDICATOR CURRENT POSITION
+ESINC==-52
+ PUSH P,SRTI ;-1 IF 4SORT RUN THIS LVL
+ESSRTI==-51
+ PUSH P,SASWL ;-1 IF STORED SA STUFF THIS LVL
+ESSASW==-50
+ PUSH P,BSTPMV ;BEST POSITIONAL MOVE -47
+ESBPM==-47
+ PUSH P,SBPMV ;SECOND BEST POSITIONAL MOVE -46
+ESSBPM==-46
+ PUSH P,NNBLDR ;-45 # NON BLUNDERS AVAIL (AND NOT INVESTIGATED)
+ESNBDR==-45
+ PUSH P,NTMPMV ;-44 .NE. 0 HAVE NOT LOOKED AT TEMPO MV
+ESTMPT==-44
+ PUSH P,HEXP ;HIGHEST "EXPECTATION"
+ESHEXP==-43
+ PUSH P,PCGMD ;-1 IF IN PCG MODE
+ESPCGM==-42
+ PUSH P,CANMV ;-1 IN HAVE LGL MV (IN PCG MODE)
+ESCNMV==-41
+ PUSH P,CANTK ;-1 IF HAVE MV TO ANSWER ALL THREATS (IE CAN TAKE CURRENT VAL)
+ESCNTK==-40
+ SKIPGE PCGMD
+ SKIPL CANTK
+ JRST EVMA
+ PUSH P,PCSATS ;CAN TAKE IN PCG MODE
+ PUSH P,PCSATS
+ MOVE A,PCSATS
+ XCT EVMPVI(I) ;UPDATE POSMAX,POSMIN
+ MOVEM A,@EVMPVI(I)
+ JRST EVMA1
+
+EVMA: PUSH P,STVT1
+EPSMX==-37
+ PUSH P,STVT1+1
+EPSMN==-36
+EVMA1: PUSH P,POSMAX
+EIPSMX==-35
+ PUSH P,POSMIN
+EIPSMN==-34
+ PUSH P,NHTHR(I) ;NUMBER HIS THREATS
+ESNHTR==-33
+ PUSH P,HTHRP(I) ;PNTR TO HIS THREATS ON PDL
+ESHTRP==-32
+ PUSH P,@OTNPP(I) ;NUMBER OUR THREATS
+ESNMTR==-31
+ PUSH P,@OTRPP(I) ;PNTR TO OUR THREATS ON PDL
+ESMTRP==-30
+ PUSH P,[,-1] ;HASH ADR OF BEST SO FAR
+ESMBHA==-27
+ PUSH P,LPPMN ;-26 SEARCH # OF MV THAT LED TO THIS POS AT PREV LEVEL
+ESPMN==-26
+ PUSH P,[0] ;NUMBER MOVES INVESTIGATED SINCE LAST BEST SO FAR (RH)
+EVNMS==-25 ;NUMBER MOVES INVESTIGATED (LH)
+ PUSH P,[0] ;FORWARD CUT FLAG
+ESFCFL==-24
+ PUSH P,LMGD2 ;DEPTH AT START
+ESLD2==-23
+ MOVE S,LMGD
+ PUSH P,PSBR-1(S) ;-22 MAX # POSITIONAL ONLY MVS TO LOOK AT
+ESPMC==-22
+ MOVE T1,PCSWSM
+IFN KILLH,SETZM ABFTC(S)
+ LSH T1,1
+ CAMLE T1,SBR-1(S)
+ MOVE T1,SBR-1(S)
+ LSH T1,-1
+ PUSH P,T1 ;DISTINCT PIECES THAT WANT TO MOVE
+ESNPM==-21
+ PUSH P,[0]
+ESPHI==-20 ;BIT SET FOR PIECE IF HAVE INVESTIGATED MOVE BY THAT PIECE
+ MOVE T1,EVMET-ESNLM+1(P)
+ SUB T1,PMVORG
+ HRRZS T1
+ IDIVI T1,NWDPM
+ IMUL T1,[-NWPOS]
+ CAMGE T1,[-NOCM*NWPOS]
+ SKIPA T1,[JRST OPNS2]
+ HRLI T1,(MOVEI T1,)
+ PUSH P,T1 ;MOVEI T1,-NWPOS*NUM LEGAL MOVES OR
+ESNLM==-17 ;JRST OPNS2 IF LGL MVS > NOCM
+ PUSH P,PMVORG ;POINTER TO BEG OF MOVES
+ESMLP==-16
+ PUSH P,FDCV ;CUTOFF VALUE ON FEEDOVER INVESTIGATION
+ESFCV==-15
+ PUSH P,[0] ;-14 CURRENT RELIABILITY CODE
+ESMR==-14
+ PUSH P,PMVORG ;-13 POINTER TO LAST MOVE INVESTIGATED
+ESMTP==-13
+ PUSH P,HSADR ;ADR OF CURRENT POS IN HASH TABLE
+ESMHA==-12
+ PUSH P,BPCSOP ;SAVE PCS ON PREY FOR LINE ANALISYS
+ESPOP==-11
+ PUSH P,NCKF ;NO. SAFE CHECKS
+ESNFK==-10
+ PUSH P,SFB ;- IN A FEEDOVER -2 DISABLE FIS HACK
+ESFBL==-7
+ PUSH P,[0] ;PRINCIPAL VARIATION SO FAR-6
+ PUSH P,[0] ;BEST MOVE-5
+ PUSH P,PCSATS ;-4 PCSATS
+ESPCS==-4
+ PUSH P,HSHMOV ;-3 HASH FORCED MOST PLAUS MV OR -1
+ESHMV==-3
+ PUSH P,I ;-2
+ PUSH P,LGLMST ;-1
+ PUSH P,SBR-1(S) ;BASIC SEARCH WIDTH AS FUNCTION OF DEPTH 0
+
+EVM4: SOSGE (P)
+ JRST EVM5D ;BASIC WIDTH UP
+EVM5D3:
+EVM5D5:
+EVM5D6: SKIPL T1,ESHMV(P)
+ JRST EVHSH1 ;PLAY FORCED MOST PLAUS BY HASH MATCH
+ SKIPE ESTMPT(P)
+ JRST ESTMP1 ;LOOK AT TEMPO MV?
+ESTMP2: MOVNI R,2
+ XCT ESNLM(P)
+ HRRZ T2,ESMLP(P) ;PICK UP PNTR TO BEG OF MOVES
+ JRST OPNSRT(T1)
+
+OPNS2: MOVE T1,EVMET(P) ;CHECK MOVES OFF TOP IN EXCESS OF NOCM
+ SUB T1,ESMLP(P)
+ HRRZS T1
+ IDIVI T1,NWDPM
+ MOVE T2,EVMET(P)
+OPNS3: CAMG R,2-NWDPM(T2)
+ JSP Q,SRTSET
+OPNS3A: CAIG T1,NOCM+1
+ JRST OPNS4
+ SUBI T2,NWDPM
+ SOJA T1,OPNS3
+
+SRTSET: MOVEI J,@-2(Q)
+ CAMN R,(J)
+ JRST SRTS1
+ MOVE C,J
+ MOVE R,(C)
+ MOVE D,2(C)
+ JRST @Q
+
+;EVM5D4: SETOM EVBPMP(P)
+; SKIPE SSSW
+; JRST EVM5DX
+; JRST EVM5D5
+
+SRTS1: CAML D,2(J) ;TAKE MOVE WITH HIGHEST POS IF TIE
+ JRST @Q
+ MOVE C,J
+ MOVE R,(C)
+ MOVE D,2(C)
+ JRST @Q
+
+OPNS4: MOVEI T1,2-NWDPM-NWDPM(T2) ;NEXT LCN THAT WOULD HAVE BEEN COMPARED BY OPNS3
+ HRRZ T2,ESMLP(P)
+ CAIE T1,@OPNS4A+NWPOS-2
+ PTTY [ASCII /SEARCH ERROR!/]
+OPNS4A:REPEAT NOCM,[
+ CAMG R,*NWDPM+2(T2)
+ JSP Q,SRTSET
+]
+]
+OPNSRT:
+
+ JUMPL R,EVM5X
+ SUBI C,2
+ SKIPE T1,ESSTC(P)
+ JRST ESSV1 ;EVALUATE SURPRISE TRY TBL
+ESSV2:
+EVM5DX:
+EVHSH2:
+ESTMP6:
+EPMSX:
+EPMI4: MOVEM C,ESMTP(P) ;C HAS MOVE TO INVESTIGATE
+ SETOM 2(C) ;FLUSH MV PLAUS
+ SKIPGE 3(C)
+ SOS ESNFK(P) ;NUMBER OF "CHECKING" MOVES REMAINING UNINVESTIGATED
+ HRRE T1,3(C)
+ CAMLE T1,[-100]
+ SOS ESNBDR(P) ;# NON BLUNDERS
+ MOVE A,1(C) ;SQ TO MOVE TO
+ CAMN A,ESBPM(P)
+ CLEARM ESBPM(P) ;INV BEST POS MV
+ CAMN A,ESSBPM(P)
+ CLEARM ESSBPM(P)
+ ANDI A,177
+ HLRZ B,1(C) ;PC TO MOVE
+ CLEARM CPCDVL
+ CLEARM CPCMVL
+ JUMPE A,EVM5E1 ;O-O OR O-O-O
+ LDB T1,EVMPB(B)
+ JUMPN T1,EVM5E2 ;SECOND OR MORE MOVE FOR THIS PIECE INVESTIGATED
+ MOVEI T1,1 ;NEW PIECE MOVING
+ DPB T1,EVMPB(B)
+ SOS ESNPM(P)
+EVM5E2: SKIPE D,BOARD(A)
+ JRST EVM5E4
+ CAMN A,GHLOC
+ SKIPL LMGT(B)
+ JRST EVM5E1
+ MOVE D,@EVMT13(I) ;EP CAPT
+EVM5E4: MOVE T1,PDV-PIECE(D)
+ IMUL T1,PINVF-PIECE(D)
+ MOVEM T1,CPCDVL ;DEVEL VALUE FOR PC CAPT
+ MOVEI T1,-PIECE(D) ;ALSO COM PMV
+ ADD T1,ESHPMV(P)
+ SKIPN I
+ SUBI T1,NPCS
+ MOVE T2,-1(T1)
+ IMUL T2,PINVF-PIECE(D)
+ SKIPL T2
+ CAIL T2,10000
+ ERRTTY [ASCIZ /BAD CPCMVL AT EVM5E4/]
+ MOVEM T2,CPCMVL
+EVM5E1: SKIPGE ESPCGM(P)
+ JRST EVPCC ;PCG MODE, A WINNER?
+EVPCC1: SKIPE FCSW
+ JRST EVFC1 ;FORW CUT?
+EVFC2: MOVE T1,[1,,1]
+ ADDM T1,EVNMS(P)
+ MOVE T1,3(C)
+ TLNE T1,BTMPM
+ CLEARM ESTMPT(P) ;HAVE LOOKED AT TEMPO MV
+ TLNE T1,BRPLY
+ CLEARM ESTRPT(P) ;HAVE LOOKED AT REPLY MOVE
+ AOS NMINV
+ HRRZ A,1(C)
+ PUSHJ P,TMOVE
+ JRST EVM4A ;MOVE ILLEGAL
+ MOVE C,ESMTP(P)
+ HRRZ D,5(C) ;PNTR TO THREAT/ MVDST SAVED BLOCK (OR 0)
+ HLRZ T1,EVNMS(P)
+ MOVEM T1,LPPMN ;PASS SEARCH # OF MOVE
+ HRRE R,3(C) ;EXPECTED LOSS
+ SKIPL R
+ MOVEI R,0 ;FOR NOW, LIMIT SUPRISE TO SITUATIONS WHERE WE LOSE STUFF
+ SKIPE I
+ MOVNS R
+ ADD R,ESPCS(P)
+ PUSH P,R ;VALUE IF GET LESS THAN WILL BE SURPRISED
+ PUSH P,BPREV
+ PUSH P,BPREV+1
+ XORI I,1
+ PUSHJ P,LMG0 ;RETURN MAX VAL IN R MIN IN Q
+ MOVE T,[-LLMGPL,,LMGPDL-1]
+ MOVEM J,ESPHM ;RET IN J PNTR TO THREAT/MVDST ENTRY OF HIS MOVE (OR 0)
+ POP P,T1
+ POP P,T2
+ CAMN T1,BPREV+1
+ CAME T2,BPREV
+ ERRTTY 2,[ASCIZ /A B RESTORE LOSSAGE/]
+ LDB T1,[100,,PLYN]
+ CAME T1,I
+ ERRTTY [ASCIZ /I LOSES AT EVMAF1/]
+ XORI I,1
+ POP P,ESAVL ;VALUE HAVE TO GET TO AVOID SURPRISE
+ SKIPN LNSW
+ JRST LNAL1
+ MOVEI T1,0
+ CLEARM LNCP+1
+ MOVE A,[LNCP+1,,LNCP+1+1]
+ BLT A,LNCP+NPC-1
+ SKIPN T2,CVPR
+ JRST LNAL2
+LNAL4: SKIPL 1(T2)
+ JRST LNAL3 ;NOT CAPTURE
+ LDB TT,[MPTK,,1(T2)]
+ SETOM LNCP(TT)
+ MOVE S,PVALUE(TT)
+ SKIPGE PIECE(TT)
+ MOVNS S
+ ADD T1,S
+
+LNAL3: SKIPE T2,(T2)
+ JRST LNAL4
+ MOVE T2,CVPR
+LNAL2: XCT LNT1(I) ;TRANSFER TO LNAL1 ON AHEAD OR EVEN
+ MOVMS S
+ LSH S,-1
+ LDB T1,[MPC,,1(T2)] ;WOULD LIKE TO PREVENT HIS MOVE
+ MOVE T1,PIECEL(T1)
+ HRRZ C,ESMLP(P)
+ MOVE J,(T2)
+LNAL5A: SKIPGE 2(C)
+ JRST LNAL5
+ HRRZ TT,1(C)
+ CAME TT,T1
+ JRST LNAL6
+ MOVEI D,20
+ ADDM D,2(C)
+LNAL6: HLRZ TT,1(C)
+ SKIPL LNCP(TT)
+ JRST LNAL5
+ MOVEI D,20
+ TLNE J,BMTHR+BIDSF
+ MOVE D,S
+ ADDM D,2(C)
+LNAL5: ADDI C,NWDPM
+ CAIL C,EVMET(P)
+ JRST LNAL5A
+LNAL1: CAML R,[-67000] ;SKIP ON WHITE GETTING MATED
+ CAILE Q,67000 ;SKIP ON BLACK NOT GETTING MATED
+ JRST MVD3C ;SOMEBODY GETTING MATED
+DEFINE EVNBSF ABCUT
+ MOVEM R,EPSMX(P)
+ MOVEM Q,EPSMN(P)
+ CAMGE R,EIPSMX(P)
+ MOVEM R,EIPSMX(P)
+ CAMLE Q,EIPSMN(P)
+ MOVEM Q,EIPSMN(P)
+ MOVE C,ESMTP(P)
+ MOVEM C,-5(P)
+ MOVE C,POSHSA ;HS ADR
+ HRRM C,ESMBHA(P)
+ MOVEI C,0
+ SKIPGE ESPCGM(P)
+ MOVSI C,60000
+ PUSHJ P,RECMH
+ MOVE C,CVPR
+ MOVE T2,ESMTP(P)
+ HRRE T1,3(T2)
+ MOVEM T1,ESBEXP(P) ;SAVE WHAT EXPECTATION WAS
+ HLLZ T1,3(T2)
+ TLZ T1,-1-BIDSF-BMTHR
+ SKIPL ESHMV(P)
+ TLO T1,BHFRC
+ IORM T1,(C) ;SET DISCOVERED AND MULT THREAT BITS
+ HLRZ T1,EVNMS(P)
+IFSE ABCUT,, DPB T1,[PUSNM,,(C)]
+IFSN ABCUT,,[
+ TRO T1,ABCUT
+ DPB T1,[PUSNM1,,(C)]
+]
+ EXCH C,-6(P)
+ MOVEM C,CVPR
+ HRRZ C,EVNMS(P)
+ ADDM C,NMRJ
+TERMIN
+
+MVD3: SKIPN WALLP
+ SKIPE MVDS
+ PUSHJ P,MVD1
+ XCT ABTST(I)
+ JRST EVM5C ;A B CUT
+NV2:
+ PUSHJ T,ESA ;SURPRISED, ETC ETC?
+ XCT EBSFTS(I)
+ JRST NV1 ;NOT BEST SO FAR
+ CAMN R,Q
+ JRST EVM6 ;DO SECONDARY SEARCH?
+ESL1: SKIPE FIS
+ XCT ECNTKT(I)
+ JRST NV3
+ SKIPGE ESPCGM(P)
+ SKIPGE ESCNTK(P)
+ JRST NV3
+ AOS NSFSC
+ SETOM ESCNTK(P) ;IF IN PCG MODE, HAVE FOUND MV BETTER THAN PCSATS
+NV3: XCT ABUPT(I)
+ PUSHJ P,BPRVS
+ EVNBSF
+ HLLZS EVNMS(P)
+
+NV1: SKIPE C,CVPR
+ PUSHJ P,LFSRC
+EVM6C: PUSHJ P,UNMOVE
+EVM4A: SETOM ESHMV(P)
+ JRST EVM4
+
+
+EVHSH1: AOS NHFRC
+ MOVE B,LMGD
+ SOJN B,EVHSH5
+ MOVEI B,PILPT
+ SKIPE WALLP
+ SOUT [ASCIZ /HASH FORCE
+/]
+EVHSH5: HRRZ C,ESMLP(P)
+ HRRZ R,EVMET(P)
+EVHSH3: CAMN T1,1(C)
+ JRST EVHSH2
+ ADDI C,NWDPM
+ CAMGE C,R
+ JRST EVHSH3
+ ERRTTY [ASCIZ /CANT FIND HASH FORCE- EVHSH3/]
+
+EVM5D: SKIPLE ESNPM(P) ;REGULAR WIDTH EXHAUSTED
+ JRST EVM5D3 ;NOT ENOUGH PIECES MOVED SO TAKE NEXT MOST PLAUS
+ SKIPG ESNBDR(P)
+ JRST EPMS2 ;NO NON BLUNDERS NOT INVESTIGATED
+ MOVE T1,LMGD
+ CAMG T1,PMSASW
+ JRST EPMS1 ;POOR MAN'S SURPRISE ANAL
+EPMS2: MOVE T1,ESPCS(P)
+ SUB T1,BPREV(I)
+ MOVMS T1
+ CAIL T1,100
+ JRST EPMI3 ;AHEAD OR BEHIND, POSITIONAL MV WONT HELP
+ SKIPN T1,ESBPM(P)
+ SKIPE T1,ESSBPM(P)
+ JRST EPMI2
+EPMI3: SKIPN ESNFK(P) ;YES NOW LOOK ONLY AT INDIVIDUAL FLAGGED MOVES
+ JRST EVM5X
+ HRRZ C,ESMLP(P)
+ HRRZ T1,EVMET(P)
+EVM5D2: CAMN C,T1
+ JRST EVM5X
+ SKIPGE 2(C)
+ JRST EVM5D1 ;ALREADY INVESTIGATED
+ SKIPGE 3(C)
+ JRST EVM5DX
+EVM5D1: ADDI C,NWDPM
+ JRST EVM5D2
+
+
+EPMI2: HRRZ C,ESMLP(P)
+ HRRZ R,EVMET(P)
+EPMI5: CAMN T1,1(C)
+ JRST EPMI4
+ ADDI C,NWDPM
+ CAMGE C,R
+ JRST EPMI5
+ ERRTTY 2,[ASCIZ /CANT FIND POS MV/]
+ JRST EPMI3
+
+EPMS1: XCT EPMST1(I) ;LEADING VALUE AT THIS LVL (TO T1)
+ SKIPN -5(P)
+ MOVE T1,BPREV(I) ;WHAT WE GOT VIA SEARCH
+ SUB T1,ESPCS(P)
+ SKIPE I
+ MOVNS T1 ;NET SHORTFALL
+ SKIPE -5(P)
+ SKIPGE ESBEXP(P)
+ SUB T1,ESBEXP(P) ;EXPECTED DELTA OF BEST MV SO FAR
+ CAMLE T1,[-100]
+ JRST EPMS2 ;HAVE GOT CLOSE TO WHAT EXPECTED
+ MOVNI Q,1
+ HRRZ T2,ESMLP(P)
+ HRRZ R,EVMET(P)
+EPMS3: HRRE ZR,3(T2) ;CAN NOT FIND PREV INV MV SINCE 2(T2)=>-1
+ CAMLE ZR,[-100]
+ JRST EPMS6
+EPMS4: ADDI T2,NWDPM
+ CAMGE T2,R
+ JRST EPMS3
+ JUMPGE Q,EPMSX
+ ERRTTY [ASCIZ /CANT FIND NBLNDR/]
+ JRST EPMS2
+
+EPMS6: CAML Q,2(T2)
+ JRST EPMS4
+ MOVE Q,2(T2)
+ HRRZ C,T2
+ JRST EPMS4
+
+EPMST1: MOVE T1,EPSMX(P)
+ MOVE T1,EPSMN(P)
+
+MVD3C: XCT EVMT14(I) ;TRANSFER TO MVD3A ON US GETTING MATED
+ MOVM T1,@OAVT(I) ;HIM GETTING MATED
+ SUBI T1,70000
+ ADD T1,LMGD
+ MOVNS T1
+ SOJE T1,MVD3D ;MATE IN ONE DISCONTINUE SEARCH
+ MOVE T2,HK1V
+ SUBI T2,-1(T1)
+ CAMLE T2,LMGD2
+ MOVEM T2,LMGD2 ;LOOK ONLY FOR MATE IN FEWER
+ JRST MVD3
+
+MVD3D: CLEARM (P) ;STOP FURTHER SEARCH THIS LEVEL
+ CLEARM ESNPM(P)
+ CLEARM ESNFK(P)
+ JRST MVD3
+
+EVM5X: MOVE R,EPSMX(P)
+ MOVE Q,EPSMN(P)
+ JSP ZR,EVM5 ;SAVE ADR FOR DEBUGGING PURPOSE
+
+MVD3A: AOS (P) ;WE GET MATED DONT COUNT AGAINST WIDTH
+ JRST MVD3
+
+FCT1: CAMGE Q,ESFCV(P)
+ CAMLE R,ESFCV(P)
+
+EVPCC: MOVE T1,3(C)
+ TLNE T1,BMATH
+ JRST EVPCC1 ;INVESTIATE MATE THREAT
+ TLNE T1,BTMPM
+ JRST EVPCC7 ;TEMPO MOVE, INVESTIGATE
+EVPCC8: TLNE T1,BRPLY
+ JRST EVPR1 ;REPLY MOVE
+EVPR2: SKIPGE ESCNTK(P)
+ JRST EVPCC6
+ MOVM T1,BPREV(I)
+ CAIL T1,67000
+ JRST EVPCC1 ;CANT TAKE AND NO NON-VIRTUAL VALUE AVALABLE
+EVPCC6: HRRE T1,ESHEXP(P) ;HIGHEST EXP
+ ADDI T1,100
+ SKIPE I
+ MOVNS T1
+ ADD T1,ESPCS(P) ;NET EXPECTED VAL
+ XCT EVPCCT(I)
+ JRST EVPCC4 ;COULD EASILY DO BETTER THAN NOW
+ MOVEI T1,2
+ CAML T1,(P)
+ JRST EVPCC4
+ SETOM ESFCFL(P) ;HAVE VLU AS GOOD AS CAN BE EXPECTED, SO LOOK AT MAX OF 2 MORE MVS
+ MOVEM T1,(P)
+EVPCC4: HRRE T1,3(C)
+ ADDI T1,100
+ SKIPE I
+ MOVNS T1
+ ADD T1,ESPCS(P)
+ XCT EVPCT2(I) ;COMPARE TO NEEDED FOR BEST SO FAR
+ JRST EVPCC5 ;EXPECTED VAL NOT GOOD ENUF
+ MOVE T1,ESPCS(P)
+ XCT EVPCT3(I)
+ JRST EVPCC1 ;PCSATS GOOD ENUF SO MOVE DOESNT HAVE TO HAVE EXTRA VIRTUE
+ ;(EST IS GOOD ENUF)
+ SKIPL ESCNTK(P) ;IN PCG MODE
+ JRST EVPCC2 ;CANT TAKE
+ LDB T1,[PCGMCL,,3(C)]
+ CAIL T1,2
+ JRST EVPCC1
+EVPCC5: SETOM ESFCFL(P)
+ JRST EVM4A ;FLS MV
+
+EVPCC2: LDB T1,[PCGMCL,,3(C)]
+ JUMPN T1,EVPCC1
+ JRST EVPCC5 ;MV DOESNT DO ANYTHING
+
+EVPCC7: SKIPN ESTMPT(P)
+ JRST EVPCC8
+ JRST EVPCC1 ;INVESTIGATE FIRST TEMPO MV
+
+EVPR1: SKIPN ESTRPT(P)
+ JRST EVPR2
+ JRST EVPCC1 ;INVESTIGATE FIRST REPLY MOVE
+
+EVPCCT: CAMLE T1,BPREV
+ CAMGE T1,BPREV+1
+
+EVPCT2: CAMG T1,BPREV
+ CAML T1,BPREV+1
+
+EVPCT3: CAMLE T1,BPREV
+ CAMGE T1,BPREV+1
+
+ESTMP1: SKIPE -5(P) ;MAYBE FORCE TEMPO MV TO BE NEXT LOOKED AT
+ JRST ESTMP3 ;HAVE MOVE
+ SKIPL ESFCFL(P)
+ JRST ESTMP2 ;DONT HACK FIRST MV
+ESTMP3: MOVE T1,ESPCS(P) ;WILL TEMPO MV HELP
+ SUB T1,BPREV(I)
+ MOVMS T1
+ CAIL T1,100
+ JRST ESTMP2 ;EITHER AHEAD OR BEHIND BY LARGE AMT LOSES
+ MOVNI Q,1 ;FIND LARGEST TEMPO MV
+ HRRZ T2,ESMLP(P)
+ HRRZ R,EVMET(P)
+ESTMP4: MOVE T1,3(T2) ;CANT FIND PREV INV MV SINCE 2(T2)=-1
+ TLNE T1,BTMPM
+ JRST ESTMP5
+ESTMP7: ADDI T2,NWDPM
+ CAMGE T2,R
+ JRST ESTMP4
+ JUMPGE Q,ESTMP6
+ ERRTTY [ASCIZ /CANT FIND TEMPO MV/]
+ JRST ESTMP2
+
+ESTMP5: CAML Q,2(T2)
+ JRST ESTMP7
+ MOVE Q,2(T2)
+ HRRZ C,T2
+ JRST ESTMP7
+
+EVM6: MOVE T1,LMGD
+ CAMLE T1,INVD
+ JRST ESL1
+ CAML R,[-67000]
+ CAIGE Q,67000
+ JRST ESL1
+ PUSH P,Q ;-10
+ESLPQ=-10
+ PUSH P,[0] ;-7 FREE
+ PUSH P,R ;SAVE PREV SCORE -6
+ESLPR=-6
+ PUSH P,LMGD2 ;DO SECONDARY SEARCH -5
+ PUSH P,CVPR ;-4
+ PUSH P,PLYN ;-3
+ PUSH P,I ;-2
+ PUSH P,[0] ;FREE
+ MOVE A,CVPR
+ PUSHJ P,PLLN ;PLAY OUT ALL PLAUS MOVE GEN MOVES
+ MOVE A,HK1V
+ SUB A,IVVDD
+ MOVEM A,LMGD2
+ PUSHJ P,.CAT
+ LDB I,[100,,PLYN]
+ CLEARM CVPR
+ AOS NSLA
+ CLEARM CPCDVL ;NOT RIGHT, BUT AT LEAST FOR REPRODUCABILITY
+ CLEARM CPCMVL
+ PUSHJ P,LMG
+ POP P,T1
+ MOVE I,-2+2(P)
+ SKIPN WALLP
+ SKIPE MVDS
+ PUSHJ P,MVD1A
+ XCT ESLT1(I)
+ JRST ESL3A1
+ MOVE R,ESLPR+2(P) ;DONT ALLOW VALUE TO IMPROVE RESTORE PREV VALUE
+ MOVE Q,ESLPQ+2(P) ;+2 S BECAUSE TWO PUSHES HAVENT BEEN DONE YET
+ESL3A1: PUSH P,R ;-1
+ PUSH P,A ;0
+
+ESL3: MOVE A,-3(P)
+ CAMN A,PLYN
+ JRST ESL2
+ PUSHJ P,UNMOVE
+ JRST ESL3
+
+
+ESL2: MOVE T1,-4(P)
+ JUMPE T1,ESL6
+ HRRZ T2,(T1)
+ESL5: JUMPE T2,ESL4 ;END
+ SKIPGE (T2)
+ JRST ESL4 ;OR BY PCG
+ MOVE T1,T2
+ HRRZ T2,(T2)
+ JRST ESL5
+
+ESL4: MOVE C,CVPR
+ EXCH C,(T1)
+ SKIPE C
+ PUSHJ P,LFSRC ;PATCH IN NEW PRINC VAR
+ESL7: MOVE R,ESLPR(P)
+ MOVE Q,ESLPQ(P)
+ MOVE I,-2(P)
+ MOVE T1,-4(P)
+ MOVEM T1,CVPR
+ MOVE T1,-5(P)
+ MOVEM T1,LMGD2
+ SUB P,[10,,10]
+ XCT EVMT9B(I)
+ AOS (P) ;WE GOT MATED
+ XCT EBSFTS(I)
+ JRST NV1
+ JRST ESL1
+
+ESL6: EXCH T1,CVPR
+ MOVEM T1,-4(P)
+ JRST ESL7
+
+EVFC1: MOVE T1,3(C)
+ TLNE T1,BMATH
+ JRST EVFC2 ;DONT FORW CUT MATE THREAT
+ MOVN T1,LMGD2
+ ADD T1,HK1V
+ SOS T1
+ CAILE T1,1
+ JRST EVFC2 ;NOT WITHIN TWO PLIES OF BOTTOM
+ AOSGE T1
+ MOVEI T1,0
+ SKIPE ESINC(P)
+ JRST EVFC6 ;IN CHECK
+EVFC6A: MOVE T2,BPREV(I) ;OUR B.S.F. (AT SOME LVL)
+ SUB T2,ESPCS(P) ;PCS AS THEY STAND NOW
+ HRRE TT,3(C) ;EXPECTATION (DELTA)
+ MOVE ZR,TT
+ CAMGE ZR,[-400]
+ MOVNI ZR,400 ;MOBY -
+ ASH ZR,-2 ;1/4 EXPECTATION DELTA
+ SKIPGE TT
+ ADD TT,ZR
+ SKIPE I ;EXPECTED DELTA OR 5/4 IF -
+ MOVNS TT
+ SUBM T2,TT ;GET - CHG
+ SKIPN I
+ MOVNS TT
+ CAMGE TT,FCBGT1(T1) ;NET EXPECTATION RELATIVE TO NEED FOR B.S.F.
+ JRST EVFC5 ;MOVE NOT GOOD ENUF- CUT OFF
+ XCT EVFCT(I) ;XFER TO EVFC3 ON PCS BETTER THAN B.S.F. NOW
+EVFC4: MOVMS T2 ;T2 AMT BETTER NEED
+ MOVE D,4(C) ;POSITIONALITY
+ ASH D,@STDVL1 ;CONVERT TO POINT VALUE
+ SUB T2,D ;POS TERM
+ SUB T2,6(C) ;MAX GAIN OF MV
+ SUB T2,FCBGT(T1) ;ALLOW BUGGER FACTOR
+ JUMPLE T2,EVFC2
+EVFC5: SETOM ESFCFL(P) ;FLUSH MOVE ON F.C.O.
+ AOS NFCO
+ JRST EVM4A
+
+EVFC3: MOVM ZR,T2 ;AMT BETTER BY
+ HRRE D,3(C) ;EXPECTED GAIN
+ ADD ZR,D
+ JUMPGE ZR,EVFC2
+ JRST EVFC4 ;FLS MV UNLESS THREATENS TO OVERCOME
+
+EVFC6: CAIN T1,2
+ JRST EVFC2 ;DONT FC IN CHECK 2 PLIES FROM BOTTOM
+ MOVE D,3(C)
+ TLNE D,BSOS
+ JRST EVFC2 ;OR IF HAD STRONG OUTSTANDING THREATS
+ JRST EVFC6A
+
+FCBGT: 20. ;ALLOWANCE BEST POS UNDER B.S.F. 0 PLY LEFT
+ 20. ;1
+ 120. ;2
+
+FCBGT1: -100 ;ALLOWANCE COMPARED WITH "EXPECTED GAIN"
+ -100
+ -300
+
+EVFCT: JUMPLE T2,EVFC3 ;XFER ON PCS BETTER THAN BSF NOW
+ JUMPGE T2,EVFC3
+
+BPRVS: XCT EVMT9A(I)
+ MOVE ZR,BPREV
+ CAMLE ZR,BPREV+1
+ PTTY [ASCIZ /A-B OVERLAP/]
+ POPJ P,
+
+; MMSAVAC
+; PTTY [ASCII /ALPHA BETA LOSSAGE!/]
+; MOVEI B,TYO
+; SKIPE WALLP
+; MOVEI B,PILPT
+; MOVE R,GAMP
+; SUB R,LMGD
+;BPRV2: MOVE C,1(R)
+; PUSHJ P,EPMOVE
+; PUSHJ P,MCRR
+; PUSHJ P,DSPACE
+; AOS R
+; CAME R,GAMP
+; JRST BPRV2
+; MOVEI A,"!
+; PUSHJ P,(B)
+; PUSHJ P,DSPACE
+; MOVE R,CVPR
+; PUSHJ P,TYPLNE
+; PUSHJ P,DCRR
+; MMRSAC
+; POPJ P,
+
+
+ESLT1: CAMG Q,ESLPQ+2(P)
+ CAML R,ESLPR+2(P)
+
+
+ESSV1: MMSAVAC ;APPLY SURPRISE TRY TBL
+ESSV1A: MOVE T1,ESSTC(P)
+ MOVE T2,ESSTP(P) ;C HAS PNTR TO MOVE WOULD OTHERWISE LOOK AT
+ESSV3: CLEARM 1(T2) ;# MVS THAT SATISFY, TRIED AND UN
+ SETOM 2(T2) ;PNTR TO BEST MV SATISFIES OR -1
+ ADDI T2,QTNWE
+ SOJG T1,ESSV3
+ HRRZ T1,ESMLP(P) ;LOOP THRU MVS
+ HRRZ Q,EVMET(P)
+ SETOM ESSVMV
+ESSV4: MOVEI R,0 ;ADDTL PLAUS DUE TO S. T. SATISFIED
+ MOVE TT,ESSTC(P)
+ MOVE J,ESSTP(P)
+ESSV5: SKIPGE (J) ;SKIP ON NOT NEGATED
+ JRST ESSV5L
+ LDB S,[QTCD,,(J)]
+ LDB D,[QTVAL,,(J)]
+ LDB B,[QARG,,(J)]
+ PUSHJ T,@ESSVD(S)
+ JRST ESSV5L ;DOESNT SATISFY
+ JRST ESSV7 ;DOES, BUT ALREADY CREDITED
+ SKIPGE 2(T1) ;SATISFIES AND NOT PREV CREDITED..
+ JRST ESSV7 ;MV HAS BEEN INVESTIGATED
+ HRRE ZR,3(T1) ;EXPT OF MV
+ HLRE S,4(J) ;EXPT OF MV THAT KEYED S.T.
+ CAMG S,ZR
+ JRST ESSV5A
+ HRRM S,3(T1) ;AVOID F.C. AND PCG CUTS
+ESSV5A: HRRE ZR,6(T1) ;MAX POSS
+ HRRE S,4(J)
+ CAMG S,ZR
+ JRST ESSV5B
+ HRRM S,6(T1)
+ESSV5B: ADD R,D
+ HLRE B,2(J)
+ JUMPL B,ESSV5C ;NO PREV MV SATISFING THIS S.T. ENTRY
+ CAMG B,2(T1)
+ JRST ESSV5D
+ESSV5C: MOVE B,T1 ;THIS MV MOST PLAUS THAT DOES (SO FAR)
+ HRL B,2(T1)
+ MOVEM B,2(J)
+ESSV5D:
+ESSV7: SKIPGE 2(T1)
+ JRST ESSV7A ;MOVE TRIED
+ MOVSI B,1 ;SATISFIES, INCR APPRO COUNT
+ ADDM B,1(J) ;INCR COUNT OF MVS THAT SATISFY, TRIED AND UN
+ESSV5L: ADDI J,QTNWE
+ SOJG TT,ESSV5
+ JUMPLE R,ESSV8 ;S.T. DIDNT HELP
+ SKIPGE B,2(T1)
+ JRST ESSV8 ;HAS BEEN TRIED
+ MOVE ZR,R
+ ADD ZR,B
+ SKIPGE ESSVMV
+ JRST ESSV8A ;NO PREV MV HELPED
+ CAMGE ZR,ESSVNP
+ JRST ESSV8 ;NOT AS GOOD
+ESSV8A: MOVEM T1,ESSVMV
+ MOVEM R,ESSVSP
+ MOVEM B,ESSVBP
+ MOVEM ZR,ESSVNP
+ESSV8: ADDI T1,NWDPM
+ CAMGE T1,Q
+ JRST ESSV4
+ESSVX: SKIPGE T1,ESSVMV
+ JRST ESSVX1 ;NOTHING HELPS
+ HLRZ T2,1(T1)
+ JUMPE T2,ESSVX2 ;O-O OR O-O-O
+ HRRZ T1,1(T1)
+ ANDI T1,377
+ RQ S.T. MV *P!T2 TO *S!T1,JFCL
+ESSVX5:
+ESSVX1: MMRSAC
+ SKIPL ESSVMV
+ CAML R,ESSVNP
+ JRST ESSV2
+ RQ TAKE S.T. MV,MOVE C,ESSVMV
+ MOVE B,LMGD
+ SOJN B,ESSV2
+ SKIPN WALLP
+ JRST ESSV2
+ HRROI B,PILPT
+ SOUT [ASCIZ /TAKING SURPRISE TRY MV
+/]
+ JRST ESSV2
+
+ESSVX2: MOVE T2,1(T1)
+ CAIN T2,100000
+ JRST ESSVX3
+ CAIN T2,200000
+ JRST ESSVX4
+ ERRTTY [ASCIZ /CANT FIGURE OUT MV AT ESSVX2/]
+
+ESSVX3: RQ ST MV O-O, JRST ESSVX5
+ESSVX4: RQ ST MV O-O-O, JRST ESSVX5
+
+ESSV7A: MOVEI B,1
+ ADDB B,1(J)
+ TRNN B,-2
+ JRST ESSV5L
+ RQ NEGATE S.T. ENTRY, MOVSI B,(SETZ)
+ IORM B,(J)
+ JRST ESSV1A ;RESTART WORLD
+
+
+ESSVD: [JRST 4,.] ;ERROR
+ [JRST 4,.] ;CAPT PC
+ [JRST 4,.] ;DEF SQ
+ JRST ESSMP ;MV PC
+
+
+ESSMP: HLRZ ZR,1(T1)
+ CAME ZR,B ;SKIP ON MVING RIGHT PC
+ JRST ESSMP1
+ HRRZ S,5(T1) ;ALREADY CREDITED? (SEARCH MVDST)
+ HRRZ B,(S)
+ HLRZ W,(S)
+ ADDI W,NWOSMV(S)
+ JUMPE B,ESSMP2
+ESSMP3: LDB ZR,[MVDCD,,(W)]
+ CAIN ZR,MVDMTP
+ JRST ESSMP4
+ESSMP5: ADDI W,NWMVE
+ SUBI B,NWMVE
+ JUMPG B,ESSMP3
+ESSMP2:
+POPTJ2: AOS (T)
+POPTJ1: AOS (T)
+ POPJ T,
+
+ESSMP4: SUB D,1(W) ;THIS AMT CREDITED
+ JUMPLE D,POPTJ1
+ JRST ESSMP2
+
+ESSMP1: SKIPL RPIECE(B)
+ POPJ T,
+ MOVE ZR,1(T1)
+ CAIE ZR,100000
+ CAIN ZR,200000
+ JRST POPTJ2 ;O-O-(O) MVS K
+ POPJ T,
+
+ESSVMV: 0 ;BEST MV SO FAR
+ESSVBP: 0 ;BASIC PLAUS OF MV
+ESSVSP: 0 ;SURPRISE TRY PLAUS
+ESSVNP: 0 ;SUM OF ABV
+ESA: SKIPL ESSASW(P)
+ JRST ESA1A ;DIDN'T STORE STUFF
+ MMSAVAC
+ SKIPE C,CVPR
+ XCT ESATT1(I)
+ JRST ESA1 ;NOT SURPRISED OR NO INFO RETURNED
+ CLEARM ESPCHT
+ SKIPE SATRC
+ JRST ESAT1
+ESAT2: SKIPN TT,ESNHTR(P) ;WAS HIS MOVE KNOWN AS A THREAT?
+ JRST ESA5 ;NO, HE HAD NONE
+ MOVE S,ESHTRP(P) ;PNTR TO HIS THREATS
+ESA4: LDB T2,[THRTP,,1(S)] ;PC MAKING THREAT
+ LDB ZR,[MPC,,1(C)] ;PC HE MOVED
+ CAME ZR,T2
+ JRST ESA3
+ LDB T2,[THRTS,,1(S)] ;SQUARE THREAT IS TO
+ LDB ZR,[MPTO,,1(C)] ;SQUARE HE MOVED TO
+ CAMN ZR,T2
+ RQ HIS MV A THREAT,JRST ESTH1
+ESA3: ADDI S,NWTHE
+ SOJG TT,ESA4
+ESA5: MOVE J,ESMTP(P) ;DID MOVE HAVE KNOWN ACTIVE NEGATIVE PROPERTIES?
+ HRRE ZR,3(J)
+ MOVEM ZR,ESAEV
+ HRRE ZR,6(J)
+ MOVEM ZR,ESAMV
+ HLRZ ZR,1(J) ;PC WE MOVED
+ MOVEM ZR,PCMVED
+ SKIPL 1(C)
+ JRST ESANC1 ;HIS MOVE NOT CAPT
+ LDB T2,[MPTK,,1(C)] ;PC HE TOOK
+ CAMN ZR,T2
+ RQ HE TOOK PC WE MVD,JRST ESA1 ;HE TOOK PC WE MOVED
+ MOVEM T2,ESPCHT ;PC HE TOOK
+ESA5Z: MOVE T2,3(J)
+ SKIPGE 1(C)
+ TLNN T2,BNEGF
+ JRST ESA6A ;NO
+ HRRZ S,5(J) ;PNTR TO THREAT/MVDST TBL
+ HRRZ T2,(S) ;WDS IN MVDST SECT
+ HLRZ D,(S) ;WDS IN THREAT SECT
+ ADDI D,NWOSMV(S) ;SPACE PAST THREAT SECT
+ JUMPE T2,ESA6A ;
+ LDB T1,[MPTO,,1(C)] ;SQ HE MOVED TO
+ESA6B: LDB A,[MVDCD,,(D)] ;CANT BE CANCELLED SINCE CANCELLED ENTRIES NOT XFERRED
+ CAIN A,MVDBDF
+ JRST ESA6C
+ CAIN A,MVDABN
+ JRST ESA6D
+ CAIN A,MVDHA
+ JRST ESA6E
+ CAIN A,MVDRPN
+ JRST ESA6F
+ESA6G: ADDI D,NWMVE
+ SUBI T2,NWMVE
+ JUMPG T2,ESA6B
+ ;KNOWN NEG FACTORS DONT SEEM TO ACCOUNT FOR LOSSAGE
+ESA6A: RQ SURPRISED,AOS NSPRS
+ SKIPN J,ESPHM
+ RQ MVDST PNTR NOT RETURNED,JRST ESA1 ;DIDNT COMPUTE STUFF AT LOWER LVL
+ HRRZ T2,(J)
+ HLRZ D,(J)
+ ADDI D,NWOSMV(J)
+ JUMPE T2,ESA5C ;NO MVDST?
+ SETOM HPATBP ;PNTR TO HIS PC ATTACKS TBL
+ CLEARM HAPLF ;HE ATTACKS PC LOST
+ CLEARM HPAPC ;# OF ATTS WITH + VALUES TO HIM
+ESA5D: LDB A,[MVDCD,,(D)] ;TRY TO FIND OUT WHY HIS MOVE WAS SO GOOD
+
+ CAIN A,MVDAT
+ JRST ESVA1 ;ATTACK
+ JFCL
+ESA5E: ADDI D,NWMVE
+ SUBI T2,NWMVE
+ JUMPG T2,ESA5D
+ MOVE T2,HPAPC
+ CAIL T2,2
+ JRST ESMA1 ;MULT ATT
+ JFCL
+ESA5C: RQ UNABLE TO DETERMINE WHY HIS MV GOOD, JRST ESA1
+
+ESA2: MOVE T1,(C)
+ TLNE T1,BMTHR
+ JRST ESA5B ;HIS MOVE WAS MULT THREAT
+
+
+ESA1: MMRSAC
+ESA1A: POPJ T,
+
+ESA6C: ;BLOCKED DEFENCE
+ LDB ZR,[MVDSQ,,(D)] ;SQ OUR PC LEFT UNDEFENDED ON
+ CAMN ZR,T1
+ RQ HE TOOK PC WE BLOCKED DEF OF AT *S!T1,JRST ESA1
+ JRST ESA6G
+
+ESA6D: ;BROKE CONSTRAINT
+ LDB ZR,[MVDSQ,,(D)]
+ CAMN ZR,T1
+ RQ HE TOOK PC WE BROKE CONSTRAINT TO AT *S!T1,JRST ESA1
+ JRST ESA6G
+
+ESA6E: ;DISCOVERED ATTACK BY HIM
+ LDB ZR,[MVDSQ,,(D)]
+ CAMN ZR,T1
+ RQ HE TOOK PC WE DISCOVERED HIS ATT ON,JRST ESA1
+ JRST ESA6G
+
+ESA6F: ;RELEASED PIN ON HIM
+ LDB ZR,[MPC,,1(C)] ;PC HE MOVED
+ LDB T,[MVDPC,,(D)]
+ CAMN T,ZR
+ RQ HE MOVED *P!T WHICH WE UNPINNED,JRST ESA1
+ JRST ESA6G
+
+ESA5B: ;HIS MV A MULT THREAT
+ RQ HIS MV MULT THREAT,JRST ESA1
+
+ESTH1: LDB ZR,[THRCD,,1(S)]
+ JUMPN ZR,ESA1 ;IT WAS NOT A CAPT THREAT
+ SKIPGE 1(C)
+ JRST ESA1
+ RQ BUT HIS MV NO CAPT,JRST ESA3
+
+ESMA1: RQ HIS MV HAS MULT POS ATTS,MOVE T1,HPATBP ;GENERATE S. T. ENTRIES TO MOVE THESE GUYS ..
+ESMA2: SKIPN A,HPATV(T1)
+ JRST ESMA3
+ HRRZ T2,HPATB(T1)
+ CAMN T2,PCMVED
+ JRST ESMA3
+ DPB T2,[QARG,,A]
+ MOVEI T2,3
+ DPB T2,[QTCD,,A]
+ PUSH T,T1
+ PUSHJ T,QTENT
+ POP T,T1
+ESMA3: SOJGE T1,ESMA2
+ JRST ESA1
+
+ESVA1: LDB Q,[MVDPC,,(D)] ;FOUND HIS MV ATTS
+ JUMPE Q,ESA5E
+ CAMN Q,ESPCHT
+ SETOM HAPLF
+ AOS S,HPATBP
+ MOVEM Q,HPATB(S)
+ LDB A,[MVDPC2,,(D)]
+ LDB ZR,[MVDDIS,,(D)]
+ SKIPE ZR
+ TRO A,400000
+ HRLM A,HPATB(S)
+ SKIPLE TT,1(D)
+ AOS HPAPC
+ ANDI A,377
+ RQ HIS MV *P!A ATTS *P!Q VAL *U!TT,MOVEM TT,HPATV(S)
+ JRST ESA5E
+
+ESAT1: MOVE J,ESMTP(P)
+ HLRZ T1,1(J)
+ HRRZ T2,1(J)
+ ANDI T2,377
+ LDB Q,[MPC,,1(C)]
+ LDB TT,[MPTO,,1(C)]
+RQ SURPRISED AT LVL *U!LMGD MVD *P!T1 TO *S!T2 - HE PLAYED *P!Q TO *S!TT, JRST ESAT2
+
+ESATT1: CAML R,ESAVL ;SKIP ON SURPRISED
+ CAMG Q,ESAVL
+
+ESANC3: SKIPA TT,(TT)
+ESANC1: MOVE TT,(C)
+ HRRZS TT
+ JUMPE TT,ESANC2
+ HRRZ TT,(TT)
+ JUMPE TT,ESANC2
+ SKIPL 1(TT)
+ JRST ESANC3
+ LDB T2,[MPTK,,1(TT)]
+ RQ HE EVENTUALLY TAKES *P!T2, MOVEM T2,ESPCHT
+ JRST ESA6A
+
+ESANC2: RQ UNABLE TO FIND PC HE TOOK,JRST ESA1
+
+
+HPATBP: -1 ;PNTR TO HPATB OR -1
+HPAPC: 0 ;# OF HIS ATTS WITH + VALS
+HAPLF: 0 ;-1 => HE ATTS PC WE LOST
+ESAEV: 0 ;EXPECTED VAL OF MV SURPRISED ON
+ESAMV: 0 ;MAX VAL
+PCMVED: 0 ;PC WE MOVED
+
+LHPATB==20
+HPATB: BLOCK LHPATB ;OUR PCS WHICH HIS MV ATTACKED (RH) HIS PC (LH) 4.9 DISCOV
+HPATV: BLOCK LHPATB ;VALUES OF THESE ATTS TO HIM
+
+
+QTENT: SKIPN T2,ESSTC(P) ;MAKE ENTRY IN SURPRISE TRY TBL
+ JRST QTENT1
+ HLLZ TT,A ;LOOK FOR PREV THERE (ENTRY IN A)
+ MOVE C,ESSTP(P)
+QTENT2: HLLZ ZR,1(C)
+ CAMN ZR,TT
+ JRST QTENT3 ;FOUND IDENT ENTRY
+ ADDI C,QTNWE
+ SOJG T2,QTENT2
+QTENT1: MOVEI T1,QTNWE
+ ADDB T1,SAFSP
+ PUSHJ P,CRSIZC
+ MOVE T1,SAFSP
+ MOVEM A,-QTNWE(T1)
+REPEAT QTNWE-1-1, CLEARM 1-QTNWE+.RPCNT(T1)
+ MOVE T2,ESAMV
+ HRL T2,ESAEV
+ MOVEM T2,4-QTNWE(T1)
+ AOS ESSTC(P)
+ POPJ T,
+
+QTENT3: HRRZ TT,1(C) ;FOUND IN TABLE, MAXIFY VARIOUS VALS
+ CAIGE TT,(A)
+ HRRM A,1(C) ;MAX BASIC VALUE
+ HLRE TT,5(C)
+ CAMGE TT,ESAEV
+ MOVE TT,ESAEV
+ HRLM TT,5(C)
+ HRRE TT,5(C)
+ CAMGE TT,ESAMV
+ MOVE TT,ESAMV
+ HRRM TT,5(C)
+ AOS 4(C) ;RECORED ENTERED ANOTHER TIME
+ POPJ T,
+
+EVM5C:
+IFN KILLH,[
+ SKIPN AKHS
+ JRST EVM5CK
+ MOVE S,LMGD
+ MOVE C,ESMTP(P)
+ MOVE D,1(C)
+ SETCMB T1,ABFTC(S)
+ XCT EVMT51(T1)
+ SETCMM T1
+ XCT EVMT52(T1)
+ ;RECORD AB FL FOR POSSIBLE USE DIRECTING^
+EVM5CK: ;FUTURE SEARCHES
+]
+;DROPS THRU
+
+EVM5C1: AOS NABF ;# A-B FLUSHES
+ EVNBSF 100
+ SKIPE C,CVPR
+ PUSHJ P,LFSRC
+ PUSHJ P,UNMOVE
+ MOVE R,EPSMX(P)
+ MOVE Q,EPSMN(P)
+ XCT ABVLI(I)
+
+NEV5P==7 ;NUMBER POPS BETWEEN EVM5 AND EVM5B
+
+EVM5: MOVE T1,ESLD2(P)
+ MOVEM T1,LMGD2
+ MOVE T1,ESPMN(P)
+ MOVEM T1,LPPMN ;PLAUS # AT PREV LVL
+ SKIPGE T1,ESFCFL(P) ;FORW CUTS?
+ JRST EV5FC1 ;YES
+EV5FC2: MOVE TT,ESPCGM(P) ;PCG MODE SW
+ SKIPL ESCNMV(P)
+ MOVEI TT,0 ;NO MVS
+ SUB P,[1,,1] ;0
+ POP P,LGLMST ;-1
+ POP P,I ;-2
+ SUB P,[2,,2] ;-3,-4
+ POP P,T2 ;-5
+ POP P,CVPR
+ JUMPE T2,EVM5A ;NO LGL MOVES
+ HRRZ J,5(T2) ;PICK UP PNTR TO MVDST SAVE BLOCK (OR 0)
+EVM5B: MOVE D,ESMHA+NEV5P(P) ;HASH ADR OF CURRENT POS
+ HRRZ T2,ESMBHA+NEV5P(P) ;HASH ADR OF PRINC VAR POS
+ MOVEI TT,0 ;DEFAULT HPVMGI
+ SKIPGE ESPCGM+NEV5P(P)
+ MOVEI TT,3 ;PCG MODE
+
+
+EVMX: JUMPL D,EVM5B2 ;DESIRED PUSH DOWN LVL IN LGLMST
+ SKIPGE T1,NHSW ;HASH ADR OF CURRENT POS IN D
+ JRST EVM5B2 ;HASH ADR OF BEST MV IN T2
+ JUMPE T1,EVM5F1 ;MAX IN R, MIN IN Q PRINC VAR IN CVPR
+ LDB T1,[410300,,HSTBV(D)] ;PNTR TO MVDST SAVE BLOCK IN J (OR 0)
+ CAIE T1,4 ;DEFAULT HPMVGI (IF NO MOVE) IN TT
+ JRST EVM5B2
+ MOVEI T1,0
+ DPB T1,[410300,,HSTBV(D)]
+ MOVEM Q,HSTBVV(D)
+ HRLM R,HSTBVV(D)
+ MOVE C,CVPR
+ MOVE A,LPPMN
+ DPB A,[HPRMN,,HSTBV(D)] ;STORE MOVE # THAT LEAD HERE FROM PREV LVL
+ JUMPE C,EVM5B3
+ MOVE C,1(C) ;MOVE BEING RETURNED
+ LDB A,[300,,C]
+ DPB A,[HSTPRN,,T2]
+ LDB A,[MPTO,,C]
+ LDB B,[MPO,,C]
+ DPB B,[HSTPON,,T2]
+ DPB A,[HSTSQN,,T2]
+ MOVEM T2,HSTBL(D)
+ LDB A,[BPTHDS,,@CVPR] ;PICK UP BMTHR AND BIDSF
+ DPB A,[HRBTS,,HSTBV(D)]
+ LDB A,[BHFRCB,,@CVPR]
+ DPB A,[HHFRCB,,HSTBV(D)]
+ LDB A,[PUSNM1,,@CVPR]
+ DPB A,[HPUSNM,,HSTBV(D)]
+ LDB A,[PVMGI,,@CVPR]
+ DPB A,[HPVMGI,,HSTBV(D)]
+ ANDI T2,-1
+ CAIN T2,-1
+ JRST EVM5B2
+ LDB T1,[410300,,HSTBV(T2)]
+ CAIE T1,4
+ CAIN T1,3
+ JRST EVCV2 ;VALUE BASED ON MATCH WITH GAME OR PREV SEARCH
+ ;SET BIT TO AVOID LOOP WHEN TRYING TO RECONSTRUCT PRINC VAR
+
+
+;DROPS THRU;DROPS IN
+EVM5B2: MOVEM R,POSMAX
+ MOVEM Q,POSMIN
+ MOVEM D,POSHSA
+
+EVM5B1: CAIGE Q,70000
+ CAMG R,[-70000]
+ ERRTTY [ASCIZ /LIMIT CHECK AT EVM5B1/]
+ CAMG R,EVMST+1
+ CAMGE Q,EVMST
+ JRST .+2
+ CAMLE Q,R
+ ERRTTY [ASCIZ /BAD VAL AT EVM5B1/]
+ LDB I,[100,,PLYN]
+ MOVE T1,BPREV(I) ;SAVE FOR DEBUGGING PURPOSE
+ EXCH P,LGLMST ;SAVE OLD FOR DEBUGGING IF HIT ERROR BELOW
+ POP P,BPREV(I)
+ POP P,PBKSF
+ POP P,PWKSF
+ POP P,CTMLVB
+ POP P,CTMLVW
+ POP P,CTMLVN
+ POP P,CTVLVB
+ POP P,CTVLVW
+ POP P,CTVLVN
+ POP P,BTDLVL
+ POP P,WTDLVL
+ POP P,PDVLV
+ CAMGE Q,BPREV+1
+ CAMG R,BPREV
+ JRST .+3
+ CAME R,Q
+ ERRTTY [ASCIZ /RANGE CHECK AT EVM5B3/]
+ MOVE A,SABEG
+ MOVEM A,SAFSP
+ POP P,SABEG
+ SOS LMGD2
+ SOS S,LMGD
+IFN KILLH,SETZM ABFTB+2(S) ;CLEAR ONLY ABFTB FOR RANDOMLY LOWER LEVEL
+ POPJ P,
+
+
+EVM5B3: DPB TT,[HPVMGI,,HSTBV(D)] ;NOT RETURNING MV, STORE DEFAULT GEN INDEX
+ JRST EVM5B2
+
+EVCV2: MOVSI A,40000 ;AVOID LOOP IN HASH TBL
+ IORM A,HSTBV(D)
+ JRST EVM5B2
+
+EVM5F1: CLEARM HSTB(D) ;NHSW = 0
+ MOVNI D,1
+ AOS HASHS
+ JRST EVM5B2
+
+EVM5A: MOVEI J,0 ;NO PNTR TO SAVE BLOCK
+ JUMPL T1,EVM5A2 ;HAVE BEEN FORW CUTS OR PCG MODE DET
+ JUMPL TT,EVM5A2 ;IN PCG MODE AND HAD LGL MVS
+ MOVE A,@OKINGT(I)
+ SKIPN @LMGST+1(I)
+ JRST EVM5A1 ;STALEMATE
+ MOVE R,EVMT3(I) ;CHECKMATE
+ XCT EVMT4(I)
+ SKIPA Q,R
+EVM5A1: CLEARB R,Q
+ JRST EVM5B
+
+EVM5A2: XCT FCTV1(I)
+ XCT FCTV(I)
+ JRST EVM5B
+
+
+EVMT4: ADD R,LMGD
+ SUB R,LMGD
+
+ 100000
+EVMST: -100000
+ 100000
+
+EVMT3: -70000
+ 70000
+
+FCTV: MOVNI Q,77777
+ MOVEI R,77777
+
+FCTV1: CAMN Q,STVT1+1
+ CAMN R,STVT1
+
+IFN KILLH,[
+ CAMN D,ABFTA(S)
+EVMT51: CAMN D,ABFTB(S)
+
+ MOVEM D,ABFTA(S)
+EVMT52: MOVEM D,ABFTB(S)
+]
+
+EVMT9A: MOVEM Q,BPREV ;UPDATE A,B
+ MOVEM R,BPREV+1
+
+EVMT9B: CAMGE Q,[-67000] ;SKIP ON US NOT GETTING MATED
+ CAILE R,67000
+
+EVMT13: BOARD-BW(A)
+ BOARD+BW(A)
+
+EVMT14: JUMPL R,MVD3A
+ JUMPG Q,MVD3A
+
+LNT1: JUMPLE S,LNAL1
+ JUMPGE S,LNAL1
+
+EV5FC1: AOS NPWFCO ;HAVE HAD FORW CUTS IN THIS POS
+ XCT EV5FC3(I)
+ XCT EV5FC4(I) ;DONT RETURN WORSE VAL FOR ME THAN PREV BSF
+ JRST EV5FC2
+
+EV5FC3: CAMGE R,BPREV
+ CAMLE Q,BPREV+1
+
+EV5FC4: MOVE R,BPREV
+ MOVE Q,BPREV+1
+
+EVMPVI: CAMLE A,POSMIN
+ CAMGE A,POSMAX
+
+ECNTKT: CAMGE R,ESPCS(P)
+ CAMLE Q,ESPCS(P)
+
+
+PLLN: JUMPE A,CPOPJ
+PLLN1: LDB B,[PVMGI,,(A)] ;PLAY OUT ALL MOVES IN LINE IN A
+ JUMPN B,CPOPJ ;THAT WERE GEN BY PLAUS MOVE
+ PUSH P,A
+ MOVE A,1(A)
+ PUSHJ P,MMVNC
+ JFCL
+ POP P,A
+ HRRZ A,(A)
+ JUMPN A,PLLN1
+ POPJ P,
+
+PLLLNE: JUMPE A,CPOPJ ;PLAY OUT ALL MOVES OF LINE IN A
+ PUSH P,A
+ MOVE A,1(A)
+ PUSHJ P,MMVNC
+ JFCL
+ POP P,A
+ HRRZ A,(A)
+ JRST PLLLNE
+
+HASV: BPREV+1 ;HIS ASSURED VAL
+OASV: BPREV ;OUR ASSURED VAL
+ BPREV+1
+
+OAVT: Q ;OUR ASSURED VAL
+OPVT: R ;OUR BEST POSSIBLE VAL
+ Q
+
+ABTST: CAML R,BPREV+1 ;A B CUT TEST (SKIP ON NO CUT)
+ CAMG Q,BPREV
+ CAML R,BPREV+1
+
+ABTSTR: CAML R,BPREV+1 ;A B TEST, BUT ALWAYS WITH R
+ CAMG R,BPREV
+ CAML R,BPREV+1
+
+EBSFTS: CAMG R,EPSMX(P) ;SKIP ON BEST SO FAR
+ CAML Q,EPSMN(P)
+
+ABUPT: CAMLE Q,BPREV ;DONT SKIP IF NEED TO UPDATE A B
+ CAMGE R,BPREV+1
+
+ABVLI: MOVE R,EVMST+1 ;CLOBBER VALUE TO REFLECT A B CUT
+ MOVE Q,EVMST
+ MOVE R,EVMST+1
+
+ABVLI1: MOVE Q,R
+ MOVE R,Q
+
+ABVLI2: CAIG R,70000
+ CAML Q,[-70000]
+
+;;DBG1
+IFN DSPLY,[
+TDISPL: SKIPN T1,STPLVL
+ JRST TD8
+ CAME T1,LMGD
+ JRST TD7
+TD8: SKIPN TT,DBS1
+ JRST TD9
+ CAIN TT,2
+ JRST TD8A ;DISPLAY FEEDOVERS
+ SKIPGE TSSW ;DONT DISINI IF TRACING
+ PUSHJ P,DISINS
+ MOVEI B,DISAD
+IFN TS,[ CAIE TT,3
+ SKIPGE GETTY
+ MOVEI B,TYO1
+]
+ PUSHJ T,TDFROB
+TD9: MOVEI T1,1
+ SKIPE WALLP
+ CAME T1,LMGD
+ JRST TD11
+ MOVEI B,PILPT
+ PUSHJ T,TDFROB
+ PUSHJ P,DCRR
+ PUSHJ P,DCRR
+TD11: SKIPE T1,DBS1
+ JRST TD1A
+ JRST TD7
+
+TD8A: MOVE TT,LMGD
+ CAMG TT,HK1V
+ JRST TD7
+ PUSH P,DBS1
+ CLEARM DBS1
+ PUSH P,I
+ PUSH P,T
+ PUSHJ P,DISUP
+ POP P,T
+ POP P,I
+ POP P,DBS1
+ JRST TD7A
+
+TDFROB: PUSH P,B
+TDF1: HRRZ A,PMVORG
+ ADDI A,1
+ MOVEI B,1-1(P) ; 1 EXCEPT FOR PUSH OF B
+ PUSHJ P,4SORT ;SO PRINTOUT IS IN SORTED ORDER
+TDF2: POP P,B
+ HLRZ C,BSTPMV
+ HRRZ D,BSTPMV
+ HLRZ A,SBPMV
+ HRRZ TT,SBPMV
+ISOUT [.ASCII ?TEFAL=*U!TEFAL PCSATS=*U!PCSATS AHDATS=*U!AHDATS ABFATS=*U!ABFATS CANTK=*U!CANTK
+HEXP=*U!HEXP NTPCC=*U!NTPCC NTMPMV=*U!NTMPMV NNBLDR=*U!NNBLDR BSTPMV *P!C *S!D SBPMV *P!A *S!TT
+NRPYMV=*U!NRPYMV ?]
+ MOVE TT,PMVORG
+TD2: CAIN TT,(P)
+ JRST TD2C
+ HLRZ A,1(TT)
+ JUMPE A,TD2A
+ PUSHJ P,PCOUTP
+ MOVEI A,"-
+ PUSHJ P,(B)
+ HRRZ A,1(TT)
+ PUSHJ P,SQOUT
+TD2B: PUSHJ P,DSPACE
+ LDB A,[PCGMCL,,3(TT)]
+ PUSHJ P,DPTS
+ LDB A,[MPCLBS,,5(TT)]
+ PUSHJ P,DPTS
+ LDB A,[MPCLAB,,5(TT)]
+ PUSHJ P,DPTS
+ LDB A,[MPCSPC,,5(TT)]
+ PUSHJ P,DPT
+ MOVE T1,3(TT)
+ MOVEI A,"M
+ TLNE T1,BMTHR
+ PUSHJ P,(B)
+ MOVEI A,"D
+ TLNE T1,BIDSF
+ PUSHJ P,(B)
+ MOVEI A,"T
+ TLNE T1,BTMPM
+ PUSHJ P,(B)
+ MOVEI A,"N
+ TLNE T1,BNEGF
+ PUSHJ P,(B)
+ MOVEI A,"R
+ TLNE T1,BRPLY
+ PUSHJ P,(B)
+ SKIPN NHTHR(I)
+ JRST TD2G
+ TLNE T1,BATH
+ JRST TD2E
+ TLNE T1,BATHM
+ JRST TD2F
+ TLNE T1,BASTH
+ SOUT [ASCIZ / SM/]
+TD2G: PUSHJ P,MCRR
+ PUSHJ P,DSPACE
+ MOVE A,2(TT)
+ PUSHJ P,DPTS
+ MOVE A,4(TT)
+ PUSHJ P,DPTS
+ MOVE A,6(TT)
+ PUSHJ P,DPTS
+ HRRE A,3(TT)
+ PUSHJ P,DPTS
+ PUSHJ P,MCRR
+ ADDI TT,NWDPM
+ JRST TD2
+
+TD2E: SOUT [ASCIZ / ALL/]
+ JRST TD2G
+
+TD2F: SOUT [ASCIZ / ABM/]
+ JRST TD2G
+
+TD2A: LDB A,[170300,,1(TT)]
+ SOUT TYPMT-1(A)
+ JRST TD2B
+
+TD2C: PUSHJ P,DCRR
+ CAIE B,PILPT
+ JRST TD2C1
+ MOVEI A,120.-24.-1
+ PUSHJ P,AUXLRS
+ MOVEI B,AUXLPT
+ PUSHJ P,BDOUT
+ MOVEI B,PILPT
+TD2C1: SKIPN A,NHTHR(I)
+ JRST TD5
+ SOUT [ASCIZ /
+HIS THREATS
+/]
+ MOVE TT,HTHRP(I)
+ PUSHJ T,TD2D
+TD5: SKIPN A,@OTNPP(I)
+ POPJ T,
+ SOUT [ASCIZ /
+OUR OUTSTANDING THREATS
+/]
+ MOVE TT,@OTRPP(I)
+ PUSHJ T,TD2D
+ SKIPN T1,NMP
+ POPJ T,
+ SOUT [ASCIZ /
+MV PREP TBL
+/]
+ MOVE TT,MPBAS
+TDMP1: MOVEI A,1(TT)
+ ISOUT [.ASCII ?*R!A ?]
+ ADDI TT,NWPPE
+ SOJG T1,TDMP1
+ JRST DCRRTJ
+
+TD2D: MOVEM A,TDT1
+TD2D1: MOVEI A,1(TT)
+ ISOUT [.ASCII ?*T!A ?]
+ ADDI TT,NWTHE
+ SOSLE TDT1
+ JRST TD2D1
+DCRRTJ: PUSHJ P,DCRR
+ POPJ T,
+
+TDT1: 0
+]
+
+MVD1A: TDZA T2,T2
+MVD1: MOVNI T2,1
+ MOVE T1,LMGD
+ SOJN T1,CPOPJ
+ PUSH P,A
+ PUSH P,I
+ PUSH P,B
+ PUSH P,R
+ MOVEI B,TYO
+ SKIPE WALLP
+ HRROI B,PILPT
+ JUMPN T2,MVD1B
+ MOVEI A,"*
+ PUSHJ P,(B)
+ PUSHJ P,DTAB
+MVD1B: PUSHJ P,TYPLM
+ PUSHJ P,DSPACE
+ MOVE R,CVPR
+ PUSHJ P,TYPLNE
+ PUSHJ P,DCRR
+ MOVE A,(P)
+ PUSHJ P,DPT
+ PUSHJ P,DTAB
+ MOVE A,Q
+ PUSHJ P,DPT
+ PUSHJ P,DTAB
+IFE TS,[
+ MOVEI T1,0
+ EXCH T1,..TIME
+ ADDM T1,.TIME
+ PUSHJ P,.DPT
+]
+IFN TS,[
+ .SUSET [.RRUNT,,A]
+ EXCH A,..TSTM
+ SUB A,..TSTM
+ PUSH P,C
+ PUSH P,D
+ MOVN C,A
+ PUSHJ P,TSMTP
+ POP P,D
+ POP P,C
+]
+ PUSHJ P,DCRR
+ POP P,R
+ POP P,B
+ POP P,I
+ POP P,A
+ POPJ P,
+
+
+TD1A: CAIN T1,3
+ JRST TD1B
+TD1: JRST TD1C
+
+IFN DSPLY,[
+ MOVEI B,DISAD
+ SKIPE WALLP
+ MOVEI B,PNTDIS
+ PUSHJ P,DCRR
+ MOVSI T,-8
+TD3: MOVSI TT,-8
+TD6: MOVE A,WAV+2*BW+1(T)
+ PUSHJ P,DPT
+ PUSHJ P,DSPACE
+ MOVM C,CHCNT
+ IDIVI C,3
+ CAIN D,0
+ PUSHJ P,(B)
+ AOS T
+ AOBJN TT,TD6
+ PUSHJ P,DTAB
+ PUSHJ P,DSPACE
+ MOVSI TT,-8
+ SUBI T,8
+TD6A: MOVE A,BAV+2*BW+1(T)
+ PUSHJ P,DPT
+ PUSHJ P,DSPACE
+ MOVM C,CHCNT
+ IDIVI C,3
+ CAIN D,0
+ PUSHJ P,(B)
+ AOS T
+ AOBJN TT,TD6A
+
+
+ PUSHJ P,DCRR
+ AOS T
+ AOBJN T,TD3
+TD1C:
+ISOUT [.ASCII ?*U!LMGD WHITE MIN *U!BPREV BLACK MIN *U!BPREV+1 PCBAL *U!PCBAL *U!PCBAL+1 PNBAL *U!PNBAL *U!PNBAL+1
+PCSATS *U!PCSATS NEED FOR BSF *U!ABFATS NEED FOR AB CUT *U!AHDATS ?]
+ PUSHJ P,PWNPNT
+ PUSHJ P,.DISBD
+TD1B: SKIPE DBS2
+ JRST TD7A
+]
+ CLEARM CVPR ;DONT LOOK, RETURN INSTEAD
+ CLEARB Q,R
+ MOVEI D,-1
+ MOVEI J,0
+ JSP ZR,EVM5B2
+
+
+TD7A: PUSHJ P,TYI
+ CLEARM STPLVL
+ CAIL A,"0
+ CAILE A,"9
+ JRST TD7
+ SUBI A,"0
+ MOVEM A,STPLVL
+ JRST TD7
+
+
+;;;MN3
+
+LMGRA1: SKIPL @LGR1CT(I)
+ JRST LMGRA4
+ MOVEI T1,3 ;PROMOTION OF PAWN, TRY Q,R,B,N
+ MOVEM T1,PROCNT
+ PUSH T,PVALUE(B)
+ SETOM QMOVE
+LMGRA2: MOVE T1,PROCNT
+ MOVE T2,LGR2TV-3(T1)
+ MOVEM T2,PVALUE(B)
+ PUSHJ T,LMGRA
+ SKIPGE PCGCF
+ JRST LMGRA3
+ SETCM T1,PROCNT
+ TRNE T1,3
+ JRST LMGRA2
+LMGRA3: POP T,PVALUE(B)
+ POPJ T,
+
+LMGR7A: SKIPGE LMGT(B) ;DOESN'T BLOCK CHECK
+ CAME A,LMGEPS ;UNLESS EP CAPTURE OF CHECKING PAWN
+ POPJ T,
+ JRST LMGR
+
+LMGR7: SKIPGE RPIECE(B)
+ POPJ T,
+ MOVE T1,KSQTBP
+ CAME A,KSQTB(T1) ;SEE IF MOVE BLOCKS CHECK (INCLUDING TAKING CHECKING PIECE)
+ AOBJN T1,.-1
+ JUMPGE T1,LMGR7A ;NO
+
+LMGR: SKIPGE T1,BOARD(A) ;YES
+ POPJ T,
+ JUMPE T1,LMGRA0
+ XCT OURGY1(I) ;SKIP ON HIS GUY
+ POPJ T,
+LMGRA0: SKIPGE LMGT(B)
+ JRST LMGRA1 ;P MOVE, MAYBE GEN CORRESP QNING MVS
+LMGRA4: CLEARM QMOVE
+LMGRA: SKIPGE PCGCF
+ POPJ T, ;EXIT IN PCG MD IF GOOD ENUF MOVE ALREADY FOUND
+ SETOM GDMF ;SAFE MOVE FLAG
+ CLEARM ICKF
+ MOVEM J,LMJS
+ MOVEM A,LMAS
+ MOVE T1,SPINFM
+ MOVEM T1,SPINFS ;RESTORE LVL FOR SPINFS
+LMGCD1: CLEARM LMFORS
+ SETOM SACFL
+ AOSN CDVCF
+ JRST LMGCD
+TRS1: ;INSERT TRACE TEST WHEN IN TRACE MODE
+ RC C TACT VAL, MOVE R,CDEVV ;CURRENT TACT VALUE
+ RC CONSTANT, ADD R,IVLU ;INITIAL EFFORT
+ MOVE T1,MVDMF ;PNTR TO MVDST AFTER CRUFT STORED AT LMGCD
+ MOVEM T1,MVDSP
+ CLEARM BGNS
+ MOVE T1,[BGNS,,BGNS+1]
+ BLT T1,EGNS-1 ;CLEAR GAINS VARIABLES
+ MOVE W,CPOSV ;CURRENT POSITIONAL VALUE
+ MOVEM W,POSRLS
+ MOVEI W,0
+ MOVE T1,[NSQS+8+1,,PNSQS+8+1]
+ BLT T1,PNSQS+NPC+1-1 ;COPY NSQS FOR PCS
+ CLEARM NPPIN ;# POSSIBLE PINS STORED IN MVDST
+ MOVE D,PIECEL(B)
+ MOVEM D,ORGPCL
+ HRRZM B,PCMVNG
+ MOVEM P,PCMPLL
+ SKIPE T2,BDBLK(D) ;UNBLOCKING SOMETHING ?
+ JRST LMUA
+LMUA2: SKIPE NPPIN ;ANY POSSIBLE PINS DUE TO DISCOVERIES
+ JRST LMPDE1 ;YES UPDATE PINT+DSCOV AS APPRO
+LMPDE2: CLEARM DISCOVF
+ MOVE T2,MVDSP ;STORE POINTER TO PART TO MVDSP HAVING TO DO WITH BLOCKING AND UNBLOCKING OTHER PCS
+ MOVEM T2,MVDDP
+ SKIPE OPNMID
+ SKIPL RPIECE(B) ;PLAUSIBLE TO PULL BACK KING
+ JRST LMGCMY
+ LDB T1,[BRANK,,BPREL(A)]
+ MOVE T2,PRANK(B)
+ XCT LMGRT3(I)
+ LSH T1,3
+ SKIPE OPENF
+ LSH T1,3
+ SKIPN @OQT(I)
+ JRST LMGCMZ
+ JUMPE I,.+3
+ MOVNS T2
+ ADDI T2,9
+ IMUL T1,T2
+LMGCMZ: RC PULL KING BACK, ADD R,T1
+LMGCMY: LDB ZR,[PTID,,PIECE(B)]
+ SOJE ZR,LKNPS ;N MOVE, COMPUTE POSITIONING FACTOR
+LKNPS1: SKIPE ONEB1(A)
+ PUSHJ P,LMRP1 ;SEE IF RELIEVING PIN BY INTERPOSING BETWEEN PINNED AND BASE
+ SKIPE ONEB2(A) ;OR IF DEF BY PIN IF CAPTED
+ PUSHJ P,LMRP2
+ SKIPN BOARD(A) ;DONT WORRY ABT BLOCKING PAWNS IF CAPTURE
+ SKIPGE LMGT(B)
+ JRST LMCPB1
+ JUMPN I,LMCPB
+ SKIPLE T1,BOARD-BW(A)
+ SKIPL LMGSTD-PIECE(T1)
+ JRST LMCPB1
+ CAIN A,WK3
+ RP BLOCKING KP AT K3, SUB W,BCPVLU
+ CAIN A,WQ3
+ RP BLOCKING QP AT Q3, SUB W,BCPVLU
+LMCPB1: SKIPL LMGT(B)
+ JRST LMPP1
+ SKIPL OPNMID
+ JRST LMPP4
+ MOVE T1,@OKINGT+1(I) ;ADVANCING P TO NEAR HIS K?
+ LDB ZR,[BFILE,,BPREL(T1)]
+ LDB T2,[BFILE,,BPREL(A)]
+ SUB T2,ZR
+ MOVMS T2
+ SOJG T2,LMPP4 ;XFER ON NOT WITHIN ONE FILE ON OPPOSING K
+ LDB T2,[BRANK,,BPREL(A)]
+ LDB ZR,[BRANK,,BPREL(T1)]
+ SUB T2,ZR
+ SKIPN I
+ MOVNS T2
+ CAIG T2,4
+ CAMGE T2,[-1]
+ JRST LMPP4 ;P IS TOO FAR AWAY OR PAST K
+ MOVE ZR,MVDSP
+ MOVSI T1,MVDPNK_MVDSFT
+ DPB A,[MVDSQ,,T1]
+ DPB B,[MVDPC2,,T1]
+ PUSH ZR,T1
+ PUSH ZR,LMPP4T(T2)
+ HRRZM ZR,MVDSP
+LMPP4: XCT LMPP2A(I)
+ XCT LMPP2B(I)
+ JRST LMPP2 ;NOT FORMING RAM
+ MOVEI T1,@LMPP2C(I) ;SEE IF GIVING HIM WEAK P
+ PUSHJ P,LMPP3
+ SUBI T1,2
+ PUSHJ P,LMPP3
+LMPP2: SKIPLE T1,PPASED(B)
+ CAIN T1,7 ;IF QUEENING, FORGET THIS
+ JRST LMPP1
+ MOVE ZR,MVDSP ;PUSH PASSED P
+ MOVSI T2,MVDPPP_MVDSFT
+ DPB B,[MVDPC2,,T2]
+ DPB A,[MVDSQ,,T2]
+ PUSH ZR,T2
+ LDB T2,[BRANK,,BPREL(A)]
+ SKIPE I
+ MOVE T2,REVERS(T2)
+ MOVE C,PPV(T2)
+ SUB C,PPV(T1)
+ SKIPE @PPSTSP(I)
+ JRST LMOSP1 ;WE HAVE P.P. OUTSIDE SQ OF HIS K, THIS ONE ETC?
+LMOSP2: PUSH ZR,C
+ HRRZM ZR,MVDSP
+LMPP1: SKIPN @NHPPP+1(I)
+ JRST LMUB1 ;WE HAVE NO PASSED P
+ MOVE T1,ORGPCL
+ SKIPLE T2,@LMUBT1(I)
+ XCT LMUBT2(I)
+ JRST LMUB1
+ SKIPN TT,PPASED-PIECE(T2)
+ JRST LMUB1
+ MOVE ZR,MVDSP ;UNBLOCKING OUR PASSED P
+ MOVSI T1,MVDUOP_MVDSFT
+ SUBI T2,PIECE
+ DPB T2,[MVDPC,,T2]
+ PUSH ZR,T2
+ MOVE C,PPV+1(TT)
+ SUB C,PPV(TT)
+ PUSH ZR,C
+LMUB1: JRST MVA1 ;HACK NEW FROBBER
+
+LMUBT1: BOARD-BW(T1)
+ BOARD+BW(T1)
+
+LMUBT2: SKIPL LMGSTD-PIECE(T2)
+ SKIPL SNFBP-PIECE(T2)
+
+LMOSP1: MOVE Q,PFILE(B)
+ SKIPE TT,@PCCNTP+1(I) ;SKIP ON HE HAS JUST K LEFT
+ JRST LMOSP3
+LMOSP4: MOVE TT,PSQFIL(Q)
+ SKIPE I
+ MOVSS TT
+ JUMPGE TT,LMOSP2 ;NOT OUTSIDE SQUARE
+ MOVEI C,KQV-PWNV
+ SUB C,PPV(T1)
+ JRST LMOSP2
+
+LMOSP3: SOJN TT,LMOSP2 ;XFER ON HE HAS MORE THAN ONE PC LEFT
+ SKIPE @LMOSPT(I)
+ JRST LMOSP2
+ JRST LMOSP4 ;HE DOESNT AND HAS NO ATTS AHEAD OF P
+
+LMOSPT: BAAPP(Q)
+ WAAPP(Q)
+
+LMPDE1: SKIPN NPPIN
+ JRST LMPDE2
+ MOVE TT,MVDMF ;LOOK THRU POSSIBLE PINS DUE TO DISCOVERIES
+LMPDE3: CAML TT,MVDSP ;EXAMINE FOR EFFECTIVENESS AND UPDATE PINT AND DSCOV AS APPRO
+ JRST LMPDE2 ;NOT NECESSARILY FINAL RESULT SINCE MAIN MOVE MAY ALSO ATTACK BASE PIECE
+ LDB C,[MVDCD,,1(TT)]
+ CAIN C,MVDPIN
+ JRST LMPDE4
+LMPDE5: ADDI TT,NWMVE
+ JRST LMPDE3
+
+LMPDE4: SKIPE S,BOARD(A)
+ SUBI S,PIECE ;PIECE CAPTED
+ PUSH P,A
+ PUSH P,B
+ LDB B,[MVDPC2,,1(TT)] ;PIECE "PINNING"
+ LDB A,[MVDSQ,,1(TT)]
+ CAMN A,@OKINGT+1(I)
+ JRST LMPDE6 ;PINNING TO K
+ MOVE C,PIECEL(B)
+ LDB D,[MVDDIR,,1(TT)]
+ PUSHJ P,EPP
+ MOVE D,BOARD(A) ;PICK UP BASE PIECE
+ SUB S,ENPCL-PIECE(D)
+LMPDE9: AOS T1,PINFS
+ CAIL T1,EPINDT-3
+ JRST LMPDE8
+ CLEARM 1(T1) ;CONJURE WD 1 OF PIN ENTRY
+ DPB B,[PINATP,,1(T1)]
+ LDB C,[MVDPC,,1(TT)] ;PIECE "PINNED"
+ MOVE ZR,PIECEL(C)
+ DPB ZR,[PINOPS,,1(T1)]
+ LDB ZR,[MVDDIR,,1(TT)]
+ DPB ZR,[PINDIR,,1(T1)]
+ DPB A,[PINBS,,1(T1)]
+ JUMPLE S,LMPDE7 ;TRANS ON PIN HAS NO EFFECT ON BASE PIECE BUT RECORD DSCOV
+ PUSH T,PINT(C)
+ PUSH T,C
+ PUSH T,PINFS
+ MOVEM S,2(T1) ;STORE VALUE OF PIN
+ EXCH T1,PINT(C) ;STORE PIN
+ TLNE S,-1
+ TLO T1,400000 ;PINNED TO K
+ MOVEM T1,@PINT(C)
+ POP P,B
+ POP P,A
+ MOVEI T1,2
+ ADDM T1,PINFS
+ PUSHJ T,LMPDE5
+ POP T,PINFS
+ POP T,C
+ POP T,PINT(C)
+ POPJ T,
+
+LMPDE7: PUSH T,DSCOV(C)
+ PUSH T,C
+ PUSH T,PINFS
+ EXCH T1,DSCOV(C)
+ MOVEM T1,@DSCOV(C)
+ AOS PINFS
+ POP P,B
+ POP P,A
+ PUSHJ T,LMPDE5
+ POP T,PINFS
+ POP T,C
+ POP T,DSCOV(C)
+ POPJ T,
+
+LMPDE8: PTTY [ASCIZ /PIN FS OUT AT LMPDE/]
+ POP P,B
+ POP P,A
+ JRST LMPDE5
+
+LMPDE6: MOVSI S,1
+ JRST LMPDE9
+
+ 20
+LMPP4T: 20 ;VALUES FOR MVING P NEAR K (INDEX BY RANK DISTANCE)
+ 30
+ 30
+ 10
+ 5
+
+LMPP3: SKIPGE T2,BOARD(T1)
+ POPJ P,
+ JUMPE T2,LMPP3A
+ SKIPGE LMGT-PIECE(T2)
+ POPJ P,
+LMPP3A: LDB T2,LMPP2D(I)
+ JUMPN T2,CPOPJ ;HE CAN DEF SQ WITH P
+ LDB T2,[BFILE,,BPREL(T1)]
+ SKIPN @LMPP2E(I)
+ POPJ P, ;HE HAS NO P S ON FILE
+ MOVEI C,@LMPP2F(I)
+LMPP3B: SKIPGE TT,BOARD(C)
+ POPJ P,
+ JUMPE TT,LMPP3D
+ XCT LMPP2G(I)
+ JRST LMPP3C ;HIS P! IT WILL BE WEAK!!
+LMPP3D: ADD C,LMPP2H(I)
+ JRST LMPP3B
+
+LMPP3C: MOVE ZR,MVDSP
+ MOVSI T2,MVDGBP_MVDSFT
+ DPB T1,[MVDSQ,,T2]
+ DPB B,[MVDPC2,,T2]
+ TLO T2,(MVSAB)
+ PUSH ZR,T2
+ PUSH ZR,[30]
+ HRRZM ZR,MVDSP
+ POPJ P,
+
+5RNKPA: SKIPL 4RNKP(A)
+4RNKPA: SKIPG 4RNKP(A)
+ SKIPL 4RNKP(A)
+
+LMPP2A: SKIPLE T1,BOARD+BW(A)
+ SKIPLE T1,BOARD-BW(A)
+
+LMPP2B: SKIPL SNFBP-PIECE(T1)
+ SKIPL LMGSTD-PIECE(T1)
+
+LMPP2C: BW+1(A)
+ -BW+1(A)
+
+LMPP2D: NPPAS,,BPAS(T1)
+ NPPAS,,WPAS(T1)
+
+LMPP2E: BNPNFL(T2)
+ WNPNFL(T2)
+
+LMPP2F: BW(T1)
+ -BW(T1)
+
+LMPP2G: SKIPGE SNFBP-PIECE(TT)
+ SKIPGE LMGSTD-PIECE(TT)
+
+LMPP2H: BW
+ -BW
+
+
+
+LMGR6T: MOVE T1,BOARD-BW(A)
+ MOVE T1,BOARD+BW(A)
+
+LMGRT1: SKIPLE T1,BOARD+BW(A)
+ SKIPLE T1,BOARD-BW(A)
+
+LMGRT3: SUBM T2,T1
+ SUB T1,T2
+
+OQT: BKING+1-PIECE+PIECEL
+ WKING+1-PIECE+PIECEL
+
+LMGCT2: 0 ;TEMP FOR PLAUS UP TO NOW
+PCMVG: 0 ;ORG PIECE MOVING WHEN CONSIDERING VAL OF PIECE TAKEN
+
+MVA1: PUSHJ P,ATEVL
+ SKIPE T2,BDA1(A) ;SEE WHAT BLOCKING
+ PUSHJ P,LBL1
+ SKIPE T2,BDA2(A)
+ PUSHJ P,LBL2
+ SKIPN T1,BOARD(A)
+ JRST MVA2 ;NO CAPT
+MVC1: MOVE T2,LMGD
+ CAMG T2,CATCUT
+ SETOM ICKF
+ PUSH P,T1
+ PUSH P,B
+ PUSH P,W
+ HRRZM B,PCMVG
+ RP DEVEL VAL PIECE TAKEN,MOVEI B,-PIECE(T1)
+ PUSHJ P,CBDV
+ MOVEM W,PVPCCP ;POS VAL OF CAPTED PC
+ POP P,W
+ POP P,B
+ MOVE T1,(P) ;T1 MAY DFR FROM BOARD(A) IF E.P. CAPT
+ SUBI T1,PIECE
+ PUSHJ P,CCAN ;COMPUTE CALC GAIN
+ POP P,T1
+ MOVE TT,CLACL-1
+ MOVEM TT,HPVAL
+ SKIPE T2,SPINT-PIECE(T1)
+ JRST MVC1A ;CAPT CONSTRAINED PIECE
+MVC1B: MOVEM S,EGAIN
+ MOVE ZR,MVDSP
+ PUSH ZR,[0]
+ PUSH ZR,S
+ HRRZM ZR,MVDSP
+MVC1C3: SKIPE T1,NHC
+ SKIPGE HCL
+ JRST MVC1C4
+ MOVE T2,EGAIN ;WE ARE GOING TO RECAPT AND LAST
+ SUB T2,CLDCL-1(T1)
+ MOVEM T2,OFTRCL ;IF WE FAIL TO RECAPT LAST, RESULT IS THIS
+MVC1C4: MOVE T1,HPVAL ;COMPUTE HIS RELATIVE LOSS IF HE FAILS TO RECAPTURE
+ SUB T1,EGAIN ;IE EGAIN PUTS A CONSTRAINT ON HIM TO RECAPTURE
+ SKIPGE T1 ;WITH VAL OF RCTMPO
+ MOVEI T1,0
+ MOVEM T1,RCTMPO ;REL AMT HE LOSES BY NOT RECAPTING
+ CAMLE T1,CGAIN
+ MOVE T1,CGAIN
+ MOVEM T1,CCA ;ABV LIMITED TO PC ACTUALLY LOST
+ MOVNI T1,1 ;COMPUTE LOCAL RECAPTURE CODE
+ SKIPN @LMGST+1(I)
+ SOJA T1,MVRC1 ;RECAPT IMPOSS
+ SKIPGE EGAIN
+ JRST MVRC2 ;RECAPT EXPECTED
+ SKIPE NHC
+ JRST MVRC3 ;HE IS EXPECTED TO RECAPT
+ MOVE T2,CLACLP
+ SKIPN PINT(T2)
+ SKIPE SPINT(T2)
+ JRST MVRC1
+ MOVE T2,PVALUE(T2)
+ CAMLE T2,PVALUE(B)
+ JRST MVRC1
+ AOJA T1,MVRC1 ;HE COULD TRADE IF HE WANTED
+
+MVRC3: SKIPA T1,[1]
+MVRC2: MOVEI T1,2
+MVRC1: MOVEM T1,LRCCOD
+ JRST LMGR1
+
+
+MVC1A: LDB ZR,[410300,,(T2)] ;CAPTURING PIECE THAT WAS CONSTRAINED
+ JUMPN ZR,MVC1C ;OTHER THAN DEF CONSTRAINT
+ LDB TT,[SPINSQ,,(T2)] ;CAN PC THIS ONE WAS CONSTRAINED TO RECAPT?
+ SKIPG D,BOARD(TT)
+ ERRTTY [ASCIZ /LOSE AT MVC1A/]
+ SUBI D,PIECE
+ SKIPE C,PINT(D)
+ JRST MVC1H ;PIECE CONSTRAINED TO PINNED, CANNOT RECAPT UNLESS PINNED TO PIECE BEING CAPTURED
+MVC1E: MOVE C,DFPCP
+ CAIGE C,DFPCT-1
+ JRST MVC1F ;MORE THAN 1 ATTACKER SO CAN ONLY RECAPT IF TOP DEFENDER
+ MOVE C,ATPCP ;CAN RECAPT IF ANY DEFENDER
+MVC1G: CAIN C,ATPCT
+ JRST MVC1D
+ CAMN D,1(C)
+ JRST MVC1C
+ AOJA C,MVC1G
+
+MVC1D: MOVSI C,MVCCP_MVDSFT ;BREAKING CONSTRAINT BY CAPTURING PIECE
+ TRO C,MVDDIB ;DONT DOWNGRAD (FURTHER) IF HE CAPTS US ETC
+ DPB A,[MVDSQ,,C]
+ MOVE ZR,MVDSP
+ DPB D,[MVDPC,,C]
+ SKIPN NHC
+ JRST MVC1D3 ;HES NOT GOING TO RECAPT SO ONLY ORDINARY ATTACK
+ MOVEI J,0
+ PUSH P,S
+ PUSH P,B
+ PUSH P,T2
+MVC1D4: MOVE S,TT
+ EXCH A,S
+ SKIPN B,CLACLP(J)
+ AOJA J,MVC1D2
+ SKIPGE LMGT(B)
+ JRST MVC1D5 ;P CHECK CAPT SQS
+ PUSHJ P,@LGLMPT(B)
+ AOJA J,MVC1D2 ;DOES NOT HOLD
+MVC1D6: MOVE T1,@LMGST+1(I) ;A HAS SQ OF CONSTRAINT
+ SOJN T1,MVC2D1 ;NOT HIS ONLY GUY HOLDING SQ
+ MOVE T1,@LMGST(I)
+ SOJLE T1,MVC2D1 ;WE HAVE ONLY ONE
+ MOVE T1,PVALUE(B)
+ CAMLE T1,HPVAL
+ AOJA J,MVC1D2 ;THIS GUY IS BIGGER AND MAY NOT HOLD
+MVC2D1: EXCH A,S
+ SKIPGE PDIGF
+ JRST MVC2D2 ;WE ARE DEF WITH A P WHICH MAY GET BAD P STRUCT
+MVC2D3: MOVE T1,NHC ;ONE OF HIS DEFENDERS WOULD HOLD, THE NATURAL ONE?
+ CAIN T1,1
+ TLO C,(MVWAB) ;HIS NAT DEFENDER HOLDS
+MVC1D1: POP P,T2
+ POP P,B
+ POP P,S
+MVC1D3: PUSH ZR,C
+ LDB C,[SPINVL,,(T2)]
+ PUSH ZR,C
+ HRRZM ZR,MVDSP
+MVC1C: LDB T2,[SPNLK,,1(T2)]
+ JUMPE T2,MVC1B
+ JRST MVC1A
+
+MVC1D5: JUMPN I,MVC1D7
+ CAIE A,-BW-1(S) ;B PAWN
+ CAIN A,-BW+1(S)
+ JRST MVC1D6
+ AOJA J,MVC1D2
+
+MVC1D7: CAIE A,BW+1(S)
+ CAIN A,BW-1(S)
+ JRST MVC1D6
+ AOJA J,MVC1D2
+
+MVC2D2: HRRZS B
+ CAME B,PDIGY
+ JRST MVC2D3
+ MOVE T1,PDAMT
+ RC HIS NAT RECAPT GIVES BAD P STRUCT *U!T1 DSQGAIN, ADDM T1,DSQGAIN
+ JRST MVC2D3
+
+MVC1D2: EXCH A,S
+ CAMG J,CLDRMX
+ JRST MVC1D4
+ TLO C,(MVSAB)
+ JRST MVC1D1
+
+MVC1F: CAMN D,CLACLP
+ JRST MVC1C ;YES THIS PIECE RECAPTURES
+ JRST MVC1D
+
+MVC1H: LDB ZR,[PINBS,,1(C)]
+ SKIPN (C) ;SKIP ON MULT PINNED
+ CAME ZR,PIECEL(B)
+ JRST MVC1D ;CANT RECAPT
+ JRST MVC1E ;MAYBE CAN
+
+MVA2: CAMN A,GHLOC
+ SKIPL LMGT(B)
+ JRST MVA2A
+ XCT LMGR6T(I) ;EP CAPT
+ JRST MVC1
+MVA2A: SETOM NAPI ;INITIALIZE THESE IN CASE DONT GO TO CCAN
+ SETOM NDPI
+ CLEARM APIV
+ CLEARM DPIV
+ CLEARM HPVAL
+ SETOM CLDMX
+ SKIPE S,@LMGST+1(I) ;SKIP ON NOT ATTACKED
+ PUSHJ P,CCAN
+ CLEARM EGAIN
+ JUMPGE S,MVA2B
+ MOVSI ZR,MVEP_MVDSFT ;STORE E P AMT
+ AOS MVDSP
+ MOVEM ZR,@MVDSP
+ AOS MVDSP
+ MOVEM S,@MVDSP
+ MOVEM S,EGAIN
+MVA2B: JRST MVC1C3
+
+
+LMCPB: SKIPLE T1,BOARD+BW(A)
+ SKIPL SNFBP-PIECE(T1)
+ JRST LMCPB1
+ CAIN A,BK3
+ RP BLOCKING KP AT K3, SUB W,BCPVLU
+ CAIN A,BQ3
+ RP BLOCKING QP AT Q3, SUB W,BCPVLU
+ JRST LMCPB1
+
+LMFA3: MOVE TT,@OKINGT+1(I)
+ LDB T2,[BRANK,,BPREL(A)]
+ LDB T1,[BRANK,,BPREL(TT)]
+ CAMN T1,T2
+ RC SAME RANK AS K, ADD R,PTFVLU
+ LDB T2,[BFILE,,BPREL(A)]
+ LDB T1,[BFILE,,BPREL(TT)]
+ CAME T1,T2
+ POPJ P,
+ RC SAME FILE AS K, ADD R,PTFVLU
+ SKIPE BPNFLS(T1)
+ POPJ P,
+ SKIPN WPNFLS(T1)
+ RC FILE OPEN,ADD R,POFVLU
+ POPJ P,
+
+LMDA: MOVE TT,@OKINGT+1(I)
+ LDB T2,[BPDAG,,BPREL(A)]
+ LDB T1,[BPDAG,,BPREL(TT)]
+ CAMN T1,T2
+ RC SAME +DIAG AS K, ADD R,PTFVLU
+ LDB T2,[BMDAG,,BPREL(A)]
+ LDB T1,[BMDAG,,BPREL(TT)]
+ CAMN T1,T2
+ RC SAME -DIAG AS K, ADD R,PTFVLU
+ POPJ P,
+
+LKNPS: LDB C,[BRANK,,BPREL(A)]
+ SUB C,@KRNK+1(I)
+ MOVMS C ;DIST IN RANKS
+ LDB ZR,[BFILE,,BPREL(A)]
+ SUB ZR,@KFILE+1(I)
+ MOVMS ZR
+ ADD C,ZR ;NEW DIST FROM HIS K
+ MOVE ZR,PRANK(B)
+ SUB ZR,@KRNK+1(I)
+ MOVMS ZR
+ SUB C,ZR
+ MOVE ZR,PFILE(B)
+ SUB ZR,@KFILE+1(I)
+ MOVMS ZR
+ SUB C,ZR
+ MOVNS C
+ LSH C,6
+ RP N POSITION,ADD W,C
+ JRST LKNPS1
+
+
+LMRP2: SKIPA T1,[-4,,4]
+LMRP1: MOVSI T1,-4
+LMRP6: LDB C,ONEBSQ(T1)
+ JUMPE C,LMRP3
+ MOVE D,BOARD(C)
+ XCT OURGY(I)
+ JRST LMRCP1 ;SEE IF HE WILL BE PINNED IF HE CAPTS US
+ SKIPN TT,PINT-PIECE(D)
+ JRST LMRP3
+ LDB T2,RDATS(T1) ;OUR PINNED PIECE
+; SKIPGE SLDPC(T2) ;WOULD NEVER SKIP
+ XCT RMOY6+1(I)
+ JRST LMRP3
+LMRP5: LDB ZR,[PINATP,,1(TT)] ;ATTACKED BY HIS SLIDER
+ CAMN ZR,T2
+ JRST LMRP4
+ HRRZ TT,(TT)
+ JUMPN TT,LMRP5
+LMRP3: AOBJN T1,LMRP6
+ POPJ P,
+
+
+LMRP4: LDB ZR,[PINBS,,1(TT)]
+ CAMN ZR,PIECEL(B)
+ JRST LMRP3 ;SAME PIECE AS PINNED TO NOW
+ MOVSI ZR,MVDRPI_MVDSFT
+ LDB TT,[PINOPS,,1(TT)]
+ DPB TT,[MVDSQ,,ZR]
+ DPB T2,[MVDPC,,ZR]
+ AOS MVDSP
+ MOVEM ZR,@MVDSP
+ AOS MVDSP
+ CLEARM @MVDSP
+ JRST LMRP3
+
+
+LMRCP1: LDB TT,RDATS(T1)
+ XCT RMOYTT(I)
+ JRST LMRP3
+ SKIPN TT,SPINT-PIECE(D)
+ JRST LMRP3
+ MOVSI ZR,MVDCPB_MVDSFT ;COVERED BY PIN
+ LDB T2,[SPINSQ,,(TT)]
+ DPB T2,[MVDSQ,,ZR]
+ AOS MVDSP
+ MOVEM ZR,@MVDSP
+ LDB T2,[SPINVL,,(TT)]
+ AOS MVDSP
+ MOVEM T2,@MVDSP
+ JRST LMRP3
+
+LMGR1: CAME P,PCMPLL
+ ERRTTY [ASCIZ /PDL LOSSAGE AT LMGR1/]
+ PUSH P,A ;STORE MOVE
+ HRLM B,(P)
+ PUSHJ P,LMGR1A ;SEE WHAT MOVE ATTACKS, ETC
+ JRST THAN1 ;ANALYZE THREATS
+
+TRS3: ;PATCHED AT TRACE
+THAN4: MOVE Q,PCMPLL
+ ADD Q,[1,,1]
+ CAME Q,P
+ ERRTTY [ASCIZ /PDL LOSSAGE AT THAN4/]
+ MOVE T1,LMFORS
+ SKIPE ICKF
+ TLO T1,400000
+ SKIPN SDAGN
+ SKIPE DAGAIN
+ TLO T1,BIDSF ;DISCOVERY (REALLY NON-DIRECT ATTACKING ACTION)
+ MOVE T2,NTMPS
+ CAILE T2,1
+ TLO T1,BMTHR
+ SKIPE ALOSS
+ TLO T1,BNEGF
+ SKIPE SOSTV
+ TLO T1,BSOS
+ SKIPE QMOVE
+ TLO T1,BQMV
+ SKIPE ICKF
+ AOS NCKF ;NO. OF CHECKING MOVES
+ SKIPGE MATTH
+ TLO T1,BMATH
+ SKIPN T2,AUATHV
+ TLO T1,BATH
+ CAIGE T2,40
+ TLO T1,BATHM
+ SKIPE VTHRA
+ TLO T1,BASTH
+LGR1F3: IORM T1,LMFORS
+ MOVM T1,POSNET
+ XCT STDVL1
+ CAILE T1,200
+ MOVEI T1,200 ;LIMIT POSIT DELTA MAGNITUDE
+ SKIPL POSNET
+ JRST LGR1F2
+ MOVNS T1
+ SKIPG ENPCL(B) ;DONT ADD NEG DEV VAL IF PIECE ENPRISE
+LGR1F2: RC SCALED POSTIONAL CHANGE,ADD R,T1
+ SKIPGE R
+ MOVEI R,0
+PCGA1: SETOM CANMV
+
+ SKIPL NSTPAL
+ SKIPGE CANTK
+ JRST PCG1A
+ SKIPE STPALL
+ JRST PCG1B ;STOPS ALL?
+PCG1A:
+ MOVEI TT,0 ;CLASS
+ SKIPG DFSVP
+ SKIPE CMTHRA
+ MOVEI TT,1 ;HAS DEFENSIVE VALUE
+ MOVE T1,PINRLS
+ CAIL T1,40
+ MOVEI TT,1 ;RELIEVES PIN, THEREFORE HAS POSSIBLE DEFENSIVE VALUE
+ SKIPG SLAGN
+ SKIPE SDAGN
+ JRST PCGA5 ;DBL ATT OR STRONG DISCOVERED ATT
+ SKIPG SAGAIN
+ SKIPLE EGAIN
+ JRST PCGA5 ;DIRECT GAIN OR STRONG ATT
+ SKIPN SOSTV
+ SKIPE OSTV
+ JRST PCGA7 ;HAVE OUTSTANDING THREATS, TRY MVS WITH AGAIN OR DAGAIN
+ JRST PCGA6
+
+
+PCGA5: LDB T1,[MPCLBS,,LGCLSW]
+ CAILE T1,DGOT-DGCLSB
+ JRST PCGA8
+ MOVEI TT,2 ;MV THREATENS TO BE GOOD ENUF SO CONSIDER
+ JRST PCGAX
+
+PCGA7: SKIPN AGAIN
+ SKIPE DAGAIN
+ JRST PCGA5
+PCGA6: SKIPN INCHK
+ JRST PCGA8
+ SKIPE SOSTV
+ JRST PCGA5 ;IN CHECK SO DONT GET CHANCE TO HACK OUTSTANDING THREATS
+PCGA8: LDB T2,[MPCSPC,,LGCLSW]
+ JUMPE T2,PCGAX ;HAS SPECIAL ACTION
+ MOVEI TT,2
+PCGAX: DPB TT,[PCGMCL,,LMFORS]
+PCGA2: MOVE T1,POSNET ;COMPUTE ESTIMATED DELTA
+ ASH T1,@STDVL1
+ MOVEM T1,PCGT1
+ ADD T1,EGAIN
+ SKIPE NHC
+ JRST PCGA2A
+ ADD T1,SQGAIN
+ ADD T1,SAGAIN
+ ADD T1,SLAGN
+PCGA2A: ADD T1,DSQGAIN
+ ADD T1,OSTCMP
+ ADD T1,SDAGN
+ MOVN T2,ALOSS
+ CAMGE T2,UATHV
+ MOVE T2,UATHV
+ SUB T1,T2 ;"CANT" LOSE BOTH
+ MOVE T2,LOSTV
+ CAMGE T2,LSOSTV
+ MOVE T2,LSOSTV ;IF HE ANSWERS THREATS OF MV, HE LOSES THIS..
+ MOVE ZR,AGAIN
+ CAMGE ZR,DAGAIN
+ MOVE ZR,DAGAIN
+ ADD ZR,SAGAIN
+ ADD ZR,LSOSTV ;HE MAY NOT BE ABLE TO GET OUT OF THIS
+ ADD ZR,SDAGN ;IF HE ANSWERS OUTSTANDING THREATS, HE MIGHT LOSE THIS..
+ CAMLE ZR,T2
+ MOVE ZR,T2
+ ADD T1,ZR ;MIN OF OUTSTANDING THREATS, THREATNED ATTS
+ ADDI T1,20 ;ALLOW FOR EXTRA
+ SKIPGE MATTH
+ ADDI T1,4000
+ HRRM T1,LMFORS ;EXPECTED GAIN
+ CAMLE T1,HEXP
+ MOVEM T1,HEXP ;BEST SO FAR
+ CAMLE T1,[-100]
+ AOS NNBLDR
+ SKIPGE T1
+ CLEARM GDMF
+ SKIPE BOARD(A)
+ JRST LBPOS1 ;CAPT NOT "POSITIONAL MV"
+ SUB T1,PCGT1
+ SUBI T1,20
+ JUMPL T1,LBPOS1 ;EXPECTATION NEG
+ MOVE T2,(P) ;MV
+ MOVE T1,W
+ CAMG T1,BSTPV
+ JRST LBPOS2
+ EXCH T1,BSTPV
+ EXCH T2,BSTPMV
+LBPOS2: CAMG T1,SBPV
+ JRST LBPOS1
+ EXCH T1,SBPV
+ EXCH T2,SBPMV
+LBPOS1: JUMPLE W,LMTMV1
+ SKIPE T2,NTMPS
+ SKIPE NHC
+ JRST LMTMV1
+ SKIPN UATHV
+ SKIPE ALOSS
+ JRST LMTMV1
+ SKIPE SLUATV
+ JRST LMTMV1
+ MOVE T1,AGAIN
+ ADD T1,SAGAIN
+ ADD T1,DAGAIN
+ ADD T1,SDAGN
+ SUB T1,AUATHV
+ SUB T1,UALTPO
+ CAIG T1,PWNV
+ JRST LMTMV1
+ SOJN T2,LMTMV3 ;MORE THAN ONE TEMPO
+ MOVE T2,TEMGY
+ SKIPL SLDPC(T2)
+ JRST LMTMV3
+ MOVE Q,TEMORG
+ MOVE J,TEMDIR
+ SKIPL @PBKDAG+1(I)
+ JRST LMTMV3 ;HIS P'S DONT CAPT THAT WAY
+ ADD Q,RDT(J)
+ SKIPGE BOARD(Q)
+ ERRTTY [ASCIZ /LOST AT LMTMV3/]
+ CAMN Q,TEMSQ
+ JRST LMTMV3
+ SKIPG T1,@LMTT1(I)
+ JRST LMTMV3 ;NOT ON BOARD OR NOT OCC
+ XCT LMTT2(I)
+ JRST LMTMV5 ;HIS P CAN INTERPOSE
+ JUMPN T1,LMTMV3
+ XCT LMTT3(I)
+ JRST LMTMV3 ;NOT ON HIS FORTH RANK
+ SKIPLE T1,@LMTT4(I)
+ XCT LMTT5(I)
+ JRST LMTMV3
+LMTMV5: SKIPE @LMGSTQ+1(I)
+ JRST LMTMV1
+LMTMV3: AOS NTMPMV
+ MOVSI T1,BTMPM
+ IORM T1,LMFORS ;TEMPO MV
+LMTMV1: SKIPN VTHRAC ;WANT THREATS ANSWERED, NOT COUNTERED.
+ SKIPN NHTHR(I)
+ JRST LMTMV2 ;HE HAS NO THREATS
+ MOVE ZR,OSTV
+ ADD ZR,SOSTV
+ JUMPE ZR,LMTMV2
+ SKIPL EGAIN
+ SKIPE UATHV
+ JRST LMTMV2
+ SKIPN ALOSS
+ SKIPE SLUATV
+ JRST LMTMV2
+ AOS NRPYMV ;MOVE THAT ANSWERS ALL AND MAINTAINS THREATS
+ MOVSI T1,BRPLY
+ IORM T1,LMFORS
+LMTMV2: SKIPGE MATTH
+ ADDI R,4000
+ RC FINAL: ICKF *U!ICKF GDMF=*U!GDMF, PUSH P,R
+ PUSH P,LMFORS ;RETURNED VALUE
+ PUSH P,POSNET
+ PUSH P,LGCLSW ;CLASS WORD
+ ADDM R,TEFAL
+ SKIPGE R,EGAIN
+ MOVEI R,0
+ ADD R,AGAIN
+ ADD R,SAGAIN
+ ADD R,DAGAIN
+ ADD R,SDAGN
+ ADD R,LSOSTV
+ ADD R,DSQGAIN
+ SKIPGE PCGMD
+ JRST LMFCC1
+ ADD R,SQGAIN ;DONT COUNT THESE IN PCG MODE?
+ ADD R,PGAIN
+ ADD R,IGAIN
+LMFCC1: ADD R,PCGT1 ;SHIFTED NET POS
+ SKIPGE RICKF
+ MOVEI R,100000
+ PUSH P,R ;MAX POSS GAIN
+ SKIPGE GDMF
+ AOS NSMVS
+ SKIPGE SASWL
+ JRST SASTO1 ;STORE STUFF
+SASTO2: MOVE A,LMAS
+ MOVE J,LMJS
+ MOVE Q,LMQS
+IFN KILLH,[
+ SKIPN AKHS
+ JRST CPOPJT
+ MOVE T2,LMGD
+ MOVE T1,-NWDPM+1(P)
+ CAMN T1,ABFTA(T2)
+ CAME T1,ABFTB(T2)
+]
+CPOPJT: POPJ T,
+IFN KILLH,[
+ MOVEI T1,4000 ;THIS MOVE CAUSED AB FLUSH IN PREV INVES
+ IORM T1,-NWDPM+2(P) ;MAKE IT VERY PLAUS
+ POPJ T,
+]
+
+
+LMTT1: BOARD+BW(Q)
+ BOARD-BW(Q)
+
+LMTT2: SKIPGE SNFBP-PIECE(T1)
+ SKIPGE LMGSTD-PIECE(T1)
+
+LMTT3: SKIPL 4RNKP(Q)
+ SKIPG 4RNKP(Q)
+
+LMTT4: BOARD+2*BW(Q)
+ BOARD-2*BW(Q)
+
+LMTT5: SKIPL SNFBP-PIECE(T1)
+ SKIPL LMGSTD-PIECE(T1)
+
+PCG1B: SKIPL EGAIN
+ SKIPE ALOSS
+ JRST PCG1A
+ SKIPN ALOSSC
+ SKIPE CEGAIN
+ JRST PCG1A ;COUNTERING DOESNT REALLY STOP THREATS
+ MOVE T1,POSNET
+ CAMGE T1,[-100]
+ JRST PCG1A ;INVOLVES SERIOUS POSITIONAL LOSS
+ LDB T2,[MPCLAB,,LGCLSW]
+ CAILE T2,DGNG-DGCLSB ;SKIP ON CLASS GOOD ENUF SO POSITIONAL NOT IMPORTANT
+ JUMPL T1,PCG1A ;INVOLVES POSITIONAL LOSS
+ SKIPE UATHV
+ ERRTTY [ASCIZ /LOSE AT PCG1B/]
+ SKIPE DFSAVE
+ JRST PCGD1 ;MOVE DEFENDING, CAN PC BE CAPTED?
+PCGD2: SKIPGE LMGT(B)
+ JRST PCG1D ;P MOVE
+ MOVE T1,GDNMAG ;AMOUNT AHEAD OF A,B OR 0 IF NOT
+ MOVE T2,SPINT(B)
+ CAIL T1,100
+ JUMPE T2,PCG1D ;PC NOT CONSTRAINED AND AHEAD OF A,B CUT BY 100
+ LDB T1,PCG1T(I)
+ JUMPE T1,PCG1D ;PC CAN NOT BE ATT BY OPPOSING P IN 1
+ PUSH P,A
+ SETOM PCG1TT
+ ADD A,PCG1T1(I) ;ONE SQ WHERE HIS P COULD GO TO ATTACK US
+PCG1J: SKIPE T1,BOARD(A)
+ JRST PCG1F2 ;NOT ON BOARD OR OCC
+PCG1F3: SKIPL BPCHD(A)
+ PUSHJ P,MCAFS
+ LDB T1,[BSQSP,,CNTRL(A)]
+ CAIE T1,MSQUC
+ CAIN T1,MSQE
+ JRST PCG1F1
+ XCT PCG1T2(I)
+ JRST PCG1F ;HE DOESNT CNTRL SQ
+PCG1G: SKIPG T2,@PCG1T3(I)
+ JRST PCG1H ;SQ ONE BEYOND THAT SQ VACANT OR OFF BOARD
+PCG1H1: SKIPL @PCG1T4(I) ;SQ OCC
+ JRST PCG1F ;BUT NOT HIS P
+ SKIPE TT,PINT-PIECE(T2) ;HIS P, IS IT PINNED OR CONSTRAINED?
+ JRST PCG1P ;HIS P PINNED
+PCG1P1: SKIPE TT,SPINT-PIECE(T2)
+ JRST PCG1C1
+PCG1E: POP P,A
+ JRST PCG1A ;CAN BE CHASED OFF BY P
+
+PCG1C1: LDB T1,[SPINCP,,1(TT)] ;HIS P WHICH COULD ATTACK US IS CONSTRAINED ..
+ JUMPE T1,PCG1C2
+ CAIE T1,(B) ;SKIP ON CAUSED BY PC BEING CHASED OFF
+ JRST PCG1C2
+ LDB T1,[SPINSQ,,(TT)] ;IS PC HOLDING CONSTRAINT?
+ MOVEI T2,MVDST
+PCG1C5: CAML T2,MVDMF
+ JRST PCG1C3
+ SKIPL (T2)
+ JRST PCG1C4
+ LDB ZR,[MVDCD,,(T2)]
+ CAIN ZR,MVDRLA
+ JRST PCG1C6
+PCG1C4: ADDI T2,NWMVE
+ JRST PCG1C5
+
+PCG1C6: LDB ZR,[MVDSQ,,(T2)]
+ CAME ZR,T1
+ JRST PCG1C4
+ JRST PCG1C7 ;RELEASING CONSTRAINT
+
+PCG1C3: MOVE ZR,@LMGST1+1(I)
+ SOJE ZR,PCG1F ;HE'S NOT RELEASING CONSTRAINT AND THIS IS ONLY PC HOLDING IT
+PCG1C2: LDB T1,[SPINVL,,(TT)]
+ SUB T1,PVALUE(B)
+ MOVE T2,LMAS
+ SKIPE @LMGST3+1(I)
+ ADDI T1,PWNV ;MIGHT RECAPTURE
+ JUMPG T1,PCG1F
+PCG1C7: HRRZ TT,1(TT)
+ JUMPN TT,PCG1C1
+ JRST PCG1E
+
+PCG1F2: CAIE T1,PIECE(B)
+ JRST PCG1F
+ JRST PCG1F3 ;VACATING SQ WITH THIS MOVE
+
+PCG1F1: SKIPE SPINT(B) ;EVEN OR UNCONTESTED
+ JRST PCG1G ;WE'RE CONSTRAINED, SO MAYBE HE CAN SAC P
+ SKIPL RPIECE(B)
+ SKIPGE DDPCS(B)
+ JRST PCG1F ;PC WILL COVER SQ
+ JRST PCG1G ;PC WONT COVER SQ SO P CAN MOVE THERE
+
+PCG1P: LDB ZR,[PINATP,,1(TT)]
+ CAIE ZR,(B)
+ JRST PCG1F
+ HRRZ TT,(TT)
+ JUMPN TT,PCG1F
+ JRST PCG1P1
+
+PCG1H: XCT 5RNKPA(I)
+ JRST PCG1F ;CAN NOT BE ATT BY ADV OF 2
+ SKIPLE T2,@PCG1T6(I)
+ JRST PCG1H1 ;ATT BY ADV OF 2?
+PCG1F: ADDI A,2 ;INCR TO OTHER SQ HIS P COULD ATT FROM
+ AOSN PCG1TT
+ JRST PCG1J
+PCG1X: POP P,A ;CANT BE CHASED BY P
+PCG1D: RC STOPS ALL, SETOM CANTK
+ SKIPL PCGMD
+ JRST PCG1C
+ PUSH P,R
+ PUSH P,Q
+ MOVE R,PCSATS ;CAN TAKE CURRENT VALUE
+ MOVE Q,R
+ XCT ABUPT(I)
+ XCT EVMT9A(I) ;NOT BPRVS BECAUSE IT WILL PRINT A B OVERLAP
+ ;(A B FLUSH WILL HAPPEN IN GOOD TIME)
+ POP P,Q
+ POP P,R
+PCG1C: SKIPL GDNATS
+ JRST PCG1A
+PCGA4: RC GOOD ENUF FOR PCG CUT,SKIPGE PCGMD
+ SETOM PCGCF ;CUTOFF FLAG (MUST RETURN TO PERMIT POSSIBLE UNCLOBERING OF DATA BASE
+ JRST PCG1A
+
+
+PCG1T: NPAS1,,BPAS(A)
+ NPAS1,,WPAS(A)
+
+PCG1T1: BW-1
+ -BW-1
+
+PCG1T2: CAIGE T1,MSQBD
+ CAILE T1,MSQWD
+
+PCG1T3: BOARD+BW(A)
+ BOARD-BW(A)
+
+PCG1T4: SNFBP-PIECE(T2)
+ LMGSTD-PIECE(T2)
+
+PCG1T6: BOARD+2*BW(A)
+ BOARD-2*BW(A)
+
+PCG1TT: 0
+
+PCGD1: SKIPN NHC ;HE CAN TRADE OFF DEFENCE
+ SKIPE TRDS
+ JRST PCG1A
+ JRST PCGD2
+
+SASTO1: MOVE T1,NHTHR(I)
+IFN NWTHE-2, IMULI T1,NWTHE
+IFE NWTHE-2, LSH T1,1
+ HRLM T1,@SAFSP ;# WDS IN THR SECT
+ ADD T1,MVDSP
+ SUBI T1,MVDST-NWOSMV-2
+ ADD T1,SAFSP
+ PUSHJ P,CRSIZC
+ MOVE T1,SAFSP
+ MOVEM T1,SATEM
+ HRRM T1,-NWDPM+5(P) ;STORE PNTR TO SAVE BLOCK
+ PUSH T1,-NWDPM+1(P) ;MOVE
+ MOVE T2,NHTHR(I)
+ JUMPE T2,SASTO3
+ MOVE C,HTHRP(I)
+SASTO4: REPEAT NWTHE, PUSH T1,.RPCNT+1(C) ;PUSH THREAT WDS
+ ADDI C,NWTHE
+ SOJG T2,SASTO4
+SASTO3: MOVEI C,0
+ MOVEI T2,MVDST
+SASTO7: CAML T2,MVDSP
+ JRST SASTO5
+ SKIPGE (T2)
+ JRST SASTO6
+REPEAT NWMVE, PUSH T1,.RPCNT(T2)
+ ADDI T2,NWMVE
+ AOJA C,SASTO7
+
+SASTO6: ADDI T2,NWMVE
+ JRST SASTO7
+
+SASTO5: IFE NWTHE-2,LSH C,1
+ IFN NWTHE-2,IMULI C,NWTHE
+ HRRM C,@SATEM
+ MOVEI T1,1(T1)
+ MOVEM T1,SAFSP
+ JRST SASTO2
+
+
+
+
+THAN1: SKIPN TT,NHTHR(I)
+ JRST THCB1
+ MOVE T2,HTHRP(I)
+ MOVSI C,BTHANS
+THANC5: ANDCAM C,2(T2) ;CLEAR ANSWERED BITS
+ ADDI T2,NWTHE
+ SOJG TT,THANC5
+THCB1: SKIPN NPPIN
+ JRST TPNL1
+ MOVE TT,MVDMF
+TPNL: CAML TT,MVDSP ;EVALUATE PINS
+ JRST TPNL1
+ LDB C,[MVDCD,,1(TT)]
+ CAIN C,MVDPIN
+ JRST TPN1 ;SEE IF REALLY PINNING, ETC
+TPN2: ADDI TT,NWMVE
+ JRST TPNL
+
+TPNL1: MOVSI TT,(SETZ)
+ MOVEI T2,MVDST-1 ;CLEAR MARKED OUT BITS IN LMGCD PART OF MVDST
+CMVDB2: CAML T2,MVDMF
+ JRST THOAU ;THRU WITH LMGCD PART
+ ANDCAM TT,1(T2) ;CLEAR BIT
+ LDB C,[MVDCD,,1(T2)] ;SEE IF RELEASING PIN NEUTRALIZED BY HOLDING PIN
+ CAIN C,MVDRPN
+ JRST THRP1 ;SEE IF REALLY RELEASING PIN (ON HIM)
+ CAIN C,MVDABN
+ JRST THBC1 ;SEE IF REALLY BREAKING CONSTRAINT
+ CAIN C,MVDRLA
+ JRST THRA1 ;SEE IF REALLY RELEASING ATTACK
+ CAIN C,MVDUBP
+ JRST THRUB1 ;SEE IF REALLY UNBLOCKING PASSED P
+ CAIN C,MVDRDF
+ JRST THRRD1 ;SEE IF REALLY RELEASING DEF
+ ;(ALSO MAYBE NOT REALLY SETTING UP DISCOVERY)
+THRRD2:
+THRUB2:
+THRA2:
+THBC2:
+THRP2: ADDI T2,NWMVE
+ JRST CMVDB2
+
+THOAU: SKIPN TT,@OTNPP(I)
+ JRST CMVDB1
+ MOVE T2,@OTRPP(I)
+ MOVSI C,BTHANS ;CLEAR ANSWERED BITS IN OUR OUTSTANDING THREATS
+THOC1: ANDCAM C,2(T2)
+ ADDI T2,NWTHE
+ SOJG TT,THOC1
+ MOVE TT,@OTNPP(I)
+ MOVE T2,@OTRPP(I)
+THOAU7: LDB D,[THRTS,,1(T2)] ;EVAL STATUS OF OUR THREATS AGAINST HIM
+ CAMN D,A
+ JRST THAX1 ;EXERCISING THREAT
+ LDB T1,[THRVAL,,1(T2)]
+ MOVEI J,0
+ LDB C,[THRTP,,1(T2)]
+ CAIN C,(B)
+ JRST THOAU3 ;MVING THREATNING PC
+THOAU4: LDB J,[THAUXP,,1(T2)]
+ JUMPE J,THOAU5
+THOAU6: LDB C,[THAXPC,,THAUXT(J)]
+ CAIN C,(B)
+ JRST THOAU3
+THOAUD: SKIPL THAUXT(J)
+ AOJA J,THOAU6
+THOAU5: MOVE C,2(T2)
+ TLNN C,200000
+ JRST THOAU8
+ CAMLE T1,LSOSTV ;STRONG
+ MOVEM T1,LSOSTV
+ ADDM T1,SOSTV
+ JRST THOAU2
+
+THOAU8: CAMLE T1,LOSTV
+ MOVEM T1,LOSTV
+ ADDM T1,OSTV
+THOAU2: ADDI T2,NWTHE
+ SOJG TT,THOAU7
+CMVDB1: CLEARM TACNTP ;PNTR TO ATTACK CONSTRAINT TBL
+ MOVE TT,MVDMF ;LOOK THRU MVDST OF THIS MOVE
+ AOS TT
+TAT1: CAML TT,MVDSP
+ JRST TAT2
+ SKIPGE D,(TT)
+ JRST TAT4 ;ENTRY CANCELLED
+ LDB C,[MVDCD,,D]
+ CAIN C,MVDAT
+ JRST TAT3 ;ATTACK
+ CAIN C,MVDDEF
+ JRST DFSQ1 ;DEFENCE, HACK SQUARE CONTROL ONLY
+ CAIN C,MVDSD
+ JRST TDS1 ;SETTING UP DISCOVERY
+TAT4: ADDI TT,NWMVE
+ JRST TAT1
+
+
+THOAU3: MOVEI Q,MVDST-1 ;MOVING PC INVOLVED IN THREAT
+THOAUC: CAML Q,MVDMF ;SEE IF ATT ON THREAT SQ RELEASED
+ JRST THOAUB
+ SKIPGE 1(Q)
+ JRST THOAU9
+ LDB ZR,[MVDCD,,1(Q)]
+ CAIE ZR,MVDRLA
+ JRST THOAU9
+ LDB ZR,[MVDSQ,,1(Q)]
+ CAMN ZR,D
+ JRST THOAUA
+THOAU9: ADDI Q,NWMVE
+ JRST THOAUC
+
+
+THOAUB: JUMPN J,THOAUD ;NOT RLSING ATT
+ SKIPLE LRCCOD ;MVING PC GOING TO GET CAPTED?
+ JRST THAX1
+ JRST THOAU4
+
+THOAUA: JUMPE J,THAX1 ;RLSING ATT
+ LDB ZR,[THAXV,,THAUXT(J)]
+ SUB T1,ZR
+ JUMPG T1,THOAUD
+THAX1: MOVSI C,BTHANS ;NOT REALLY OUTSTANDING IN THIS LINE SO SET ANSWERED BIT
+ IORM C,2(T2)
+ JRST THOAU2
+
+
+TAT2: SKIPN TRDS
+ SKIPE DTRDS
+ JRST TATT2 ;DECIDE WHAT TO DO ABOUT TRADES
+TATT3: SETOM STPALL
+ CLEARM PUATHV
+ CLEARM PSLUAT
+ MOVE T2,HTHRP(I)
+ SKIPN TT,NHTHR(I)
+ JRST THAN2 ;HE HAS NO THREATS
+ CLEARM 3LUAT
+ CLEARM P3LUAT
+ CLEARM 4LUAT
+ CLEARM P4LUAT
+THAN3: LDB S,[THRRL,,2(T2)]
+ LDB C,[THRVAL,,1(T2)]
+ LDB T1,[THRTP,,1(T2)] ;IF HE TAKES THIS, HE CANT TAKE THAT ONE
+ MOVEM C,TTLTVI ;INITIAL VAL
+ MOVEM C,THTVAT ;UNANSWERED VALUE THIS SUBTHREAT
+ CLEARM THVTAS
+ MOVE T1,CCA
+ MOVEM T1,CCAL
+ JUMPN S,THAN3B ;ONE OF MULTIPLE ON SAME PC
+ CLEARM THSMUA ;LARGEST AMT SUBTHREAT UNANSWERED BY
+ MOVEM C,THLST ;LARGEST THREAT
+ CLEARM TMLTPO ;LARGEST TEMPO OF UNANSWERED SUBTHREAT
+ CLEARM TMVTRC ;MAX AMT COUNTERED
+THAN3A: CLEARM THAIDF ;"INADEQUATE DEFENCE" FLAG (THIS THREAT)
+ HRRZ C,2(T2)
+ MOVEM C,TMLTPO
+ MOVSI T1,BTHANS
+ TDNE T1,2(T2)
+ JRST THANR ;THREAT ALREADY ANSWERED
+ LDB C,[THRCD,,1(T2)] ;EXAMINE THREAT
+ JRST @THANDT(C)
+
+THANDT: JRST THANC ;CAPTURE THREAT
+ JRST THANMA ;MULT ATTACK THREAT
+ JRST THANM ;MATE THREAT
+ JRST THSA ;STRONG ATT ON PINNED OR TRAPPED PIECE
+ JRST THANC ;TRADE WHEN BEHIND OR MINOR EXCH
+ JRST TPPA ;PUSH PASSED P
+THANMA:THANM:THSA: REPEAT 2,JRST 4,.
+
+THAN3B: CAMLE C,THLST
+ MOVEM C,THLST
+ JRST THAN3A
+
+
+
+THANC: LDB D,[THRTS,,1(T2)] ;CAPT THREAT
+ MOVE D,BOARD(D)
+ CAIN D,PIECE(B) ;D HAS PIECE THREATNED
+ JRST THANR ;MOVING THREATNED PIECE
+ CAMN A,GHLOC
+ SKIPL LMGT(B)
+ JRST THNC1
+ MOVE S,@LMGR6T(I) ;EN PASSENT CAPT
+ JRST THNC2
+THNC1: SKIPN S,BOARD(A)
+ JRST THANC1 ;NO CAPTURE
+THNC2: LDB ZR,[THRTP,,1(T2)]
+ CAIN ZR,-PIECE(S)
+ JRST THANR ;CAPTURING PIECE POSING THREAT
+ LDB C,[THAUXP,,1(T2)] ;CAPT SECONDARY ATTACKER?
+ JUMPE C,THANC1 ;WONT HELP
+THNC3: LDB ZR,[THAXPC,,THAUXT(C)]
+ CAIN ZR,-PIECE(S)
+ JRST THNC4 ;YES SEE HOW MUCH IT HELPS
+ SKIPL THAUXT(C) ;END OF ENTRY FOR THREAT?
+ AOJA C,THNC3
+THANC1: MOVEI S,MVDST
+THANC3: CAML S,MVDSP
+ JRST THANC2
+ SKIPGE C,(S)
+ JRST THANC4 ;ENTRY CANCELLED
+ LDB ZR,[MVDCD,,C]
+ CAIN ZR,MVDINT
+ JRST THANC6 ;INTERPOSING?
+ CAIN ZR,MVDTHU
+ JRST THDU1 ;DEFENDING THRU?
+ CAIN ZR,MVDDEF
+ SKIPN DEFVL-PIECE(D)
+ JRST THANC4 ;DEFENDING NO GOOD
+ LDB ZR,[MVDSQ,,C] ;DEFENCE
+ LDB C,[THRTS,,1(T2)]
+ CAMN ZR,C ;DEFENDING SAME SQUARE?
+ JRST THDF1 ;DEFENDING
+THANC4: ADDI S,NWMVE
+ JRST THANC3
+
+THDF1: SKIPN NINTP
+ JRST THANR3
+ MOVE J,MVDMF ;ALSO INTERPOSING, REALLY GETTING PINNED
+THDF4: CAML J,MVDSP
+ JRST THANR3
+ LDB ZR,[MVDCD,,1(J)]
+ CAIN ZR,MVDINT
+ JRST THDF2
+THDF3: ADDI J,NWMVE
+ JRST THDF4
+
+THDF2: LDB C,[MVDPC,,1(J)]
+ LDB ZR,[THRTP,,1(T2)]
+ CAMN C,ZR
+ JRST THDF3
+ LDB C,[MVDPC2,,1(J)]
+ SKIPGE RPIECE(C)
+ JRST THDF5 ;INTERPOSING TO K
+ MOVN C,2(J)
+ ADD C,THTVAT
+ JUMPLE C,THDF5
+ CAMGE C,1(S)
+ RC REVAL DEF OF *M!D TO MAX OF *U!C BECAUSE INTERPOSING,MOVEM C,1(S)
+ JRST THDF3
+
+THDF5: RC IGNORE DEF OF *M!D BECAUSE INTERPOSING, CLEARM 1(S)
+ JRST THANC4
+
+TACC1: LDB C,[THRTP,,1(T2)] ;LOOK THRU ATTACK CONSTRAINT TBL
+TACC4: HLRZ ZR,TACTB-2(S)
+ CAMN ZR,C
+ JRST TACC3
+TACC5: SUBI S,2
+ JUMPN S,TACC4
+ JRST TACC2
+
+
+TACC3: LDB ZR,[PTID,,PIECE(C)]
+ SOJLE ZR,TACC3A ;P OR N WILL NOT HOLD
+ MMSAVAC
+ MOVE B,C
+ HRRZ S,TACTB-2(S)
+ CLEARM CCANF1
+ PUSHJ P,@LGLMPT(B)
+ SETOM CCANF1 ;DOESNT HOLD
+ MMRSAC
+ SKIPL CCANF1
+ JRST TACC5 ;DOES HOLD
+TACC3A: MOVE J,TACTB-2+1(S)
+ JSP Q,FTHC
+ JRST TACC5
+
+
+THNC4: LDB J,[THAXV,,THAUXT(C)] ;CAPT SEC ATTACKER
+ JSP Q,FTHA
+ JRST THANC1
+
+THANC6: LDB ZR,[MVDSQ,,(S)] ;INTERPOSING?
+ LDB C,[THRTS,,1(T2)]
+ CAME ZR,C
+ JRST THANC4 ;NOT RIGHT SQ
+ LDB C,[THRTP,,1(T2)]
+ LDB ZR,[MVDPC,,(S)]
+ CAMN ZR,C
+ JRST THINT1 ;PIECE BLOCKED, THREAT ANSWERED UNLESS LOOSE AND ...
+ LDB C,[THAUXP,,1(T2)] ;BLOCKING A SECONDARY ATTACKER, WILL THIS HELP?
+ JUMPE C,THANC4 ;NO
+ MOVEM S,THANCT
+THANC8: LDB S,[THAXPC,,THAUXT(C)]
+ CAMN ZR,S
+ JRST THANC7 ;FOUND A BLOCKAGE
+ SKIPL THAUXT(C)
+ AOJA C,THANC8 ;NOT LAST ENTRY FOR THREAT
+THANC9: MOVE S,THANCT
+ JRST THANC4 ;BLOCKING THAT GUY DOESNT HELP
+
+THANC7: LDB J,[THAXV,,THAUXT(C)]
+ JSP Q,FTHA ;AMT ANSWERED IN J
+ JRST THANC9
+
+
+THINT1: SKIPN BOARD(A)
+ SKIPL EGAIN
+ JRST THANR ;CAPT OR NOT LOOSE
+ MOVE C,NHC
+ SOJN C,THANR ;NOT COMPLETELY LOOSE
+ SKIPGE HCL
+ SKIPE NDA
+ JRST THANR ;NOT COMPLETELY LOOSE OR MAYBE DISCOVERED HACKS
+ SKIPE RUMVLU
+ JRST THANR ;MAKING ROOM
+ JRST THANC4 ;NONE OF THE ABOVE
+
+THANC2: CLEARM STPALL
+ MOVE S,THTVAT ;THREAT NOT COMPLETELY ANSWERED, IS IT COUNTERED (BY HIS NECC RECAPTING ACTION)?
+ MOVEM S,THVTAS
+ SKIPL HCL
+ JRST THCNT2
+ HRRZ S,TMLTPO ;TEMPO VAL OF HIS THREAT
+ SUB S,CCAL ;AMT HE NEEDS TO RECAPT TO GET EGAIN
+ JUMPGE S,THCNT2
+ CLEARM TMLTPO
+ MOVN J,S
+ JSP Q,FTHC ;AMT COUNTERED
+THCNT2: SKIPE S,TACNTP
+ JRST TACC1 ;SEE IF PC CONSTRAINTED BY ATTACK
+TACC2: SKIPGE RICKF
+ JRST THNCC
+THNCC1: SKIPE THAIDF
+ JRST THID1 ;INADEQUATE DEFENCE AND THREAT NOT ANSWERED
+THID2: MOVE S,THTVAT ;FAILS TO COMPLETELY ANSWER THREAT
+ CAMLE S,THSMUA
+ MOVEM S,THSMUA
+ ADDM S,AUATHV ;VALUE OF ALL UNANSWERED THREATS
+ MOVE T1,TMLTPO
+ CAMLE T1,UALTPO
+ MOVEM T1,UALTPO
+THANR1: MOVE T1,TTLTVI
+ SUB T1,THVTAS ;THTVAT AT START OF COUNTERING ANALSYS
+ ADDM T1,CMTHRA ;COMPONENT PART ANSWERED
+ MOVE T1,THVTAS
+ SUB T1,THTVAT
+ ADDM T1,VTHRAC ;COMPONENT PART COUNTERED
+ CAMLE T1,TMVTRC
+ MOVEM T1,TMVTRC
+ ADDI T2,NWTHE ;INCR TO NEXT THREAT
+ LDB T1,[THRRL,,2(T2)]
+ CAIE TT,1
+ JUMPN T1,THANR2
+ MOVE S,THLST ;LAST THREAT OF GROUP
+ SUB S,THSMUA
+ ADDM S,VTHRA
+ MOVE S,THSMUA
+ MOVE T1,UALTPO
+ CAMLE S,UATHV
+ MOVEM T1,UALTPO
+ LDB T1,[THRTP,,1-NWTHE(T2)]
+ SKIPL 2-NWTHE(T2)
+ MOVEI T1,0 ;PC CAUSING THREAT OR 0 IF COMPLICATED
+ CAMG S,UATHV
+ JRST THUA1
+ EXCH S,UATHV
+ EXCH T1,PUATHV
+THUA1: CAMG S,SLUATV
+ JRST THUA2
+ EXCH S,SLUATV
+ EXCH T1,PSLUAT
+THUA2: CAMG S,3LUAT
+ JRST THUA3
+ EXCH S,3LUAT
+ EXCH T1,P3LUAT
+THUA3: CAMG S,4LUAT
+ JRST THUA4
+ EXCH S,4LUAT
+ EXCH T1,P4LUAT
+THUA4: MOVE S,THSMUA
+ LDB T1,[THANS,,2-NWTHE(T2)]
+ JUMPN T1,THANR4 ;THREAT COMPLETELY ANSWERED
+ LDB T1,[THRTS,,1-NWTHE(T2)]
+ SKIPG T1,BOARD(T1)
+ JRST THANR4
+ MOVE T1,PVALUE-PIECE(T1) ;TOTAL VALUE OF PC THREATNED
+ LDB ZR,[THRVAL,,1-NWTHE(T2)] ;ORIG VAL OF THREAT
+ SUB T1,ZR
+ CAMG T1,RCTHR ;US ESCAPING WITH THIS LOSS DEPENDS ON RECAPTING
+ JRST THANR4
+ MOVE Q,MVDMF ;IF BREAKING CONSTRAINT TO SAME SQ, DONT HACK RCTHR
+TCBC1: CAML Q,MVDSP
+ JRST TCBC2
+ SKIPGE 1(Q)
+ JRST TCBC3
+ LDB J,[MVDCD,,1(Q)]
+ CAIE J,MVDABN
+ JRST TCBC3
+ LDB J,[THRTS,,1-NWTHE(T2)]
+ LDB ZR,[MVDSQ,,1(Q)]
+ CAMN J,ZR
+ JRST THANR4 ;FOUND BREAKING CONSTRAINT, DONT DOUBLE COUNT
+TCBC3: ADDI Q,NWMVE
+ JRST TCBC1
+
+THID1: AOS NIDF
+ MOVE ZR,THAIDS
+ MOVEM ZR,IDFSQ
+ JRST THID2
+
+TCBC2: MOVEM T1,RCTHR ;OTHERWISE WE LOSE T1 ADDTL
+THANR4: MOVN T1,TMVTRC
+ ADDM T1,CCA ;THIS AMT USED UP
+ SKIPGE CCA
+ CLEARM CCA
+THANR2: SOJG TT,THAN3 ;EXAMINE OTHER THREATS
+THUAS3: SKIPE T1,PSLUAT ;MAKE SURE NO TWO THREATS COMPLETELY CAUSED BY SAME PC
+ JRST THUAS1
+THUAS2:
+THAN2: MOVEI S,MVDST
+THATA: CAML S,MVDSP ;EVALUATE IMPORTANCE OF OUR ATTACKS
+ JRST HFCAN ;NOW EVALUATE IMPORTANCE OF HIS ATTACKS
+ SKIPGE TT,(S)
+ JRST THATA1
+ LDB C,[MVDCD,,TT]
+ ;EVAL IMPORT OF RELEASE PINS
+ CAIN C,MVDROP ;MOVING BASE PC
+ JRST THRLP2
+ CAIN C,MVDRPI ;INTERPOSING
+ JRST THRLP1
+ CAIN C,MVDDBP ;DEFEND BASE PC
+ JRST THRLP5
+ CAIN C,MVDAPP
+ JRST TEAP1 ;ATTACKING PINNED PC
+ CAIE C,MVDAT ;ATTACK
+ JRST THATA1
+ MOVSI ZR,(MVSAB)
+ SKIPN RICKF
+ TDNE ZR,(S)
+ JRST THATA1 ;STRONG THREAT OF CHECK, DONT WORRY ABT CONSTRAINTS OR THREATS
+ LDB D,[MVDSQ,,TT]
+ SKIPG D,BOARD(D) ;PIECE BEING ATTACKED
+ JRST THATA5 ;REALLY ONLY ATTACKING UNOCC SQUARE
+ SKIPN TT,NHTHR(I)
+ JRST THATA5
+ MOVE T2,HTHRP(I) ;CHECK HIS THREATS
+THATA3: LDB ZR,[THRTP,,1(T2)]
+ CAIN ZR,-PIECE(D)
+ JRST THATA2 ;ATTACKING HIS PIECE WHICH HAS THREAT
+THATA4: ADDI T2,NWTHE
+ SOJG TT,THATA3
+THATA5: SKIPE NCB
+ JRST THAC1 ;SEE IF ATTACKING PC WHICH IS CAUSING CONSTRAINT WE BROKE
+THAC2:
+THATA1:
+TEAP2: ADDI S,NWMVE
+ JRST THATA
+
+
+THNCC: LDB D,[THRTP,,1(T2)] ;CHECK, THREAT REALLY VALID?
+ SKIPGE RPIECE(D)
+ JRST THNCC1 ;THREAT BY K
+ MOVE J,THTVAT
+ SOS J ;SO THREAT WONT BE "STOPPED"
+ JSP Q,FTHA
+ JRST THNCC1
+
+THUAS1: CAME T1,PUATHV
+ JRST THUAS2 ;LARGEST AND SECOND CAUSED BY DIFFERENT PCS
+ MOVE S,4LUAT ;LARGEST AND SECOND CAUSED BY SAME PC
+ MOVE T1,P4LUAT
+ CLEARM 4LUAT
+ CLEARM P4LUAT
+ EXCH S,3LUAT
+ EXCH T1,P3LUAT
+ EXCH S,SLUATV
+ EXCH T1,PSLUAT
+ JRST THUAS3
+
+
+TPPA: LDB D,[THRTS,,1(T2)] ;ANSWERING THREAT TO PUSH PASSED P?
+ CAIN D,(A)
+ JRST THANR
+ SKIPN S,BOARD(A)
+ JRST TPPA1
+ LDB ZR,[THRTP,,1(T2)]
+ CAIN ZR,-PIECE(S)
+ JRST THANR
+TPPA1: MOVEI S,MVDST
+TPPA3: CAML S,MVDSP
+ JRST THANC2
+ SKIPGE C,(S)
+ JRST TPPA5
+ LDB C,[MVDCD,,C]
+ CAIE C,MVDDSQ
+ CAIN C,MVDGSQ
+ JRST TPPA4
+TPPA5: ADDI S,NWMVE
+ JRST TPPA3
+
+TPPA4: LDB C,[MVDSQ,,(S)]
+ CAMN C,D
+ JRST THANR
+ JRST TPPA5
+
+THRLP2: LDB T2,[MVDDIR,,(S)] ;MOVING BASE PIECE, TO SAME LINE?
+ MOVE C,PIECEL(B)
+ LDB ZR,BDLNC(T2)
+ LDB D,LMUAT(T2)
+ CAMN ZR,D
+ JRST THRLP3 ;MOVING TO SAME LINE
+THRLP1: MOVEI ZR,0 ;ZR HAS VAL TO BE SUBTRACTED TO AVOID COUNTING DEFENCE TWICE
+THRLP6: LDB C,[MVDSQ,,(S)] ;SQ OF PINNED PC
+ SKIPG D,BOARD(C)
+ ERRTTY [ASCIZ /LOSE AT THRLP1/]
+ SUBI D,PIECE
+ MOVEI T2,10
+ SKIPGE LMGT(D)
+ JRST THRLP4
+ MOVE T2,PVALUE(D)
+ ASH T2,-3
+ LDB TT,THRLPT(I)
+ SKIPE TT
+ ADDI T2,100 ;CAN BE ATT BY P IN ONE MV
+THRLP4: SUB T2,ZR ;DONT COUNT TWICE FOR DEFENDING
+ SKIPGE T2
+ MOVEI T2,0
+ MOVEM T2,1(S) ;STORE VALUE FOR RELEASING PIN
+ JUMPLE T2,THATA1
+ SKIPN T2,NMP ;CHECK MV PREP TBL TO SEE IF SETTING UP THREAT
+ JRST THATA1 ;NO ENTRIES IN MV PREP TBL
+ MOVE TT,MPBAS
+THRMP1: LDB ZR,[MPTYP,,1(TT)]
+ JUMPN ZR,THRMP2 ;NOT RLS PIN TO SET THIS ONE UP
+ HRRZ J,1(TT) ;PNTR TO PIN TO BE RLSED TO ACTIVATE THREAT
+ LDB ZR,[PINOPS,,1(J)]
+ CAME ZR,C
+ JRST THRMP2 ;NOT RELEASING PIN ON RIGHT SQUARE
+ LDB Q,[MPTHN,,1(TT)]
+ ADD Q,@OTRPP(I) ;GET PNTR TO OUR THREAT (CONTAINED IN (Q),1(Q)
+ MOVSI ZR,BTHANS
+ TDNE ZR,1(Q)
+ JRST THRMP2 ;NOT THREATNED ANY MORE
+ MOVSI ZR,MVDPRP_MVDSFT
+ DPB C,[MVDSQ,,ZR]
+ AOS MVDSP
+ MOVEM ZR,@MVDSP
+ MOVE C,1(Q)
+ LDB ZR,[THRVAL,,(Q)]
+ SKIPL (J) ;SKIP ON PIN TO K
+ TLNE C,THSTR ;STRONG THREAT
+ JRST .+2
+ LSH ZR,-1
+ AOS MVDSP
+ MOVEM ZR,@MVDSP ;STORE VALUE
+
+THRMP2: AOS TT
+ SOJG T2,THRMP1
+ JRST THATA1
+
+THRLP5: MOVE D,MVDMF ;DEF BASE PC, FIND CORRESP DEFENCE
+THLP5A: CAML D,MVDSP
+ ERRTTY [ASCIZ /LOSE AT THLP5A/]
+ LDB C,[MVDCD,,1(D)]
+ CAIE C,MVDDEF
+ JRST THLP5B
+ LDB C,[MVDPC2,,1(D)]
+ LDB ZR,[MVDPC2,,(S)]
+ CAME C,ZR
+ JRST THLP5B
+ LDB C,[MVDPC,,1(D)]
+ LDB ZR,[MVDPC,,(S)]
+ CAME C,ZR
+ JRST THLP5B
+ SKIPGE 1(D) ;FOUND CORRESP DEF
+ JRST THRLP3 ;ITS CANCELLED
+ MOVE ZR,2(D)
+ JRST THRLP6
+
+THLP5B: ADDI D,NWMVE
+ JRST THLP5A
+
+THRLP3: MOVSI ZR,(SETZ)
+ IORM ZR,(S)
+ JRST THATA1
+
+THRLPT: NPAS1,,BPAS(C)
+ NPAS1,,WPAS(C)
+
+THATA2: LDB ZR,[THANS,,2(T2)]
+ JUMPN ZR,THATA4 ;THIS THREAT ANSWERED BY OTHER ASPECTS OF MOVE
+ MOVSI ZR,(MVWAB) ;REDUCE VALUE OF ATTACK
+ MOVE C,NTMPS
+ CAIGE C,2 ;TOO COMPLICATED- INVESTIGATE
+ RC *M!D POSES THREAT, IORM ZR,(S)
+ JRST THATA1
+
+THAC1: MOVEI T2,MVDST-1
+THAC3: CAML T2,MVDMF
+ JRST THAC2
+ SKIPGE 1(T2)
+ JRST THAC4
+ LDB C,[MVDCD,,1(T2)]
+ CAIN C,MVDABN
+ JRST THAC5
+THAC4: ADDI T2,NWMVE
+ JRST THAC3
+
+THAC5: LDB C,[MVDPC,,1(T2)]
+ CAIE C,-PIECE(D)
+ JRST THAC4
+ MOVSI ZR,(MVWAB)
+ RC *M!D CAUSING CONSTRAIN THAT IM BREAKING,IORM ZR,(S)
+ JRST THATA1
+
+HFCAN: SKIPL RICKF ;SKIP ON CHECK
+ JRST MICAN ;MOVE NOT CHECK
+ MOVE TT,CKPC ;CHECKING PC
+ CAIE TT,(B)
+ JRST HFCN6 ;DISCOV
+ SKIPE NHC
+ JRST HFCNX ;CAN CAPT
+HFCN6: MOVE A,@OKINGT+1(I) ;HIS K LOCN
+ CLEARM HFCTMP
+ SKIPL SLDPC(TT)
+ JRST HFCN8 ;NOT SLIDING, NO "SHADOW" PROBLEMS
+ MOVE J,CKDIR
+ MOVE T1,A
+ ADD T1,RDT(J)
+ MOVEM T1,HFCTMP ;HE CANT MOVE K HERE (WOULD BE SHADOW)
+HFCN8: HRROI Q,HFCN1 ;SEE IF MATE
+ PUSHJ T,LMKING
+ SKIPL SLDPC(TT) ;NO K MVS, INTERPOSE POSSIBLE?
+ JRST HFCN4
+ MOVE J,CKDIR
+ MOVE A,LMAS
+ CAIE TT,(B)
+ MOVE A,PIECEL(TT) ;DISCOVERED
+HFCI3: ADD A,RDT(J)
+ CAMN A,@OKINGT+1(I)
+ JRST HFCN4 ;NO INTERPOSE
+ MOVSI S,-16.
+HFCI1: LDB T1,RDAT(S)
+ JUMPE T1,HFCI2
+ XCT RMOY4+1(I)
+ JRST HFCI2 ;OUR GUY
+ SKIPL RPIECE(T1)
+ SKIPGE LMGT(T1)
+ JRST HFCI2 ;P ONLY ATTS
+ SKIPN PINT(T1)
+ SKIPE SPINT(T1)
+ JRST HFCI2
+ MOVE T2,PVALUE(T1)
+ CAMLE T2,PVALUE(B)
+ JRST HFCI2
+ MOVE T2,PIECEL(T1)
+ CAMN T2,LMAS
+ JRST HFCI2 ;THIS PC CAPTED
+ MOVE T2,@LMGST+1(I)
+ SOJE T2,HFCI2
+ CAML T2,@LMGST(I)
+ JRST HFCNX ;CAN INTERPOSE
+HFCI2: AOBJN S,HFCI1
+ JRST HFCI3
+
+HFCN4: SETOM MATTH
+HFCNX: MOVE A,LMAS
+ MOVEI S,MVDST-1 ;CHECK SO DISREGARD NEG FACTORS
+HFCAN1: CAML S,MVDSP
+ JRST MICAN
+ LDB C,[MVDCD,,1(S)]
+ CAIE C,MVDBDF
+ CAIN C,MVDHA
+ JRST HFCAN2
+ CAIN C,MVDABN
+ JRST HFCAN4
+HFCAN3: ADDI S,NWMVE
+ JRST HFCAN1
+
+
+HFCNR: POP T,S
+ POP T,2(S)
+ POPJ T,
+
+HFCAN4: PUSH T,2(S) ;RESTORE AFTER DONE SINCE THIS IS IN CONSTANT AREA
+ PUSH T,S
+ PUSH T,[HFCNR]
+HFCAN2: SKIPL 2(S)
+ JRST HFCAN3
+ MOVNI TT,1
+ RC CHECK SO DISREGARD NEG ASPECTS,MOVEM TT,2(S)
+ JRST HFCAN3
+
+
+HFCN1: SKIPL D,BOARD(A)
+ CAMN A,HFCTMP ;SKIP IF NOT TO SHADOW
+ POPJ T,
+ JUMPE D,HFCN2
+ XCT OURGY(I)
+ POPJ T, ;HIS GUY THERE
+HFCN2: MOVE T1,@LMGST(I)
+ JUMPE T1,HFCN3
+ SOJG T1,CPOPJT
+ MOVEI S,MVDST ;ONE ATT, COVERED UNLESS RELEASED
+HFCN5: CAML S,MVDSP
+ POPJ T, ;NOT RLSED
+ SKIPGE (S)
+ JRST HFCN9
+ LDB C,[MVDCD,,(S)]
+ CAIN C,MVDRLA
+ JRST HFCN7
+HFCN9: ADDI S,NWMVE
+ JRST HFCN5
+
+HFCN7: LDB C,[MVDSQ,,(S)]
+ CAME C,A
+ JRST HFCN9
+HFCN3: MOVE S,MVDMF ;NOT COVERED, SEE IF ALSO COVERED BY THIS MV
+HFCN3D: CAML S,MVDSP
+ JRST HFCN3A
+ SKIPGE 1(S)
+ JRST HFCN3B
+ LDB C,[MVDCD,,1(S)]
+ CAIN C,MVDAT
+ JRST HFCN3C
+HFCN3B: ADDI S,NWMVE
+ JRST HFCN3D
+
+HFCN3C: LDB C,[MVDSQ,,1(S)]
+ CAMN C,A
+ POPJ T,
+ JRST HFCN3B
+
+HFCN3A: SUB T,[2,,2] ;HAVE K MV
+ JRST HFCNX
+
+
+MICAN: MOVE T1,DPIV ;VALUE OF HIS CONSTRAINT IGNORED AT CCAN
+ MOVEM T1,BCONGN
+ SKIPGE T1,NDPI
+ JRST MVAN
+MICAN3: HRRZ ZR,MVDSP
+ MOVSI TT,MVDFHI_MVDSFT
+ TRO TT,MVDDIB ;INDICATE "DISCOVERED" (IE NON-DIRECT ATTACKING ACTION)
+ DPB B,[MVDPC2,,TT]
+ MOVE T2,DPIGT(T1)
+ JUMPL T2,MICAN1 ;CONTRAINT WD
+ RC IG PIN *Y!T2,LDB J,[PINOPS,,1(T2)]
+ SKIPE J,BOARD(J)
+ SUBI J,PIECE
+ DPB J,[MVDPC,,TT]
+ LDB J,[PINBS,,1(T2)]
+ DPB J,[MVDSQ,,TT]
+ SKIPLE LRCCOD
+ TLO TT,(MVSAB)
+ PUSH ZR,TT
+ MOVE TT,2(T2)
+MICAN4: PUSH ZR,TT
+ HRRZM ZR,MVDSP
+MICAN2: SOJGE T1,MICAN3
+
+MVAN: SKIPE NHC
+ JRST MPTRP2
+ SKIPE PTRPC
+ JRST MPTRP1
+MPTRP2: MOVEI D,MVDST-1
+MVAN1: CAML D,MVDSP
+ JRST MVCD1
+ SKIPGE TT,1(D) ;SKIP ON NOT NEGATED
+ JRST MVAN2
+ LDB C,[MVDCD,,TT]
+ MOVE T1,2(D) ;VALUE OF FROB
+ SKIPN S,THRUTB(C)
+ JRST MVAN2 ;IGNORE
+ JUMPL S,MVAN3
+ TLNE TT,(MVWAB)
+ JRST MVAN4A
+ TLNE TT,(MVSAB)
+ JUMPN T1,MVAN4 ;STRONG THREAT
+ HRRZ ZR,S
+ CAIN ZR,AGAIN
+ JUMPN T1,MVAN5 ;AGAIN, DECIDE IF PUT IN AGAIN CHAIN
+ CAIN ZR,SQGAIN
+ JRST MVAN6C
+MVAN6: ADDM T1,(S)
+MVAN2: ADDI D,NWMVE
+ JRST MVAN1
+
+MVAN6C: TRNE TT,MVDDIB
+ HRRI S,DSQGAIN ;"DISCOVERED" SO INTO DSQGAIN INSTEAD
+ JRST MVAN6
+
+MVAN5: TLNE S,200000 ;VAR=AGAIN
+ JRST MVAN7
+ PUSHJ P,AGNC2 ;ADD ONLY TO "20 LOG TERMS OF AGAIN"
+ JRST MVAN6
+
+
+MVAN7:
+MVAN6A: TDNN TT,[MVDAB MVDDIB]
+ JRST MVAN6B
+ ADDM T1,DAGAIN
+ PUSHJ P,AGNC
+ JRST MVAN2
+
+MVAN6B: PUSHJ P,AGNC
+ PUSHJ P,AGNC2
+ JRST MVAN6
+
+MVAN3: PUSHJ P,(S) ;DISP TO ROUTINE ASSOC
+ JRST MVAN2
+
+MVAN4: TDNE TT,[MVDAB MVDDIB] ;STRONG THREAT
+ JRST MVAN4B ;NON DIRECT ATTACK
+ ADDM T1,SAGAIN
+ JRST MVAN2
+
+MVAN4A: ADDM T1,PGAIN ;WEAK THREAT
+ JRST MVAN2
+
+MVAN4B: ADDM T1,SDAGN
+ JRST MVAN2
+
+MVCD1D: SKIPL RCCOD ;TGAIN .NE. 0,PUT IT INTO CHAIN?
+ JRST MVCD1E
+ PUSHJ P,AGNC ;YES
+ PUSHJ P,AGNC2
+ JRST MVCD1E
+
+MICAN1: RC IG *X!T2,LDB J,[SPCCN,,(T2)]
+ DPB J,[MVDPC,,TT]
+ LDB J,[SPINSQ,,(T2)]
+ DPB J,[MVDSQ,,TT]
+ SKIPLE LRCCOD
+ TLO TT,(MVSAB)
+ PUSH ZR,TT
+ LDB TT,[SPINVL,,(T2)]
+ JRST MICAN4
+
+AGNC: CAMLE T1,LAGN ;ADD TO AGAIN CHAIN (AS WELL AS TO "TERMS OF GAIN")
+ JRST AGNC1
+ CAMLE T1,SLAGN
+ MOVEM T1,SLAGN
+ POPJ P,
+
+
+AGNC2: PUSH P,T1
+ PUSHJ P,ALOG
+ .OP FDVR 20.0 2.714
+ ADDM T2,20LAGN
+ POP P,T1
+ POPJ P,
+
+AGNC1: MOVE T2,LAGN
+ MOVEM T2,SLAGN
+ MOVEM T1,LAGN
+ POPJ P,
+
+
+MCN1: MOVN Q,AHDATS
+ SUB Q,TTLHT(I)
+ SKIPL PCGMD ;WANT SIMPLIFING MVS IN PCG MD
+ CAILE Q,100
+ JRST MCN3 ;100 AHEAD AS THEY STAND, SO LOOK FOR CONSERVATIVE MVS
+ SKIPLE CCA
+ JSP Q,MCNR
+ SKIPGE EGAIN
+ JRST MCN1C ;DEFINITELY EXPECTING RECAPT
+MCN1B: SKIPLE AGAIN
+ JSP Q,MCNR
+MCN1A: SKIPLE DAGAIN
+ JSP Q,MCNR
+MCN3: SKIPLE SAGAIN
+ JSP Q,MCNR
+ SKIPLE SDAGN
+ JSP Q,MCNR
+ JRST MCN2
+
+MCN1C: SKIPN SDAGN
+ SKIPE DAGAIN
+ JRST MCN1B
+ JRST MCN2 ;HE'S GOING TO TAKE AND NOTHING ELSE DOING SO DONT COUNTER AGAIN
+
+
+MCNR: MOVEI T1,@-2(Q)
+ SKIPL ALOSS ;ALOSS TO BE COUNTERED?
+ JRST MCNR1
+ MOVN T2,ALOSS
+ CAMLE T2,(T1)
+ MOVE T2,(T1)
+ RC COUNTERING *U!T2 *G!T1 FOR ALOSS,ADDM T2,ALOSS
+ ADDM T2,ALOSSC
+ MOVNS T2
+ ADDM T2,(T1)
+ SKIPGE ALOSS
+ JRST (Q)
+MCNR1: CAIN T1,CCA ;CCA ALREADY COUNTERED IF APPRO IN THANR LOGIC
+ JRST (Q)
+ SKIPG UATHV
+ JRST MCN2
+ MOVE T2,UATHV
+ ADD T2,RCTHR
+ ADD T2,SLUATV
+ CAMLE T2,(T1)
+ MOVE T2,(T1) ;GET TOTAL AMT TO COUNTER
+ MOVE TT,(T1)
+ SUB TT,UALTPO
+ JUMPLE TT,(Q)
+ CAMLE T2,TT
+ RC LIMIT COUNTER TO EXCESS OVER LUATPO *U!TT,MOVE T2,TT
+ CLEARM UALTPO
+ MOVN TT,T2
+ ASH TT,-1
+ CAIE T1,AGAIN
+ ASH TT,-1
+ ADD TT,T2 ;GET 3/4 EXCEPT IF AGAIN GET 1/2
+ CAMLE TT,SLUATV
+ MOVE TT,SLUATV
+ JUMPE TT,MCNR3
+ RC DISREGARD *U!TT *G!T1 FOR SLUATV,MOVNS TT
+ ADDM TT,SLUATV
+ ADDM TT,(T1)
+ ADD T2,TT
+MCNR3: MOVN TT,T2
+ ASH TT,-1
+ CAIE T1,AGAIN
+ ASH TT,-1
+ ADD TT,T2 ;3/4 OF AMT TO BE COUNTERED EXCEPT 1/2 FOR AGAIN
+ CAMLE TT,RCTHR
+ MOVE TT,RCTHR
+ JUMPE TT,MCNR2
+ RC DISREGARD *U!TT *G!T1 FOR RCTHR,MOVNS TT
+ ADDM TT,RCTHR
+ ADDM TT,(T1)
+ ADD T2,TT
+MCNR2: CAMLE T2,UATHV
+ MOVE T2,UATHV
+ RC COUNTERING *U!T2 *G!T1 FOR UATHV,ADDM T2,VTHRAC
+ MOVNS T2
+ ADDM T2,UATHV
+ ADDM T2,(T1)
+ CAIN T1,AGAIN
+ ADDM T2,20LAGN
+ SKIPGE 20LAGN
+ CLEARM 20LAGN
+ SKIPLE UATHV
+ JRST (Q)
+ JRST MCN2
+
+GRCCM1: MOVE T2,HPVAL
+ SUB T2,EGAIN ;MAX AMOUNT THAT CAN BE COUNTERED UP TO
+ JUMPLE T2,GRCM2A
+ MOVE C,DAGAIN
+ MOVE D,SDAGN
+ SKIPE TT,OFTRCL
+ JRST GRCCM7 ;DE ACTIVATE DAGAIN, SDAGN UP TO OFTRCL
+GRCCM5: JUMPE C,GRCCM6
+ CAMLE C,T2
+ MOVE C,T2
+ MOVN ZR,C
+ RC COUNTER *U!C (-) EGAIN FOR DAGAIN,ADDM C,EGAIN
+ ADDM C,CEGAIN
+ SUB T2,C
+ ADDM ZR,DAGAIN
+ JUMPLE T2,GRCM2A
+GRCCM6: JUMPE D,GRCM2A
+ CAMLE D,T2
+ MOVE D,T2
+ MOVN ZR,D
+ RC COUNTER *U!D (-) EGAIN FOR SDAGN, ADDM D,EGAIN
+ ADDM D,CEGAIN
+ ADDM ZR,SDAGN
+GRCM2A: MOVE T2,DAGAIN
+ ADD T2,SDAGN
+ CAMG T2,OFTRCL ;HAVE NON-DIRECT ATTACKS
+ JRST GRCCM3 ;NOT ENUF
+ SKIPLE T1
+ MOVEI T1,0 ;AT MOST POSSIBILITY FOR RECAPT
+ JRST GRCCM2
+
+GRCCM3: MOVE T2,DAGAIN
+ ADDM T2,SDAGN ;HES GOING TO RECAPT SO WILL BE VUL TO DISCOVERED ATTACK
+ CLEARM DAGAIN
+ JRST GRCCM2
+
+MVCD1L: ADD T1,SAGAIN
+MVCD1M: MOVE T2,PGAIN ;RECAPT LIKELY SO DISCOUNT ATTACKS BY PC TO BE RECAPTED
+ ADD T2,IGAIN
+ ASH T2,-1
+ ADD T1,T2
+ ADD T1,SQGAIN
+ ADD T1,SLAGN
+ ADD T1,AGAIN
+ JUMPE T1,MVCD1K
+ PUSHJ P,ALOG
+ .OP FDVR 20.0 2.714
+ RC 20 LOG RANDOM GAINS,ADD R,T2
+ JRST MVCD1K
+
+
+
+GRCCM7: JUMPE C,GRC7A
+ MOVE ZR,TT
+ CAML ZR,C
+ MOVE ZR,C
+ RC DEACTIVATE *U!ZR DAGAIN FOR OFTRCL,SUB C,ZR
+ SUB TT,ZR
+ JUMPE TT,GRCCM5
+GRC7A: JUMPE D,GRCCM5
+ MOVE ZR,TT
+ CAML ZR,D
+ MOVE ZR,D
+ RC DEACTIVATE *U!ZR SDAGN FOR OFTRCL,SUB D,ZR
+ SUB TT,ZR
+ JRST GRCCM5
+
+MVCD1: SKIPE T2,NHC
+ JRST MVFP1 ;COMPUTE POSITIONAL VALUE OF FINAL PC ON DEST SQ
+MVFP2: MOVE T1,LRCCOD ;COMPUTE RECAPTURE CODE
+ MOVE T2,DAGAIN
+ ADD T2,SDAGN
+ JUMPN T2,GRCCM1 ;WILL HE BE BUSY
+GRCCM2: MOVEM T1,RCCOD
+ SKIPGE EGAIN
+ JRST GRCCM4
+ JUMPG T1,GRCCM4
+ MOVE T1,PPPGN
+ ADDM T1,EGAIN ;CREDIT FOR PUSHING P P
+GRCCM4: SKIPE T1,TGAIN
+ JRST MVCD1D ;SEE IF HE'S FREE TO CAPT
+MVCD1E: SKIPL ALOSS
+ SKIPLE UATHV
+ JRST MCN1 ;COUNTERING ANAL
+MCN2: SKIPE TT,PINT(B) ;BUSTING PIN?
+ SKIPE EGAIN
+ JRST MPNB1
+ SKIPN UATHV
+ SKIPE ALOSS
+ JRST MPNB1
+MPNB3: LDB T2,[PINDIR,,1(TT)]
+ MOVE C,PIECEL(B)
+ LDB ZR,BDLNC(T2)
+ LDB D,LMUAT(T2)
+ CAMN ZR,D
+ JRST MPNB2 ;TO SAME LINE
+ LDB C,[PINOPS,,1(TT)]
+ SKIPG D,BOARD(C)
+ ERRTTY [ASCIZ /LOSE AT MPNB3/]
+ MOVE T2,PVALUE-PIECE(D)
+ ASH T2,-3
+ LDB D,THRLPT(I)
+ SKIPE D
+ ADDI T2,100
+ RC BUSTING PIN *U!T2,ADDM T2,PINRLS
+MPNB2: HRRZ TT,(TT)
+ JUMPN TT,MPNB3
+MPNB1: SKIPE T1,PMLSS
+ JRST MVCD1A ;SEE IF REALLY WANT TO CREDIT TOO EARLY TO MV PC
+MVCD1B: SKIPGE T1,EGAIN
+ SKIPL HCL
+ JRST MOSC1
+ MOVNS T1 ;SEE IF -EGAIN COUNTERED BY OUTSTANDING THREATS
+ CAMLE T1,CCA
+ MOVE T1,CCA
+ MOVE T2,LOSTV
+ CAMGE T2,LSOSTV
+ MOVE T2,LSOSTV
+ CAMLE T1,T2
+ MOVE T1,T2
+ MOVEM T1,OSTCMP ;IF HE TAKES US (GETTING EGAIN) WE CAN TAKE THREAT
+ MOVNS T1
+ ADDM T1,CCA
+ ADDM T1,LSOSTV
+ SKIPGE LSOSTV
+ CLEARM LSOSTV
+MOSC1: SKIPN DFSAVE
+ JRST MOSC3
+ MOVE T1,NIDF
+ SKIPGE RCCOD
+ SOJE T1,MOSC2 ;WE'RE NOT REALLY GOING TO WIND UP HERE ANYWA
+ ;WE'RE GOING TO RECAPT AFTER HE TAKES AND WIND UP THERE
+MOSC3: MOVE T1,PVPCCP
+ ADD T1,DISPOS
+ SUB T1,DISBLU
+ SUB T1,POSRLS
+ SKIPL HCL
+ ADD T1,DISBLH
+ SKIPN NHC
+ ADD T1,W
+ SKIPE NHC
+ ADD T1,POSFP
+ MOVEM T1,POSNET
+ CLEARB T1,LGCLSW ;COMPARE WITH NEED FOR AB
+ PUSHJ P,MCLSD
+ AOS (T2)
+ SUBI T2,DGCLSB
+ DPB T2,[MPCLAB,,LGCLSW]
+
+ MOVEI T1,1 ;COMPARE WITH NEED FOR BEST SO FAR
+ PUSHJ P,MCLSD
+ AOS DGCLS2-DGCLSB(T2)
+ SUBI T2,DGCLSB
+ LDB T1,[MPCLAB,,LGCLSW]
+ RC [CLASS: COMP BSF *C!T2, AB *C!T1]DPB T2,[MPCLBS,,LGCLSW]
+
+ RC EGAIN,ADD R,EGAIN
+ RC OSTCMP,ADD R,OSTCMP
+ MOVEI T1,0 ;FOR INITIALIZING MVCD1L
+ SKIPLE RCCOD
+ JRST MVCD1L ;HES GOING TO CAPT US, DISCOUNT DIRECT ATTACKS
+ MOVE T2,SAGAIN
+ ASH T2,-1
+ RC 1/2 SAGAIN,ADD R,T2
+ MOVN T2,AHDATS
+ SUB T2,TTLHT(I)
+ CAILE T2,100
+ RC AHD SO DISCOUNT SMALL ATTS,JRST MVCD1M ;AHD SO DONT COUNT SMALL ATTACKS
+ SKIPL RCCOD
+ JRST MVCD1J
+ MOVE T1,SLAGN
+ ASH T1,-2
+ MOVE T2,T1
+ ASH T2,-1
+ IMUL T2,NTMPS
+ ADD T1,T2
+ RC 1/4 SLAGN + (NTPMS)(1/8 SLAGN),ADD R,T1
+MVCD1J: RC 20 LOG TERMS OF AGAIN, ADD R,20LAGN
+ RC SQGAIN,ADD R,SQGAIN
+ MOVE T1,PGAIN
+ ADD T1,IGAIN
+ JUMPE T1,MVCD1K
+ PUSHJ P,ALOG
+ .OP FDVR 10.0 2.714
+ RC 10 LOG PGAIN+IGAIN,ADD R,T2
+MVCD1K: RC DSQGAIN,ADD R,DSQGAIN
+ MOVE T1,SDAGN
+ ASH T1,-1
+ RC 1/2 SDAGN,ADD R,T1
+ SKIPN T1,DAGAIN
+ JRST MVCD1N
+ PUSHJ P,ALOG
+ .OP FDVR 20.0 2.714
+ RC 20 LOG DAGAIN,ADD R,T2
+MVCD1N: RC DFSVP,ADD R,DFSVP
+ RC PINRLS,ADD R,PINRLS
+ MOVE T1,LSOSTV
+ LSH T1,-3
+ RC 1/8 LSOSTV,ADD R,T1
+ SKIPN T1,SOSTV
+ JRST MVCD1Q
+ LSH T1,-3
+ PUSHJ P,ALOG
+ .OP FDVR 10.0 2.714
+ RC 10 LOG 1/8 SOSTV,ADD R,T2
+MVCD1Q: SKIPN T1,OSTV
+ JRST MVCD1R
+ LSH T1,-4
+ PUSHJ P,ALOG
+ .OP FDVR 5.0 2.714
+ RC 5 LOG 1/16 OSTV,ADD R,T2
+MVCD1R: MOVN T1,ALOSS
+ CAMGE T1,UATHV
+ MOVE T1,UATHV
+ RC LARGER OF ALOSS - UATHV,SUB R,T1
+ MOVN ZR,ALOSS
+ ADD ZR,UATHV
+ SUBB ZR,T1
+ JUMPE T1,MVCD1U
+ PUSHJ P,ALOG
+ .OP FDVR 50.0 2.714
+ CAMLE T2,ZR
+ MOVE T2,ZR
+ RC 50 LOG EXCESS UATHV-ALOSS,SUB R,T2
+MVCD1U: SKIPN T1,SLUATV
+ JRST MVCD1S
+ PUSHJ P,ALOG
+ .OP FDVR 20.0 2.714
+ RC 20 LOG SLUATV,SUB R,T2
+MVCD1S: MOVE T1,CMTHRA
+ SUB T1,VTHRA
+ JUMPE T1,MVCD1T
+ CAMLE T1,UATHV
+ MOVE T1,UATHV ;DONT ALLOW POSITIVE CREDIT
+ PUSHJ P,ALOG
+ .OP FDVR 20.0 2.714
+ RC EXCESS CMTHRA,ADD R,T2
+MVCD1T: SKIPGE T1,SACFL
+ JRST THAN4
+SACA1: SKIPGE J,EGAIN
+ JRST SACA2 ;NOT SAFE UNLESS PC CAPTED IN SAC FLUSHING HELPS
+SACA3: SKIPGE NPCPT(B) ;SEE AMT WOULD GAIN IF SAC HAD BEEN MADE
+ SETOM SACQA(T1) ;Q
+ MOVEI T2,0
+ MOVE TT,MVDMF
+SACS3: CAML TT,MVDSP
+ JRST SACS1
+ SKIPGE 1(TT)
+ JRST SACS2
+ LDB ZR,[MVDCD,,1(TT)]
+ CAIE ZR,MVDAT
+ JRST SACS2
+ LDB Q,[MVDPC,,1(TT)]
+ SKIPGE RPIECE(Q)
+ JRST SACS2 ;K
+ LDB ZR,[MVDSQ,,1(TT)]
+ CAME ZR,SACSQ(T1)
+ ADD T2,2(TT) ;ADD UP VALS OF ATTACKS
+SACS2: ADDI TT,NWMVE
+ JRST SACS3
+SACS1: SKIPE T2
+ ADDI T2,40
+ SKIPGE J
+ ASH T2,-1 ;MV MAY NOT BE SAFE
+ SKIPLE T2
+ RC CREDIT SAC *U!T2,ADDM T2,SACVL(T1)
+SACA4: SKIPL T1,SACLK(T1)
+ JRST SACA1
+ JRST THAN4
+
+
+SACA2: SKIPL BPCHD(A)
+ JRST SACA7
+SACA8: MOVE T2,ATEVLT+1(I)
+SACA5: ILDB Q,T2
+ JUMPE Q,SACA4
+ MOVE Q,PIECEL(Q)
+ CAMN Q,SACSQ(T1)
+ JRST SACA6
+ TLNE T2,760000
+ JRST SACA5
+ JRST SACA4
+
+SACA6: MOVE Q,@LMGST+1(I)
+ CAIN Q,1
+ MOVEI J,0 ;ONLY PC HOLDING SQ
+ JRST SACA3
+
+SACA7: MMSAVAC
+ PUSHJ P,MCAF
+ MMRSAC
+ JRST SACA8
+
+MVFP1: PUSH P,B ;COMPUTE POS VAL OF FINAL PC ON DEST SQ
+ PUSH P,W
+ HRRZ B,CLACLP-1(T2)
+ SKIPL HCL
+ HRRZ B,CLDCLP(T2)
+ PUSHJ P,CBDVS
+ RP -ORG VALUE FOR PC,SUB W,PDV(B)
+ SKIPGE HCL
+ MOVNS W
+ MOVEM W,POSFP
+ POP P,W
+ POP P,B
+ JRST MVFP2
+
+MOSC2: PUSH P,A ;WILL WIND UP ON DEF SQ
+ MOVE A,IDFSQ
+ RP WILL WINDUP AT *S!A, PUSHJ P,CBDVS
+ POP P,A
+ JRST MOSC3
+
+MPTRP1: MOVE T1,MPTRPA(I) ;SEE IF TRAPPING HIS PCS
+MPTRP4: SKIPE T2,PIECEL(T1)
+ SKIPN NSQS(T1)
+ JRST MPTRP3
+ CAME A,T2
+ SKIPLE PNSQS(T1)
+ JRST MPTRP3
+ HRRZ ZR,MVDSP ;TRAPPING HIS PCS
+ MOVSI TT,MVDRS_MVDSFT
+ DPB T1,[MVDPC,,TT]
+ DPB T2,[MVDSQ,,TT]
+ PUSH ZR,TT
+ LDB C,[BRANK,,BPREL(T2)]
+ SKIPN I
+ MOVE C,REVERS(C)
+ IMULI C,10.
+ PUSH ZR,C
+ HRRZM ZR,MVDSP
+ MOVE C,MVDMF
+MPTRP5: CAML C,MVDSP
+ JRST MPTRP3
+ SKIPGE D,1(C)
+ JRST MPTRP6
+ LDB D,[MVDCD,,D]
+ CAIN D,MVDAT
+ JRST MPTRP7
+MPTRP6: ADDI C,NWMVE
+ JRST MPTRP5
+
+MPTRP3: AOBJN T1,MPTRP4
+ JRST MPTRP2
+
+MPTRP7: LDB D,[MVDSQ,,1(C)]
+ CAME D,PIECEL(T1)
+ JRST MPTRP6
+ MOVSI D,(MVSAB) ;ANY ATT ON TRAPPED PC IS STRONG ATT
+ IORB D,1(C)
+ TRNE D,MVDDIB
+ JRST MPTRP6 ;THIS WAS DISCOVERED, THERE MAY BE A DIRECT ATT ALSO
+ JRST MPTRP3
+
+MPTRPA: -8,,NPCS+1+8
+ -8,,1+8
+
+MVCD1A: SKIPG EGAIN
+ SKIPE SAGAIN
+ JRST MVCD1B
+ SKIPE DAGAIN
+ JRST MVCD1B
+ SKIPG RICKF
+ SKIPE VTHRA
+ JRST MVCD1B
+ SKIPG PGAIN
+ SKIPE SDAGN
+ JRST MVCD1B
+ SKIPG IGAIN
+ ADDM T1,EGAIN ;MOVE DOESNT DO ANYTHING ELSE SO CREDIT IT
+ JRST MVCD1B
+
+FTHC:
+FTHA: SUB J,THTVAT ;ANSWER THREAT UP TO AMT IN J
+ JUMPGE J,THANR ;IF THREAT COMPLETELY ANSWERED GO TO THANR, OTHERWISE RETURN
+ MOVNM J,THTVAT
+ JRST (Q)
+
+THANR: CLEARM THTVAT
+ MOVSI C,BTHANS
+ IORM C,2(T2) ;RECORD THREAT ANSWERED
+ JRST THANR1
+
+THDU1: LDB ZR,[MVDSQ,,(S)] ;DEFENDING THRU?
+ LDB C,[THRTS,,1(T2)]
+ CAME ZR,C
+ JRST THANC4 ;NOT DEFENDING RIGHT SQUARE
+ LDB ZR,[MVDPC,,(S)]
+ LDB C,[THRTP,,1(T2)]
+ CAME ZR,C
+ JRST THANC4 ;HES NOT TAKING IT THIS WAY
+ MOVE ZR,DEFVL-PIECE(D)
+ MOVEM ZR,1(S) ;DROP THRU ON EFFECTIVE DEF THRU
+THANR3: MOVE ZR,(S)
+ TLNE ZR,(MVWAB)
+ JRST THANC4 ;NOT REALLY WINNING ENUF DEFENSE TO ANSWER THREAT
+ MOVE J,1(S) ;EVALUATE EFFECT OF DEFENCE
+ JSP Q,FTHA
+ MOVE ZR,(S)
+ TRNE ZR,MVDDIB
+ JRST THANC4
+ AOS THAIDF ;"INADEQUATE" DEFENCE
+ LDB ZR,[MVDSQ,,(S)]
+ MOVEM ZR,THAIDS ;SAVE SQUARE
+ JRST THANC4
+
+TDS1: PUSH P,A ;SETTING UP DISCOVERY, EVALUATE
+ PUSH P,B
+ SKIPE S,BOARD(A)
+ SUBI S,PIECE ;PIECE CAPTED
+ LDB D,[MVDPC,,(TT)] ;EVAL THREATNED DISCOVERED ATTACK
+ MOVE A,PIECEL(D)
+ LDB B,[MVDPC2,,(TT)]
+ SKIPGE RPIECE(D)
+ JRST TDS3 ;THREATNING TO DISC ON K
+ PUSH P,D
+ LDB D,[MVDDIR,,(TT)]
+ LDB C,[MVDSQ,,(TT)]
+ PUSHJ P,EPP
+ POP P,D
+ SKIPGE S
+ MOVEI S,0
+TDS3A: RC POTEN DIS *P!B ON *P!D VAL *U!S,MOVEM S,1(TT)
+ POP P,B
+ POP P,A
+ JRST TAT4
+
+
+TDS3: MOVEI S,3000
+ JRST TDS3A
+
+TAT3: ;EVAL ATTACK
+ LDB ZR,[MVDDIS,,(TT)]
+ MOVEM ZR,TATDIS ;SAVE DISCOVERED STATUS
+ LDB ZR,[MVBDAB,,(TT)]
+ MOVEM ZR,TATDBL ;ATTACK BY DOUBLED PCS (ONE DISCOVERED)
+ LDB ZR,[MVATBB,,(TT)]
+ MOVEM ZR,TATATH ;ATTACKING THRU
+ CLEARM TATNFQ ;NO FLIGHT SQ FLAG
+ CLEARM TATTRF ;TRADE FLAG
+ CLEARM TATDSQ
+ LDB A,[MVDSQ,,(TT)]
+ SKIPG D,BOARD(A)
+ JRST TATSC ;UNOCC SQ (SEE IF GAINING SQUARE CONTROL)
+ SKIPE NIUBLK
+ JRST TATAD1 ;DISREGARD ANY ATTS ON A PC STRONG UNBLOCKING
+TATAD2: SKIPE PINT-PIECE(D)
+ JRST TATAP1 ;ATTACKING PINNED P
+TATAP2: SKIPGE RPIECE-PIECE(D)
+ JRST TAT3F ;HIS K
+ MOVE C,LMAS
+ SKIPE S,BOARD(C)
+ SUBI S,PIECE ;PIECE CAPTED
+ SKIPE TATDIS
+ JRST TAT3B ;DISC ATTACK
+ LDB D,[MVDDIR,,(TT)]
+ PUSHJ P,EPP ;EVALUATE CALC LOSS OR GAIN
+TAT3C: SKIPGE S
+ MOVEI S,0
+ LDB D,[MVDPC,,(TT)] ;HIS GUY
+ SKIPGE LMGT(D)
+ JRST TATP2 ;PMV NOT COMPUTED FOR P'S
+ SKIPN PMV(D)
+ JRST TATP1 ;PIECE HAS NOT SQUARES TO GO TO (IT LOOKS LIKE)
+TATP2: LDB C,[MVDPC2,,(TT)] ;OUR GUY
+ LDB T1,[PTID,,PIECE(C)]
+ LDB ZR,[PTID,,PIECE(D)]
+ CAMN ZR,T1
+ JRST TATT1 ;JUST OFFERING TRADE? (PTID IN T1)
+ SKIPE TATDBL
+ JUMPG S,TATDA3
+ CAMG ZR,T1
+ JRST TAT3J
+TATDA3: AOS NTMPS
+ MOVEM A,TEMSQ
+ MOVEM C,TEMGY
+ LDB ZR,[MVDDIR,,(TT)]
+ MOVEM ZR,TEMDIR
+ MOVE ZR,LMAS
+ SKIPE TATDIS
+ MOVE ZR,PIECEL(C)
+ MOVEM ZR,TEMORG
+TAT3J: MOVE T1,PIECEL(D)
+ RC ATT VAL *P!C ON *P!D AT *S!T1 POTENTIAL GAIN *U!S,MOVEM S,1(TT)
+ MOVE T1,TATDIS
+ ADDM S,PATVL(T1) ;CREDIT TO PRELIM ATT VAL
+TAT3M: SKIPL T1,NSACSQ
+ JRST TSACE1 ;SEE IF ATTACKING A SAC SQ
+TSACE2: SKIPGE RPIECE(D)
+ JRST TATAC
+ SUB S,PVALUE(D)
+ JUMPE S,TATAC ;PC COMPLETELY LOOSE
+ MOVE C,@LMGST+1(I)
+ SOJN C,TATAC ;DEFENDED MORE THAN ONCE
+ LDB C,ATEVL2+1(I) ;HIS PC DEFENDING
+ AOS D,TACNTP
+ MOVEM A,TACTB-1(D) ;INDICATE PC NOW WOULD BE CONSTRAINED
+ HRLM C,TACTB-1(D)
+ MOVNM S,TACTB(D)
+ AOS TACNTP
+ JRST TATAC
+
+TATP1: MOVEI C,MVDST ;SEE IF WE ARE RELEASING ATT ON A SQ IT COULD GO TO
+TATP5: CAML C,MVDMF
+ JRST TATP3
+ SKIPGE (C)
+ JRST TATP4
+ LDB T1,[MVDCD,,(C)]
+ CAIE T1,MVDRLA
+ JRST TATP4
+ LDB T1,[MVDSQ,,(C)]
+ SKIPN @LMGST1+1(I)
+ JRST TATP4 ;HE CANT MOVE THERE
+ MOVE T2,@LMGST1(I)
+ SOJG T2,TATP4 ;WE ATT THERE MORE THAN ONCE
+ MOVE T2,ATEVL4+1(I) ;WE ARE ABANDONNING SQUARE, CAN HE GET THERE?
+TATP6: ILDB ZR,T2
+ JUMPE ZR,TATP4
+ CAMN ZR,D ;(IF UNBLOCKED BIT IS ON, HE STILL CANT GET THERE)
+ JRST TATP2 ;HE CAN MOVE THERE
+ TLNE T2,770000
+ JRST TATP6
+TATP4: ADDI C,NWMVE
+ JRST TATP5
+
+TATP3: RC *P!D ON *S!A HAS NO FLIGHT SQ,MOVSI C,(MVSAB)
+ IORM C,(TT)
+ SETOM TATNFQ ;NO FLIGHT SQ FLAG
+ JRST TATP2
+
+
+TATAP1: MOVSI C,(MVSAB) ;PIECE PINNED
+ IORM C,(TT) ;ANY GAIN IS STRONG GAIN
+ JRST TATAP2
+
+TATAD1: SKIPGE RICKF ;ATTACKING PC WHICH UNBLOCKING?
+ JRST TATAD2 ;CHECK
+ MOVE C,MVDMF
+TATAD5: CAML C,MVDSP
+ JRST TATAD2
+ LDB T1,[MVDCD,,1(C)]
+ CAIN T1,MVDHA
+ JRST TATAD4
+TATAD6: ADDI C,NWMVE
+ JRST TATAD5
+
+TATAD4: LDB T1,[MVDPC,,1(C)]
+ SKIPGE 2(C) ;NOT IMPORTANT
+ CAIE T1,-PIECE(D)
+ JRST TATAD6
+ MOVSI ZR,(MVWAB) ;UNBLOCKING THIS PC
+ RC ATT PC THAT UNBLOCKING,IORM ZR,(TT)
+ JRST TATAD2
+TATT1: RC OFR TRD *P!C FOR *P!D VAL IF ATT *U!S,MOVEM S,1(TT)
+ MOVE T1,TATDIS
+ AOS TRDS(T1)
+ MOVEI T1,MVDTRD
+ DPB T1,[MVDCD,,(TT)] ;CHANGE TO TRADE
+ SETOM TATTRF ;TRADE FLAG
+ JRST TAT3M
+
+TATT2: MOVE TT,MVDMF ;NOW DECIDE ABOUT TRADES
+ AOS TT
+TATT4: CAML TT,MVDSP
+ JRST TATT3
+ SKIPGE (TT)
+ JRST TATT5
+ LDB C,[MVDCD,,(TT)]
+ CAIN C,MVDTRD
+ JRST TATT6 ;FOUND FROB IN TRADE STATE
+TATT5: ADDI TT,NWMVE
+ JRST TATT4
+
+TATT6: LDB T1,[MVDDIS,,(TT)]
+ SKIPN @TATB2(T1)
+ SKIPE @TATB1(T1)
+ JRST TATT7 ;HAVE BEEN TRADES OR ATTACKS OF OTHER SENSE OF DISCOVERED-DIRECT, CONSIDER THIS ONE AN ATTACK
+ LDB C,[MVDPC2,,(TT)] ;OUR GUY
+ LDB D,[MVDPC,,(TT)] ;HIS GUY
+ LDB T1,[PTID,,PIECE(C)]
+ MOVE S,1(TT)
+
+ MOVSI ZR,(MVSAB) ;OFFERRING TRADE
+ TDNE ZR,(TT)
+ JRST TAT3G1 ;MV ALSO STRONG THREAT
+TAT3G3:
+TATDA2: ADDM S,TGAIN ;THREATNED GAIN IGNORING HIS POSSIBLE TRADE
+TAT3G4: SKIPN SPINT(D)
+ SKIPE PINT(D)
+ SETOM TPPOC
+ MOVE S,PDV(D) ;HIS PIECE'S DEVEL VALUE
+ SUB S,PDV(C) ;OURS
+ ASH S,-4
+ CAILE S,30
+ MOVEI S,30
+ CAMGE S,[-30]
+ MOVNI S,30
+ SKIPE T1 ;SKIP ON PW
+ MOVEI T1,1 ;PC
+ XCT @WTSI(T1)
+ JRST TAT3K ;DONT WANT TO TRADE PCS OR DONT CARE
+ ADDI S,40
+ MOVE T1,PIECEL(D)
+ RC WANT TO TRADE *P!C FOR *P!D AT *S!T1 VAL *U!S,MOVEM S,1(TT)
+ JRST TATT5
+
+TATT7: MOVEI T1,MVDAT
+ DPB T1,[MVDCD,,(TT)] ;CONSIDER ATTACK
+ JRST TATT5
+
+TAT3G1: MOVSI ZR,(MVDAB)
+ TDNE ZR,(TT)
+ JRST TAT3G2 ;DISCOVERED ATTACK ALSO BEARING
+ SKIPN PINT(D)
+ JRST TAT3G3 ;JUST NOW PINNING AND OFFERING TRADE
+TAT3G2: JRST TATT7
+
+TAT3K: SKIPGE LRCCOD
+ JRST TAT3L
+ XCT DCTSI(T1)
+ SUBI S,40 ;WANT TO AVOID TRADES
+TAT3L: JUMPL S,TAT3N
+ MOVE T1,PIECEL(D)
+ RC OFFERING TRADE *P!C FOR *P!D AT *S!T1 VAL *U!S,MOVEM S,1(TT)
+ JRST TATT5
+
+TAT3N: RC DON'T WANT TRADE *P!C FOR *P!D LOSS *U!S,ADDM S,EGAIN
+ CLEARM 1(TT)
+ JRST TATT5
+
+
+TAT3F: MOVEI S,3000
+ SKIPE NHC
+ SKIPN TATDIS
+ JRST TAT3C
+ LDB T1,[MVDPC,,(TT)]
+ CAME T1,CLACLP
+ JRST TAT3C
+ JRST TAT3D6 ;HES TAKING US FIRST
+
+TAT3B: SKIPE NHC
+ JRST TAT3D ;MAIN GUY CAN'T HELP
+ MOVE T2,TT
+TAT3E: ADDI T2,NWMVE ;DISCOVERED ATTACK, SEE IF MAIN MOVE ALSO ATTACKS SAME SQ
+ CAML T2,MVDSP
+ JRST TAT3D ;NO
+ LDB C,[MVDCD,,(T2)]
+ CAIE C,MVDAT
+ JRST TAT3E
+ LDB ZR,[MVDSQ,,(T2)]
+ CAME ZR,A
+ JRST TAT3E
+ MOVSI C,(MVSAB)
+ AND C,(TT)
+ TLO C,(MVDAB)
+ IORM C,(T2) ;MAKE IT A STRONG THREAT IF THIS WAS
+ CLEARM 1(TT) ;YES WILL CONSIDER IN VALUE OF MAIN ATTACK
+ SETOM TATDSQ
+TATAC: MOVE D,BOARD(A)
+ SUBI D,PIECE
+ SKIPN T2,SPINT(D)
+ JRST TAT3A
+ PUSHJ P,TCNEV ;ATTACKING CONSTRAINED PC EVAL CONSTRAINT (VAL IN C)
+ JUMPE C,TAT3A
+ MOVE T1,PVALUE(D)
+ LDB T2,[MVDPC2,,(TT)] ;OUR GUY
+ SUB T1,PVALUE(T2)
+ JUMPLE T1,TATAC3 ;NOT ATTACKING BY LESS
+ CAMLE T1,C
+ MOVE T1,C
+ LDB ZR,[PTID,,PIECE(D)]
+ SOJLE ZR,TATAC4 ;N WONT HOLD
+ HRRZ T2,SPINT(D)
+ LDB T2,[SPNLK,,1(T2)]
+ JUMPE T2,TATAC5 ;ONLY SINGLY CONSTRAINED
+TATAC4: RC FORCING *P!D TO MOVE ITS DBLY CONSTRAINED SA *U!T1,ADDM T1,SAGAIN
+TAT3A:
+TATSC: PUSHJ P,SQCMP
+ LDB ZR,[PTID,,PIECE(B)]
+ SOJN ZR,TAT3X ;NOT N
+ SKIPE TATDIS
+ JRST TAT3X
+ MOVE T1,SQCAFA
+ XCT TATNFT(I)
+ JRST TAT3X
+ PUSHJ P,TATNF ;THREATNENING KNIGHT FORK?
+TAT3X: MOVE A,LMAS
+ JRST TAT4
+
+
+TATNF: MOVEI Q,TATNF1 ;SEE IF FORK THREATENED
+ CLEARM TANNTP
+ CLEARM TANLV
+ CLEARM TANSLV
+ PUSH P,A
+ PUSHJ T,LMKNT
+ POP P,A
+ MOVE T1,TANNTP
+ SOJLE T1,CPOPJ
+ HRRZ ZR,MVDSP
+ MOVSI T1,MVDTF_MVDSFT
+ DPB A,[MVDSQ,,T1]
+ MOVE T2,TANLP
+ SUBI T2,PIECE
+ DPB T2,[MVDPC,,T1]
+ MOVE T2,TANSLP
+ SUBI T2,PIECE
+ DPB T2,[MVDPC2,,T1]
+ PUSH ZR,T1
+ PUSH ZR,TANSLV
+ HRRZM ZR,MVDSP
+ POPJ P,
+
+TATNF1: SKIPLE T1,BOARD(A)
+ XCT OURGY1(I)
+ POPJ T,
+ MOVE ZR,PVALUE-PIECE(T1)
+ SKIPN @LMGST+1(I)
+ JRST TATNF2
+ SUB ZR,PVALUE(B)
+ JUMPLE ZR,CPOPJT
+TATNF2: AOS TANNTP
+ CAMG ZR,TANLV
+ JRST TATNF3
+ EXCH ZR,TANLV
+ EXCH T1,TANLP
+TATNF3: CAMG ZR,TANSLV
+ POPJ T,
+ EXCH ZR,TANSLV
+ EXCH T1,TANSLP
+ POPJ T,
+
+
+TANNTP: 0 ;# OF USEFUL THINGS N DOES
+TANLV: 0 ;LARGEST OF THESE
+TANLP: 0 ;PC CORRESP WITH ABOVE
+TANSLV: 0 ;SECOND LARGEST
+TANSLP: 0 ;PC CORRESP WITH ABOVE
+
+
+TATNFT: CAILE T1,MSQWSC
+ CAIGE T1,MSQBSC
+
+TATSQC: JUMPG T2,TATSQ1
+ IMUL T2,BAV(A)
+ POPJ P,
+
+TATSQ1: IMUL T2,WAV(A)
+ POPJ P,
+
+TATST1: CAMG T1,SQCAFA ;COMPARE TO SQUARE CONTROL AFTER
+ CAML T1,SQCAFA
+
+TATST2: CAIN T1,MSQWUC
+ CAIN T1,MSQBUC
+
+TATST3: CAIGE T1,MSQBC
+ CAILE T1,MSQWC
+TATST4: CAIL T1,MSQBC
+ CAIG T1,MSQWC
+
+TATST5: CAIG T1,MSQWC
+ CAIL T1,MSQBC
+
+TATST6: CAILE T1,MSQWC
+ CAIGE T1,MSQBC
+
+TATST7: SKIPN NBK(A)
+ SKIPN NWK(A)
+
+TATST8: BOARD-BW(A)
+ BOARD+BW(A)
+
+TATST9: SKIPL LMGSTD-PIECE(T2)
+ SKIPL SNFBP-PIECE(T2)
+
+TATDSQ: 0 ;-1=> DISCOVERED ATT WHICH HITS SAME SQ AS MAIN MV
+TATOSQ: 0 ;ORIG CNTRL CODE FOR SQ
+TATDIS: 0 ;1 IF DISCOVERED
+TATDBL: 0 ;DBL ATT MARKER
+TATATH: 0 ;1 => ATTACKING THRU
+TATNFQ: 0 ;-1 => NO FLIGHT SQ FOR PC ATTACKED
+TATTRF: 0 ;-1 TRADE (VIRTUAL)
+
+TATB1: DPATVL
+ PATVL
+
+TATB2: DTRDS
+ TRDS
+
+TATSC3: SKIPGE TATDSQ
+ POPJ P, ;HIS SAME SQ AS MAIN MV, WILL CONSIDER IT THEN
+ PUSH P,B
+ MOVEI B,0 ;DISCOVERED ATTACKER HAS BEEN STORED IN BDA TBLS SO IT WILL BE CONSIDERED
+ PUSHJ P,SQCAFS
+ POP P,B
+ LDB T1,[OBSQP,,CNTRL(A)]
+ MOVEM T1,TATOSQ
+ JRST TATSC4
+
+SQCMP: SKIPL BPCHD(A) ;PNTR TO MVDST ENTRY IN TT
+ PUSHJ P,MCAFS ;MAKE SURE CURRENT INFO COMPUTED
+ MOVE T1,LMAS
+ SKIPE S,BOARD(T1)
+ SUBI S,PIECE ;PC CAPTED IN MV IF ANY
+ SKIPE TATDIS
+ JRST TATSC3 ;DISCOV
+ PUSHJ P,SQCAFS ;RETURN NEW VALUE IN SQCAFA
+ LDB T1,[BSQSP,,CNTRL(A)]
+ MOVEM T1,TATOSQ ;SAVE OLD CONTROL VALUE
+TATSC4: XCT TATST1(I)
+ POPJ P, ;NO IMPROVEMENT
+ SKIPE T2,CTLFAC(T1)
+ PUSHJ P,TATSQC
+ MOVE ZR,T2
+ MOVE T1,SQCAFA
+ SKIPE T2,CTLFAC(T1)
+ PUSHJ P,TATSQC
+ SUB T2,ZR
+ SKIPE I
+ MOVNS T2
+ SKIPE TATDIS
+ RP SQ CTL *S!A DIS *U!T2,ADDM T2,DISPOS
+ SKIPN TATDIS
+ RP SQ CTL *S!A,ADD W,T2
+ SKIPE T1,BOARD(A)
+ JRST TATDQ5 ;CAN NOT DENY OCCUPPIED SQ
+ MOVE T1,TATOSQ ;DENYING SQ TO HIM?
+ XCT TATST3(I)
+ JRST TATDS1 ;HE DOESNT CONTROL IT NOW
+ MOVE T1,SQCAFA
+ XCT TATST4(I)
+ JRST TATDS1 ;STILL HAS IT
+ MOVSI ZR,MVDDSQ_MVDSFT
+ DPB B,[MVDPC2,,ZR]
+ DPB A,[MVDSQ,,ZR]
+ AOS MVDSP
+ MOVEM ZR,@MVDSP ;DENYING SQ
+ AOS MVDSP
+ MOVE ZR,@AT(I)
+ XCT TATST7(I)
+ MOVEI ZR,0 ;NO VALUE UNLESS NEAR HIS K
+ MOVEM ZR,@MVDSP
+ MOVE T1,ATEVLT+1(I) ;DECREDIT SQ FROM HIS PCS IN PNSQS
+TATDQ7: ILDB T2,T1
+ JUMPE T2,TATDQ1
+ TRZE T2,100
+ JRST TATDQ6
+ SKIPGE LMGT(T2)
+ JRST TATDQ6
+ SOSN PNSQS(T2)
+ AOS PTRPC
+TATDQ6: TLNE T1,770000
+ JRST TATDQ7
+TATDQ1: SKIPE TATDIS
+ JRST TATDQ3
+ SKIPN @LMGST+1(I)
+ SKIPN @LMGST(I)
+TATDQ3: SKIPA T1,TATOSQ ;GAINING SQ?
+ JRST TATGQ1 ;ALREADY HAVE SQ UNCONTESTED (MAYBE ONLY BY P THO)
+ XCT TATST5(I)
+ JRST TATGQ1 ;ALREADY HAVE IT
+ MOVE T1,SQCAFA
+ CAIN T1,MSQE
+ JRST TATCP2
+ XCT TATST6(I)
+ JRST TATGQ1 ;NOT GETTING IT
+TATCP1: MOVE ZR,(TT)
+ TLC ZR,(MVWAB+MVATB)
+ TLCN ZR,(MVWAB+MVATB)
+ JRST TATGQ1 ;BOTH WEAK AND THRU (P NO DOUBT)
+ MOVSI ZR,MVDGSQ_MVDSFT ;GAINING SQ
+ DPB B,[MVDPC2,,ZR]
+ DPB A,[MVDSQ,,ZR]
+ SKIPE TATDIS
+ TRO ZR,MVDDIB ;GET THIS EVEN IF MAIN PC CAPTED
+ AOS MVDSP
+ MOVEM ZR,@MVDSP
+ AOS MVDSP
+ MOVE T1,@AT(I)
+ SKIPLE T2,@TATST8(I) ;ARE WE SETTING UP PUSH OF OUR PASSED P?
+ XCT TATST9(I)
+ JRST TATCP3
+ SKIPE S,PPASED-PIECE(T2)
+ ADD T1,PPV+1(S) ;SQ IN FRONT OF OUR P.P.
+TATCP3: CAME A,@OKINGT+1(I) ;DONT CREDIT FOR CONTROLLING ACTUAL SQ OF K
+ XCT TATST7(I)
+ JRST TATGQ2 ;NOT NEAR K
+ SKIPGE OPNMID
+ ADDI T1,100
+ LDB T2,NHQN+1(I)
+ JUMPN T2,TATDQ4
+ SKIPE TATATH
+ JRST TATGQ2
+ SKIPGE NPCPT(B)
+TATDQ4: ADDI T1,400 ;Q BEARING ON SQ
+TATGQ2: MOVEM T1,@MVDSP
+TATGQ1: POPJ P,
+
+TATCP2: SKIPLE T2,@TATST8(I) ;CNTRL WILL BE EVEN- CAN WE PUSH IN P P (WHEN SQCAFS KNOWS ABOUT PAWN PUSHES, FLUSH THIS)
+ XCT TATST9(I)
+ JRST TATGQ1 ;SQ NOT AHEAD OF OUR P.P.
+ SKIPN PPASED-PIECE(T2)
+ JRST TATGQ1
+ JRST TATCP1
+
+DFSQ1: LDB A,[MVDSQ,,(TT)] ;CONSIDER SQ CNTRL VALUE OF DEFENSE
+ CLEARM TATDSQ
+ LDB ZR,[MVATBB,,(TT)]
+ MOVEM ZR,TATATH
+ LDB ZR,[MVDDIS,,(TT)]
+ MOVEM ZR,TATDIS
+ JUMPN ZR,DFSQ1A
+DFSQ1B: PUSHJ P,SQCMP
+DFSQ1D: MOVE A,LMAS
+ JRST TAT4
+
+DFSQ1A: MOVE T2,TT
+DFSQ1C: ADDI T2,NWMVE
+ CAML T2,MVDSP
+ JRST DFSQ1B
+ LDB C,[MVDCD,,(T2)]
+ CAIE C,MVDDEF
+ JRST DFSQ1C
+ LDB ZR,[MVDSQ,,(T2)]
+ CAME ZR,A
+ JRST DFSQ1C
+ JRST DFSQ1D ;WILL CONSIDER ON MAIN DEF
+
+
+TATDQ5: XCT OURGY1(I) ;SQ OCCUPPIED. CANT DENY IT CAN STILL GAIN IT
+ JRST TATGQ1 ;IF HIS GUY
+ JRST TATDQ1
+
+TATDS1: SKIPE @LMGST(I) ;NOT REALLY GETTING SQ, BUT CAN STILL DENY IT TO HIS
+ JRST TATDQ1 ;BIG GUYS
+ LDB C,[MVDPC2,,(TT)]
+ SKIPGE NPCPT(C)
+ JRST TATDQ1 ;Q CANT REALLY DENY SQ SINCE HE CONTROLS
+ MOVE T1,ATEVLT+1(I)
+TATDS2: ILDB T2,T1
+ JUMPE T2,TATDQ1
+ TRZN T2,100
+ SKIPGE LMGT(T2)
+ JRST TATDS3
+ MOVE ZR,PVALUE(T2)
+ CAMG ZR,PVALUE(C)
+ JRST TATDS3
+ SOSN PNSQS(T2)
+ AOS PTRPC
+TATDS3: TLNE T1,770000
+ JRST TATDS2
+ JRST TATDQ1
+
+TATAC3: SKIPE TATTRF
+ JUMPE T1,TATTSB ;THIS IS THE GUY WE WERE OFFERING TO TRADE
+TATTSR: ADD T1,C
+ JUMPLE T1,TAT3A
+ SKIPE TATNFQ
+ JRST TATAC7 ;NO FLIGHT SQ
+ RC THR TAKE *P!D FOL BY CAPT CONSTRAINT *U!T1,PUSHJ P,AGNC2
+ JRST TAT3A
+
+TATAC5: SKIPE TATNFQ
+ JRST TATAC6
+ RC FORCE *P!D TO MV ITS CON *U!T1,PUSHJ P,AGNC2
+ JRST TAT3A
+
+TATAC6: RC FORCE *P!D TO MV- NO FLT SQ- ITS CON *U!T1, ADDM T1,SAGAIN
+ JRST TAT3A
+
+TATAC7: RC THR TAKE *P!D FOL BY CAPT CON *U!T1 -NO FLT SQS,ADDM T1,AGAIN
+ PUSHJ P,AGNC
+ PUSHJ P,AGNC1
+ JRST TAT3A
+
+TATTSB: CAMGE C,PVALUE(T2)
+ JRST TATTSR
+ RC GUY OFFERING TO TRADE CON- SWITCH BACK TO ATT,CLEARM TATTRF
+ MOVEI ZR,MVDAT
+ DPB ZR,[MVDCD,,(TT)]
+ MOVE T2,TATDIS
+ SOS TRDS(T2)
+ JRST TATTSR
+
+
+TCNEV: MOVEI C,0 ;EVALUATE CONSTRAINT VALUE (PC IN D)
+ PUSH P,TT
+TCNEV1: LDB TT,[SPINSQ,,(T2)]
+ CAMN TT,LMAS
+ JRST TCNEV2 ;NOW MVING TO SQ
+ LDB ZR,[SPINCP,,1(T2)]
+ CAIN ZR,(B)
+ JRST TCNEV6
+TCNEV7: SKIPGE T1,NDPI
+ JRST TCNEV3
+TCNEV5: MOVE TT,DPIGT(T1)
+ JUMPGE TT,TCNEV4 ;PIN
+ CAIN T2,(TT)
+ JRST TCNEV2 ;THIS CON ALREAD IGNORED
+TCNEV4: SOJGE T1,TCNEV5
+TCNEV3: LDB ZR,[SPINVL,,(T2)]
+ ADDM ZR,C
+TCNEV2: LDB T2,[SPNLK,,1(T2)]
+ JUMPN T2,TCNEV1
+ POP P,TT
+ POPJ P,
+
+TCNEV6: MOVEI T1,MVDST-1
+TCNEV8: CAML T1,MVDMF
+ JRST TCNEV7
+ SKIPGE 1(T1)
+ JRST TCNEV9
+ LDB ZR,[MVDCD,,1(T1)]
+ CAIN ZR,MVDRLA
+ JRST TCNEVA
+TCNEV9: ADDI T1,NWMVE
+ JRST TCNEV8
+
+TCNEVA: LDB ZR,[MVDSQ,,1(T1)]
+ CAMN ZR,TT
+ JRST TCNEV2
+ JRST TCNEV9
+
+TAT3D: PUSH P,B ;MAIN MOVE DOESNT ATTACK SQ
+ LDB B,[MVDPC2,,(TT)] ;PC CAPTED IN S
+ MOVE C,PIECEL(B)
+ LDB D,[MVDDIR,,(TT)]
+ LDB T1,[MVDPC,,(TT)]
+ SKIPGE @LDSCT3(D)
+ JRST TAT3D1 ;HIS PC ALSO SLIDES TO US
+TAT3D2: SKIPN NHC
+ JRST TAT3D4
+ CAMN T1,CLACLP
+ JRST TAT3D5 ;THIS GUY IS TAKING FIRST
+TAT3D4: PUSHJ P,EPP
+ POP P,B
+ JRST TAT3C
+
+
+TSACE1: CAMN A,SACSQ(T1)
+ JRST TSACE3
+TSACE4: SOJGE T1,TSACE1
+ JRST TSACE2
+
+TSACE3: LDB T2,[MVDPC2,,(TT)]
+ CAMN T2,SACPC(T1)
+ JRST TSACE4
+ MOVE T2,SACSQ(T1)
+ RC COLLECT AFTER SAC AT *S!T2 (QMARK),MOVE ZR,SACFL
+ MOVEM ZR,SACLK(T1)
+ MOVEM T1,SACFL
+ MOVN ZR,S
+ SKIPLE ZR
+ MOVEI ZR,0
+ ADDM ZR,SACVL(T1) ;NEG TO CANCEL ANY GAIN ON THIS SQUARE
+ JRST TSACE2
+
+
+TAT3D5: POP P,B
+TAT3D6: RC *P!T1 IS TAKING FIRST, MOVSI ZR,(SETZ)
+ IORM ZR,(TT)
+ JRST TAT3X
+
+TAT3D1: SKIPN PINT(T1)
+ SKIPGE RICKF
+ JRST TAT3D2
+ MOVE ZR,PVALUE(T1)
+ CAMLE ZR,PVALUE(B)
+ JRST TAT3D2
+ MMSAVAC
+ MOVE A,PIECEL(B)
+ MOVEI Q,TAT3D3 ;CAN HE TAKE US CHECK INSTEAD
+ MOVE B,T1
+ PUSHJ T,@LMGT(B)
+ MMRSAC
+ JRST TAT3D2 ;NO
+
+TAT3D3: SKIPLE T1,BOARD(A)
+ XCT OURGY1+1(I)
+ POPJ T,
+ SKIPL RPIECE-PIECE(T1)
+ POPJ T,
+ MMRSAC ;YES
+ POP P,B
+ RC HE CAN TAKE US CHECK,MOVSI T1,(SETZ)
+ IORM T1,(TT)
+ JRST TAT3X
+
+
+TPN1: PUSH P,A ;CONSIDER POSSIBLE PIN
+ SKIPE S,BOARD(A)
+ SUBI S,PIECE ;PIECE CAPTED
+ LDB A,[MVDSQ,,1(TT)]
+ CAMN A,@OKINGT+1(I)
+ JRST TPN1B ;PINNING TO HIS K
+ PUSH P,B
+ LDB B,[MVDPC2,,1(TT)] ;PC MAY BE DIFFERENT FROM B IF DISCOV
+ MOVE ZR,1(TT)
+ MOVE C,LMAS
+ TRNE ZR,MVDDIB
+ MOVE C,PIECEL(B)
+ LDB D,[MVDDIR,,1(TT)]
+ PUSHJ P,EPP
+ POP P,B
+ MOVE D,BOARD(A)
+ SUB S,ENPCL-PIECE(D)
+ JUMPLE S,TPN2A ;"PIN" HAS NO EFFECT ON BASE PIECE THEREFORE FLUSH
+TPN1A: MOVEM S,TPNTM1 ;HIS BASE PIECE LOSS
+ LDB D,[MVDPC,,1(TT)]
+ MOVE C,PIECEL(D)
+ MOVEI T1,40 ;VALUE JUST FOR PINNING
+ SKIPGE LMGT(D)
+ JRST TPN1D
+ LDB T2,TPNDT1(I)
+ JUMPN T2,TPN1D
+ MOVEI T1,100 ;NOT DEF BY P
+ LDB T2,TPNDT2(I)
+ SKIPN T2
+ MOVEI T1,140 ;CAN NOT BE DEF BY P
+TPN1D: MOVEM T1,2(TT)
+ LDB D,[MVDPC,,1(TT)] ;PIECE PINNED
+ SKIPGE RPIECE(D)
+ JRST TPN3A ;REALLY A CHECK BUT MAYBE K WILL HAVE TO MOVE
+ MOVEI T1,NWMVE(TT)
+TPN1C: CAML T1,MVDSP
+ ERRTTY [ASCIZ /CANT FIND ASSOC ATTACK AT TPN1A/]
+ LDB C,[MVDCD,,1(T1)]
+ ADDI T1,2
+ CAIE C,MVDAT
+ JRST TPN1C
+ MOVSI C,(MVSAB)
+ IORM C,1-2(T1) ;INDICATE ANY GAIN FROM ATTACK IN STRONG THREAT
+ SKIPN T1,NHTHR(I) ;SEE IF ANSWERING THREAT BY PINNING
+ JRST TPN3
+ MOVE T2,HTHRP(I)
+TPN4:; LDB C,[THRCD,,1(T2)]
+ LDB ZR,[THRTP,,1(T2)] ;PIECE POSING THREAT
+ CAMN ZR,D
+ JRST TPN5 ;YES THIS PIECE MAYBE NEUTRALIZED
+TPN5A: ADDI T2,NWTHE
+ SOJG T1,TPN4
+TPN3: SKIPGE LMGT(D)
+ JRST TPN3A ;JUST P SO NO BIG DEAL
+ MOVE T1,PIECEL(D) ;CAN OUR P ATTACK HERE IN ONE MV?
+ LDB T2,OPOM(I)
+ JUMPE T2,TPN3A ;NO
+ ADD T1,TPNT1(I) ;MAYBE
+ SKIPE BOARD(T1)
+ JRST TPN3B
+ XCT TPNT2(I)
+ JUMPE C,TPN3D
+ XCT TPNT3(I) ;SKIP ON NOT OUR P
+ JSP ZR,TPN3C ;YES! (MAYBE)
+TPN3B: SUBI T1,2
+ SKIPE BOARD(T1)
+ JRST TPN3A
+ XCT TPNT2(I)
+ JUMPE C,TPN3E
+ XCT TPNT3(I)
+ JSP ZR,TPN3C
+TPN3A: SKIPN T2,SPINT(D)
+ JRST TPN6
+ MOVEI T1,MVDST-1
+ MOVSI C,(SETZ)
+TPNC1: CAML T1,MVDMF ;MAKE SURE THESE ARE CLEARED AT TCNEV
+ JRST TPNC2
+ ANDCAM C,1(T1)
+ ADDI T1,NWMVE
+ JRST TPNC1
+
+TPNC2: PUSHJ P,TCNEV
+ MOVSI ZR,MVDPCP_MVDSFT ;PINNING CONSTRAINED PIECE
+ DPB B,[MVDPC2,,ZR]
+ MOVE T1,PIECEL(D)
+ DPB T1,[MVDSQ,,ZR]
+ DPB D,[MVDPC,,ZR]
+ AOS MVDSP
+ MOVEM ZR,@MVDSP
+ AOS MVDSP
+ MOVEM C,@MVDSP
+TPN6: LDB T1,[MVDPC2,,1(TT)]
+ MOVE C,PVALUE(D)
+ SUB C,PVALUE(T1)
+ JUMPLE C,TPN6A
+ CAMLE C,TPNTM1 ;ATTACKING WITH LESS, CREDIT XRAY
+ MOVE C,TPNTM1
+ MOVSI ZR,MVDXRY_MVDSFT
+ DPB T1,[MVDPC2,,ZR]
+ DPB D,[MVDPC,,ZR]
+ TLO ZR,(MVSAB)
+ LDB T1,[MVDSQ,,1(TT)]
+ DPB T1,[MVDSQ,,ZR]
+ AOS MVDSP
+ MOVEM ZR,@MVDSP
+ AOS MVDSP
+ MOVEM C,@MVDSP
+TPN6A:
+ JRST TPN2B
+
+TPN3D: LDB C,[BRANK,,BPREL(T1)]
+ XCT TPNT4(I) ;COULD DOUBLE ADV HELP?
+ JRST TPN3B ;NO
+ XCT TPNT5(I)
+ JUMPE C,TPN3B
+ XCT TPNT3(I)
+ JSP ZR,TPN3C ;YES! (MAYBE)
+ JRST TPN3B
+
+
+TPN3E: LDB C,[BRANK,,BPREL(T1)]
+ XCT TPNT4(I)
+ JRST TPN3A
+ XCT TPNT5(I)
+ JUMPE C,TPN3A
+ XCT TPNT3(I)
+ JSP ZR,TPN3C
+ JRST TPN3A
+
+TPN3C: CAMN T1,LMAS
+ JRST @ZR ;PC WILL BLOCK P
+ MOVE T2,PIECEL(D)
+ LDB C,[MVDDIR,,1(TT)]
+ CAIGE C,4
+ JRST TPN3F ;FILE OR RANK OK
+ XCT TPNT6-4(C)
+ JRST @ZR ;P WILL RELEASE PIN
+TPN3F: MOVSI ZR,MVDPPT_MVDSFT
+ DPB B,[MVDPC2,,ZR]
+ MOVE T1,PIECEL(D)
+ DPB T1,[MVDSQ,,ZR]
+ DPB D,[MVDPC,,ZR]
+ AOS MVDSP
+ MOVEM ZR,@MVDSP
+ AOS MVDSP
+ MOVE T2,PVALUE(D)
+ SUBI T2,PWNV
+ MOVEM T2,@MVDSP
+ JRST TPN3A
+
+TPNT1: -BW+1
+ BW+1
+
+TPNT2: MOVE C,BOARD+BW(T1)
+ MOVE C,BOARD-BW(T1)
+
+TPNT3: SKIPGE LMGSTD-PIECE(C)
+ SKIPGE SNFBP-PIECE(C)
+
+TPNT4: CAIE C,4
+ CAIE C,5
+
+TPNT5: MOVE C,BOARD+2*BW(T1)
+ MOVE C,BOARD-2*BW(T1)
+
+TPNT6: CAIN T1,-BW+1(T2)
+ CAIN T1,-BW-1(T2)
+ CAIN T1,BW-1(T2)
+ CAIN T1,BW+1(T2)
+
+
+TPNDT1: NPAS,,BPAS(C)
+ NPAS,,WPAS(C)
+
+TPNDT2: NPPAS,,BPAS(C)
+ NPPAS,,WPAS(C)
+
+TPN5: LDB C,[THRVAL,,1(T2)]
+ HRRZ ZR,2(T2)
+ ADD C,ZR ;VAL OF THREAT+TEMPO
+ CAML C,TPNTM1
+ JRST TPN5A ;NOT BIG ENUF
+ MOVSI ZR,BTHANS
+ IORM ZR,2(T2) ;MARK THREAT ANSWERED
+ JRST TPN5A
+
+TPN2A: MOVSI ZR,400000
+ IORM ZR,1(TT) ;NOT REALLY PIN SO CANCEL
+TPN2B: POP P,A
+ JRST TPN2
+
+TPN1B: MOVSI S,1 ;PINNING TO K
+ JRST TPN1A
+
+TEAP1: MOVEI D,NWMVE(S)
+TEAP4: CAML D,MVDSP
+ ERRTTY [ASCIZ /LOSE AT TEAP4/]
+ LDB C,[MVDCD,,(D)]
+ CAIE C,MVDTRD
+ CAIN C,MVDAT
+ JRST TEAP5
+ ADDI D,NWMVE
+ JRST TEAP4
+TEAP5: LDB ZR,[MVDSQ,,(D)]
+ LDB C,[MVDSQ,,(S)]
+ CAME ZR,C
+ ERRTTY [ASCIZ /LOSE AT TEAP5/]
+ SKIPGE (D)
+ JRST TEAP6 ;ATT CANCELLED
+ LDB D,[MVDPC,,(S)] ;ATTACKING PINNED PIECE, EVALUATE
+ MOVE C,PIECEL(D)
+ MOVEI T1,40
+ SKIPGE LMGT(D)
+ JRST TEAP3 ;HIS P A PAWN
+ LDB T2,TPNDT1(I)
+ JUMPN T2,TEAP3 ;HE HAS P DEFENDING
+ MOVEI T1,100
+ LDB T2,TPNDT2(I) ;HE CAN DEF WITH P EVENTUALLY
+ SKIPN T2
+ MOVEI T1,140
+TEAP3: MOVEM T1,1(S)
+ JRST TEAP2
+
+TEAP6: MOVSI ZR,(SETZ)
+ IORM ZR,(S) ;CANCELLED
+ JRST TEAP2
+
+THRP1: MOVE D,MVDMF ;RELEASING PIN, SEE IF CANCELED BY HOLDING PIN ENTRY
+THRP4: CAML D,MVDSP
+ JRST THRP2 ;NO, PIN REALLY RELEASED
+ LDB C,[MVDCD,,1(D)]
+ CAIN C,MVDHPN
+ JRST THRP3 ;FOUND HOLDING PIN FROB
+THRP5: ADDI D,NWMVE
+ JRST THRP4
+
+THRP3: LDB C,[MVDSQ,,1(D)]
+ LDB ZR,[MVDSQ,,1(T2)]
+ CAME ZR,C ;COMPARE SQUARES INVOLVED
+ JRST THRP5
+ IORM TT,1(T2) ;REALLY REAPPLING PIN SO NOT RELEASING
+ JRST THRP2
+
+
+THBC1: SKIPN C,BOARD(A) ;REALLY BREAKING CONSTRAINT?
+ JRST THBC1A ;CAPTING PIECE BEARING?
+ MOVSI D,-18.
+ LDB S,[MVDSQ,,1(T2)]
+THBC1B: LDB ZR,RDATSS(D)
+ CAIN ZR,-PIECE(C)
+ JRST THBC1C ;CAPT PIECE BEARING SO MAYBE NOT BREAKING
+ AOBJN D,THBC1B
+THBC1A: MOVE D,MVDMF
+THBC4: CAML D,MVDSP
+ JRST THBC1D
+ LDB C,[MVDCD,,1(D)]
+ CAIE C,MVDINT ;NOW INTERPOSING?
+ CAIN C,MVDDEF
+ JRST THBC3 ;MAYBE STILL HOLDING
+THBC5: ADDI D,NWMVE
+ JRST THBC4
+
+THBC1D: AOS NCB
+ JRST THBC2
+
+THBC3: LDB C,[MVDSQ,,1(D)]
+ LDB ZR,[MVDSQ,,1(T2)]
+ CAME ZR,C
+ JRST THBC5
+ IORM TT,1(D) ;STILL DEFENDING PIECE SO NOT BREAKING CONSTRAINT
+THBC1C: IORM TT,1(T2) ;NOT DEFENDING EITHER
+ JRST THBC2
+
+THRA1: LDB ZR,[MVDSQ,,1(T2)] ;REALLY RELEASING ATT?
+ CAMN ZR,A
+ JRST THRA6 ;REALLY CAPTURING
+THRA7: MOVE D,MVDMF ;SEE IF HOLDING ATTACK
+THRA4: CAML D,MVDSP
+ JRST THRA2A ;NO
+ LDB C,[MVDCD,,1(D)]
+ CAIN C,MVDAT
+ JRST THRA3
+THRA5: ADDI D,NWMVE
+ JRST THRA4
+
+THRA2A: PUSH P,A ;NOT HOLDING, RELEASING SQ?
+ LDB A,[MVDSQ,,1(T2)]
+ SKIPL BPCHD(A)
+ PUSHJ P,MCAFS
+ PUSH P,B
+ PUSH P,S
+ HRRZ S,B
+ MOVEI B,0
+ PUSHJ P,SQCAFS
+ POP P,S
+ POP P,B
+ PUSH P,T1
+ PUSH P,T2
+ LDB T1,[BSQSP,,CNTRL(A)]
+ SKIPE T2,CTLFAC(T1)
+ PUSHJ P,TATSQC
+ MOVE ZR,T2
+ MOVE T1,SQCAFA
+ SKIPE T2,CTLFAC(T1)
+ PUSHJ P,TATSQC
+ SUB T2,ZR
+ SKIPN I ;NEGATES (SINCE WE WANT TO ADD TO POSRLS)
+ MOVNS T2
+ RP RLSING *S!A SQ CTL *U!T2,ADDM T2,POSRLS
+ SKIPN BOARD(A)
+ XCT THRA2T(I)
+ JRST THRA2C ;SQ OCC OR WE STILL CONTROL
+ MOVE T1,ATEVLT+1(I)
+THRA2D: ILDB T2,T1
+ JUMPE T2,THRA2C
+ TRZN T2,100
+ AOS PNSQS(T2)
+ TLNE T1,770000
+ JRST THRA2D
+THRA2C: POP P,T2
+ POP P,T1
+ POP P,A
+ JRST THRA2
+
+THRA3: LDB C,[MVDPC2,,1(D)] ;FOUND ATT, SAME SQ, ETC
+ CAIE C,(B)
+ JRST THRA5
+ LDB C,[MVDSQ,,1(D)]
+ LDB ZR,[MVDSQ,,1(T2)]
+ CAME ZR,C
+ JRST THRA5
+ IORM TT,1(D) ;HOLDING ATTACK
+ LDB C,[MVDCD,,1+NWMVE(D)] ;IS FOLLOWING ENTRY ATTACKING STOPSQ?
+ CAIN C,MVDAPS
+ IORM TT,1+NWMVE(D) ;NEGATE IT TOO
+THRA6: IORM TT,1(T2)
+ JRST THRA2
+
+THRA2T: CAIG T1,MSQWD
+ CAIL T1,MSQBD
+
+
+THRUB1: LDB C,[MVDPC,,1(T2)] ;PAWN ALLEDGEDLY BEING UNBLOCKED
+ SKIPE T1,BOARD(A)
+ CAIE T1,PIECE(C)
+ JRST THRUB2
+ IORM TT,1(T2) ;NO, WE ARE REALLY CAPTURING P
+ JRST THRUB2
+
+THRRD1: MOVE D,MVDMF ;SEE IF RELEASING DEF
+THRRD4: CAML D,MVDSP
+ JRST THRRD2
+ LDB C,[MVDCD,,1(D)]
+ CAIN C,MVDDEF
+ JRST THRRD3
+THRRD5: ADDI D,NWMVE
+ JRST THRRD4
+
+THRRD3: LDB C,[MVDSQ,,1(D)]
+ LDB ZR,[MVDSQ,,1(T2)]
+ CAME ZR,C
+ JRST THRRD5
+ IORM TT,1(D)
+ IORM TT,1(T2) ;NOT REALLY RELEASING DEF
+ SKIPL SLDPC(B)
+ JRST THRRD2
+ MOVE D,MVDMF ;SEE IF NOT REALLY SETTING UP DISCOVERY
+THRND4: CAML D,MVDSP
+ JRST THRND2
+ LDB C,[MVDCD,,1(D)]
+ CAIN C,MVDSD
+ JRST THRND3
+THRND5: ADDI D,NWMVE
+ JRST THRND4
+
+THRND3: LDB C,[MVDDIS,,1(D)]
+ JUMPN C,THRND5 ;IF DISCOVERED OK
+ LDB C,[MVDSQ,,1(D)]
+ LDB ZR,[MVDSQ,,1(T2)]
+ CAME ZR,C
+ JRST THRND5
+ LDB C,[MVDDIR,,1(D)]
+ LDB ZR,[MVDDIR,,1(T2)]
+ CAME ZR,C
+ JRST THRND5
+ IORM TT,1(D) ;THIS DISCOVERY ALREADY POSSIBLE
+THRND2: JRST THRRD2
+
+
+MCLSD: MOVE ZR,POSNET ;POS VAL OF CAPTED PC
+ ASH ZR,@STDVL1 ;POS VAL OF MOVE
+ MOVE S,EGAIN ;DETERMINE SEARCH CLASS OF MOVE
+ SUB ZR,POSBGF ;COMPENSATE FOR BUGGERING
+ ADD S,ZR
+ CAMGE S,AHDATS(T1)
+ JRST MCLS1 ;DG NOT GOOD ENUF
+ SKIPN ALOSS
+ SKIPE UATHV
+ JRST MCLS2
+ MOVEI T2,DGNG
+ POPJ P,
+
+MCLS2: SUB S,UATHV
+ ADD S,ALOSS
+ CAMGE S,AHDATS(T1)
+ JRST MCLS1
+ MOVEI T2,DGNGU
+ POPJ P,
+
+MCLS1: SKIPL S,EGAIN
+ ADD S,SAGAIN
+ ADD S,ZR
+ ADD S,SDAGN
+ SUB S,UATHV
+ ADD S,ALOSS
+ CAMGE S,AHDATS(T1)
+ JRST MCLS3
+ MOVEI T2,DGST
+ POPJ P,
+
+MCLS3: ADD S,DAGAIN ;NO CHECK FOR DGSTA
+ SKIPL EGAIN
+ ADD S,AGAIN
+ ADD S,LSOSTV
+ CAMGE S,AHDATS(T1)
+ JRST MCLS4
+ MOVEI T2,DGOT
+ POPJ P,
+
+MCLS4: MOVE S,EGAIN
+ ADD ZR,POSBGF ;UNCOMPENSATE FOR BUGGERING ABOVE
+ ADD S,ZR
+ ADD S,SAGAIN
+ ADD S,AGAIN
+ ADD S,PGAIN
+ ADD S,IGAIN
+ ADD S,SDAGN
+ ADD S,DFSVP
+ ADD S,DAGAIN
+ ADD S,SOSTV
+ CAMGE S,AHDATS(T1)
+ JRST MCLS5
+ MOVEI T2,DTHR
+ POPJ P,
+
+MCLS5: SKIPLE SDAGN
+ JRST MCLS6
+ SKIPG DAGAIN
+ SKIPLE SAGAIN
+ JRST MCLS6
+ SKIPG EGAIN
+ SKIPLE AGAIN
+ JRST MCLS6 ;MOVE HAS A + VIRTUE
+ SKIPG DFSAVE
+ SKIPLE VTHRA
+ JRST MCLS6
+ SKIPG DFSVP
+ SKIPLE CMTHRA
+ JRST MCLS6
+ SKIPL ALOSS ;NO + VIRTUE, ANY -?
+ SKIPGE EGAIN
+ JRST MCLS7
+ MOVEI T2,DIRVM
+ POPJ P,
+
+
+MCLS6: MOVEI T2,DPOSV
+ POPJ P,
+
+MCLS7: MOVEI T2,DDBDM
+ POPJ P,
+
+CCPV: RP COMPUTE TACT POS VALS FOR *P!B AT *S!A,MOVEM A,CSMTM
+ SKIPGE RFPCS(B)
+ PUSHJ P,LMFA3
+ SKIPGE DDPCS(B)
+ PUSHJ P,LMDA
+ XCT LMGRT1(I)
+ XCT OURGY1(I) ;SKIPLE T1,BOARD+(-)BW(A)
+ JRST .+3
+ SKIPE Q,PPASED-PIECE(T1) ;SITTING "IN FRONT OF" HIS PC, IS IT PASSED P?
+ JRST CCPV4
+CCPV5: HRROI Q,CCPV1
+ PUSH P,J
+ SKIPGE LMGT(B)
+ JRST CCPV2
+ PUSHJ T,@LMGSTD(B)
+CCPV3: POP P,J
+ MOVE A,CSMTM
+ MOVE Q,LMQS
+ MOVE W,PDV(B)
+ RP POSITIONAL VALUE,IMUL W,PINVF(B)
+ POPJ P,
+
+CCPV2: PUSHJ T,LMGR1C
+ JRST CCPV3
+
+CCPV4: MOVSI ZR,MVDUBP_MVDSFT
+ DPB B,[MVDPC2,,ZR]
+ SUBI T1,PIECE
+ DPB T1,[MVDPC,,ZR]
+ DPB A,[MVDSQ,,ZR]
+ MOVN T1,PPP(Q)
+ AOS MVDSP
+ MOVEM ZR,@MVDSP
+ AOS MVDSP
+ MOVEM T1,@MVDSP
+ JRST CCPV5
+
+
+
+LMGR1A: PUSH P,W
+ MOVEI W,0
+ RP COMPUTE DEV VAL FOR *P!B AT *S!A,MOVEM A,CSMTM
+ ;SAVE CURRENT ORG SQUARE FOR USE IN LMGR2
+ SKIPGE RFPCS(B)
+ PUSHJ P,LMFA3
+ SKIPGE DDPCS(B)
+ PUSHJ P,LMDA
+ XCT LMGRT1(I) ;BLOCK PASSED PAWNS
+ XCT OURGY1(I)
+ JRST LMGR1F
+ SKIPE Q,PPASED-PIECE(T1)
+ JRST LMGR1G ;BLOCKING PASSED P
+LMGR1F: HRROI Q,LMGR2
+ SKIPGE LMGT(B)
+ JRST LGR1C
+ PUSHJ T,@LMGSTD(B) ;EVALUATE DEVELOPMENT AND STRATEGIC VALUE
+LMGR1B: IMUL W,PINVF(B)
+ RP TOTAL POSITIONAL VALUE, ADD W,(P)
+ SUB P,[1,,1]
+ MOVE Q,LMQS
+ MOVE A,CSMTM
+ POPJ P,
+
+LGR1C: SKIPGE @LGR1CT(I)
+ JRST LGR1C1 ;QUEENING
+ PUSHJ T,LMGR1C
+ JRST LMGR1B
+
+LMGR1C: XCT LMGRT(I) ;EVALUATE PAWN ATTACK
+ PUSHJ T,(Q)
+ SUBI A,2
+ JRST (Q)
+
+LMGR1G: MOVSI ZR,MVDBPP_MVDSFT ;BLOCKING PASSED P
+ DPB B,[MVDPC2,,ZR]
+ SUBI T1,PIECE
+ DPB T1,[MVDPC,,ZR]
+ DPB A,[MVDSQ,,ZR]
+ MOVE T1,PPP(Q)
+ AOS MVDSP
+ MOVEM ZR,@MVDSP
+ AOS MVDSP
+ MOVEM T1,@MVDSP
+ JRST LMGR1F
+
+LMGRT: ADDI A,BW+1
+ SUBI A,BW-1
+
+
+LGR1CT: BOARD+BW(A)
+ BOARD-BW(A)
+
+LGR1C1: AOS J,PROCNT ;"QUEENING"
+ CAIN J,4
+ SETOM ICKF
+ MOVE T1,LGR1TV-4(J)
+ ADDM T1,EGAIN
+ DPB J,[170300,,-2(P)]
+ PUSHJ T,@LGR1T-4(J)
+ JRST LMGR1B
+
+LGR1T: LSQUEEN
+ LSROOK
+ LSBIS
+ LMKNT
+
+LGR1TV: KQV-PWNV
+ RV-PWNV
+ BV-PWNV
+ NV-PWNV
+
+LGR2TV: KQV
+ RV
+ BV
+ NV
+
+PROCNT: 0
+
+LMGCD:
+TRS2: ;INSERT TRACE TEST WHEN IN TRACE MODE
+ MOVEI T1,MVDST-1
+ MOVEM T1,MVDSP
+ MOVE T1,ENPCL(B)
+ MOVEM T1,EPGNE ;GAIN DUE TO MOVING OUT OF PRISE
+ CLEARM RUMVLU
+ CLEARM FREVLU
+LMGCD2: PUSH P,A
+ RP COMPUTE DEVEL VAL, CLEARB R,W
+ MOVE A,PIECEL(B)
+ PUSHJ P,CCPV
+ RP CURRENT DEVEL VAL, MOVEM W,CDEVT(B)
+ MOVEM W,CPOSV ;POS VALUE OF CURRENT LOCN
+ SKIPE T2,BPINT(B)
+ JRST LDPN
+LDPNR: SKIPE T2,SPINT(B)
+ JRST LDSP1
+LDSP2:
+ SKIPE NTPCC
+ JRST LDTPC1
+LDTPC2:
+LMGCP2: MOVE T2,PLYN
+ LDB T1,[PTID,,PIECE(B)]
+ XCT LMGCDX(T1) ;FACTORS RELATING TO TYPE OF PIECE
+LMGCDA:
+LMGCD7:
+LMGCD8:
+LMGCD5: SKIPE T1,ENPCL(B)
+ JRST LDMVT1 ;MOVING THREATNED PC
+LDMVT2: MOVNM R,CDEVV
+ POP P,A
+ ANDI A,177
+ MOVE T1,MVDSP
+ MOVEM T1,MVDMF ;STORE PNTR TO DESC'S THAN APPLY TO ALL MOVES THIS PC
+ JRST LMGCD1
+
+LDSP1: MOVSI ZR,MVDABN_MVDSFT ;APPARENTLY BREAKING CONSTRAINT
+ DPB B,[MVDPC2,,ZR]
+ LDB T1,[SPINSQ,,(T2)]
+ DPB T1,[MVDSQ,,ZR]
+ LDB T1,[SPINCP,,1(T2)]
+ DPB T1,[MVDPC,,ZR]
+ AOS MVDSP
+ MOVEM ZR,@MVDSP
+ AOS MVDSP
+ LDB T1,[SPINVL,,(T2)]
+ MOVNM T1,@MVDSP
+ LDB T2,[SPNLK,,1(T2)]
+ JUMPE T2,LDSP2
+ JRST LDSP1
+
+LDPN: MOVSI ZR,MVDROP_MVDSFT ;RELIEVING PIN BY MOVING BASE PIECE
+ DPB B,[MVDPC2,,ZR]
+ LDB T1,[PINOPS,,1(T2)]
+ DPB T1,[MVDSQ,,ZR]
+ LDB T1,[PINATP,,1(T2)]
+ DPB T1,[MVDPC,,ZR]
+ LDB T1,[PINDIR,,1(T2)]
+ DPB T1,[MVDDIR,,ZR]
+ AOS MVDSP
+ MOVEM ZR,@MVDSP
+ AOS MVDSP
+ CLEARM @MVDSP
+ HRRZ T2,(T2)
+ JUMPE T2,LDPNR
+ JRST LDPN
+
+LMGCDX: JRST LMGCDP
+ JRST LMGCDN
+ JRST LMGCDB
+ JRST LMGCDR
+ JFCL
+ JRST LMGCDK
+
+LMGCDK: SKIPE T1,NMOVES(B) ;NEG FACTORS ON KING MOVE
+ JRST LMGCD5
+ RC FIRST KING MOVE,ADD R,FMKING
+ XCT LMGKT1(I) ;DOES QR EXIST?
+ XCT LMGKT2(I) ;HAS IT MOVED?
+ JRST .+2
+ JRST LGCDK2
+ XCT LMGKT3(I) ;KR
+ XCT LMGKT4(I)
+ JRST LMGCD5
+LGCDK2: RC MOVING K WHEN O-O(-O) POSSIBLE,ADD R,KKCAS
+ JRST LMGCD5
+
+LMGCDR: SKIPN ENPCL(B)
+ SKIPE @NKM(I)
+ JRST LMGCDA
+ SKIPN NMOVES(B)
+ RC MOVING R WHEN O-O(-O) POSSIBLE, ADD R,FMROOK
+ JRST LMGCDA
+
+LMGCDN:
+LMGCDB: CAIGE T2,2
+ JRST LMGCDA
+ SKIPE NMOVES(B)
+ JRST LMGCDA
+ RC MOVING MINOR PIECE FIRST TIME, SUB R,MPFMV
+ MOVE T1,RKSD(B)
+ SKIPN @NKM(I)
+ SKIPE NMOVES(T1)
+ JRST LMGCDA
+ SKIPN T2,PIECEL(T1)
+ JRST LMGCDA
+ MOVE T1,PCASV
+LMCDB2: ADD T2,TOCNTR(B)
+ CAMN T2,@OKINGT(I)
+ JRST LMCDB1
+ SKIPE BOARD(T2)
+ SUB T1,PCASVI
+ JRST LMCDB2
+
+LMCDB1: RC SET UP O-O(-O),SUB R,T1
+ JRST LMGCDA
+ JRST LMGCDA
+
+LMGCDP:
+LGCDP2: SKIPE T1,PPTP(B)
+ XCT LMPPTP(T1)
+ JRST LMGCDA
+
+LDMVT1: MOVSI ZR,MVDMTP_MVDSFT
+ DPB B,[MVDPC2,,ZR]
+ AOS MVDSP
+ MOVEM ZR,@MVDSP
+ AOS MVDSP
+ MOVEM T1,@MVDSP
+ JRST LDMVT2
+
+PP RKSD:, REPEAT 9, ,[105]-NMOVES
+ REPEAT 2,WKR-PIECE
+ ,[105]-NMOVES
+ REPEAT 3,WQR-PIECE
+ REPEAT 10., ,[105]-NMOVES
+ REPEAT 2,BKR-PIECE
+ ,[105]-NMOVES
+ REPEAT 3,BQR-PIECE
+ ,[105]-NMOVES
+
+PP TOCNTR:, REPEAT 4,[
+ REPEAT 4,1
+ REPEAT 4,-1
+]
+
+ RC MOVING P DEFENDED BY P, ADD R,LMMPDP
+LMPPTP: ERRTTY [ASCII /LOSE AT LMPPTP!/]
+ RC MOVING FORWARD PAWN, SUB R,LMMFP
+ RC MOVING BACKWARD PAWN, SUB R,LMMBP
+ RC MOVING ISOLATED PAWN, SUB R,LMMIP
+
+
+LMGKT1: SKIPE PIECEL+WQR-PIECE
+ SKIPE PIECEL+BQR-PIECE
+
+LMGKT2: SKIPE NMOVES+WQR-PIECE
+ SKIPE NMOVES+BQR-PIECE
+
+LMGKT3: SKIPE PIECEL+WKR-PIECE
+ SKIPE PIECEL+BKR-PIECE
+
+LMGKT4: SKIPE NMOVES+WKR-PIECE
+ SKIPE NMOVES+BKR-PIECE
+
+LDTPC1: MOVSI T1,-18.
+LDTPC3: LDB T2,RDAT(T1)
+ JUMPE T2,LDTPC4
+ XCT RMOY6+1(I)
+ SKIPGE LMGT(T2)
+ JRST LDTPC4 ;HIS PC OR P OR OUR P
+ SKIPE PMV(T2)
+ JRST LDTPC4 ;NOT TRAPPED
+ SKIPN S,ENPCL(T2)
+ AOSA FREVLU
+ ADDM S,RUMVLU ;MAKING ROOM FOR E.P. PC
+LDTPC4: AOBJN T1,LDTPC3
+ JRST LDTPC2
+
+ATEVL: SKIPL BPCHD(A) ;CLOBBERS C,D,T1,T2,S,ZR
+ JRST MCAF ;SQUARE CHANGED
+ SKIPL WPCOR(A)
+ SKIPGE BPCOR(A)
+ JRST ATEV2 ;MORE THAN 5 BEAR ON SQUARE FOR ONE SIDE
+ AOS ATEVLC ;INCR UPDATE COUNT
+ MOVEI C,DFPCT
+ MOVEI D,ATPCT
+ MOVE T1,ATEVL1(I)
+ SKIPN TT,@T1
+ JRST ATEVF1 ;NO PCS
+ TDNN TT,[1777,,-1]
+ ADD T1,[340000,,] ;ONLY ONE PC
+ATEVF2: LDB T2,T1
+ JUMPE T2,ATEVF5
+ TRZE T2,100
+ TLO T2,(SETZ)
+ MOVEM T2,(C)
+ CAIGE C,DFPCT-SPCLST
+ JRST ATEVFL
+ SOS C
+ATEVF5: ADD T1,[70000,,]
+ JUMPGE T1,ATEVF2
+ATEVF1: MOVEM C,DFPCP
+ MOVE T1,ATEVL1+1(I)
+ SKIPN TT,@T1
+ JRST ATEVF4
+ TDNN TT,[1777,,-1]
+ ADD T1,[340000,,]
+ATEVF3: LDB T2,T1
+ JUMPE T2,ATEVF6
+ TRZE T2,100
+ TLO T2,(SETZ)
+ MOVEM T2,(D)
+ CAIGE D,ATPCT-SPCLST
+ JRST ATEVFL
+ SOS D
+ATEVF6: ADD T1,[70000,,]
+ JUMPGE T1,ATEVF3
+ATEVF4: MOVEM D,ATPCP
+ MOVEI TT,ATPCT-1
+ SUB TT,D
+ MOVEM TT,NATKS
+ POPJ P,
+
+ATEVLT: 430700,,WPCOR(A)
+ 430700,,BPCOR(A)
+ 430700,,WPCOR(A)
+
+ATEVL1: 700,,WPCOR(A)
+ 700,,BPCOR(A)
+ 700,,WPCOR(A)
+
+ATEVL2: 340700,,WPCOR(A)
+ 340700,,BPCOR(A)
+ 340700,,WPCOR(A)
+
+ATEVL3: 430700,,WPCOR(Q)
+ 430700,,BPCOR(Q)
+ 430700,,WPCOR(Q)
+
+ATEVL4: 430700,,WPCOR(T1)
+ 430700,,BPCOR(T1)
+ 430700,,WPCOR(T1)
+
+ATEVFL: ERRTTY [ASCII /ERR AT ATEVF/]
+
+ATEV2: AOS NATEVC
+ATEVE: AOS ATEVEC
+ PUSH P,S
+ PUSH P,Q
+ PUSH P,J
+ MOVEI C,DFPCT
+ MOVEI D,ATPCT ;LIST ATTACKS AND DEFS OF SQ IN A
+ SKIPE T1,BDA1(A) ;RET PNTR TO DEFS IN C ATTS IN D
+ PUSHJ P,AT1 ;SIGN SET IN PNTR TABLE MEANS UNCOVERED AFTER PREVOUS ATTACKS
+ SKIPE T1,BDA2(A) ;SIDE TO MOVE "DEFENDS"
+ PUSHJ P,AT2
+ SKIPE T1,BDA3(A)
+ PUSHJ P,AT3
+ MOVEM C,DFPCP
+ MOVEM D,ATPCP
+ MOVEI TT,ATPCT-1
+ SUB TT,D
+ MOVEM TT,NATKS
+ POP P,J
+ POP P,Q
+ POP P,S
+ POPJ P,
+
+BATSVB: ;BEGINNING SAVE BLOCK FOR ATEVE
+ATPCP: 0 ;POINTER TO ATTACK PIECES TABLE DOES NOT POINT TO ACTIVE ENTRY IN STEADY STATE
+DFPCP: 0 ;DEFENDING PIECES
+NATKS: 0 ;NUMBER ATTACKS - 1
+SPCLST==10. ;SIZE OF LISTING TABLES
+ BLOCK SPCLST
+ATPCT=.-1
+ BLOCK SPCLST
+DFPCT=.-1
+EATSVB: ;END SAVE BLOCK
+ATSVBB: BLOCK EATSVB-BATSVB ;PLACE TO STORE ATPCP, ETC IF WANT TO ATEVE
+ ; AND PRESERVE CONTENTS
+
+AT3: MOVE T2,[-6,,12.]
+ JRST AT1A
+
+AT2: SKIPA T2,[-6,,6]
+AT1: MOVSI T2,-6
+AT1A: LDB S,RDAT(T2)
+ JUMPE S,AT1BL
+ XCT RMOY3(I)
+ JRST AT1C ;ATTACKS
+ CAIE C,DFPCT
+ JRST AT1D
+ MOVEM S,(C)
+ SOJA C,AT1B1 ;ONLY ONE
+
+AT1D: MOVE ZR,PVALUE(S)
+ MOVE Q,1(C)
+ CAMLE ZR,PVALUE(Q)
+ JRST AT1E
+ MOVEM S,(C)
+ SOJA C,AT1B1 ;LESS THAN LEAST SO FAR
+
+AT1E: MOVE J,C
+AT1G: CAIN J,DFPCT-1 ;INSERT IN LIST AFTER ITEM POINTED TO IN J
+ JRST AT1F
+ MOVE Q,2(J)
+ CAMLE ZR,PVALUE(Q) ;SKIP ON GOES BEFORE THIS ONE
+ AOJA J,AT1G
+AT1F: HRRZ ZR,C
+ HRLI ZR,1(C)
+ BLT ZR,(J)
+ MOVEM S,1(J)
+ SOJA C,AT1B3
+
+AT1B1: SKIPL LMGT(S)
+ SKIPGE SLDPC(S)
+ JRST AT1B2
+AT1B: CAILE C,DFPCT-SPCLST
+ CAIG D,ATPCT-SPCLST
+ ERRTTY [ASCIZ /LOSSAGE AT ATEVL/]
+AT1BL: AOBJN T2,AT1A
+ POPJ P,
+
+AT1B2: MOVE J,C
+AT1B4: MOVE S,PIECEL(S) ;SLIDING PIECE OR P MAY DOUBLE WITH SOMETHING
+ LDB S,RDATSS(T2) ;J POINTS TO MAIN GUY INSERTED (IE C(1(J)) IS ITS PIECE #
+ JUMPE S,AT1B
+ SKIPGE SLDPC(S) ;SKIP ON NOT SLIDING
+ XCT RMOY3(I) ;SKIP ON OUR GUY
+ JRST AT1B
+ MOVE ZR,PVALUE(S) ;UNBLOCKING OUR PIECE
+ TLO S,400000
+ CAILE C,DFPCT-SPCLST
+ JRST AT1G ;IF COME AROUND AGAIN, KNOWN TO BE SLIDING, NOT P
+ ERRTTY [ASCIZ /LOOP DEFS AT ATEVL/]
+
+AT1B3: SKIPL LMGT(S)
+ SKIPGE SLDPC(S)
+ SOJA J,AT1B4
+ JRST AT1B
+
+AT1C: CAIE D,ATPCT
+ JRST AT2D
+ MOVEM S,(D)
+ SOJA D,AT1B7
+
+AT2D: MOVE ZR,PVALUE(S)
+ MOVE Q,1(D)
+ CAMLE ZR,PVALUE(Q)
+ JRST AT2E
+ MOVEM S,(D)
+ SOJA D,AT1B7
+
+AT2E: MOVE J,D
+AT2G: CAIN J,ATPCT-1
+ JRST AT2F
+ MOVE Q,2(J)
+ CAMLE ZR,PVALUE(Q)
+ AOJA J,AT2G
+AT2F: HRRZ ZR,D
+ HRLI ZR,1(D)
+ BLT ZR,(J)
+ MOVEM S,1(J)
+ SOJA D,AT1B5
+
+AT1B5: SKIPL LMGT(S)
+ SKIPGE SLDPC(S)
+ SOJA J,AT1B6
+ JRST AT1B
+
+AT1B7: SKIPGE LMGT(S)
+ JRST AT1B8
+ SKIPL SLDPC(S)
+ JRST AT1B
+AT1B8: MOVE J,D
+AT1B6: TRNE T2,30
+ JRST AT1B ;MUST BE EP (NOT RANK OR FILE AND BY P)
+ MOVE S,PIECEL(S)
+ LDB S,RDATSS(T2)
+ JUMPE S,AT1B
+ SKIPGE SLDPC(S)
+ XCT RMOY3+1(I)
+ JRST AT1B
+ MOVE ZR,PVALUE(S)
+ TLO S,400000
+ CAILE D,ATPCT-SPCLST
+ JRST AT2G
+ ERRTTY [ASCIZ /LOOP ATS AT ATEVL/]
+
+
+;;FLATA
+
+APINS: 0
+DPINS: 0
+
+;PIECES OF SIDE TO MOVE "DEFEND"
+;PIECES OF OTHER SIDE "ATTACK"
+
+PFLATA: SETOM DPINS ;PINED PIECES DONT DEFEND
+AFLAT1: SETOM APINS ;DONT ATTACK
+ JRST MFLATA
+
+AFLATA: CLEARM DPINS ;PINNED PIECES DEFEND
+ JRST AFLAT1
+
+DFLATA: SETOM DPINS ;PINNED PIECES ATTACK
+ JRST DFLAT1
+
+FLATA: CLEARM DPINS ;PINNED PIECES DEFEND
+DFLAT1: CLEARM APINS ;PINNED PIECES ATTACK
+MFLATA: PUSH P,Q ;SIDE TO MOVE "DEFENDS"
+ PUSH P,S
+ PUSH P,J
+ CLEARB C,D ;SQUARE IN A DO NOT RETURN PIECE IN B
+ SKIPN T1,BDA1(A) ;RET FIRST DEFENDER IN C ATTACKER IN D
+ JRST FLATA1 ;IF PIECE PINNED BY PIECE IN B, IGNORE PIN
+ MOVEI Q,6
+FLATA3: SOS Q
+ TRNE T1,77
+ PUSHJ P,FLATA2
+ LSH T1,-6
+ JUMPN T1,FLATA3
+FLATA1: SKIPN T1,BDA2(A)
+ JRST FLATA8
+ MOVEI Q,12.
+FLATA7: SOS Q
+ TRNE T1,77
+ PUSHJ P,FLATA2
+ LSH T1,-6
+ JUMPN T1,FLATA7
+
+FLATA8: SKIPN T1,BDA3(A)
+ JRST F2R
+ MOVEI Q,69
+FLATA9: TRNE T1,77
+ PUSHJ P,FLATA2
+ LSH T1,-6
+ JUMPN T1,FLATA9
+ JRST F2R
+
+FLATA2: LDB J,[600,,T1]
+ CAIN J,(B)
+ JRST FLATAB
+FLATAC: XCT FAT2(I)
+ JRST FLATA4 ;HIS GUY
+ SKIPGE DPINS
+ SKIPN S,PINT(J)
+FLTP2: SKIPA S,PVALUE(C)
+ JRST FLTP1
+ JUMPE C,FLATA5
+ CAMLE S,PVALUE(J)
+FLATA5: MOVE C,J
+ POPJ P,
+
+FLTP1: HRRZ ZR,(S)
+ JUMPN ZR,CPOPJ ;MULTIPLY PINNED
+ LDB ZR,[PINATP,,1(S)]
+ CAIE ZR,(B)
+ POPJ P, ;HONOR PIN
+ LDB ZR,[BPDPB,,1(S)]
+ JUMPE ZR,FLTP2 ;IGNORE PIN
+ POPJ P, ;DONT IGNORE DOUBLE PIN
+
+FLTP3: HRRZ ZR,(S)
+ JUMPN ZR,CPOPJ ;MULTIPLY PINNED
+ LDB ZR,[PINATP,,1(S)]
+ CAIE ZR,(B)
+ POPJ P,
+ LDB ZR,[BPDPB,,1(S)]
+ JUMPE ZR,FLTP4
+ POPJ P,
+
+FLTP5: PUSH P,S
+ MOVE S,PINT(J)
+ HRRZ ZR,(S)
+ JUMPN ZR,POPSJ ;MULTIPLY PINNED
+ LDB ZR,[BPDPB,,1(S)]
+ JUMPN ZR,POPSJ ;DONT IGNORE PIN BY MULTIPLE PIECES
+ LDB ZR,[PINATP,,1(S)]
+ CAIN ZR,(B)
+ JRST FLTP6R
+
+POPSJ: POP P,S
+ POPJ P,
+
+FLTP6R: POP P,S
+ JRST FLTP6
+
+FLTP7: PUSH P,S
+ MOVE S,PINT(J)
+ HRRZ ZR,(S)
+ JUMPN ZR,POPSJ ;MULTIPLY PINNED
+ LDB ZR,[BPDPB,,1(S)]
+ JUMPN ZR,POPSJ
+ LDB ZR,[PINATP,,1(S)]
+ CAIN ZR,(B)
+ JRST FLTP8R
+ POP P,S
+ POPJ P,
+
+FLTP8R: POP P,S
+ JRST FLTP8
+
+FLATA4: SKIPGE APINS
+ SKIPN S,PINT(J)
+FLTP4: SKIPA S,PVALUE(D)
+ JRST FLTP3
+ JUMPE D,FLATAA
+ CAMLE S,PVALUE(J)
+FLATAA: MOVE D,J
+ POPJ P,
+
+FLATAB: CAILE Q,7
+ POPJ P,
+ MOVE J,PIECEL(J)
+ LDB J,F2LAT(Q)
+ JUMPE J,CPOPJ
+ SKIPGE SLDPC(J)
+ JRST FLATAC
+ POPJ P,
+
+F2LA: PUSH P,Q
+ PUSH P,S
+ PUSH P,J
+ CLEARB T1,T2 ;FIND 2ND ATTACK ON SQUARE IN A
+ SKIPN S,BDA1(A) ;RESULT OF FLATA IN C,D
+ JRST F2LA1 ;RETURN RESULT IN T1,T2
+ MOVEI Q,6
+F2LA3: SOS Q
+ TRNE S,77
+ PUSHJ P,F2LA2
+ LSH S,-6
+ JUMPN S,F2LA3
+F2LA1: SKIPN S,BDA2(A)
+ JRST F2LA8
+ MOVEI Q,12.
+F2LA7: SOS Q
+ TRNE S,77
+ PUSHJ P,F2LA2
+ LSH S,-6
+ JUMPN S,F2LA7
+F2LA8: SKIPN S,BDA3(A)
+ JRST F2R
+ MOVEI Q,69
+F2LA9: TRNE S,77
+ PUSHJ P,F2LA2
+ LSH S,-6
+ JUMPN S,F2LA9
+F2R: POP P,J
+ POP P,S
+ POP P,Q
+ POPJ P,
+
+
+F2LA2: LDB J,[600,,S]
+ CAIN J,(B)
+ JRST F2LA2A
+
+F2LA4B: XCT FAT2(I)
+ JRST F2LA4
+ CAMN J,C
+ JRST F2LA4A
+ SKIPGE DPINS
+ SKIPN PINT(J)
+ JRST .+2
+ JRST FLTP5
+FLTP6: JUMPE T1,F2LA5
+ MOVE ZR,PVALUE(T1)
+ CAMLE ZR,PVALUE(J)
+F2LA5: MOVE T1,J
+ POPJ P,
+
+F2LA4: CAMN J,D
+ JRST F2LA4A
+ SKIPGE APINS
+ SKIPN PINT(J)
+ JRST .+2
+ JRST FLTP7
+FLTP8: JUMPE T2,F2LA4C
+ MOVE ZR,PVALUE(T2)
+ CAMLE ZR,PVALUE(J)
+F2LA4C: MOVE T2,J
+ POPJ P,
+
+F2LA4A: CAILE Q,7
+ POPJ P,
+ MOVE J,PIECEL(J)
+ LDB J,F2LAT(Q)
+ JUMPE J,CPOPJ
+ SKIPGE SLDPC(J)
+ JRST F2LA4B
+ POPJ P, ;NOT SLIDING
+
+F2LA2A: CAME J,C
+ CAMN J,D
+ JRST F2LA4A
+ POPJ P,
+
+FAT2: SKIPGE PIECE(J)
+ SKIPL PIECE(J)
+
+F2LAT: BDARL(J)
+ BDARR(J)
+ BDAFB(J)
+ BDAFT(J)
+ BDALL(J)
+ BDALR(J)
+ BDAUR(J)
+ BDAUL(J)
+
+APINF: 0 ;ATTACKING PC IGNORED BECAUSE OF PIN
+DPINF: 0 ;DEF PC
+
+WPPIPR: 430700,,WPCOR(A)
+ 430700,,BPCOR(A)
+ 430700,,WPCOR(A)
+
+APPTR: 0 ;PNTR TO ATT PCS
+DPPTR: 0 ;PNTR TO DEF PCS
+
+NFLTT: 0
+
+NDFLT: SETOM DPINS
+ CLEARM APINS
+ JRST NFLT
+
+
+NAFLT: CLEARM DPINS
+ SETOM APINS
+NFLT: CLEARM APINF
+ CLEARM DPINF
+ CLEARM NFLTT
+ SKIPL BPCHD(A)
+ PUSHJ P,MCAFS
+ PUSH P,S
+ MOVE S,WPPIPR(I)
+ ILDB C,S
+NFLT1E: TRZE C,100
+ JRST NFLT1G
+NFLT1F: CAIN C,(B)
+ JRST NFLT3
+ SKIPE TT,PINT(C)
+ SKIPL DPINS
+ JRST NFLT2
+ HRRZ ZR,(T1)
+ JUMPN ZR,NFLT1H
+ LDB ZR,[PINATP,,1(T1)]
+ CAIE ZR,(B)
+ JRST NFLT1H
+ LDB ZR,[BPDPB,,1(T1)]
+ JUMPN ZR,NFLT1H
+NFLT2: MOVEM S,DPPTR
+ CLEARM NFLTT
+ MOVE S,WPPIPR+1(I)
+ ILDB D,S
+NFLT5E: TRZE D,100
+ JRST NFLT5G
+NFLT5F: CAIE D,(B)
+ JRST NFLT3A
+ SKIPE T1,PINT(D)
+ SKIPL APINS
+ JRST NFLT4
+ HRRZ ZR,(T1)
+ JUMPN ZR,NFLT5A
+ LDB ZR,[PINATP,,1(T1)]
+ CAIE ZR,(B)
+ JRST NFLT5H
+ LDB ZR,[BPDPB,,1(T1)]
+ JUMPN ZR,NFLT5H
+NFLT4: MOVEM S,APPTR
+ POP P,S
+ POPJ P,
+
+NFLT1H: SETOM DPINF
+ JRST NFLT1B
+
+NFLT3: SETOM NFLTT
+NFLT1B: TLNN S,770000
+ JRST NFLT1D
+ ILDB C,S
+ JUMPN C,NFLT1E
+ JRST NFLT2
+
+NFLT1D: MOVEI C,0
+ JRST NFLT2
+
+NFLT1G: AOSE NFLTT
+ JRST NFLT1B
+ JRST NFLT1F
+
+
+NFLT5H: SETOM APINF
+ JRST NFLT5A
+
+NFLT3A: SETOM NFLTT
+NFLT5A: TLNN S,770000
+ JRST NFLT5D
+ ILDB D,S
+ JUMPN D,NFLT5E
+ JRST NFLT4
+
+NFLT5D: MOVEI D,0
+ JRST NFLT4
+
+NFLT5G: AOSE NFLTT
+ JRST NFLT5A
+ JRST NFLT5F
+
+NF2LA: PUSH P,Q
+ PUSH P,S
+ MOVE S,DPPTR
+NF2LA2: TLNN S,770000
+ JRST NF2LA1
+ ILDB T1,S
+ TRZ T1,100
+ CAIN T1,(B)
+ JRST NF2LA4
+ SKIPE Q,PINT(T1)
+ SKIPL APINS
+ JRST N2FLA5
+ .VALUE ;INCOMPLETE
+
+;;;MN4
+LMSQV: SKIPL BPCHD(A)
+ PUSHJ P,MCAFS ;SO OBSQP WILL BE RIGHT
+ PUSH T,WPCOR(A)
+ PUSH T,BPCOR(A)
+ PUSH T,CNTRL(A)
+ LDB T1,[BSQSP,,CNTRL(A)]
+ DPB T1,[OBSQP,,CNTRL(A)]
+ PUSH T,BPCHD(A)
+ CLEARM BPCHD(A)
+ PUSH T,A
+ POPJ P,
+
+
+SQVAT: RP WAV *S!A,ADD W,WAV(A)
+ RP BAV *S!A,ADD W,BAV(A)
+
+LMUAGR: SKIPGE BOARD(A) ;FOR UNCOVERED ATTACK
+ POPJ T,
+ POP T,LMUTT0
+ POP T,LMUTT1
+ POP T,LMUTT2
+ PUSH T,@LMURAT(I)
+ PUSH T,@PASI(I)
+ PUSH T,@RDAT(J)
+ PUSHJ P,LMSQV
+ HRLM J,(T)
+ SKIPE NTPCC
+ JRST LMGUB1
+LMGUB2: PUSH T,[LMUUN1]
+ PUSH T,LMUTT2
+ PUSH T,LMUTT1
+ PUSH T,LMUTT0
+ MOVE T1,LMUBAI
+ ADDM T1,@LMURAT(I)
+ MOVE T1,LMUPSI
+ ADDM T1,@PASI(I)
+ SKIPN ATTHF
+ DPB B,RDAT(J)
+ JRST LMGR2C
+
+LMGUB1: CAMN A,ORGPCL ;SQ PC ORG MVING VACATED
+ JRST LMGUB2
+ SKIPN BOARD(A)
+ SKIPE PMV(B)
+ JRST LMGUB2
+ SKIPN T1,ENPCL(B)
+ AOSA FREVLU
+ ADDM T1,RUMVLU
+ JRST LMGUB2
+
+LMGR2: SKIPGE BOARD(A) ;COME HERE FOR EACH SQUARE PIECE ATTACKS
+ POPJ T,
+LMGR2C: XCT SQVAT(I)
+ SKIPN T1,BOARD(A)
+ JRST LMGR2D ;RECORD ATTACK ON SQUARE
+
+LMGR2A: MOVE T1,BOARD(A)
+ SUBI T1,PIECE
+ XCT RMOY4+1(I)
+ JRST LDFP1 ;OUR GUY SEE IF DEFENDING, SETTING UP DISCOVERY, ETC
+ SKIPL RPIECE(T1)
+ JRST LMGCH1
+ SETOM ICKF ;CHECK
+ SETOM RICKF ;REAL CHECK FLAG
+ MOVEM J,CKDIR
+ HRRZM B,CKPC
+LMGCH1: SKIPGE SLDPC(B) ;MV
+ JRST LMGP1 ;SEE IF PINNING SOMETHING, ETC
+ SKIPE S,PINT(T1) ;NOT SLIDING
+ JRST LAPP1 ;ATTACKING PINNED PIECE
+LAPP2:
+LMGP2: SKIPGE LMGT(B) ;PAWN BREAK
+ SKIPL LMGT(T1)
+ JRST LMGPB1 ;NOT PAWN BREAK
+ MOVSI ZR,MVDPWB_MVDSFT ;STORE PAWN BREAK
+ DPB B,[MVDPC2,,ZR]
+ DPB T1,[MVDPC,,ZR]
+ DPB A,[MVDSQ,,ZR]
+ AOS MVDSP
+ MOVEM ZR,@MVDSP
+ AOS MVDSP
+ MOVE S,PFILE(T1)
+ SUB S,@KFILE+1(I)
+ MOVMS S
+ MOVE T2,RPRANK(T1)
+ CAILE S,1
+ TDZA S,S
+ MOVE S,PBRKV(T2)
+ MOVEM S,@MVDSP ;CAUSING P BREAK NEAR OPP K FILE
+LMGPB1:
+
+LMGR2D: MOVSI ZR,MVDAT_MVDSFT ;COME HERE DIRECTLY FOR UNOCC SQ
+ DPB B,[MVDPC2,,ZR]
+ DPB T1,[MVDPC,,ZR]
+ SKIPGE DISCOVF
+ JRST LMDA1
+LMDA2: SKIPE ATTHF
+ JRST LMDA2A
+LMDA2B: DPB A,[MVDSQ,,ZR]
+ DPB J,[MVDDIR,,ZR]
+ AOS MVDSP
+ MOVEM ZR,@MVDSP
+ AOS MVDSP
+ SKIPN T2,T1
+ JRST LMGR2F ;UNOCC SQ
+ SKIPGE RPIECE(T1)
+ JRST LMGR2E
+ MOVE T2,PVALUE(T1) ;MAX POSSIBLE DIRECT GAIN
+LMGR2F: MOVEM T2,@MVDSP
+ XCT HHPP(I) ;MUST IMMED FOLLOW MVDAT ENTRY
+ JRST LMGR2G ;HE HAS NO P.P.
+ LDB T2,[BFILE,,BPREL(A)]
+ SKIPN S,@HPPOF(I) ;S GETS RANK OF HIS P.P. (IF ANY)
+ JRST LMGR2G ;HE HAS NONE ON FILE
+ SKIPE I
+ SKIPA TT,S
+ MOVE TT,REVERS(S)
+ IMULI TT,BW
+ ADDI TT,BW(T2)
+ CAMN TT,CSMTM
+ JRST LMGR2G ;WE ARE CAPTING THIS P P
+ LDB T2,[BRANK,,BPREL(A)]
+ MOVE T1,T2
+ SKIPN I
+ MOVE T1,REVERS(T1)
+ SUB T1,S
+ JUMPLE T1,LMGR2G ;NOT AHEAD OF P
+ MOVSI ZR,MVDAPS_MVDSFT
+ DPB B,[MVDPC2,,ZR]
+ DPB A,[MVDSQ,,ZR]
+ DPB S,[MVDDIR,,ZR]
+ AOS MVDSP
+ MOVEM ZR,@MVDSP
+ MOVE ZR,APSQT1-1(T1)
+ ADD ZR,APSQT2-2(S)
+ SKIPE @OSQA(I)
+ LSH ZR,-2
+ AOS MVDSP
+ MOVEM ZR,@MVDSP
+LMGR2G:
+ POPJ T,
+
+
+LMDA1: TRO ZR,MVDDIB
+ SKIPE BOARD(A)
+ AOS NDA
+ JRST LMDA2
+
+LMDA2A: IOR ZR,ATTHF
+ MOVE T2,ATTHFP
+ SKIPGE LMGT-PIECE(T2)
+ TLO ZR,(MVWAB) ;ATTACKING THRU P
+ JRST LMDA2B
+
+LMGR2E: MOVEI T2,3000.
+ JRST LMGR2F
+
+HHPP: SKIPN NBPPP
+ SKIPN NWPPP
+
+HPPOF: BPPRK(T2)
+ WPPRK(T2)
+
+OSQA: WAAPP(T2)
+ BAAPP(T2)
+
+PBRKV: 0 ;P BREAK AGAINST HIS K
+ 0
+ 200
+ 200
+ 40
+ 20
+ 20
+ 20
+
+APSQT1: 40 ;# RANKS AHEAD OF P ATTACK IS
+ 30
+ 20
+ 17
+ 16
+ 15
+ 14
+ 13
+
+APSQT2: 20 ;RANK OF P BEING OBSTRUCTED
+ 30
+ 40
+ 100
+ 140
+ 300
+
+CSMTM: 0 ;HOLDS SQUARE BEING MOVED TO IN CURRENT MOVE
+
+LMGP1: SKIPE S,PINT(T1)
+ JRST LMGP3A ;ALREADY PINNED BY ME?
+LMGP3B: PUSH P,A ;SEE IF PINNING PIECE
+ MOVEI ZR,0 ;KEEP COUNT # STEPS ALONG LINE
+LMGP3: ADD A,RDT(J)
+ SKIPN T2,BOARD(A)
+ AOJA ZR,LMGP3
+ JUMPL T2,LMGP4
+ XCT OURGY2+1(I)
+ JRST LMGP5 ;HITTING OUR GUY IS HE DEFENDED THRU
+ AOS NPPIN ;# POSSIBLE PINS STORED IN MVDST
+ MOVSI ZR,MVDPIN_MVDSFT
+LMGP6: DPB A,[MVDSQ,,ZR] ;STORES BASE SQUARE OF "PIN"
+ DPB B,[MVDPC2,,ZR]
+ DPB T1,[MVDPC,,ZR] ;PIECE "PINNED"
+ SKIPGE DISCOVF
+ TRO ZR,MVDDIB
+ DPB J,[MVDDIR,,ZR]
+ IOR ZR,ATTHF ;ATTACKING THRU FLAG
+ AOS MVDSP
+ MOVEM ZR,@MVDSP
+ AOS MVDSP
+ CLEARM @MVDSP
+LMGP4: POP P,A
+ JRST LMGP2
+
+LMGP5: SKIPGE LMGT(T1)
+ SOJL ZR,LMGP7 ;ONE SQUARE BEYOND P
+ MOVE ZR,PVALUE(T1)
+ CAMLE ZR,PVALUE(B)
+ JRST LMGP8 ;HE WILL HAVE TO MOVE
+ SKIPL @LDSCT3(J)
+ JRST LMGP4 ;HIS PC DOESNT SLIDE THAT WAY
+LMGP8: MOVSI ZR,MVDTHU_MVDSFT ;DEFENDING THRU
+ JRST LMGP6
+
+LMGP7: SKIPL @PBKDAG(I)
+ JRST LMGP4
+ JRST LMGP8 ;DEFENDING THRU OPP PAWN
+
+LMGP3A: LDB ZR,[PINATP,,1(S)]
+ CAIE ZR,(B)
+ JRST LMGP3C ;NOT PINNED BY ME BEFORE
+ LDB ZR,[PINDIR,,1(S)]
+ CAIN ZR,(J)
+ JRST LMGP2A ;ALREADY PINNED BY SAME PIECE IN SAME DIR
+LMGP3C: HRRZ S,(S)
+ JUMPN S,LMGP3A
+ MOVSI ZR,MVDAPP_MVDSFT ;STORE ATTACKING PINNED PIECE
+ DPB B,[MVDPC2,,ZR]
+ DPB T1,[MVDPC,,ZR]
+ SKIPGE DISCOVF
+ TRO ZR,MVDDIB
+ DPB A,[MVDSQ,,ZR]
+ DPB J,[MVDDIR,,ZR]
+ IOR ZR,ATTHF
+ AOS MVDSP
+ MOVEM ZR,@MVDSP
+ AOS MVDSP
+ CLEARM @MVDSP
+ JRST LMGP3B
+
+LMGP2A: MOVSI ZR,MVDHPN_MVDSFT ;HOLDING PIN
+ DPB A,[MVDSQ,,ZR]
+ DPB B,[MVDPC2,,ZR]
+ DPB T1,[MVDPC,,ZR]
+ SKIPGE DISCOVF
+ TRO ZR,MVDDIB
+ DPB J,[MVDDIR,,ZR]
+ IOR ZR,ATTHF
+ AOS MVDSP
+ MOVEM ZR,@MVDSP
+ AOS MVDSP
+ CLEARM @MVDSP
+ JRST LMGP2
+
+;LTMT1: SKIPL LMGT(B)
+; JRST LTMT2
+; CAME A,LTMTT1(I) ;MOVING TO KN3?
+; JRST LTMT3
+; SKIPE D,@TPT1(I)
+; XCT OURGY+1(I)
+; JRST LTMT3
+; SKIPGE RMDTB-PIECE(D)
+; RC TRAPPING B,ADDI R,200
+;LTMT3: CAME A,LTMTT2(I) ;MOVING TO QN3
+; JRST LTMT2
+; SKIPE D,@TPT4(I)
+; XCT OURGY+1(I)
+; JRST LTMT2
+; SKIPGE RMDTB-PIECE(D)
+; RC TRAPPING B,ADDI R,200
+; JRST LTMT2
+;
+;LTMTT1: BBS+2*BW+1 ;KN3
+; BBS+5*BW+1
+;
+;LTMTT2: BBS+2*BW+6 ;QN3
+; BBS+5*BW+6
+
+LMDV: SKIPL BOARD(A)
+ XCT SQVAT(I)
+ POPJ T,
+
+LAPP1: MOVSI ZR,MVDAPP_MVDSFT ;ATTACKING PINNED PIECE
+ DPB B,[MVDPC2,,ZR]
+ DPB T1,[MVDPC,,ZR]
+ SKIPGE DISCOVF
+ TRO ZR,MVDDIB
+ DPB A,[MVDSQ,,ZR]
+ IOR ZR,ATTHF
+ AOS MVDSP
+ MOVEM ZR,@MVDSP
+ AOS MVDSP
+ CLEARM @MVDSP
+ JRST LAPP2
+
+PBKDAG: WPBDG(J)
+ BPBDG(J)
+ WPBDG(J)
+
+;SIGN SET FOR DIAGS OPP TO THOSE OUR P'S CAPT ON
+WPBDG: REPEAT 6,0
+ -1
+ -1
+ 0
+ 0
+BPBDG=WPBDG+2
+
+LDFP1: CAIN T1,(B)
+ POPJ T,
+LDF1: MOVSI ZR,MVDDEF_MVDSFT ;DEFENDING
+ DPB A,[MVDSQ,,ZR]
+ DPB B,[MVDPC2,,ZR]
+ SKIPGE DISCOVF
+ TRO ZR,MVDDIB
+ DPB T1,[MVDPC,,ZR]
+ SKIPE ATTHF
+ JRST LDFDF1 ;DEFENDING THRU, CHECK IF VAL IS < PC DEFENDING THRU
+LDFDF2: AOS MVDSP
+ MOVEM ZR,@MVDSP
+ AOS MVDSP
+ MOVE ZR,DEFVL(T1)
+ MOVEM ZR,@MVDSP
+LDF1A: SKIPN T2,BPINT(T1) ;SKIP ON PIECE IS BASE OF PIN
+ JRST LDF2
+LDF1C: MOVE ZR,1(T2)
+ TRNN ZR,IPBIT ;SKIP ON DUE TO INADEQUATE DEF OF BASE PC
+ JRST LDF1B
+ MOVSI ZR,MVDDBP_MVDSFT ;STORE HELPING TO RELIEVE PIN BY DEFENDING BASE PIECE
+ DPB B,[MVDPC2,,ZR]
+ DPB T1,[MVDPC,,ZR]
+ LDB TT,[PINOPS,,1(T2)]
+ DPB TT,[MVDSQ,,ZR]
+ SKIPGE DISCOVF
+ TRO ZR,MVDDIB
+ AOS MVDSP
+ MOVEM ZR,@MVDSP
+ AOS MVDSP
+ CLEARM @MVDSP
+LDF1B: HRRZ T2,(T2)
+ JUMPN T2,LDF1C
+
+LDF2: SKIPN ATTHF
+ SKIPL SLDPC(B)
+ POPJ T,
+LDISC1: SKIPGE LMGT(T1)
+ JRST LDISC3 ;P SEE IF BLOCKED
+ SKIPGE @LDSCT3(J)
+ POPJ T, ;PIECE RUNNING INTO ALSO SLIDES THIS DIR
+LDISC6: PUSH P,A
+LDISC2: ADD A,RDT(J) ;SEE WHAT MAYBE DISCOVERING ON
+ SKIPN T2,BOARD(A)
+ JRST LDISC2
+ JUMPL T2,LDISC4 ;NOTHING
+ XCT OURGY2+1(I)
+ JRST LDISC4 ;OUR GUY
+ MOVE TT,PVALUE-PIECE(T2)
+ MOVSI ZR,MVDSD_MVDSFT ;STORE SETTING UP POSSIBLE DISCOVERY
+ DPB B,[MVDPC2,,ZR]
+ MOVE A,(P)
+ DPB A,[MVDSQ,,ZR] ;SQUARE OF PIECE TO MOVE TO DISCOVER
+ DPB J,[MVDDIR,,ZR]
+ SKIPGE DISCOVF
+ TRO ZR,MVDDIB
+ SUBI T2,PIECE
+ DPB T2,[MVDPC,,ZR]
+ AOS MVDSP
+ MOVEM ZR,@MVDSP
+ AOS MVDSP
+ MOVEM TT,@MVDSP ;VAL = VAL OF PIECE MAYBE DISCOVERED ON
+LDISC4: POP P,A
+ POPJ T,
+
+
+LDISC3: SKIPE @LDISCT(I) ;SEE IF P CAN MOVE OUT OF WAY
+ JRST LDISC7 ;BLOCKED AHEAD HAVE CAPT?
+ HRRZ T2,J ;NOT BLOCKED AHEAD
+ CAIL T2,2
+ CAIL T2,4
+ JRST LDISC8 ;CAN UNBLOCK UNLESS ON FILE
+LDISC7: SKIPLE T2,@LDSCT1(I) ;DROP THRU ON ON FILE SO MUST HAVE CAPT
+ XCT OURGY2+1(I)
+ JRST .+2
+ JRST LDISC8 ;SLIGHT CROCK MIGHT BE CAPT ON SAME DIAG
+ SKIPLE T2,@LDSCT2(I)
+ XCT OURGY2+1(I)
+ POPJ T,
+LDISC8: HRRZ T2,J ;IF ON DIAG THAT P ATTACKS, SKIP ONE SQ
+ CAIL T2,4
+ SKIPGE @PBKDAG(I)
+ JRST LDISC6
+ PUSH P,A
+ ADD A,RDT(J)
+ JRST LDISC2
+
+LDSCT3: REPEAT 4,RFPCS(T1) ;ALSO USED AT TAT3D1
+ REPEAT 4,DDPCS(T1)
+
+
+
+LDFDF1: IOR ZR,ATTHF
+ MOVE TT,ATTHFP ;PC ATTACKING THRU
+ MOVE T2,PVALUE-PIECE(TT)
+ CAMG T2,PVALUE(B)
+ JRST LDFDF2 ;NOT BIGGER
+ LDB T2,NHQN(I) ;MUST BE ATTACKIN THRU OUR Q, IS HIS BEARING TOO
+ JUMPE T2,LDFDF3 ;NO
+ MOVE T2,@LMGST(I)
+ CAMN T2,@LMGST+1(I)
+ JRST LDFDF2 ;CAN RECAPT HIS Q
+LDFDF3: TLO ZR,(MVWAB) ;MAKE DEFENCE WEAK
+ JRST LDFDF2
+
+
+CCPV1: SKIPGE T1,BOARD(A) ;COME HERE FOR EACH SQ PRESENTLY ATTACK
+ POPJ T,
+ JUMPE T1,CCPAP1 ;STORE RELEASING ATT ON SQ
+ SUBI T1,PIECE
+ XCT RMOY4+1(I)
+ JRST CCRDF1
+CCPV1A: SKIPE T2,PINT(T1)
+ JRST CCPAP ;PRESENTLY ATTACKING PINNED PIECE
+CCPAP1: MOVSI ZR,MVDRLA_MVDSFT ;STORE RELEASING ATTACK
+CCRDF2: DPB B,[MVDPC2,,ZR]
+ DPB T1,[MVDPC,,ZR]
+ DPB A,[MVDSQ,,ZR]
+ AOS MVDSP
+ MOVEM ZR,@MVDSP
+ AOS MVDSP
+ CLEARM @MVDSP
+ POPJ T,
+
+CCPAP: LDB ZR,[BPDPB,,1(T2)]
+ JUMPN ZR,CCPAP3 ;PIN BY DOUBLED PCS (OUR OTHER GUY HOLDS)
+ LDB TT,[PINATP,,1(T2)]
+ MOVSI ZR,MVDRPA_MVDSFT ;RELEASING ATT ON PIN
+ CAIN TT,(B) ;SKIP ON NOT ME PINNING HIM
+ MOVSI ZR,MVDRPN_MVDSFT ;RELEASING PIN
+ DPB B,[MVDPC2,,ZR] ;PIECE PINNING
+ DPB T1,[MVDPC,,ZR] ;HIS PC UNPINNED
+ DPB A,[MVDSQ,,ZR] ;ITS SQUARE
+ AOS MVDSP
+ MOVEM ZR,@MVDSP
+ AOS MVDSP
+ CLEARM @MVDSP
+CCPAP3: HRRZ T2,(T2)
+ JUMPE T2,CCPAP1
+ JRST CCPAP
+
+
+CCRDF1: MOVSI ZR,MVDRDF_MVDSFT
+ DPB J,[MVDDIR,,ZR] ;STORE DIRECTION FOR SLIDING PC
+ JRST CCRDF2
+
+LDISCT: BOARD+BW(A)
+ BOARD-BW(A)
+
+LDSCT1: BOARD+BW+1(A)
+ BOARD-BW+1(A)
+
+LDSCT2: BOARD+BW-1(A)
+ BOARD-BW-1(A)
+
+
+
+LMUA: TDZA D,D
+LMUA3: AOS D
+ MOVEI T1,0
+ LSHC T1,4
+ SKIPE TT,BDAST(T1) ;MOVE UNBLOCKING SOMETHING
+ JRST LMUA1
+LMUA7: JUMPN T2,LMUA3
+ JRST LMUA2
+
+LMUA1: CAMN A,PIECEL(TT) ;PIECE BEING TAKEN?
+ JRST LMUA7
+ XCT RMOYTT(I)
+ JRST LMUA1A ;HIS GUY
+ SKIPL @LMUAT2(D)
+ JRST LMUA1A
+ SKIPGE @LMUAT3(D)
+ JRST LMUA7 ;OUR OWN GUY ALREADY ACCOUNTED FOR BY CAT (NEVER REALLY BLOCKING HIM)
+LMUA1A: MOVE S,PCATV(TT)
+ MOVE C,PASIN(TT)
+ SKIPL SLDPC(TT) ;S GETS WA, BA INC OF WHATS BEING UNBLOCKED
+ ERRTTY [ASCIZ /LOSE AT LMUA1A/]
+ SKIPA T1,PIECEL(TT)
+LMUA1D: MOVE T1,PIECEL(T1)
+ LDB T1,RDAT1(D)
+ JUMPE T1,LMUA1C
+ MOVE ZR,PIECE(TT)
+ XOR ZR,PIECE(T1)
+ JUMPL ZR,LMUA1C
+ SKIPL SLDPC(T1)
+ JRST LMUA1C
+ ADD S,PCATV(T1)
+ ADD C,PASIN(T1)
+ JRST LMUA1D
+
+LMUA1C: MOVEM S,LMUBAI
+ MOVEM C,LMUPSI
+
+ LDB T1,LMUAT(D) ;FETCH LINE ID FROM SQUARE PIECE MOVING TO (A)
+ MOVE S,PIECEL(TT)
+ LDB ZR,LMUAT1(D)
+ CAME T1,ZR
+ JRST LMUA5 ;NO SECONDARY EFFECTS
+ SKIPGE LMGT(B)
+ JRST LMUA1B
+ XCT RMOYTT+1(I)
+ JRST LMUA7 ;OUR GUY DO NOTHING EX PAWN MOVE
+LMUA1B: SUB S,A
+ MOVE ZR,PIECEL(B)
+;DROPS THRU;DROPS IN
+ SUBM A,ZR
+ XOR S,ZR
+ JUMPGE S,LMUA7 ;RESTRICTING
+ XCT RMOYTT+1(I)
+ JRST LMUOP
+ SKIPGE RPIECE(B)
+ POPJ T, ;ILLEGAL KING MOVING INTO "SHADOW"
+ MOVN ZR,@AT+1(I) ;NEGATE
+ IMUL ZR,PINVF(TT)
+ RP UNBLOCKING *P!TT ON *S!A *U!ZR,ADDM ZR,DISPOS
+ PUSH T,@LMURAT+1(I)
+ PUSH T,@PASI+1(I) ;SAVE WPAS,BPAS
+ PUSH T,@RDAT(D) ;SAVE BDA1,2,3 WD
+ PUSHJ P,LMSQV
+ HRLM D,(T)
+ MOVE T1,LMUBAI
+ ADDM T1, @LMURAT+1(I)
+ MOVE T1,LMUPSI
+ ADDM T1,@PASI+1(I)
+ DPB TT,RDAT(D)
+ PUSHJ T,LMUA7
+ JRST LMUUNC
+
+LMUOP1: SKIPE PMV(TT)
+ JRST LMUOP2
+ SKIPN T1,ENPCL(TT)
+ AOSA FREVLU
+ ADDM T1,RUMVLU
+ JRST LMUOP2
+
+LMUOP: MOVE ZR,@AT(I)
+ IMUL ZR,PINVF(TT)
+ RP UNBLOCKING *P!TT ON *S!A *U!ZR, ADDM ZR,DISPOS
+ SKIPE NTPCC
+ JRST LMUOP1
+LMUOP2: PUSH T,@LMURAT(I)
+ PUSH T,@PASI(I)
+ PUSH T,@RDAT(D)
+ PUSHJ P,LMSQV
+ HRLM D,(T)
+ MOVE T1,LMUBAI
+ ADDM T1, @LMURAT(I)
+ MOVE T1,LMUPSI
+ ADDM T1,@PASI(I)
+ DPB TT,RDAT(D)
+ PUSHJ T,LMUA7
+ JRST LMUUN1
+
+
+LMUA5: MOVEM A,LMUOSQ ;SAVE SQUARE MOVING TO
+ HRRZM B,LMUOPC ;ORG PIECE MOVING
+ SKIPE S,BOARD(A)
+ SUBI S,PIECE
+ MOVEM S,LMUPCP ;PIECE CAPTURED
+ PUSH P,J ;PUSH ONTO P DATA NEEDED TO CONTINUE UNBLOCKING SEARCH
+ PUSH P,A
+ PUSH P,B
+ PUSH P,D
+ PUSH P,T2
+ PUSH P,W
+ MOVE A,PIECEL(B)
+ MOVE B,TT
+ MOVE J,D
+ MOVEI Q,LMUAGR
+ CLEARB D,W
+ SETOM DISCOVF
+ XCT RMOYTT(I)
+ JRST LMUA6 ;HIS GUY
+LMUA6R: MOVE T1,PIECEL(B)
+ MOVEM T1,CSMTM
+ RP UNBLOCKING *P!B ,MOVEM J,LMUDR
+ RC UNBLOCKING *P!B ,CAILE J,3
+ JRST LMUA6S
+ PUSHJ T,LSROOK+1
+LMUA6T: CLEARM DISCOVF
+ SKIPE PINVF(B)
+ IMUL W,PINVF(B)
+ CAIN Q,LMUOA
+ MOVNS W ;UNBLOCKING HIS GUY
+ RP POSITIONAL VAL OF UNBLOCKAGE, ADDM W,DISPOS
+ POP P,W
+ MOVE Q,LMQS
+ POP P,T2 ;NOTE ALSO POPS AT LMUA6X
+ POP P,D
+ POP P,B
+ POP P,A
+ POP P,J
+ JRST LMUA7
+
+LMUA6X: POP P,W ;MOVE ILLEGAL EXIT
+ POP P,T2
+ POP P,D
+ POP P,B
+ POP P,A
+ POP P,J
+ MOVE Q,LMQS
+ POPJ T,
+
+LMUA6S: PUSHJ T,LSBIS+1
+ JRST LMUA6T
+
+LMURT1: WA(C)
+ BA(C)
+ WA(C)
+
+PASIC: WPAS(C)
+ BPAS(C)
+ WPAS(C)
+
+LMURAT: WA(A)
+ BA(A)
+ WA(A)
+
+LMURAS: WA(S)
+ BA(S)
+ WA(S)
+
+
+LMUAT2: REPEAT 4,RFPCS(B)
+ REPEAT 4,DDPCS(B)
+
+LMUAT3: REPEAT 4,RFPCS(TT)
+ REPEAT 4,DDPCS(TT)
+
+LUA3: MOVE T2,[-6,,12.]
+ JRST LUA4
+
+LUA2: SKIPA T2,[-6,,6]
+LUA1: MOVSI T2,-6
+LUA4: LDB S,RDAT(T2)
+ JUMPE S,LUA5
+ XCT RMOY3(I)
+ JRST LUA6 ;BELONGS TO SIDE NOT TO MOVE
+ CAMN S,LMUOPC
+ JRST LUA5A ;THIS PIECE MOVING
+LUA5C: AOS NDEFS
+ JUMPE C,LUA5B
+ MOVE TT,PVALUE(S)
+ CAMLE TT,PVALUE(S)
+LUA5B: MOVE C,S
+LUA5: AOBJN T2,LUA4
+ POPJ P,
+
+LUA6: CAME S,LMUPCP
+ SKIPE PINT(S)
+ JRST LUA5 ;THIS PIECE CAPTURED OR PINNED
+ AOS NATTS
+ JUMPE D,LUA6A
+ MOVE TT,PVALUE(D)
+ CAMLE TT,PVALUE(S)
+LUA6A: MOVE D,S
+ SKIPL SLDPC(S)
+ JRST LUA5
+LUA6B: MOVE S,PIECEL(S)
+ LDB S,RDATSS(T2)
+ JUMPE S,LUA5
+ XCT RMOY3(I)
+ SKIPL SLDPC(S)
+ JRST LUA5
+ AOS NATTS
+ JRST LUA6B
+
+LUA5A: LDB S,ONEBSQ(T2)
+ JUMPE S,LUA5
+ LDB S,RDATSS(T2) ;ORIG PIECE MOVING HAVE FRIEND BEHIND IT?
+ SKIPGE SLDPC(S)
+ XCT RMOY3(I)
+ JRST LUA5
+ JRST LUA5C
+
+LMUPCP: 0 ;PIECE CAPTURED BY MOVE
+LMUOPC: 0 ;PIECE MOVING
+LMUOSQ: 0 ;SQUARE MOVING TO
+DISCOVF: 0 ;-1 IF ATTACK INVESTIGATING IS A DISCOVERY
+LMUBAI: 0 ;INC TO WA BA
+LMUPSI: 0 ;INC TO WPAS BPAS
+
+LMUA6: MOVE S,@OKINGT(I)
+ LDB T1,ONEBS(J)
+ CAMN T1,A
+ JRST LMUA6X ;MOVE DISCOVERS ATTACK ON K ILLEGAL STOP WORKS
+ MOVEI Q,LMUOA ;UNBLOCKING HIS GUY
+ JRST LMUA6R
+
+LMUOA: SKIPGE BOARD(A)
+ POPJ T,
+ POP T,LMUTT0 ;RETURN TO LSROK ETC
+ POP T,LMUTT1 ;PUSHED BY LSROK ETC
+ POP T,LMUTT2 ;RETURN TO LMUA6T
+ PUSH T,@LMURAT+1(I)
+ PUSH T,@PASI+1(I)
+ PUSH T,@RDAT(J)
+ PUSHJ P,LMSQV
+ HRLM J,(T)
+ PUSH T,[LMUUNC]
+ PUSH T,LMUTT2 ;PUT EM BACK
+ PUSH T,LMUTT1
+ PUSH T,LMUTT0
+ MOVE T1,LMUBAI
+ ADDM T1,@LMURAT+1(I)
+ MOVE T1,LMUPSI
+ ADDM T1,@PASI+1(I)
+ DPB B,RDAT(J)
+ RP UNBLOCKING SQ *S!A FOR OPP,ADD W,@AT+1(I)
+ SKIPN T1,BOARD(A)
+ JRST LMUS1 ;SEE IF GIVING HIM SQUARE
+ XCT LMUOAT(I) ;SKIPN ON OUR PIECE
+ POPJ T,
+ CAMN A,@OKINGT(I)
+ JRST LMV6A ;STOP WORKS MOVE ILLEGAL
+LMV6F: CLEARM NDEFS
+ CLEARM NATTS
+ CLEARB C,D
+ MOVE T2,LMUOPC
+ LDB S,[PTID,,PIECE(T2)]
+ JUMPN S,LUE1 ;MOVING PIECE MIGHT STILL HOLD
+ SKIPN @LMGST(I)
+ JRST LMV6B
+LUE2: SKIPE BDA1(A)
+ PUSHJ P,LUA1
+ SKIPE BDA2(A)
+ PUSHJ P,LUA2
+ SKIPE BDA3(A)
+ PUSHJ P,LUA3
+ JUMPE C,LMV6B
+ JUMPE D,LUEX
+ MOVE TT,PVALUE(D)
+ SUB TT,PVALUE-PIECE(T1)
+ JUMPL TT,LUE4 ;ATTACKED BY LESS
+ SOSG NATTS
+ JRST LMV6C ;ONLY ATTACK NOT E P
+ SUB TT,PVALUE(D)
+ JUMPGE TT,LMV6C ;CAN AFFORD TO LOSE P+D FOR A
+ SOSLE NDEFS
+ JRST LMV6C ;MORE THAN ONE DEF MAKE OPT ASSUMPTION
+ MOVNS TT
+LUE6: CAMLE TT,PVALUE-PIECE(T1)
+ MOVE TT,PVALUE-PIECE(T1)
+LUE5: AOS MVDSP ;ESTIMATED LOSS IN TT
+ MOVSI D,MVDHA_MVDSFT
+ DPB B,[MVDPC,,D]
+ DPB A,[MVDSQ,,D]
+ MOVEM D,@MVDSP
+ AOS MVDSP
+ MOVNM TT,@MVDSP
+ SKIPLE TT
+ AOS NIUBLK ;# IMPORTANT DISCOVERIES
+LUEX: POPJ T,
+
+LMUS1: SKIPE C,@LMGST(I)
+ JRST LMVS2
+ MOVE T2,@LMGST+1(I)
+ SOJLE T2,CPOPJT
+ LDB T2,ATLSP(B)
+ JUMPN T2,CPOPJT
+ SOJLE C,LMVS2
+ CAILE C,-1(T2)
+ POPJ T,
+LMVS2: AOS PNSQS(B) ;GIVING HIM SQ
+ POPJ T,
+
+LUE1: MOVE S,LMUOSQ
+ PUSH P,T1
+ PUSH P,B
+ MOVE B,LMUOPC
+ PUSHJ P,@LGLMPT(B)
+ JRST LUE3
+ MOVE C,B ;STILL HOLDS
+ AOS NDEFS
+LUE3: POP P,B
+ POP P,T1
+ JRST LUE2
+
+LUE4: MOVMS TT
+ SOSG NDEFS ;SKIP ON MULTPLE DEFS
+ SOSG NATTS ;SKIP ON MULT ATTACKS
+ JRST LUE5
+ SUB TT,PVALUE(D)
+ JRST LUE6
+
+NDEFS: 0 ;NUMBER DEFS
+NATTS: 0 ;NUMBER ATTACKS ON DISCOVERED UPON PIECE
+
+
+LMUOAT: SKIPGE (T1)
+ SKIPL (T1)
+
+LMV6B: MOVE TT,PVALUE-PIECE(T1) ;PIECE LOOSE
+ JRST LUE5
+
+LMV6C: MOVEI TT,0 ;UNBLOCKING ATTACK
+ JRST LUE5
+
+LMV6A: ERRTTY [ASCIZ /ILLEGAL MOVE AT LMV6A/]
+
+
+LMUTT0: 0 ;TEMP AT LMUOA AND LMUAGR
+LMUTT1: 0
+LMUTT2: 0
+LMUUNC: POP T,S
+ SKIPE BPCHD(S)
+ AOS NEVRCP ;BPCHD WAS RECOMPUTED
+ POP T,BPCHD(S) ;UNCLOBBER
+ POP T,CNTRL(S)
+ POP T,BPCOR(S)
+ POP T,WPCOR(S)
+ HLRZ T1,S
+ POP T,@RDATSS(T1)
+ POP T,@PASIS+1(I)
+ POP T,@LMURAS+1(I)
+ POPJ T,
+
+LMUUN1: POP T,S
+ SKIPE BPCHD(S)
+ AOS NEVRCP
+ POP T,BPCHD(S)
+ POP T,CNTRL(S)
+ POP T,BPCOR(S)
+ POP T,WPCOR(S)
+ HLRZ T1,S
+ POP T,@RDATSS(T1)
+ POP T,@PASIS(I)
+ POP T,@LMURAS(I)
+ POPJ T,
+
+LBL2: SKIPA S,[5]
+LBL1: MOVNI S,1
+LBL3: AOS S
+ MOVEI T1,0
+ LSHC T1,6
+ JUMPE T1,LBL3
+ SKIPE BOARD(A)
+ JRST LBL3B
+ LDB TT,[430100,,PIECE(T1)]
+ SKIPE C,@LMGST+1(TT)
+ JRST LBL3C
+LBL3D: SOSN PNSQS(T1) ;HE CANT MOVE HERE NOW (ASSUMING WE'RE NOT E.P.)
+ JRST LBL3A ;OR ANYWHERE ELSE EITHER?
+LBL3B: SKIPGE SLDPC(T1)
+ JRST LBL4
+LBL5: JUMPN T2,LBL3
+ POPJ P,
+
+LBL3A: SKIPL LMGT(T1)
+ XCT RMOY4+1(I)
+ JRST LBL3B
+ AOS PTRPC
+ JRST LBL3B
+
+LBL3C: MOVE D,@LMGST(TT)
+ SOJLE D,LBL3B
+ LDB D,ATLSP(T1)
+ JUMPN D,LBL3B
+ SOJLE C,LBL3D
+ CAILE C,-1(D)
+ JRST LBL3B
+ JRST LBL3D
+
+LBL4: CAIN T1,(B)
+ JRST LBL5
+ CLEARM BLKPSF ;SUPPRESS POSITIONAL FACTORS FLAG
+ SKIPGE @LBLT2(S)
+ JRST LBL5F ;PIECE BLOCKING ALSO SLIDES ON FILES/RANKS
+ SKIPGE @LBLT3(S)
+ JRST LBL5A ;PIECE BLOCKING ALSO SLIDES DIAGS
+ PUSH P,A
+LBL5C: MOVE TT,PIECE(T1)
+ XOR TT,PIECE(B)
+LBL5B: LSH TT,-35. ;TT=0 OUR GUY 1 HIS GUY
+ SKIPE BOARD(A) ;REALLY CAPTURING HIS PIECE THAT WAS BLOCKING OUR GUY?
+ JUMPE TT,LBL8 ;TRANSFER ON YES SO SETTING POSSIBLE DISCOVERY
+LBL6: ADD A,RDT(S)
+ SKIPGE D,BOARD(A)
+ JRST LBL7
+ LDB ZR,RDAT(S)
+ CAME ZR,T1
+ JRST LBL7
+ JRST @LBLT1(TT)
+
+LBL8: ADD A,RDT(S)
+ SKIPGE D,BOARD(A)
+ JRST LBL7
+ JUMPE D,LBL8
+ XCT OURGY+1(I)
+ JRST LBL7
+ SUBI D,PIECE ;SETTING UP DISCOVERY
+ MOVE TT,PVALUE-PIECE(D)
+ MOVSI ZR,MVDSD_MVDSFT
+ DPB T1,[MVDPC2,,ZR]
+ MOVE A,(P)
+ DPB A,[MVDSQ,,ZR]
+ DPB S,[MVDDIR,,ZR]
+ DPB D,[MVDPC,,ZR]
+ AOS MVDSP
+ MOVEM ZR,@MVDSP
+ AOS MVDSP
+ MOVEM TT,@MVDSP
+ JRST LBL7
+
+LBL6B: MOVE ZR,@AT(TT)
+ SKIPE PINVF(T1)
+ IMUL ZR,PINVF(T1)
+ SKIPL BLKPSF ;SKIP ON DO NOT ADD POSITIONAL FACTORS
+ RP BLOCKING OUR GUY *P!T1 AT *S!A *U!ZR, ADDM ZR,DISBLU
+ SOS PNSQS(T1)
+LBL6A: JUMPE D,LBL6
+ XCT OURGY+1(I)
+ SKIPN TT,SPINT(T1)
+ JRST LBL7 ;NOT RUNNING INTO OUR GUY
+LBL6E: LDB ZR,[SPINSQ,,(TT)] ;THAT GUY WAS CONSTRAINED BLOCKAGE WILL BREAK IT
+ CAME ZR,PIECEL(B) ;SKIP ON MVING THAT PC
+ CAME ZR,A
+ JRST LBL6D
+ MOVSI ZR,MVDBDF_MVDSFT ;BLOCKING OUR DEF
+ DPB T1,[MVDPC,,ZR]
+ DPB A,[MVDSQ,,ZR]
+ TRO ZR,MVDDIB
+ AOS MVDSP
+ MOVEM ZR,@MVDSP
+ AOS MVDSP
+ LDB ZR,[SPINVL,,(TT)]
+ MOVNM ZR,@MVDSP
+LBL7: POP P,A
+ JRST LBL5
+
+LBL6D: LDB TT,[SPNLK,,1(TT)]
+ JUMPE TT,LBL7
+ JRST LBL6E
+
+LBLT1: LBL6B
+ LBL6C
+
+LBL6C: SKIPGE BLKPSF
+ JRST LBL6C1
+ MOVE ZR,@AT(TT)
+ SKIPE PINVF(T1)
+ IMUL ZR,PINVF(T1)
+ RP BLOCKING HIS GUY *P!T1 AT *S!A *U!ZR, ADDM ZR,DISBLH
+;ADD SQUARE CNTRL STUFF HERE
+LBL6C1: SKIPE BOARD(A)
+ JRST LBL6C2
+ SKIPE C,@LMGST(I)
+ JRST LBL6C3
+LBL6C4: SOSN PNSQS(T1) ;DENYING SQ
+ AOS PTRPC ;NO OTHER SQS
+LBL6C2: JUMPE D,LBL6
+LBL7A: XCT OURGY+1(I)
+ JRST LBL7B ;BLOCKING HIS ATTACK ON US (INTERPOSING)
+ SKIPN TT,SPINT(T1) ;BLOCKING HIS DEF, WAS THIS DEF A CONSTRAINT?
+ JRST LBL7
+LBL6F: LDB ZR,[SPINSQ,,(TT)]
+ CAME ZR,A
+ JRST LBL6G
+ LDB ZR,[SPINCP,,1(TT)]
+ CAIN ZR,(B)
+ JRST LBL7 ;THIS CON CAUSED BY US
+ MOVSI ZR,MVBHD_MVDSFT
+ DPB T1,[MVDPC,,ZR]
+ DPB A,[MVDSQ,,ZR]
+ AOS MVDSP
+ MOVEM ZR,@MVDSP
+ AOS MVDSP
+ LDB ZR,[SPINVL,,(TT)]
+ MOVEM ZR,@MVDSP
+ JRST LBL7
+
+LBL6C3: MOVE J,@LMGST+1(I)
+ SOJLE J,LBL6C2
+ LDB J,ATLSP(T1)
+ JUMPN J,LBL6C2
+ SOJLE C,LBL6C4
+ CAILE C,-1(J)
+ JRST LBL6C2
+ JRST LBL6C4
+
+LBL6G: LDB TT,[SPNLK,,1(TT)]
+ JUMPE TT,LBL7
+ JRST LBL6F
+
+LBL7B: CAIN D,PIECE(B)
+ JRST LBL7 ;CANNOT BLOCK ATTACK ON SELF
+ SKIPE TT,PINT-PIECE(D) ;RELIEVING PIN
+ JRST LBLRP1
+LBLRP2: MOVE ZR,@LMGST+1(I)
+ SOJE ZR,LBL7C ;BLOCKING ONLY ATTACK
+LBL7C2: SKIPA TT,DEFVL-PIECE(D) ;BLOCKING ONE OF SEVERAL ATTACKS (APPROX SAME AS DEF (?))
+LBL7C: MOVE TT,ENPCL-PIECE(D)
+ MOVSI ZR,MVDINT_MVDSFT
+ DPB T1,[MVDPC,,ZR] ;HIS PIECE GETTING BLOCKED
+ DPB A,[MVDSQ,,ZR]
+ SUBI D,PIECE
+ DPB D,[MVDPC2,,ZR]
+ AOS MVDSP
+ MOVEM ZR,@MVDSP
+ AOS MVDSP
+ MOVEM TT,@MVDSP
+ AOS NINTP
+ SKIPE @LMGST(I)
+ SKIPN NIUBLK ;SHOULD WE RE EVAL ANY UNBLOCKAGES OF HIM TO SAME SQ?
+ JRST LBL7
+ MOVE TT,MVDMF ;LOOK FOR UNBLOCKAGE OF HIM TO SAME SQ
+LUBR1: CAML TT,MVDSP
+ JRST LBL7
+ SKIPGE 1(TT)
+ JRST LUBR2
+ LDB ZR,[MVDCD,,1(TT)]
+ CAIN ZR,MVDHA
+ JRST LUBR3
+LUBR2: ADDI TT,NWMVE
+ JRST LUBR1
+
+LUBR3: LDB ZR,[MVDSQ,,1(TT)]
+ SKIPGE 2(TT) ;SKIP ON NOT IMPORTANT ANYWAY
+ CAME ZR,A
+ JRST LUBR2
+ LDB C,[MVDPC,,1(TT)] ;BLOCKING GUY IN T1, UNBLOCKING GUY IN C
+ ;D HAS OUR GUY BEING BLOCKED/UNBLOCKED UPON
+ MOVN Q,2(TT) ;OLD VALUE OF UNBLOCKAGE
+ CAMLE Q,ENPCL(D)
+ MOVE Q,ENPCL(D) ;+1 -1 SO CAN BE WORSE THAN BEFORE (BUT SEE BELOW)
+ MOVE ZR,PVALUE(D)
+ SUB ZR,PVALUE(C)
+ JUMPLE ZR,LUBR5
+ CAMGE Q,ZR
+ MOVE Q,ZR ;MUST BE AT LEAST AS BAD AS DIRECT LOSS
+LUBR5: SKIPGE Q
+ MOVEI Q,0
+ RC REVAL DISCOVERY ON *S!A TO *U!Q, MOVNM Q,2(TT)
+ JRST LUBR2
+
+
+LBLRP1: LDB ZR,[PINATP,,1(TT)]
+ CAME ZR,T1
+ JRST LBLRP3
+ MOVSI ZR,MVDRPI_MVDSFT
+ DPB T1,[MVDPC,,ZR]
+ LDB TT,[PINOPS,,1(TT)]
+ DPB TT,[MVDSQ,,ZR]
+ AOS MVDSP
+ MOVEM ZR,@MVDSP
+ AOS MVDSP
+ CLEARM @MVDSP
+ JRST LBLRP2
+
+LBLRP3: HRRZ TT,(TT)
+ JUMPN TT,LBLRP1
+ JRST LBLRP2
+
+LBLT2: REPEAT 4,RFPCS(B)
+LBLT3: REPEAT 4,[[0]
+] ;USED FOR BOTH
+ REPEAT 4,DDPCS(B)
+
+LBL5A: PUSH P,A
+ MOVE TT,PIECE(T1)
+ XOR TT,PIECE(B)
+ JUMPL TT,LBL5D ;NOT OUR GUY
+ LDB ZR,[PTID,,PIECE(T1)]
+ CAIN ZR,BID
+ SKIPE NMOVES(T1)
+LBL5D: SETOM BLKPSF
+ JRST LBL5B ;BLOCKING B THAT HASNT MOVED BAD EVEN IF BY Q
+
+LBL5F: PUSH P,A
+ MOVE TT,PIECE(T1)
+ XOR TT,PIECE(B)
+ JUMPL TT,LBL5D ;NOT OUR GUY
+ CAIE S,2
+ CAIN S,3
+ JRST LBL5D ;ON FILE
+ SKIPL NPCPT(B)
+ JRST LBL5D
+ LDB D,[BRANK,,BPREL(A)]
+ SKIPE I
+ MOVE D,REVERS(D)
+ SOJN D,LBL5D ;BLOCKAGE BY Q ON FIRST RANK BAD
+ JRST LBL5B
+
+BLKPSF: 0 ;-1 DONT ADD POSITIONAL FACTORS SINCE BLOCKING PC SLIDES SAME WAY
+
+LMGST: WA(A)
+ BA(A)
+ WA(A)
+
+LMGST1: WA(T1)
+ BA(T1)
+ WA(T1)
+
+LMGST2: WA(T)
+ BA(T)
+ WA(T)
+
+LMGST3: WA(T2)
+ BA(T2)
+ WA(T2)
+
+LMGSTQ: WA(Q)
+ BA(Q)
+ WA(Q)
+
+LMWPW: ADDI A,2*BW
+ CAIL A,6*BW
+ JRST LMWPW1
+ SKIPN BOARD(A)
+ SKIPE BOARD-BW(A)
+ JRST LMWPW1
+ PUSHJ T,(Q)
+LMWPW1: SUBI A,BW
+LMBPW2: SKIPN BOARD(A)
+ PUSHJ T,(Q)
+ ADDI A,1
+ CAME A,GHLOC
+ SKIPLE BOARD(A)
+ PUSHJ T,(Q)
+ SUBI A,2
+ CAME A,GHLOC
+ SKIPLE BOARD(A)
+ JRST (Q)
+ POPJ T,
+
+LMBPW: SUBI A,2*BW
+ CAIG A,6*BW
+ JRST LMBPW1
+ SKIPN BOARD(A)
+ SKIPE BOARD+BW(A)
+ JRST LMBPW1
+ PUSHJ T,(Q)
+LMBPW1: ADDI A,BW
+ JRST LMBPW2
+
+
+LMKNT: ADDI A,2*BW+1
+ PUSHJ T,(Q)
+ SUBI A,2
+ PUSHJ T,(Q)
+ SUBI A,4*BW
+ PUSHJ T,(Q)
+ ADDI A,2
+ PUSHJ T,(Q)
+ ADDI A,3*BW+1
+ PUSHJ T,(Q)
+ SUBI A,4
+ PUSHJ T,(Q)
+ SUBI A,2*BW
+ PUSHJ T,(Q)
+ ADDI A,4
+ JRST (Q)
+
+
+DEFINE LMKC
+ SKIPE @LMGST+1(I)
+ SKIPGE Q
+ PUSHJ T,(Q)
+TERMIN
+
+LMKING: ADDI A,1
+ LMKC
+ ADDI A,BW
+ LMKC
+ SUBI A,1
+ LMKC
+ SUBI A,1
+ LMKC
+ SUBI A,BW
+ LMKC
+ SUBI A,BW
+ LMKC
+ ADDI A,1
+ LMKC
+ ADDI A,1
+ LMKC
+ POPJ T,
+
+
+LMROOK: MOVSI J,-4
+ PUSH T,A
+LMROK1: MOVE A,(T)
+LMROK4: ADD A,RDT(J)
+ PUSHJ T,(Q)
+ SKIPN T1,BOARD(A)
+ JRST LMROK4
+ CAIN T1,PIECE(B)
+ JRST LMROK4
+LMROK2: AOBJN J,LMROK1
+POPAJT: POP T,A
+ POPJ T,
+
+LMQUEEN: PUSHJ T,LMROOK
+LMBIS: MOVE J,[-4,,4]
+ PUSH T,A
+LMBIS1: MOVE A,(T)
+LMBIS4: ADD A,RDT(J)
+ PUSHJ T,(Q)
+ SKIPN T1,BOARD(A)
+ JRST LMBIS4
+ CAIN T1,PIECE(B)
+ JRST LMBIS4
+LMBIS2: AOBJN J,LMBIS1
+ POP T,A
+ POPJ T,
+
+LSROOK: MOVSI J,-4 ;FOR SCORING DEV VALUE
+ PUSH T,A
+LSROK1: CLEARM ATTHF
+ MOVE A,(T)
+LSROK4: ADD A,RDT(J)
+ PUSHJ T,(Q)
+ SKIPN T1,BOARD(A)
+ JRST LSROK4
+ JUMPL T1,LSROK2
+ CAIN T1,PIECE(B)
+ JRST LSROK4 ;RUNNING INTO SELF IGNORE
+ MOVE T2,(T1)
+ XOR T2,PIECE(B)
+ JUMPL T2,LSRK4A
+ MOVSI T2,(MVATB)
+ MOVEM T2,ATTHF
+ MOVEM T1,ATTHFP
+ SKIPGE RFPCS-PIECE(T1)
+ JRST LSROK4
+LSROK2: AOBJN J,LSROK1
+ CLEARM ATTHF
+ POP T,A
+ POPJ T,
+
+LSRK4A: JRST LSROK2 ;THIS OTHER STUFF DOESNT WIN
+; MOVE ZR,PVALUE-PIECE(T1)
+; CAMG ZR,PVALUE(B)
+; JRST LSROK2
+; CAIE Q,LMUAGR
+; CAIN Q,LMGR2
+; MOVEI Q,LMDV
+; SETOM ATTHF
+; JRST LSROK4
+;
+LSQUEEN: PUSHJ T,LSROOK
+LSBIS: MOVE J,[-4,,4]
+ PUSH T,A
+LSBIS1: CLEARM ATTHF
+ MOVE A,(T)
+LSBIS4: ADD A,RDT(J)
+ PUSHJ T,(Q)
+ SKIPN T1,BOARD(A)
+ JRST LSBIS4
+ JUMPL T1,LSBIS2
+ CAIN T1,PIECE(B)
+ JRST LSBIS4 ;RUNNING INTO SELF
+ MOVE T2,(T1)
+ XOR T2,PIECE(B)
+ JUMPL T2,LSBS4A
+ MOVSI T2,(MVATB)
+ MOVEM T2,ATTHF
+ MOVEM T1,ATTHFP
+ SKIPGE DDPCS-PIECE(T1)
+ JRST LSBIS4
+ SKIPGE LMGT-PIECE(T1)
+ JRST LSBIS5
+LSBIS2: AOBJN J,LSBIS1
+ CLEARM ATTHF
+ POP T,A
+ POPJ T,
+
+LSBS4A: JRST LSBIS2
+; MOVE ZR,PVALUE-PIECE(T1)
+; CAMG ZR,PVALUE(B)
+; JRST LSBIS2
+; CAIE Q,LMUAGR
+; CAIN Q,LMGR2
+; MOVEI Q,LMDV
+; SETOM ATTHF
+; JRST LSBIS4
+
+LSBIS5: LDB T1,[430100,,PIECE(B)]
+ SKIPL @BTPDIR(T1)
+ JRST LSBIS2
+ ADD A,RDT(J)
+ PUSHJ T,(Q)
+ JRST LSBIS2
+
+BTPDIR: WBTHP(J)
+ BBTHP(J)
+
+BBTHP==.-4
+ 0
+ 0
+WBTHP==.-4
+ -1
+ -1
+ 0
+ 0
+XDIR: 0 ;DONT SCAN THIS BASIC DIRECTION
+
+LXROOK: MOVSI J,-4
+ PUSH T,A
+LXROK1: MOVE T1,RBDIR(J)
+ CAMN T1,XDIR
+ JRST LXROK2
+ MOVE A,(T)
+LXROK4: ADD A,RDT(J)
+ PUSHJ T,(Q)
+ SKIPN T1,BOARD(A)
+ JRST LXROK4
+ CAIN T1,PIECE(B)
+ JRST LXROK4
+LXROK2: AOBJN J,LXROK1
+ POP T,A
+ POPJ T,
+
+
+LXQUEEN: PUSHJ T,LXROOK
+LXBIS: MOVE J,[-4,,4]
+ PUSH T,A
+LXBIS1: MOVE T1,RBDIR(J)
+ CAMN T1,XDIR
+ JRST LXBIS2
+ MOVE A,(T)
+LXBIS4: ADD A,RDT(J)
+ PUSHJ T,(Q)
+ SKIPN T1,BOARD(A)
+ JRST LXBIS4
+ CAIN T1,PIECE(B)
+ JRST LXBIS4
+LXBIS2: AOBJN J,LXBIS1
+ POP T,A
+ POPJ T,
+
+
+;;;HASH
+
+IFN HSCOD,[
+HSREC: LDB I,[100,,PLYN]
+ PUSHJ P,HASHR0 ;GET HASH WORD AND RECORD FOR USE
+ JFCL ;INITIALIZING HASH TABLE
+ MOVE S,HSP
+ MOVE T2,GAMP
+ MOVEM S,GHK1-GAME(T2)
+ POPJ P,
+]
+
+HASHR0: SKIPN ICSW
+HASHR: PUSHJ P,HSKG
+ MOVE S,HSKEY
+ SKIPE T1,GHLOC
+ XOR S,RANDN(T1)
+ SKIPE NMOVES+WKING-PIECE
+ JRST HASHR1
+ SKIPN PIECEL+WKR-PIECE
+ JRST .+3
+ SKIPN NMOVES+WKR-PIECE
+ XORI S,20
+ SKIPN PIECEL+WQR-PIECE
+ JRST .+3
+ SKIPN NMOVES+WQR-PIECE
+ XORI S,2
+HASHR1: SKIPE NMOVES+BKING-PIECE
+ JRST HASHR2
+ SKIPN PIECEL+BKR-PIECE
+ JRST .+3
+ SKIPN NMOVES+BKR-PIECE
+ XORI S,4
+ SKIPN PIECEL+BQR-PIECE
+ JRST .+3
+ SKIPN NMOVES+BQR-PIECE
+ XORI S,10
+HASHR2: DPB I,[100,,S] ;SIDE TO MOVE
+ CAMN S,HSBPT
+ JRST HSBPT1 ;HASH BREAKPOINT
+HSHK1: MOVEM S,HSP ;TABLE KEY -- ENTRY FOR PRECOMPUTED KEYS
+ MOVE T1,S
+ TLZ T1,400000
+ IDIVI T1,HTNE ;# ENTRIES IN TBL
+ MOVNM T2,HASHT1 ;TRIAL ADR
+ HRLI T2,-HTNE(T2)
+ MOVE T1,S
+HASHR3: HRRZM T2,HSADR
+ CAMN T1,HSTB(T2)
+ POPJ P,
+ SKIPN HSTB(T2)
+ JRST POPJ1
+ AOBJN T2,HASHR3
+ HRLZ T2,HASHT1
+
+HASHR4: HRRZM T2,HSADR
+ CAMN T1,HSTB(T2)
+ POPJ P,
+ SKIPN HSTB(T2)
+ JRST POPJ1
+ AOBJN T2,HASHR4
+ ERRTTY [ASCII /HT FULL!/]
+
+HSKG: SETZM HSKEY
+REPEAT 32.,[
+ SKIPN T1,PIECEL+.RPCNT+1
+ JRST .+5
+ LDB S,[PTID,,PIECE+.RPCNT+1]
+ MOVE T1,RANDN(T1)
+ ROT T1,1+IFGE .RPCNT-16.,[10] (S)
+ XORM T1,HSKEY
+] POPJ P,
+
+HSBPT1: SKIPLE HBPTSW
+ .VALUE
+ SKIPGE HBPTSW
+ SETOM HSTTF
+ JRST HSHK1
+
+;HASH TABLE PARAM+VARIABLES
+HSKEY: 0
+HSP: 0
+HASHT1: 0
+HSADR: 0
+HASHS: HTNE/5*4 ;NO ENTRIES LEFT
+HASHSS: HTNE/5*4 ;NO ENTRIES ALLOWED
+HSHPLN: 0 ;PLY # HASH TBL SET UP FOR
+HSHMOV: -1 ;-1 OR FORCED TO BE MOST PLAUS MOVE (BY HSH MATCH)
+HSBPT: 0 ;STOP ON HSCOD = THIS
+HBPTSW: 0 ;-1 TRACE STVL4 NEXT TIME, 1 STOP
+HSTTF: 0 ;-1 TRACE AT STVL4 NEXT TIME (TESTED THERE)
+
+HASHE:
+HASHE1: MOVE T2,HSADR
+ JUMPL T2,CPOPJ
+ SKIPE HSTB(T2)
+ JRST HASHE3 ;NOT STORING INTO FREE SPACE
+ SKIPG HASHS ;AVAILABLE SPACE
+ JRST HASHE2
+ SOS HASHS
+HASHE3: MOVEM T1,HSTBV(T2)
+ MOVE T1,HSP
+ MOVEM T1,HSTB(T2)
+ MOVEM J,HSTBL(T2)
+ POPJ P,
+
+
+HASHE2: SETOB T2,HSADR
+ POPJ P,
+
+;TABLE OF RANDOM NUMBERS
+RANDN==.-2*BW-1
+ZQ==105.105105
+ZQQ==SIXBIT /FOOBAR/
+ZY==696969.69
+ZYY==SIXBIT /BLETCH/
+
+REPEAT 8*BW-2,[
+ZQ==.OP FMP ZQ ZQQ
+ZY==.OP FMP ZY ZYY
+ ZQ,,ZY
+]
+
+IFN HSCOD,[
+HHVC: AOS THTM ;# OF PLYS GOING TO SEARCH IN W
+ MOVE S,HSTBV(T2)
+ TRNN S,HPPMB ;SAVED FROM PREV SEARCH
+ SKIPGE NHSW ;CHECK SIG OF HASH DATA
+ POPJ P,
+ MOVE S,LMGD
+ SOJE S,CPOPJ ;NO HASH ON FIRST LEVEL NEED MOVE
+ LDB S,[HNPLB,,HSTBV(T2)]
+ LDB T1,[410300,,HSTBV(T2)]
+ CAIE T1,3
+ CAIN T1,4 ;POSITION IN SEARCH
+ JRST HHVC4
+ CAMGE S,W
+ POPJ P, ;NO DICE
+ HLRE R,HSTBVV(T2)
+ HRRE Q,HSTBVV(T2)
+ CAMGE R,POSMAX
+ MOVEM R,POSMAX
+ CAMLE Q,POSMIN
+ MOVEM Q,POSMIN
+ CAMN Q,R
+ JRST POPJ1
+ CAMLE R,BPREV
+ CAML Q,BPREV+1
+ AOS (P) ;GOBBLE
+ POPJ P,
+
+HHVC4: CLEARB R,Q
+ CLEARM POSMIN
+ CLEARM POSMAX
+ AOS (P)
+ POPJ P,
+
+]
+
+;;;MN5
+
+
+LMG1: AOS INCHK
+ SKIPL BPCHD(A)
+ PUSHJ P,MCAFS
+ SOJE S,LMG1A ;NOT DOUBLE CHECK
+ MOVE C,ATEVL2+1(I)
+LMG1C: ILDB T1,C ;START WITH HIS SECOND PC
+ JUMPE T1,LMG1A
+ TRZN T1,100
+ JRST LMG1B ;SECOND PC NOT UNBLOCKED
+ TLNE C,770000
+ JRST LMG1C
+ ERRTTY [ASCIZ /LOSE AT LMG1/]
+LMG1B: ADD B,[NPCS-1,,WKING-PIECE-1] ;DOUBLE CHECK
+ SETOM INCHK ;IN DOUBLE CHECK
+ JRST LMG2
+
+LMGDT: SKIPGE PIECE(T1)
+ SKIPL PIECE(T1)
+
+LMG1A: PUSH T,B
+ ADDI B,WKING-PIECE-1
+ PUSH T,A
+ SETOM CDVCF
+ PUSHJ T,LMKING
+ POP T,A
+ POP T,B
+ PUSHJ T,KSQMK
+ MOVEI Q,LMGR7
+ MOVEM Q,LMQS
+ JRST LMG2
+
+KSQMK: LDB D,ATEVL2+1(I)
+ JUMPE D,LOSEY
+ MOVEI T2,0
+ LDB T1,[PTID,,PIECE(D)]
+ MOVE TT,PIECEL(D)
+ CLEARM LMGEPS
+ JUMPE T1,LMG1P ;PAWN
+ SOJE T1,LMG1D ; KNIGHT
+ SOJE T1,LMG1E ;BIS
+ SOJE T1,LMG1F ;ROOK
+ SOJN T1,LOSEY ;KING?
+ LDB T1,[BFILE,,BPREL(A)] ;QUEEN
+ LDB S,[BFILE,,BPREL(TT)]
+ CAMN S,T1
+ JRST LMG1F
+ LDB T1,[BRANK,,BPREL(A)]
+ LDB S,[BRANK,,BPREL(TT)]
+ CAMN S,T1
+ JRST LMG1F
+
+
+LMG1E: LDB T1,[BPDAG,,BPREL(TT)]
+ LDB S,[BPDAG,,BPREL(A)]
+ CAMN S,T1
+ JRST LMG1E1
+ LDB T1,[BMDAG,,BPREL(TT)]
+ LDB S,[BMDAG,,BPREL(A)]
+ CAME S,T1
+ JRST LOSEY
+ TDZA T1,T1
+LMG1E1: MOVEI T1,1
+ ADDI T1,LMBDT
+LMG1F2: CAML A,TT
+ ADDI T1,2
+LMG1H: ADD A,(T1)
+ MOVEM A,KSQTB(T2)
+ CAME A,TT
+ AOJA T2,LMG1H
+ JRST LMG1M
+
+LMG1F: LDB T1,[BRANK,,BPREL(TT)]
+ LDB S,[BRANK,,BPREL(A)]
+ CAMN S,T1
+ JRST LMG1F1
+ LDB T1,[BFILE,,BPREL(TT)]
+ LDB S,[BFILE,,BPREL(A)]
+ CAME S,T1
+ JRST LOSEY
+ TDZA T1,T1
+LMG1F1: MOVEI T1,1
+ ADDI T1,LMRDT
+ JRST LMG1F2
+
+LMG1D: MOVEM TT,KSQTB(T2)
+LMG1M: AOS T2
+ MOVNS T2
+ HRLZM T2,KSQTBP
+ POPJ T,
+
+LOSEY: ERRTTY [ASCII /LOSEY LOSEY!/]
+
+LMG1PT: MOVEI T1,BW(TT)
+ MOVEI T1,-BW(TT)
+
+LMG1P2: ADDI TT,BW
+ SUBI TT,BW
+
+LMG1P: XCT LMG1PT(I)
+ CAMN T1,GHLOC
+ MOVEM T1,LMGEPS ;PAWN THAT IS CHECKING CAN BE TAKEN EP
+ JRST LMG1D
+CBDVS: PUSH P,A ;COMPUTE DEVEL VAL SQ IN A
+ JRST CBDVS1
+
+CBDV: PUSH P,A ;COMPUTE DEV VAL AT CURRENT SQ
+ MOVE A,PIECEL(B)
+CBDVS1: PUSH P,Q
+ PUSH P,J
+ PUSH P,I
+ MOVEI W,0
+ LDB I,[430100,,PIECE(B)]
+ MOVEI Q,CBDV1
+ SKIPGE LMGT(B)
+ JRST CBDV2
+CBDV3: PUSHJ T,@LMGSTD(B)
+CBDV4: SKIPE PINVF(B)
+ IMUL W,PINVF(B)
+ RP POS VAL CAPT PIECE, POP P,I
+ POP P,J
+ POP P,Q
+ POP P,A
+ POPJ P,
+
+CBDV2: PUSHJ T,LMGR1C
+ JRST CBDV4
+
+CBDV1: SKIPGE D,BOARD(A)
+ POPJ T,
+ RP SQ VAL SQ *S!A ,ADD W,@AT(I)
+;INSERT EVAL RLSING HIS SQ CNTRL HERE
+ POPJ T,
+
+STATEV: CLEARM LPPMN
+STATE0: SKIPGE QTF
+ JRST LMGQ2
+ AOS NSVS
+ AOS LMGD
+ AOS LMGD2
+ PUSH P,SABEG
+ MOVE A,SAFSP
+ MOVEM A,SABEG
+ PUSH P,PDVLV
+ PUSH P,WTDLVL
+ PUSH P,BTDLVL
+ PUSH P,CTVLVN
+ PUSH P,CTVLVW
+ PUSH P,CTVLVB
+ PUSH P,CTMLVN
+ PUSH P,CTMLVW
+ PUSH P,CTMLVB
+ PUSH P,PWKSF
+ PUSH P,PBKSF
+ PUSH P,BPREV(I)
+ MOVEM P,LGLMST
+ MOVE C,EVMST
+ MOVEM C,POSMIN
+ MOVE C,EVMST+1
+ MOVEM C,POSMAX
+IFN HSCOD,[
+ MOVE W,HK1V
+ ADD W,PCGSW
+ ADD W,FDCUT
+ ADD W,FDDCUT
+ SUB W,LMGD2
+ AOSGE W
+ MOVEI W,0
+ CAILE W,MHPLN
+ MOVEI W,MHPLN
+ SKIPGE NHSW
+ JRST STAH1
+ PUSHJ P,HASHR0
+ JRST STAH2
+STAH3: MOVSI T1,400000(W)
+ MOVE J,PLYN
+ SUB J,HSHPLN
+ CAILE J,MHPIT
+ MOVEI J,MHPIT
+ DPB J,[HNPIT,,T1]
+ MOVEI J,-1
+ PUSHJ P,HASHE1
+STAH1:
+]
+ SKIPG EGSW
+ JRST STAH4
+ PUSHJ P,EGINT ;END GAME HACK APPLY?
+ JRST EGVR1 ;APPLIED, RETURN VALUE
+STAH4: PUSHJ P,STVL4T
+ MOVE S,WTDVL
+ MOVEM S,WTDLVL
+ MOVE S,PDVDF
+ MOVEM S,PDVLV
+ MOVE S,BTDVL
+ MOVEM S,BTDLVL
+ MOVE S,CTVVW
+ MOVEM S,CTVLVW
+ MOVE S,CTVV
+ MOVEM S,CTVLVN
+ MOVE S,CTVVB
+ MOVEM S,CTVLVB
+ MOVE S,CTMVW
+ MOVEM S,CTMLVW
+ MOVE S,CTMV
+ MOVEM S,CTMLVN
+ MOVE S,CTMVB
+ MOVEM S,CTMLVB
+ MOVE S,KSAEXP
+ MOVEM S,PWKSF
+ MOVE S,KSAEXP+1
+ MOVEM S,PBKSF
+ MOVE T,[-LLMGPL,,LMGPDL-1]
+ MOVEM R,PCSATS
+ SUB R,@HASV(I)
+ SKIPN I
+ MOVNS R
+ SUB R,POSBGF
+ MOVEM R,AHDATS
+ MOVE R,PCSATS
+ SUB R,@OASV(I)
+ SKIPN I
+ MOVNS R
+ SUB R,POSBGF
+ MOVEM R,ABFATS
+STATE1: SETOM HSHMOV
+ AOS NSV
+ CLEARM CVPR
+ CLEARM HPCOP ;NUMBER OF HIS PIECES E P
+ SETZM SFEEDF
+ SETZM SFDF1
+ CLEARM BPCV
+ CLEARM OPCSEP
+ CLEARM DFDF
+ CLEARM SFDLF
+ MOVE A,@OKINGT(I)
+ MOVE B,@LMGST+1(I)
+ MOVEM B,SMICKF ;SIDE TO MOVE IN CHECK FLAG
+ JUMPE B,STV1A
+ MOVNI T1,1
+ SKIPL TPCFL
+ JSP ZR,FDCOND ;FEEDOVER IN CHECK IF NOT TOO DEEP
+STV1A:
+ MOVE B,STT1(I)
+STVQL1: SKIPG T1,PPASED(B) ;PROMOTING
+ JRST STVQL
+ CAIE T1,7
+ JRST STVQL3
+ MOVE T1,PIECEL(B)
+ ADD T1,STT2(I)
+ SKIPE BOARD(T1)
+ JRST STVQL
+ TRO T1,400000
+ MOVSI A,-2 ;-4
+STVQL2: PUSH P,T1
+ HRLM B,(P)
+ PUSH P,STVQLT(A)
+ ADDI T1,300000 ;100000
+ AOBJN A,STVQL2
+STVQL: AOBJN B,STVQL1
+
+ CLEARM TRDP+1
+ MOVE B,[TRDP+1,,TRDP+2]
+ BLT B,NODF+NPC-1+1 ;CLEAR TRDP, NODF
+
+ MOVE B,LGMST2+1(I) ;HIS PIECES
+STV1: SKIPE A,PIECEL(B)
+ SKIPN TT,@LMGST(I)
+ JRST STV2 ;PIECE NON EXISTANT OR NOT ATTACKED
+ SKIPN @LMGST+1(I)
+ JRST STV3 ;ON PREY
+ PUSHJ P,AFLATA
+ JUMPE D,STV3
+ MOVE ZR,@LMGST(I)
+ SOJN ZR,STOD1
+ AOS NODF(D)
+STOD1: MOVE S,PVALUE(C)
+ SUB S,PVALUE(B)
+ JUMPL S,STV3
+ JUMPN S,STOD2
+ SKIPL TRDP(C)
+ HRRM A,TRDP(C) ;CAN AT LEAST TRADE THIS PIECE OFF IF NECC.
+ SKIPGE LMGT(B)
+ XCT WTPWI(I)
+ JRST .+2
+ JRST STV3 ;PAWN TRADE
+ SKIPL LMGT(B)
+ XCT WTPCI(I)
+ JRST .+2
+ JRST STV3 ;PIECE TRADE
+STOD2: SOJE TT,STV2
+ SUB S,PVALUE(D)
+ JUMPL S,STV3E
+
+STV2: AOBJN B,STV1
+ MOVE B,LGMST2(I) ;OUR PIECES
+ CLEARM PCC
+ CLEARM PMC
+STVF1: SKIPE A,PIECEL(B)
+ SKIPN TT,@LMGST+1(I)
+ JRST STVF2 ;NOT EXISTANT OR NOT ATTACKED
+ MOVN S,PVALUE(B)
+ SKIPN @LMGST(I)
+ JRST STVF3F ;NOT DEFENDED SO PRESSING MOVE UNLESS HAS A
+ ;PLAUSIBLE CAPTURE (OR TRADE) AND NOT PINNED
+STVF3G: PUSHJ P,DFLATA
+ JUMPE C,STVF3
+ SKIPGE RPIECE(C)
+ SKIPN SMICKF
+ JRST .+2
+ JRST STVF3 ;K DOESNT DEFEND IF IN CHECK (HA HA)
+ ADD S,PVALUE(D)
+ JUMPL S,STVF3
+ JUMPN S,STVF5 ;TRADE OFFERED AND FAVORABLE SO NOT
+ SKIPGE LMGT(B) ;PRESSING MOVE UNLESS PINNED
+ XCT WTPWI(I)
+ SKIPA
+ JRST STVF4 ;PAWN TRADE
+ SKIPL LMGT(B)
+ XCT WTPCI(I)
+ SKIPA
+ JRST STVF4 ;PIECE TRADE
+STVF5: SOJE TT,STVF2 ;ONLY ATTACK SO NOT EN PRISE EVEN IF MOVE GIVEN UP
+ SUB S,PVALUE(C)
+ JUMPL S,STVF6
+STVF2: AOBJN B,STVF1
+;DROPS THRU
+
+ SKIPGE TPCFL
+ PUSHJ P,ATPCG1
+ MOVE A,PMC ;# EP SIDE TO MOVE, LOSING TEMPO
+ SKIPL SFEEDF
+ CAIL A,2
+ JRST STATE4 ;SIDE TO MOVE HAS TWO PCS ON PREY.
+ JUMPE A,STATE5 ;SIDE TO MOVE HAS NONE ON PREY
+ SKIPE PCC
+ JRST STATE4
+ CAIN A,1
+ CAMLE A,HPCOP
+ JRST STATE5
+ CAML A,HPCOP ;HE HAS MORE EP THAN US, SAVE OURS?
+ SKIPGE SFDF1 ;SET IF SIDE NOT TO MOVE HAS PIECE TRAPPED
+ JRST SFDBS4 ;BOTH HAVE ONE PIECE ON PREY, BUT SIDE NOT TO MOVE IS TRAPPED
+ ;MAY BE BETTER FOR SIDE TO MOVE BUT INDICATED MOVE NOT P.C.
+STATE5: SKIPN SMICKF
+ JRST STATE8 ;NOT IN CHECK
+ MOVE A,PCC
+ ADD A,PMC
+ SOJG A,STATE6 ;IN CHECK AND HAS PIECES ON PREY(OTHER THAN KING)
+ MOVE A,HPCOP
+ CAIL A,2
+ JRST SFDBS6 ;MAY BE BETTER FOR S.T.M. BUT MOVE NOT P.C.
+;AFTER GETTING OUT OF CHECK, OTHERSIDE WILL HAVE 2 EN PRISE
+STATE9: MOVE J,[-8,,0]
+STMT3: MOVE A,@OKINGT(I)
+ LDB B,BDBSQ(J)
+ ADD A,RDT(J)
+ SKIPL T1,BOARD(A)
+ SKIPE @LMGST+1(I)
+ JRST STMT1 ;NOT ON BOARD OR ATTACKED BY HIM
+ JUMPE T1,STMT4
+ XCT OURGY1(I)
+ JRST STMT1 ;ALREADY OCCUPIED BY US
+STMT4: JUMPE B,STATE8 ;OK SAFE KING MOVE
+ MOVE D,BDAST(B)
+ XCT HISGY(I)
+ JRST STATE8 ;UNBLOCKING OUR GUY
+ ;MOVING INTO "SHADOW"
+;DROPS THRU
+
+STMT1: AOBJN J,STMT3
+ MOVE A,SMICKF ;NO KING MOVES CAN CHECKING PIECE BE CAPTURED
+ SOJN A,STMT1A ;IN DOUBLE CHECK
+ MOVE A,@OKINGT(I)
+ SKIPL BPCHD(A)
+ PUSHJ P,MCAF
+ LDB D,ATEVL2+1(I)
+ MOVE T1,PIECEL(D)
+ HRRZ A,LGLMST
+STMT1L: CAIL A,-1(P)
+ JRST STMT1A
+ HRRZ TT,1(A)
+ CAMN TT,T1
+ JRST STMT1B ;CAN CAPTURE CHECKING PIECE IN PLAUSIBLE CAPTURE
+STMT1C: ADDI A,2
+ JRST STMT1L
+
+STMT1A: AOS NFDCK
+ MOVEI T2,1
+ MOVEI T1,0
+ JRST STMT2 ;NO KING MOVES CAUSE FEEDOVER ANYHOW
+
+HISGY: SKIPL PIECE(D)
+ SKIPGE PIECE(D)
+
+STMT1B: HLRZ B,1(A) ;CAN CAPTURE CHECKING PIECE
+ SKIPE PINT(B)
+ JRST STMT1C ;BUT CAPTURING PIECE PINNED
+
+STATE8: SKIPN @NKM(I)
+ JRST SCAS1
+SCAS2: HRRZ A,LGLMST
+ AOS A
+ MOVEI B,1(P)
+ CAME P,LGLMST
+ PUSHJ P,SORT
+ MOVEI T1,1(P) ;SAVE PMV OF HIS PCS
+ HRL T1,SPMV1(I)
+ ADD P,[16.,,16.]
+ BLT T1,(P)
+STDPMV==-12-16. ;ADD NEW VARS HERE
+ PUSH P,[0] ;# OF MV INVESTIGATED FROM THIS POS
+STDMN==-12
+ PUSH P,LPPMN ;INVEST # OF MV THAT GOT HERE
+STDPN==-11
+ PUSH P,PCSATS ;PS MAX
+STDPMX==-10
+ PUSH P,PCSATS ;PS MIN
+STDPMN==-7
+ PUSH P,[,-1] ;HASH ADR OF BEST SO FAR
+STDBHA==-6
+ PUSH P,DFDF ;DELAYED FEEDOVER FLAG
+STDFD==-5
+ PUSH P,[0] ;-1 LOOK AT CASTLING P.C.
+STACL==-4
+ PUSH P,SFDLF ;-3 -1=> FEEDOVER ATT LOST
+STFDLF==-3
+ PUSH P,HSADR
+STHSAD==-2
+ MOVE T2,LGLMST
+ PUSH P,T2
+STPDS==-1
+ MOVEI T2,1(T2)
+ PUSH P,T2
+STMVP==0
+NWSTP==13+16. ;NUMBER WORDS PUSHED HERE
+ MOVE R,PCSATS
+ MOVE T2,R
+ ADD T2,CSGAIN(I) ;PROBABLE MAX GAIN CASTLING
+ XCT LKSGD(I)
+ CLEARM STACL(P)
+;DROPS THRU
+
+;DROPS IN
+STRET: MOVE R,STDPMX(P)
+ MOVE Q,STDPMN(P)
+ XCT ABTST(I)
+ JRST STRET2 ;PCS AS THEY STAND GOOD ENUF
+ XCT ABUPT(I)
+ PUSHJ P,BPRVS ;PUT INTO A,B IF BETTER
+
+STV3L: HRRZ T1,STMVP(P)
+ CAIN T1,-NWSTP+1(P)
+ JRST STVL5
+ HRRZ A,(T1)
+ ANDI A,177
+ HLRZ B,(T1)
+ JRST STVL6 ;INVESTIGATE MV
+
+STAH2: PUSHJ P,HHVC
+ JRST STAH3
+ MOVE T1,LMGD
+ AOS NHMSB
+ CAIGE T1,LSHFLT
+ AOS SHFLT(T1)
+ JRST LMGHX
+
+STT1: -8,,1
+ -8,,1+NPCS
+
+STT2: BW
+ -BW
+
+SCAS1: SKIPN CASSW
+ JRST SCAS2 ;DONT LOOK AT CASTLING
+ SKIPN PCC
+ SKIPE PMC
+ JRST SCAS2 ;PIECES EN PRISE
+ PUSHJ P,LKCAS
+ JRST SCAS3
+ PUSH P,[100000]
+ PUSH P,[1]
+
+SCAS3: PUSHJ P,LQCAS
+ JRST SCAS2
+ PUSH P,[200000]
+ PUSH P,[0]
+ JRST SCAS2
+
+CSGAIN: 30.
+ -30.
+
+LKSGD: CAMG T2,BPREV
+ CAML T2,BPREV+1
+
+STVQLT: 1000 ;PLAUSIBILITY OF QUEENING
+; 600 ;ROOKING
+; 600 ;BISHOPING
+ 700 ;KNIGHTING
+
+STVQL3: SKIPE @PCCNTP+1(I)
+ JRST STVQL
+ MOVE A,PFILE(B) ;HE HAS ONLY K LEFT
+ MOVE A,PSQFIL(A)
+ SKIPE I
+ MOVSS A
+ JUMPGE A,STVQL
+ MOVE T1,PIECEL(B) ;THIS P OUTSIDE SQ OF HIS K
+ ADD T1,STT2(I)
+ SKIPE BOARD(T1)
+ JRST STVQL
+ PUSH P,T1
+ HRLM B,(P)
+ PUSH P,STVQLT
+ JRST STVQL
+STVF4B: PUSH P,TT ;STORE TRADE
+ HRLM B,(P)
+ PUSH P,[0]
+ JRST STVF4A
+
+STVF4: SKIPE PINT(B)
+ JRST STVF5
+ MOVNI S,PWNV
+STVF4A: MOVNS S
+ ADDM S,OPCSEP
+ AOS PCC ;PRESSING CAPTURE NOT INVOLVING LOSS OF TEMPO
+ JRST STVF2
+
+STVF6: MOVE J,@LMGST(I) ;NOT ATTACKED BY LESS THAN P BUT IS LESS THAN P+D
+ SOJE J,STVF3 ;ONLY ONE DEFENSE
+ SOJG TT,STVF3A ;MORE THAN TWO ATTACKS
+ PUSHJ P,F2LA
+ JUMPE T1,STVF3A
+ ADD S,PVALUE(T2)
+ JUMPGE S,STVF2
+ JRST STVF3A
+
+STVF3E: SKIPN PINT(B)
+ JRST STVF3A
+ MOVE S,PVALUE(D) ;UNDEFENDED IS IT ATTACKED BY LESS?
+ SUB S,PVALUE(B)
+ JUMPL S,STVF3C ;ATTACKED BY LESS AND PINNED
+ JRST STVF3A
+
+STVF3F: SKIPN HPCOP
+ SKIPE PINT(B)
+ JRST STVF3G
+ JRST STVF3A
+
+STVF3: SKIPE PINT(B)
+ JRST STVF3C
+STVF3A: SKIPGE TT,TRDP(B) ;IF PINNED BUT NOT ATTACKED BY LESS DONT SET SFEEDF
+ JRST STVF4A ;CAN SWAP OFF OR MAKE PLAUS CAPT
+ JUMPG TT,STVF4B ;HAVE TRADE, BUT ITS NOT A P.C. YET
+
+ SKIPGE LMGT(B)
+ JRST STVF3D
+ SKIPN PMV(B)
+STVF3C: SETOM SFEEDF
+STVF3D: AOS PMC
+ MOVNS S
+ ADDM S,OPCSEP
+ SKIPL DDPCS(D)
+ JRST STVF2
+ MOVE TT,PIECEL(D) ;POSSIBLE TO INTERPOSE P WITH GAIN OF TEMPO?
+ LDB T1,STVFT1(I)
+ JUMPE T1,STVF2 ;CANNOT BE ATTACKED BY OUR P IN ONE MOVE
+ MOVE T1,PFILE(D) ;SQ OF A
+ CAMG T1,PFILE(B) ;FILE OF PC
+ JRST STVFC1 ;A TO K SIDE OF PIECE INTERPOSE TO Q SIDE OF A
+ SKIPE @STVFT5(I) ;P WOULDNT BE DEFENDED
+ SKIPE @STVFT4(I) ;PIECE NEXT TO A NO INTERPOSE POSSIBLE
+ JRST STVF2
+ MOVEI T1,@STVFT4(I) ;SQUARE TO MOVE TO
+ SKIPN T2,@STVFT2(I)
+ JRST STVFC3 ;DOUBLE ADVANCE POSSIBLE?
+STVFC4: SUBI T2,PIECE
+ XCT STVFT3(I) ;NOT OUR P
+ JRST STVF2
+ SUBI T1,BOARD
+ PUSH P,T1
+ HRLM T2,(P)
+ MOVE T1,PVALUE(D)
+ SUB T1,PVALUE(T2)
+ PUSH P,T1
+ ASH T1,-1
+ CAMLE T1,BPCV
+ MOVEM T1,BPCV
+ JRST STVF2
+
+STVFC3: XCT STVFT6(I)
+ SKIPN T2,@STVFT7(I)
+ JRST STVF2
+ JRST STVFC4
+
+STVFC1: SKIPE @STVFQ5(I)
+ SKIPE @STVFQ4(I)
+ JRST STVF2
+ MOVEI T1,@STVFQ4(I)
+ SKIPE T2,@STVFQ2(I)
+ JRST STVFC4
+ XCT STVFT6(I)
+ SKIPN T2,@STVFQ7(I)
+ JRST STVF2
+ JRST STVFC4
+
+STVFT1: NPAS1,,WPAS(TT)
+ NPAS1,,BPAS(TT)
+
+STVFT5: WA-BW-1(TT)
+ BA+BW-1(TT)
+
+STVFT4: BOARD-BW-1(TT)
+ BOARD+BW-1(TT)
+STVFT2: BOARD-2*BW-1(TT)
+ BOARD+2*BW-1(TT)
+
+STVFT3: SKIPL LMGSTD(T2)
+ SKIPL SNFBP(T2)
+
+STVFT6: SKIPL 4RNKP(TT)
+ SKIPG 4RNKP(TT)
+
+STVFT7: BOARD-3*BW-1(TT)
+ BOARD+3*BW-1(TT)
+
+STVFQ5: WA-BW+1(TT)
+ BA+BW+1(TT)
+
+STVFQ4: BOARD-BW+1(TT)
+ BOARD+BW+1(TT)
+
+STVFQ2: BOARD-2*BW+1(TT)
+ BOARD+2*BW+1(TT)
+
+STVFQ7: BOARD-3*BW+1(TT)
+ BOARD+3*BW+1(TT)
+
+STVL4T:
+STVL4: AOSN HSTTF ;RETURN "COMBINED" VALUE IN R
+ JRST STRSTP ;"TANGIBLE" VALUE IN POSTAN
+ MOVE T,[-LLMGPL,,LMGPDL-1] ;"POSITIONAL" VALUE IN POSTRM
+ PUSH P,I
+ CLEARM PMV+1 ;COMPUTE PMV
+ CLEARM POSTRM
+ MOVE A,[PMV+1,,PMV+2]
+ BLT A,PMV+NPC+1-1
+ SKIPE CSQSW
+ PUSHJ P,CORCMP
+ PUSHJ P,CTMAV ;COMPUTE MOBILITY VALUE
+ POP P,I
+ RS WHITE PCS,MOVE R,PCBAL
+ RS BLACK PCS,SUB R,PCBAL+1
+ RS WHITE PNS,ADD R,PNBAL
+ RS BLACK PNS,SUB R,PNBAL+1
+ MOVEM R,PCSUM ;JUST SUPER RAW MATERIAL
+ SKIPE T1,WTPCSW
+ JRST SPCT1 ;EVAL TRADE PCS FACTOR
+SPCT2: SKIPE T1,WTPWSW
+ JRST SPWT1
+SPWT2:
+ SKIPE T1,ACTVSW
+ JRST STACE ;ACTIVITY FACTOR
+STACR:STVL4E: SKIPE NSBVS
+ JRST STVD ;ADD DEVEL FACTORS
+STVDR: SKIPE SQCTSW
+ JRST STBC
+STBC2: SKIPE MVNSW
+ JRST MVNC1
+MVNC2:
+STVBGP:
+ SKIPN KINGSW
+ JRST STVL4A
+ MOVE T1,PCBAL
+ CAMLE T1,PCBAL+1
+ MOVE T1,PCBAL+1
+ CAIGE T1,600+2*RV+2*NV
+ JRST STVL4A ;END GAME, FORGET ABT KING SAFETY
+ PUSHJ P,EKSF
+ MOVE T1,KSAEXP
+ SUB T1,KSAEXP+1
+ MOVE T2,LMGD
+ CAILE T2,2
+ SKIPE CPCDVL
+ JRST KSV1B ;LAST MV A CAPT, TAKE CURRENT
+ MOVE T2,PWKSF
+ SUB T2,PBKSF
+ JUMPN I,KSV1A ;BLACK TO MOVE
+ CAMGE T1,T2
+ MOVE T1,T2
+KSV1B: RS [KING SAFETY CPCDVL=*U!CPCDVL
+W KS=*U!KSAEXP B KS=*U!KSAEXP+1 PWKSF=*U!PWKSF PBKSF=*U!PBKSF]SUB R,T1
+ JRST STVL4A
+
+KSV1A: CAMLE T1,T2
+ MOVE T1,T2
+ JRST KSV1B
+
+
+EKSF: PUSH P,I
+ MOVEI I,1
+KS0: MOVE T1,[440700+I,,QMSQS]
+ MOVEM T1,QMBPT
+ CLEARM QMSQS(I)
+ SETOM QMFL1
+ CLEARM QMTHR(I)
+ MOVE T1,@OKINGT(I)
+ PUSHJ P,KSQ
+ CLEARM QMFL1
+ MOVEM S,KSAEXP(I)
+ MOVE A,@OKINGT(I)
+; SKIPN @LMGST+1(I) ;SKIP ON IN CHECK
+ SKIPE @SNKMVS(I)
+ JRST KS1 ;NO FURTHER CASTLING POSSIBLE
+ SKIPE @SNKRMV(I)
+ JRST KS1A
+; SKIPN @KSQP1(I)
+; SKIPE @KSQP2(I)
+; JRST KS1A ;O-O BLOCKED BY HIM
+ MOVE T1,KSAL2(I)
+ PUSHJ P,KSQ
+ MOVE A,@OKINGT(I)
+ SKIPE BOARD-1(A)
+ ADDI S,20
+ SKIPE BOARD-2(A)
+ ADDI S,20 ;PCS THAT HAVE TO MOVE BEFORE O-O POSSIBLE
+ ADDI S,20 ;FOR MOVE TO CASTLE
+ CAMGE S,KSAEXP(I)
+ MOVEM S,KSAEXP(I)
+KS1A: MOVE A,@OKINGT(I)
+; SKIPN @KSQP3(I)
+ SKIPE @SNQRMV(I)
+ JRST KS1
+; SKIPN @KSQP4(I)
+; SKIPE @KSQP5(I)
+; JRST KS1
+ MOVE T1,KSAL1(I)
+ PUSHJ P,KSQ
+ MOVE A,@OKINGT(I)
+ SKIPE BOARD+1(A)
+ ADDI S,20
+ SKIPE BOARD+2(A)
+ ADDI S,20
+ SKIPE BOARD+3(A)
+ ADDI S,20
+ ADDI S,20 ;FOR MV TO CASTLE
+ CAMGE S,KSAEXP(I)
+ MOVEM S,KSAEXP(I)
+KS1: SOJGE I,KS0
+ POP P,I
+ POPJ P,
+
+CMPV2: SKIPE T1,BOARD(A) ;MUST MOVE TO VACANT SQ. IF CAPT IS POSSIBLE, THATS NOT "STATIC"
+ POPJ T,
+ SKIPE C,@LMGST+1(I)
+ JRST CMPV4 ;ATTACKED BY HIM
+CMPV5: XCT AT(I)
+ AOS NSQS(B)
+ POPJ T,
+
+CMPV4: MOVE T2,@LMGST(I)
+ SOJLE T2,CPOPJT ;OUR ONLY ATTACK, WILL BE LOOSE
+ LDB T2,ATLSP(B)
+ JUMPN T2,CPOPJT ;ATTACKED BY LESS
+ SOJLE C,CMPV5
+ CAILE C,-1(T2)
+ POPJ T,
+ MOVE C,@AT(I)
+ LSH C,-1
+ ADD W,C ;CREDIT 1/2 VALUE
+ AOS NSQS(B)
+ POPJ T,
+
+CTMAV: CLEARM NSQS+8+1
+ MOVE Q,[NSQS+8+1,,NSQS+8+1+1]
+ BLT Q,NSQS+NPC+1-1
+ MOVEI Q,CMPV2
+ MOVE B,[-NPCS,,1]
+ MOVEI I,0
+CMPV1: SKIPGE LMGT(B)
+ JRST CMPV1B
+ MOVEI W,0
+ SKIPE A,PIECEL(B)
+ PUSHJ T,@LMGT(B)
+ MOVEM W,PMV(B)
+CMPV1B: AOBJN B,CMPV1
+ JUMPN I,CPOPJ
+ MOVEI I,1
+ HRLI B,-NPCS
+ JRST CMPV1
+; MOVE T1,KSAEXP
+; MOVE T2,KSAEXP+1
+; JUMPN I,KSV1A ;BLACK TO MV
+; CAMLE T1,PWKSF
+; MOVE T1,PWKSF ;W TO MV NEGATE ANY LOSS DUE TO BLACKS LAST MV
+; CAMGE T2,PBKSF
+; MOVE T2,PBKSF ;ALSO DONT LET BLACK MAKE HIS K SAFER
+;KSV1A: JUMPE I,KSV1B
+; CAMLE T2,PBKSF
+; MOVE T2,PBKSF
+; CAMGE T1,PWKSF
+; MOVE T1,PWKSF
+;KSV1B: RS W KING SAFETY, SUB R,T1
+; RS B KING SAFETY, ADD R,T2
+;FACTORS
+; STATUS UO -UNCONTESTED US- (0) USC (1) UC (2) UD (5)
+; E (3) U (1) HD (3) HC (7) HSC (10) HU (10)
+;HQA (+ OR -) IF E, 10 UD, 20 HC, 40 HSA, 100
+;OCC UN (0) HPC (5) OPC -1, OPW -3 OWKP -1
+;PRESENT P DEF (+ -)
+;WEAKNESS (+ - -& HE HAS B OF FLAVOR ETC
+;OFF BOARD.. STRONG IF REST OF KS STRONG, WEAK IF REST OF KS WEAK..
+KSQ: MOVE B,[-9,,1] ;EVAL K.S. FOR SIDE IN I
+ CLEARB S,NSQOB ;SQ IN T1
+ ADD S,CSQVL(T1) ;BASIC K POSITION
+ LDB T2,[BRANK,,BPREL(T1)]
+ SKIPE I
+ MOVE T2,REVERS(T2)
+ ADD S,KSRNK(T2)
+ PUSH P,T1
+KSQ0: MOVE T1,(P)
+ MOVEI A,@SVKSST(B)
+ SKIPGE BOARD(A)
+ JRST KSQ1 ;OFF BOARD
+ SKIPG @LMGST+1(I)
+ JRST KSQ2 ;NOT ATTACKED BY HIM
+ SKIPL BPCHD(A)
+ PUSHJ P,MCAF
+ LDB T2,[BSQSP,,CNTRL(A)] ;SQ CNTRL CODE
+ LDB TT,NHQN(I) ;# HIS QN ATTACKING SQ
+ MOVE C,@KSQST(I) ;VAL OF SQ CNTRL
+ JUMPE TT,KSQ3 ;HIS Q DOESNT BEAR
+ MOVE C,QBCS(C) ;Q DOES BEAR, ADJUST VALUE
+ SKIPGE QMFL1
+ CAIE C,100
+ JRST KSQ3
+ IDPB A,QMBPT ;MATE THREAT
+ AOS QMTHR(I)
+KSQ3: SKIPG Q,BOARD(A)
+ JRST KSQ6A ;UNOCC
+ XCT OURGY4(I)
+ JRST KSQ5 ;HIS GUY
+ SKIPGE LMGT-PIECE(Q)
+ SKIPLE PPTP-PIECE(Q)
+ JRST KSQ6 ;OUR PC OR WEAK P
+ SUBI C,5 ;OUR NON-WEAK P
+KSQ6A: LDB T2,[BRANK,,BPREL(A)]
+ CAILE T2,2
+ CAILE T2,6
+ JRST KSQ7 ;SQ ON FIRST TWO RANKS
+ LDB T2,OPPA(I)
+ JUMPN T2,KSQ7 ;SQUARE NOT WEAK
+ LDB T2,OBS(I)
+ JUMPN T2,KSQ7A ;DEF BY OUR B
+ LDB T2,[BCOLR,,BPREL(A)]
+ SKIPN @MMT7(T2)
+ JRST KSQ7B ;HE HAS NO B OF COLOR
+ SKIPE @MMT7C(T2)
+ JRST KSQ7C ;WE HAVE B
+ ADDI C,10. ;HE HAS B, WE DONT
+KSQ7: ADD S,C
+ JRST KSQX
+
+KSQ6: SUBI C,1
+ JRST KSQ6A
+
+KSQ5: ADDI C,5
+ JRST KSQ6A
+
+KSQ7A: ADDI C,1
+ JRST KSQ7
+
+KSQ7B: ADDI C,3
+ JRST KSQ7
+
+KSQ7C: ADDI C,5
+ JRST KSQ7
+
+KSQ2: MOVEI C,0
+ JRST KSQ3
+
+
+KSQ1: AOS NSQOB
+KSQX: AOBJN B,KSQ0
+ SKIPN C,NSQOB ;GIVE OFF BOARD SQ'S AVG VALUES
+ JRST KSQX1
+ MOVE T1,S
+ SUBI C,9
+ IMUL T1,NSQOB
+ IDIV T1,C ;AVG VAL FOR SQ ON BOARD
+ SUB S,T1 ;COM FOR WRONG SIGN
+KSQX1: SUB P,[1,,1]
+ POPJ P,
+
+
+OPPA: NPPAS,,WPAS(A)
+ NPPAS,,BPAS(A)
+
+NHQN: NQAS,,BPAS(A)
+ NQAS,,WPAS(A)
+ NQAS,,BPAS(A)
+
+OBS: NBAS,,WPAS(A)
+ NBAS,,BPAS(A)
+
+KSQST: WSQCVL(T2) ;PNTS AS FCTN OF SQ STATUS (FOR WHITE)
+ BSQCVL(T2) ;FOR BLACK
+
+WSQCVL: 0 ;WU
+ 1 ;WSC
+ 2 ;WC
+ 5 ;WD
+ 3 ;E
+ 1 ;U
+ 3 ;BD
+ 7 ;BC
+ 10 ;BSC
+ 10 ;BU
+
+BSQCVL: 10
+ 10
+ 7
+ 3
+ 3
+ 1
+ 5
+ 2
+ 1
+ 0
+
+QBCS: 0 ;HIS QN BEARS, INDEX VALUE FROM @ KSQST
+ 1
+ 2
+ 10
+ 14
+ 20
+ 30
+ 40
+ 100
+
+KSQP1: BA-1(A)
+ WA-1(A)
+
+KSQP2: BA-2(A)
+ WA-2(A)
+
+KSQP3: BA+1(A)
+ WA+1(A)
+
+KSQP4: BA+2(A)
+ WA+2(A)
+
+KSQP5: BA+3(A)
+ WA+3(A)
+
+SNKMVS: NMOVES+WKING-PIECE
+ NMOVES+BKING-PIECE
+ NMOVES+WKING-PIECE
+
+SNKRMV: NMOVES+WKR-PIECE
+ NMOVES+BKR-PIECE
+ NMOVES+WKR-PIECE
+
+SNQRMV: NMOVES+WQR-PIECE
+ NMOVES+BQR-PIECE
+ NMOVES+WQR-PIECE
+
+KSAL1: 2*BW+6 ;K LOCN AFTER O-O-O
+ 9*BW+6
+ 2*BW+6
+
+KSAL2: 2*BW+2 ;K LOCN AFTER O-O
+ 9*BW+2
+ 2*BW+2
+
+KINGSW: 1 ;KING SAFETY ROUTINE SWITCH
+KSAEXP: BLOCK 2 ;KING UNSAFETY (SIDE)
+
+NSQOB: 0 ;# SQUARES IN 8 NEIGHBORHOOD ON BD
+
+KSRNK: 0 ;K UNSAFETY AS FUNCTION OF RANK
+ 10
+ 20
+ 30
+ 40
+ 50
+ 60
+ 70
+ 100
+
+QMTHRP: QMTHR+1
+ QMTHR
+
+QMFL1: 0 ;-1 IF K REALLY AT SQ IN QUESTION
+QMTHR: 0 ;# OF SQS NEAR W K STRONG CONTROL BY B AND ATT BY Q
+ 0 ;# SQS NEAR BLACK K ...
+QMSQS: 0 ;SQUARE W MAY BE MATED AT
+ 0 ;BLACK ..
+QMBPT: 0 ;PNTR TO ABOVE
+
+SVKSST: (T1)
+ T1,,1
+ T1,,-1
+ T1,,BW
+ T1,,-BW
+ T1,,BW+1
+ T1,,-BW+1
+ T1,,BW-1
+ T1,,-BW-1
+
+ T1,,2
+ T1,,BW+2
+ T1,,2*BW+2
+ T1,,2*BW+1
+ T1,,2*BW
+ T1,,2*BW-1
+ T1,,2*BW-2
+ T1,,BW-2
+ T1,,-2
+ T1,,-BW-2
+ T1,,-2*BW-2
+ T1,,-2*BW-1
+ T1,,-2*BW
+ T1,,-2*BW+1
+ T1,,-2*BW+2
+ T1,,-BW+2
+
+SPWT1: MOVE T2,@SPWTT1(T1)
+ CAMN T2,@SPWTT2(T1)
+ JRST SPWT2 ;SIDE NOT WANTING TO TRADE P'S HASN'T LOST ANY
+ MOVE TT,PCBAL
+ SUB TT,PCBAL+1
+ XCT SPWTT3(T1) ;XFER TO SPWT3 IF SIDE NOT WANTING TO TRD IS NOT AHEAD
+ MOVM B,TT
+ MOVE A,TRDSM6(T2)
+ CAIG B,BV+NV
+ MOVE A,TRDSM7(T2)
+ MULM A,TT
+ RS PAWN LOSS DECREMENT, ADD R,TT
+ JRST SPWT2
+
+ WPNC
+SPWTT1: OWPNC
+SPWTT2: BPNC
+ OBPNC
+
+ JUMPL TT,SPWT3 ;WHITE DOESNT WANT TO TRADE
+SPWTT3: 10
+SPWTT4: JUMPG TT,SPWT3
+ -10
+
+SPWT3: SUB T2,@SPWTT2(T1)
+ IMUL T2,SPWTT4(T1)
+ RS PWN TRD, ADD R,T2
+ JRST SPWT2
+
+SPCT1: MOVE T2,OPCBAL
+ SUB T2,PCBAL
+ MOVE TT,OPCBAL+1
+ SUB TT,PCBAL+1
+ CAMLE T2,TT
+ MOVE T2,TT
+ JUMPLE T2,SPCT2 ;NONE TRDED
+ ASH T2,-4 ;1/16 AMT TRDED
+ MOVE TT,PCBAL
+ ADD TT,PNBAL
+ SUB TT,PCBAL+1
+ SUB TT,PNBAL+1 ;NET PCS ADV
+ XCT SPCTT3(T1) ;XFER TO SPCT2 ON WRONG SIDE AHEAD NOW
+ MOVMS TT
+ ASH TT,-3 ;1/8 AMT AHEAD
+ CAMLE T2,TT
+ MOVE T2,TT
+ XCT SPCTT2(T1)
+ JRST SPCT2
+
+
+ JUMPGE TT,SPCT2
+SPCTT3: RS WT PCS TRDED, SUB R,T2
+SPCTT2: JUMPLE TT,SPCT2
+ RS BK PCS TRDED, ADD R,T2
+STVL4R: 0 ;TEMP
+
+MMT7: @MMT7A(I) ;HIS LIGHT B CNT
+ @MMT7B(I) ;HIS DARK B CNT
+
+MMT7A: BLBC
+ WLBC
+ BLBC
+
+MMT7B: BDBC
+ WDBC
+ BDBC
+
+MMT7C: @MMT7A+1(I) ;OUR LIGHT B CNT
+ @MMT7B+1(I) ;OUR DARK B CNT
+
+STBCC: ;COMPUTE SQ CNTRL
+ MOVE A,[-8,,7*BW+2*BW+BW-2] ;RET W VAL IN T1, BLACK IN W
+ CLEARB T1,W
+STBC1: LDB T2,[BSQSP,,CNTRL(A)]
+ SKIPN TT,CTLFAC(T2)
+ JRST STBC4A ;EVEN OR UNCONTESTED
+ JUMPG TT,STBC3 ;CNTRLED BY W
+ CAIN T2,MSQBD
+ JRST STBC5
+STBC5A: SKIPLE S,BOARD(A)
+ SKIPL (S)
+ JRST STBC5M
+ MOVE TT,CTLFAC+MSQBD ;OUR GUY ALREADY THERE
+ JRST STBC6B
+
+STBC5M: LDB S,[BCTLF,,CNTRL(A)]
+ JUMPE S,STBC6B
+ SKIPGE LMGT(S)
+ JRST STBC6A ;P
+ SKIPE C,PINT(S)
+ JRST STBC5E
+STBC5F: SKIPGE NPCPT(S)
+STBC5G: ASH TT,-1 ;Q
+STBC6B: IMUL TT,BAV(A)
+ LDB S,[BRANK,,BPREL(A)]
+ CAIL S,6
+ ASH TT,-1 ;OUR SIDE OF BOARD
+ATST1: SUB W,TT ;VAL IN TT IS NEGATIVE
+STBC4: SUBI A,2
+ AOBJN A,STBC1
+ATST3: ADD A,[-8-1,,-2]
+ SKIPL BOARD(A)
+ JRST STBC1
+ MOVEM T1,CTVVW
+ MOVEM W,CTVVB
+ POPJ P,
+
+STBC5E: LDB Q,[PINBS,,1(C)]
+ MOVE Q,BOARD(Q)
+ SKIPL LMGT-PIECE(Q)
+ JRST STBC5G
+ HRRZ C,(C)
+ JUMPN C,STBC5E
+ JRST STBC5F
+
+STBC4A: SKIPN T2,BOARD(A) ;EVEN OR UNCONTESTED
+ JRST STBC4D
+ SKIPL (T2) ;CREDIT OCCUPIER
+ JRST STBC4B
+STBC4J: MOVNI TT,3
+ JRST STBC6B
+
+STBC4B: MOVEI TT,3
+ JRST STBC3B
+
+STBC4D: SKIPLE T2,BOARD-BW(A) ;CAN W (OR B O BOTH) PUSH IN?
+ SKIPL LMGSTD-PIECE(T2)
+ JRST STBC4E ;W NOT IN SINGLE PUSH
+STBC4H: SKIPLE T2,BOARD+BW(A)
+ SKIPL SNFBP-PIECE(T2)
+ JRST STBC4F ;W CAN, B CANT IN SINGLE PUSH
+ATST4: JRST STBC4 ;YES BOTH CAN, NEUTRALIZE
+
+STBC4F: SKIPN BOARD+BW(A)
+ SKIPL 4RNKP(A)
+ JRST STBC4B ;W CAN, B CANT
+ SKIPLE T2,BOARD+2*BW(A)
+ SKIPL SNFBP-PIECE(T2)
+ JRST STBC4B
+ JRST ATST4 ;YES BOTH CAN, NEUTRALIZE
+
+STBC4E: SKIPN BOARD-BW(A)
+ SKIPG 4RNKP(A)
+ JRST STBC4G ;W CANT, CAN B
+ SKIPLE T2,BOARD-2*BW(A)
+ SKIPL LMGSTD-PIECE(T2)
+ JRST STBC4G
+ JRST STBC4H
+
+STBC4G: SKIPLE T2,BOARD+BW(A)
+ SKIPL SNFBP-PIECE(T2)
+ JRST STBC4I
+ JRST STBC4J ;B CAN, W CANT
+
+STBC4I: SKIPN BOARD+BW(A)
+ SKIPL 4RNKP(A)
+ JRST ATST4 ;NEITHER SIDE CAN
+ SKIPLE T2,BOARD+2*BW(A)
+ SKIPL SNFBP-PIECE(T2)
+ JRST ATST4
+ JRST STBC4J
+
+STBC: PUSHJ P,STBCC
+ SUB T1,W
+ MOVEM T1,CTVV
+ MOVE W,LMGD
+ CAILE W,2
+ SKIPE CPCDVL
+ JRST STBCS3
+ MOVE W,CTVLVW
+ SUB W,CTVLVB
+ JUMPN I,STBCS4
+ CAMGE T1,W
+ MOVE T1,W
+STBCS3:
+STBCB: RS SQ CTL *U!T1,ADDM T1,POSTRM
+ JRST STBC2
+
+STBCS4: CAMLE T1,W
+ MOVE T1,W
+ JRST STBCS3
+
+STBC5: SKIPLE S,BOARD(A)
+STBC5D: SKIPG (S)
+ JRST STBC5A
+ MOVEI TT,0 ;IF HIS GUY IS THERE, MOST WE CAN GET IS 0
+ JRST ATST1
+
+; JUMPN I,STBCS2
+; CAMLE W,CTVLVB
+; MOVE W,CTVLVB ;DONT LET SIDE NOT TO MOVE IMPROVE W/ LAST MOVE
+; CAMGE T1,CTVLVW
+; MOVE T1,CTVLVW ;ALSO DONT LET SIDE NOT TO MOVE DEPROVE
+;STBCS1: SUB T1,W
+; MOVEM T1,CTVV
+; ADD T1,CTVLVN
+; XCT CTVLS
+
+;STBCS2: CAMLE T1,CTVLVW
+; MOVE T1,CTVLVW
+; CAMGE W,CTVLVB
+; MOVE W,CTVLVB
+; JRST STBCS1
+
+
+STBC3: CAIN T2,MSQWD
+ JRST STBC3C
+STBC3D: SKIPLE S,BOARD(A)
+ SKIPG (S)
+ JRST STBC3M
+ MOVE TT,CTLFAC+MSQWD ;OUR GUY ALREADY THERE
+ JRST STBC3B
+
+STBC3M: LDB S,[WCTLF,,CNTRL(A)]
+ JUMPE S,STBC3B
+ SKIPGE LMGT(S)
+ JRST STBC3A
+ SKIPE C,PINT(S)
+ JRST STBC3H
+STBC3J: SKIPGE NPCPT(S)
+STBC3K: ASH TT,-1 ;CNTRL BY Q
+STBC3B: IMUL TT,WAV(A)
+ LDB S,[BRANK,,BPREL(A)]
+ CAIG S,3
+ ASH TT,-1 ;ON OUR SIDE
+ATST2: ADD T1,TT
+ JRST STBC4
+
+STBC3C: SKIPLE S,BOARD(A)
+STBC3G: SKIPL (S)
+ JRST STBC3D ;OUR GUY, LEAVE DEFENDED
+ MOVEI TT,0 ;HIS GUY THERE
+ JRST ATST2
+
+STBC3H: LDB Q,[PINBS,,1(C)]
+ MOVE Q,BOARD(Q)
+ SKIPL LMGT-PIECE(Q)
+ JRST STBC3K ;PINNED TO PC
+ HRRZ C,(C)
+ JUMPN C,STBC3H
+ JRST STBC3J
+
+STBC3A: CAMGE TT,CTLFAC+MSQWC ;CTRL BY P
+ MOVE TT,CTLFAC+MSQWC
+ JRST STBC3B
+
+STBC6A: CAMLE TT,CTLFAC+MSQBD
+ MOVE TT,CTLFAC+MSQBD
+ JRST STBC6B
+
+ATSQ: PUSHJ P,CORCMP
+ MOVE B,TRPSW ;TRACE SQUARE CONTROL VALUES
+ PUSHJ P,DCRR
+ PUSHJ P,ATSQ2
+ PUSHJ P,STBCC
+ PUSHJ P,DCNTRL
+ATSQ2: MOVSI T1,-LATSQT
+ATSQ1: MOVE ZR,ATSQI(T1)
+ EXCH ZR,@ATSQA(T1)
+ MOVEM ZR,ATSQI(T1)
+ AOBJN T1,ATSQ1
+ POPJ P,
+
+ATSQA: ATST1
+ ATST2
+ ATST3
+ ATST4
+LATSQT==.-ATSQA
+
+ATSQI: JRST ATSTT1
+ JRST ATSTT2
+ JRST ATSTT3
+ JRST ATSTT4
+
+ATSTT1: PUSH P,A
+ MOVEI A,"(
+ PUSHJ P,(B)
+ MOVN A,TT
+ PUSHJ P,DPT
+ PUSHJ P,DTAB
+ POP P,A
+ JRST ATST1+1
+
+ATSTT2: PUSH P,A
+ PUSHJ P,DSPACE
+ MOVE A,TT
+ PUSHJ P,DPT
+ PUSHJ P,DTAB
+ POP P,A
+ JRST ATST2+1
+
+ATSTT3: PUSH P,A
+ PUSHJ P,DCRR
+ POP P,A
+ XCT ATSQI+2
+ JRST ATST3+1
+
+ATSTT4: PUSH P,A
+ MOVEI A,"0
+ PUSHJ P,(B)
+ PUSHJ P,DTAB
+ POP P,A
+ JRST STBC4
+
+
+MVNC1: PUSHJ P,MVNCC
+ SUB T1,W
+ MOVEM T1,CTMV
+ MOVE W,LMGD
+ CAILE W,2
+ SKIPE CPCDVL
+ JRST MVNCS3
+ MOVE W,CTMLVW
+ SUB W,CTMLVB
+ JUMPN I,MVNCS4
+ CAMGE T1,W
+ MOVE T1,W
+MVNCS3:
+MVNC1B: RS MV VLU *U!T1,ADDM T1,POSTRM
+ JRST MVNC2
+
+MVNCS4: CAMLE T1,W
+ MOVE T1,W
+ JRST MVNCS3
+
+MVNCC: MOVSI J,-NPCS
+ CLEARB T1,W
+MVNC5: SKIPGE LMGT+1(J)
+ JRST MVNC3
+ MOVE TT,PMV+1(J)
+ SKIPE PINT+1(J)
+ ASH TT,-1
+ IMUL TT,PINVF+1(J)
+ ADD T1,TT
+MVNC3: SKIPGE LMGT+NPCS+1(J)
+ JRST MVNC4
+ MOVE TT,PMV+NPCS+1(J)
+ SKIPE PINT+NPCS+1(J)
+ ASH TT,-1
+ IMUL TT,PINVF+NPCS+1(J)
+ ADD W,TT
+MVNC4: AOBJN J,MVNC5
+ MOVEM T1,CTMVW
+ MOVEM W,CTMVB
+ POPJ P,
+
+; MOVN ZR,CPCMVL
+; JUMPN I,MVNCS2
+; CAMLE W,CTMLVB
+; MOVE W,CTMLVB
+; ADD ZR,CTMLVW
+; CAMGE T1,ZR
+; MOVE T1,ZR ;DONT LET HIM DEPROVE OUR VALUE EXCEPT BY CAPTING
+;MVNCS1: SUB T1,W
+; MOVEM T1,CTMV
+; ADD T1,CTMLVN
+; XCT STDMCP(I)
+; XCT CTMLS
+;
+;MVNCS2: CAMLE T1,CTMLVW
+; MOVE T1,CTMLVW
+; ADD ZR,CTMLVB
+; CAMGE W,ZR
+; MOVE W,ZR
+; JRST MVNCS1
+;
+
+STVL4A: CLEARM PPSTSW
+ MOVE B,[PPSTSW,,PPSTSW+1]
+ BLT B,PSQFIL+8+1-1 ;CLEAR PPSTSW, PPSTSB AND PSQFIL ARY
+ MOVE B,[SWPPV0-1,,SWPPV0]
+ BLT B,SBCPPV
+ MOVE B,[-8,,1] ;CONSIDER WHITE P
+ SETZM STVLPU
+ MOVE T,[STVLPU,,STVLPU+1]
+ BLT T,STVLPC+1
+ MOVE A,PCBAL
+ ADD A,PCBAL+1
+ SUBI A,<1200*2+700*2+600-1>*2
+ MOVEM A,STVLEG ;.LE. 0 = ENDGAME
+STVLP3: SKIPE T,PIECEL(B)
+ SKIPL LMGT(B)
+ JRST STVLP1
+ SKIPE PINT(B) ;P
+ JRST STVP1 ;PINNED
+ SKIPN T2,BOARD+BW(T)
+ JRST STVP0
+ SKIPL (T2) ;HIS GUY
+ SKIPGE LMGT-PIECE(T2) ;NOT PAWN
+ JRST STVP1 ;BLOCKADED
+STVP0: MOVE T2,WA+BW(T)
+ CAMGE T2,BA+BW(T)
+ JRST STVP1 ;UNSAFE TO ADVANCE
+ SKIPLE T2,BOARD+BW+1(T)
+ SKIPL LMGSTD-PIECE(T2)
+ JRST STVP2
+ MOVE T2,WA+BW+1(T)
+ SUB T2,PCATV(B)
+ CAMGE T2,BA+BW+1(T)
+ JRST STVP1 ;DEF OUR PAWN TO Q-SIDE
+STVP2: SKIPLE T2,BOARD+BW-1(T)
+ SKIPL LMGSTD-PIECE(T2)
+ JRST STVP3
+ MOVE T2,WA+BW-1(T)
+ SUB T2,PCATV(B)
+ CAMGE T2,BA+BW-1(T)
+ JRST STVP1 ;DEF PAWN TO K-SIDE
+STVP3: LDB T1,[BCOLR,,BPREL(T)]
+ AOS STVLPU(T1)
+ JRST STVP4
+
+STVP1: LDB T1,[BCOLR,,BPREL(T)]
+ AOS STVLPB(T1)
+STVP4: SKIPG T1,PPTP(B)
+ JRST STVLP2
+ MOVE T2,PFILE(B)
+ MOVE T2,BNPNFL(T2)
+ CAIE T1,3 ;WILL DEAL WITH ISOLATED P LATER
+ RS W FORWARD/BACKWARD *P!B AT *S!T,SUB R,BACKV(T2)
+STVLP2: SKIPN T1,PPASED(B)
+ JRST STVLP1
+ JUMPL T1,STVLP4 ;PAWN P BUT BLOCKED BY FRIENDLY
+ SKIPE BOARD+BW(T)
+ JRST STVWB1 ;BLOCKED
+ MOVE T2,PPV(T1)
+ SKIPG STVLEG
+ MOVE T2,EPPV(T1)
+STWPR1: SUB T1,MABPP ;DOES HE HAVE P. P. IN ADVANCE OF THIS?
+ CAMGE TT,[-1]
+ ASH T2,-1 ;YES
+ HRRZ S,B
+REPEAT 3,[
+ CAMG T2, CONC SWPPV,\.RPCNT
+ JRST .+3
+ EXCH T2, CONC SWPPV,\.RPCNT
+ EXCH S, CONC SWPPC,\.RPCNT
+]
+
+STVLP1: SKIPE T1,WPPRK(B)
+ JRST SBKS1 ;ANY W PP OUTSIDE SQUARE OF B K?
+ ;ALSO ANY W CONN P P?
+SBKS2: SKIPN T1,WNPNFL(B)
+ JRST STVLF1 ;NO NON-PASSED PAWNS IN FILE
+ MOVE T1,WPNFLS(B) ;NUMBER WHITE PAWNS PASSED OR NOT
+ RS W PAWNS IN *F!B FILE, SUB R,MULTP(T1)
+ SKIPN WPNFLS-1(B)
+ SKIPE WPNFLS+1(B)
+ JRST STVLF1
+ SKIPN T2,WNPRK(B) ;SEE IF LEADING ISO P CAN BE TRADED
+ JRST STVLA2
+ SKIPLE T,@STPX1(T2)
+ SKIPL SNFBP-PIECE(T)
+ JRST .+2
+ JRST STVLA1 ;YES
+ SKIPLE T,@STPX2(T2)
+ SKIPL SNFBP-PIECE(T)
+ JRST .+2
+ JRST STVLA1
+STVLA2: MOVEI T2,IMULTP(T1) ;PAWNS ISOLATED
+ SKIPE BNPNFL(B)
+ JRST STVLF2 ;NOT ON OPEN FILE
+ ADDI T2,OIMULT-IMULTP
+ SKIPN NUMORP+1
+ ADDI T2,OIMULV-OIMULT ;OTHER SIDE HAS NO RFPCS
+STVLF2: RS W ISOLATED PAWNS IN *F!B FILE, SUB R,(T2)
+STVLF1:
+
+STVLP6: SKIPE T1,BPPRK(B)
+ JRST SWKS1 ;ANY BLACK PP OUTSIDE SQUARE OF W KING?
+ ;ALSO ANY B CONN P P?
+
+SWKS2: SKIPN T1,BNPNFL(B) ;NUMBER NON-PASSED P'S IN FILE
+ JRST STVLF3
+ MOVE T1,BPNFLS(B) ;NUMBER BLACK P'S PASSED OR NOT
+ RS B PAWNS IN *F!B FILE, ADD R,MULTP(T1)
+ SKIPN BPNFLS-1(B)
+ SKIPE BPNFLS+1(B)
+ JRST STVLF3
+ SKIPN T2,BNPRK(B)
+ JRST STVLA4
+ SKIPLE T,@STPX3(T2)
+ SKIPL LMGSTD-PIECE(T)
+ JRST .+2
+ JRST STVLA3
+ SKIPLE T,@STPX4(T2)
+ SKIPL LMGSTD-PIECE(T)
+ JRST .+2
+ JRST STVLA3
+STVLA4: MOVEI T2,IMULTP(T1) ;PAWNS ISOLATED
+ SKIPE WNPNFL(B)
+ JRST STVLF4
+ ADDI T2,OIMULT-IMULTP
+ SKIPN NUMORP
+ ADDI T2,OIMULV-OIMULT
+STVLF4: RS B ISOLATED PAWNS IN *F!B FILE , ADD R,(T2)
+STVLF3: AOBJN B,STVLP3
+ MOVE B,[-8,,NPCS+1]
+STVLP5: SKIPE T,PIECEL(B)
+ SKIPL LMGT(B)
+ JRST STVLP9
+ SKIPE PINT(B)
+ JRST STVP6 ;PINNED
+ SKIPN T2,BOARD-BW(T)
+ JRST STVP5
+ SKIPGE (T2)
+ SKIPGE LMGT-PIECE(T2)
+ JRST STVP6 ;BLOCKADED
+STVP5: MOVE T2,BA-BW(T)
+ CAMGE T2,WA-BW(T)
+ JRST STVP6
+ SKIPLE T2,BOARD-BW+1(T1)
+ SKIPL SNFBP-PIECE(T2)
+ JRST STVP7
+ MOVE T2,BA-BW+1(T)
+ SUB T2,PCATV(B)
+ CAMGE T2,WA-BW+1(T)
+ JRST STVP6
+;DROPS THRU;DROPS IN
+
+STVP7: SKIPLE T2,BOARD-BW-1(T)
+ SKIPL SNFBP-PIECE(T2)
+ JRST STVP8
+ MOVE T2,BA-BW-1(T)
+ SUB T2,PCATV(B)
+ CAMGE T2,WA-BW-1(T)
+ JRST STVP6
+STVP8: LDB T1,[BCOLR,,BPREL(T)]
+ AOS STVLPV(T1)
+ JRST STVP9
+
+STVP6: LDB T1,[BCOLR,,BPREL(T)]
+ AOS STVLPC(T1)
+STVP9: SKIPG T1,PPTP(B)
+ JRST STVLP7
+ MOVE T2,PFILE(B)
+ MOVE T2,WNPNFL(T2)
+ CAIE T1,3
+ RS B FORWARD/BACKWARD *P!B AT *S!T,ADD R,BACKV(T2)
+STVLP7: SKIPN T1,PPASED(B)
+ JRST STVLP9
+ JUMPL T1,STVLP8
+ SKIPE BOARD-BW(T)
+ JRST STVBB1
+ MOVE T2,PPV(T1)
+ SKIPG STVLEG
+ MOVE T2,EPPV(T1)
+STBPR1: SUB T1,MAWPP
+ CAMGE T1,[-1]
+ ASH T2,-1
+ HRRZ S,B
+REPEAT 3,[
+ CAMGE T2, CONC SBPPV,\.RPCNT
+ JRST .+3
+ EXCH T2, CONC SBPPV,\.RPCNT
+ EXCH S, CONC SBPPC,\.RPCNT
+]
+
+STVLP9: AOBJN B,STVLP5
+ RS W PP1, ADD R,SWPPV0
+ RS W PP2, ADD R,SWPPV1
+ RS W PP3, ADD R,SWPPV2
+ RS W CPP, ADD R,SWCPPV
+ RS B PP1, SUB R,SBPPV0
+ RS B PP2, SUB R,SBPPV1
+ RS B PP3, SUB R,SBPPV2
+ RS B CPP, SUB R,SBCPPV
+STVLS: IRP AA,,[STVLPU,STVLPU+1,STVLPV,STVLPV+1]AB,,[STVLPB,STVLPB+1,STVLPC,STVLPC+1]AC,,[WLBC
+WDBC,BLBC,BDBC]AD,,[W LIGHT,W DARK,B LIGHT,B DARK]AE,,[ADD,ADD,SUB,SUB]AF,,[5,6,7,8]
+ SKIPN AC
+ JRST STVLS!AF ;# B OF SIDE-COLOR
+ MOVEI A,20
+ MOVE B,AA ;# UNBLOCKED P OF SIDE-COLOR
+ CAIL B,5
+ SUBI A,4
+ LSH B,2
+ SUB A,B
+ MOVE B,AB ;# BLOCKED P OF SIDE-COLOR
+ LSH B,3
+ SUB A,B
+ SKIPGE A
+ RS AD SQS PAWN-BISH INTERF,AE R,A
+STVLS!AF: TERMIN
+
+STVLS2: SKIPLE STVLEG
+ JRST STVPA2 ;NOT ENDGAME
+ MOVM A,PCSUM
+ CAILE A,2*PWNV
+ JRST STVPA2 ;NOT REALLY GOING TO GET TO THAT SORT OF ENDGAME
+ SKIPN NWPPP
+ JRST STPA4
+ MOVEI A,8. ;FIND OUTSIDE P.P.
+STPA2: SKIPE WPPRK(A)
+ JRST STPA1
+ SKIPN BPNFLS(A)
+ SOJG A,STPA2
+STPA1R: MOVEI A,1
+STPA3: SKIPE WPPRK(A)
+ JRST STPA1A
+ CAIN A,7
+ JRST STPA4
+ SKIPN BPNFLS(A)
+ AOJA A,STPA3
+STPA4: SKIPN NBPPP
+ JRST STPA5
+ MOVEI A,8
+STPA6: SKIPE BPPRK(A)
+ JRST STPA7
+ SKIPN WPNFLS(A)
+ SOJG A,STPA6
+STPA7R: MOVEI A,1
+STPA8: SKIPE BPPRK(A)
+ JRST STPA7A
+ CAIN A,7
+ JRST STPA5
+ SKIPN WPNFLS(A)
+ AOJA A,STPA8
+STPA5:
+
+STVPA2: SKIPN A,PWBSW
+ JRST STVPA4
+ SETZM STVA4A ;HACK PAWN SPREAD HACK
+ SETZM STVA4B
+ MOVEI B,8.
+ SKIPN @SPNFLS(A) ;A HAS SIDE AHEAD
+STVPA5: SOJG B,.-1
+ JUMPE B,STVPA6
+ SKIPN STVA4A
+ MOVEM B,STVA4A ;MAX FILE WITH P
+ MOVEM B,STVA4B ;MIN FILE WITH P
+ JRST STVPA5
+
+STPA1: RS W OUTSIDE P P TO Q IN *F!A FILE,ADDI R,100
+ JRST STPA1R
+
+STPA1A: RS W OUTSIDE P P TO K IN *F!A FILE,ADDI R,100
+ JRST STPA4
+
+STPA7: RS B OUTSIDE P P TO K IN *F!A FILE,SUBI R,100
+ JRST STPA7R
+
+STPA7A: RS B OUTSIDE P P TO Q IN *F!A FILE,SUBI R,100
+ JRST STPA5
+
+STVLA1: RS ISO P IN *F!B CAN BE TRADED, SOJLE T1,STVLF1
+ JRST STVLA2
+
+STVLA3: RS ISO P IN *F!B CAN BE TRDED, SOJLE T1,STVLF3
+ JRST STVLA4
+
+
+STPX1=.-1
+ REPEAT 8, BOARD+<.RPCNT+2>*BW+BW-1(B)
+STPX2=.-1
+ REPEAT 8, BOARD+<.RPCNT+2>*BW+BW+1(B)
+STPX3=.-1
+ REPEAT 8, BOARD+<9-.RPCNT>*BW-BW-1(B)
+STPX4=.-1
+ REPEAT 8, BOARD+<9-.RPCNT>*BW-BW+1(B)
+
+SBKS1: SKIPN T2,WPPRK+1(B)
+ JRST SWCP1
+ SUB T2,T1
+ MOVMS T2
+ CAILE T2,2
+ JRST SWCP1
+ SOJLE T2,SWCP2
+ MOVE T2,T1
+ MOVEI S,1(B)
+ CAMGE T2,WPPRK+1(B)
+ SKIPA S,B
+ MOVE T2,WPPRK+1(B)
+ IMULI T2,BW
+ ADDI T2,BW(S)
+ SKIPE BOARD+BW(T2)
+ JRST SWCP1
+ LDB ZR,[BSQSP,,CNTRL+BW(T2)]
+ CAIL ZR,MSQBD
+ JRST SWCP1
+SWCP2: MOVE T2,T1
+ CAMGE T2,WPPRK+1(B)
+ MOVE T2,WPPRK+1(B)
+ MOVE S,CPPV(T2)
+ CAMLE S,SWCPPV
+ MOVEM S,SWCPPV
+SWCP1: LDB T2,[100,,PLYN] ;HAVE PP FILE IN RH(B), RANK IN T1
+ SKIPN T2
+ AOS T1 ;OUR MV - ASSUME WE ADV P
+ MOVE ZR,T1
+ SUB ZR,PRANK+BKING-PIECE ;PRNK NOT RPRNK BECAUSE FROM OUR PT OF VIEW
+ CAILE ZR,1
+ JRST SBKS3 ;P AHEAD
+ MOVE ZR,PFILE+BKING-PIECE
+ SUBI ZR,(B)
+ MOVMS ZR
+ CAMG ZR,REVERS(T1)
+ JRST SBKS2
+
+SBKS3: RS W HAS P.P. OUTSIDE SQUARE, AOS PPSTSW
+ MOVSI ZR,400000
+ IORM ZR,PSQFIL(B)
+ JRST SBKS2
+
+SWKS1: SKIPN T2,BPPRK+1(B)
+ JRST SBCP1
+ SUB T2,T1 ;POSSIBLE CONNECTED PASSED P
+ MOVMS T2
+ CAILE T2,2
+ JRST SBCP1 ;TOO FAR APART
+ SOJLE T2,SBCP2
+ MOVE T2,T1 ;TWO RANKS APT, CAN REAR P ADVANCE?
+ MOVEI S,1(B)
+ CAMGE T2,BPPRK+1(B)
+ SKIPA S,B
+ MOVE T2,BPPRK+1(B)
+ MOVE T2,REVERS(T2)
+ IMULI T2,BW
+ ADDI T2,BW(S)
+ SKIPE BOARD-BW(T2) ;T2 HAS SQ OF REAR PAWN
+ JRST SBCP1
+ LDB ZR,[BSQSP,,CNTRL-BW(T2)]
+ CAIG ZR,MSQWD
+ JRST SBCP1
+SBCP2: MOVE T2,T1 ;CONN P P
+ CAMGE T2,BPPRK+1(B)
+ MOVE T2,BPPRK+1(B)
+ MOVE S,CPPV(T2)
+ CAMLE S,SBCPPV
+ MOVEM S,SBCPPV ;RECORD IF BEST CONN PP SO FAR
+SBCP1: LDB T2,[100,,PLYN]
+ SKIPE T2
+ AOS T1
+ MOVE T2,PRANK+WKING-PIECE
+ MOVE T2,REVERS(T2)
+ MOVE ZR,T1
+ SUB ZR,T2
+ CAILE ZR,1
+ JRST SWKS3
+ MOVE ZR,PFILE+WKING-PIECE
+ SUBI ZR,(B)
+ MOVMS ZR
+ CAMG ZR,REVERS(T1)
+ JRST SWKS2
+
+SWKS3: RS B HAS P.P. OUTSIDE SQUARE, AOS PPSTSB
+ MOVEI ZR,400000
+ IORM ZR,PSQFIL(B)
+ JRST SWKS2
+
+STVPA6: MOVE B,STVA4A
+ SUB B,STVA4B
+ MOVE T1,STVA6W(B)
+ SKIPG PWBSW
+ MOVNS T1
+ RS PAWN SPREAD OF *O!B,ADD R,T1
+
+STVPA4: RS POSTAN,MOVEM R,POSTAN
+ MOVM T1,POSTRM
+ XCT STDVL1
+ SKIPGE POSTRM
+ MOVNS T1
+ RS POSTRM,ADD R,T1
+
+ LDB A,[430100,,R]
+ SKIPN WPNC(A)
+ SKIPE WRKC(A)
+ JRST STVLS0
+ MOVE T1,WBSC(A)
+ CAIGE T1,2
+ SKIPE WQNC(A)
+ JRST STVLS0
+ MOVE T2,WKNC(A)
+ CAIGE T2,3
+ JUMPE T1,STVLS1
+ JUMPN T2,STVLS0
+STVLS1: RS BUT LACKS MATING FORCES,MOVEI R,0
+STVLS0: CAIG R,2*
+ CAMG R,[-2*]
+ ERRTTY [ASCIZ /BAD VAL STVL4/]
+ POPJ P,
+
+ BPNFLS(B)
+SPNFLS: 0
+ WPNFLS(B)
+
+STVA4A: 0
+STVA4B: 0
+
+
+STVA6W: -20
+ -10
+ 0
+ 10
+ 20
+ 30
+ 40
+ 40
+
+STVLP4: RS *P!B PASSED BUT BLOCKED BY FRIENDLY P, ADD R,BPPVLU
+ JRST STVLP1
+
+STVLP8: RS *P!B PASSED BUT BLOCKED BY FRIENDLY, SUB R,BPPVLU
+ JRST STVLP9
+
+
+STVWB1: MOVE T2,BPPV(T1)
+ SKIPG STVLEG
+ MOVE T2,EBPPV(T1)
+ JRST STWPR1
+
+STVBB1: MOVE T2,BPPV(T1)
+ SKIPG STVLEG
+ MOVE T2,EBPPV(T1)
+ JRST STBPR1
+
+STVLPU: 0 ;WHITE UNBLOCKED PAWNS ON LIGHT SQS
+ 0 ;" ON DARK SQS
+STVLPB: 0 ;WHITE BLOCKED PAWNS ON LIGHT SQS
+ 0 ;" ON DARK SQS
+STVLPV: 0 ;BLACK UNBLOCKED PAWNS ON LIGHT
+ 0 ;ON DARK
+STVLPC: 0 ;BLACK BLOCKED ON LIGHT
+ 0 ;ON DARK
+
+STVLEG: 0 ;ENDGAME IND.
+
+ 0 ;MUST BE HERE FOLLOWING CLEARED WITH BLT
+SWPPV0: 0 ;VAL OF MOST VAL W PP
+SWPPV1: 0 ;2ND
+SWPPV2: 0 ;3RD
+SBPPV0: 0 ;BLACK 1ST
+SBPPV1: 0 ;2ND
+SBPPV2: 0 ;3RD
+SWCPPV: 0 ;W CONN PASSED P BONUS
+SBCPPV: 0 ;B
+;END OF AREA CLEARED WITH BLT
+
+SWPPC0: 0 ;PC CORRESP WITH SWPPV0
+SWPPC1: 0
+SWPPC2: 0
+SBPPC0: 0
+SBPPC1: 0
+SBPPC2: 0
+
+TSS:
+STRSTP: MMSAVAC
+ MOVEI I,2
+ MOVEM I,TRCSW1
+ PUSHJ P,ASTRC1
+ MOVE B,TRPSW
+ISOUT [.ASCII ?PDVLV=*U!PDVLV WTDLVL=*U!WTDLVL BTDLVL=*U!BTDLVL CPCDVL=*U!CPCDVL
+CTVLVN=*U!CTVLVN CTVLVW=*U!CTVLVW CTVLVB=*U!CTVLVB
+CTMVLN=*U!CTMLVN CTMLVW=*U!CTMLVW CTMLVB=*U!CTMLVB CPCMVL=*U!CPCMVL
+PWKSF=*U!PWKSF PBKSF=*U!PBKSF ?]
+ MOVE I,CATCSA+I
+ PUSHJ P,STVL4
+ MOVEM R,CATCSA+R
+ MOVE B,TRPSW
+ISOUT [.ASCII ?PDVDF=*U!PDVDF WTDVL=*U!WTDVL BTDVL=*U!BTDVL
+CTVV=*U!CTVV CTVVW=*U!CTVVW CTVVB=*U!CTVVB
+CTMV=*U!CTMV CTMVW=*U!CTMVW CTMVB=*U!CTMVB
+WKSF=*U!KSAEXP BKSF=*U!KSAEXP+1 ?]
+ PUSHJ P,ATRAF1
+ PUSHJ P,TYI
+ MMRSAC
+ POPJ P,
+
+STVL5: SKIPGE STDFD(P)
+ JRST DFDL1 ;DELAYED FEEDOVER LOST
+STVL5A: MOVE R,STDPMX(P)
+ MOVE Q,STDPMN(P)
+STVL5B: MOVE T2,STDPN(P)
+ MOVEM T2,LPPMN
+ MOVE T2,STDBHA(P)
+ MOVE D,STHSAD(P)
+ CAIN D,-1
+ JRST STVL5D
+ MOVEI J,HHFRC
+ SKIPGE STFDLF(P)
+ IORM J,HSTBV(D)
+STVL5D: MOVE P,STPDS(P)
+ MOVEM P,LGLMST
+ MOVEI J,0
+ MOVEI TT,1 ;DEFAULT HPVMGI
+ JSP ZR,EVMX
+
+DFDL1: AOS NDFDL
+ SKIPE C,CVPR
+ PUSHJ P,LFSRC
+ CLEARM CVPR
+
+ MOVE D,STHSAD(P)
+ MOVEM D,HSADR
+
+ MOVE P,STPDS(P)
+ SETOM SFB
+ AOS NFD
+ MOVEM P,LGLMST
+ SETOM HSHMOV
+ MOVE T1,(P)
+ MOVEM T1,BPREV(I)
+ JRST LMGH5
+
+STRET2: SKIPGE DFDF ;A B CUTOFF
+ JRST STV3L ;DONT PERMIT CUTTOFF IF DELAYED FEEDOVER
+STVL5C: XCT ABVLI(I) ;INDICATE WE MIGHT HAVE MORE
+ JRST STVL5B
+
+
+
+SFDBS4: TDZA T2,T2 ;HE HAS MORE E.P. THAN US OR BOTH ARE = AND HIS IS TRAPPED
+SFDBS6: MOVNI T2,1 ;IN CHECK + HE HAS TWO
+ MOVEI T1,1
+ JRST SFDBS5 ;THINGS MAY BE BETTER FOR SIDE TO MOVE
+
+
+STATE4: TDZA T2,T2 ;TRY TO FEEDOVER (STM HAS TEW E.P. OR ONE AND ITS TRAPPED)
+STATE6: MOVNI T2,1 ;IN CHECK AND HAS PCS E.P.
+ MOVEI T1,0 ;NOT KNOWN IF MAY BE BETTER FOR SIDE TO MOVE
+SFDBS5: JSP ZR,FDCOND
+ JUMPL T2,STATE9
+ JUMPG T2,STATE8
+ JRST STATE5
+
+FDCOND: MOVE Q,LMGD2
+ SUB Q,HK1V
+ SUB Q,PCGSW
+ CAMLE Q,FDCUT
+ JRST STATE7
+STMT2: SKIPE DFDSW
+ JRST SFDBS1
+STMT6: SETOM SFB ;FEEDOVER
+ AOS NFD
+ MOVE P,LGLMST
+ MOVE T,[-LLMGPL,,LMGPDL-1]
+ JRST STATE2
+
+
+SFDBS1: SKIPN SMICKF
+ SKIPN DFDSW
+ JRST SFDBS3
+ MOVE R,PCSATS
+ XCT SFDBT1(I)
+ XCT SFDBT2(I)
+ XCT ABTSTR(I)
+ JRST SFDD1 ;THINGS LOOK GOOD ENOUGH SO TRY DELAYED FEEDOVER
+SFDBS3: JRST STMT6
+
+STATE7: SUB Q,FDDCUT
+ CAMG Q,FDCUT
+ JUMPLE T1,STMT2
+ AOS NMFD
+SFDD2: SETOM SFDLF
+ JRST @ZR
+
+STMT5T: CAMG R,BPREV
+ CAML R,BPREV+1
+
+FIS: 1 ;IN PCG AND INITIAL SIT LOOKS BAD (CANTK=0), IF 1
+ ;LOOK ONLY AT POSITIVE MVS AFTER FINDING MV AS GOOD AS PCSATS
+FDCV: 0
+
+
+SFDD1: SETOM DFDF
+ AOS NDFDA
+ JRST SFDD2
+
+SFDBT1: ADD R,BPCV ;VAL OF BEST P.C.
+ SUB R,BPCV
+
+SFDBT2: SUB R,OPCSEP
+ ADD R,OPCSEP
+
+STV3E: SKIPGE RPIECE(D)
+ JRST STV3 ;KING FIRST DEF ATTACKED TWICE THEREFORE EN PRISE
+ PUSHJ P,F2LA
+ JUMPE T2,STV3
+ MOVE S,PVALUE(C)
+ SUB S,PVALUE(B) ;NET ON FIRST EXCH
+ ADD S,PVALUE(T1)
+ SUB S,PVALUE(D)
+ JUMPL S,STV3 ;AHEAD AFTER SECOND TRADE
+ MOVE J,@LMGST(I)
+ CAIN J,2
+ JRST STV2 ;NO POSSIBILITY OF RECAPTURE
+ SUB S,PVALUE(T2)
+ JUMPGE S,STV2 ;RECAPTURE WOULD NOT RECOUP
+
+STV3: AOS HPCOP
+ SKIPGE LMGT(B)
+ JRST STV3F1
+STV3F2: SKIPE PINT(B)
+ SETOM SFDF1
+ SKIPN PMV(B)
+ SETOM SFDF1
+STV3F: SKIPE T2,BDA1(A)
+ PUSHJ T,STV3A
+ SKIPE T2,BDA2(A)
+ PUSHJ T,STV3A
+ SKIPE T2,BDA3(A)
+ PUSHJ T,STV3A
+ JRST STV2
+
+
+STV3F1: SKIPG PPTP(B)
+ JRST STV3F
+ JRST STV3F2 ;WEAK PAWN
+
+STV3A: MOVEI T1,0
+ LSHC T1,6
+ JUMPE T1,.-1
+ XCT STV3T(I)
+ JRST STV3A1
+STV3A2: JUMPN T2,STV3A
+ POPJ T,
+
+STV3T: SKIPL PIECE(T1)
+ SKIPGE PIECE(T1)
+
+STV3A1: MOVE J,A
+ SKIPGE LMGT(T1)
+ SKIPL LMGT(B)
+ JRST STV3A7
+ LDB Q,[BRANK,,BPREL(A)]
+ CAMN Q,PRANK(T1)
+ XCT STV3AT(I) ;EP CAPT
+STV3A7: MOVE TT,PVALUE(B)
+ SKIPN @LMGST+1(I)
+ JRST STV3VF
+ SUB TT,PVALUE(T1)
+ JUMPL TT,STV3A3
+ MOVE Q,@LMGST(I)
+ SOJE Q,STV3A4
+ MOVE TT,PVALUE(D) ;MIN P, P+D-A
+ SUB TT,PVALUE(T1)
+ ADD TT,PVALUE(B)
+ CAMLE TT,PVALUE(B)
+ MOVE TT,PVALUE(B)
+STV3A4: CAML TT,PVALUE(T1)
+ SETOM TRDP(T1) ;PIECE HAS PLAUS CAPT
+STV3VF: SKIPGE LMGT(T1)
+ JRST STV3VG
+STV3VH: PUSH P,J
+ HRLM T1,(P)
+ PUSH P,TT
+STV3VJ: CAMLE TT,BPCV
+ MOVEM TT,BPCV
+ JRST STV3A2
+
+
+
+STV3VG: CAIL J,3*BW
+ CAIL J,9*BW
+ TROA J,400000
+ JRST STV3VH
+ MOVSI Q,-4 ;-2
+STV3VI: PUSH P,J
+ HRLM T1,(P)
+ PUSH P,STVQLT(Q)
+ ADDM TT,(P)
+ ADDI J,300000 ;100000
+ AOBJN Q,STV3VI
+ ADDI TT,STVQLT
+ JRST STV3VJ
+
+STV3AT: MOVEI J,BW(A)
+ MOVEI J,-BW(A)
+
+STV3A3: MOVE TT,@LMGST(I)
+ SOJN TT,STV3A5 ;WE HAVE OTHER ATTACKS
+ JRST STV3A8 ;ONLY ATT. PC E.P. SO MUST BE GOOD
+STV3A6: MOVE S,PIECEL(T1)
+ SKIPN @STLST+1(I)
+ JRST STV3A2 ;THIS PIECE NOT ATTACKED
+STV3A8: MOVEI TT,0
+ JRST STV3VF ;APPARENT UNFAVORABLE TRADE, BUT PIECE ATTACKED SO IT MAY BE BEST
+
+
+STV3A5: MOVE TT,PVALUE(T1)
+ SUB TT,PVALUE(B)
+ SUB TT,PVALUE(D)
+ JUMPG TT,STV3A6 ;PIECE WORTH MORE THAN PIECE TAKEN+1ST DEFENDER
+ ;THEREFORE DONT CONSIDER UNLESS PIECE ATTACKED
+ MOVE TT,PVALUE(B)
+ JRST STV3A4
+
+STLST: WA(S)
+ BA(S)
+ WA(S)
+
+STVD: PUSHJ P,CDVLV ;EVAL CURRENT DEVEL
+ MOVEM S,WTDVL
+ MOVEM T1,BTDVL
+ SUB S,T1
+ MOVEM S,PDVDF
+ MOVE T1,LMGD
+ CAILE T1,2
+ SKIPE CPCDVL
+ JRST STVDS5
+ MOVE T1,WTDLVL
+ SUB T1,BTDLVL
+ JUMPN I,STVDS4
+ CAMGE S,T1
+ MOVE S,T1
+STVDS5:
+STVDB: RS DEV VAL *U!S,ADDM S,POSTRM
+ JRST STVDR
+
+STVDS4: CAMLE S,T1
+ MOVE S,T1
+ JRST STVDS5
+
+; MOVN ZR,CPCDVL ;DEVEL VAL OF PC CAPTED IN LAST MOVE
+; JUMPN I,STVDS2
+; CAMLE T1,BTDLVL ;WHITE TO MOVE
+; MOVE T1,BTDLVL ;BLACK IMPROVED DEVEL ON LAST MOVE, GRONK IT BACK
+; ADD ZR,WTDLVL ;DONT LET WHITE DEVEL DEPROVE EXCEPT BY CAPTING PC
+; CAMGE S,ZR
+; MOVE S,ZR
+;STVDS1: SUB S,T1
+; MOVEM S,PDVDF
+; ADD S,PDVLV ;DIFF AT PREV LEVEL
+; XCT STDVCP(I) ; COMP FOR PDV OF PC CAPT AT LAST MOVE
+; MOVM T1,S
+; XCT STDVLS
+; SKIPGE S
+; MOVNS T1
+
+;STVDS2: CAMLE S,WTDLVL ;BLACK TO MOVE
+; MOVE S,WTDLVL
+; ADD ZR,BTDLVL
+; CAMGE T1,ZR
+; MOVE T1,ZR
+; JRST STVDS1
+
+
+
+; MOVE T1,WTDVL
+; ADD T1,BTDVL ;TOTAL DEVEL NOW
+; SUB T1,ORGDSM ;ORIG SUM AT TOP OF TREE
+; MOVE T2,DVLDIF
+; ADD T2,WTDVL
+; SUB T2,BTDVL
+; IMUL T1,T2
+; PUSH P,T1
+; MOVMS T1
+; PUSHJ P,ALOG
+; .OP FDVR 20.0 2.714
+; POP P,T1
+; SKIPGE T1
+; MOVNS T2
+; RS OPENING/CLOSING GAME,ADD R,T2
+; JRST STVDR
+
+STACE: SKIPN ACTV
+ JRST STACR
+ IMUL T1,PCSUM
+ JUMPGE T1,STACR ;SIDE TO GAIN NO LONGER AHEAD
+ HRRZ T1,GAMP
+STACE1: CAIN T1,GAME-1
+ JRST STACR
+ CAMN T1,ACTVP
+ JRST STACR1
+ LDB T2,[MPC,,(T1)]
+ SKIPL (T1)
+ SKIPGE LMGT(T2)
+ JRST STACR
+ SOJA T1,STACE1
+
+STACR1: MOVE T1,ACTV
+ MUL T1,PCSUM
+ RS ACTIVITY, SUB R,T1
+ JRST STACR
+
+CDVLV: MOVE B,[-NPCS,,1]
+ CLEARB S,PWVLV
+ CLEARB T1,PWVLV+1
+STVD1: SKIPN A,PIECEL(B)
+ JRST STVD2
+ MOVE T2,PDV(B)
+ IMUL T2,PINVF(B)
+ SKIPL LMGT(B)
+ JRST STVD5
+ ADDM T2,PWVLV
+STVD2: AOBJN B,STVD1
+ HRLI B,-NPCS
+STVD3: SKIPN A,PIECEL(B)
+ JRST STVD4
+ MOVE T2,PDV(B)
+ IMUL T2,PINVF(B)
+ SKIPL LMGT(B)
+ JRST STVD6
+ ADDM T2,PWVLV+1
+STVD4: AOBJN B,STVD3
+ MOVEM S,PCVLV
+ MOVEM T1,PCVLV+1
+ ADD S,PWVLV
+ ADD T1,PWVLV+1
+ POPJ P,
+
+STVD5: SKIPE TT,PINT(B)
+ JRST STVD5A
+STVD5B: ADD S,T2
+ JRST STVD2
+
+STVD5A: LDB C,[PINBS,,1(TT)]
+ MOVE C,BOARD(C)
+ SKIPL LMGT-PIECE(C)
+ JRST STVD5C
+ HRRZ TT,(TT)
+ JUMPN TT,STVD5A
+ JRST STVD5B
+
+STVD5C: ASH T2,-1
+ JRST STVD5B
+
+STVD6: SKIPGE TT,PINT(B)
+ JRST STVD6A
+STVD6B: ADD T1,T2
+ JRST STVD4
+
+STVD6A: LDB C,[PINBS,,1(TT)]
+ MOVE C,BOARD(C)
+ SKIPL LMGT-PIECE(C)
+ JRST STVD6C
+ HRRZ TT,(TT)
+ JUMPN TT,STVD6A
+ JRST STVD6B
+
+STVD6C: ASH T2,-1
+ JRST STVD6B
+
+PWVLV: 0 ;WT DEVEL PAWNS
+ 0 ;BLACK
+
+PCVLV: 0 ;WT DEVEL PCS
+ 0 ;BLACK
+
+ACTV: 0 ;IF NE 0 DELTA TO BE ADDED IF NO P MOVE OR CAPT
+ACTVP: 0 ;PNTR TO GAMP AT TOP LEVEL
+WTDVL: 0 ;TOTAL WHITE DEVEL
+BTDVL: 0 ;TOTAL BLACK DEVEL
+WTDLVL: 0 ;TOTAL WHITE DEVEL AT PREV LEVEL
+BTDLVL: 0 ;BLACK ..
+
+STDVCP: SUB S,CPCDVL
+ ADD S,CPCDVL
+
+PDVLV: 0 ;DEVELOPMENT VALUE AT PREV LEVEL
+STDVLS: ASH T1,-6 ;AMT TO SHIFT SUM OF THIS + PREV DIF BEFORE ADDING TO POS VAL
+STDVL1: ASH T1,-5 ;+1 PREV USED IN PMG
+PDVDF: 0 ;DIFFERENCE CURRENT POSITION
+CPCDVL: 0 ;PDV OF PIECE CAPTURED LAST MOVE IF ANY (COMPENSATE PDVLV)
+
+
+DVLDIF: 0 ;ORIG WTDVL-BTDVL
+ORGDSM: 0 ;ORIG WTDVL+BTDVL
+DFDF: 0 ;DELAYED FEEDOVER FLAG SET IF THINGS MIGHT BE BETTER FEEDOVER TRUE
+ ;BUT THINGS ALREADY LOOK GOOD ENOUGH WITH BEST P C
+
+BPCV: 0 ;VALUE OF BEST PLAUSIBLE CAPTURE
+OPCSEP: 0 ;TOTAL CALC LOSS ALL OUR PIECES E P
+
+PCSUM: 0 ;PCBAL+PNBAL-[PCBAL+1]-[PNBAL+1]
+
+CTVLVN: 0 ;NET BD CTL AT PREV LVL
+CTVLVB: 0 ;BLACK BOARD CTRL AT PREV LEVEL
+CTVLVW: 0 ;WHITE ...
+CTVVW: 0 ;WHITE BD CTL CURRENT LVL
+CTVVB: 0 ;BLACK ...
+CTVV: 0 ;NET BD CNTRL CURRENT LEVEL IE BC OF SIDE TO MOVE+ MIN (BC OF OTHER SIDE NOW, BC OF OTHER SIDE AS PREV LEVEL
+CTVLS: ASH W,-6 ;AMT TO SHIFT SUM OF CTVV+CTVLV BEFORE ADDING TO POS VAL
+CTVL1: ASH W,-5 ;+1
+
+CTMLVN: 0 ;NET PIECE MOBILITY AT PREV LVL
+CTMLVW: 0 ;WHITE PC MOBILITY AT PREV LEVEL
+CTMLVB: 0 ;BLACK ...
+CTMV: 0 ;NET PIECE MOBILITY AT CURRENT LVL
+CTMVW: 0 ;WHITE PC MOBIL AT CUR LVL
+CTMVB: 0 ;BLACK ...
+CTMLS: ASH W,-6
+CTML1: ASH W,-5
+CPCMVL: 0 ;PMV OF PIECE CAPTED PREV LVL (COMP CTMLVN)
+
+STDMCP: SUB T1,CPCMVL
+ ADD T1,CPCMVL
+
+PWKSF: 0 ;PREV W KING SAFETY
+PBKSF: 0 ;PREV B KING SAFETY
+
+POSTRM: 0 ;ACCUM POSITIONAL TERMS
+POSTAN: 0 ;TANGIBLE VALUE
+
+STVL6: CLEARM CPCDVL
+ CLEARM CPCMVL
+ JUMPE A,STVL6A ;O-O OR O-O-O
+ SKIPE D,BOARD(A)
+ JRST STVL6B
+ CAMN A,GHLOC
+ SKIPL LMGT(B)
+ JRST STVL6A
+ MOVE D,@EVMT13(I)
+STVL6B: MOVE C,PDV-PIECE(D)
+ IMUL C,PINVF-PIECE(D)
+ MOVEM C,CPCDVL
+ MOVEI T2,-PIECE(D)
+ SKIPN I
+ SUBI T2,NPCS
+ ADDI T2,STDPMV(P)
+ MOVE C,-1(T2)
+ IMUL C,PINVF-PIECE(D)
+ SKIPL C
+ CAIL C,10000
+ ERRTTY [ASCIZ /BAD CPCMVL AT STVL6B/]
+ MOVEM C,CPCMVL
+STVL6A: SKIPL STACL(P)
+ JUMPE B,STV3B ;DONT LOOK AT CASTLING
+ AOS T2,STDMN(P)
+ MOVEM T2,LPPMN
+ HRRZ A,(T1)
+ PUSHJ P,TMOVE ;TRANSLATE AND MAKE MOVE
+ JRST STV3B
+ XORI I,1
+ PUSH P,CVPR
+ PUSHJ P,STATE0 ;ANALYZE SITUATION
+ POP P,C
+ XORI I,1
+ XCT ABTST(I)
+ JRST STVL2 ;REJECT BRANCH
+ XCT SBSFTS(I)
+ JRST TMS1 ;WANT MOVE
+STV3D1: EXCH C,CVPR
+ PUSHJ P,LFSRC ;RECLAIM FS
+STV3D: PUSHJ P,UNMOVE
+STV3B: MOVEI T1,2
+ ADDM T1,STMVP(P)
+ JRST STV3L
+
+STVL2: MOVE T2,POSHSA
+ MOVEM T2,STDBHA(P)
+ MOVEM R,STDPMX(P)
+ MOVEM Q,STDPMN(P)
+ PUSHJ P,LFSRC
+ PUSHJ P,RECMS
+ MOVE T2,STDMN(P)
+ TRO T2,100
+ DPB T2,[PUSNM1,,@CVPR]
+ PUSHJ P,UNMOVE
+ MOVE R,STDPMX(P)
+ MOVE Q,STDPMN(P)
+ JRST STVL5C
+
+
+
+STVT1: -200000 ;LOSING SITUATIONS
+ 200000
+
+SBSFTS: CAMLE R,STDPMX(P) ;SKIP ON DONT WANT MOVE
+ CAMGE Q,STDPMN(P)
+
+TMS1: MOVE T2,POSHSA ;BEST SO FAR
+ MOVEM T2,STDBHA(P)
+ CLEARM STACL(P)
+ MOVEM R,STDPMX(P)
+ MOVEM Q,STDPMN(P)
+ XCT ABUPT(I)
+ PUSHJ P,BPRVS
+ PUSHJ P,LFSRC ;RECLAIM FS
+ PUSHJ P,RECMS
+ MOVE T2,STDMN(P)
+ DPB T2,[PUSNM1,,@CVPR]
+ MOVSI T2,BHFRC
+ SKIPGE STFDLF(P)
+ IORM T2,@CVPR ;FEEDOVER ATT LOST
+ JRST STV3D
+
+LFSRC: JUMPE C,CPOPJ ;RECLAIM POINTER IN C
+ MOVE T2,1(C)
+ AOJE T2,LFSRER
+ HRRZ T2,C
+ CAIL T2,LSPC
+ CAIL T2,LFS
+ JRST LFSRER
+ SETOM 1(T2)
+ HRRZ C,(C)
+ EXCH T2,LFS
+ MOVEM T2,@LFS
+ JRST LFSRC
+
+LFSRER: ERRTTY [ASCIZ /LOSSAGE AT LFSRC/]
+
+
+CVPR: 0 ;VALUE RETURNED FOR PRINCIPAL VARIATION
+BPPVLU: 4 ;EXTRA VALUE FOR P P BLOCKED BY OWN PAWN
+
+HPCOP: 0 ;HIS PIECES EN PRISE
+
+PCC: 0 ;PRESSING CAPTURE COUNT
+ ;(OK IF CAPTURED IMMEDIATELY, BUT WOULD BE EN PRISE IF IT
+ ;WAS HIS TURN TO MOVE
+
+PMC: 0 ;PRESSING MOVE COUNT
+ ;PIECE EN PRISE AND MUST BE MOVED , LOSING TEMPO
+SFDLF: 0 ;-1 ATTEMPTED FEEDOVER LOST
+
+SFEEDF: 0
+SFDF1: 0
+
+CATCUT: 2 ;INVESTIGATE ALL CAPTURES AT THIS PLY OR LESS
+FDCUT: 2 ;NO FEEDOVERS DEEPER THAN THIS (BEYOND PMG +PCG)
+FDDCUT: 2 ;# ADDTL FOR DEFENSIVE FEEDOVERS (MAY BE WORSE FOR ME)
+SFB: 0 ;IN A FEEDOVER
+LMGEPS: 0 ;LOCN AT WHICH CHECKING PAWN CAN BE TAKEN EP
+SMICKF: 0 ;-1 SIDE TO MOVE IN CHECK
+
+TPCF: 0 ;SIDE TO MOVE SHOULD TRADE PCS
+TPNF: 0 ;SIDE TO MOVE SHOULD TRADE PAWNS
+
+PCSP: PCBAL
+ PCBAL+1
+ PCBAL
+PNSP: PNBAL
+ PNBAL+1
+ PNBAL
+
+
KSQTBP: 0
+KSQTB: BLOCK 40
+PP TRDP:, BLOCK NPC ;-1 IF CAN GET RID OF PIECE WITH TEMPO TRACE OR
+ ;PLAUS CAPT
+
+PP NODF:, BLOCK NPC ;NUMBER ATTACKED PIECES PIECE ONLY DEFENSE OF
+
+ATPCG: SETOM TPCFL
+ LDB I,[100,,PLYN]
+ MOVEM P,LGLMST
+ MOVE T,[-LLMGPL,,LMGPDL]
+ JRST STATE1
+
+ATPCG1: MOVE B,TRPSW
+IFN DSPLY,[
+ CAIE B,DISAD
+ CAIN B,PNTDIS
+ PUSHJ P,DISINS
+]
+ HRRZ R,LGLMST
+ATPCG4: CAIL R,-1(P)
+ JRST ATPCG3
+ HLRZ A,1(R)
+ PUSHJ P,PCOUT
+ MOVEI A,"-
+ PUSHJ P,(B)
+ HRRZ A,1(R)
+ PUSHJ P,SQOUT
+ PUSHJ P,DSPACE
+ MOVE A,2(R)
+ PUSHJ P,DPT
+ PUSHJ P,DCRR
+ ADDI R,2
+ JRST ATPCG4
+
+ATPCG3:
+IFN DSPLY,[
+ CAIE B,PNTDIS
+ CAIN B,DISAD
+ PUSHJ P,DISCLG
+]
+ CLEARM TPCFL
+ JRST MNLP
+
+TPCFL: 0
+
+ATPCC: MOVE B,TRPSW
+ IFN DSPLY,[
+ CAIN B,PNTDIS
+ PUSHJ P,DISINS
+]
+ MOVE C,[-NPC,,1]
+ATPC3: SKIPN T1,PIECEL(C)
+ JRST ATPC2
+ MOVE T2,PDV(C)
+ MOVE TT,T2
+ IMUL TT,PINVF(C)
+ ISOUT [.ASCII ?*P!C AT *S!T1 *U!T2 TOTAL *U!TT ?]
+ATPC2: AOBJN C,ATPC3
+IFN DSPLY,[
+ CAIN B,PNTDIS
+ PUSHJ P,DISCLG
+]
+ POPJ P,
+
+NSBVS: 1
+
+DEFINE SQVRK A,B,C,D
+ 0
+ A
+ B
+ C
+ D
+ D
+ C
+ B
+ A
+ 0
+TERMIN
+NWK==.-2*BW
+ BLOCK BW*8. ;NEAR (8 NEIGHBORHOOD AND CENTER) WHITE KING=> NON ZERO
+NBK==.-2*BW
+ BLOCK BW*8. ;NEAR BLACK KING => NON ZERO
+
+CSQVL=.-2*BW
+ SQVRK 2,3,4,4
+ SQVRK 3,6,8,8
+ SQVRK 4,8,14.,14.
+ SQVRK 4,8,14.,18.
+ SQVRK 4,8,14.,18.
+ SQVRK 4,8,14.,14.
+ SQVRK 3,6,8,8
+ SQVRK 2,3,4,4
+
+WCSQVL=.-2*BW
+ SQVRK 2,3,4,4
+ SQVRK 3,6,8,8
+ SQVRK 4,8,10.,10.
+ SQVRK 4,8,14.,18.
+ SQVRK 4,8,14.,18.
+ SQVRK 4,8,14.,14.
+ SQVRK 3,6,8,8
+ SQVRK 2,3,4,4
+
+BCSQVL=.-2*BW
+ SQVRK 2,3,4,4
+ SQVRK 3,6,8,8
+ SQVRK 4,8,14.,14.
+ SQVRK 4,8,14.,18.
+ SQVRK 4,8,14.,18.
+ SQVRK 4,8,10.,10.
+ SQVRK 3,6,8,8
+ SQVRK 2,3,4,4
+
+PP PINVF:,
+REPEAT 2,[
+ REPEAT 8, 4*2
+ 2*2
+ 3*2
+ 3*2
+ 1*2
+ 1*2
+ 3*2
+ 3*2
+ 2*2
+]
+
+;1 FOR W'S FOURTH RANK -1 FOR BLACKS
+4RNKP==.-2*BW
+ REPEAT 3*BW,0
+ REPEAT BW,1
+ REPEAT BW,-1
+ REPEAT 3*BW,0
+
+ATEV: CLEARM WAV ;FILL WAV BAV
+ MOVE A,[WAV,,WAV+1]
+ BLT A,BAV+BD2-1
+ MOVSI T1,-8
+ MOVE T2,[-8,,2*BW+1]
+ATEV1: HRREI S,1-4(T1)
+ LSH S,2
+ MOVE A,WCSQVL(T2)
+ SKIPLE S
+ ADD A,S
+ MOVEM A,WAV(T2)
+ MOVE A,BCSQVL(T2)
+ MOVE S,REVERS+1(T1)
+ SUBI S,4
+ LSH S,2
+ SKIPLE S
+ ADD A,S
+ HRRZM A,BAV(T2)
+ AOBJN T2,ATEV1
+ ADD T2,[-8,,2]
+ AOBJN T1,ATEV1
+NKCMP: MOVE T1,NKSI
+ SKIPN T2,PIECEL+BKING-PIECE
+ JRST ATEV3
+IRP A,,[1,-1,BW,-BW,BW+1,BW-1,-BW+1,-BW-1,0]
+ SKIPGE BOARD+A(T2)
+ JRST .+3
+ ADDM T1,NBK+A(T2)
+ ADDM T1,WAV+A(T2)
+TERMIN
+ATEV3: SKIPN S,PIECEL+WKING-PIECE
+ POPJ P,
+IRP A,,[1,-1,BW,-BW,BW+1,BW-1,-BW+1,-BW-1,0]
+ SKIPGE BOARD+A(S)
+ JRST .+3
+ ADDM T1,NWK+A(S)
+ ADDM T1,BAV+A(S)
+TERMIN
+ POPJ P,
+NKSI: 10. ;EXTRA FOR NEAR KING
+
+
+CONSTANTS
+
+TRT: REPEAT NRMM, CONC ZZ,\.RPCNT
+LTRT==.-TRT
+
+STRT: REPEAT NSMM, CONC ZQ,\.RPCNT
+LSTRT==.-STRT
+
+PTRT: REPEAT NPMM, CONC ZX,\.RPCNT
+LPTRT==.-PTRT
+
+QTRT: REPEAT NQMM, CONC ZY,\.RPCNT
+LQTRT==.-QTRT
+
+;ARRAYS OF VALUES FOR PAWN STRUCTURE STATEV
+
+MULTP: 0 ;0 PAWNS IN FILE
+ 0 ;1 PWN.
+ 0 ;...
+ 40
+ 140
+ 240
+ 340
+
+IMULTP: 0 ;ISOLATED NON OPEN FILE PWNS IN FILE
+ 20
+ 100
+ 200
+ 240
+ 300
+ 400
+
+OIMULT: 0 ;OPEN FILE ISOLATED PWNS
+ 50
+ 140
+ 240
+ 360
+ 500
+ 620
+
+OIMULV: 0 ;OPEN FILE ISO PWNS OTHER SIDE HAVING NO RFPCS
+ 30
+ 120
+ 210
+ 250
+ 310
+ 410
+
+BACKV: 24 ;OPEN FILE BACKWARD PAWN
+ REPEAT 6,14 ;NON OPEN FILE BACKWARD PAWN
+
+;PASSED PAWN VALUES
+PPV: 0 ;PP ON RANK 0?
+ 0
+ 10 ;PP ON RANK 2
+ 14 ;...
+ 30
+ 64
+ 160 ;...
+ 260 ;PP ON RANK 7
+ KQV-PWNV ;RANK 8, FOR PMG
+
+
+BPPV: 0 ;VALUES IP P.P. BLOCKED
+ 0
+ 4
+ 6
+ 14
+ 32
+ 70
+ 130
+
+;PP IN ENDGAME
+EPPV: 0
+ 0
+ 30
+ 34
+ 50
+ 100
+ 200
+ 300
+
+EBPPV: 0 ;VALUES IF P.P. BLOCKED IN ENDGAME
+ 0
+ 14
+ 16
+ 24
+ 40
+ 100
+ 140
+
+;CONN PP (PER PAWN) (EXTRA) (NOT BLOCKED)
+CPPV: 0 ;ON RANK 0
+ 0
+ 10
+ 24
+ 30
+ 40
+ 100
+ 260
+
+BPREL: REPEAT 2*BW,0
+ REPEAT 8,[
+ ZZ==.RPCNT
+ 0
+ REPEAT 8,[
+ ZFILE==.RPCNT+1
+ ZRANK==ZZ+1
+ ZPDAG==ZRANK+ZFILE
+ ZMDAG==ZRANK+9-ZFILE
+ ZFILE_9+ZRANK,,ZPDAG_9+ZMDAG
+]
+ 0
+]
+ REPEAT 2*BW,0
+
+;SYMBOLIC BYTE POINTERS INTO BPREL
+BFILE=331100
+BRANK=221100
+BPDAG=111100
+BMDAG=1100
+BCOLR==110100
+
+LSPCL=200.
+;LIST STRUCTURE SPACE FOR RECORDING PRINCIPAL VARIATIONS
+;1ST WD LINK
+;4.9 FREE 4.8,4.7- BMTHR,BIDSF
+PVMGI==370200 ;MOVE GEN ID 0 PMG 1 PCG (OLD TYPE) 2 EG HACK 3 PMG IN PCG MODE
+ ;BITS 4.6 4.5
+BHASH==10000 ;GOTTEN BY HASH MATCH
+BHFRC==4000 ;MV WAS HSH FORCED
+BHFRCB==350100 ;BYTE PNTR TO ABOVE
+BHLFT==2000 ;HASH LEFTOVER BIT (USE ONLY IN HPV PRINTOUTS)
+BHLFTB==340100 ;BYTE PNTR TO ABOVE
+;3.1-3.6 NTH MOVE INVESTIGATED AT THIS LEVEL
+PUSNM==220600
+;3.7=1 THIS MOVE A-B CUTTOFF
+PUSNM1==220700
+PUSABB==300100
+;2 ND WD STANDARD MOVE
+;-1 IF ON FREE LIST
+
+LSPC: REPEAT LSPCL,[ .+2
+ -1
+]
+ 0
+ -1
+
+
+LFS: LSPC
+
+
+CONSTANTS
+
+.INSRT MS; CHEG >
+
+EGLGL: PUSHJ P,EGFSP
+ HRLI TT,EGSETT_14 ;SET
+ MOVEM TT,EGLM
+ MOVEI Q,1
+ MOVEM Q,1(TT) ;SET UP COUNT
+ MOVEM TT,EGLST
+ MOVE A,@OKINGT(I) ;PICK UP OUR KING LOCN
+ MOVE B,LGMST2(I) ;GET AOBJN PNTR TO OUR PCS
+ MOVEI Q,EGL1
+ SKIPE S,@LMGST+1(I)
+ JRST EGL2 ;IN CHECK
+EGL3: SKIPE A,PIECEL(B)
+ PUSHJ T,@LMGT(B)
+ AOBJN B,EGL3
+ CLEARM @EGLST ;CLEAR LAST WORD
+ POPJ T,
+
+EGL1C: SKIPGE LMGT(B)
+ CAME A,LMGEPS
+ POPJ T,
+ JRST EGL1
+
+EGL1B: SKIPGE RPIECE(B)
+ POPJ T,
+ MOVE T1,KSQTBP
+ CAME A,KSQTB(T1)
+ AOBJN T1,.-1
+ JUMPGE T1,EGL1C
+EGL1: SKIPGE T1,BOARD(A)
+ POPJ T, ;OFF BOARD
+ JUMPE T1,EGL1A
+ XCT OURGY1(I)
+ POPJ T, ;OUR GUY THERE
+EGL1A: MOVE D,PIECEL(B)
+ SKIPE T2,BDBLK(D)
+ JRST EGLUB ;UNBLOCKING SOMETHING
+EGLUBR: PUSHJ P,EGFSP ;ADD TO SET OF LGL MOVES
+ MOVE T1,A
+ DPB B,[110600,,T1]
+ HRLI T1,EGMOVT_14
+ SKIPGE LMGT(B)
+ JRST EGLBR1 ;PAWN
+EGLBR0: MOVEM T1,1(TT)
+EGLBR2: MOVEM TT,EGLST
+ POPJ T,
+
+EGLBR1: CAIL A,3*BW
+ CAIL A,9*BW
+ TROA T1,400000
+ JRST EGLBR0
+EGLBR3: MOVEM T1,1(TT) ;PROMOTION
+ ADDI T1,100000
+ TLNE T1,1
+ JRST EGLBR2
+ PUSHJ P,EGFSP
+ JRST EGLBR3
+
+EGLUB: TDZA D,D
+EGLUB1: AOS D
+ MOVEI T1,0
+ LSHC T1,4
+ SKIPE TT,BDAST(T1)
+ JRST EGLUB2
+EGLUB3: JUMPN T2,EGLUB1
+ JRST EGLUBR
+
+
+EGLUB2: CAME A,PIECEL(TT) ;PIECE BEING TAKEN
+ XCT RMOYTT+1(I) ;SKIP ON HIS GUY
+ JRST EGLUB3
+ LDB T1,LMUAT(D) ;MOVING ON SAME LINE AS UNBLOCKAGE?
+ MOVE S,PIECEL(TT)
+ LDB ZR,LMUAT1(D)
+ CAME ZR,T1
+ JRST EGLUB4 ;NO, NO SECONDARY EFFECTS
+ SKIPGE RPIECE(B)
+ POPJ T, ;ILLEGAL K MOVE INTO SHADOW
+ JRST EGLUB3
+
+EGLUB4: MOVE S,@OKINGT(I)
+ LDB T1,ONEBS(D)
+ CAMN T1,PIECE(B)
+ POPJ T, ;MOVE DISCOVERS ON K
+ JRST EGLUB3
+
+EGL2: SKIPL BPCHD(A)
+ PUSHJ P,MCAF
+ SOJE S,EGL2A ;NOT DOUBLE CHECK
+ MOVE C,ATEVL2+1(I)
+EGL2C: ILDB T1,C
+ JUMPE T1,EGL2A
+ TRZN T1,100
+ JRST EGL2B
+ TLNE C,770000
+ JRST EGL2C
+ ERRTTY [ASCIZ /LOSS AT EGL2C/]
+
+EGL2B: ADD B,[NPCS-1,,WKING-PIECE-1] ;DOUBLE CHECK
+ JRST EGL3
+
+EGL2A: PUSH T,B
+ ADDI B,WKING-PIECE-1
+ PUSH T,A
+ PUSHJ T,LMKING
+ POP T,A
+ POP T,B
+ PUSHJ T,KSQMK
+ MOVEI Q,EGL1B
+ JRST EGL3
+
+EGLST: 0 ;LAST LINK ON SET OF LGL MOVES
+EGKTBL: WKING-PIECE
+ BKING-PIECE
+ WKING-PIECE
+
+ZZZ=400000
+IRPS A,,K N B R 2N BN 2B 2NB 2BN RN RB 2R R2N RNB R2B Q QN QB
+PD!A==ZZZ
+ZZZ=ZZZ_-1
+TERMIN
+
+WPLAN: 0 ;EG PLAN FOR WHITE
+ 0 ;FOR BLACK
+
+EGINT: SKIPE J,WPLAN(I)
+ JRST EGINT5
+
+ MOVEI T1,-1
+ MOVEI T2,-1
+
+IRPS T1,,T1 T2,SIDE,,0 1
+ SKIPE WQNC+SIDE
+ TRZA T1,-1-PDQ-PDQN-PDQB ;IF HAVE Q, NOT ANY OF THESE
+ TRZ T1,PDQ+PDQN+PDQB ;IF DONT HAVE Q, NOT THESE
+ SKIPE J,WRKC+SIDE
+ TRZA T1,-1-PDR-PDRN-PDRB-PD2R-PDR2N-PDRNB-PDR2B
+ TRZ T1,PDR+PDRN+PDRB+PD2R+PDR2N+PDRNB+PDR2B ;HAVE 0 RK
+ CAILE J,1
+ TRZA T1,-1-PD2R ;HAVE 2 R
+ TRZ T1,PD2R ;DONT HAVE 2 R
+ SKIPE J,WBSC+SIDE
+ TRZA T1,-1-PDB-PDBN-PD2B-PD2NB-PD2BN-PDRB-PDRNB-PD2B-PDQB
+ TRZ T1,PDB+PDBN+PD2B+PD2NB+PD2BN+PDRB+PDRNB+PDR2B+PDQB
+ CAILE J,1
+ TRZA T1,-1-PD2B-PD2BN-PDR2B ;HAVE 2 B
+ TRZ T1,PD2B+PD2BN+PDR2B ;DONT HAVE 2 B
+ SKIPE J,WKNC+SIDE
+ TRZA T1,-1-PDN-PD2N-PDBN-PD2NB-PD2BN-PDRN-PDR2N-PDRNB-PDQN
+ TRZ T1,PDN+PD2N+PDBN+PD2NB+PD2BN+PDRN+PDR2N+PDRNB+PDQN
+ CAILE J,1
+ TRZA T1,-1-PD2N-PD2NB-PDR2N ;HAVE 2 N
+ TRZ T1,PD2N+PD2NB+PDR2N ;DONT HAVE 2 N
+ JUMPE T1,POPJ1
+TERMIN
+ HRL T1,T2
+ SKIPN I
+ MOVSS T1
+ MOVE T2,EGDTBP ;W,,B
+EGINT1: CAME T1,EGDTB(T2)
+ AOJA T2,EGINT2
+ LDB J,[WPWNN,,EGDTB+1(T2)] ;PCS V PCS MATCH
+ TRZN J,20
+ JRST EGINT3 ;NO COND FOR W P
+ XCT EGNTT(I)
+ AOJA T2,EGINT2 ;NOT RIGHT # W P
+EGINT3: LDB J,[WPRLOP,,EGDTB+1(T2)]
+ LDB S,[WRLNUM,,EGDTB+1(T2)]
+ TRNE S,40
+ ORCMI S,40
+ ADD S,@EGNTT(I)
+ XCT EGTT1(J)
+ AOJA T2,EGINT2 ;REL OP NOT MET
+ LDB J,[BPWNN,,EGDTB+1(T2)]
+ TRZN J,20
+ JRST EGINT4 ;NO COND ON B P
+ XCT EGNTT+1(I)
+ AOJA T2,EGINT2
+EGINT4: MOVE J,EGDTB+2(T2) ;FOUND RELAVENT DISP
+EGINT5: MOVEM J,EGPC
+ MOVE T,[-LLMGPL,,LMGPDL-1]
+ PUSHJ T,EGLGL ;GENERATE SET OF LGL MOVES
+ CLEARM EGWK ;SET UP PC VARS
+ MOVE A,[EGWK,,EGWK+1]
+ BLT A,EGWK+NPC-1
+ MOVE B,[-NPCS,,1]
+ MOVSI C,EGPCT_14
+EGPCB1: MOVE A,EGPCSP(I)
+EGPCB4: BLT A,EGPCPE-1
+EGPCB2: SKIPN A,PIECEL(B)
+ JRST EGPCB3
+ LDB T1,[PTID,,PIECE(B)]
+ HLLM C,@EGPCPP(T1)
+ HRRM B,@EGPCPP(T1)
+ AOS EGPCPP(T1)
+EGPCB3: AOBJN B,EGPCB2
+ HRLI B,-NPCS
+ MOVE A,EGPCSP+1(I)
+ TRNN B,40
+ JRST EGPCB4
+ PUSHJ P,EGBEG ;RET VAL IN R, REL IN Q
+ POPJ P, ;PRINC VAR IN CVPR HASH ADR OF PRINC VAR IN T2
+ JRST POPJ1
+
+EGINT2: AOS T2
+ AOBJN T2,EGINT1
+ JRST POPJ1
+
+;EGDSP
+;WD1 LH "WHITE" PCS RH "BLACK" PCS (WHITE = SIDE TO MOVE)
+;WD2
+WPRLOP==420200 ;RELATION OP
+ ;0 IGNORE
+ ;1=> THAT OR BETTER FOR BLACK <
+ ;2 => WHITE EXACTLY N "AHEAD" =
+ ;3=> THAT OR BETTER FOR WHITE >
+WPWNN==300500 ;4.2 IF 1 COMPARE W PAWNS TO 4.1-3.7
+BPWNN==220500 ;2.5 IF ONE COMP B PAWNS TO 2.4-2.1
+WRLNUM==140600 ;6 BIT 2'S COMP RELATIONAL #
+
+EGNTT: CAME J,WPNC
+ CAME J,BPNC
+ CAME J,WPNC
+
+EGTT1: SKIPA
+ CAMLE S,@EGNTT+1(I)
+ CAME S,@EGNTT+1(I)
+ CAMGE S,@EGNTT+1(I)
+
+;WD3 DISPATCH PC (BYTE PNTR)
+
+EGPCPP: BLOCK 6 ;POINTER TO VARS FOR P,N,B,R,Q,K
+EGPCPE:
+EGWPCP: 8+EGWK
+ 6+EGWK
+ 4+EGWK
+ 2+EGWK
+ 1+EGWK
+ 0+EGWK
+
+EGBPCP: 8+EGBK
+ 6+EGBK
+ 4+EGBK
+ 2+EGBK
+ 1+EGBK
+ 0+EGBK
+
+EGPCSP: EGWPCP,,EGPCPP
+ EGBPCP,,EGPCPP
+ EGWPCP,,EGPCPP
+
+;;CHIO
+
+SQOUT: PUSH P,A ;SQUARE IN A
+ ANDI A,177
+ LDB T1,[BFILE,,BPREL(A)]
+ SKIPN ALGSW
+ JRST SQOUT1
+ LDB A,[BFILE,,BPREL(A)]
+ MOVE A,REVERS(A)
+ ADDI A,"A-1
+ PUSHJ P,(B)
+ MOVE A,(P)
+ ANDI A,177
+ LDB A,[BRANK,,BPREL(A)]
+ ADDI A,"0
+ PUSHJ P,(B)
+ SKIPL ALGSW
+ JRST SQOUT2
+ PUSHJ P,DSPACE
+ MOVE A,(P)
+ ANDI A,177
+SQOUT1: SOUT TXFILE(T1)
+ CAIE T1,4
+ CAIN T1,5
+ AOS SPNDD ;TWO LETTER SQUARE
+ LDB A,[BRANK,,BPREL(A)]
+ JUMPE I,.+3
+ MOVNS A
+ ADDI A,9
+ ADDI A,"0
+ PUSHJ P,(B)
+SQOUT2: LDB A,[170300,,(P)]
+ TRNE A,7
+ SOUT PROTXT-4(A)
+ POP P,A
+ POPJ P,
+
+PCOUTZ: PUSH P,PGMCNT
+ SKIPGE PGMCNT
+ CLEARM PGMCNT ;PRINT PROMOTED PAWN AS "P"
+ PUSHJ P,PCOUTP
+ POP P,PGMCNT
+ POPJ P,
+
+PCOUT: SETOM PGMCNT
+PCOUTP: JUMPE A,PCOUT6
+ CAIN A,77
+ JRST PCOUT7
+ PUSH P,C ;PIECE IN A
+ PUSH P,D
+ LDB C,[PTID,,PIECE(A)]
+ MOVE C,TXTB1(C)
+ SKIPL PGMCNT
+ JRST PCOUT2
+ MOVEM C,PCTXT
+PCOUT4: SOUT PCTXT
+ POP P,D
+ POP P,C
+ POPJ P,
+
+IFN DSPLY,[
+DU: MOVEM 17,DUACS+17
+ MOVEI 17,DUACS
+ BLT 17,DUACS+16
+ MOVE 17,DUACS+17
+ PUSHJ P,DISUP
+ MOVSI 17,DUACS
+ BLT 17,17
+ POPJ P,
+
+DUACS: BLOCK 20
+]
+
+PCOUT2: SKIPG D,PLPWN(A)
+ JRST PCOUT5 ;NOT PROMOTED P
+ CAML D,PGMCNT
+ MOVSI C,(ASCIZ /P/)
+PCOUT5: MOVEM C,PCTXT
+ JRST PCOUT4
+
+PCOUT6: SOUT [ASCIZ /NIL/]
+ POPJ P,
+
+PCOUT7: SOUT [ASCIZ /G/]
+ POPJ P,
+
+PCTXT: 0
+
+TXFILE: ASCIZ /0/
+ ASCIZ /KR/
+ ASCIZ /KN/
+ ASCIZ /KB/
+ ASCIZ /K/
+ ASCIZ /Q/
+ ASCIZ /QB/
+ ASCIZ /QN/
+ ASCIZ /QR/
+ ASCIZ /9/
+
+
+DPTS: MOVEI T1,40-"0
+ HRLM T1,(P)
+ PUSH P,[OCTP2]
+DPT: SETOM DPTNC
+ MOVE T1,A
+ JUMPGE T1,DPT2
+ MOVEI A,"-
+ AOS DPTNC
+ PUSHJ P,(B)
+ MOVNS T1
+DPT2: IDIVI T1,10.
+ HRLM T2,(P)
+ SKIPE T1
+ PUSHJ P,DPT2
+OCTP2: HLRE A,(P)
+ ADDI A,"0
+ AOS DPTNC
+ JRST (B)
+
+DPTNC: 0
+
+OCTPNT: MOVE T1,A
+OCTP1: LSHC T1,-35.
+ LSH T2,-1
+ DIVI T1,10
+ HRLM T2,(P)
+ SKIPE T1
+ PUSHJ P,OCTP1
+ JRST OCTP2
+
+DCRR: MOVEI A,15
+ PUSHJ P,(B)
+ MOVEI A,12
+ JRST (B)
+
+
+FPFP: MOVE S,A
+ CLEARB T1,T2
+ JUMPG S,FPFP1
+ JUMPE S,FPFP3
+ MOVNS S
+ MOVEI A,"-
+ PUSHJ P,(B)
+FPFP1: CAMGE S,FPFT01
+ JRST FPFP4
+ CAML S,FPFT8
+ AOJA T1,FPFP4
+
+FPFP3: MULI S,400
+ ASHC T1,-243(S)
+ MOVE S,T1
+ CLEARM FPFPTEM
+ PUSHJ P,FPFP7
+ MOVEI A,".
+ PUSHJ P,(B)
+ MOVNI C,10
+ ADD C,FPFPTEM
+ MOVE T1,T2
+
+FPFP3A: MOVE S,T1
+ MULI S,12
+ MOVE A,S
+ PUSHJ P,FPFP7B
+ SKIPE T1
+ AOJL C,FPFP3A
+ POPJ P,
+
+FPFP4: MOVNI T2,6
+ MOVEI T,0
+FPFP4A: ADDI T,1(T)
+ XCT FPFCP(T1)
+ TRZA T,1
+ FMPR S,@FPFCP+1(T1)
+FPFP4B: AOJN T2,FPFP4A
+ PUSH P,T
+ MOVNI T1,-2(T1)
+ DPB T1,[10200,,FPFP4C]
+ PUSHJ P,FPFP3
+ MOVEI A,105
+ PUSHJ P,(B)
+FPFP4C: MOVEI A,"+
+ PUSHJ P,(B)
+ POP P,S
+FPFP7: JUMPE S,FPFP71
+ IDIVI S,12
+ AOS FPFPTEM
+FPFP7A: HRLM T1,(P)
+ JUMPE S,FPFP71
+ PUSHJ P,FPFP7
+
+
+FPFP71: HLRE A,(P)
+FPFP7B: ADDI A,60
+ JRST (B)
+ 1.0^32.
+ 1.0^16.
+FPFT8: 1.0^8
+ 1.0^4
+ 1.0^2
+ 1.0^1
+FPFT: 1.0^0
+ 1.0^-32.
+ 1.0^-16.
+ 1.0^-8
+ 1.0^-4
+ 1.0^-2
+FPFT01: 1.0^-1
+FPFT0:
+FPFCP: CAMLE S,FPFT0(T2)
+ CAMGE S,FPFT(T2)
+ T2,,FPFT0
+
+FPFPTEM: 0
+
+;;MISC3
+
+SORT: MOVEI C,10000 ;A POINTER AT FIRST ENTRY TO BE SORTED
+SORT1: HRLM B,(P) ;B " LAST +1
+ CAIL A,-2(B) ;ONE OR ZERO FROBS
+ JRST SORT7
+ PUSH P,A
+SORT3: TDNE C,1(A)
+ JRST SORT4
+ SUBI B,2
+ TDNN C,1(B)
+ JRST SORT2
+ MOVE D,(A)
+ EXCH D,(B)
+ MOVEM D,(A)
+ MOVE D,1(A)
+ EXCH D,1(B)
+ MOVEM D,1(A)
+SORT4: ADDI A,2
+SORT2: CAME A,B
+ JRST SORT3
+ ROT C,-1
+ POP P,A
+ JUMPL C,SORT6
+ PUSHJ P,SORT1
+ HLRZ B,(P)
+ PUSHJ P,SORT1
+SORT6: ROT C,1
+SORT7: HLRZ A,(P)
+ POPJ P,
+
+4SORT: MOVEI C,10000 ;A POINTER AT FIRST ENTRY TO BE 4SORTED
+ SETOM SRTI ;INDICATE RUN
+4SORT1: HRLM B,(P) ;B " LAST +1
+ CAIL A,-NWDPM(B) ;ONE OR ZERO FROBS
+ JRST 4SORT7
+ PUSH P,A
+4SORT3: TDNE C,1(A)
+ JRST 4SORT4
+ SUBI B,NWDPM
+ TDNN C,1(B)
+ JRST 4SORT2
+4SRT5B: REPEAT NWDPM,[
+ MOVE D,.RPCNT(A)
+ EXCH D,.RPCNT(B)
+ MOVEM D,.RPCNT(A)
+]
+4SORT4: ADDI A,NWDPM
+4SORT2: CAME A,B
+ JRST 4SORT3
+ ROT C,-1
+ POP P,A
+ JUMPL C,4SORT6
+ PUSHJ P,4SORT1
+ HLRZ B,(P)
+ PUSHJ P,4SORT1
+4SORT6: ROT C,1
+ CAIN C,10000
+ MOVSI C,1
+4SORT7: HLRZ A,(P)
+ POPJ P,
+
+
+CONSTANTS
+ BLOCK 10 ;???
+IFN DEC,[
+ 0 ;SO -1 POINTS TO A 0
+HSTB: BLOCK HTNE
+HSTBV: BLOCK HTNE
+HSTBL: BLOCK HTNE
+HSTBVV: BLOCK HTNE
+]
+IFN BOOK,[
+BKSMT: BLOCK BMXS+1
+BKSMTV: BLOCK BMXS+1
+BBK: BLOCK BKSS/6+1
+
+]
+ICSTO: MOVEI B,TYO ;CHECK BOARD
+ MOVSI T,-BD2
+ICBCH1: HRRZ T1,T
+ IDIVI T1,BW
+ CAIL T1,2
+ CAILE T1,11
+ JRST ICBCH2
+ CAIL T2,1
+ CAILE T2,8
+ JRST ICBCH2
+ SKIPGE T1,BOARD(T)
+ JRST ICBCHE
+ JUMPE T1,ICBCH3
+ MOVE T2,(T1)
+ MOVE C,PIECEL-PIECE(T1)
+ CAIE C,(T)
+ JRST ICBCHE
+ICBCH3: AOBJN T,ICBCH1
+ MOVE T,[-NPC,,1]
+ICPLC1: SKIPN T1,PIECEL(T)
+ JRST ICPLC2
+ MOVE T2,BOARD(T1)
+ CAIE T2,PIECE(T)
+ JRST ICPLE
+ICPLC2: AOBJN T,ICPLC1
+ MOVE T,[-LICCBF,,ICCBF-1] ;STORE CAT DATA
+ MOVSI B,-LICCST
+ICSTO1: SKIPL T1,ICCST(B)
+ JRST ICSTO2 ;STORE PIECE SIZE ARRAY OR FILE ARRAY
+ MOVEI T2,8
+ICSTO3: HRLI T1,-8
+ PUSH T,2*BW+1(T1)
+ AOBJN T1,.-1
+ ADDI T1,2
+ SOJG T2,ICSTO3
+ICSTO4: AOBJN B,ICSTO1
+ MOVE T,[-LICPINB,,ICPINB-1] ;STORE PINT
+ MOVSI B,-NPC
+ICPINS: SKIPE T1,PINT+1(B)
+ JRST ICPIN1
+ICPIN2: AOBJN B,ICPINS
+ PUSH T,[0]
+ POPJ P,
+
+ICSTO2: TLNE T1,40000
+ JRST ICSTO6 ;WORD
+ TLNE T1,200000
+ JRST ICSTO5 ;FILE
+ HRLI T1,-NPC
+ PUSH T,1(T1)
+ AOBJN T1,.-1
+ JRST ICSTO4
+
+ICSTO5: HRLI T1,-8
+ PUSH T,1(T1)
+ AOBJN T1,.-1
+ JRST ICSTO4
+
+ICSTO6: PUSH T,(T1)
+ JRST ICSTO4
+
+ICBCH2: MOVE T1,BOARD(T)
+ AOJE T1,ICBCH3
+ICBCHE: MOVE T1,BOARD(T)
+ ISOUT [.ASCII ?BOARD CLOBBERED *H!T = *O!T1
+?]
+ SETOM ICERRF
+ JRST ICBCH3
+
+ICPLE: ISOUT [.ASCII ?PIECEL CLOBBERED *H!T = *O!T1
+?]
+ SETOM ICERRF
+ JRST ICPLC2
+
+ICCMPT: MOVEI B,TYO ;DEVICE IN B RECS OUTPUT
+ICCMP: MOVEI T,ICCBF
+ MOVSI C,-LICCST
+ICCM1: SKIPL T1,ICCST(C)
+ JRST ICCM2
+ HRLI T1,A ;T1 NOW ARRAY (A)
+ MOVEI A,2*BW+1
+ MOVEI T2,8
+ICCM3: HRLI A,-8
+ICCM4: MOVE D,@T1
+ MOVE Q,(T)
+ CAME D,Q
+ PUSHJ P,ICCER
+ AOS T
+ AOBJN A,ICCM4
+ ADDI A,2
+ SOJG T2,ICCM3
+ICCM5: AOBJN C,ICCM1
+ MOVEI T1,ICPINB
+ICMP1B: MOVEI T2,400000 ;CLEAR CHECK BITS
+ ANDCAB T2,(T1)
+ JUMPE T2,ICMP1A
+ AOJA T1,ICMP1B
+
+ICMP1A: MOVE T1,[-NPC,,1] ;CHECK PINT
+ MOVEI T2,ICPINB
+ICMP1: MOVEM T2,ICMPT1
+ SKIPN Q,(T2)
+ JRST ICMP2 ;THATS ALL PINS STORED
+ICMP4: SKIPE D,PINT(T1)
+ JRST ICMP3
+ CAIN Q,(T1)
+ JRST ICMPP1 ;ERROR
+ AOBJN T1,ICMP4
+ PTTY [ASCII /PIN CHKR ERROR!/]
+
+
+ICMP3: CAIE Q,(T1)
+ JRST ICMPP1 ;ERROR
+ICMP6: MOVE J,1(D)
+ICMP5: MOVE R,1(T2)
+ TLNN R,-1
+ JRST ICMPP2 ;ERROR
+ CAME J,R
+ AOJA T2,ICMP5
+ MOVEI R,400000
+ IORM R,1(T2)
+ MOVE T2,ICMPT1
+ HRRZ D,(D)
+ JUMPN D,ICMP6
+ICMP5A: MOVE R,1(T2)
+ TLNN R,-1
+ JRST ICMP2B ;OK
+ TRNE R,400000
+ AOJA T2,ICMP5A
+ICMPP2: PUSHJ P,ICTPD ;ERROR TYPE INFO ABT PICE IN T1 STORAGE PNTED TO BY ICMPT1
+ PUSHJ P,ICTSD
+ICMP2B: AOS T2,ICMPT1
+ICMP2A: MOVE A,(T2)
+ TLNE A,-1
+ AOJA T2,ICMP2A
+ICMPE1: AOBJN T1,ICMP1
+ SKIPN (T2)
+ JRST ICMPX
+ MOVEM T2,ICMPT1
+ PUSHJ P,ICTSD
+ JRST ICMP2B
+
+ICMP2: SKIPE PINT(T1)
+ JRST ICMPE
+ AOBJN T1,ICMP2
+ICMPX: POPJ P,
+
+ICMPT1: 0 ;PNTR TO STORED DATA
+
+
+ICMPP1: ISOUT [.ASCII /ARY NIL/]
+ PUSHJ P,ICTSD
+ SUB T1,[1,,1]
+ JRST ICMP2B
+
+ICMPE: ISOUT [.ASCII /STORED NIL/]
+ PUSHJ P,ICTPD
+ JRST ICMPE1
+
+ICPIN1: MOVEI T2,1(B) ;STORE PIECE
+ PUSH T,T2 ;BUT PIN ENTRY INTO WD1
+ICPIN3: PUSH T,1(T1)
+ HRRZ T1,(T1)
+ JUMPN T1,ICPIN3
+ JRST ICPIN2
+
+ICCM2: TLNE T1,40000
+ JRST ICCM8 ;WD
+ TLNE T1,200000
+ JRST ICCM7 ;FILE ORIENTED
+ MOVE A,[-NPC,,1]
+ICCM6: AOS T1
+ SKIPN PIECEL(A)
+ JRST ICCM6A
+ TLNE T1,100000
+ JRST ICCM6B
+ SKIPL LMGT(A)
+ JRST ICCM6A
+ICCM6B: MOVE D,(T1)
+ MOVE Q,(T)
+ CAME D,Q
+ PUSHJ P,ICCER
+ICCM6A: AOS T
+ AOBJN A,ICCM6
+ JRST ICCM5
+
+ICCM8: MOVE D,(T1)
+ MOVE Q,(T)
+ CAME D,Q
+ PUSHJ P,ICCER
+ AOJA T,ICCM5
+
+ICCM7: MOVE A,[-8,,1]
+ICCM7A: AOS T1
+ MOVE D,(T1)
+ MOVE Q,(T)
+ CAME D,Q
+ PUSHJ P,ICCER
+ AOS T
+ AOBJN A,ICCM7A
+ JRST ICCM5
+
+ICCER: SETOM ICERRF
+ XCT ICEDT(C)
+ POPJ P,
+
+
+ICERRF: 0 ;-1 IF ERROR DETECTED
+
+
+ICCST: SETZ WA ;PNTRS TO ARRAYS STORED/CHECKED 4.9 BOARD SIZE
+ SETZ BA ;4.8 NOT PIECE 4.7 1 ALL PCS 0 PAWNS ONLY 4.6 SINGLE WD
+ SETZ BDA1
+ SETZ BDA2
+ SETZ BDA3
+ SETZ BDBLK
+ SETZ ONEB1
+ SETZ ONEB2
+ SETZ WAV
+ SETZ BAV
+ SETZ WPAS
+ SETZ BPAS
+ SETZ WPCOR
+ SETZ BPCOR
+ SETZ NWK
+ SETZ NBK
+ SETZ CNTRL
+ PPASED
+ PPTP
+ 100000,,PDV
+ 200000,,WPNFLS
+ 200000,,BPNFLS
+ 200000,,WNPNFL
+ 200000,,BNPNFL
+ 200000,,WPPRK
+ 200000,,BPPRK
+ 200000,,WAAPP
+ 200000,,BAAPP
+ 200000,,WNPRK
+ 200000,,BNPRK
+ 40000,,NWPPP
+ 40000,,NBPPP
+ 40000,,HSKEY
+LICCST==.-ICCST
+NPCAR==4 ;NUMBER PIECE SIZE
+NBDAR==17. ;NUMBER BOARD SIZE
+NFLAR==10. ;NUMBER FILE ORIENTED
+NWDAR==3 ;NUMBER SINGLE WORDS
+
+
+ICEDT: ISOUT [.ASCII ?WA DFRS *S!A (#=*H!A) CPY *O!Q ARY *O!D?]
+ ISOUT [.ASCII ?BA DFRS *S!A (#=*H!A) CPY *O!Q ARY *O!D?]
+ JRST CBDA1D
+ JRST CBDA2D
+ JRST CBDA3D
+ JRST CBDBKD
+ JRST CONB1D
+ JRST CONB2D
+ ISOUT [.ASCII ?WAV DFRS *S!A (=*H!A) CPY *O!Q ARY *O!D?]
+ ISOUT [.ASCII ?BAV DFRS *S!A (=*H!A) CPY *O!Q ARY *O!D?]
+ ISOUT [.ASCII ?WPAS DFRS *S!A (=*H!A) CPY *O!Q ARY *O!D?]
+ ISOUT [.ASCII ?BPAS DFRS *S!A (=*H!A) CPY *O!Q ARY *O!D?]
+ ISOUT [.ASCII ?WPCOR DFRS *S!A (=*H!A) CPY *O!Q ARY *O!D?]
+ ISOUT [.ASCII ?BPCOR DFRS *S!A (=*H!A) CPY *O!Q ARY *O!D?]
+ ISOUT [.ASCII ?NWK DFRS *S!A (=*H!A) CPY *O!Q ARY *O!D?]
+ ISOUT [.ASCII ?NBK DFRS *S!A (=*H!A) CPY *O!Q ARY *O!D?]
+ ISOUT [.ASCII ?CNTRL DFRS *S!A (#=*H!A CPY *O!Q, ARY *O!D?]
+ ISOUT [.ASCII ?PPASED DFRS *P!A (#=*H!A) CPY *O!Q, ARY *O!D?]
+ ISOUT [.ASCII ?PPTP DFRS *P!A (#=*H!A) CPY *O!Q ARY *O!D?]
+ ISOUT [.ASCII ?PDV DFRS *P!A (=*H!A) CPY *O!Q ARY *O!D?]
+ ISOUT [.ASCII ?WPNFLS DFRS *F!A ARY *O!D, CPY *O!Q?]
+ ISOUT [.ASCII ?BPNFLS DFRS *F!A ARY *O!D, CPY *O!Q?]
+ ISOUT [.ASCII ?WNPNFL DFRS *F!A ARY *O!D, CPY *O!Q?]
+ ISOUT [.ASCII ?BNPNFL DFRS *F!A ARY *O!D, CPY *O!Q?]
+ ISOUT [.ASCII ?WPPRK DFRS *F!A ARY *O!D CPY *O!Q?]
+ ISOUT [.ASCII ?BPPRK DFRS *F!A ARY *O!D CPY *O!Q?]
+ ISOUT [.ASCII ?WAAPP DFRS *F!A ARY *O!D CPY *O!Q?]
+ ISOUT [.ASCII ?BAAPP DFRS *F!A ARY *O!D CPY *O!Q?]
+ ISOUT [.ASCII ?WNPRK DFRS *F!A ARY *O!D CPY *O!Q?]
+ ISOUT [.ASCII ?BNPRK DFRS *F!A ARY *O!D CPY *O!Q?]
+ ISOUT [.ASCII ?NWPPP DFRS ARY *O!D CPY *O!Q?]
+ ISOUT [.ASCII ?NBPPP DFRS ARY *O!D CPY *O!Q?]
+ ISOUT [.ASCII ?HSKEY DFRS ARY *O!D CPY *O!Q?]
+
+
+ICCBF: BLOCK NPCAR*NPC+NBDAR*64.+NFLAR*8+NWDAR
+LICCBF==.-ICCBF+1
+LICPINB==40.
+ICPINB: BLOCK LICPINB
+
+ICPINP: LDB T,[PINATP,,D] ;PRINT PIN IN D
+ LDB TT,[PINOPS,,D]
+ LDB S,[PINBS,,D]
+ LDB I,[PINDIR,,D]
+ ISOUT [.ASCII ?*P!T (#=*O!T) PINNING *S!TT TO *S!S IN *D!I DIR?]
+ICPINX: SETOM ICERRF
+ POPJ P,
+
+ICTPD: ISOUT [.ASCII ?PINT *P!T1, (#=*H!T1)?]
+ MOVE J,PINT(T1)
+ICTPD1: MOVE D,1(J)
+ PUSHJ P,ICPINP
+ SKIPE J,(J)
+ JRST ICTPD1
+ JRST ICPINX
+
+
+ICTSD: MOVE J,ICMPT1
+ MOVE D,(J)
+ ISOUT [.ASCII ?STORED *P!D, (#=*O!D)?]
+ICTSP1: MOVE D,1(J)
+ TLNN D,-1
+ POPJ P,
+ PUSHJ P,ICPINP
+ AOJA J,ICTSP1
+
+
+CONB1D: TDZA R,R
+CONB2D: MOVEI R,4
+ HRLI R,-4
+ MOVE TT,[441100,,D]
+ MOVE S,[441100,,Q]
+COND1: ILDB ZR,TT
+ ILDB I,S
+ CAME I,ZR
+ ISOUT [.ASCII ?CPY SAYS *S!I ARY *S!ZR ONEB AT *S!A (=*H!A) IN *D!R?]
+ AOBJN R,COND1
+ POPJ P,
+
+
+CBDA1D: TDZA R,R
+CBDA2D: MOVEI R,6
+CBDAD: HRLI R,-6
+ MOVE TT,[440600,,D]
+ MOVE S,[440600,,Q]
+CBDAD1: ILDB ZR,TT
+ ILDB I,S
+ CAME I,ZR
+ ISOUT [.ASCII ?CPY SAYS *P!I ARY SAYS *P!ZR ATTACKING *S!A (=*H!A) FROM *D!R?]
+ AOBJN R,CBDAD1
+ POPJ P,
+
+CBDA3D: MOVEI R,12.
+ JRST CBDAD
+
+CBDBKD: MOVSI R,-8
+ MOVE TT,[440400,,D]
+ MOVE ZR,[440400,,Q]
+CBDB1: ILDB S,TT
+ ILDB I,ZR
+ MOVE S,BDAST(S)
+ MOVE I,BDAST(I)
+ CAME I,S
+ ISOUT [.ASCII ?CPY SAYS *P!I ARY *P!S BLOCKED AT *S!A (=*H!A) FROM *D!R?]
+ AOBJN R,CBDB1
+ POPJ P,
+
+
+
+;FLOATING POINT SINGLE PRECISION LOGARITHM FUNCTION
+;LOG(ABSF(X)) IS CALCULATED BY THE SUBROUTINE, AND AN
+;ARGUMENT OF ZERO IS RETURNED AS MINUS INFINITY. THE ALGORITHM IS
+
+;LOGE(X) = (I + LOG2(F))*LOGE(2)
+;WHERE X = (F/2)*2^(I+1), AND LOG2(F) IS GIVEN BY
+;LOG2(F) = C1*Z + C3*Z^3 + C5*Z^5 - 1/2
+;AND Z = (F-SQRT(2))/(F+SQRT(2))
+
+
+ALOG: ;ENTRY TO LOGARITHM ROUTINE
+ JUMPLE T1, ZERANS ;CHECK FOR ZERO ARGUMENT
+ CAIN T1,1 ;CHECK FOR 1.0 ARGUMENT
+ JRST ZERANS ;IT IS 1.0 RETURN ZERO ANS.
+ FLOAT T1
+ ASHC T1, -33 ;SEPARATE FRACTION FROM EXPONENT
+ ADDI T1, 211000 ;FLOAT THE EXPONENT AND MULT. BY 2
+ MOVSM T1, LS ;NUMBER NOW IN CORRECT FL. FORMAT
+ MOVSI T1, 567377 ;SET UP -401.0 IN T1
+ FADM T1, LS ;SUBTRACT 401 FROM EXP.*2
+ ASH T2, -10 ;SHIFT FRACTION FOR FLOATING
+ TLC T2, 200000 ;FLOAT THE FRACTION PART
+ FAD T2, L1 ;T2 = T2-SQRT(2.0)/2.0
+ MOVE T1, T2 ;PUT RESULTS IN T1
+ FAD T1, L2 ;T1 = T1+SQRT(2.0)
+ FDV T2, T1 ;T2 = T2/T1
+ MOVEM T2, LZ ;STORE NEW VARIABLE IN LZ
+ FMP T2, T2 ;CALCULATE Z^2
+ MOVE T1, L3 ;PICK UP FIRST CONSTANT
+ FMP T1, T2 ;MULTIPLY BY Z^2
+ FAD T1, L4 ;ADD IN NEXT CONSTANT
+ FMP T1, T2 ;MULTIPLY BY Z^2
+ FAD T1, L5 ;ADD IN NEXT CONSTANT
+ FMP T1, LZ ;MULTIPLY BY Z
+ FAD T1, LS ;ADD IN EXPONENT TO FORM LOG2(X)
+ FMP T1, L7 ;MULTIPLY TO FORM LOGE(X)
+ FMPR T1,@(P)
+ FIX T1 ;RETURN ANS IN T2
+ JRST POPJ1
+
+ZERANS: MOVEI T2, 0 ;MAKE ANS ZERO
+ JRST POPJ1
+
+;CONSTANTS
+
+L1: 577225754146 ;-0.707106781187
+L2: 201552023632 ;1.414213562374
+L3: 200462532521 ;0.5989786496
+L4: 200754213604 ;0.9614706323
+L5: 202561251002 ;2.8853912903
+L7: 200542710300 ;0.69314718056
+
+LS: 0
+LZ: 0
+LB: 0
+
+
+BDINI: SETZM PLYN ;INITIALIZE BOARD, PIECEL, PCBAL, PLYN, GAMP, AND ALL CAT ARRAYS
+ MOVEI A,GAME-1
+ MOVEM A,GAMP
+ MOVEI A,TPCS
+ MOVEM A,PCBAL
+ MOVEM A,PCBAL+1
+ MOVEI A,TPNS
+ MOVEM A,PNBAL
+ MOVEM A,PNBAL+1
+ MOVEI A,7
+ MOVEM A,WPCCNT
+ MOVEM A,BPCCNT
+ SETZM NMOVES+1
+ MOVE A,[NMOVES+1,,NMOVES+1+1]
+ BLT A,NMOVES+NPC-1+1
+ MOVE A,[OPIECE+NPC,,OPIECE]
+ BLT A,OPIECE+NPC-1
+ MOVSI C,-8
+ MOVEI B,OPIECE
+ MOVEM B,BOARD+3*BW+1(C)
+ AOS B
+ AOBJN C,.-2
+ MOVSI C,-8
+ MOVEM B,BOARD+2*BW+1(C)
+ AOS B
+ AOBJN C,.-2
+ MOVSI C,-8
+ MOVEM B,BOARD+8*BW+1(C)
+ AOS B
+ AOBJN C,.-2
+ MOVSI C,-8
+ MOVEM B,BOARD+9*BW+1(C)
+ AOS B
+ AOBJN C,.-2
+ MOVSI T1,-4
+BDINI1: MOVSI C,-8
+ SETZM BOARD+4*BW+1(T1)
+ AOS T1
+ AOBJN C,.-2
+ AOS T1
+ AOBJN T1,BDINI1
+ SETZM PIECEL+1
+ MOVE A,[PIECEL+1,,PIECEL+1+1]
+ BLT A,PIECEL+NPC-1+1
+ MOVSI T1,-BD2
+BDIN3: SKIPG B,BOARD(T1)
+ JRST BDIN2
+ HRRZM T1,PIECEL-PIECE(B)
+ LDB T2,[BFILE,,BPREL(T1)]
+ MOVEM T2,PFILE-PIECE(B)
+ LDB T2,[BRANK,,BPREL(T1)]
+ MOVEM T2,PRANK-PIECE(B)
+ SKIPGE (B)
+ MOVE T2,REVERS(T2)
+ MOVEM T2,RPRANK-PIECE(B)
+BDIN2: AOBJN T1,BDIN3
+ PUSHJ P,ATEV ;SET UP WAV BAV
+ MOVEI A,8
+ MOVEM A,WPNC
+ MOVEM A,BPNC
+ MOVEI A,1
+ IRP X,,[WQNC,BQNC,WLBC,WDBC,BLBC,BDBC,NWKG,NBKG]
+ MOVEM A,X
+ TERMIN
+ MOVEI A,2
+ IRP X,,[WRKC,BRKC,WBSC,BBSC,WKNC,BKNC]
+ MOVEM A,X
+ TERMIN
+ JRST .CAT1
+
+BDOUT: MOVEI S,"- ;OUTPUT BOARD
+ CLEARB T1,T2
+BDOUT4: HRLI T2,-8
+BDOUT3: SKIPE C,BOARD+10.*BW-2(T1)
+ JRST BDOUT1
+ MOVEI A,10.*BW-2(T1)
+ CAMN A,GHLOC
+ JRST BDOUT5
+ MOVE A,S
+ PUSHJ P,(B)
+ PUSHJ P,(B)
+BDOUT2: XORI S,"-#"*
+ SKIPGE QTF
+ JRST CRR
+BDOUT6: PUSHJ P,DSPACE
+ SOS T1
+ AOBJN T2,BDOUT3
+ XORI S,"-#"*
+ PUSHJ P,DCRR
+ SUBI T1,2
+ CAIE T2,64.
+ JRST BDOUT4
+ POPJ P,
+
+BDOUT1: LDB D,[PTID,,(C)]
+ SKIPG (C)
+ ADDI D,6
+ SOUT TXTB(D)
+ JRST BDOUT2
+
+BDOUT5: LDB C,[100,,PLYN]
+ SOUT GHTXT(C)
+ JRST BDOUT2
+
+GHTXT: ASCII /BG!/
+ ASCII /WG!/
+
+;;DIS
+IFN DSPLY,[
+IFE TS,[
+
+.ZZ==.
+LOC 40+2*DISCHN
+ BLKO DIS,BLKOP
+ ERRTTY [ASCII /DISPLAY BLKO OVERFLOW!/]
+
+LOC 40+2*FLGCHN
+ JSR .RECYC
+LOC .ZZ
+
+.RECYC: 0
+ CONSO DIS,7400
+ JRST 12,@.RECYC
+ MOVEM A,BLKOP
+ MOVE A,GSW
+ CAIN A,MNLPA
+ JRST .REC2
+ MOVEI A,#
+ XORB A,BLKOPR
+ CAIE A,DISL2-1
+ JRST .REC3
+ EXCH A,BLKOP
+.REC1: CONO DIS,100+FLGCHN*10+DISCHN
+ JRST 12,@.RECYC
+
+.REC2: MOVEI A,DISBUF-1
+.REC3: EXCH A,BLKOP
+ SOSL DTIME
+ JRST .REC1
+ CONO DIS,170
+ JRST 12,@.RECYC
+
+
+BLKOP: DISBUF-1
+BLKOPR: DISBUF-1
+]
+DISBUF: BLOCK DISIZE
+CHSIZ: 40
+CHCNTS: 0
+CHCNT: 0
+DISPNR: 0
+DTIME: 0
+
+DISINS: MOVEI T1,20
+ PUSH P,CHSIZ
+ MOVEM T1,CHSIZ
+ PUSHJ P,DISINI
+ POP P,CHSIZ
+ POPJ P,
+
+DISINI: PUSH P,A
+ PUSH P,B
+IFE TS, CONO DIS,100
+IFN TS, .DSTOP
+ MOVEI A,DISBUF-1
+ MOVEI B,20117
+ IOR B,CHSIZ
+ PUSH A,B
+ PUSH A,[(221700)060000]
+ HRLI A,600
+ MOVEM A,DISPNR
+ LDB B,[(40200)CHSIZ]
+ MOVNS B
+ MOVEI A,174.
+ LSH A,(B)
+ TRZ A,7
+ MOVEM A,CHCNTS
+ MOVNM A,CHCNT
+ MOVEI A,44.
+ MOVEM A,LINES
+ JRST CPBA
+
+;DISFUL: SKIPE DISOVF
+; JRST DISFL2
+; PUSH P,A
+; PUSHJ P,DISCLG
+; PUSHJ P,TYI
+; PUSHJ P,DISINI
+; POP P,A
+;
+;DISFL2: SETOM DISFLF
+; POPJ P,
+;
+
+DISSIX: PUSH P,A
+ JUMPE A,POPAJ
+ IDPB A,DISPNR
+ LSH A,-6
+ JRST DISSIX+1
+
+DISAD:; SKIPE DISFLF
+; POPJ P,
+ SKIPN LINES
+; JRST DISFUL
+ POPJ P,
+ PUSH P,A
+DISAD7: CAIL A,40
+ CAILE A,132
+ JRST DISAD1
+DISAD5: AOSG CHCNT
+DISAD6: IDPB A,DISPNR
+ HRRZ A,DISPNR
+ CAILE A,DISBUF+DISIZE-3
+ CLEARM LINES
+DPOPAJ: POP P,A
+ MOVEM A,DISLCR
+ POPJ P,
+DISAD1: CAIN A,15
+ JRST DISAD2
+ CAIN A,12
+ JRST DISAD3
+ CAIN A,7
+ JRST DISAD8
+ CAIE A,11
+ JRST DISAD4
+ MOVEI A,40
+ PUSHJ P,DSAD5A
+ LDB A,[(300)CHCNT]
+ JUMPN A,.-3
+ JRST DPOPAJ
+DISAD2: MOVE A,CHCNTS
+ MOVNM A,CHCNT
+ MOVEI A,34
+ PUSHJ P,DSAD6A
+ JRST DSD3A
+DISAD4: CAIL A,40
+ CAILE A,140
+ JRST DISBLB
+ MOVS A,BLOBS-133(A)
+DISAD9: HRRI A,36
+ IDPB A,DISPNR
+ MOVSS A
+ IDPB A,DISPNR
+ MOVEI A,35
+ JRST DISAD5
+
+DISAD3: EXCH A,DISLCR
+ CAIE A,15
+ CAMN A,DISLCR
+ JRST DPOPAJ
+DSD3A: SOS LINES
+ MOVEI A,33
+ JRST DISAD6
+
+DISAD8: MOVSI A,63
+ JRST DISAD9
+
+
+BLOBS: 53
+ 52
+ 54
+ 46
+ 51
+ 50
+LINES: 0
+
+
+DSAD5A: PUSH P,A
+ JRST DISAD5
+
+DSAD6A: PUSH P,A
+ JRST DISAD6
+
+DISLCR: 0
+
+DISBLB: PUSH P,A
+ MOVEI A,36
+ IDPB A,DISPNR
+ MOVEI A,50
+ IDPB A,DISPNR
+ MOVEI A,73
+ IDPB A,DISPNR
+ MOVEI A,35
+ IDPB A,DISPNR
+ MOVE A,(P)
+ CAIGE A,100
+ JRST DISBB1
+ MOVEI A,61
+ PUSHJ P,DSAD5A
+
+DISBB1: MOVE A,(P)
+ ANDI A,70
+ JUMPE A,DISBB2
+ LSH A,-3
+ ADDI A,60
+ PUSHJ P,DSAD5A
+
+DISBB2: POP P,A
+ ANDI A,7
+ ADDI A,60
+ PUSHJ P,DSAD5A
+ MOVSI A,77
+ JRST DISAD9
+
+DISCLG: SETZM DTIME
+; SETZM DISFLF
+ PUSH P,A
+ PUSH P,B
+ PUSHJ P,DISFIL
+ MOVEI B,3000
+ IDPB B,A
+ SKIPGE B,FFANCY
+ AOJL B,CPBA
+IFE TS,[ CONO PI,2200+200_<-FLGCHN>+200_<-DISCHN>
+ CONO DIS,100+FLGCHN*10
+ DATAO DIS,[3000]
+]
+IFN TS,[ .DSTART DISLIS
+ SKIPA
+ SETOM HV340
+
+]
+CPBA: POP P,B
+ JRST DPOPAJ
+
+DISFIL: MOVE A,DISPNR
+ MOVEI B,37
+ IDPB B,A
+ TLNE A,550000
+ JRST .-2
+ TLC A,600#2200
+ POPJ P,
+
+;DISOVF: 0
+;DISFLF: 0
+
+
+IFN TS,[
+DISLIS: [-DISIZE,,DISBUF-1],,.+1
+ [-100,,DISL2-1],,0
+]
+
+RADIX 4
+
+FBKNT:
+020200000120202020
+120202020120202020
+132303030130303030
+130303022120202020
+120202020120323030
+130303030130222020
+120202020102303030
+130300220120202002
+130300220120323030
+103033002130033002
+130033002130332003
+133320222122202020
+120200220120203230
+130300330130300220
+102202020120320233
+330320000000000000
+
+FBROOK:
+120202032120200202
+102020202102020202
+130323002102200322
+103032020103200202
+102200322103033003
+120200220103220202
+120032203103303333
+103303030130300320
+120202020103303030
+130300320120202020
+103303030130300303
+120022003120022003
+122030323120233030
+130303030130303022
+120202020320000000
+
+FBQUN:
+122202020120200320
+120322020120202020
+102323030130333030
+132303022120202020
+120202020102303030
+130302220120202002
+130303030102202020
+120023022122200230
+032000000132302330
+133030303132033003
+103033330130330202
+120202002130303002
+102232020102300220
+132023202130030000
+030000000133300320
+123030303103030303
+333000000000000000
+
+
+FBBISH:
+120022320120200220
+103200220103202020
+120200230130303002
+102020222102200202
+132023032102200230
+030000000130300320
+103233030133202020
+120233030130303033
+120202020120203330
+130303003120202020
+133303003120202003
+130303003333303000
+
+FBKING:
+122022320120202003
+120022302120202020
+120023230130303330
+130323030130022020
+120202020120202020
+102303030130303030
+130303032120202020
+120202020120202020
+122303030130303002
+120202020120200230
+130303030130022020
+120202020102303030
+130022020120323030
+133033002102023030
+103200303132030303
+103033030130303030
+102202020120200230
+130303030102202020
+120200230130303030
+122202020320323030
+
+FBPAWN:
+020200000120220320
+120202020120203230
+130303030122202032
+122303002120200230
+130220220120200230
+130303330130022020
+122202032130333022
+322000000000000000
+
+
+FWKNT:
+022222222022020202
+002020000102323303
+133333303123022022
+120202023103333333
+133032020120202020
+120202020120320232
+102023202102320232
+132320233330320000
+
+FWROOK:
+022222000103303320
+120202020120202020
+120202032130320202
+102020202102222220
+102020230130030330
+130300202130300303
+130303002102303003
+103032023123030303
+103030303120202020
+320000000000000000
+
+FWQUN:
+122022320120202320
+120222020120200232
+130303033130303230
+130300202102020222
+130023230102200000
+022000000120022003
+123030303133202002
+123220320120320202
+102220220103000000
+023000000120200330
+133332003303030303
+
+FWBISH:
+120022003120022003
+120202020120202020
+120023030130300230
+130303302102022020
+120230202122022202
+132323202120023000
+030000000130300320
+103232303123330333
+130303202132220222
+320000000000000000
+
+
+FWKING:
+122022320120202320
+120222020120200232
+102333030133303032
+130303002102323202
+102020222122202023
+123020202120203303
+103200202123222020
+123230303103033333
+030303032332020202
+
+FWPAWN:
+022222020020000000
+120333033120202020
+120202020132303232
+132020222122202002
+132323233133330320
+120000000023000000
+323030300000000000
+
+FBGHST:
+400000140014'
+002020202002020202
+120030320103030323
+102020223103030320
+120202020120223030
+130303030102202020
+120202020102303022
+120022002102000000
+002020200132023203
+103033002102023303
+030303000130023203
+103033002302023303
+
+FWGHST:
+400000140014'
+002020202002020202
+120030323103032323
+120202020120202222
+102020233133333030
+130303232132000000
+002022222102303202
+122202303020202000
+120022220123033330
+023230300320030300
+
+RADIX 8
+]
+
+
+PATT:
+PATCH": BLOCK 200
+PAT: BLOCK 100
+
+CONSTANTS
+VARIABLES
+
+HSICT: 0
+
+ICORSZ==<.+1777>_-12
+
+MEMT=ICORSZ_12
+
+END GO
+
+ð`Áƒ
\ No newline at end of file