diff --git a/Makefile b/Makefile index b2c47591..6a25985b 100644 --- a/Makefile +++ b/Makefile @@ -10,7 +10,7 @@ SRC = system syseng sysen1 sysen2 sysen3 sysnet kshack dragon channa \ spcwar rwg libmax rat z emaxim rz maxtul aljabr cffk das ell ellen \ 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 + draw wl taa tj6 budd sharem ucode rvb kldcp math as 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 \ diff --git a/build/misc.tcl b/build/misc.tcl index ef798309..62b8207d 100644 --- a/build/misc.tcl +++ b/build/misc.tcl @@ -379,6 +379,10 @@ respond "*" ":midas /t games;ts chess2_rg;chess2\r" respond "with ^C" "TV==0\r\003" expect ":KILL" +# Unknown chess +respond "*" ":midas games;ts chess_as;chess\r" +expect ":KILL" + # Old chess? Timesharing, no TV, no CHEOPS processor. respond "*" ":midas /t games;ts ocm_chprog;ocm\r" respond "with ^C" "DSPLY==0\r" diff --git a/doc/programs.md b/doc/programs.md index 75833fef..b0427d11 100644 --- a/doc/programs.md +++ b/doc/programs.md @@ -33,6 +33,7 @@ - CHARFC/CHARFS, Chaos RFC. - CHASE, a 2-player maze game. - CHATST, Chaos test. +- CHESS, unknown chess program. - CHESS2, Alan Baisley's Tech II chess program. - CHTN/CFTP, Chaosnet TELNET and FTP support. - COMIFY, convert HEX to COM format. diff --git a/src/as/chess.144 b/src/as/chess.144 new file mode 100644 index 00000000..0e4b5395 --- /dev/null +++ b/src/as/chess.144 @@ -0,0 +1,2339 @@ +TITLE CHESS + +DEBUG==1 +IF2,IFN DEBUG,PRINTX \DEBUG VERSION +\ +NW==12 ;NUMBER OF WORDS PER MVT BLOCK +EXPUNGE OPT + +DEFINE BUG A1,A2,A3,A4 +IFN DEBUG,[ + PUSHJ P,BUGR + ASCIZ \A1\ + A2+0 + A3+0 + A4+0] +TERMIN + +A=1 +I=A+1 +X=3 +T=4 +B=5 +C=6 +MP=13 +P=16 + +L=14 +F=15 + +TTICHN==1 +TTOCHN==2 + +;STATISTICS MACRO + +DEFINE STLIST A +IRP W,,[MOV,PMG,FEE,ABF,FCO] + A +TERMIN +TERMIN + +LOC 100 + + JRST IN + ;AB PROCESSING + +AB: MOVEI L,1 + SETZM EVZV' + STLIST [SETZM W!CNT] + SETZM BVL' ;ACCUMULATED BOARD VALUE + MOVSI X,-17 + MOVEI A,CMT +AVA: MOVEM A,CMQ(X) + ADD A,NTB(X) + AOJ A, + AOBJN X,AVA + MOVEI A,200000 + MOVEM A,VAL + MOVNM A,VVAL + +EVL: MOVNI A,170000 + MOVEM A,VAL(L) + TLZ F,10000 + +;PLAUSIBLE MOVE GENERATOR + +PMG: AOS PMGCNT + MOVEI I,(L) + ROT I,-1 + EQV I,COL + ROT I,5 + ANDI I,20 + MOVEM I,CCL' ;PIECE TABLE FOR SIDE TO MOVE + HRLI I,-20 +PGC: MOVE A,PT2(I) + JUMPE A,PGB +PGCP2: SETZM 11(A) + MOVE A,1(A) + JUMPN A,PGCP2 +PGB: AOBJN I,PGC + ;KING SAFETY ? + + MOVNI X,-37(I) + SKIPN PT2(X) + JRST PGG ;ORIGINAL ENEMY QUEEN NOT ON BOARD + MOVE X,CCL + MOVE X,PT2+16(X) ;FOR K + MOVE A,6(X) + TRNN A,100000 + JRST PGF ;CASTLES NO LONGER LEGAL + MOVE I,5(X) + EXCH I,X + MOVE X,PT2(X) + SKIPE A,X + MOVE A,6(X) + TRNN A,100000 + JRST PGFF ;O-O NOT LEGAL FOR KR + MOVE X,1(X) +PGH: MOVE A,PV4 ;VALUE OF KR MOVE WHEN O-O IS LEGAL + ADDM A,11(X) + MOVE X,1(X) + JUMPN X,PGH + MOVE A,PV3 ;VALUE OF O-O + ADDM A,11(I) +PGFF: MOVE X,1(I) +PGF: MOVEI A,177 + AND A,0(X) + PUSHJ P,TBN ;MAYBE COULD DO BETTER OPEN CODED + ADDI A,10 + ANDI A,60 + JUMPE .+2 + MOVE A,PV1 ;VALUE OF KING MOVE OFF FIRST RANK + ADD A,PV2 ;VALUE OF MOVING KING AT ALL + ADDM A,11(X) + MOVE X,1(X) + JUMPN X,PGF +PGG:: + ;CATALOG MOVES + +CAT: MOVE A,CMQ-1(L) + MOVEM A,CMP-1(L) + HRRM A,DA1 + ADDI A,CMV-CMT + HRRM A,CA1 + MOVE A,NTB-1(L) + MOVEM A,CAY' + SETZM CAZ' + MOVNI A,200000 + MOVSI X,-20 + MOVEM A,CMN(X) + AOBJN X,.-1 + MOVE X,CCL +CAA: MOVE A,PT2(X) +CAD: JUMPE A,CAB + HRRZM A,CMM' ;EVALUATOR FLAGS GO IN UPPER HALFWORD + SKIPL 5(A) + PUSHJ P,MOV + JRST CAEP3 ;IF ILLEGAL MOVE + MOVE X,CMM + ADD A,11(X) + TLNN F,100 + JRST .+3 + PUSHJ P,99I + PUSHJ P,CR + ;MORE CATALOGING + + MOVE X,CAY +CAF: MOVE I,CMN-1(X) ;ORDER MOST PLAUSIBLE MOVES + CAMG A,I + JRST CAE + MOVEM I,CMN(X) ;BETTER, MOVE OTHERS DOWN + MOVE I,CMO-1(X) + MOVEM I,CMO(X) + MOVEM A,CMN-1(X) ;SAVE VALUE + MOVE I,CMM + MOVEM I,CMO-1(X) ;AND MOVE + SOJG X,CAF +CAE: AOS CAZ + PUSHJ P,UNM + TLO F,10000 +CAEP3: MOVE X,CMM + MOVE A,1(X) ;NEXT MOVE FOR THIS PIECE + JRST CAD +CAB: AOS X,CCL ;NEXT PIECE + TRNE X,17 + JRST CAA + MOVE T,CAZ ;NUMBER OF LEGAL MOVES AT THIS POSITION + JUMPE T,NOM ;NO LEGAL MOVES + MOVE A,CMO + ADD T,L + CAIN T,2 + JRST PMK ;TOP LEVEL AND ONLY ONE MOVE + MOVE X,CAY ;COPY BEST MOVES INTO CMV AND CMT + MOVNI I,200000 +CA1: MOVEM I,(X) ;INTO CMV + MOVE I,CMO(X) +DA1: MOVEM I,(X) ;INTO CMT + MOVE I,CMN-1(X) + SOJGE X,CA1 + ;MAKE TRIAL MOVES + +EVZ: AOS X,CMP-1(L) + SOJ X, + MOVE I,0(X) + HLRZM I,T + HRRZM I,EVZW' + MOVE I,CMV-CMT(X) + CAMGE L,TLF ;SKIP IF AT ABSOLUTE DEEPEST LEVEL + CAMN I,[-200000] + JRST EVC ;NO MORE PLAUSIBLE MOVES AT THIS LEVEL + CAMGE L,TLV ;NORMAL DEEPEST LEVEL + JRST .+3 ;STILL IN NORMAL SEARCH + JUMPE T,EVZ ;IF NOT ELIGIBLE FOR FEEDOVER + AOS FEECNT + TLNE F,200 + PUSHJ P,99E + MOVE A,VAL(L) + SUB A,F9 ;FORWARD TREE PRUNE CUTOFF + CAML A,I + JRST EVC ;NO HOPE FOR REMAINING MOVES AT THIS LEVEL + MOVE A,VAL-1(L) + CAIN A,200000 + MOVNI A,200000 + SUB A,F10 ;EARLY AB CUTOFF THRESHOLD + ADD A,I + JUMPGE A,EVAB ;EARLY AB FLUSH + MOVE A,EVZW + PUSHJ P,MOV + .VALUE 0 ;ILLEGAL MOVE ?? + MOVEM A,EVZV + AOJA L,EVL ;RECURSE TO NEXT LEVEL + EVC: MOVN A,VAL(L) ;DONE WITH THIS LEVEL + CAIE A,170000 ;ANY MOVES MADE AT THIS LEVEL? + JRST EVY ;YES + MOVE X,CMQ-1(L) ;NO, USE MOST PLAUSIBLE FOR VALUE + MOVE A,0(X) + MOVE I,CMV-CMT(X) + TLNE F,200 + PUSHJ P,99E + MOVEM A,VMV(L) + MOVEM I,VAL(L) +EVY: SOJE L,EVE ;IF DONE WITH TOP LEVEL +EVD: MOVE A,VAL-1(L) + CAIN A,200000 + MOVNI A,200000 + MOVE I,VAL+1(L) + CAMLE A,I + JRST EVF ;AB FLUSH + MOVE A,VAL-2(L) + CAIN A,200000 + MOVNI A,200000 + SUB A,F8B ;SECONDARY FORWARD CUTOFF DIFFERENCE + ADD A,I + JUMPGE A,EVSFC ;SECONDARY FORWARD CUTOFF + MOVE A,VAL(L) + ADD A,I + JUMPG A,EVAA + MOVNM I,VAL(L) + MOVE X,CMP-1(L) + MOVE X,-1(X) + MOVEM X,VMV(L) + JRST EVA + EVSFC: PUSHJ P,UNM ;SECONDARY FC (VALUE IS FAR TOO LOW) + SOJA L,.+2 +EVF: AOS ABFCNT ;AB (OPPONENT IS ALREADY TOO GOOD) + PUSHJ P,UNM +EVAB: SOJ L, ;EARLY AB FLUSH +EVA: PUSHJ P,UNM + JRST EVZ + +EVAA: CAMGE A,F8A ;PRIMARY FORWARD CUTOFF DIFFERENCE + JRST EVA + AOS FCOCNT ;PRIMARY FC (ABANDON THIS LEVEL) + PUSHJ P,UNM + JRST EVC + +EVE: MOVE A,VMV+1 + JRST PMK ;PRINT AND MAKE MOVE + +NOM: MOVNI A,10 ;NO LEGAL MOVES + XCT CBM ;ASSUME MOV WAS CALLED AT LEAST ONCE + MOVE X,PT3+26(A) ;KING + PUSHJ P,CHC + JRST NOS ;STALEMATE + SOJE L,MATE ;IF TOP LEVEL + JRST EVD + +NOS: SOJE L,DRAW ;IF TOP LEVEL + TRNN L,1 + SKIPA A,F7 ;DRAW VALUE + MOVN A,F7 ;FOR PLAYER + MOVEM A,VAL+1(L) + JRST EVD + +MATE: MOVEI I,[ASCIZ \CHECKMATE\] + JRST RDLP1 + +DRAW: MOVEI I,[ASCIZ \STALEMATE\] + JRST RDLP1 + ;MOVE PRINTER + +PRI: MOVEI X,(A) + MOVE A,6(X) + MOVE I,0(X) + TLNE A,100000 + JRST POA ;CASTLE + MOVE A,I + TLO F,400000 + HRRM A,PRA + MOVS A,A + PUSHJ P,PSQ +PRA: MOVEI A, + TLZ F,400000 + +PSQ: ANDI A,177 + HRRM A,PSD + MOVE A,BD1(A) + JUMPE A,.+2 + LDB A,[360600,,PT1(A)] + TLNE F,400000 + HRRM A,PSG + ANDI A,7 + MOVE T,[440700,,PSN(A)] +PSE: ILDB I,T + JUMPE I,PSA + TLNN F,400000 +PIN: XCT TTO ;CHANGED BY MOVE READER + ILDB I,T + XCT PIN +PSA: ILDB I,T + CAIE A,7 + JRST PSC +PSB: MOVEI A, + CAIN A,6 + JRST PSE +PSC: HRRM A,PSB + XCT PIN +PSD: MOVEI A, + PUSHJ P,TBN + MOVEI X,(A) + ANDI X,7 + SKIPA T,[440700,,PSM(X)] + XCT PIN + ILDB I,T + JUMPN I,.-2 + LSH A,-3 + MOVEI I,61(A) +PSG: MOVEI A, + TRNE A,40 + MOVNI I,-151(I) + XCT PIN + POPJ P, + PSN: 1320,,0 + ASCIZ \XR/\ + ASCIZ \XN/\ + ASCIZ \XB/\ + ASCIZ \XQ/\ + ASCIZ \XK/\ + ASCIZ \XP/\ + 1320,,0 + +PSM: ASCIZ \QR\ + ASCIZ \QN\ + ASCIZ \QB\ + ASCIZ \Q\ + ASCIZ \K\ + ASCIZ \KB\ + ASCIZ \KN\ + ASCIZ \KR\ + +POA: TLZ F,400000 ;CASTLE PRINTER + MOVE A,I + MOVEI I,"O + XCT PIN +POB: MOVEI I,"- + XCT PIN + MOVEI I,"O + XCT PIN + TLO F,400000 ;SIGNAL FOR READER + HLRZM A,I + MOVEI A,(A) + CAMGE A,I + JRST POB + POPJ P, + ;MOVE READER + +RDM: TLNE F,100 +RDJ: PUSHJ P,CR + MOVE A,[PUSHJ P,RDA] + MOVEM A,PIN + SETZM RCW' + MOVE A,[440700,,RCW] + MOVEM A,RCWP' + PUSHJ P,PMN + LDB A,[370500,,COL] + SOJ A, + MOVEM A,CCL + MOVEI A,[0]-1 + MOVEM A,CMM + SETZM RDT+2 +RDP: SETZB X,A + JRST .+2 +RDO: MOVEI X,3 + SETZM RDT+1(X) + MOVE C,[440700,,RDT+1(X)] + TLZ F,100000 + CAIN A,"- + TRZA A,177 + PUSHJ P,RDI + MOVEM A,RDT(X) + CAIE A,15 + JRST .+3 + JUMPE X,RDP + JRST RDL + JUMPG X,.+2 + TLO F,100000 + TLO F,200000 + SETZ A, +RDS: PUSHJ P,RDI + CAIN A,15 + JRST RDU + CAIE A,"X + CAIN A,"- + JRST RDR +RDF: TLO F,100000 + CAMN C,[010700,,RDT+1(X)] + JRST RDLM1 + CAIE A,"/ + IDPB A,C + JRST RDS +RDR: MOVEM A,RDT+2 + MOVSI I,"O_13 + CAMN I,RDT+1(X) + JRST RDF + JUMPE X,RDO +RDLM1: PUSHJ P,CR +RDL: MOVEI I,[ASCIZ \ILLEGAL\] +RDLP1: PUSHJ P,TXP + JRST RDJ + RDU: MOVEI A,". + CAMN A,RDT + JRST RSP + SETZM RDC' + MOVEM P,RPZ' + +RDD: MOVE P,RPZ ;POP STACK + SETZM RD1' + MOVE C,[440700,,RD1] + MOVE X,CMM + MOVE A,1(X) + JUMPN A,RGG +RGH: AOS X,CCL + MOVEI A,(X) + ANDI A,17 + JUMPN A,.+3 + TLNN F,200000 + JRST RDY + MOVE A,PT2(X) + JUMPE A,RGH +RGG: MOVEM A,CMM + SETZM RD2' + TLZ F,200000 + SKIPL 5(A) + PUSHJ P,PRI + MOVEI X,3 + PUSHJ P,RDW + MOVE A,CMM + EXCH A,RDC + JUMPE A,RDD + MOVEI I,[ASCIZ \AMBIGUOUS\] + JRST RDLP1 + +RDY: MOVE A,RCW ;ANALYZE COMMENT + MOVEM A,CT2-1 + SETZ X, + CAME A,CT1(X) + AOJA X,.-1 + XCT CT2(X) + MOVEM A,PPW ;PAWN PROMOTION WORD + MOVE A,TTO + MOVEM A,PIN + SKIPE A,RDC + PUSHJ P,MPM + JRST RDL ;IF ILLEGAL MOVE + JRST PLA + RDA: MOVEI B,177 + AND B,I + TLNN F,400000 ;GLITCH FOR O-O-O + CAIE B,"- + CAIN B,"X + JRST RDB + SKIPE RD2 + JRST .+3 + MOVEM B,RD2 + POPJ P, + CAIE B,"/ + IDPB B,C + POPJ P, +RDB: CAME B,RDT+2 + JRST RDD + SETZ X, + PUSHJ P,RDW + SETZM RD1 + MOVE C,[440700,,RD1] + CAIN I,"X + SETZM RD2 + POPJ P, + +RDW: MOVE B,RDT(X) + CAME B,RD2 + JUMPN B,RDD + SKIPE B,RDT+1(X) + CAMN B,RD1 + POPJ P, + LSH B,-7 + XOR B,RD1 + LSH B,7 + JUMPN B,RDD +EXIT: POPJ P, + RP1: ASCIZ \PW\ + ASCIZ \PB\ + ASCIZ \PS\ + ASCIZ \MOV\ + ASCIZ \UNM\ + ASCIZ \GO\ + ASCIZ \PG\ + ASCIZ \NM\ + ASCIZ \B\ + ASCIZ \ST\ + ASCIZ \BD\ +RPE: 0 + +RP2: SETZ A, + MOVSI A,400000 + MOVSI A,200000 + JRST MM + JRST RUN + JRST RGO + JRST RPG + JRST RNE + JRST BAK + JRST ST + JRST PBD + JRST RDL + +RSP: MOVE A,RDT+1 + MOVEM A,RPE + MOVE I,TTO + MOVEM I,PIN + SETZ X, + CAME A,RP1(X) + AOJA X,.-1 + XCT RP2(X) + MOVEM A,CPL + PUSHJ P,SMTP + PUSHJ P,CR + MOVE A,COL + JRST RPY + +BAK: .VALUE [064240,,0] + JRST PBD + +ST: JSP T,GNU + CAILE I,1 + JRST RDLM1 + CAIE I,0 + TROA F,1 + TRZ F,1 + JRST RDJ + ;BOARD PRINTER + +PBD: PUSHJ P,PBDR + JRST RDJ + +PBDR: MOVE T,[-10,,133] +PBDC: PUSHJ P,CR +PBDB: MOVEI A,(T) + PUSHJ P,TBN + IMULI A,11 + MOVEI I,[ASCIZ \ --\] + TRNN A,10 + MOVEI I,[ASCIZ \ **\] + SKIPN A,BD1(T) + JRST PBDA + LDB I,[360300,,PT1(A)] + TLNE A,400000 + ADDI I,10 + MOVEI I,PBDT(I) +PBDA: PUSHJ P,TXP + AOBJN T,PBDB + SUB T,[10,,22] + CAME T,[-10,,13] + JRST PBDC + JRST CR + +PBDT: ASCIZ \ ??\ + ASCIZ \ WR\ + ASCIZ \ WN\ + ASCIZ \ WB\ + ASCIZ \ WQ\ + ASCIZ \ WK\ + ASCIZ \ WP\ + ASCIZ \ WG\ + ASCIZ \ ??\ + ASCIZ \ BR\ + ASCIZ \ BN\ + ASCIZ \ BB\ + ASCIZ \ BQ\ + ASCIZ \ BK\ + ASCIZ \ BP\ + ASCIZ \ BG\ + CR: MOVEI I,[064240,,0] + +TXP: HRLI I,440700 ;TEXT PRINTER + MOVEM I,TXPB' + ILDB I,TXPB + JUMPE I,EXIT + XCT TTO ;SEND CHARACTER OUT + JRST .-3 + +T6P: PUSH P,I+1 ;6BIT TEXT PRINTER + MOVE I+1,0(I) + SETZ I, + LSHC I,6 + ADDI I,40 + XCT TTO + JUMPN I+1,.-4 + POP P,I+1 + POPJ P, + +TTO: .IOT TTOCHN,I +TTI: .IOT TTICHN,A + +GNU: SETZ I, +GNUP1: XCT TTI + CAIN A,177 + JRST RDJ + CAIE A,40 + CAIN A,15 + JRST 0(T) + XORI A,60 + CAILE A,11 + JRST RDLM1 + IMULI I,12 + ADD I,A + JRST GNUP1 + RUN: MOVNI A,2 ;.UNM + ADDB A,MNU + JRST RST +RGO: JSP T,GNU ;.GO + ASH I,1 + SKIPA A,I +RPG: MOVNI A,-300 ;.PG +RST: MOVEM A,GRT+1 + MOVEI A,RSU + HRRM A,RSS + JRST RSO ;REINITIALIZE PROGRAM + +RSU: PUSHJ P,RMTP ;RESTORE TO DESIRED POSITION + HRRZ A,GRT+1 + MOVEM A,RSZ' + CAMN A,GRT+1 + TLO F,40000 +RSV: PUSHJ P,PLB + MOVEI A,2 + ADD A,MNU + SUB A,RSZ + ASH A,-1 + MOVE X,A + JUMPL A,.+3 + TLNE F,40000 + PUSHJ P,RNF + JUMPG X,RDJ + ;MORE REPLAYER + +RNE: AOS I,PMP ;.NM + LDB X,[070200,,GRT(I)] + XCT CT2+1(X) ;GET PIECE PROMOTED TO + MOVEM A,PPW + MOVE A,[177,,177] + AND A,GRT(I) + SETZB X,I + JUMPN A,RSW + SOS PMP ;RAN OFF END OF GAME RECORD TABLE + PUSHJ P,CR + TLNN F,40000 + JRST RDJ + PUSHJ P,RNF + JRST RDL + +RSB: AOS X,I +RSW: SKIPA X,PT2(X) +RSC: MOVE X,1(X) + JUMPE X,RSB + CAME A,0(X) + JRST RSC + SKIPGE 5(X) + JRST RSC ;FOR R-B1 + MOVEM X,RD1 + TLNE F,40000 + JRST RSX + MOVE A,MNU + TRNE A,1 + JRST RSG + PUSHJ P,CR + PUSHJ P,PMN + JRST RSY +RSG: MOVEI I,11 + XCT TTO +RSY: MOVE A,RD1 + PUSHJ P,PRI +RSX: MOVE A,RD1 + PUSHJ P,MOV + .VALUE 0 ;ILLEGAL ?? + PUSHJ P,REL ;RELEASE FOR PERMANENT MOVES + JRST RSV + ;CHARACTER READING ROUTINES + +RDI: EXCH A,I +RDIP1: XCT TTI + CAIE A,40 + JRST RDH + MOVEI A,". + CAME A,RDT + JRST RDX + MOVEI A,15 +RDH: CAIN A,12 + JRST RDIP1 + CAIN A,"( + JRST RCM ;COMMENT + CAIN A,"0 + MOVEI A,"0 + CAIN A,"* + MOVEI A,"X + CAIN A,177 + JRST RCJ + POPJ P, +RDX: TLNN F,100000 + JRST RDIP1 + MOVEI A,"- + POPJ P, + +RCM: XCT TTI ;INPUT COMMENT + CAIN A,15 + POPJ P, + CAIN A,177 + JRST RCJ + CAIN A,") + JRST RCM + IDPB A,RCWP + HLRZ A,RCWP + ADDI A,070000 + CAIN A,100700 + HRLM A,RCWP + JRST RCM + +RCJ: POP P,(P) + JRST RDJ + PMK: MOVEM A,PML' + PUSHJ P,PMN ;PRINT AND MAKE MOVE + MOVE A,PML + PUSHJ P,PRI ;PRINT MOVE + TRNN F,1 + JRST PMKA + PUSHJ P,CR + MOVSI X,STB-STBE +PMKB: MOVEI I,[ASCIZ \ \] + PUSHJ P,TXP + MOVEI P,STB(X) + PUSHJ P,TXP + MOVEI I,40 + XCT TTO + MOVE A,STB+1(X) + PUSHJ P,DPT + AOBJN X,.+1 + AOBJN X,PMKB +PMKA: PUSHJ P,CR + MOVE A,PML + PUSHJ P,MPM ;MAKE IT + .VALUE 0 ;ILLEGAL ?? + JRST PLA ;END OF MAIN LOOP + +RNF: TLZ F,40000 + SOS MNU + JRST PLB + ;COMMENT TABLES + +CT1: ASCII \RESIN\ + ASCII \Q\ + ASCII \R\ + ASCII \N\ + ASCII \B\ + ASCII \K\ + ASCII \P\ + 0 +CT2: JRST RSN + MOVE A,[40000,,MQU] + MOVE A,[10000,,MRK] + MOVE A,[20000,,MKN] + MOVE A,[30000,,MBI] + JRST RDL + JRST RDL + CAIA ;IGNORE RANDOM COMMENTS + +RSN: .VALUE 0 ;RESIGN + +PMN: MOVNI X,4 ;PRINT MOVE NUMBER + MOVEM X,CC' + MOVEI I,[ASCIZ \W \] + SKIPGE COL + MOVEI I,[ASCIZ \B \] + PUSHJ P,TXP + MOVE A,MNU + LSH A,-1 + PUSHJ P,DPT + MOVEI I,40 + MOVE X,CC + XCT TTO + AOJL X,.-1 + POPJ P, + +OPT: MOVEI I,10 ;OCTAL PRINT + JRST RPT + +DPT: MOVEI I,12 ;DECIMAL PRINT +RPT: MOVEM I,RAD' + JUMPGE A,.+5 + MOVEI I,"- + XCT TTO + AOS CC ;FOR CHARACTER COUNT + MOVN A,A + IDIV A,RAD + JUMPE A,.+4 + HRLM I,0(P) + PUSHJ P,.-3 + HLRZ I,0(P) + ADDI I,60 + AOSA CC +COMMA: MOVEI I,", + XCT TTO + POPJ P, + ;MAIN LOOP + +PLA: PUSHJ P,PLB ;COMPLEMENT COLOR + MOVE A,[40000,,MQU] + MOVEM A,PPW' + MOVE A,COL ;COLOR TO MOVE +RPY: XOR A,CPL ;COLOR PLAYED + TLNN F,4000 + CAMN A,[400000,,0] + JRST RDM ;TYPE IN MOVE AND MAKE IT +MM: JRST AB ;COMPUTE MOVE AND MAKE IT + ;MOVES + +RMB: HRRZ A,0(X) ;REMOVE BLOCK + MOVE I,2(X) + MOVE T,4(X) + JUMPLE T,.+3 + MOVEM I,2(T) + JRST .+3 + JUMPL T,.+2 + MOVEM I,BD2(A) + JUMPLE I,.+2 + MOVEM T,4(I) + HRRZ A,X + PUSH MP,A + MOVE I,1(X) + MOVE X,3(X) + JUMPE I,.+2 + MOVEM X,3(I) + JUMPE X,.+2 + MOVEM I,1(X) + POPJ P, + +MPM: SETZM BVL ;MAKE PERMANENT MOVE + AOS I,PMP + SETZM GRT+1(I) + MOVE I,0(A) + MOVEM I,GRA' + PUSHJ P,MOV + JRST MPL ;ILLEGAL + PUSHJ P,REL + MOVE A,GRA + MOVE I,PMP + MOVEM A,GRT(I) +RSKIP: AOSA 0(P) ;RETURN WITH SKIP +MPL: SOS PMP + POPJ P, + ;MAKE MOVE +;A HAS POINTER TO MVT BLOCK + +MOV: MOVEM A,MOI' + AOS MOVCNT +MOVP2: MOVE X,MOI + SETZM EVW' ;INCREMENTAL VALUE + TLZ F,100000 + MOVE A,6(X) + TLNE A,100000 + JRST MCA ;CASTLE +MCS: PUSH MP,[0] ;MARK PUSHDOWN +MCR: MOVE T,0(X) ;FROM,TO + MOVE X,FFS + MOVEM X,SBK' ;ADDRESS OF SPECIAL BLOCK + MOVE A,6(X) + MOVEM A,FFS ;FIX FREE STORAGE POINTER + MOVE A,GH1 + MOVEM A,5(X) + MOVE A,GH2 + MOVEM A,10(X) + MOVE A,MGS + MOVEM A,11(X) + MOVEM A,MSS' ;SAVE GHOST SQUARE + MOVS I,T + MOVEM I,0(X) ;INVERT WORD 0 OF SPECIAL BLOCK + HRRZM I,MVV' ;FROM + HLRZM I,MOC' ;TO + HLRZM I,MOA' ;SQUARE WHERE MAYBE PIECE IS CAPTURED + HLRZM I,MVX' + LDB A,[000500,,BD1(I)] ;PIECE BEING MOVED + ADD A,[400000,,PT2] + MOVEM A,DBK' ;POINTER INTO P2 + SETZ A, + EXCH A,BD1(I) ;PIECE NO LONGER ON SQUARE + MOVE B,BD1(T) ;OLD PIECE + MOVEM B,1(X) + MOVEM A,BD1(T) ;NEW PIECE + HRRZM T,PT3(A) ;NEW PT3 (TO SQUARE) + MOVE I,PT1(A) ;DESIGNATION OF MOVE SUBROUTINE + MOVEM I,2(X) ;PT1 OF MOVING PIECE + HRRM I,MOD + TLZ I,177777 + HLLZM I,MCL' ;TOP TWO BITS CODED FOR COLOR + HLLZM I,CLM' + JUMPGE I,.+2 + SKIPA T,[MOVN A,A] + MOVSI T,(JFCL) + MOVEM T,CBM ;NEGATE FOR BLACK MOVE + MOVE A,PT2(A) + ;MORE MAKE MOVE ROUTINE + + MOVEM A,4(X) + MOVEM A,MOJ' + MOVE A,BVL + MOVEM A,7(X) ;VALUE BEFORE MOVE + JUMPN B,MOE ;IF PIECE WAS CAPTURED + MOVE A,MOD + CAME A,[JRST MPA] + JRST MOB + MOVE A,MOC + CAME A,MSS + JRST MOB + MOVSI A,-12 ;E.P. CAPTURE + XCT CBM + ADDB A,0(X) ;MOVE AS IF TO CAPTURED PAWN SQUARE + MOVS A,A + SETZ B, + EXCH B,BD1(A) + MOVEM B,1(X) +MOE: SETZ I, + EXCH I,PT2(B) ;ADDRESS OF OLD PIECE MOVES + MOVEM I,3(X) + JRST .+2 + PUSHJ P,RMB ;REMOVE BLOCK OF CAPTURED PIECE + SKIPE X,I + JRST .-2 + +MOB: MOVE A,SBK + TLO A,600000 + PUSH MP,A + SKIPA I,MOJ + PUSHJ P,RMB ;REMOVE BLOCK OF MOVING PIECE + SKIPE X,I + JRST .-2 + SKIPE X,GH1 ;ELIMINATE E.P. GHOSTS + PUSHJ P,GEL + SKIPE X,GH2 + PUSHJ P,GEL + SETZM GH1 + SETZM GH2 + SETZM GHF + SETZM MGS + TLZ F,200000 +MOD: JRST ;TO PROPER PIECE MOVE GENERATING ROUTINE + ;CUT OFF MOVE CHAINS THROUGH TO SQUARE + +MOR: MOVE X,MOC + MOVE A,BD2(X) +MOT: JUMPE A,MOS + MOVEM A,MOF' + MOVS X,0(A) + MOVE I,BD1(X) + MOVE X,A + EQV I,MCL + XOR I,5(X) + AND I,[400000,,0] + XOR I,5(X) + TLNE I,200000 + TLO I,400000 + JUMPL I,.+3 + TLNE F,100000 + JRST UNM ;CASTLE CHECK AT SQUARE MOVED OVER + LDB A,[000400,,I] + MOVEM A,MDR' ;DIRECTION OF FLUSHED MOVES + CAIN A,11 + TLO I,600000 + MOVE A,I + PUSHJ P,PS5 + MOVE X,1(X) +MOX: JUMPE X,MOP + LDB A,[000400,,5(X)] + CAMN A,MDR + JRST MOW +MOP: MOVE X,MOF + MOVE A,2(X) + JRST MOT +MOW: ANDI A,15 + CAIN A,10 + JRST MOP ;SINGLE MOVE IN DIRECTION + PUSHJ P,RMB + MOVE X,I + JRST MOX + ;EXTEND MOVE CHAINS THROUGH FROM SQUARE + +MOS: MOVE X,MVV + MOVEM X,MVX + HRRZ A,BD2(X) +MOY: JUMPE A,MEX + MOVEM A,X + MOVEM X,MOF + HRRZM A,DBK + HLRZ A,0(X) + CAMN A,MOC ;PIECE BEING MOVED + JRST MOZ + MOVEM A,MVF' ;SQUARE PIECE COMES FROM + MOVE A,5(X) + MOVEM A,MDR + LDB I,[000400,,A] + TLO F,200000 + CAIN I,12 + TLOA A,400000 + TLZ A,400000 + PUSHJ P,PS5 ;MOVE TO VACATED SQUARE + MOVE X,MVF + MOVSI A,600000 + AND A,BD1(X) + MOVEM A,MCL ;COLOR + LDB A,[000400,,MDR] + CAIE A,10 + CAIN A,12 + JRST MOZ + PUSHJ P,DMV +MOZ: MOVE X,MOF + HRRZ A,2(X) + JRST MOY + +;LOSES ON E.P. +;MUST EXTEND THROUGH 2 SQUARES, NOT JUST 1 +;ALSO MUST UPDATE MOA + MEX: TLNE F,100000 + JRST MCE + MOVNI A,10 + XCT CBM + MOVE X,PT3+26(A) ;KING + PUSHJ P,CHC ;SEE IF IN CHECK + JRST EVB ;NOT IN CHECK + JRST UNM ;KING IN CHECK, MOVE IS ILLEGAL + +CHC: HRRZ X,BD2(X) ;SKIP IF ANY LEGAL MOVE TO SQUARE IN X +CHCP1: JUMPE X,EXIT + MOVE A,5(X) + HRRZ X,2(X) + JUMPL A,CHCP1 + JRST RSKIP ;RETURN WITH SKIP + +GEL: MOVSI A,400000 + XOR A,5(X) +PS5: MOVE I,5(X) + CAMN A,I + POPJ P, + MOVEM A,5(X) + PUSH MP,I + MOVE A,X ;BUM? + HRLI A,340000 + PUSH MP,A + POPJ P, + ;CASTLES + +MCA: MOVE X,5(X) ;CASTLE, KING HAS NOT MOVED + MOVE X,PT2(X) + MOVE A,6(X) + TLNN A,100000 + POPJ P, ;ROOK HAS MOVED + MOVE X,MOI + HLRZ A,0(X) + HLRZ I,NW(X) + MOVEM A,MVV + CAIL A,(I) + EXCH A,I + AOS X,A + TLO F,100000 +MCB: SKIPE BD1(X) + POPJ P, ;PIECE ON INTERVENING SQUARE + AOJ X, + CAIE X,(I) + JRST MCB + MOVE X,MVV + PUSHJ P,CHC + JRST .+2 + POPJ P, ;KING IN CHECK + MOVEI X,NW + ADDB X,MOI ;ROOK MOVE IS MADE FIRST + JRST MCS + +MCE: MOVNI X,NW ;RETURN AFTER ROOK MOVE + ADDB X,MOI + TLZ F,100000 + JRST MCR ;MAKE KING MOVE + ;MOVE PARTICULAR PIECES + +DEFINE DIRA Z + MOVEI A,Z + PUSHJ P,DMV + MOVEI A,Z+4 + PUSHJ P,DMV +TERMIN + +DEFINE DIRB Z + MOVEI A,Z + PUSHJ P,SMV + MOVNI A,Z + PUSHJ P,SMV +TERMIN + +MQU: PUSHJ P,MBB ;QUEEN +MRK: DIRA 0 ;ROOK + DIRA 2 + JRST MOR +MBI: PUSHJ P,MBB ;BISHOP + JRST MOR + +MBB: DIRA 1 + DIRA 3 + POPJ P, + +MKN: DIRB 10 ;KNIGHT + DIRB 14 + DIRB 23 + DIRB 25 + JRST MOR + +MKI: DIRB 1 ;KING + DIRB 11 + DIRB 12 + DIRB 13 + JRST MOR + MPA: MOVNI A,31 ;PAWN + XCT CBM + ADD A,MVV + ANDI A,770 + CAIE A,70 + JRST MPC ;NOT ON 7TH RANK + MOVE A,PPW ;PAWN PROMOTION + IOR A,MCL + MOVE X,MOC + MOVE X,BD1(X) + MOVEM A,PT1(X) ;CHANGE PIECE TABLE + HRRM A,MOD ;AND MOVE DISPATCH + ROT A,15 + ANDI A,600 + IORM A,GRA ;FLAG IN GAME RECORD TABLE + LDB X,[360300,,PPW] + MOVE A,PVT(X) + SUB A,PVT+6 + SUB A,PAV+4 + IMUL A,F2 + ADDM A,EVW + JRST MOD ;NO LONGER A PAWN + +MPC: MOVE A,MVV + SUB A,MOC + MOVM A,A + CAIE A,24 + JRST MPD ;NOT ON 2ND RANK MOVING TO 4TH + MOVE A,MOC + MOVEI X,1(A) + ADD A,MVV + LSH A,-1 + MOVEM A,MGS ;GHOST SQUARE + PUSHJ P,MPE + SETZ A, + EXCH A,GH1 + MOVEM A,GH2 + MOVE X,MOC + SOJ X, + PUSHJ P,MPE + MPD: MOVEI A,12 +CBM: 0 ;JFCL OR MOVN A,A + MOVEM A,MP1' ;AHEAD 1 + TLO F,400000 + ADD A,MOC + SKIPE BD1(A) + SKIPA A,[600000,,11] + MOVE A,[200000,,11] + MOVEM A,MVY + MOVE A,MP1 + PUSHJ P,DMU + AOS A,MP1 + PUSHJ P,MPB + MOVNI A,2 + ADDB A,MP1 + PUSHJ P,MPB + JRST MOR + +MPB: ADD A,MOC + MOVE A,BD1(A) ;PIECE ON TO SQUARE + TLCE A,600000 + XOR A,MCL + TLZ A,377777 + HRRI A,12 + MOVEM A,MVY + MOVE A,MP1 + JRST DMU + +MPE: MOVE A,BD1(X) ;SET UP E.P.CAPTURE + AOJE A,EXIT + SOSE X,A + XCT CBM + JUMPGE A,EXIT ;IF WRONG COLOR OR NO PIECE + LDB A,[360300,,PT1(X)] ;PIECE TYPE + CAIE A,6 + POPJ P, ;NOT A PAWN + MOVS A,PT3(X) + HRR A,MGS + SKIPA X,PT2(X) + MOVE X,1(X) + CAME A,0(X) + JRST .-2 + MOVE A,X + MOVEM A,GH1 + JRST GEL ;MAKE MOVE LEGAL + MPN: SKIPGE MCL ;PAWN FROM 2ND RANK + SKIPA B,[MOVN A,A] + MOVSI B,(JFCL) + MOVEI A,17 + XCT B + ADD A,MVV + ANDI A,770 + CAIE A,70 + POPJ P, ;NOT IN 2ND RANK + MOVEI A,24 + XCT B + ADD A,MVF + SKIPE BD1(A) + SKIPA A,[600000,,11] + MOVE A,[200000,,11] + MOVEM A,MVY + MOVEI A,12 + XCT B + TLO F,400000 + JRST DMU + ;MOVE SUPPORT ROUTINES + +SMV: TLO F,400000 ;SINGLE MOVE IN DIRECTION + MOVEI I,10 + MOVEM I,MVY + JRST DMU + +DMV: MOVEM A,MVY' ;UNTIL BLOCKED IN DIRECTION + TLZ F,400000 + MOVEI X,(A) + XCT DNT(X) + +DMU: MOVEM A,MVU' + SETZM MVZ' +DMR: MOVE A,MVU + ADDB A,MVZ + ADD A,MVX ;NEW FROM SQUARE + MOVEM A,MVW' ;NEW TO SQUARE + MOVSI B,600000 + AND B,BD1(A) + CAMN B,[600000,,0] + POPJ P, + JUMPE B,DMRA + TLO F,400000 + AND B,MCL + JUMPE B,DMRA + MOVSI B,400000 +DMRA: IOR B,MVY + MOVS I,MVX + TLNE F,200000 + MOVS I,MVF + HRRI I,(A) + MOVE X,FFS + MOVEM B,5(X) + MOVEM I,0(X) + MOVEI I,(X) + EXCH I,BD2(A) + MOVEM I,2(X) + SETZM 4(X) + JUMPE I,.+2 + MOVEM X,4(I) + MOVE I,MCL + EXCH I,6(X) + MOVEM I,FFS + SETZM 7(X) ;CLEAR MOVE TACTICAL VALUES + SETZM 10(X) + SKIPG I,DBK + JRST DMS + MOVEM I,3(X) + MOVE B,1(I) + MOVEM X,1(I) + MOVEM B,1(X) + JUMPE B,DMT + MOVEM X,3(B) + JRST DMT + +DMS: MOVEM X,0(I) ;INTO PT2 + SETZM 1(X) + SETZM 3(X) +DMT: HRRZM X,DBK + MOVSI A,400000 + HRRI A,(X) + PUSH MP,A + TLNN F,400000 + JRST DMR + POPJ P, + ;UNMOVE LAST MOVE + +UNM: SKIPN X,0(MP) + SOJA MP,EXIT + LDB A,[420200,,X] + XCT .+1(A) + + JRST U00 + SOJA MP,U01 + JRST U10 + JRST U11 + +U00: SKIPE B,3(X) ;ENTER INTO MVT + MOVEM X,1(B) + SKIPE B,1(X) + MOVEM X,3(B) + SKIPLE B,2(X) + MOVEM X,4(B) + SKIPG B,4(X) + JRST ULB + MOVEM X,2(B) + SOJA MP,UNM +ULB: JUMPL B,.+3 + MOVE B,0(X) + MOVEM X,BD2(B) + SOJA MP,UNM + U01: MOVE A,0(MP) ;SECOND WORD OF DATA + LDB B,[400200,,1(MP)] ;FUNCTION CODE + XCT UT1(B) + SOJA MP,UNM + +UT1: SOJA MP,UNH ;0100 MOVE TACTICAL VALUES + MOVEM A,BD4(X) ;0101 SQUARE TACTICAL VALUE + .VALUE 0 ;0110 UNUSED + MOVEM A,5(X) ;0111 COVER STATUS + +UNH: MOVEM A,7(X) + MOVE A,0(MP) ;THIRD WORD OF DATA + MOVEM A,10(X) + SOJA MP,UNM + +U10: MOVE I,1(X) ;REMOVE FROM MVT + SKIPE B,3(X) + MOVEM I,1(B) + JUMPE I,.+2 + MOVEM B,3(I) + MOVE I,2(X) + SKIPE B,4(X) + MOVEM I,2(B) + JUMPE I,.+2 + MOVEM B,4(I) + JUMPN B,ULA + MOVE A,0(X) + MOVEM I,BD2(A) +ULA: MOVEI A,(X) + EXCH X,LFS + MOVEM A,6(X) + SOJA MP,UNM + U11: MOVE A,5(X) ;SPECIAL BLOCK + MOVEM A,GH1' + MOVE A,10(X) + MOVEM A,GH2' + MOVE T,11(X) + MOVEM T,MGS + MOVS B,0(X) + MOVE I,3(X) ;PT2 OF CAPTURED PIECE + SKIPE A,1(X) ;CAPTURED PIECE + MOVEM I,PT2(A) + EXCH A,BD1(B) ;PIECES MOVED AND PUT BACK + JUMPN A,.+2 ;UNLESS NO PIECE AT CAPTURE SQUARE + EXCH A,BD1(T) ;MUST HAVE BEEN E.P. + MOVE B,0(X) ;FROM SQUARE + MOVEM A,BD1(B) + MOVE I,7(X) ;VALUE OF MOVE + MOVEM I,BVL + MOVE I,4(X) ;PT2 OF MOVED PIECE + MOVEM I,PT2(A) + MOVE I,2(X) ;PT1 OF MOVED PIECE + MOVEM I,PT1(A) + HRRZM B,PT3(A) ;FROM SQUARE + JRST ULA + +;SPECIAL BLOCK FORMAT: + +;0 TO,FROM +;1 BD1 OF CAPTURED PIECE +;2 PT1 OF MOVED PIECE +;3 PT2 OF CAPTURED PIECE +;4 PT2 OF MOVED PIECE +;5 GH1 +;6 +;7 BOARD VALUE BEFORE MOVE +;10 GH2 +;11 MGS + REL: MOVEI MP,(MP) ;RELEASE MOVE BLOCKS FOR PERMANENT MOVES + CAIGE MP,MMT + POPJ P, + LDB X,[420200,,0(MP)] + XCT .+1(X) + + SOJA MP,RLC + SOJA MP,RL01 + SOJA MP,REL + SOJA MP,RLC + +RL01: LDB X,[400200,,1(MP)] + XCT .+1(X) ;SKIP OVER ARGUMENTS TO LOSING 01 ENTRIES + + SOJA MP,.+1 + SOJA MP,REL + .VALUE 0 + SOJA MP,REL + +RLC: SKIPN X,1(MP) + JRST REL + MOVEI A,(X) + EXCH X,LFS + MOVEM A,6(X) + JRST REL + +PLB: AOS A,MNU ;SET UP FOR NEXT MOVE + ROT A,-1 + HLLZM A,COL' ;COLOR TO MOVE + POPJ P, + +TBN: IDIVI A,12 ;TRANSLATE BOARD NUMBER + ASH A,3 + ADDI A,-21(I) + MOVEI A,(A) + POPJ P, + +SMTP: MOVE A,CPL + MOVEM A,GRT + POPJ P, + +RMTP: MOVE A,GRT + MOVEM A,CPL' + POPJ P, + ;EVALUATOR + +EVB: TLNN F,400 + TLNE F,100 + JRST 99A +EVBP3: SETZM BVT' + BUG INI,BVL,EVW + MOVEI A,35 ;POINTER TO ILLEGAL SQUARE + MOVEM A,ESY' + MOVE A,EVW + XCT CBM ;NEGATE FOR BLACK + MOVEM A,EVW + SETZM EVV' + TLNE F,100 + PUSHJ P,99I + MOVE X,MOA ;SQUARE WHERE PIECE, IF ANY, WAS CAPTURED + SKIPL BD4(X) + JRST .+3 + MOVSI A,1 + IORM A,CMM + MOVEM MP,ESA' + MOVNI A,117 + MOVEM A,ESS' +ESN: TLNE F,20000 + JRST ESQ +ETK: AOSL A,ESS + JRST ETG + SKIPL BD4+143(A) + JRST ETK + ADDI A,143 + JRST ESV +ETG: TLO F,20000 + MOVE MP,ESA + BUG RVC,BVL,EVV + MOVE A,EVW + EXCH A,EVV + ADDB A,BVL + MOVE X,SBK + MOVEM A,7(X) +ESQ: SOS X,ESA + SKIPN A,1(X) + JRST ESE + LDB X,[420200,,A] + SOJN X,ESQA + LDB X,[400200,,A] ;LOSING 01 ENTRY + SOS ESA + JRST ESQB(X) ;SKIP OVER ARGUMENTS +ESQB: SOS ESA + JRST ESQ + .VALUE 0 + JRST ESQ + +ESQA: HRRZ A,0(A) +ESV: SKIPE BD5(A) + JRST ESN ;NEXT BLOCK + MOVEI X,(A) + MOVEM A,PI3' + EXCH A,ESY + MOVEM A,BD5(X) + ;TACTICAL EVAL CONTROL + + PUSHJ P,EUA ;SET UP PIECE AND MOVE LISTS + TLZ F,400000 + PUSHJ P,EST ;FOR BASIC SQUARE EVALUATION + MOVEM I,BSV' ;BASIC SQUARE VALUE + MOVEI A,(I) + MOVE B,BD4(X) + TLNE F,400000 + TLO A,400000 ;HANGING PIECE + CAMN A,B + JRST ETI + MOVEM A,BD4(X) + HRREI A,(A) + HRREI I,(B) + BUG BSV,ESY,BUGA,BUGI + SUB A,I + ADDM A,EVV ;TOTAL VALUE + PUSH MP,B ;SAVE OLD SQUARE VALUE + MOVSI B,240000 + HRR B,ESY + PUSH MP,B +ETI: MOVEI X,LA ;DO BLACK TACTICAL EVALUATION FIRST +ETC: MOVE A,PT3+16(X) + MOVEM A,KS' ;KING SQUARE + MOVEI A,100000 ;PIECE TACTICAL EVALUATION + MOVEM A,ETZ' + CAME A,VPW(X) + AOJA X,.-1 +ETA: SKIPN A,X ;EVALUATE NEXT PIECE + JRST ESN ;DONE + CAIE A,LA + JRST ETB + MOVE A,ETZ ;PUT BLACK VALUES BACK TOGETHER +ETD: EXCH A,VPW(X) + CAIE A,100000 + AOJA X,ETD + SETZ X, ;SET UP FOR WHITE + JRST ETC + ;MORE EVAL CONTROL + +ETB: MOVEM A,ETY' ;REMEMBER POSITION IN VPW TABLE + MOVE A,ETZ ;TAKE OUT A PIECE + EXCH A,VPW-1(X) + MOVEM A,ETZ ;SAVE VALUE OF PIECE REMOVED + PUSHJ P,EST ;EVALUATE AGAIN WITH PIECE MISSING + MOVE A,BSV ;BASIC SQUARE VALUE + SUBM A,I + MOVM I,I ;ABSOLUTE DIFFERENCE + MOVE X,ETY + MOVE X,VPM-1(X) ;MVT BLOCK FOR THIS MOVE + IFN DEBUG,[HLRZ A,0(X) + MOVEM A,BGT'] + MOVE A,6(X) + XOR A,ESW + TLNE A,600000 + JRST ETF ;OFFENSIVE TACTICAL VALUE + MOVE A,KS + XOR A,0(X) + TRNN A,177 + SETZ I, ;COVERING OWN KING + MOVE A,10(X) + MOVEM I,10(X) ;PUT AWAY TACTICAL VALUE + BUG DTV,BGT,BUGA,BUGI + SETZ I, + EXCH I,7(X) + JRST ETL +ETF: EXCH I,7(X) + BUG OTV,BGT,BUGI,7(X) + SETZ A, + EXCH A,10(X) +ETL: CAME A,10(X) + JRST ETM + CAMN I,7(X) + JRST ETE +ETM: PUSH MP,A ;PUSH TACTICAL VALUES + PUSH MP,I + HRLI X,200000 + PUSH MP,X +ETE: SOS X,ETY + JRST ETA + ;SQUARE SAFETY EVALUATOR + +EST: MOVEI A,100000 + SETZ X, +ESI: CAMN A,VPW(X) + JRST ESH + CAME A,VPB(X) + AOJA X,ESI +ESH: MOVEI B,40000 + MOVEI I,40000 +ESJ: MOVE A,VPW(X) ;PHASE 1 SAFETY ANALYSIS + SUB B,A + JUMPLE B,.+2 + SETZ B, + MOVE T,VPB(X) + SUBM T,I + JUMPGE I,.+2 + SETZ I, + ADDM T,B ;PHASE 2 SAFETY ANALYSIS + JUMPGE B,.+2 + SETZ B, + SUBM A,I + JUMPGE I,.+2 + SETZ I, + SOJGE X,ESJ + MOVEM I,VCB' + MOVEM B,VCW' + + MOVE X,ESY + SKIPN T,ESW ;BD1 OF ORIGINAL SQUARE + JRST ESR ;NO PIECE ON SQUARE + MOVE A,PT1(T) + LDB T,[360300,,A] + MOVE T,PVT(T) + JUMPGE A,.+2 + EXCH B,I ;IF BLACK PIECE + CAIN I,100000 + MOVE I,F3 + SUB B,T + JUMPGE B,ESR + TLO F,400000 ;HANGING + IMUL B,HPD + SUB I,B ;SUBTRACT FROM OPPOSITION'S DEFENSE + SKIPL ESW + MOVN I,I ;COMPLEMENT IF WHITE + POPJ P, + +ESR: MOVE I,F3 + MOVEI A,100000 + CAMN A,VCW + MOVEM I,VCW + CAMN A,VCB + MOVEM I,VCB + MOVE I,VCW ;WHITE DEFENSE + SUB I,VCB ;BLACK DEFENSE + IMUL I,BD3(X) ;SQUARE VALUE + ASH I,-3 ;NORMALIZATION + POPJ P, ;END OF SQUARE ANALYSIS + EUA: MOVEI A,100000 ;BEGINNING OF SQUARE ANALYSIS + MOVEM A,VPW + MOVEM A,VPB + MOVE A,BD1(X) + MOVEM A,ESW' ;PIECE ON SQUARE BEING EVALUATED + XOR A,CLM + MOVE I,F1 + JUMPGE A,.+2 + MOVE I,F5 + MOVEM I,HPD' ;EN PRISE PIECE DISADVANTAGE + MOVE A,BD2(X) +ESC: JUMPE A,EXIT + MOVEM A,VNS' ;BLOCK BEING PROCESSED + MOVE X,5(A) + TLNE X,200000 + JRST ESD ;SQUARE NOT COVERED BY THIS PIECE + MOVS X,0(A) + MOVE X,BD1(X) + PUSHJ P,EUB +ESD: MOVE X,VNS ;GO TO NEXT BLOCK + MOVE A,2(X) + JRST ESC + +EUB: MOVE I,PT1(X) ;PUT PIECE INTO PIECE AND MOVE LISTS + LDB X,[360300,,I] + MOVE A,PVT(X) ;VALUE OF PIECE COVERING SQUARE + SETZ X, + JUMPGE I,.+2 + MOVEI X,LA + CAML A,VPW(X) ;FIND PLACE + AOJA X,.-1 + MOVE I,VNS ;AND PUSH DOWN ALL BELOW THERE +ESG: EXCH A,VPW(X) + EXCH I,VPM(X) + CAIE A,100000 + AOJA X,ESG + MOVEM A,VPW+1(X) + POPJ P, + ;EVEN MORE EVB + +ESE: MOVE A,MOC ;SQUARE PIECE WAS MOVED TO + PUSHJ P,TBN + XCT CBM ;NEGATE FOR BLACK + LSH A,-3 + MOVE T,PAV-1(A) + MOVE I,PAV-2(A) + SUBM T,I ;PAWN PUSH VALUE + MOVE X,SBK ;SPECIAL BLOCK + LDB A,[360300,,2(X)] ;PIECE MOVED + CAIE A,6 + JRST ECP ;NOT PAWN ADVANCE + MOVE B,MOC + HRRE A,BD4(B) + XCT CBM + JUMPGE A,.+2 + SETZ I, ;ADVANCED PAWN HANGING + JUMPG A,.+2 + ASH I,-1 ;NOT COVERED + MOVE A,I + XCT CBM + BUG PAV,BUGA,EVV,MOC + ADDM A,EVV +ECP: SKIPN A,1(X) + JRST ESO + LDB A,[360300,,PT1(A)] + CAIE A,6 + SETZ T, ;NO PAWN ADVANCE VALUE FOR NON-PAWNS + MOVE A,PVT(A) ;VALUE OF CAPTURED PIECE + XCT CBM + IMUL A,F2 + EXCH A,T + XCT CBM + ADD A,T + BUG CAP,BUGA,EVV,MOC +ESO: ADDB A,EVV + TLNE F,100 + PUSHJ P,99I + ADDB A,BVL ;INCREMENTAL PART OF BOARD VALUE + ;ABSOLUTE EVALUATION + + ADDM A,BVT ;TOTAL VALUE + BUG INC,EVV,BVL,BVT + +;PINS AND DISCOVERED ATTACKS + MOVNI X,40 + MOVEM X,PI1' + SETZM PNV' +PIB: SETZM PNW' ;SUM OF DISCOVERED ATTACKS + SETZM PNX' ;SUM OF PIN ATTACKS + SKIPN A,PT2+40(X) + JRST PIC + MOVE X,PT3+40(X) + HRRZM X,MVX ;SQUARE THIS PIECE IS ON + MOVE A,BD2(X) + JRST PIFP1 +PIH: MOVE A,PI2 +PIF: MOVE A,2(A) +PIFP1: JUMPE A,PIE ;IF DONE WITH THIS PIECE + MOVE I,5(A) + TRNE I,10 + JRST PIF ;NOT SLIDING PIECE + MOVEM A,PI2' ;SAVE MOVE BLOCK + MOVS X,0(A) ;SQUARE ATTACKING PIECE COMES FROM + MOVE I,BD1(X) + MOVEM I,MVW ;ATTACKING PIECE + LDB A,[000300,,5(A)] + XCT DNT(A) + MOVEM A,MVU ;DIRECTION PIECE IS GOING + MOVE X,MVX + MOVE B,MVU + ADDM B,X + SKIPN A,BD1(X) + JRST .-2 ;EMPTY SQUARE + CAMN A,[-1] + JRST PIH ;EDGE OF BOARD + XOR A,MVW ;HIDDEN PIECE XOR PINNING PIECE + JUMPGE A,PIH ;IF SAME COLOR + MOVEM X,ESY + PUSHJ P,EUA ;SET UP THIS SQUARE + MOVE X,MVW + PUSHJ P,EUB ;PUT IN OCCLUDED PIECE + PUSHJ P,EST ;RETURNS VALUE FOR WHITE + HRRE A,BD4(X) + SUB A,I + JUMPE A,PIH ;NO VALUE + IMUL A,F6 ;PIECE TRANSPARENCY + MOVM A,A + HLRE A,A + MOVE X,PI1 + MOVE I,PT1+40(X) + XOR I,MVW + JUMPGE I,PID + ADDM A,PNX ;PIN + JRST PIH +PID: ADDM A,PNW ;DISCOVERED ATTACK + JRST PIH + +PIE: MOVE X,PI1 + MOVN I,PNX ;SUM OF PINS + JUMPE I,PIJ ;NO PINS + MOVE B,PT2+40(X) +PII: SUB A,7(B) + SUB A,10(B) + SKIPE B,1(B) + JRST PII ;TOTAL TV OF PINNED PIECE + BUG PIN,BUGA,BUGI,MVX + CAMGE A,I + MOVE A,I ;-MIN(TV,PNX) IN A +PIJ: ADD A,PNW ;SUM OF DISCOVERED ATTACKS + JUMPE A,PIC ;NO VALUE + SKIPGE PT1+40(X) + MOVN A,A ;FOR BLACK PINNED + BUG DIS,BUGA,PNV,MVX + ADDM A,PNV +PIC: AOSGE A,PI1 + JRST PIB + MOVE A,PNV + ADDM A,BVT + BUG TPD,PNV,BVT + SETZM BVU' ;LOST RAW TACTICAL VALUE + SETZM ESX' + SETZB A,VNS ;-MAX VALUE AMONG HANGING PIECES +SEC: IFN DEBUG,[MOVE X,PT3(A) + HRRZM X,BGT'] + SKIPN X,PT2(A) + JRST SEA + SETZM ESZ' ;ACCUMULATED PIECE TACTICAL VALUE + SETZM ESU' + MOVNI I,777777 +SEB: MOVE A,10(X) ;MOVE TACTICAL VALUE + CAMLE A,I + MOVE I,A + ADDM A,ESZ + ADD A,7(X) ;OFFENSIVE TACTICAL VALUE + ADDM A,ESU + SKIPE X,1(X) + JRST SEB + MOVE A,ESZ ;DEFENSIVE TACTICAL VALUE + IFN DEBUG,[MOVN B,A + CAMN B,I + JRST SEBB + BUG TTV,ESZ,BUGI,BGT +SEBB:] + ;MORE ABSOLUTE EVALUATION + + SUBM I,A + MOVN I,ESU ;TOTAL TACTICAL VALUE + MOVE B,ESX + SKIPG X,PT1(B) + MOVN A,A ;FOR BLACK + ADDM A,BVU ;ONLY COUNT BEST DEFENSIVE TACTIC FOR PIECE + XOR X,CLM + JUMPL X,SEA + MOVE T,PT3(B) + SKIPGE BD4(T) + JRST SEG ;IF THE PIECE IS HANGING + MOVE I,BD1(T) + SKIPA X,BD2(T) +SEH: MOVE X,2(X) + JUMPE X,SEA ;PIECE IS UNATTACKED + SKIPGE 5(X) + JRST SEH + XOR I,6(X) + JUMPGE I,SEH + HRRE A,BD4(T) + ASH A,4 ;NORMALIZATION + IDIV A,BD3(T) + JUMPGE T,.+2 + MOVN A,A ;FOR BLACK + MOVE I,ESU + SUBM A,I + JUMPGE I,SEA +SEG: MOVE A,VNS + CAMLE A,I + MOVEM I,VNS ;-MAX TOTAL TACTICAL VALUE + BUG UNS,BUGI,ESU,BGT + SEA: AOS A,ESX ;NEXT PT ENTRY + CAIE A,40 + JRST SEC + MOVE A,BVU + IMUL A,F4 + HLRE A,A + TLNE F,100 + PUSHJ P,99I + IFN DEBUG,HRRZM A,BGT' + ADDM A,BVT ;ADJUSTED LOST TACTICAL VALUE + MOVE A,VNS + XCT CBM ;NEGATE FOR BLACK + TLNE F,100 + PUSHJ P,99I + IFN DEBUG,MOVEM A,T1' + ADDB A,BVT ;DON'T COUNT BEST HANGING PIECE + BUG SUB,BGT,T1,BVT + XCT CBM + MOVEM A,SEE' + MOVE X,PI3 + SETZ I, + EXCH I,BD5(X) ;POST-INITIALIZE BD5 + SKIPE X,I + JRST .-3 + TLZ F,20000 + ;CHECKMATE FINDER + + MOVEI A,10 + XCT CBM + MOVE B,PT2+26(A) + MOVEM B,ECM1' ;KING MOVE LIST + MOVE X,PT3+26(A) + HRRZM X,ECM3' ;KING SQUARE + MOVEM X,ECM7' + SETZM ECM2' + SKIPE I,BD2(X) +ECMB: SKIPN X,I + JRST ECMA + MOVE I,2(X) + SKIPGE A,5(X) + JRST ECMB + TRNE A,10 + JRST ECMC + LDB X,[000300,,5(X)] + XCT DNT(X) + MOVN A,A + JRST ECME +ECMC: MOVS A,0(X) + SUB A,0(X) + HRREI A,(A) +ECME: EXCH A,ECM2 + JUMPN A,ECMD ;DOUBLE CHECK + JRST ECMB +ECMA: SKIPN A,ECM2 + JRST SED ;NOT IN CHECK + ECMK: ADDB A,ECM7 ;MOVE GAVE CHECK + MOVSI I,2 + IORM I,CMM + MOVE I,BD2(A) +ECMG: SKIPN X,I + JRST ECMF + MOVE I,2(X) + SKIPGE 5(X) + JRST ECMG + MOVE A,6(X) + XCT CBM + JUMPGE A,ECMG + HLRZ A,0(X) + CAMN A,ECM3 + JRST ECMG ;CAN'T INTERPOSE KING + MOVEM A,ECM5' + MOVE B,BD2(A) +ECMH: SKIPN X,B + JRST SED ;CAN INTERPOSE + MOVE B,2(X) + SKIPL A,5(X) + TRNE A,10 + JRST ECMH + ANDI A,7 + XCT DNT(A) + SKIPA T,A +ECMJ: MOVE A,T + ADDB A,ECM5 + CAMN A,ECM3 + JRST ECMG ;INTERPOSITION GIVES DISCOVERED CHECK + SKIPE BD1(A) + JRST ECMH + JRST ECMJ +ECMF: MOVE X,ECM7 + MOVE A,ECM2 + CAMN I,BD1(X) + JRST ECMK + ECMD: MOVE I,ECM1 ;MUST LOOK FOR KING MOVE +ECML: SKIPN X,I + JRST ECMZ ;CHECKMATE + MOVE I,1(X) + MOVE A,6(X) + TLNN A,100000 ;CAN'T CASTLE + SKIPGE 5(X) + JRST ECML + HRRZ A,0(X) + MOVEI X,(A) + SUB A,ECM3 + MOVEM A,ECM2 + MOVE B,BD2(X) +ECMM: SKIPN X,B + JRST ECMN ;MAYBE CAN MOVE KING + MOVE B,2(X) + MOVE T,5(X) + MOVE A,6(X) + XCT CBM + TLNN T,200000 + JUMPGE A,ECML ;KING IN CHECK AFTER MOVING + JRST ECMM +ECMN: MOVE X,ECM3 + MOVE T,BD2(X) +ECMO: SKIPN X,T + JRST SED ;CAN MOVE KING + MOVE T,2(X) + SKIPL A,5(X) + TRNE A,10 + JRST ECMO + ANDI A,7 + XCT DNT(A) + CAMN A,ECM2 + JRST ECML ;CAN'T MOVE DIRECTLY AWAY FROM SLIDING PIECE + JRST ECMO + +SED: SKIPA A,SEE +ECMZ: MOVEI A,160000 ;CHECKMATE + TLNE F,100 + PUSHJ P,99I + BUG VAL,SEE + JRST RSKIP ;END OF MOV ROUTINE AND EVALUATOR + ;ADJUSTABLE CONSTANTS + +F1: 160 ;HANGING PIECE DISADVANTAGE +F2: 200 ;PIECE CAPTURE ADVANTAGE +F3: 10 ;VALUE OF SQUARE DEFENDED BY ONE COLOR ONLY +F4: 600000 ;TACTICAL VALUE LOSS FACTOR +F5: 40 ;THREATENED PIECE DISADVANTAGE +F6: 400000 ;PIN TRANSPARANCY (CROCK) +F7: 2000 ;DRAW VALUE FOR COMPUTER (CROCK) +F8A: 500 ;PRIMARY FORWARD CUTOFF DIFFERENCE +F8B: 1000 ;SECONDARY FORWARD CUTOFF DIFFERENCE +F9: 1000 ;FORWARD TREE PRUNE CUTOFF +F10: 1000 ;EARLY AB CUTOFF + +PVT: 0 ;?? + 5 ;R + 3 ;N + 3 ;B + 11 ;Q + 14 ;K + 1 ;P + 1 ;G ?? + +PV1: -100 ;VALUE OF KING MOVE OFF FIRST RANK +PV2: -40 ;VALUE OF MOVING KING AT ALL +PV3: 100 ;VALUE OF O-O +PV4: -100 ;VALUE OF KR MOVE WHEN O-O IS LEGAL + 99A: TLCE F,40 ;MOVE TRACE + JRST EVBP3 + MOVEI A,(L) + PUSHJ P,OPT + PUSHJ P,UNM + MOVE A,MOI + PUSHJ P,PRI + JRST MOVP2 + +99I: PUSH P,A + PUSH P,I + MOVEI I,40 + XCT TTO + PUSHJ P,OPT + POP P,I + POP P,A + POPJ P, + +IFN DEBUG,[ +BUGR: MOVEM A,BUGA' + TLNN F,400 + JRST BUGX + MOVEM I,BUGI' + PUSH P,T + MOVE T,-1(P) + MOVEI I,0(T) + PUSHJ P,TXP + PUSHJ P,BUGS + PUSHJ P,BUGS + PUSHJ P,BUGS + PUSHJ P,CR + POP P,T + MOVE I,BUGI +BUGX: MOVEI A,4 + ADDM A,0(P) + MOVE A,BUGA + POPJ P, + +BUGS: AOJ T, + SKIPN A,0(T) + POPJ P, + PUSHJ P,COMMA + MOVE A,@A + JRST OPT +] + +99E: MOVEM 17,99S+17 ;TREE PRINT + MOVEI 17,99S + BLT 17,99S+16 + CAMG L,99W + PUSHJ P,CR + MOVEM L,99W' + MOVEI I,40 + XCT TTO + MOVEI A,(L) + PUSHJ P,OPT + PUSHJ P,COMMA + MOVE A,0(X) + PUSHJ P,PRI + PUSHJ P,COMMA + MOVE A,99S+I + PUSHJ P,OPT + MOVSI 17,99S + BLT 17,17 + POPJ P, + DNT: MOVEI A,1 + MOVEI A,13 + MOVEI A,12 + MOVEI A,11 + MOVNI A,1 + MOVNI A,13 + MOVNI A,12 + MOVNI A,11 + .VALUE 0 + JRST MPN + +;SQUARE VALUES TABLE (SEEMS TO FAVOR QUEEN SIDE ?) + +DEFINE SQVT A1,A2,A3,A4,A5,A6,A7,A8 + 0 + IRP W,,[A1,A2,A3,A4,A5,A6,A7,A8] + W + TERMIN + 0 +TERMIN + +BD3==.-24 + SQVT 10,10,10,11,12,10,10,10 + SQVT 07,07,07,10,12,07,07,07 + SQVT 07,07,10,12,14,10,07,07 + SQVT 10,12,14,16,20,14,12,10 + SQVT 10,12,14,16,20,14,12,10 + SQVT 07,07,10,12,14,10,07,07 + SQVT 07,07,07,10,12,07,07,07 + SQVT 10,10,10,11,12,10,10,10 + +;ADVANCED PAWN ADDITIONAL VALUES + +PAV: 0 ;ON 2ND RANK + 0 ;ON 3RD RANK + 30 ;ON 4TH RANK + 100 ;ON 5TH RANK + 170 ;ON 6TH RANK + 300 ;ON 7TH RANK + 0 ;ON 8TH RANK (PROMOTION) + +;STATISTICS TABLE + +STB: STLIST [ASCIZ \W\ +W!CNT: 0] +STBE:: + ;INITIAL BOARD TABLE + +DEFINE IBT PT,PC,PR,FS,TS + _20,,PT + <_4+PC>_14,,PR + FS,,TS +TERMIN + +INT: IBT 0,6,MPA,77,37 ;QRP + IBT 20,6,MPA,77,121 + IBT 1,6,MPA,77,40 ;QNP + IBT 21,6,MPA,77,122 + IBT 2,6,MPA,77,41 ;QBP + IBT 22,6,MPA,77,123 + IBT 3,6,MPA,77,42 ;QP + IBT 23,6,MPA,77,124 + IBT 4,6,MPA,77,43 ;KP + IBT 24,6,MPA,77,125 + IBT 5,6,MPA,77,44 ;KBP + IBT 25,6,MPA,77,126 + IBT 6,6,MPA,77,45 ;KNP + IBT 26,6,MPA,77,127 + IBT 7,6,MPA,77,46 ;KRP + IBT 27,6,MPA,77,130 + IBT 10,3,MBI,53,27 ;QB + IBT 30,3,MBI,111,135 + IBT 11,3,MBI,56,32 ;KB + IBT 31,3,MBI,114,140 + IBT 12,2,MKN,52,26 ;QN + IBT 32,2,MKN,110,134 + IBT 13,2,MKN,57,33 ;KN + IBT 33,2,MKN,115,141 + IBT 14,1,MRK,51,25 ;QR + IBT 34,1,MRK,107,133 + IBT 15,1,MRK,60,34 ;KR + IBT 35,1,MRK,116,142 + IBT 16,5,MKI,55,31 ;K + IBT 36,5,MKI,113,137 + IBT 17,4,MQU,54,30 ;Q + IBT 37,4,MQU,112,136 + 0 + ;INITIALIZATION + +IN: SETZ F, ;NORMAL ENTRY + .CORE EFS/2000+1 + .VALUE 0 + MOVEI P,PDL-1 + .OPEN TTICHN,[SIXBIT \ 0TTY\] + .VALUE 0 + .OPEN TTOCHN,[SIXBIT \ 1TTY\] + .VALUE 0 + MOVEI I,[102060,,0] + PUSHJ P,TXP ;CLEAR SCREEN + MOVEI I,[.FNAM1] + PUSHJ P,T6P + MOVEI I,". + XCT TTO + MOVEI I,[.FNAM2] + PUSHJ P,T6P + PUSHJ P,CR +IFN DEBUG,[ + MOVEI I,[ASCIZ \DEBUG VERSION +\] + PUSHJ P,TXP +] + MOVEI A,PLA + HRRM A,RSS +RSO: SETZM FS + MOVEI MP,MMT-1 + TLZ F,770077 + MOVE A,[FS,,FS+1] + BLT A,EFS-1 + MOVEI A,MVT + MOVEM A,FFS' + MOVEI B,NW + ADD A,B + MOVEM A,6-NW(A) + CAIGE A,EFS-2*NW + JRST .-3 + MOVEM A,LFS' + MOVNI X,24 + SETOM BD1+24(X) + SETOM BD1+167(X) + AOJLE X,.-2 + MOVE X,[-7,,35] + SETOM BD1(X) + SETOM BD1+1(X) + ADDI X,11 + AOBJN X,.-3 + MOVE A,[CTBI,,CTB] + BLT A,CTB+10*NW-1 + MOVEI L,INT-3 + MOVSI A,70000 + MOVEM A,GHT + MOVEI A,1 + MOVEM A,PMP' + MOVEM A,FAK+4 + MOVEI A,100 + MOVEM A,PT3+16 + MOVEM A,PT3+36 + INE: ADDI L,3 + SKIPN I,0(L) + JRST INF + MOVE A,1(L) + MOVEM A,PT1(I) + MOVS A,2(L) + MOVSM A,FAK + MOVEM I,BD1(A) + MOVEI A,FAK + PUSHJ P,MOV + .VALUE 0 ;?? + SETZM MMT+2 + PUSHJ P,REL + JRST INE +INF: PUSHJ P,RMTP + MOVSI A,400000 + MOVEM A,CPL + AOS MNU' + MOVEI L,CTB-NW +INK: ADDI L,NW + SKIPG X,1(L) +RSS: JRST ;BD1 MUST BE FIRST AFTER CTB + MOVE I,PT2(X) + MOVEM L,PT2(X) + MOVEM I,1(L) + SETZM 2(I) + JRST INK + TLF: 10 ;TOP LEVEL FOR FEEDOVERS +TLV: 2 ;NORMAL TOP LEVEL + +;NUMBER OF MOVES AT EACH LEVEL TABLE - ENTRIES MUST BE LESS THAN 20 +NTB: 12 + 12 + 12 + 12 + 5 + 5 + 5 + 1 + +DEFINE CASTLE A,B,C,D + A + D&30+6 + -1 + 0 + -1 + 200000,,D + ,,0 + REPEAT NW-7,0 + B + D + -1 + 0 + -1 + 600000,, + ,,0 + REPEAT NW-7,0 +TERMIN + +CTBI: CASTLE [31,,27][25,,30]200000,14 + CASTLE [137,,135][133,,136]400000,34 + CASTLE [31,,33][34,,32]200000,15 + CASTLE [137,,141][142,,140]400000,35 + +CONSTANTS + +GRT: BLOCK 300 + FS:: +BD1: BLOCK 170 +BD2=.-25 +BD4=BD2+116 +BD5=BD4+116 +LOC BD5+143 + +GHT: BLOCK 1 +PT1: BLOCK 40 +GHF: BLOCK 1 +PT2: BLOCK 40 +MGS: BLOCK 1 +PT3: BLOCK 40 + +LA==14 +VPW: BLOCK LA +VPB: BLOCK LA +VPM: BLOCK 2*LA + +RDT: BLOCK 5 +99S: BLOCK 20 +FAK: BLOCK NW +CMT: BLOCK 200 +CMV: BLOCK 200 +VVAL: BLOCK 1 +VAL: BLOCK 20 +VMV: BLOCK 20 +CMP: BLOCK 20 +CMN: BLOCK 20 +CMO: BLOCK 20 +CMQ: BLOCK 20 + +VARIABLES + +PDL: BLOCK 100 + +MMT: BLOCK 4000 +CTB: BLOCK 10*NW +MVT: BLOCK 6000 + +EFS: + +END IN \ No newline at end of file