1
0
mirror of https://github.com/PDP-10/its.git synced 2026-01-28 04:57:43 +00:00
Files
PDP-10.its/src/agb/ckr.88
Adam Sampson 445798ca8d CKR - Alan Baisley's checkers game.
MAPS dates AI: AGB; CKR 88 to 1975-12-29 (and earlier versions 25-39 to
1975-12-15).
2018-07-28 12:06:21 +01:00

385 lines
7.9 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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