1
0
mirror of https://github.com/PDP-10/its.git synced 2026-03-25 09:52:18 +00:00
Files
PDP-10.its/src/chprog/ocaux.224
Lars Brinkhoff c6ae98e915 OCM chess.
2018-02-16 06:55:54 -08:00

8094 lines
126 KiB
Plaintext
Executable File
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.
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
UTYOC==5
UTICOM==6 ;COMMAND FILE READIN FOR CHEOPS
IFN CHEOPS, CHELCH==7 ;CHANNEL TO HOLD CHEOPS LOCK ON
IFN CHNET, CHNETI==10 ;CHAOS NET INPUT
IFN CHNET, CHNETO==11 ;CHAOS NET OUPUT
IOT=40_27.
OPEN=41_27.
CALL=43_27.
OPER=42_27.
CLOSE=OPER 7
TYINT==1
PDLOVI==200000
]
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,,
TIMER=CALLI 22 ;RETURN TIME OF DAY IN JIFFIES
RUNTIM==CALLI 27 ;RETURN RUNNING TIME IN MILLISEC. AC MUST BE 0
]
IFN DSPLY,[
IFE TS,[DISCHN==7
FLGCHN==6
]
DISIZE==1740
]
IFE DEC,[
LPTCHN==5
LPTBSZ==300.
]
TTYCHN==4
APRCHN==3
IFN KLNTS, DDT==774000
.ELSE IFE TS,DDT=34000+IFE DEC,140000
IFE TS+DECTS+KLNTS,[.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 .ZZ
]
CAT: ;CALCULATE ATTACKS
;COMPUTE, AS A FUNCTION FO 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
IFN HSCOD, PUSHJ P,HSKG
MOVE T,[-LPINTB,,PINTB]
MOVEI ZR,1
IRP X,,[BDBLK,BDA1,BDA2,BDA3,BA,WA,ONEB1,ONEB2] ;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,PMOB]
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,,WPNFLS+1]
BLT A,PINT+NPC-1+1
MOVEI A,PINDT-1
MOVEM A,PINFS
CLEARM PCPINS
CLEARM NWPPP
CLEARM NBPPP
MOVE B,[-NPCS,,1]
MCAT1: MOVE R,PCATV(B)
MOVEI W,0
SKIPE A,PIECEL(B)
PUSHJ P,@PIECE(B)
MOVEM W,PDV(B)
AOBJN B,MCAT1
HRLI B,-NPCS
MOVEI I,1
MCAT2: MOVE R,PCATV(B)
MOVEI W,0
SKIPE A,PIECEL(B)
PUSHJ P,@PIECE(B)
MOVEM W,PDV(B)
AOBJN B,MCAT2
PUSHJ P,.CDVLV
MCAT3: CAMN T,[-LPINTB,,PINTB]
JRST MCAT3A
PUSHJ P,MCAT4 ;EXAMINE POSSIBLE PIN
JRST MCAT3
MCAT3A:
MOVE B,[-8,,1]
MCAT8: SKIPE A,PIECEL(B)
PUSHJ P,WPBAK
AOBJN B,MCAT8
MOVE B,[-8,,NPCS+1]
MCAT9: SKIPE A,PIECEL(B)
PUSHJ P,BPBAK
AOBJN B,MCAT9
MCATGZ: PUSHJ P,CPMOB ;COMPUTE PAWN MOBILITY
POP P,T
POP P,R
POP P,I
CPOPJ: POPJ P,
WPBAK: SKIPGE LMGT(B) ;SKIP ON QUEENED (ENTER WITH PIECEL IN A)
WPBAK1: SKIPE PPTP(B)
POPJ P, ;ALREADY KNOWN TO BE P DEF BY P
MOVE T1,PFILE(B) ;ENTER FROM MMICPW
SKIPN WPNFLS-1(T1)
SKIPE WPNFLS+1(T1)
JRST MCAT82
MOVEI T2,3 ;ISOLATED PAWN
MCAT80: MOVEM T2,PPTP(B)
MCAT81: POPJ P,
BPBAK: SKIPGE LMGT(B)
BPBAK1: SKIPE PPTP(B)
POPJ P,
MOVE T1,PFILE(B)
SKIPN BPNFLS-1(T1)
SKIPE BPNFLS+1(T1)
JRST MCAT92
MOVEI T2,3
MCAT90: MOVEM T2,PPTP(B)
MCAT91: 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
JRST MCAT81 ;NOT BACK IF BOTH BLOCKED+WOULD BE DEF SINCE HIS PIECE ATTACKED
MOVE T2,PRANK(B)
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)
JRST MCAT81
JRST MCAT8B
WBKPT1: TLOA D,1
JRST MCAT81
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 PAWN BLOCKED BY OPPONENT
CAIGE T1,BPIECE
JRST MCAT81
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
JRST MCAT81
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
JRST MCAT81 ;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
JRST MCAT81
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
JRST MCAT81
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
JRST MCAT91
MOVE T2,PRANK(B)
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)
JRST MCAT91
JRST MCAT9B
BBKPT1: TLOA D,1
JRST MCAT91
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
JRST MCAT91
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
JRST MCAT91
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
JRST MCAT91
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
JRST MCAT91
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)
JRST MCAT91
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: MOVE T1,PFILE(B) ;CHECK IF WP IN B AT SQ A PASSED ALSO AOS WPNFLS + WNPNFL AS APPROPRIATE
AOS WPNFLS(T1)
IRP X,,[,+1,-1] ;IS IT PASSED?
SKIPE C,@PPT+NPCS!X(B)
CAIGE C,BW-1(A)
JRST .+5
MOVE D,PFILE+NPCS!X(B)
SUB D,T1
MOVMS D
SOJLE D,NOTPPW
TERMIN
MOVE C,PRANK(B)
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]
SKIPG T2,BOARD!X(D)
JRST .+3
SKIPGE SNFBP-PIECE(T2)
JRST NOTPPW
TERMIN
ADDI D,BW
AOJA C,MMWPPL
MMPPW: MOVE T2,PRANK(B) ;MARK PASSED PAWN
SKIPE MMPWNF
TLO T2,400000
MOVEM T2,PPASED(B)
AOSA NWPPP
NOTPPW: AOS WNPNFL(T1)
SKIPG T1,BOARD-BW+1(A) ;SEE IF DEFENDED BY PAWN
JRST .+3
SKIPGE LMGSTD-PIECE(T1)
JRST MMWPDP
SKIPLE T1,BOARD-BW-1(A)
SKIPL LMGSTD-PIECE(T1)
POPJ P,
MMWPDP: SETOM PPTP(B)
POPJ P,
MMWPWN: PUSHJ P,WPPSD
RMWP:
ADDM R,WA+BW+1(A) ;SET UP ATTAKCS
ADD W,WAV+BW+1(A)
DPB B,[BDALR+BW+1(A)]
ADDM R,WA+BW-1(A)
ADD W,WAV+BW-1(A)
DPB B,[BDALL+BW-1(A)]
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)]
POPJ P,
MMWP1: ADDM R,BA+1(A)
ADD W,BAV+1(A)
DPB B,[BDAEPR+1(A)]
POPJ P,
RMWP1: ADDM R,WA+1(A)
ADD W,WAV+1(A)
DPB B,[BDAEPR+1(A)]
POPJ P,
BPPSD: MOVE T1,PFILE(B)
AOS BPNFLS(T1)
IRP X,,[,+1,-1] ;IS IT PASSED?
SKIPE C,@PPT-NPCS!X(B)
CAILE C,1-BW(A)
JRST .+5
MOVE D,PFILE-NPCS!X(B)
SUB D,T1
MOVMS D
SOJLE D,NOTPPB
TERMIN
MOVE C,PRANK(B)
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]
SKIPG T2,BOARD!X(D)
JRST .+3
SKIPGE LMGSTD-PIECE(T2)
JRST NOTPPB
TERMIN
SUBI D,BW
SOJA C,MMBPPL
MMPPB: MOVE T2,RPRANK(B)
SKIPE MMPWNF
TLO T2,400000
MOVEM T2,PPASED(B)
AOSA NBPPP
NOTPPB: AOS BNPNFL(T1)
SKIPG T1,BOARD+BW+1(A) ;SEE IF DEFENDED BY PAWN
JRST .+3
SKIPGE SNFBP-PIECE(T1)
JRST MMBPDP
SKIPLE T1,BOARD+BW-1(A)
SKIPL SNFBP-PIECE(T1)
POPJ P,
MMBPDP: SETOM PPTP(B)
POPJ P,
MMBPWN: PUSHJ P,BPPSD
RMBP: ADDM R,BA-BW+1(A) ;SET UP ATTACKS
ADD W,BAV-BW+1(A)
DPB B,[BDAUR-BW+1(A)]
ADDM R,BA-BW-1(A)
ADD W,BAV-BW-1(A)
DPB B,[BDAUL-BW-1(A)]
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)]
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)
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
TAG: ADDM R,BA+2*BW+1(A)
ADD W,BAV+2*BW+1(A)
DPB B,[BDALR2+2*BW+1(A)]
ADDM R,BA+2*BW-1(A)
ADD W,BAV+2*BW-1(A)
DPB B,[BDALL2+2*BW-1(A)]
ADDM R,BA+-2*BW+1(A)
ADD W,BAV+-2*BW+1(A)
DPB B,[BDAUR2-2*BW+1(A)]
ADDM R,BA-2*BW-1(A)
ADD W,BAV-2*BW-1(A)
DPB B,[BDAUL2-2*BW-1(A)]
ADDM R,BA+BW+2(A)
ADD W,BAV+BW+2(A)
DPB B,[BDALR1+BW+2(A)]
ADDM R,BA+BW-2(A)
ADD W,BAV+BW-2(A)
DPB B,[BDALL1+BW-2(A)]
ADDM R,BA-BW+2(A)
ADD W,BAV-BW+2(A)
DPB B,[BDAUR1-BW+2(A)]
ADDM R,BA-BW-2(A)
ADD W,BAV-BW-2(A)
DPB B,[BDAUL1-BW-2(A)]
POPJ P,
TERMIN
IRPS BA,,BA WA,TAG,,RMBK RMWK,BAV,,BAV WAV
TAG: ADDM R,BA+BW(A)
ADD W,BAV+BW(A)
DPB B,[BDAFB+BW(A)]
ADDM R,BA-BW(A)
ADD W,BAV-BW(A)
DPB B,[BDAFT-BW(A)]
ADDM R,BA+1(A)
ADD W,BAV+1(A)
DPB B,[BDARR+1(A)]
ADDM R,BA-1(A)
ADD W,BAV-1(A)
DPB B,[BDARL-1(A)]
ADDM R,BA+BW+1(A)
ADD W,BAV+BW+1(A)
DPB B,[BDALR+BW+1(A)]
ADDM R,BA+BW-1(A)
ADD W,BAV+BW-1(A)
DPB B,[BDALL+BW-1(A)]
ADDM R,BA-BW+1(A)
ADD W,BAV-BW+1(A)
DPB B,[BDAUR-BW+1(A)]
ADDM R,BA-BW-1(A)
ADD W,BAV-BW-1(A)
DPB B,[BDAUL-BW-1(A)]
POPJ P,
TERMIN
RMPC: LDB I,[430100,,PIECE(S)] ;T SET UP TO RECORD POSSIBLE NEW PINS
SKIPN A,PIECEL(S) ;REMOVE PIECE IN S
ERRTTY [ASCIZ /ALREADY GONE--RMPC/]
IFN HSCOD,[ ;UPDATE HSKEY
MOVE B,RANDN(A)
ROT B,@HROT(S)
XORM B,HSKEY
] MOVE Q,PFILE(S)
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: MOVE B,PRANK(S)
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)
;DROPS THRU
;DROPS IN
RMPCE: MOVN R,PCATV(S)
CLEARB B,Q
PUSHJ P,@RMDTB(S) ;REMOVE BDA WA BA ONEB DUE TO THIS PIECE
MOVN W,PDV(S)
IMUL W,PINVF(S)
ADDM W,@PDVPNR(S)
MOVE A,PIECEL(S)
SKIPN T1,BDBLK(A)
JRST RMPC1 ;NO COMPLICATION DUE TO UNBLOCKING SOMETHING
JFFO T1,RJF1
ERRTTY [ASCIZ /LOSE AT RMPCE/]
RJF1: LDB B,FUJFT1(T2)
ANDCM T1,FUJFT2(T2)
MOVE C,FUJFT3(T2)
MOVE B,BDAST(B)
PUSH P,S
PUSH P,T1
PUSH P,C
LDB I,[430100,,PIECE(B)]
MOVN R,PCATV(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)
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
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 ZR,W
IMUL ZR,PINVF(B)
ADDM ZR,@PDVPNR(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 ZR,W
IMUL ZR,PINVF(Q)
ADDM ZR,@PDVPNR(Q)
MOVE A,PIECEL(Q)
JRST RMPC4A
RMPC4B: POP P,T1
POP P,S
JFFO T1,RJF1
JRST RMPC1A
RMPO2: TLNE D,777000
JSP Q,RMPO3
RMPBS: TLNE D,777
JSP Q,RMPO3
TRNE D,777000
JSP Q,RMPO3
TRNE D,777
JSP Q,RMPO3
JRST (R)
RMPO3: LDB T1,MMP3T1-RMPBS(Q)
MOVE C,@RMPT1-RMPBS1(R)
RMPO3A: ADD A,RDT(C)
SKIPGE T2,BOARD(A)
JRST RMPO3R
DPB T1,ONEBSQ(C)
JUMPE T2,RMPO3A
RMPO3R: MOVE A,PIECEL(S)
JRST (Q)
RMPT1: ,MMP3T3-RMPBS(Q)
0
,MMP3T4-RMPBS(Q)
RMLCT: RMRE ;EXTEND ON RANK OR FILE
RMDE ;EXTEND ON DIAG
RMPC1A: MOVE A,PIECEL(S)
CLEARM BDBLK(A)
RMPC1: SKIPE D,ONEB1(A)
JSP R,RMPO2
RMPBS1: SKIPE D,ONEB2(A)
JSP R,RMPO2
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)
XCT RMINS(I)
XCT ATS(I)
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
XCT RMINS(I)
XCT ATS(I)
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)
XCT RMINS(I)
XCT ATS(I)
JRST RMPC6R
PTPC: SKIPN A,PIECEL(S) ;PUT ON PIECE IN S
ERRTTY [ASCIZ /PIECEL 0-- PTPC/]
LDB I,[430100,,PIECE(S)]
IFN HSCOD,[ ;UPDATE HSKEY
MOVE B,RANDN(A)
ROT B,@HROT(S)
XORM B,HSKEY
] MOVE Q,PFILE(S)
SKIPL LMGT(S)
JRST PTPCB
SETOM MMFL-1(Q)
SETOM MMFL(Q)
SETOM MMFL+1(Q)
SETOM MMPIVF
PTPCB: MOVE B,PRANK(S)
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)
JSP Q,PTPO2
PTPBS1: SKIPE T1,ONEB2(A)
JSP Q,PTPO2
SKIPE T1,BDA1(A)
JSP C,PTPC1
PTPBS3: SKIPE T1,BDA2(A)
JSP C,PTPC1A
MOVE R,PCATV(S)
MOVEI Q,1
MOVE B,S
LDB I,[430100,,PIECE(S)]
MOVEI W,0
PUSHJ P,@RMDTB(S)
MOVEM W,PDV(B)
IMUL W,PINVF(B)
ADDM W,@PDVPNR(B)
POPJ P,
PTPC1A: AND T1,[777700,,] ;ONLY SLIDING DIRECTIONS
PTPC1:
PTPC1D: JFFO T1,FJPTP1
JRST (C)
FJPTP1: LDB J,FJTB1(T2)
ANDCM T1,FJTB2(T2)
PTPC1B: SKIPL SLDPC(J)
JRST PTPC1D
MOVE T2,@FJTB3-PTPBS3(C)
LDB I,[430100,,PIECE(J)]
PTP2: MOVN R,PCATV(J)
MOVE A,PIECEL(J) ;COMPUTE TOTAL PCATV OF WHATS BEING CUT OFF
PTP2E: LDB Q,RDAT(T2)
JUMPE Q,PTP2D
SKIPGE SLDPC(Q)
XCT RMOY2(I)
JRST PTP2D
SUB R,PCATV(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,A ;SAVE SQUARE BLOCKED AT
LDB D,[PTIDS,,PIECE(J)]
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)
PTP2A1: 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
XCT ATS(I)
XCT RMINS(I)
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
XCT RMINS(I)
XCT ATS(I)
JUMPE D,PTPC3C
JRST PTPC3D
PTP2C2: HRRZ D,T2
TRNE T2,4
XCT RMDTT1(I)
JRST PTP3
ADD A,RDT(T2)
XCT RMINS(I)
XCT ATS(I)
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
XCT RMINS(I) ;STILL ATTACKING HERE THRU PAWN
XCT AT(I)
MOVNS R
PTPVL: ADDM W,PDV(J)
MOVE ZR,W
IMUL ZR,PINVF(J)
ADDM ZR,@PDVPNR(J)
MOVE A,PIECEL(J)
PTPVL1: LDB Q,RDAT(T2)
JUMPE Q,PTPVL2
SKIPGE SLDPC(Q)
XCT RMOY2(I)
JRST PTPVL2
ADDM W,PDV(Q)
MOVE ZR,W
IMUL ZR,PINVF(Q)
ADDM ZR,@PDVPNR(Q)
MOVE A,PIECEL(Q)
JRST PTPVL1
PTPVL2: MOVE A,PIECEL(S)
JRST PTPC1D
PTP2T: JRST PTP2A1
XCT RMINS(I)
PTP2C1: HRRZ D,T2
TRNE T2,4
XCT RMDTT1(I)
JRST PTPO1
ADD A,RDT(T2)
XCT RMINS(I)
XCT ATS(I)
JRST PTPO1A
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: MOVEI B,0
TLNE T1,777000
JSP J,PTPO2A
PTPBS2: TLNE T1,777
JSP J,PTPO2A
TRNE T1,777000
JSP J,PTPO2A
TRNE T1,777
JSP J,PTPO2A
JRST (Q)
PTPO2A: MOVE T2,@PTPTB1-PTPBS1(Q)
PTPO2C: ADD A,RDT(T2)
SKIPGE D,BOARD(A)
JRST PTPO2R
DPB B,ONEBSQ(T2)
JUMPE D,PTPO2C
PTPO2R: MOVE A,PIECEL(S)
JRST (J)
PTPTB1: ,MMP3T3-PTPBS2(J)
0
,MMP3T4-PTPBS2(J)
PTPCD: XCT RMPPT5(I) ;MOVING TO OUR FIFTH RANK, STOPPING HIS DOUBLE ADV?
XCT RMPPT3(I)
POPJ P, ;RANK 2 NOT OCC OR NOT HIS P
LDB T2,[BFILE,,BPREL(A)]
SKIPLE T1,@RMPPT7(I) ;SKIP ON HIS DIAG OPP 3RD RANK SQ EMPTY
XCT RMPPT3(I) ;SKIP ON HIS P THERE
JRST PTPCD1
PTPCD2: SETOM MMFL(T2) ;HIS 2ND RANK P MAY BE BACKWARD NOW
SETOM MMPIVF
PTPCD3: SKIPLE T1,@RMPTA(I)
XCT RMPPT3(I)
JRST PTPCD4
SETOM MMPIVF ;MAKING HIS P FORWARD?
SETOM MMFL+1(T2)
PTPCD4: SKIPLE T1,@RMPTB(I)
XCT RMPPT3(I)
POPJ P,
SETOM MMPIVF
SETOM MMFL-1(T2)
POPJ P,
PTPCD1: SKIPLE T1,@RMPPT8(I)
XCT RMPPT3(I)
JRST PTPCD3
JRST PTPCD2
CATC: MMSAVAC
PUSHJ P,ICSTO
PUSHJ P,ATEV
PUSHJ P,.CAT1
MOVEI B,TYO
PUSHJ P,ICCMP
SKIPGE ICERRF
JRST CATC1
CATC2: MMRSAC
POPJ P,
CATC1: IFN DSPLY, PUSHJ P,DISUP
PUSHJ P,TYI
JRST CATC2
CATCSA: BLOCK 17
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 PINT+1
MOVE A,[PINT+1,,PINT+1+1]
BLT A,PINT+NPC+1-1
MOVEI A,PINDT-1
MOVEM A,PINFS
CLEARM PCPINS
SETZM PMOB+1
MOVE A,[PMOB+1,,PMOB+1+1]
BLT A,PMOB+8+1
SETZM PMOB+NPCS+1
MOVE A,[PMOB+NPCS+1,,PMOB+NPCS+1+1]
BLT A,PMOB+NPCS+1+8
MOVE T,[-LPINTB,,PINTB]
MOVE B,[-NPC,,1]
MMP1: SKIPN A,PIECEL(B)
JRST MMP2
SKIPE D,ONEB1(A)
JSP J,MMP3
MMPBS: SKIPE D,ONEB2(A)
JSP J,MMP3
MMP2: AOBJN B,MMP1
MMP2B: CAMN T,[-LPINTB,,PINTB]
JRST MMP2A
PUSHJ P,MCAT4
JRST MMP2B
MMP2A: SKIPL MMPIVF ;SKIP IF PAWNS INVOLVED
JRST MMC2X1
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)
MMIC2G: AOBJN B,MMIC2H
PUSHJ P,MMICP
MMC2X1: PUSHJ P,CPMOB ;COMPUTE PAWN MOBILITY. ALWAYS DO THIS EVEN IF PAWNS NOT
; INVOLVED IN MOVE.
JRST MMICR
CPMOB: MOVE B,[-8,,1] ;COMPUTE PAWN MOBILITY
CPMOB1: SKIPE A,PIECEL(B)
SKIPL LMGT(B)
JRST CPMOB2
SKIPN D,BOARD+BW(A)
JRST CPMOB2 ;NOTHING IN FRONT, LEAVE 0
MOVEI ZR,1
SKIPGE LMGT-PIECE(D)
AOS ZR ;BLOCKED BY PAWN
SKIPGE (D)
ADDI ZR,2 ;HIS
MOVEM ZR,PMOB(B)
CPMOB2: AOBJN B,CPMOB1
MOVE B,[-8,,NPCS+1]
CPMOB3: SKIPE A,PIECEL(B)
SKIPL LMGT(B)
JRST CPMOB4
SKIPN D,BOARD-BW(A)
JRST CPMOB4
MOVEI ZR,1
SKIPGE LMGT-PIECE(D)
AOS ZR
SKIPL (D)
ADDI ZR,2 ;HIS
MOVEM ZR,PMOB(B)
CPMOB4: AOBJN B,CPMOB3
POPJ P,
MMICP: MOVE B,[-8,,1]
MMIC2D: SKIPE A,PIECEL(B)
SKIPL LMGT(B)
JRST MMIC2C
MOVE C,PFILE(B)
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
MOVE C,PFILE(B)
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 WPBAK1
MMICPB: HLRZ B,(P)
MOVE A,PIECEL(B)
JRST BPBAK1
MMP3: TLNE D,777000 ;MMP WD IN D
JSP TT,MMP3D
MMP3BS: TLNE D,777
JSP TT,MMP3D
TRNE D,777000
JSP TT,MMP3D
TRNE D,777
JSP TT,MMP3D
JRST (J)
MMP3D: LDB C,MMP3T1-MMP3BS(TT)
MOVE T2,@MMP3T2-MMPBS(J)
MOVE ZR,@BOARD(C)
XOR ZR,PIECE(B)
JUMPL ZR,(TT)
LDB Q,RDATS(T2)
MOVE ZR,PIECE(Q)
XOR ZR,PIECE(B)
JUMPGE ZR,(TT)
PUSH T,A
HRLM T2,(T)
DPB Q,[PINATP,,(T)]
DPB C,[PINOPS,,(T)]
JRST (TT)
MMP3T1: 331100,,D
MMP3T3: 0
221100,,D
1
111100,,D
2
1100,,D
3
MMP3T4: 4
MMP3T2: ,MMP3T3-MMP3BS(TT)
5
,MMP3T4-MMP3BS(TT)
6
0
7
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
GERR: MOVE P,RMERR1
PUSHJ P,QMTYO
JRST CRR
GSYL: CLEARB B,SQN
MOVE J,[440600,,B]
CLEARM GSYLNF
GSYL4: PUSHJ P,RCHA
CAIL A,"a
CAILE A,"z
JRST .+2
SUBI A,40
SETOM TERMF
CAIN A,40
CLEARM TERMF
CAIN A,177
JRST GERR
MOVEM A,LCHAR
CAIL A,"1
CAILE A,"9
JRST GSYL1
JUMPE B,GSYLN
SUBI A,"0-1 ;POSSIBLE RANK NUMBER
HRROI C,-11.(A)
SKIPE SIDE
MOVN A,C
IMULI A,BW
MOVEM A,SQN
GSYL5: MOVSI C,-NSYMS
CAMN B,SYMT(C)
JRST GSYL6
AOBJN C,.-2
JRST GERR
GSYL1: CAIN A,"X
JRST GSYL1A ;X IS THE SAME AS * SO TAKES CAN WIN.
CAIL A,"A
CAILE A,"Z
JRST GSYL3
SUBI A,40
TLNE J,770000
IDPB A,J
JRST GSYL4
GSYL3: ;HERE ON TERMINATOR
CAIN A,40
JRST [ SKIPE RSAWMN
MOVEI A,11 ;IF SAW MOVE NUMBER, READING GAME AND SPACE=TAB.
JRST .+1]
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
CAIN A,15
CLEARM RSAWMN ;RESET SAW MOVE NUMBER THIS LINE
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: ;FOUND SYMBOL IN SYMBOL TABLE. PSEUDO DISPATCH OR PARAMETER HACKS
IFN BOOK,[CAIL A,BKSMS-SYMT
JRST GSYL6B]
SKIPG B,SQTB(A)
JRST GSYL6C
GSYL6E: MOVEI B,0
PUSHJ P,@SQTB(A)
SKIPGE UREADF
JRST MNLP2R
GSYL6F: PUSHJ P,LATYO
PUSHJ P,CRR
JRST MNLP2R
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
MOVE Q,PFILE+1(S)
CAME Q,T1
CAMN Q,T2
IOR A,C
GSYP4: LSH C,-1
TLNN C,400
AOJA S,GSYP2
JRST GSYP3
RMNI: LSH C,1
SUBI C,2
CAME C,PLYN
PTTY [ASCII /MOVE NUMBER DIFFERS!/]
SETOM RSAWMN ;SAW MOVE NUMBER (MUST BE READING GAME)
JRST RMOVE3
RMOVE: LDB A,[100,,PLYN]
IMULI A,NPCS
MOVEM A,SIDE ;0=>WHITE NPCS=>BLACK
PUSHJ P,CAT
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
RMERR: PUSHJ P,QMTYO
PUSHJ P,TYO
PUSHJ P,CRR
RMOVE3: CLEARB B,CASLF
CLEARB D,TAKES
CLEARB TT,GME
CLEARM TAKES1
CLEARM TAKES2
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
CAIL D,LSYLT
JRST RMVE2A
MOVEM A,SYLT(D)
AOS D
RMVE2A: LSH TT,1
SKIPN SQN
TRO TT,1
RMOVE1: SKIPL GME
JRST RMOVE2
CAIGE D,2
JRST RMOVE3
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
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: SKIPE A,LGLMV
JRST POPJ1
PTTY [ASCII /IMPOSSIBLE!/]
JRST RMERR
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
JRST MNLP
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
CAIE A,BW-1(S)
POPJ P,
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
XCT RDTINS(T2)
JRST LROOK2
LDB T1,STPLT2(T2)
LDB ZR,STPLT3(T2)
CAME T1,ZR
JRST LROOK2
LROOK4: ADD S,RDT(T2)
SKIPGE T1,BOARD(S)
JRST LROOK2
CAMN A,S
JRST POPJ1
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
POPJ P,
LQUEEN: PUSHJ P,LROOK
JRST .+3
JRST POPJ1
LBIS: MOVEM S,LBSS
MOVSI T2,-4
LBIS1: MOVE S,LBSS
XCT BDTINS(T2)
JRST LBIS2
LDB T1,STPLT2+4(T2)
LDB ZR,STPLT3+4(T2)
CAME ZR,T1
JRST LBIS2
LBIS4: ADD S,BDT(T2)
SKIPGE T1,BOARD(S)
JRST LBIS2
CAMN A,S
JRST POPJ1
JUMPE T1,LBIS4
CAIN T1,PIECE(B)
JRST LBIS4
LBIS2: AOBJN T2,LBIS1
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
ASTOP: SETOM CLKCOK
POPJ P,
IFN UTAPE,[
ARST: CLEARM RSAWMN
PUSHJ P,AUREAD
ARST1: SETOM UREADF
POPJ P,
IFN TS,[
AREPLAY: TDZA T2,T2
ACOMP: MOVNI T2,1
MOVEM T2,COMPF
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
SKIPGE COMPF
JRST ACOMP1
PUSHJ P,ARS0 ;DO A RESET.
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
ACOMP1: CLEARM COBW ;COMPARE MODE.
CLEARM COWW
CLEARM COBB
CLEARM COWB
MOVEI A,ACMP
MOVEM A,GSW
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
ROPNRD: .OPEN UTYIC,UTIN
POPJ P,
JRST POPJ1
UTIN: (SIXBIT /DSK/)
SIXBIT /TEST/
SIXBIT /GAME/
0
OPNWR: MOVEM A,UTIN+1
MOVEM B,UTIN+2
.OPEN UTYOC,UTIN
POPJ P,
JRST POPJ1
FILE: .CLOSE UTYOC,
JRST POPJ1
]
]
]
IFN DECTS,[
AWRB: SKIPA T2,[13]
AFILE: MOVEI T2,1
HRRM T2,AWRT1
PUSHJ P,AFILER
AFILEW: RELEASE UTYOC,
SETZM UTINT
POPJ P,
AFILER: RELEASE UTYIC,
SETZM UREADF
POPJ P,
AWRT: SETZM UTINT
PUSHJ P,GFILE
AWRT1: INIT UTYOC,1
DEVNAM: SIXBIT /DSK/
XWD 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
ARDB: SKIPA T2,[13]
AUREAD: MOVEI T2,1
HRRM T2,AURD1
SETZM UREADF
PUSHJ P,GFILE
MOVE A,DEVNAM
MOVEM A,DEVNM1
AURD1: INIT UTYIC,1
DEVNM1: SIXBIT /DSK/
XWD 0,UTYII
ERRTTY [ASCII /DEVICE 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 FILENAMEXTENSION
HLLM B,CFILE+1 ;...
POPJ P, ;TRA 1,4
TERMF: 0
FSYL: SKIPE TERMF
JRST GERR
SETZB T1,B
MOVE C,[XWD 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,[XWD 10600,B-1]
JRST FSYL
POPJ P,
ASAVE: PUSHJ P,AWRT
MOVEI B,UWD
SETOM PMRDF
PUSHJ P,APG6
AFILR1: JRST AFILEW
]
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,
ALIST: MOVE B,PNTS ;LIST ALL PSEUDOS
PUSHJ P,DCRR
MOVSI J,SYMPS-BKSMS
ALIST1: MOVE D,SYMPS(J)
MOVE R,[440600,,D]
ALIST2: ILDB A,R
ADDI A,40
CAIE A,40
PUSHJ P,(B)
TLNE R,770000
JUMPN A,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 ;SET ESTIMATE TO BRACKET INITAL A-B AROUND
MOVEM C,EST
SETOM ESTSW
MOVE T1,PLYN
MOVEM T1,SETESP
POPJ P,
;;AHPV
AHPV: SETOM DISSUP ;SO DISPLAY WONT CLOBBER
MOVE B,TRPSW
AHPPV: PUSHJ P,AHLOOK
POPJ P,
HRRZM R,AHPTM4
SOUT AHPVT
PUSH P,J
PUSH P,Q
PUSH P,R
PUSH P,D
PUSH P,C
PUSH P,NHSW
PUSH P,B ;MUST BE LAST
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: PUSHJ P,LMGXR
AOS LGLMST
HRRZS T1,LGLMST
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
CLEARM 1(T1) ;PLAUS #
MOVEM C,2(T1) ;HASH KEY OF NEXT POS
MOVEM D,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. IN HT
/
AHPTM: 0
AHPTM1: 0
AHPTM2: 0
AHPTM4: 0
AHPTM5: 0
AHLOOK: LDB I,[100,,PLYN]
PUSHJ P,HASHR
JFCL
MOVE R,GAMP
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 J,HSTB(R) ;HSTB-1/ 0
JRST POPJ1
AHPPV2: MOVE T1,LGLMST
AHPPV7: CAIN T1,1(P) ;FIND ANOTHER MV INVESTIGATED (NOT NECC. NEXT IN OCM)
JRST AHPPVD
SKIPL 1(T1)
JRST AHPPV8 ;THIS ONE NOT LOOKED AT YET
AHPPV9: ADDI T1,NWDPM
JRST AHPPV7
AHPPV8: PUSHJ P,AHPP1
MOVE B,BKTM2
MOVE B,(B)
SKIPGE AHPTM5
SOUT [ASCIZ /-MAIN-/]
JRST AHPP2
AHPP1: MOVE Q,T1 ;T1 POINTS AT MOVE ENTRY BLOCK ON PDL
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
CLEARM AHPTM5
AOSA AHPTM
AHPP3: CLEARM AHPTM
SETOM AHPTM1
AHPPVC: PUSHJ P,AHLOOK
JRST AHPPVA ;NOT FOUND
AOSE AHPTM1
JRST AHPP3A
MOVEM D,AHPTM2 ;FIRST TIME THRU, SAVE VALUE
HRRZ ZR,T2
CAMN ZR,AHPTM4
SETOM AHPTM5
AHPP3A: EXCH J,(P)
JUMPE J,AHPP4A
CAME J,C
ERRTTY [ASCIZ /FALSE HASH MATCH/] ;IF GET HERE, AHPTM1 HAS NUMBER PLIES INTO
; PV LOSSAGE OCURRED
AHPP4A: JUMPL R,AHPPVB ;MOVE NOT ACTUALLY PLAYED, JUST ANSWERS ALL
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: PUSHJ P,TMOVE2 ;USES T1
ERRTTY [ASCIZ /HASH TBL MV ILLEGAL- AHPV/]
AOS AHPTM
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: ;GAMP IN T1
PUSHJ P,RECMP
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?/]
LDB T1,[HTVCOD,,AHPTM2]
SOUT AHPXT(T1)
HRRE A,AHPTM2
PUSHJ P,DPT
PUSHJ P,DTAB
PUSHJ P,DCRR
JRST AHPPV2
AHPXT: ASCII /=!/
ASCII />=!/
ASCII /<=!/
ASCII /G!/
ASCII /S!/
ASCII /IN!/
ASCII /OUT!/
ASCII /?!/
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
LDB T1,[HTVCOD,,D]
SOUT AHPXT(T1)
HRRE A,D
PUSHJ P,DPT
PUSHJ P,DCRR
IFN DSPLY,[
SKIPL GETTY
SETOM DISSUP
]
POPJ P,
HK1V: 4 ;BASIC SETD
ASETD: PUSHJ P,GETNUM
SETDR: MOVE A,FDCUT
SUB A,HK1V
ADD A,C
MOVEM A,FDCUT
MOVEM C,HK1V
PSRET: POPJ P,
ASETW: SKIPE EQSGNF
JRST ASETWA
MOVEI I,0
ASETW1: PUSHJ P,GETNUM
JUMPLE C,ASETW1
MOVEM C,SBR(I)
SKIPN GME
AOJA I,ASETW1
ASETW2: CAIL I,SBRLNG-1
POPJ P,
MOVE A,SBR(I)
MOVEM A,SBR+1(I)
AOJA I,ASETW2
ASETWA: MOVEI B,TYO
PSETW: SETZM ASTWF
PUSH P,[0]
MOVEI I,SBRLNG ;LENGTH OF DEPTH VECTOR
MOVE T1,SBR-1(I) ;LAST ENTRY
ASETW3: CAME T1,SBR-1(I)
SETOM ASTWF
SKIPE ASTWF
PUSH P,SBR(I) ;PUSH FROB IF HAVE SEEN ONE DIFFERENT
MOVE T1,SBR-1(I)
SOJN I,ASETW3
MOVE A,SBR
ASETW4: PUSH P,A
PUSHJ P,DSPACE
POP P,A
PUSHJ P,DPT
POP P,A
JUMPE A,CPOPJ
JRST ASETW4
ASTWF: 0
IFE DECTS,[
ASPARM: PUSHJ P,GETNUM
CAIL C,NPARS
JRST ASPAR1
MOVE T1,HK1V
MOVEM T1,PARD(C)
MOVE T1,MCFB
MOVEM T1,PARF(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,
APPAR: MOVEI B,TYO
PUSHJ P,DCRR
MOVEI C,0
APPAR1: SOUT [ASCIZ /SET #/]
MOVE A,C
PUSHJ P,DPT
SOUT [ASCIZ /, SETD= /]
MOVE A,PARD(C)
PUSHJ P,DPT
SOUT [ASCIZ /, SETF= /]
MOVE A,PARF(C)
PUSHJ P,DPT
SOUT [ASCIZ /, SETW= /]
MOVE T2,C
IMULI T2,SBRLNG
MOVEI S,SBRLNG-1(T2)
SETZM ASTWF
PUSH P,[0] ;MARKS PLACE ON STACK
MOVE T1,PARW(S)
APPAL1: CAME T1,PARW(S)
SETOM ASTWF
SKIPE ASTWF
PUSH P,PARW+1(S)
MOVE T1,PARW(S)
CAMLE S,T2
SOJA S,APPAL1
MOVE A,PARW(T2)
APPAL2: PUSH P,A
PUSHJ P,DSPACE
POP P,A
PUSHJ P,DPT
POP P,A
JUMPN A,APPAL2
PUSHJ P,DCRR
CAIGE C,NPARS-1
AOJA C,APPAR1
SOUT [ASCIZ /BASE PARAMETER SET /]
MOVE A,BASPAR
PUSHJ P,DPT
PUSHJ P,DCRR
POPJ P,
]
GETNUM: MOVEI C,0
SETZM GME
JRST GSYLN1
GETONM: MOVEI C,0
GETNM1: PUSHJ P,RCHA
CAIN A,177
JRST GERR
CAIL A,"0
CAILE A,"9
POPJ P,
IMULI C,10
ADDI C,-"0(A)
JRST GETNM1
PBOARD: MOVE B,PNTS
JRST BDOUT
MCFB: 2 ;MAX NUM FEEDOVERS IN A LINE
ASETF: PUSHJ P,GETNUM
SETFR: MOVE A,HK1V
ADD A,C
AOS A
MOVEM A,FDCUT
MOVEM C,MCFB
POPJ P,
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)
ABKERR: MOVEI B,TYO
ISOUT [.ASCII /LAST V *B!BKLVAR, LAST L *B!BKLLEV
/]
POPJ P,
BKLVAR: 0 ;LAST SYM WITH V SEEN
BKLLEV: 0 ;LAST SYM WITH L SEEN
BSYMPR: -1
BKFS: 0
BOOKF1: 0 ;IN BOOK READIN IN -1
BKTM1: 0
BKTM3: 0
BOOKF3: 0 ;MAKE MOVE FLAG
BKV: PUSHJ P,BYMG
JRST BKV1 ;MDV
MOVEM B,BKLVAR
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 MNLP2R
PUSHJ P,UNMOVE
JRST BKML
BKM: PUSHJ P,BYMG
JRST BKM1
PTTY [ASCII /UNDEFINED MULTIPLE END!/]
JRST BKV2
BKM1: MOVEM B,BKLLEV
BKM1A: 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 BKM1A
BKM2: PTTY [ASCII /ATTEMPT TO RETURN TO HIGHER PLYN!/]
JRST BKV1
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
HLRO ZR,B
MOVNS ZR
CAIL ZR,BKSS/6
PTTY [ASCIZ /BOOK OVERFLOW/]
PUSHJ P,UREDB
MOVEM A,BBK(B)
AOBJN B,.-2
PUSHJ P,UREDB
MOVE B,A
HLRO ZR,B
MOVNS ZR
CAIL ZR,BMXS
PTTY [ASCIZ /BOOK SYMBOL TABLE OVERFLOW/]
PUSHJ P,UREDB
MOVEM A,BKSMTV(B)
AOBJN B,.-2
IFN TS, .CLOSE UTYIC,
IFN DECTS,[
RELEASE UTYIC,
CLEARM UREADF
]
JRST PSRET
ACBOOK: SETOM UREADF ;CONTINUE READING BOOK
JRST ACBOK1
ARBOOK: SETOM BSYMPR
CLEARM BKSMT
CLEARM BKFS ;RESET BOOK
ACBOK1: SETOM BOOKF1
BKML: MOVE P,[-PDLL,,PDL-1]
IFN CHEOPS,[
SKIPGE CKBOOK
PUSHJ P,CCBKCK ;CHECK BOOK POSITION WITH CHEOPS FOR REASONABLENESS
]
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
JRST BKMM2
BKFND: CLEARM BOOKF3
MOVEM A,BKTM1
BKMM2: MOVEI A,BKME ;RET MOVE NO IN C THAT CORRESP TO STANDARD MOVE IN A
CMPM: PUSH P,BKF2R ;ENTRY HERE.
MOVEM A,BKF2R
MOVEM P,BKTM2
CLEARM LMGD ;MAKE SURE THAT LMG AT LEAST HAS A CHANCE.
CLEARM LMGD2
LDB I,[100,,PLYN]
PUSHJ P,LMG
ERRTTY [ASCII /LMG RETURNED!/]
BKME: PUSHJ P,LMGXR
HRRZ A,LGLMST
AOS A
SKIPGE BOOKF3
JRST BKMM1
LDB T1,[MPC,,BKTM1]
LDB T2,[MPTO,,BKTM1]
MOVEI C,0
BKMEL: CAIN A,1(P)
JRST BKME5
HRRZ B,(A)
CAIL B,376
JRST BKME1
CAME B,T2
JRST BKMEL1
HLRZ B,(A)
CAMN B,T1
JRST BKME4
BKMEL1: ADDI A,NWDPM
AOJA C,BKMEL
BKME4: MOVE A,BKTM1
CMPMX1: MOVE P,BKTM2
POP P,BKF2R
JRST POPJ1
BKME5: MOVE A,BKTM1
CMPMX: MOVE P,BKTM2
POP P,BKF2R
POPJ P,
BKME1: LDB D,[300,,BKTM1]
JUMPE D,BKMEL1
CAIG D,2
CAIE B,375(D)
JRST BKMEL1
JRST BKME4 ;FOUND MOVE
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
IFN CHEOPS,[
CCBKCK: MMSAVAC
CLEARM CHXSTM ;CHECK BOOK POSITION FOR REASONABILITY WITH CHEOPS
MOVEI A,20000 ;INITIALIZE ALPHA AND BETA
MOVNM A,CHXIA
MOVEM A,CHXIB
MOVEI C,3
MOVEM C,CHXD
CCBKC1: PUSHJ P,ACLPS3
PUSHJ P,ACSTRT
PUSHJ P,HCHGV
MOVM R,CHXVAL
CAMGE R,CKBKEP
JRST CCBKCX ;OK
AOS C,CHXD
CAIG C,5
JRST CCBKC1 ;IF DOESNT CHECK OUT, TRY DEEPER SEARCH
PUSHJ P,DISUP
PUSHJ P,ACTPR
PUSHJ P,TYITTY
SETOM UREADF ;START READING BOOK AGAIN
CCBKCX: MMRSAC
POPJ P,
]
]
BKF2R: 0 ;FLAG TO LMG TO RETURN TO VARIOUS HACKS IF .NE. 0
BKTM2: 0 ;PDL LVL ASSOC WITH ABOVE
CKBOOK: 0 ;-1 REALLY USING CHEOPS TO CHECK BOOK FOR REASONABILITY
CKBKEP: 20 ;THRESHHOLD FOR BOOK CHECKING. IF ONE SIDE HAS ADVANTAGE MORE THAN
; THIS, SOMEONE MADE A BLUNDER.
ADRAW: MOVEI B,TYO
MOVE T1,HACKVV
MOVE T2,GSW
CAIE T2,MNLPA
CAIN T2,HACK5
JRST RMERR
CAIE T2,HACK4
MOVNS T1
MOVE T2,PLYN
CAIG T2,20
JRST ADRWD
CAIG T2,50
CAIL T1,105
SKIPA
JRST ADRWD
CAMG T1,[-105]
JRST ADRWD
SOUT [ASCII / ACCEPT !/]
POPJ P,
ADRWD: SOUT [ASCII / DECLINE !/]
POPJ P,
IFE DECTS,[
IFN DEC-TS+KLNTS, PILPT: POPJ P,
IFN TS,[
PILPT: AOS LINEPOS
CAIN A,15
CLEARM LINEPOS
.IOT LPTC,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,
]
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 ;PUSH QRP
MOVEI T1,WKR-1
MOVEM T1,BOARD+4*BW+8
MOVEI T1,3 ;NEW RANK
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-<WKR-6>
ASPOTP: ADDI T1,<WKR-6>-<WKING+2>
ASPOTB: ADDI T1,<WKING+2>-<WKING+3>
ASPOTN: ADDI T1,<WKING+3>-<WKING+1>
ASPOTQ: ADDI T1,<WKING+1>
SKIPE ASSIDE
ADDI T1,BPV-1
SKIPN T2,PIECEL-PIECE(T1)
JRST ASPOT3
IDPB A,Q
MOVN A,RPVAL-PIECE(T1)
ADDM A,@PBALP-PIECE(T1)
SOS @PCCPNR-PIECE(T1)
SOS @NPCPT-PIECE(T1)
SOS @NPCP1-PIECE(T1)
SETZM PIECEL-PIECE(T1)
SETZM BOARD(T2)
IFN BOOK, 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
IFN TS,[
FSTEP: MOVE A,PLYN ;STEP TO NEXT POSITION IN GAME READ. DO IT BY RESET ING,
AOS A ; READING IN GAME, THEN RESETING TO DESIRED PLY #
MOVEM A,FSTEM1 ;DESIRED PLY #
PUSHJ P,ROPNRD
JRST FNF
PUSHJ P,ARS0
SETOM UREADF
MOVEI A,FSTEP1
MOVEM A,EOFTRP
JRST MNLP ;FORCE RETURN, ALLOW GAME TO READ IN AGAIN
; NO REDISPLAY, THO.
FSTEP1: MOVE A,FSTEM1
MOVEM A,UNPLYN
PUSHJ P,ARS3
JRST MNLP2
FSTEM1: 0
]
ARESET: CLEARM HACKVV
SKIPL GME
JRST ARS2
ARS0: SETZM UNPLYN
IFE DECTS,[
SETOM MSPC
CLEARM LPCSLW ;DONT ALLOW PARAMETER CHANGES IN FIRST FEW MOVES
]
ARS3: MOVE A,PLYN
CAMG A,UNPLYN
JRST ARS1
PUSHJ P,UNMOVE
JRST ARS3
UNPLYN: 0
ARS1: SETOM CLKCOK
CLEARM WCLOCK
CLEARM BCLOCK
CLEARM QDCOF
CLEARM LPSLSH ;LAST PLY # OUTPUT WITH BACKSLASHES ON WALLP
; MOVN ZR,PDV+WKING+1-PIECE
; IMUL ZR,PINVF+WKING+1-PIECE
; ADDM ZR,@PDVPNR+WKING+1-PIECE
; MOVN ZR,PDV+BKING+1-PIECE
; IMUL ZR,PINVF+BKING+1-PIECE
; ADDM ZR,@PDVPNR+BKING+1-PIECE
; 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,.CAT1
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,PILPT
SKIPN C
MOVEI A,TYO
SKIPGE C
MOVEI A,PPA
MOVEM A,PNTS
IFN TS,[
SKIPLE C
JRST WALP2
SKIPN WALLP
.CLOSE LPTC,
] JRST PSRET
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)
SOS @PCCPNR(B)
LDB I,[430100,,PIECE(B)]
MOVN T2,RPVAL(B)
ADDM T2,@PBALP(B)
SKIPGE RFPCS(B)
XCT MMT5+1(I)
ACLR2: AOBJN B,ACLR1
.CAT1X: PUSHJ P,ATEV
JRST .CAT1
IFN UTAPE,[
AXPOS: PUSHJ P,AWRT
MOVEI B,UWD
PUSHJ P,XBDOUT
JRST AFILR1
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
SETOM POSRDI
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 T1,PLYN
MOVEM T1,LPSLSH ;TELL HACK1 NOT TO PRINT THIS
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)
AOS @PCCPNR-PIECE(D)
MOVE T2,RPVAL-PIECE(D)
ADDM T2,@PBALP-PIECE(D)
LDB I,[430100,,(D)]
CLEARM NMOVES-PIECE(D)
SKIPGE LMGT-PIECE(D)
JRST APUT6
MOVE T2,RPRANK-PIECE(D)
SOJN T2,APUT7A ;NOT ON ITS FIRST RANK
MOVE ZR,PFILE-PIECE(D)
LDB T2,[PTID,,PIECE-PIECE(D)]
CAMN ZR,APUTT1(T2)
JRST APUT7
CAME ZR,APUTT2(T2)
APUT7A: AOS NMOVES-PIECE(D) ;NOT ON "HOME" SQUARE
APUT7: SKIPGE RFPCS-PIECE(D)
XCT UMT5+1(I)
SKIPGE RPIECE-PIECE(D)
AOS NMOVES-PIECE(D) ;NO CASTLING LEAVE THIS IN UNTIL ROOKS GUARENTTED TO
;GET ASSIGNED RIGHT PIECE NOS
IFN BOOK, SETZM UBKF ;BOOK LOSES
POPJ P,
APUT6: XCT APUTO(I) ;SKIP IF PAWN ON SECOND RANK
AOS NMOVES-PIECE(D)
JRST APUT7
APUTT1: -1 ;"HOME" FILE FOR PC
1
2
0
4
3
APUTT2: 0 ;OTHER HOME FILE
6
5
7
-1
-1
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 @PCCPNR(B)
SOS @NPCPT(B)
SOS @NPCP1(B)
SETZM BOARD(T)
SETZM PIECEL(B)
MOVN T2,RPVAL(B)
ADDM T2,@PBALP(B)
SKIPGE RFPCS(B)
XCT MMT5+1(I)
JRST POPIJ
WALLP: 0
AWALLP: PUSHJ P,GETNUM
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
SKIPG PNT
JRST GERR
MOVEI C,0
PUSHJ P,PNT2
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: SKIPG .PNT
.CLOSE LPTC,
JRST PSRET
]
PPA: IFE DEC-TS,[SKIPE WALLP
PUSHJ P,PILPT]
UWD:
IFN UTAPE,[
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
SETZM LPTFF+2
SETZM LPTFF+3
ENTER LPTC,LPTFF
JRST GERR
MOVEI T1,LPTBUF
EXCH T1,JOBFF
OUTBUF LPTC,1
MOVEM T1,JOBFF
SETOM LPTINT
JRST PSRET
AWALP1: RELEASE LPTC,
JRST PSRET
LPTINT: 0
LPTO: BLOCK 3
LPTFF: SIXBIT /WALLPA/
SIXBIT /PER/
0
0
LPTBUF: BLOCK 203
PPA: SKIPE WALLP
PUSHJ P,PILPT
UWD:UWRB:
SKIPN UTINT
POPJ P,
SOSG UTYOO+2
OUTPUT UTYOC,
IDPB A,UTYOO+1
POPJ P,
;UWRB: JUMPGE A,CPOPJ
; PUSH P,A
; MOVE A,(A)
; PUSHJ P,UWD
; POP P,A
; AOBJN A,UWRB
; POPJ P,
]
AKPTR: PUSHJ P,GETNUM ;"CRITICAL POSITION" TRACE MODE
MOVEI I,3
JUMPE C,AKPU1 ;UNTRACE
EXCH C,AKPTSW
JUMPN C,CPOPJ ;TRACE PATCHES ALREADY IN
MOVE R,[-KPCHL,,KPATCH-1]
PUSHJ P,ATRL
POPJ P,
AKPU1: PUSHJ P,AUTR
POPJ P,
AKPTSW: 0
KPCHL==100
KPATCH: BLOCK KPCHL ;BLOCK USED FOR KPTR MODE.
TRTYO: PUSH P,A
HRRZ A,TRTBFP
CAIL A,TRTBF+TRTBSZ
JRST POPAJ
POP P,A
IDPB A,TRTBFP
POPJ P,
TRTBFP: 440700,,TRTBF
TUTSPF: 0 ;SETOM ED IF STUFF HAS APPEARED IN TRTBF
TRTBSZ==40 ;SIZE OF TRACE TTY OUTPUT BUFFER IN WDS
TRTBF: BLOCK TRTBSZ+1
ATRACE: SKIPL GME
TDZA I,I
MOVEI I,1
MOVEM I,TRCSW1
SKIPGE GME
JRST ASTRC5 ;TRACE STATEV
PUSHJ P,RMOVE
JRST MNLP2R
LDB T1,[MPC,,A]
MOVEM T1,TPIECE
LDB T1,[MPTO,,A]
MOVEM T1,TSQ
MOVE I,TRCSW1
ASTRC1: MOVE R,[-TPCHL,,TPATCH-1]
AOSE TSSW
ERRTTY [ASCIZ /ALREADY PATCHED?/]
PUSHJ P,ATRL
JUMPN I,ATRC1
MOVE T1,[JRST ATRSS1]
EXCH T1,TRS1
MOVEM T1,ITRS1
MOVE T1,[JRST ATRSS2]
EXCH T1,TRS2
MOVEM T1,ITRS2
ATRC1: JUMPN I,ASTRC4 ;STATEV TRACE, OR AFTER HACK.
MOVEI A,LPEXIT
MOVEM A,BKF2R
PUSH P,HK1V ;STANDARD PMG TRACE MODE
PUSH P,NHSW
SETOM NHSW ;SAVE H.T.
PUSHJ P,HACK1
POP P,NHSW
POP P,HK1V
MOVE I,TRCSW1
MOVE T1,ITRS1
MOVEM T1,TRS1
MOVE T1,ITRS2
MOVEM T1,TRS2
ASTRC3: PUSHJ P,AUTR
SETOM TSSW
CAIG I,1
JRST MNLP
POPJ P,
ASTRC5: MOVE S,PCBAL
ADD S,PNBAL
ADD S,PCBAL+1
ADD S,PNBAL+1
MOVEM S,PCRAT1
MOVE S,PCBAL
SUB S,PCBAL+1
MOVEM S,PCRAT2
MOVE S,PNBAL
SUB S,PNBAL+1
MOVEM S,PNRAT2
JRST ASTRC1
AUTR: MOVE T1,ATRTT1(I) ;UNTRACE LOOP
AUTR1: HLRZ T2,@ATRTT2(I) ;UNTRACE
LDB C,[331100,,-1(T2)]
CAIN C,JRST_-27.
JRST AUTR2
MOVE C,TUUT-4(C)
DPB C,[271500,,-1(T2)]
AUTR3: AOBJN T1,AUTR1
POPJ P,
AUTR2: HRRZ C,-1(T2)
MOVE C,1(C)
MOVEM C,-1(T2)
JRST AUTR3
ATRL: MOVE T1,ATRTT1(I) ;PATCH LOOP PUSH POINTER TO PATCH SPACE ALREADY IN R
ATRL1: HLRZ T2,@ATRTT2(I)
CAIN I,3
JRST [ MOVSI C,(TSOUT) ;USE TSOUT S IN BUFFERED TRACE MODE S
JRST ATRL1C]
LDB C,[271500,,-1(T2)]
MOVSI D,-LTUUT
CAMN C,TUUT(D)
JRST ATRL2 ;RIGHT FLAVOR, REPLACE WITH UUO
AOBJN D,.-2
ATRL1B: MOVSI C,(12000,,) ;UUO 12 JUST PRINTS HACK
ATRL1C: 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
POPJ P,
ATRL2: MOVEI D,4(D)
DPB D,[331100,,-1(T2)]
JRST ATRL3
ATRSS1: SETOM TPSW
HRRZ T1,B
CAMN A,TSQ
CAME T1,TPIECE
CLEARM TPSW
SKIPE TPSW
TM: JFCL
ITRS1: 0
JRST TRS1 1
ATRSS2: CLEARM TPSW
HRRZ T1,B
SKIPE TPIECE
CAMN T1,TPIECE
TP: SETOM TPSW
ITRS2: 0
JRST TRS2+1
ASTRC4: SETOM TPSW
CAIL I,2
POPJ P,
CLEARM CPCDVL
CLEARM PDVDF
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 1 STATEV 2 AFTER HACK
; 3 "CRITICAL POSITION" TRACE MODE (DOES NOT GET STORED IN TRCSW1,
; BUT USED TO REF TUUT, ETC)
TPCHL==200
TPATCH: BLOCK TPCHL ;SPACE FOR PATCHES TRACE PUTS IN
TUUT: <MOVEI R,>_-<18.+5> ;UUO 4
<ADDI R,>_-23.
<SUBI R,>_-23.
<MOVE R,>_-23.
<ADD R,>_-23.
<SUB R,>_-23.
LTUUT==.-TUUT
ATRTT1: -LTRT,,
-LSTRT,,
-LSTRT,,
-LTTRT,,
ATRTT2: TRT(T1)
STRT(T1)
STRT(T1)
TTRT(T1)
ATRTT3: TRT(C)
STRT(C)
STRT(C)
TTRT(C)
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
IFN TS, IMULI C,3 ;CONVERT TO 30 THS
MOVEM C,(T1)
JRST PSRET
]
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,
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
IFE KLNTS,[
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
JRST [ SETOM QTF
CLEARM EOFTRP
JRST .+1]
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
TYOTTY:
IFE TS+DECTS+KLNTS,[
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 KLNTS,[
PUSH P,A
ANDI A,177
PUSHJ P,XDTCM
POP P,A
POPJ P,
]
IFN TS,[
TYO1: SKIPGE TTYOFF
POPJ P,
RTYO: PUSH P,A
ANDI A,177
CAIN A,12
JRST POPAJ
CAIN A,15
JRST [ POP P,A
JRST RCR]
CAIL A,40
AOS LINPOS
MOVE A,LINPOS
CAML A,LINEL
PUSHJ P,RCR
MOVE A,(P)
ANDI A,177
RTYO1: .IOT TYOC,A
JRST POPAJ
RCR: CLEARM LINPOS ;REALLY DO A CR
PUSHJ P,[ SKIPGE TVFLG
JRST TVCR
MOVEI A,15
PUSH P,A
JRST RTYO1]
.CALL [ SETZ
SIXBIT /RCPOS/
1000,,TYOC
402000,,A]
.VALUE
HLRZS A
ADDI A,1
CAMGE A,SVSIZ
POPJ P,
PUSH P,A
SKIPN MORE
JRST RTYOM1
;CAN'T USE SOUT BECAUSE RECURSIVE SOUT DOESNT WIN.
IRPC CH,,--MORE--
IOT TYOC,["CH]
TERMIN
PUSHJ P,TYITTY
.IOT TYOC,[^P]
.IOT TYOC,["H]
.IOT TYOC,[8] ;HORIZONAL POSITION TO 0
.IOT TYOC,[^P]
.IOT TYOC,["L] ;CLEAR OFF --MORE--
RTYOM1: PUSHJ P,TOS
SKIPGE TVFLG
JRST [ PUSHJ P,TVCEOL
JRST RTYOM2]
.IOT TYOC,[^P]
.IOT TYOC,["L] ;CLEAR NEW TOP LINE
RTYOM2: POP P,A
POPJ P,
TOS: .IOT TYOC,[^P] ;POSITION CURSOR TO "TOP OF SCREEN"
.IOT TYOC,["V]
MOVE A,TOPVP
ADDI A,10
.IOT TYOC,A
POPJ P,
TVFLG: 0 ;-1 HAVE TV AND IN TV MODE
LINPOS: 79 ;CHAR POS
; -HERE JUST TO AVOID CONTINUATION LINES
LINEL: 0 ;LINE LENGTH
MORE: 1 ;.NE. 0 TURNS ON MORE PROCESSING
TOPVP: 0 ;LINE POS TO RESET TO FOR FRESH PAGE
; 0 OR BELOW BOARD DISPLAY IN FANCY 2.
]
IFN DECTS,[
IDPB A,TYOO+1
OUTPUT TYOC,
POPJ P,
]
BELL: -1 ;.NE. 0 TYPE BELL ON MAKING MOVE -1 ALSO
; PERIODICALLY AT CLOCK LEVEL
IFN KLNTS,[
XDTCM: SETZM DTEFLG
MOVEM A,DTECMD
CONO DTE,%DBL11
SKIPN DTEFLG
JRST .-1
MOVE A,DTEF11
SETZM DTEFLG
POPJ P,
]
RCHA: SKIPL QTF
PUSHJ P,TYI
AOSN QTF
JRST TYIQ
CAIN A,^G
JRST RCHA
POPJ P,
TYI:
RCH: IFN UTAPE,[
SKIPGE UREADF
JRST TYIUT
]
TYITTY:
IFE TS+DECTS+KLNTS,[ SKIPN A,TYIMP
JRST TYI
CLEARM TYIMP
CAIGE A,140
JRST .+3
CAIE A,177
SUBI A,40 ;37 LOWER CASE
]
IFN KLNTS,[
MOVEI A,3400
PUSHJ P,XDTCM
JUMPE A,.-2
ANDI A,177
CAIN A,^G
SETOM QTF
]
IFN TS,[
IOT TYIC,A
CAIN A,14
JRST [ SKIPGE TVFLG
JRST [ MOVEI A,30. ;DELAY UNTIL SCREEN CLEARED BY 11
.SLEEP A,
PUSHJ P,DBRD ;PUT BACK BOARD AFTER FF
MOVEI A,14
JRST .+1]
MOVM ZR,FFANCY
CAIN ZR,2
JRST [ PUSHJ P,DU
PUSHJ P,TOS ;TO TOP OF SCREEN
MOVEI A,14
JRST .+1]
JRST .+1]
SKIPGE TVFLG
JRST [ CAIN A,14
JRST [ MOVEI A,30. ;DELAY UNTIL SCREEN CLEARED BY 11
.SLEEP A,
PUSHJ P,DBRD ;PUT BACK BOARD AFTER FF
MOVEI A,14
JRST .+1]
CAIN A,15
PUSHJ P,TVCR ;ECHO CR IN TV MODE
JRST .+1]
SKIPL TVFLG
JRST [ CAIN A,15
JRST [ PUSH P,A
.CALL [ SETZ
SIXBIT /RCPOS/
1000,,TYOC
402000,,A]
.VALUE
HLRZS A
ADDI A,1
CAMGE A,SVSIZ
JRST [ POP P,A
JRST .+1]
PUSHJ P,TOS
.IOT TYOC,[^P]
.IOT TYOC,["L] ;CLEAR NEW TOP LINE
POP P,A
JRST .+1]
JRST .+1]
]
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
CAIN A,"[
JRST [ AOS ICMMNT
JRST TYI]
CAIN A,"]
JRST [ SKIPLE ICMMNT
SOS ICMMNT ;FROM DISK, COMMENTS NEST
SKIPL UREADF
CLEARM ICMMNT ;ON TYI, CLOSE ENDS ALL COMMENTS
JRST TYI]
SKIPE ICMMNT
JRST TYI
IFN CHEOPS,[
SKIPE HTTYMD
POPJ P, ;DONT HACK THESE IN CHEOPS CONSOLE MODE
]
CAIN A,^D
JRST DDTA
CAIN A,^E
JRST EHACK1
IFN UTAPE,[
CAIN A,^Q
JRST TYISUT
CAIN A,^S
JRST TYI
]
CAIN A,^U
JRST HACK2
IFN TS,[
CAIN A,^N
JRST FSTEP ;STEP TO NEXT PLY LEVEL IN LAST GAME READ
]
POPJ P,
IFN UTAPE,[
ASTPIN: CLEARM UREADF
POPJ P,
ASKIP: PUSHJ P,GETNUM ;SKIP TO POSITION NUMBER (IE 181 FOR FIRST ONE IN
MOVEM C,ASKPT ; DBLATT, ETC)
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
]
ICMMNT: 0 ;NON-ZERO IN A COMMENT.
EHACK1: PUSHJ P,HACK1
JRST MNLP
DDTA:
IFE DEC+TS+KLNTS,[
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
SKIPN A,EOFTRP
JRST TYI
CLEARM EOFTRP
JRST (A)
]
UREADF: 0
IFN TS,[
URED: .IOT UTYIC,A
SKIPL A
AOS (P)
POPJ P,
UREDB: .IOT UTYIC,A
POPJ P,
INT: 0
0
MOVEM A,INTA
MOVE A,INT
MOVEM B,INTB
MOVEM C,INTC
TRZE A,%PICLK
JRST KALV1 ;KEEP ALIVE (HOPEFULLY) FEATURE..
KALV2: TRNE 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:
IFN CHEOPS,[
SKIPN HTTYMD ;GO TO CHEOPS CONSOLE PRGM HANDLER IF IN CHEOPS
JRST CTYIN2 ;MODE.
JSR HUUINT
JRST INT1
CTYIN2:]
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 UREADF
SETZM TTYOFF
CLEARM EOFTRP
ITYON: CLEARB B,TTYOFF
JRST ITYOF1
ITYOF: SETOB B,TTYOFF
ITYOF1: MOVE B,ITYMT+1(B)
ITYOF2: ILDB A,B
JUMPE A,CTYIN1
PUSHJ P,RTYO
JRST ITYOF2
ITYMT: 440700,,[ASCIZ /TTY OFF
/]
440700,,[ASCIZ /TTY ON
/]
INTNG: CAIN B,^S
CLEARM UREADF
CAIN B,^F
JRST DISFL
JRST CTYIN1
DISFL: .DCLOSE
MOVNI A,2
MOVEM A,FFANCY
JRST INT1
INT2: MOVEI B,TYO
ISOUT [.ASCII ?PDLOV PC=*O!INT+1?]
.VALUE
KALV1: SKIPL TRYMOV
JRST KALV2 ;NOT TRYING TO MOVE
SOSGE KAMCLK
JRST [ SKIPGE BELL
.IOT TYOC,[7]
MOVE B,KALINT
MOVEM B,KAMCLK
JRST .+1]
HRRZ B,INT+1
CAME B,KALVPC
JRST [ MOVEM B,KALVPC
CLEARM KALPCC
JRST KALV2] ;THIS A NEW PC, WIN
AOS B,KALPCC ;NTH TIME WE VE SEEN THIS ONE
CAIGE B,10.*2.
JRST KALV2
MOVE B,[440700,,[ASCIZ /WARNING, APPARENTLY HUNG FOR 10 SECONDS
/]]
CLEARM TRYMOV ;HAVE GIVEN WARNING, DONT GIVE ANY MORE
JRST ITYOF2
TRYMOV: 0 ;-1 IF TRYING TO MOVE (IN HACK1)
KAMCLK: 0
KALINT: 60.*2 ;TYPE BELL EVERY THIS LONG IF MACHINE IS TRYING TO MOVE
; IF BELL -1
KALVPC: 0 ;LAST PC SEEN
KALPCC: 0 ;COUNT OF TIMES THAT ONE SEEN
INTA: 0
INTB: 0
INTC: 0
]
IFN DECTS,[
URED: SOSLE UTYII+2
JRST URED1
IN UTYIC,
JRST URED1
POPJ P,
URED1: ILDB A,UTYII+1
AOS (P)
POPJ P,
UREDB: PUSHJ P,URED
JFCL
POPJ P,
;UREDB: JUMPGE A,CPOPJ
; PUSH P,A
; PUSHJ P,URED
; JRST UREDB1
; POP P,A
; POPJ P,
;
;UREDB1: EXCH A,(P)
; POP P,(A)
; AOBJN A,UREDB
; POPJ P,
]
IFE TS+DECTS,[
IFN UTAPE,[
UREDB: PUSHJ P, .URED"
JFCL
POPJ P,
]
]
TTYOFF: 0 ;-1 SUPPRESS TYPOUT
IFE KLNTS,[
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
]]]
LPTRA: PUSHJ P,PILPT
SUBI A,3
CAIN A,12
PUSHJ P,PILPT
ADDI A,3
POPJ P,
QTF: 0
EOFTRP: 0 ;IF .NE. 0, TRANSFER HERE ON EOF FROM "UTAPE"
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
REPEAT 3, 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
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,[
.RDATE=.OPER 46
.RTIME=.OPER 45
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
]
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
HB1E:
IFE BOOK, JRST HB1
.ELSE [
MOVE A,PLYN
MOVEM A,HBKTM2
SKIPE BKLFT
JRST 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
LDB J,[430100,,PLYN]
PUSHJ P,TMOVE
ERRTTY [ASCII /BOOK MOVE ILLEGAL!/]
CLEARM HACKVV
CLEARM CVPR
IFE DECTS,[
SETOM MSPC ;DONT ALLOW PARAM CHANGE DOWN JUST AFTER BOOK MOVE
CLEARM LPCSLW ;TELL PARAMETER STUFF TIMING BUFFER NOT REALLY VALID SO
; DONT SPEED UP OR SLOW DOWN FOR A WHILE.
]
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
MCRR: HRRZ A,B ;CR NEAR END OF LINE
CAIN A,PILPT
JRST MCRR2
POPJ P,
; JRST DCRR
MCRR2: MOVE A,LINEPOS
CAIGE A,120.-15.
POPJ P,
PUSHJ P,DCRR
JRST DTAB
IFN DEC+KLNTS,LINEPOS: 0
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
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
IFN 0,[
SKIPE C,NUMMM
JRST PWNPT7
]
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,
IFN 0,[
PWNPT7: SOUT [ASCII /PAWN GROUP!/]
CAIE C,1
SOUT [ASCII /S!/]
SOUT [ASCII /: !/]
MOVNS C
HRLZS C
PWNPT8: MOVE A,NUMMM+1(C)
PUSHJ P,DPT
SOUT [ASCII /(!/]
SETZM PPNTF2
MOVEI A,NUMMM+1(C)
MOVE D,[-8,,1]
CAMN A,PFILES(D)
JRST PWNPT9
PWNPTX: AOBJN D,.-2
SOUT [ASCII /) !/]
AOBJN C,PWNPT8
PUSHJ P,DCRR
JRST PWNPT4
PWNPT9: SKIPE PPNTF2
SOUT [ASCII /, !/]
SETOM PPNTF2
PUSH P,D
EXCH A,D
PUSHJ P,DPT
MOVE A,D
POP P,D
JRST PWNPTX
]
TYPLM: MOVE A,GAMP
MOVE C,(A)
SUBI A,GAME
MOVEM A,PGMCNT
JRST EPMOV1
TYPMT: ASCII /O-O!/
ASCII /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,EPMOVE
MOVE C,(R)
MOVEI A,"!
TLNE C,BMTHR
PUSHJ P,(B)
MOVEI A,"#
TLNE C,BIDSF
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
MOVEI A,")
PUSHJ P,(B)
TYPLN1: HRRZ R,(R)
JRST TYPLNE
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
COMPF: 0 ;-1 IN COMPARE MODE
COBW: 0 ;# BETTER FOR WHITE
COBB: 0 ;# BETTER FOR BLACK
COWW: 0 ;# WORSE FOR WHITE
COWB: 0 ;# WORSE FOR BLACK
IFN UTAPE,[
ACMP:
ACMP1: SKIPN UREADF
JRST ACMPP
PUSHJ P,RMOVE
JRST ACMP1
MOVEM A,BKTM1
MOVEI A,CMPE
PUSHJ P,CMPM
ERRTTY [ASCIZ /LOSE AT ACMP1/]
ADDM C,COBW(I)
SOS A,ARPLYT
SUB A,C
ADDM A,COWW(I)
MOVEI B,TYO
ISOUT [.ASCII ?BETTER *U!C WORSE *U!A?]
MOVE A,BKTM1
PUSHJ P,IMMOVE
ERRTTY [ASCIZ /MOVE ILLEGAL AT ACMP1/]
POPJ P,
CMPE: PUSHJ P,LMGXR
MOVEI B,CPOPJ ;RETURN FROM PMG
PUSHJ T,TDFROB ;SORT FROBS
CLEARM BOOKF3
HRRZ A,LGLMST
MOVNI A,1(A)
ADDI A,1(P)
IDIVI A,NWDPM
MOVEM A,ARPLYT
JRST BKME
ACMPP: MOVEI B,TYO
MOVEI I,0
PUSHJ P,ACMPP1
MOVEI I,1
PUSHJ P,ACMPP1
JRST PNORM
ACMPP1: MOVE A,COWW(I)
SUB A,COBW(I)
FLOAT A
MOVE C,COWW(I)
ADD C,COBW(I)
FLOAT C
FDVR A,C
ISOUT [.ASCII ?RATING *Q!A?]
POPJ P,
]
IFN TS+DECTS,[
CLKUD: ;UPDATE CURCLK BY AMT OF REAL AND RUN TIMES THAT
;HAVE ELAPSED SINCE LAST UPDATE. LEAVE THESE IN
;A AND B.
IFN TS,[
.RDTIM A,
.SUSET [.RRUNT,,B]
]
.ELSE [
TIMER A,
MOVEI B,0
RUNTIM B,
]
EXCH A,LRTIM
EXCH B,LRNTIM
SUB A,LRTIM
SUB B,LRNTIM
MOVE C,CURCLK
MOVMS A
MOVMS B
ADDM A,(C)
ADDM B,1(C)
POPJ P,
]
IFE DECTS,[
AFASTER: MOVEI B,TYO
SKIPE A,CPRAMS
JRST [ SOS A,CPRAMS
HRRZM P,LPCSLW
JRST AFAST1]
PTTY [ASCII /FASTEST!/]
POPJ P,
ASLOWER: MOVEI B,TYO
MOVE A,CPRAMS
CAIL A,NPARS-1
JRST ASLOW1
AOS A,CPRAMS
SETOM LPCSLW
AFAST1: ISOUT [.ASCII ?PARAM *O!A?]
CLEARM MSPC
JRST PARLD
ASLOW1: SOUT [ASCII /SLOWEST!/]
POPJ P,
]
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)
PUSHJ P,SETDR
MOVE A,(P)
IMULI A,SBRLNG
HRLI B,PARW(A)
HRRI B,SBR
BLT B,SBR+SBRLNG-1
MOVE A,(P)
MOVE C,PARF(A)
PUSHJ P,SETFR
JRST POPAJ
LTMDF==3 ;NO OF MOVES IN TIME RING BUFFER
NPARS==7 ;NO POSSIBLE SETS PARAMENTERS
PARD: 2 ;DEPTH
3
4
4
5
6
6
PARF: 1
2
2
2
2
2
3
PARW: REPEAT 2,[
REPEAT SBRLNG,6
]
10.
10.
7
7
REPEAT SBRLNG-4,6
REPEAT 4,[
15.
15.
9
9
REPEAT SBRLNG-4,7
]
MSPC: -1 ;MOVES SINCE PAR CHANGE
LPCSLW: 0 ;-1 IF LAST PARAMETER CHANGE SLOWER
; 0 IF BOOK MOVE MADE (NEITHER SPEED UP NOR SLOW DOWN UNTIL
; TIMING BUFFER FILLED)
; + IF LAST PARAMETER CHANGE FASTER
CPRAMS: 2 ;NUMBER OF CURRENT PARAMETERS
MYTIM: 0 ;MACHINES TIME SO FAR IN TENTHS OF SEC.
MMTMP: 0 ;POINTER TO MMTMT
MMTMT: BLOCK LTMDF ;TIME TAKEN BY MACHINE FOR LAST N MOVES (UNITS OF TENTHS OF SEC)
CLKSW: -1 ;-1 RUN TIME ACCORDING TO SIDE TO MOVE
;0 DONT RUN TIME
;1 RUN TIME ACCORDING TO CLOCK KLUDGE
CLKTB: WCLOCK
BCLOCK
TIML: 110.*60.*10. ;TIME LIMIT IN TENTHS OF SEC
MOVL: 50. ;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
MMCUTM: 45.*60.*10. ;TAKE NO ACTION THAT WOULD PLAY FASTER THAN BASPAR FOR THIS AMT OF TIME
BASPAR: 3 ;BASE PARAMETER SET
ASRATE: MOVEI B,TYO
SOUT [ASCIZ /SET TIME CONTROL: MOVES /]
PUSHJ P,GETNUM
PUSH P,C
SOUT [ASCIZ /IN MINUTES /]
PUSHJ P,GETNUM
PUSH P,C
SOUT [ASCIZ /THEREAFTER, MOVES /]
PUSHJ P,GETNUM
PUSH P,C
SOUT [ASCIZ / IN MINUTES /]
PUSHJ P,GETNUM
PUSH P,C
POP P,C
FLOAT C
FMPR C,[600.0] ;CONVERT TO TENTHS OF SEC
FMPR C,[.95] ;ALLOW MARGIN
FIX C
MOVEM D,TIMLI
POP P,MOVLI
POP P,C
FLOAT C
FMPR C,[600.0]
FMPR C,[.95]
PUSH P,C
FIX C
MOVEM D,TIML
POP P,C
FMPR C,[.40]
FIX C
MOVEM D,MMCUTM ;DONT PLAY FASTER THAN BASPAR UNTIL AT LEAST 40% OF TIME USED UP.
POP P,MOVL
POPJ P,
CCTIM: MOVE I,MACCLR ;MACHINE COLOR
MOVE A,@CLKTB(I)
IDIVI A,3 ;CONVERT TO TENTH OF SEC
MOVEM A,MYTIM ;MY TIME SO FAR
MOVE T2,PLYN ;MAYBE CHANGE PARAMETERS. COME HERE JUST AFTER HAVING
AOS T2 ; PLAYED MOVE, IMMEDIATEDLY BEFORE POPJ ING FROM HACK1
LSH T2,-1
CAML T2,MOVL
JRST CCTM1 ;HAVE MET OLD LIMIT
MOVSI A,-LTMDF
MOVEI B,0
ADD B,MMTMT(A) ;SUM TIME OF LAST SEVERAL MOVES
AOBJN A,.-1
IDIVI B,LTMDF ;OBTAIN AVERAGE
MOVE T1,B
LSH T1,-3
ADD B,T1 ;ALLOW EXTRA 12%
MOVE T1,T2 ;NUMBER OF MOVES PLAYED SO FAR
SUB T1,MOVL
MOVNS T1 ;GET MOVES TO TIME CONTROL
IMUL B,T1
MOVE T2,B ;SAVE ESTIMATED TIME TO COMPLETE
ADD B,MYTIM ;ADD TO TIME USED SO FAR
CAMG B,TIML
JRST CCTM3 ;OK, SHOULD MAKE IT. GO SLOWER?
MOVE A,CPRAMS ;GEE, LOOKS LIKE WE'RE NOT GOING TO MAKE IT.
CAMLE A,BASPAR
JRST CCTM2 ;PREVIOUSLY SWITCHED TO SLOWER PARAMS, SO OK TO SPEED BACK UP.
MOVE A,MYTIM
CAMG A,MMCUTM ;DONT SPEED UP UNTIL USED THIS MUCH TIME
POPJ P,
CCTM2: SKIPN CPRAMS
POPJ P, ;ALREADY FASTEST PARAMETERS!
SKIPGE LPCSLW
JRST CCTM4A
MOVE A,MSPC ;LAST CHANGE FASTER, SO DONT SPEED UP AGAIN FOR
CAIGE A,LTMDF ;THREE MOVES
POPJ P,
CCTM4A: SOS CPRAMS
HRRZM P,LPCSLW ;LAST PARAMETER CHANGE FASTER
CCTM2A: MOVEI B,TYO
SOUT [ASCII /
PARAM !/]
MOVE A,CPRAMS
PUSHJ P,DPT
PUSHJ P,DCRR
MOVE A,CPRAMS
CLEARM MSPC
JRST PARLD
CCTM3: ADD B,T2 ;ADD AGAIN ESTIMATED COMPUTE TIME TO REACH TIME CONTROL
MOVE S,TIML
SUB S,MYTIM
CAIL S,5*60.*10.;SKIP ON LESS THAN 5 MIN REMAINING ***UNITS??
CAML B,TIML ;SKIP ON DOESNT APPEAR WE WILL USE HALF OUR REMAINING TIME
POPJ P,
SKIPLE LPCSLW
JRST CCTM3A
MOVE A,MSPC ;LAST CHANGE SLOWER, SO DONT SLOW DOWN AGAIN FOR
CAIGE A,LTMDF ;THREE MOVES
POPJ P,
CCTM3A: MOVE A,CPRAMS ;WILL USE LESS THAN 1/2 TIME SLOW DOWN
CAIL A,NPARS-1
POPJ P,
AOS CPRAMS
SETOM LPCSLW ;LAST PARAMETER CHANGE SLOWER
JRST CCTM2A
CCTM1: MOVE A,TIMLI ;REACHED TIME CONTROL, RESET STUFF FOR NEXT ONE.
ADDM A,TIML
MOVE A,MOVLI
ADDM A,MOVL
MOVEI B,TYO
PUSHJ P,LMTYP
MOVE A,BASPAR
CAMG A,CPRAMS
POPJ P,
MOVEM A,CPRAMS ;MADE TIME CONTROL, SLOW DOWN TO AT LEAST BASE PARAMETER LEVEL.
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-HACK5
PSELF: ADDI B,HACK5
JRST SPMS1
PWHITE: MOVEI B,HACK3
MOVEI I,0
JRST SPMS2
PBLACK: MOVEI B,HACK4
MOVEI I,1
SPMS2:
IFE DECTS,[
SKIPE CLKSW
AOSE CLKCOK
JRST SPMS1
MOVEM I,MACCLR
PTTY [ASCII /CLOCK STARTED!/]
]
SPMS1: HRRZM B,GSW
JRST PSRET
HACK3: JUMPE A,HACK1
JRST MNLPA
HACK4: JUMPE A,MNLPA
JRST HACK1
HACK5: ;GET HERE ON PS
IFN TS,[ MOVEM A,HACT5
.LISTEN A,
EXCH A,HACT5
SKIPE HACT5
]
IFE KLNTS,[
IFE TS, SKIPE TYIMP
JRST PNORM
]
PUSHJ P,HACK1
IFN TS,[
SKIPL GETTY
JRST MNLP
]
JRST MNLP2R
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
ERROR: 0 ;UUO HANDLER
MOVEM A,UUOAS
MOVEM B,UUOBS
MOVEM C,UUOCS
LDB A,[330600,,40]
CAIL A,4
CAILE A,14 ;TSOUT
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,TSOUT_-27.
JRST TUTS1
CAIN D,ISOUT_-27.
JRST TUIS1
SKIPGE TSSW
JRST ERT3 ;TRACE NOT ON
SKIPL TPSW
JRST TU1 ;PRINTOUT NOT DESIRED
MOVE B,TRPSW
CAIN D,12
JRST TUX3F
PUSHJ P,TUCOP
JUMPE A,TU1 ;OPERAND=0
TUX3F:
TUX3A: MOVEI A,40
LDB T1,[420100,,TUT1-4(D)]
JUMPN T1,TUX3B ;MOVE OP DONT PRINT PREV CONTENTS
MOVEI A,"?
MOVE T1,TUACS+R
CAME T1,TUSR
TUX3D: PUSHJ P,(B)
TUX3E: MOVE A,TUACS+R
PUSHJ P,DPT
TUX3B: PUSHJ P,DTAB
CAIN D,12
JRST TU3A
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
TUIS1: MOVE B,TUACS+B ;HERE ON ISOUT
HRRZ TT,40
JRST TU3B
TUTS1: MOVEI B,TRTYO ;TRACE TYO ROUTINE
HRRZ TT,40
SETOM TUTSPF ;SIGNAL STUFF IN TRACE BUFFER
JRST TU3B
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
CAIN T2,"S
JRST TR6LS ;SQUARE
CAIN T2,"P
JRST TR6LP ;PIECE
CAIN T2,"M
JRST TR6LM ;SUBTRACT THE CONSTANT PIECE:, THEN PRINT AS PIECE
CAIN T2,"O
JRST TR6LO ;OCTAL NUMBER
CAIN T2,"F
JRST TR6LF ;FILE
CAIN T2,"D
JRST TR6LD ;DIRECTION
CAIN T2,"H
JRST TR6LH ;MASK TO 18 BITS, THEN PRINT OCTAL NUMBER
CAIN T2,"U
JRST TR6LU ;DECIMAL NUMBER
CAIN T2,"Q
JRST TR6LQ ;FLOATING POINT
CAIN T2,"B
JRST TR6SX ;SIXBIT
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: CAIN D,TSOUT_-27.
JRST TU1C
CAIE D,ISOUT_-27.
CAIN D,12
JRST TU1C
PUSHJ P,TUCOP
LDB T1,[420100,,TUT1-4(D)]
XCT TUT2(T1)
MOVEM A,TUSR
TU1C: MOVSI 16,TUACS
BLT 16,16
JRST TUUX
TRPSW: PNTDIS ;ENTRY OF ROUTINE FOR TRACE OUTPUT
PNTDIS: SKIPE WALLP
PUSHJ P,PILPT
JRST TYO
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:
IFN CHEOPS,[
CAIL A,HLUUO_-27. ;LOWEST CHEOPS UUO
CAILE A,HHUUO_-27. ;HIGHEST CHEOPS UUO
JRST ER5CH
; SKIPN CHEOSW
; .VALUE ;NOT SUPPOSED TO BE USING CHEOPS
MOVE A,UUOAS
MOVE B,UUOBS
MOVE C,UUOCS
MOVEM 16,HUUOAC+16 ;SAVE ACS
MOVEI 16,HUUOAC
BLT 16,HUUOAC+15
PUSH P,[CHURET]
LDB A,[330600,,40]
CAIN A,HXCT_-27.
JRST HUUXCT
CAIN A,HLOAD_-27.
JRST HUULOD
CAIN A,HSTORE_-27.
JRST HUUSTO
CAIN A,HLOADIR_-27.
JRST HUUIR
CAIN A,HSOUT_-27.
JRST HUUSOU
.VALUE
CHURET: MOVSI 16,HUUOAC
BLT 16,16
JRST CHUUX
HUUOAC: BLOCK 17
ER5CH:]
CAIN A,SOUT_-27.
JRST ER3
CLEARM TTYOFF
IFN UTAPE, CLEARM UREADF
CAIN A,PTTY_-27.
JRST ER4
CAIE A,ERRTTY_-27.
JRST ERT3
IFE TS+DECTS,[CONO PI,400 ;FATAL ERROR, TURN OFF INTERRUPTS
IFE KLNTS, 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
IFN DECTS, JRST MNLP
IFE TS+DECTS,[
CONI APRCON
JRST DDT
]
IFN TS,[
LOSE: MOVE C,UUOCS
MOVE B,UUOBS
MOVE A,UUOAS
.VALUE
JRST .-1
]
IFN DECTS, LOSE: JRST 4,.
TUACS: BLOCK 20
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+R
MOVEM A,TUACS+R
TUSR: 0 ;SAVED VAL OF R
TR6LS: LDB I,[100,,PLYN]
PUSHJ P,SQOUT
TR6LR: POP P,ERROR
POP P,40
POP P,UUOAS
POP P,UUOBS
POP P,UUOCS
MOVE A,TR6LCS
JRST TR6L4
TR6LCS: 0
TR6LH: HRRZS A ;ONLY HALF WORD
TR6LO: PUSHJ P,OCTPNT
JRST TR6LR
TR6SX: MOVE T2,A
MOVE T1,[440600,,T2]
TRSX1: ILDB A,T1
JUMPE A,TR6LR
ADDI A,40
PUSHJ P,(B)
TLNE T1,770000
JRST TRSX1
JRST TR6LR
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
ECRR: MOVEI A,15
PUSHJ P,ETYO
MOVEI A,12
ETYO:
IFE TS+DECTS+KLNTS,[
CONO TTY,400000
CONSZ TTY,20
JRST .-1
DATAO TTY,A
POPJ P,]
IFN TS,[.IOT TYOC,A
POPJ P,
]
IFN KLNTS, JRST TYO
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
CHUUX: JRST 2,@ERROR
UUOCS: 0
UUOBS: 0
UUOAS: 0
IFN DECTS,[
TIMTPJ: IDIVI C,6 ;TYPE TIME IN JIFFIES
JRST TIMTP
TIMTPM: IDIVI C,100. ;TYPE TIME IN MILLISECONDS
JRST TIMTP
]
IFN TS,[
TSRTP: IDIVI C,3 ;TYPE TIME IN 30THS
JRST TIMTP
TSMTP: IDIVI C,4069.*6. ;TYPE TIME IN 4 US ES
]
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
IFE TS+DECTS+KLNTS,[
IAPRBRK: 0
CONSO 1000
ERRTTY [ASCII /APR LOSSAGE!/]
IFN UTAPE,JSR APRBRK"
AOS ..TIME
IFE DEC,[
AOS DTIME
]
AOSG CLKUDF
JRST APREX1
MOVEM A,CASAVE
MOVEM B,CBSAVE
SKIPGE CLKCOK
JRST APREX
SKIPG CLKSW
JRST APRC1
MOVEI A,0
CONSO TTY,400000
MOVEI A,1
XOR A,INVCLK
XOR A,MACCLR
MOVE B,CLKTB(A)
MOVEM B,CURCLK
APRC1: AOS A,@CURCLK
MOVE B,CURCLK
CAIN B,OCLOCK
JRST APREX
ADDI B,WNUM+1-WCLOCK
HRLI B,220600
MOVEM B,DISIP
IDIVI A,10.
JSR DISC
MOVEI B,".-"0
JSR DISC
JSR DIS1
JSR DIS1
MOVE B,A
JSR DISC
MOVNI A,5
MOVEM A,CLKUDF
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: MOVEI B,TYO
SOUT [ASCII /WHITE !/]
MOVE C,WCLOCK+1
PUSHJ P,TSMTP
SOUT [ASCII / IN !/]
MOVE C,WCLOCK
PUSHJ P,TSRTP
SOUT [ASCII / BLACK !/]
MOVE C,BCLOCK+1
PUSHJ P,TSMTP
SOUT [ASCII / IN !/]
MOVE C,BCLOCK
PUSHJ P,TSRTP
PUSHJ P,DCRR
JRST PSRET
]
]
;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
OCLOCK: 0
IFN TS,OMTIM: 0
CURCLK: OCLOCK
CASAVE: 0
BCLOCK: 0 ;MUST BE WCLOCK+4 OUT OF TS
IFN TS,BMTIM: 0
CBSAVE: 0
IFE DECTS+TS,[
DISIP: 0
CLKUDF: 0
]
APRCON: 0
LRTIM: 0 ;REAL TIME LAST READ
LRNTIM: 0 ;RUN TIME LAST READ
CONSTANTS
RECMP: TDZA C,C
RECMS: MOVSI C,(SETZ)
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
SKIPGE C
TLO S,400000
EXCH S,(C)
MOVEM S,LFS
POPJ P,
IMMOVE: LDB ZR,[420100,,A]
LDB I,[100,,PLYN]
CAME ZR,I
.VALUE ;THIS NOT A MOVE FOR THE RIGHT SIDE?
JRST MMOVE
TMOVE3: SKIPE I
TLO T1,200000
JRST TMOVE5
TMOVE2: LDB I,[100,,PLYN] ;NORMAL MOVE, PC IN B TO SQ IN A
JUMPE A,TMOVE3 ;SPECIAL MOVE -> SQUARE 0, FULL MOVE LESS STM IN T1.
DPB B,[MPO,,T1]
SKIPG B,BOARD(B)
.VALUE
SUBI B,PIECE
DPB B,[MPC,,T1]
JRST TMOVE4
TMOVE1: MOVEI A,-375(A)
SKIPE I
TLO A,200000
JRST MMOVE
TMOVE: CAIL A,376 ;SIDE TO MOVE IN I
JUMPGE A,TMOVE1 ;CASTLE
MOVEI T1,0 ;MOVE PIECE IN B TO SQUARE A
DPB B,[MPC,,T1]
MOVE C,PIECEL(B)
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
TMOVE5: MOVE A,T1
;DROPS THRU
;DROPS IN
MMOVE:
MMVNC: 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
MMV3A: LDB B,[MPC,,A] ;MAKE MOVE IN A
LDB C,[MPO,,A]
IFN DBG,[
CAME C,PIECEL(B)
JRST MMERR
]
MOVEM C,OKGLCN ;SAVE ORG LOCN FOR USE IN KING UPDATE
;IFN DBG,[
; LDB A,[MPTO,,A]
; PUSHJ P,LGLMP
; JRST 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)
JRST MMERR
]
MMS4: SKIPE ICSW
PUSHJ P,MMIC3 ;REMOVE PIECE CAPTURED
MOVN T2,RPVAL(T1) ;T1 HAS NO OF PIECE CAPTURED
ADDM T2,@PBALP(T1)
SOS @PCCPNR(T1)
SOS @NPCPT(T1)
SOS @NPCP1(T1)
SKIPGE RFPCS(T1) ;ADJUST NUM SLIDEING PIECES
XCT MMT5(I)
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
CAIL T2,GAME+LGAME
JRST [ AOS GAMP
MOVEI B,TYO
SOUT [ASCIZ /GAME TOO LONG /]
POPJ P,]
SKIPE T1,GHLOC
JRST MMGF1 ;GHOST ELIM
MMGF2: MOVEM A,(T2)
MMOVE7: SKIPGE RPIECE(B)
PUSHJ P,MMKG1 ;KING MOVE UPDATE KING POS TABLE
SKIPL LMGT(B) ;SKIP ON PAWN
JRST MMS2
MOVEI T1,10
ADDM T1,PVALUE(B) ;INCREMENT VALUE OF PAWN
MOVE Q,NMOVES(B)
SOJN Q,MMS5
MOVE Q,PIECEL(B)
CAIL Q,5*BW
CAIL Q,7*BW
JRST MMS5
ADDM T1,PVALUE(B)
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: SKIPE ICSW
PUSHJ P,MMIC2 ;PAWN HACK AND PIN HACK
PUSHJ P,CAT
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: MMSAVAC
MOVN R,NKSI
SKIPE ICSW
PUSHJ P,MMKG1C
PUSHJ P,MMKG3
MOVE R,PIECEL(B)
MOVEM R,OKGLCN
MOVE R,NKSI
PUSHJ P,MMKG3
SKIPE ICSW
PUSHJ P,MMKG1C
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]
SKIPL BOARD+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]
SKIPL BOARD+A(T1)
ADDM R,BAV+A(T1)
TERMIN
POPJ P,
OKGLCN: 0 ;KING LOCN PRIOR TO MOVE
MMKG1C: MOVSI T1,-9
MMKG1A: MOVE A,OKGLCN
ADD A,DIRDT(T1)
SKIPGE BOARD(A)
JRST MMKG5
MOVSI T2,-18.
MMKG4A: LDB S,RDAT(T2)
JUMPE S,MMKG4
XCT RMOY1+1(I)
JRST MMKG4 ;OUR GUY SO HES NOT AFFECTED
ADDM R,PDV(S)
MOVE C,R
IMUL C,PINVF(S)
ADDM C,@PDVPNR(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,
MMKG4B: HRRZ C,T2
CAIL C,3
CAILE C,7
JRST MMKG4
XCT RMDTT+1(I)
JRST MMKG4
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 ZR,R
IMUL ZR,PINVF(Q)
ADDM ZR,@PDVPNR(Q)
MOVE C,PIECEL(Q)
JRST MMKG4D
IFN DBG,[
MMERR: ERRTTY [ASCII /BAD MOVE --MMOVE!/]
]
MMGH2: MOVEM T1,GHLOC
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)
IMUL S,PINVF(R)
ADDM S,@PDVPNR(R)
DPB R,MMGHT4(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)
IMUL S,PINVF(R)
ADDM S,@PDVPNR(R)
DPB R,MMGHT6(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)
MMS5: MOVE Q,PIECEL(B)
CAIL Q,3*BW
CAIL Q,9*BW
JRST .+2
JRST MMS2
SKIPE ICSW
PUSHJ P,MMIC1 ;REMOVE IT AS A P
TRO A,4
MOVEM A,@GAMP
MOVEI T2,MMQN
HRRM T2,PIECE(B)
; MOVE T2,[1,,2]
; MOVEM T2,PCATV(B)
MOVSI T2,-17
SKIPE BDAST+1(T2)
AOBJN T2,.-1
JUMPGE T2,[ERRTTY [ASCII /MMS5, BDAST FULL!/]] ;NO BDAST SPACE LEFT
HRRZM B,BDAST+1(T2)
AOS T2
DPB T2,[PTIDS,,PIECE(B)]
MOVEI T2,QNINC ;EXCESS VALUE QUEEN OVER PAWN ON SEVENTH
ADDM T2,PVALUE(B)
MOVN T2,RPVAL(B)
ADDM T2,@PBALP(B)
MOVEI T2,PCBAL(I)
MOVEM T2,PBALP(B)
MOVEI T2,KQV
MOVEM T2,RPVAL(B)
ADDM T2,@PBALP(B)
SOS @NPCPT(B) ;FLUSH P COUNT
MOVEI T2,WQNC(I)
HRLI T2,(SETZ )
MOVEM T2,NPCPT(B)
AOS @NPCPT(B) ;AOS Q COUNT
MOVEI T2,WPCCNT(I)
MOVEM T2,PCCPNR(B)
AOS @PCCPNR(B) ;AOS PC COUNT
MOVEI T2,LMQUEEN
MOVEM T2,LMGT(B)
MOVEI T2,LSQUEEN
MOVEM T2,LMGSTD(B)
MOVEI T2,RMWQ
MOVEM T2,RMDTB(B)
MOVE T2,PLYN
MOVEM T2,PLPWN(B)
MOVEI R,QID ;PAWN QUEENING
DPB R,[PTID,,PIECE(B)]
SETZM PPT(B)
MOVEI R,LQUEEN
MOVEM R,LGLMPT(B)
MOVEI T1,1*2 ;NOT QDCOF SINCE THIS WILL STICK
MOVEM T1,PINVF(B) ;NO NEED TO HACK PDV SINCE PC OFF BOARD
MOVSI T1,(SETZ)
ANDCAM T1,SNFBP(B)
; ANDCAM T1,LMGSTD(B) ;SINCE IT WAS JUST CLOBBERED WITH LSQUEEN ABOVE
IORM T1,RFPCS(B)
IORM T1,DDPCS(B)
IORM T1,SLDPC(B) ;CODE BELOW USES T1
MOVE R,B
CAIL R,BPV
SUBI R,NPCS
MOVNS R
ROT T1,(R)
MOVEI T2,PTB
SKIPGE PIECE(B)
ADDI T2,PTBL
IORM T1,PTBQ-PTB(T2)
HRLI T2,-12.
ANDCAM T1,PTBP-PTB(T2)
AOBJN T2,.-1
SKIPE ICSW
PUSHJ P,MMIC7 ;PUT IT BACK AS Q
JRST MMS2
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)
MOVN S,PCATV(R)
ADDM S,@MMGFT2(I)
MOVN S,@MMGFT5(I)
ADDM S,PDV(R)
IMUL S,PINVF(R)
ADDM S,@PDVPNR(R)
MMGF4: LDB R,MMGFT3(I)
JUMPE R,CPOPJ
DPB Q,MMGFT3(I)
MOVN S,PCATV(R)
ADDM S,@MMGFT4(I)
MOVN S,@MMGFT5(I)
ADDM S,PDV(R)
IMUL S,PINVF(R)
ADDM S,@PDVPNR(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)
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
MMT5: SOS NUMORP+1
SOS NUMORP
SOS NUMORP+1
UNMOVE: SOS PLYN
PUSH P,I
CLEARM MMPIVF
MOVE B,[MMPIVF,,MMPIVF+1]
BLT B,MMFL+9
SKIPE T1,GHLOC
JRST UMG3
UMG4:
UMOVE1: SOS T,GAMP
MOVE A,1(T)
MOVEM A,LMV
LDB I,[420100,,A]
TRNE A,170
JRST UMG1
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)
MOVNI T2,10
SKIPGE LMGT(B)
ADDM T2,PVALUE(B) ;UNMOVEING PAWN
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,RPVAL(D)
ADDM T2,@PBALP(D)
AOS @PCCPNR(D)
AOS @NPCPT(D)
AOS @NPCP1(D)
SKIPGE RFPCS(D) ;ADJUST NUMORP
XCT UMT5(I)
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
CAIN C,2*BW
ADDM T2,PVALUE(B) ;TAKING BACK D A
SKIPE ICSW
PUSHJ P,MMIC2
POP P,I
POPJ P,
UMOVE2: LDB T2,[300,,A]
CAILE T2,2
JRST UMOVE5
MOVE T,NMKING(I)
MOVN ZR,STVDT1(T)
ADDM ZR,@CDVPNR(I)
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
UMOVE5: CAIN T2,3
JRST UMOVE6
SKIPE ICSW
PUSHJ P,MMIC1 ;TAKE IT OFF AS QUEEN
XCT UMT3(I)
HRRM T2,PIECE(B)
; MOVE T2,[1,,6]
; MOVEM T2,PCATV(B)
LDB T2,[PTIDS,,PIECE(B)]
CLEARB T1,BDAST(T2)
DPB T1,[PTIDS,,PIECE(B)]
MOVNI T2,QNINC
ADDM T2,PVALUE(B)
MOVN T2,RPVAL(B)
ADDM T2,@PBALP(B)
MOVEI T2,PNBAL(I)
MOVEM T2,PBALP(B)
MOVEI T2,PWNV
MOVEM T2,RPVAL(B)
ADDM T2,@PBALP(B)
SOS @PCCPNR(B) ;FLUSH PIECE
SOS @NPCPT(B) ;FLUSH QUEEN COUNT
MOVEI T2,NPCTEM
MOVEM T2,PCCPNR(B)
MOVEI T2,WPNC(I)
MOVEM T2,NPCPT(B)
AOS @NPCPT(B) ;ADD BACK P
MOVE T2,UMT4(I)
MOVEM T2,LMGT(B)
HRRM T2,LMGSTD(B) ;LEAVE LEFT HALF CLEAR!
MOVE T2,UMT6(I)
MOVEM T2,RMDTB(B)
SETOM PLPWN(B)
MOVEI T2,PID ;UNQUEEN A PAWN
DPB T2,[PTID,,PIECE(B)]
MOVEI T2,PIECEL(B)
MOVEM T2,PPT(B)
MOVEI T2,LWPWN
TLNE A,200000
MOVEI T2,LBPWN
MOVEM T2,LGLMPT(B)
MOVEI T1,6*2
MOVEM T1,PINVF(B)
MOVSI T1,(SETZ)
CAILE B,NPCS
IORM T1,SNFBP(B)
CAIG B,NPCS
IORM T1,LMGSTD(B)
ANDCAM T1,RFPCS(B)
ANDCAM T1,DDPCS(B)
ANDCAM T1,SLDPC(B) ;CODE BELOW USES T1
MOVE T2,B
CAIL T2,NPCS
SUBI T2,NPCS
MOVNS T2
ROT T1,(T2)
MOVEI T2,PTB
SKIPGE PIECE(B)
ADDI T2,PTBL
ANDCAM T1,PTBQ-PTB(T2)
HRLI T2,-12.
MOVEI C,0
AOS T,GAMP
DPB C,[300,,(T)]
TDNE T1,PTBP+2*PTBL(C)
IORM T1,PTBP-PTB(T2)
AOS C
AOBJN T2,.-3
SKIPE ICSW
PUSHJ P,MMIC7
JRST UMOVE1
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,RPVAL(D)
ADDM T2,@PBALP(D)
; AOS @PCCPNR(D) ;NOT A PIECE
AOS @NPCPT(D)
; AOS @NPCP1(D) ;NOT A B
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
PMT: 1
-1
1
POPAJ: POP P,A
POPJ P,
MMOVE3: LDB D,[300,,A]
CAILE D,2
JRST MMV3A
PUSH P,D
PUSH P,A
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
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)
MOVE ZR,STVDT1(T2)
ADDM ZR,@CDVPNR(I)
AOS NMOVES+WKING-PIECE(T)
MOVEI B,WKING-PIECE(T)
PUSHJ P,MMKG1
JRST MMOVE5
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 NMOVES+WKING-PIECE(T)
SKIPE NMOVES+WKR-PIECE(T)
POPJ P,
SKIPN PIECEL+WKR-PIECE(T)
POPJ P,
MOVE T1,PIECEL+WKING-PIECE(T)
SKIPN BOARD-1(T1)
SKIPE BOARD-2(T1)
POPJ P,
SKIPE T
ADDI T1,BD2
SKIPE BA(T1)
POPJ P,
SKIPN BA-1(T1)
SKIPE BA-2(T1)
POPJ P,
AOS (P)
POPJ P,
LQCAS: SKIPN NMOVES+WKING-PIECE(T)
SKIPE NMOVES+WQR-PIECE(T)
POPJ P,
MOVE T1,PIECEL+WKING-PIECE(T)
SKIPN BOARD+1(T1)
SKIPE BOARD+2(T1)
POPJ P,
SKIPE PIECEL+WQR-PIECE(T)
SKIPE BOARD+3(T1)
POPJ P,
SKIPE T
ADDI T1,BD2
SKIPE BA(T1)
POPJ P,
SKIPN BA+1(T1)
SKIPE BA+2(T1)
POPJ P,
AOS (P)
POPJ P,
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
; 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 DBS1
; JRST TD1
JRST TD7
;TD8A: MOVE TT,LMGD ;OLD DISPLAY FEEDOVER STUFF
; 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
HRRZ A,LGLMST
ADDI A,1
MOVEI B,1-1(P) ; 1 EXCEPT FOR PUSH OF B
PUSHJ P,4SORT ;SO PRINTOUT IS IN SORTED ORDER
POP P,B
HRRZ A,TEFAL
PUSHJ P,DPT
PUSHJ P,DCRR
MOVE TT,LGLMST
TD2: CAMN TT,P
POPJ T,
MOVE A,1(TT)
PUSHJ P,PPMMV
MOVE T1,3(TT)
MOVEI A,"!
TLNE T1,BMTHR
PUSHJ P,(B)
MOVEI A,"#
TLNE T1,BIDSF
PUSHJ P,(B)
PUSHJ P,DSPACE
MOVE A,2(TT)
PUSHJ P,DPT
; MOVEI A,"-
; LDB T1,[220100,,3(TT)]
; SKIPE T1
; PUSHJ P,(B)
PUSHJ P,DSPACE
PUSHJ P,MCRR
ADD TT,[NWDPM,,NWDPM]
JRST TD2
PPMMV: MOVEM A,PPMMVT
HRRZS A
CAIL A,376
JRST TD2A
HLRZ A,PPMMVT
PUSHJ P,PCOUT
MOVEI A,"-
PUSHJ P,(B)
HRRZ A,PPMMVT
PUSHJ P,SQOUT
JRST DSPACE
TD2A: SOUT TYPMT-376(A)
JRST DSPACE
PPMMVT: 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,-3(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,
TD1:
IFN DSPLY,[
MOVEI B,TYO
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
MOVE A,DPTNC
CAIE A,3
PUSHJ P,DSPACE
PUSHJ P,DSPACE
PUSHJ P,(B)
AOS T
AOBJN TT,TD6
PUSHJ P,DTAB
MOVSI TT,-8
SUBI T,8
TD6A: HLRZ A,BAV+2*BW+1(T)
PUSHJ P,DPT
MOVE A,DPTNC
CAIE A,3
PUSHJ P,DSPACE
PUSHJ P,DSPACE
PUSHJ P,(B)
AOS T
AOBJN TT,TD6A
; PUSHJ P,DTAB
; MOVSI TT,-8
; SUBI T,8
;TD6B: HLRZ A,BA+2*BW+1(T)
; PUSHJ P,DPT
; PUSHJ P,DSPACE
; AOS T
; AOBJN TT,TD6B
PUSHJ P,DCRR
AOS T
AOBJN T,TD3
MOVE A,LMGD
PUSHJ P,DPT
PUSHJ P,DSPACE
SOUT [ASCII /WHITE MIN !/]
MOVE A,BPREV
PUSHJ P,DPT
PUSHJ P,DSPACE
SOUT [ASCII /BLACK MIN !/]
MOVE A,BPREV+1
PUSHJ P,DPT
SOUT [ASCII / PCBAL !/]
MOVE A,PCBAL
PUSHJ P,DPT
PUSHJ P,DSPACE
MOVE A,PCBAL+1
PUSHJ P,DPT
SOUT [ASCII / PNBAL !/]
MOVE A,PNBAL
PUSHJ P,DPT
PUSHJ P,DSPACE
MOVE A,PNBAL+1
PUSHJ P,DPT
PUSHJ P,DCRR
PUSHJ P,PWNPNT
PUSHJ P,.DISBD
; SKIPE DBS2
; JRST TD7A
]
CLEARM CVPR
MOVEI D,-1
JSP ZR,EVM5B2
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
;TD7A: PUSHJ P,TYI ;OLD STOP LEVEL SELECTOR IN DEBUG MODE.
; CLEARM STPLVL
; CAIL A,"0
; CAILE A,"9
; JRST TD7
; SUBI A,"0
; MOVEM A,STPLVL
; JRST TD7
APSQ: PUSHJ P,GETONM ;PRINT SQUARE NUMBER
MOVE A,C
MOVEI B,TYO
JRST SQOUT
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,
APPC: PUSHJ P,GETONM ;PRINT NUMERIC PIECE NUMBER
MOVE A,C
MOVEI B,TYO
JRST PCOUT
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
IFN TS, SETOM NOINCU
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
SORT: CAIL A,-STWPM(B)
POPJ P,
SORT3: MOVE C,A
MOVEI T1,0
SORT2: HRRZ ZR,1(C)
HRRZ D,STWPM+1(C)
CAMGE ZR,D
JRST SORT1 ;EXCH THEM
ADDI C,STWPM
CAIGE C,-STWPM(B)
JRST SORT2
JUMPN T1,SORT3 ;MAKE ANOTHER PASS
POPJ P,
SORT1: REPEAT STWPM,[
MOVE ZR,.RPCNT(C)
EXCH ZR,.RPCNT+STWPM(C)
MOVEM ZR,.RPCNT(C)
]
ADDI C,STWPM
CAIGE C,-STWPM(B)
AOJA T1,SORT2
JUMPN T1,SORT3
POPJ P,
;SORT: MOVEI C,10000 ;A POINTER AT FIRST ENTRY TO BE SORTED USED ONLY BY PCG
;SORT1: HRLM B,(P) ;B " LAST +1
; CAIL A,-STWPM+1(B) ;ONE OR ZERO FROBS
; JRST SORT7
; PUSH P,A
;SORT3: TDNE C,1(A)
; JRST SORT4
; SUBI B,STWPM
; TDNN C,1(B)
; JRST SORT2
;REPEAT STWPM,[
; MOVE D,.RPCNT(A)
; EXCH D,.RPCNT(B)
; MOVEM D,.RPCNT(A)
;]
;SORT4: ADDI A,STWPM
;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
4SORT1: HRLM B,(P) ;B " LAST +1
CAIL A,-4(B) ;ONE OR ZERO FROBS
JRST 4SORT7
PUSH P,A
4SORT3: TDNE C,1(A)
JRST 4SORT4
SUBI B,4
TDNN C,1(B)
JRST 4SORT2
MOVE D,(A)
EXCH D,(B)
MOVEM D,(A)
MOVE D,1(A)
EXCH D,1(B)
MOVEM D,1(A)
MOVE D,2(A)
EXCH D,2(B)
MOVEM D,2(A)
MOVE D,3(A)
EXCH D,3(B)
MOVEM D,3(A)
4SORT4: ADDI A,4
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
4SORT7: HLRZ A,(P)
POPJ P,
CONSTANTS
IFN BOOK,[
BKSMT: BLOCK BMXS+1
BKSMTV: BLOCK BMXS+1
BBK: BLOCK BKSS/6+1
]
ICSTO: 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
ICCMPT: MOVEI B,TYO ;DEVICE IN B RECS OUTPUT
ICCMP: CLEARM ICERRF
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)
PUSH T,T2
ICPIN3: PUSH T,1(T1)
HRRZ T1,(T1)
JUMPN T1,ICPIN3
JRST ICPIN2
ICCM2: TLNE T1,40000
JRST ICCM8 ;WORD
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
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
BDOUT: MOVEI S,"- ;OUTPUT BOARD
CLEARB T1,T2
SKIPE BFLIP
JRST FBDUT4
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!/
FBDUT4: HRLI T2,-8
FBDUT3: SKIPE C,BOARD+2*BW+1(T1)
JRST FBDUT1
MOVEI A,2*BW+1(T1)
CAMN A,GHLOC
JRST FBDUT5
MOVE A,S
PUSHJ P,(B)
PUSHJ P,(B)
FBDUT2: XORI S,"-#"*
SKIPGE QTF
JRST CRR
FBDUT6: PUSHJ P,DSPACE
AOS T1
AOBJN T2,FBDUT3
XORI S,"-#"*
PUSHJ P,DCRR
ADDI T1,2
CAIE T2,64.
JRST FBDUT4
POPJ P,
FBDUT1: LDB D,[PTID,,(C)]
SKIPG (C)
ADDI D,6
SOUT TXTB(D)
JRST FBDUT2
FBDUT5: LDB C,[100,,PLYN]
SOUT GHTXT(C)
JRST FBDUT2
XBDOUT: SOUT [ASCIZ /2333333334
/]
MOVEI S,0
CLEARB T1,T2
XBD4: HRLI T2,-8
SOUT [ASCIZ /9/]
XBD3: SKIPE C,BOARD+10.*BW-2(T1)
JRST XBD1
MOVEI A,"0(S)
PUSHJ P,(B)
XBD2: XORI S,1
SOS T1
AOBJN T2,XBD3
MOVEI A,"5
PUSHJ P,(B)
XORI S,1
PUSHJ P,DCRR
SUBI T1,2
CAIE T2,64.
JRST XBD4
SOUT [ASCIZ /8777777776
/]
POPJ P,
XBD1: LDB D,[PTID,,(C)]
SKIPG (C)
ADDI D,6
MOVE A,TXTB3(D)
TRNE S,1
AOS A
PUSHJ P,(B)
JRST XBD2