Skip to content

Instantly share code, notes, and snippets.

@TheFausap
Last active June 26, 2018 19:45
Show Gist options
  • Select an option

  • Save TheFausap/a7ef893335715d65c3104f64ef49659c to your computer and use it in GitHub Desktop.

Select an option

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