TITLE CHESS C .SYMTAB 10000. IF1, EXPUNGE MOVST,COMMEN .XCREF P DEC==0 DBG==1 ;0 TO FLUSH SELF CHECKING AND SOME DEBUGGING ROUTINES KILLH==0 ;0 NO KILL HEURISTIC 1 KILL HEURISTIC HSCOD==1 ;HASH CODE FEATURE BOOK==1 ;INCLUDE CODE FOR BOOK OPENINGS UTAPE==1 ;INCLUDE UTAPE ROUTINES DSPLY==1 ;INCLUDE DISPLAY (TS OR NO) DECTS==0 TS==1 ;0 FOR NON TS IFE TS,RELOCATABLE IFN TS,[DEC==1 UTAPE==1] IFN DECTS,[ DEC==1 TS==0 DSPLY==0 DECASA==140 ] LOC 100 IFE DEC,[ IRPS A,,PILPT LINEPOS LPTWAT .GLOBAL A .LIBRQ A TERMIN IRPS A,,A P LPTCHN LPTBSZ .GLOBAL A TERMIN ] ZR=0 A=1 B=2 C=3 D=4 T=5 TT=6 R=7 Q=10 I=11 J=12 S=13 T1=14 T2=15 W=16 P"=17 ;CONSTRAINT TABLE ;WD0 ; 4.9-4.7 CODE 0 DEFENSE 1 MATE STOPPAGE 2 BACK RANK HACK (SQ IS SQ HE MOVES TO) SPINSQ==320700 ;SQUARE INVOLVED NSTRB==100,, ;IF SET IN DPIGT, MEANS CONSTRAINT NOT TO BE CONSIDERED STRONG THREAT DFCNB==100,, ;IF SET IN IDEF ENTRY, INDICATES THIS DEF IS INITIALLY A CONSTRAINT ;AND IS IN SPINT LIST SPINVL==2200 ;CALC LOSS SPCCN==220600 ;CONSTRAINED PC ;WD1 SPNLK==2200 ;RH LINK OR 0 SPINCP==220600 ;PC CAUSING CONSTRAINT IF ONE, ELSE 0 NWCN==2 ;# WDS PER ENTRY ;THREAT TABLE ENTRY NWTHE==2 ;# WDS IN THREAT ENTRY ;WD1 THRTP==360600 ;HIS PIECE POSING THREAT THRTS==270700 ;SQUARE TO MOVE TO THRCD==220500 ;THREAT CODE 0=CAPTURE 1=MULT ATTACK ;2=MATE 3=STRONG ATTACK (ON PINNED OR TRAPPED PIECE) ;4 TRADE THREATNED WHEN BEHIND OR MINOR EXCHANGE ;5 PUSH PASSED PAWN ;6 THR TO TRADE WEAK P ;7 THR TO GET PASSED P (BY PUSHING PAST) ;10 THR TO GET CRADLE TRAP THAUXP==140600 ; IF .NE. 0 INDEX TO AUX THREAT DIS TABLE THRVAL==1400 ;APPARENT GAIN FROM EXECUTION OF THREAT ;WD2 LH THSCF==400000 ;1 IF ONLY ONE WAY FOR HIM TO TAKE THIS THREAT THSTR==200000 ;STRONG (PIECE PINNED OR CONSTRAINED) THQTH==100000 ;QUESTIONABLE IF THIS THREAT REALLY EXISTS ;IE COMPUTE ANS, ETC, BUT DONT DOCK MOVES FOR NOT THRRL==400100 ;ONE OF SEVERAL RELATED CAPTURE THREATS TO CAPTURE SAME PIECE BTHRRL==40000 THANS==370100 ;SET AT THAN IF THREAT ANSWERED BTHANS==20000 ;ANSWERING UNTIL CONFIRMED ETC ;WD2 RH TEMPO VALUE LTHAUXT==63 ;MUST BE ADDRESSED BY THAUXP THAUXT==.-1 ;AUX THREAT DESC TABLE BLOCK LTHAUXT ;4.9 END OF ENTRIES DESC PARTICULAR MOVE ;IF AUX TO CAPT THREAT THAXCD==400300 ;4.8-4.5 AUX DESC CODE 0 SECONDARY ATTACKER 1 PC ATTACKED BY THREATNED MULT ATT THAXPC==320600 ;PIECE INVOLVED THAXV==1400 ;AMT THREAT REDUCED IF PIECE CAPTURED OR BLOCKED ;IF AUX TO MULT ATT THREAT, THAXPC => 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) IFN 0,[ ;COMMENT OUT INCOMPLETE CODE 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