Last active
June 26, 2018 19:45
-
-
Save TheFausap/a7ef893335715d65c3104f64ef49659c to your computer and use it in GitHub Desktop.
CHESS.144 from DM: AS;CHESS 144
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ; -*-MIDAS-*- | |
| 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(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 ;SECON | |
| ;DARY 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 | |
| MOVE 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,RCWP ;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 RDLM1 | |
| 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 T | |
| ;O 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 FR | |
| ;OM 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 SQUADRES, 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, ;MOT 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) ;SECON | |
| ;D WORD OF DATA | |
| LDB B,[400200,,1(MP)] | |
| 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) ;SPECI | |
| ;AL 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 OF VALUE BEFORE MOVE | |
| ;10 GH2 | |
| ;11 MGS | |
| REL: MOVEI MP,(MP) ;RELEA | |
| ;SE 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 ;BEGIN | |
| ;NING 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 DEVIATION | |
| 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,A6,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:: | |
| ;INITAL BOARD TABLE | |
| DEFINE IBT PT,PC,PR,FS,TS | |
| <PT/20+1>_20,,PT | |
| <<PT/20+1>_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 | |
| <C+100000>,,0 | |
| REPEAT NW-7,0 | |
| B | |
| D | |
| -1 | |
| 0 | |
| -1 | |
| 600000,,<D&30+6> | |
| <C+100000>,,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 | |
| 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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment