mirror of
https://github.com/PDP-10/its.git
synced 2026-01-27 20:47:38 +00:00
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).
This commit is contained in:
committed by
Adam Sampson
parent
b75329a85e
commit
445798ca8d
384
src/agb/ckr.88
Normal file
384
src/agb/ckr.88
Normal file
@@ -0,0 +1,384 @@
|
||||
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
|
||||
Reference in New Issue
Block a user