TITLE CHECKERS .MLLIT==1 IRP A,,[A,B,C,D,P,V,I,I2] A=.IRPCNT+1 ? TERMIN SOUT=1_33 LOC 41 JSR UUOH LOC 100 ; 29 30 31 32 ; 32 33 34 35 ; 25 26 27 28 ; 27 28 29 30 ; 21 22 23 24 ; 23 24 25 26 ; 17 18 19 20 ; 18 19 20 21 ; 13 14 15 16 ; 14 15 16 17 ; 9 10 11 12 ; 9 10 11 12 ; 5 6 7 8 ; 5 6 7 8 ; 1 2 3 4 ; 0 1 2 3 DEFINE CONC A,B A!B!TERMIN MASK==1_4+1_13.+1_22.+1_31. LEGMF==40 MATERIAL: 0 WPCS: 0 BPCS: 0 WKNGS: 0 BKNGS: 0 EVAL: SETO B, ; EVALUATE POS WITHOUT FURTHER JUMP PENDING EVALCP: ; EVALUATE POS WITH FURTHER JUMP PENDING CAIA P,BPRINT ? .IOT TYIC, ; FOR DEBUGGING ONLY TLZ I,LEGMF IRP Q1,,[WPCS,WPCS,WKNGS,WKNGS]Q2,,[5,4,-5,-4] MOVE Q1(I) CONC JUMPE EV,\<.IRPCNT*2+2> AND -1(P) ; -1 OR DEST OF LAST CAPTURE LSH @(I)[,Q2 ? ,-Q2] AND @(I)[BPCS ? WPCS] ANDCM [MASK] LSH @(I)[,Q2 ? ,-Q2] ANDCM WPCS ? ANDCM BPCS ANDCM [MASK] CONC EV,\<.IRPCNT*2+1>,: JFFO .+2 CONC JRST EV,\<.IRPCNT*2+2>, MOVEI D,4+.IRPCNT ANDCM BIT(A) PUSHJ P,MCEVAL ; MAKE CAPTURE AND RETURN VAL CAMLE V,ALPHA ? JSP D,NEWVAR ; RETURNS TO 1(D) JSP D,DPV ADD V,(P) ? JUMPGE V,EV2A CONC JRST EV,\<.IRPCNT*2+1>, CONC EV,\<.IRPCNT*2+2>,: TERMIN TLNE I,LEGMF ? JRST EV2A SETO EXCH -1(P) AOJE EVMVS XORI I,1 MOVE ALPHA ? EXCH BETA ? MOVEM ALPHA JRST EVAL EVMVS: CAML P,DEPTH ? JRST EV2C IRP Q1,,[WPCS,WPCS,WKNGS,WKNGS]Q2,,[5,4,-5,-4] MOVE Q1(I) CONC JUMPE EV,\<.IRPCNT*2+12> LSH @(I)[,Q2 ? ,-Q2] ANDCM [MASK] ANDCM WPCS ? ANDCM BPCS CONC EV,\<.IRPCNT*2+11>,: JFFO .+2 CONC JRST EV,\<.IRPCNT*2+12>, MOVEI D,.IRPCNT ANDCM BIT(A) PUSHJ P,MMEVAL ; MAKE MOVE AND RETURN VAL OF RESULTING POS CAMLE V,ALPHA ? JSP D,NEWVAR ; RETURNS TO 1(D) JSP D,DPV ADD V,(P) ? JUMPGE V,EV2A CONC JRST EV,\<.IRPCNT*2+11>, CONC EV,\<.IRPCNT*2+12>,: TERMIN HRROI V,-10000.-PDL(P) TLNE I,LEGMF EV2A: MOVE V,ALPHA EV2B: TLNN P,-1 ? JRST EXIT IRP A,,[ALPHA,B,CVAR,MATERIAL,I,BKNGS,WKNGS,BPCS,WPCS,BETA,0] POP P,A ? TERMIN TRNE B,20 ? MOVN V,V CPOPJ: POPJ P, EV2C: XCT (I)[MOVE V,MATERIAL ? MOVN V,MATERIAL] JRST EV2B MMEVAL: JSP C,CCONS TLO I,LEGMF IRP A,,[0,BETA,WPCS,BPCS,WKNGS,BKNGS,I,MATERIAL,CVAR,[[-1]],ALPHA] PUSH P,A ? TERMIN MOVE B,ALPHA ? EXCH B,BETA ? MOVEM B,ALPHA MOVE B,@(I)[@SWMV(D) ? @SBMV(D)] XORM B,WPCS(I) TDNE B,WKNGS(I) ? JRST MMEV2 ; MOVE BY KING AND B,WPCS(I) ; DESTINATION BIT TDNN B,LRANK(I) ? JRST MMEV3 IORM B,WKNGS(I) XCT (I)[AOSA MATERIAL ? SOSA MATERIAL] ; PROMOTING MOVE MMEV2: XORM B,WKNGS(I) MMEV3: XORI I,1 JRST EVAL MCEVAL: JSP C,CCONS TLO I,LEGMF IRP A,,[0,BETA,WPCS,BPCS,WKNGS,BKNGS,I,MATERIAL,B] PUSH P,A ? TERMIN MOVE B,@(I)[@SWCP1-4(D) ? @SBCP1-4(D)] SETCMI I2,-2(I) XORM B,WPCS(I2) ; CLEAR CAPT'D PIECE TDNE B,WKNGS(I2) SKIPA C,(I)[3 ? -3] MOVE C,(I)[2 ? -2] ADDM C,MATERIAL ANDCAM B,WKNGS(I2) ; CLEAR CAPT'D KING IF ANY MOVE B,@(I)[@SWCP2-4(D) ? @SBCP2-4(D)] PUSH P,B ? PUSH P,ALPHA XORM B,WPCS(I) ; MOVE PIECE TDNN B,WKNGS(I) ? JRST .+3 XORM B,WKNGS(I) ? JRST EVALCP ; MOVE KING IF ANY AND B,WPCS(I) ; DESTINATION BIT TDNN B,LRANK(I) ? JRST EVALCP ; TRY FURTHER CAPTURES XCT (I)[AOS MATERIAL ? SOS MATERIAL] ; PROMOTING CAPTURE IORM B,WKNGS(I) SETOM -1(P) XORI I,1 JRST EVAL CCONS: HRROI B,-1 CONS: EXCH B,VARL2+1 ; SAVE MOVE IN PRINCIPAL VARIATION LIST EXCH B,CONS HRLI A,(D) XOR A,(I)[0 ? SETZ] MOVEM A,VARL1-VARL2(B) MOVEM B,CVAR JRST (C) DPV: MOVE B,CVAR JRST DPV1 NEWVAR: MOVEM V,ALPHA MOVE B,CVAR AOJ D, EXCH B,@-2(P) ; NEW VARIATION JUMPLE B,(D) DPV1: MOVE A,B ; RESTORE OLD PV TO FREE STORAGE EXCH A,CONS DPV2: SKIPG C,(B) ? JRST DPV3 SKIPL B,(C) ? JRST DPV2 MOVEM A,(C) ? JRST (D) DPV3: MOVEM A,(B) ? JRST (D) ALPHA: 0 BETA: 0 BIT: REPEAT 44, 1_<43-.RPCNT> SWMV: SP5(A) ? SP4(A) ? SM5(A) ? SM4(A) SBMV: SM5(A) ? SM4(A) ? SP5(A) ? SP4(A) SP5: REPEAT 44, 41_<43-.RPCNT-5> SM4: REPEAT 44, 21_<43-.RPCNT> SP4: REPEAT 44, 21_<43-.RPCNT-4> SM5: REPEAT 44, 41_<43-.RPCNT> LRANK: 17_32. ? 17 SWCP1: SC1P5(A) ? SC1P4(A) SBCP1: SC1M5(A) ? SC1M4(A) ? SC1P5(A) ? SC1P4(A) SWCP2: SC2P5(A) ? SC2P4(A) SBCP2: SC2M5(A) ? SC2M4(A) ? SC2P5(A) ? SC2P4(A) SC1P5: REPEAT 44, 1_<43-.RPCNT-5> SC1M4: REPEAT 44, 1_<43-.RPCNT+4> SC1P4: REPEAT 44, 1_<43-.RPCNT-4> SC1M5: REPEAT 44, 1_<43-.RPCNT+5> SC2P5: REPEAT 44, 2001_<43-.RPCNT-12> SC2M4: REPEAT 44, 401_<43-.RPCNT> SC2P4: REPEAT 44, 401_<43-.RPCNT-10> SC2M5: REPEAT 44, 2001_<43-.RPCNT> THINK: MOVEI VARL2 ? MOVEM CVAR SETOM VARL2 MOVE [EXCH B,VARL2+1] ? MOVSI A,-158. ? MOVEM CONS AOJ ? MOVEM VARL2+1(A) ? AOBJN A,.-2 MOVE [JRST 4,CONS] ? MOVEM VARL2+159. MOVNI 700000 ? MOVEM ALPHA ? MOVEM BETA ? MOVEM PDL JRST EVAL EXIT: MOVE A,VARL2 JUMPL A,RD EXIT1: JUMPL A,EXIT2 XCT (I)[SKIPGE B,VARL1-VARL2(A) ? SKIPL B,VARL1-VARL2(A)] JRST EXIT2 HLRZ D,B ? ANDI D,7 PUSH P,A ? MOVEI A,(B) XOR D,(I)[0 ? 2] ADD A,@MMOVE1 PUSHJ P,MMOVE POP P,A MOVE A,(A) XORI I,1 JRST EXIT1 EXIT2: XORI I,1 ? JRST RD RESET: MOVEI GAMEP ? MOVEM GAMEP MOVE [IBOARD,,WPCS] BLT BKNGS SETZB I,MATERIAL MOVEI P,PDL JRST RD GO: TYIC==1 TYOC==2 .OPEN TYIC,['TTY] .VALUE .OPEN TYOC,[4021,,'TTY] .VALUE JRST RESET UUOH: 0 HLRZ 40 ? CAIE (SOUT) ? .VALUE .SOUT: MOVSI 440700 ? HLLM 40 .SOUT1: ILDB 40 ? JUMPE @UUOH .IOT TYOC, ? JRST .SOUT1 2SP=PUSHJ P,. .IOT TYOC,[40] POPJ P, BPRINT: PUSH P,B SOUT [ASCIZ /C/] MOVSI A,-8 ? MOVSI B,40000 BP1: .IOT TYOC,[15] TRNN A,1 ? 2SP MOVSI C,-4 BP2: MOVEI "0 TDNN B,WKNGS ? TDNE B,BKNGS ? MOVEI "2 TDNE B,WPCS ? ADDI 1 TDNE B,BPCS ? ADDI 2 .IOT TYOC, ? 2SP ROT B,1 AOBJN C,BP2 ROT B,-8 TRNN A,1 ? ROT B,-1 SOUT @BDTAB(A) AOBJN A,BP1 .IOT TYOC,[15] POP P,B POPJ P, BDTAB: [ASCIZ / 32-35/] [ASCIZ / 27-30/] [ASCIZ / 23-26/] [ASCIZ / 18-21/] [ASCIZ / 14-17/] [ASCIZ / 9-12/] [ASCIZ / 5-8/] [ASCIZ / 0-3/] PAT: BLOCK 77 VARL2 -1 PDL: BLOCK 999. CVAR: 0 VARL1: BLOCK 160. VARL2: BLOCK 160. IBOARD: 17757 ? 757740,, ? 0 ? 0 DEPTH: 4*9,, RDNUM: MOVEI A, RDNUM1: .IOT TYIC,B CAIL B,"0 ? CAILE B,"9 ? POPJ P, IMULI A,12 ? ADDI A,-"0 (B) JRST RDNUM1 RD: PUSHJ P,BPRINT MOVSI A,440700 ? MOVEI RD1: .IOT TYIC,B CAIL B,"A ? CAILE B,"Z ? JRST RD2 TLNE A,770000 ? IDPB B,A JRST RD1 RD2: MOVSI A,-NSYMS RD3: AOJ A, ? CAME SYMTAB-1(A) ? AOBJN A,RD3 JUMPG A,RD SKIPE B,SYMTAB(A) ? JRST (B) MOVEI A,SYMTAB-MVS-1(A) ASH A,-1 MOVEI D,(A) PUSHJ P,RDNUM SETCMI A,-44(A) PUSHJ P,MMOVE JRST RD SYMTAB: ASCII /R/ ? RESET ASCII /M/ ? THINK ASCII /U/ ? UNMOVE ASCII /S/ ? SETUP ASCII /D/ ? SETD MVS: ASCII /NE/ ? 0 ASCII /NW/ ? 0 ASCII /SW/ ? 0 ASCII /SE/ ? 0 ASCII /NEJ/ ? 0 ASCII /NWJ/ ? 0 ASCII /SWJ/ ? 0 ASCII /SEJ/ ? 0 NSYMS=<.-SYMTAB>/2 SETD: PUSHJ P,RDNUM IMULI A,10. HRLZM A,DEPTH JRST RD UNMOVE: MOVE A,GAMEP ? HRRZ I2,-4(A) UNMOV2: TLNN A,-1 ? JRST RD CAIE I2,@-4(A) ? JRST UNMOV3 IRP B,,[WPCS,BPCS,WKNGS,BKNGS,I,MATERIAL] POP A,B ? TERMIN JRST UNMOV2 UNMOV3: MOVEM A,GAMEP JRST RD GAMEP: . GAME: BLOCK 1200. MMOVE: MOVE GAMEP IRP A,,[MATERIAL,I,BKNGS,WKNGS,BPCS,WPCS] PUSH A ? TERMIN MOVEM GAMEP MOVE BIT(A) TDNE WPCS ? TDZA I,I ? MOVEI I,1 MMOVE1: SUB A,(D)[5? 4? -5? -4? 12? 10? -12? -10] XOR D,(I)[0 ? 2] CAIGE D,4 ? JRST MMOVE2 MOVE B,@(I)[@SWCP1-4(D) ? @SBCP1-4(D)] SETCMI I2,-2(I) XORM B,WPCS(I2) ; CLEAR CAPT'D PIECE TDNE B,WKNGS(I2) SKIPA C,(I)[3 ? -3] MOVE C,(I)[2 ? -2] ADDM C,MATERIAL ANDCAM B,WKNGS(I2) ; CLEAR CAPT'D KING IF ANY MOVE B,@(I)[@SWCP2-4(D) ? @SBCP2-4(D)] XORM B,WPCS(I) ; MOVE PIECE TDNN B,WKNGS(I) ? JRST .+3 XORM B,WKNGS(I) ? JRST MMOVE4 ; MOVE KING IF ANY AND B,WPCS(I) ; DESTINATION BIT TDNN B,LRANK(I) ? JRST MMOVE4 ; TRY FURTHER CAPTURES XCT (I)[AOS MATERIAL ? SOS MATERIAL] ; PROMOTING CAPTURE IORM B,WKNGS(I) JRST MMOVE4 MMOVE2: MOVE B,@(I)[@SWMV(D) ? @SBMV(D)] XORM B,WPCS(I) TDNE B,WKNGS(I) ? JRST MMOVE3 ; MOVE BY KING AND B,WPCS(I) ; DESTINATION BIT TDNN B,LRANK(I) ? JRST MMOVE4 IORM B,WKNGS(I) XCT (I)[AOSA MATERIAL ? SOSA MATERIAL] ; PROMOTING MOVE MMOVE3: XORM B,WKNGS(I) MMOVE4: XORI I,1 POPJ P, END GO