From 0fecf17f1535ee771ead8eb5a08d115e4832e3cd Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Fri, 10 Aug 2018 19:59:23 +0200 Subject: [PATCH] MacHack VI with 340 display. Type "FANCY2" to get the 340 display chess board. --- Makefile | 4 +- build/misc.tcl | 4 + doc/chess/-read-.-this- | 1 + doc/games.md | 5 + doc/ms/cheg.desc | 266 + doc/ms/chess.memo | 336 + doc/programs.md | 2 +- src/ms/cheg.104 | 2715 ++++ src/rg/c.561 | 28110 ++++++++++++++++++++++++++++++++++++++ 9 files changed, 31440 insertions(+), 3 deletions(-) create mode 100644 doc/chess/-read-.-this- create mode 100644 doc/ms/cheg.desc create mode 100644 doc/ms/chess.memo create mode 100644 src/ms/cheg.104 create mode 100644 src/rg/c.561 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