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- ASPOTP: ADDI T1,- ASPOTB: ADDI T1,- ASPOTN: ADDI T1,- ASPOTQ: ADDI T1, 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: _-<18.+5> ;UUO 4 _-23. _-23. _-23. _-23. _-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