From c6ae98e9158d1867ed3c3ccc0db5cdc3e16a0f88 Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Fri, 16 Feb 2018 12:04:18 +0100 Subject: [PATCH] OCM chess. --- Makefile | 2 +- README.md | 1 + build/build.tcl | 6 + doc/chprog/ocm.order | 14 + src/chprog/ccheop.484 | 6541 +++++++++++++++++++++++++ src/chprog/chnet.29 | 395 ++ src/chprog/ocaux.224 | 8093 ++++++++++++++++++++++++++++++ src/chprog/ocdagb.31 | 821 ++++ src/chprog/ocdis.21 | 118 + src/chprog/ocm.470 | 10617 ++++++++++++++++++++++++++++++++++++++++ 10 files changed, 26607 insertions(+), 1 deletion(-) create mode 100644 doc/chprog/ocm.order create mode 100755 src/chprog/ccheop.484 create mode 100755 src/chprog/chnet.29 create mode 100755 src/chprog/ocaux.224 create mode 100755 src/chprog/ocdagb.31 create mode 100755 src/chprog/ocdis.21 create mode 100755 src/chprog/ocm.470 diff --git a/Makefile b/Makefile index 10f97f08..4ce95428 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ include conf/network # The directores listed in SRC, DOC, and BIN are put on the sources tape. SRC = system syseng sysen1 sysen2 sysen3 sysnet kshack dragon channa \ midas _teco_ emacs emacs1 rms klh syshst sra mrc ksc eak gren \ - bawden _mail_ l lisp libdoc comlap lspsrc nilcom rwk rg \ + bawden _mail_ l lisp libdoc comlap lspsrc nilcom rwk chprog rg \ inquir acount gz sys decsys ecc alan sail kcc kcc_sy c games DOC = info _info_ sysdoc sysnet syshst kshack _teco_ emacs emacs1 c kcc chprog BIN = sys2 device emacs _teco_ lisp liblsp alan inquir sail comlap c decsys \ diff --git a/README.md b/README.md index 0f69c902..a13a779d 100644 --- a/README.md +++ b/README.md @@ -216,6 +216,7 @@ A list of [known ITS machines](doc/machines.md). - NUDIR, create user directory. - NWATCH, small watch display. - OBS, observe system activities. + - OCM, chess program. - OS, realtime TTY spy. - PALX, PDP-11 cross assembler. - PANDA, user account management program. diff --git a/build/build.tcl b/build/build.tcl index 391f5d78..fdc61514 100644 --- a/build/build.tcl +++ b/build/build.tcl @@ -1096,6 +1096,12 @@ respond "\n" "PI==4\r" respond "\n" "TTY==120\r\003" expect ":KILL" +# Old chess? Timesharing, no TV, no CHEOPS processor. +respond "*" ":midas /t games;ts ocm_chprog;ocm\r" +respond "with ^C" "DSPLY==0\r" +respond "\n" "CHEOPS==0\r\003" +expect ":KILL" + # ten50 respond "*" ":midas sys3;ts ten50_mrc; ten50\r" expect ":KILL" diff --git a/doc/chprog/ocm.order b/doc/chprog/ocm.order new file mode 100644 index 00000000..247f680b --- /dev/null +++ b/doc/chprog/ocm.order @@ -0,0 +1,14 @@ +^M enter move? +^E make move +^U undo move + +^L redisplay board +[ start comment +] end comment + +^N next move from file +^Q DECtape something +^S DECtape something + +^G TTY on +^D something diff --git a/src/chprog/ccheop.484 b/src/chprog/ccheop.484 new file mode 100755 index 00000000..a972ccd2 --- /dev/null +++ b/src/chprog/ccheop.484 @@ -0,0 +1,6541 @@ +;CHEOPS CONSOLE PROGRAM +;TO BE INSERTED +;CMFLAG MUST BE DEFINED TO SAY WHAT PRGM +; -1 UNIFARCE TESTER +; 0 OCM +; 1 CM + +;UUOS THAT MUST BE DEFINED BY INSERTING PRGM +;HXCT ;PUT INST POINTED TO BY E IN CHEOPS IR AND EXECUTE IT +;HLOAD ;AC HAS LOAD SELECT CODE, DATA IN C(E). STORES DATA IN CHEOPS. +;HSTORE ;AC HAS MUX SELECT CODE, DATA READ FROM THERE INTO E. +;HLOADIR ;PUT INST POINTED TO BY E INTO CHEOPS IR. +;HSOUT ;PRINT ASCIZ STRING POINTED TO BY E ON TTY. MUST NOT CLOBBER ANY ACS. +;UUO HANDLER MUST SAVE AC S IN A BLOCK AT HUUOAC AND XFER TO +; APPROPRIATE SERVICE ROUTINE. IT WILL POPJ WHEN DONE, WHICH SHOULD +; GO TO UUO EXIT ROUTINE WHICH RESTORES ACS +; THE AC S, TYO, TYI, AND CRR MUST ALSO BE DEFINED. +;MAIN PROGRAM SHOULD ENABLE INTERRUPTS AND JSR TO HUUINT ON A TTY INPUT INTERRUPT +; (IF HTTYMD .NE. 0 ANYWAY). AC A MUST HAVE BEEN SAVED. + +X=PUSHJ P, + +UNIFA=740000 ;UNIFARCE ADDRESS IN 10 MEMORY +HBMEM=734000 ;BUFFER ADDRESS IN 10 MEMORY +HBMEML==4000 ;SIZE OF BUFFER MEM IN PDP10 WDS + +IFNDEF CBBAS,CBBAS==40000 ;BASE ADR OF CHEOP'S BUFFER MEMORY (PDP11 UNIBUS ADR) +IFNDEF CBLEN,CBLEN==20000 ;LENGTH BUFFER MEMORY IN BYTES +IFNDEF CBABL,CBABL==40 ;LOCATION IN CHEOPS ES BUFFER MEM OF HIGH PRIORITY ARG + ;BLOCK PDP-10 WORD ADDR RELATIVE TO BEGINNING OF BUFFER MEM + +CHECML==2000 ;EXISTING CHEOPS CONTROL MEMORY SIZE + +T11LH==242000 +T11RH==042000 +;CTRL, STATUS, DBR, MUX +HMUX==T11RH,,UNIFA+1 +HMUXSL==340400,,UNIFA +HLODSL==250400,,UNIFA + +T11REL==122000 ;REL ADR FIELD IN T11MP +T11==320300 ;PDP11 # FIELD IN T11MP WD +HPAGE==UNIFA_<-10.> ;TO ADDR UNIFA IN T11MP WD + +DEFINE HCONC A,B +A!B!TERMIN + + +;"EMT" DEFS + +IF2 [ +ERCMEM==X XRCMEM ;READ CONTROL MEM LOCN IN B TO 4 WD BLOCK (A) +EWCMEM==X XWCMEM ;WRITE LIKEWISE +ERPDLB==X XRPDLB ;READ DATA PDL LOCN IN B INTO LOCN POINTED TO BY A +EWPDLB==X XWPDLB ;WRITE " " " " " FROM " " " " " +ERUSTK==X XRUSTK ;READ U STACK LOCN IN B INTO LOCN POINTED TO BY A +EWUSTK==X XWUSTK ;WRITE LIKEWISE +ERAC==X XRAC ;READ AC OR AAC IN B INTO LOCN (A) (IE A B-BUS ADR) +EWAC==X XWAC ;WRITE LIKEWISE +ERSQL==X XRSQL ;READ SQUARE LIST LOCN IN B INTO LOCN (A) +EWSQL==X XWSQL ;WRITE LIKEWISE +ERPLOC==X XRPLOC ;READ PIECE-LOC LOCN IN B INTO LOCN (A) +EWPLOC==X XWPLOC ;WRITE LIKEWISE +ERPVAL==X XRPVAL ;READ PIECE-VAL LOCN IN B INTO LOCN (A) +EWPVAL==X XWPVAL ;WRITE LIKEWISE +ERPTYP==X XRPTYP ;READ PIECE-TYPE LOCN IN B INTO LOCN (A) +EWPTYP==X XWPTYP ;WRITE LIKEWISE +ERPXM==X XRPXM ;READ PIECE-EXISTS "MEMORY" +EWPXM==X XWPXM ;WRITE LIKEWISE +ERAS==X XRAS ;READ A-SOURCE IN B INTO LOCN(A) +EROS==X XROS ;READ O-BUS SELECT CODE IN B INTO LOCN (A) +EWOD==X XWOD ;WRITE CONTENTS (A) INTO OUTPUT DESTINATION IN B + +ERSIR==X XRSIR ;READ SIR INTO (A) +EWSIR==X XWSIR ;WRITE LIKEWISE +ERSR==X XRSR ;READ SR INTO (A) +EWSR==X XWSR ;WRITE LIKEWISE +ERPR==X XRPR ;READ PR INTO (A) +EWPR==X XWPR ;WRITE LIKEWISE + +ESUSP==X XSUSP ;SAVE U-STACK POINTER INTERNALLY IF HAVENT ALREADY +ESPAR==X XSPAR ;SAVE PAR POINTER INTERNALLY IF HAVENT ALREADY + +ERIR==X XRIR ;READ IR (FOUR WDS WORTH FROM IR A THRU D) INTO BLOCK(A) +EWIR==X XWIR ;WRITE IR FROM FOUR WD BLOCK(A). IR A THRU D ARE WRITTEN, + ; AND IF THE AMOP BIT IS ON, IRA C AND D ARE ALSO WRITTEN. +ERFIR==X XRFIR ;READ FULL IR INTO 6 WD BLOCK (A). +EWFIR==X XWFIR ;WRITE FULL IR FROM 6 WD BLOCK(A). + +ERFLG==X XRFLG ;READ FLAG WDS A THRU D INTO 4 WD BLOCK (A) +EWFLG==X XWFLG ;WRITE FLAG WDS A THRU D FROM 4 WD BLOCK (A) + +ERERWS==X XRERWS ;READ ERROR STATUS INTO 3 WD BLOCK (A). + ; WD0 GETS UNIBUS STATUS (FROM 176002) + ; WD1 GETS "PARITY BITS" FROM MUX INPUT 14 + ; WD2 GETS "SPEC-FCTN BITS" FROM MUX INPUT 15 + +EWPIEC==X XWPIEC ;WRITE PIECE IN (A) INTO SQUARE IN B. + ; WRITES SQUARE LIST, PIECE LIST AND PIECE-EXISTS MEMS. + +ESTOP==X XSTOP ;STOP CHEOPS, CLEAR HRUN, LEAVE HTRUN ALONE. +ECLK==X XCLK ;SINGLE STEP CHEOPS +ERESET==X XRESET ;RESET CHEOPS +ESRUN==X XSRUN ;SET RUN IN CHEOPS +ESRUNS==X XSRUNS ;SET RUN AND ENABLE STAT STOP +ESUCW==X XSUCW ;SET UNIFACE CONTROL WD. A HAS DESIRED CONTENTS IN BITS + ; MASKED BY B. LEAVE REST OF THE BITS THE SAME. +EOCTP==X XOCTP ;OCTAL PRINT DATA IN B. NUMBER OF OCTAL DIGITS DESIRED IN C + +EDPB==X XDPB ;DEPOSIT DATA IN B INTO BLOCK POINTED TO BY A. BYTE DESC + ; IN C +ELDB==X XLDB ;LOAD INTO A SPEC BYTE FROM BLOCK POINTED TO BY A. BYTE + ; SPEC IN B + +EPI==X XPI ;PRINT U INST POINTED TO BY A +EPIF==X XPIF ;PRINT "FULL" U-INST. IE BOTH IR AND IRA, 6 WDS WORTH. +IPNFLD==X XPNFLD ;PRINT NUMBERIC FIELD. DATA BLOCK POINTER IN A, BYTE DESC + ; IN B +EPERRS==X XPERRS ;PRINT ERRS AS SPECIFIED BY 3 WD BLOCK POINTED TO BY A. + ; BLOCK IS IN FORMAT OF ERERWS +EPRPC==X XPRPC ;PRINT (A) AS PIECE +EPRPCL==X XPRPCL ;PRINT "LEFT HALF" (SIXTEEN BITS WISE) OF (A) AS PIECE +EPRSQ==X XPRSQ ;PRINT (A) AS SQUARE +] + +;CHEOPS UCODE DEFS + +;WD0 DEFS + HINH==1_15. ;INHIBIT WRITE ON SUCCESSFUL XFER + %H0INW==.BP HINH + %H0CF==.BP 074000 ;BYTE POINTER TO COND FIELD + %H0JF==.BP 003777 ;BYTE POINTER TO JUMP FIELD +;COND FIELD QUARTER DEFS +H0CAMS==1 ; 0 0 0 ANY-MORE-SQUARES +H0CAMP==2 ; 0 0 ANY-MORE-PIECES 0 +H0CCHK==3 ; 0 KCHK 0 0 +H0CQ4==4 ; LEGAL DEEP ALU-EQUAL ALU-NO-CARRY-OUT +H0CALU==5 ; 0 0 ALU-LESS ALU-LESS-OR-EQUAL +H0CEXB==6 ; 0 EXTB2 EXTB1 EXTB0 +H0CQ7==7 ; STACK-END-CHECK STM P-BUS-NOBLE P-BUS-PAWN +H0CQ10==10 ; TERM-RANK PROMOTING-POSS SELECTED-SQUARE ANY-SQUARES +H0CQ11==11 ; ANY-RANK TYP2 TYP1 TYP0 +H0CQ12==12 ; 0 OFF-BOARD PROMOTE-P E-P-CAPT +H0CQ13==13 ; SEL-P-EXISTS 0 Q-CAS-LGL K-CAS-LGL +H0CQCNP==14 ; WQR MVD WKR MVD BQR MVD BKR MVD +H0CQ15==15 ; FLAGCELL-7 KCHKF DEEP LEGAL +H0CQ16==16 ; 0 UNIBUS-CYCLE PDP-11-FLAG-1 PDP-11-FLAG-0 + +;WD1 DEFS +H1AMOP==1_15. ;ARRAY INST OP CODE BIT + %H1AMOP==.BP H1AMOP +H1STAT==1_14. ;STATISTICS BIT + %H1ST==.BP H1STAT +H1PSHJ==1_13. ;PUSHJ BIT + %H1PSJ==.BP H1PSHJ +H1POPJ==1_12. ;POPJ BIT + %H1RET==.BP H1POPJ +H1PINC==20_7 ;PAF INCREMENT (BY 4 BIT TWOS COMP #) +H1PSA==0_7 ;SAVE PAR IN AAC N (SHIFT N 7) +H1PRA==1_7 ;RESTORE PAR FROM AAC N (SHIFT N 7) + %H1PAF==.BP 007600 +H1UBRD==1_5 ;INITIATE UNIBUS RD CYCLE +H1UBWR==2_5 ;INITIATE UNIBUS WRITE CYCLE +H1UBIN==3_5 ;INITIATE UNIBUS INTERRUPT REQ + %H1UB==.BP H1UBIN +H1ELNG==20 ;E LONG BIT + %H1EL==.BP H1ELNG +;FLAG-CONTROL FCTNS +H1FINF==1 ;INITIALIZE-NEXT-FLAGCELL-WORD +H1FSG==2 ;SAVE-NEXT-GHOST-POSITION +H1FMNC==3 ;MODIFY-NEXT-CASTLE-FLAGS-IF-CASTLE-SQUARE-ON-SQUARE-BUS +H1FCSM==4 ;CHANGE-SIDE-TO-MOVE +H1FWTM==5 ;FORCE-WHITE-TO-MOVE +H1FBTM==6 ;FORCE-BLACK-TO-MOVE +H1FSD==7 ;SET-DEEP (NOTE: NOT NEXT-DEEP) +H1FCD==10 ;CLEAR-DEEP (NOTE: NOT NEXT-DEEP) +H1FSKC==11 ;SET-NEXT-KCHK-FROM-SELECTED-SQUARE +H1FSLG==12 ;SET-LEGAL +H1FCLG==13 ;CLEAR-LEGAL +H1FLFC==14 ;LOAD-FLAGCELL-FROM-NEXT-FLAGCELL +H1FCSK==15 ;CHANGE-SIDE-TO-MOVE AND SET-NEXT-KCHK-FROM-SELECTED-SQUARE +H1FSGM==16 ;SAVE-NEXT-GHOST-POSITION AND MODIFY-NEXT-CASTLE-FLAGS + %H1FC==.BP 000017 + +;WD2 DEFS ARRAY MODULE INSTRUCTION +H2ARYS==1_15. ;ARRAY SELECT (1 DESTINATION) + %H2AYS==.BP H2ARYS +H2ACP==1_14. ;0 MOVES, 1 CAPTS + %H2ACP==.BP H2ARYS +H2AALS==1_13. ;0 SIR SQ, 1 ALL SQS + %H2AAS==.BP H2AALS +H2ANEN==1_12. ;NOBLE ENABLE + %H2ANE==.BP H2ANEN +H2APEN==1_11. ;PAWN ENABLE + %H2APE==.BP H2APEN +H2APX==1_10. ;PEX BIT + %H2APX==.BP H2APX +H2AWPX==1_9. ;WPEX WRITE PULSE + %H2WPX==.BP H2AWPX +H2AWSR==1_8 ;SR WRITE PULSE + %H2WSR==.BP H2AWSR +H2AWSIR==1_7 ;SIR WRITE PULSE + %H2WSI==.BP H2AWSIR +H2AWPR==1_6 ;PR WRITE PULSE + %H2WPR==.BP H2AWPR +H2AWMV==1_5 ;WMOVE WRITE PULSE + %H2WMV==.BP H2AWMV +H2APSR==1_4 ;PDL SOURCE + %H2APS==.BP H2APSR +H2AWDT==1_3 ;WRITE DATA (IN PLACE OPPOSITE OF SPECD BY PDL SOURCE BIT) + %H2AWD==.BP H2AWDT + %H2AAC==.BP 000007 ;ARY AC IN LOW 3 BITS + +;WD3 DEFS ARRAY MODULE INSTRUCTION +H3APSB==1_10. ;PS-BUS SELECTOR (3 BITS) + %H3SPS==.BP 016000 +H3ALPS==1_9 ;LAST PIECE SELECTOR BIT (0 LEFT A BUS, 1 PR) + %H3SLP==.BP H3ALPS +H3APBB==1_6 ;PIECE-BUS SELECTOR (3 BITS) + %H3SPB==.BP 000700 +H3APRS==1_5 ;PR SELECTOR (0 LEFT A BUS, 1 NEXT-PIECE) + %H3SPR==.BP H3APRS +H3ALSS==1_4 ;LAST SQUARE SELECTOR BIT (0 HIS K LOCN, 1 SR) + %H3SLS==.BP H3ALSS +H3ASQB==1_2 ;SQUARE BUS SELECTOR (2 BITS) + %H3SSB==.BP 000014 +H3ASRS==1_1 ;SR SELECTOR (0 RIGHT A BUS, 1 NEXT-SQUARE) + %H3SSR==.BP H3ASRS +H3ASIS==1_0 ;SIR SELECTOR (0 SQUARE-BUS, 1 PIECE-LOC) + %H3SSI==.BP H3ASIS + +;WD2 DEFS ALU INSTRUCTION +%H2ASH==.BP 176000 ;BYTE POINTER TO HIGH A-SOURCE FIELD (FOR NON-IMMED INST) +%H2LIM==.BP 177400 ;BYTE POINTER TO IMMEDIATE DATA FIELD +%H2PR==.BP 177400 ;BYTE POINTER TO PDL-REGISTER FIELD +%H2LOD==.BP 000374 ;BYTE POINTER TO ODEST FIELD +%H2ASL==.BP 000374 ;BYTE POINTER TO LOW A-SOURCE FIELD (FOR PDL-DEST INST) +%H2LIT==.BP 000003 ;BYTE POINTER TO ALU-INST TYPE FIELD + H2LNIM==0 ;NON-IMMEDIATE INSTRUCTION + H2LIMM==1 ;IMMEDIATE INSTRUCTION + H2LPSR==2 ;PDL SOURCE + H2LPDS==3 ;PDL DESTINATION + +;WD3 DEFS ALU INSTRUCTION +H3LOBB==1_10. ;O-BUS SELECTOR (3 BITS) + %H3LOB==.BP 016000 +H3LCRY==1_9 ;CARRY IN TO ALU + %H3LCY==.BP H3LCRY +H3LALM==1_8 ;ALU MODE +H3LALU==1_4 ;ALU MODE (4 BITS) + %H3LAL==.BP 000760 + %H3LBB==.BP 000017 ;BBUS ADR IN LOW 4 BITS + + +;A-SOURCE S +HASPDL==0 ;PDL +HASORG==2 ;OREG +HASPSB==3 ;PSBUS +HASFC==4 ;FLAG-CELL +HASNFC==5 ;NEXT-FLAG-CELL +HASEXB==6 ;EXTERNAL-BUS +HASFLA==10 ;FLAG A +HASFLB==11 ;FLAG B +HASFLC==12 ;FLAG C +HASFLD==13 ;FLAG D +HASSTA==14 ;STAT A +HASSTB==15 ;STAT B +HASUAR==16 ;UAR +HASUDR==17 ;UDR +HASAC==20 ;AC (+ AC #) + +;ODEST S +HODUDR==2 ;UDR +HODUAR==3 ;UAR +HODSTA==4 ;STAT A +HODSTB==5 ;STAT B +HODWMV==10 ;W-MOVE +HODSIR==11 ;SIR +HODTYP==13 ;TYP +HODVAL==14 ;VAL +HODSR==15 ;SR (FROM R A-BUS) +HODPR==16 ;PR (FROM L A-BUS) +HODPSR==17 ;BOTH PR AND SR (FROM A-BUS) +HODPDL==20 ;PDL +HODUS==21 ;U-STACK (SPC) +HODUSP==22 ;U-STACK PTR (SPCPTR) +HODFC==23 ;FLAG-CELL +HODNFC==24 ;NEXT-FLAG-CELL +HODSTR==25 ;STAR (SOFTWARE STATUS REG READABLE FROM UNIBUS) +HODEXC==26 ;EXTERNAL-DEVICE (CONTROL) +HODEXD==27 ;EXTERNAL-DEVICE (DATA) +HODAC==60 ;AC (+ AC #) +HODAAC==70 ;AAC (+ AAC #) + +;OUTPUT SELECTOR CODES +HOSALU==0 ;ALU +HOSALS==1 ;ALU SWAPPED +HOSRLC==2 ;RELOC +HOSDBR==3 ;DBR +HOSUSP==4 ;U-STACK POINTER (SPCPTR) +HOSUS==5 ;U-STACK (SPC) +HOSSW==6 ;SWITCH REGISTER +HOSPSB==7 ;PS-BUS + + +;UNIBUS REGISTERS +;XXXX00 UNIBUS CONTROL +HU0F1==1_15. ;PDP11 FLAG 1 +HU0F0==1_14. ;PDP11 FLAG 0 +HU0LSC==1_13. ;0 -> LOAD DIAR ON STAT BIT, 1-> ON EVERY CLOCK +HU0SER==1_12. ;1 -> STOP ON ERROR +;MUX SELECT (SHIFT THESE 8) + H0MIA==0 ;MUX SELECT TO READ IR A + H0MIB==1 ;MUX SELECT TO READ IR B + H0MIC==2 ;MUX SELECT TO READ IR C + H0MID==3 ;MUX SELECT TO READ IR D + H0MIAC==4 ;MUX SELECT TO READ IRA C + H0MIAD==5 ;MUX SELECT TO READ IRA D + H0MPC==6 ;MUX SELECT TO READ PC + H0MOAD==7 ;MUX SELECT TO READ OLD-ADR + H0MDIA==10 ;MUX SELECT TO READ DIAGNOSTIC REGISTER + H0MOB==11 ;MUX SELECT TO READ O-BUS + H0MPAR==14 ;MUX SELECT TO READ PARITY BITS WORD + H0MSFN==15 ;MUX SELECT TO READ SPECIAL FUNCITON BITS + H0MFLD==16 ;MUX SELECT TO READ UDR +HU0RES==1_7 ;RESET +HU0IEB==1_6 ;INTERRUPT ENABLE (ENABLE CHEOPS TO GENERATE 11 INTERRUPTS) +HU0NEB==1_5 ;NPR ENABLE (ENABLE CHEOPS TO MAKE NPR MEMORY REFS) +;LOAD SELECT WHEN H0GO = 0 (SHIFT THESE 1) + H0LIA==1 ;LOAD SELECT IR A + H0LIB==2 ;LOAD SELECT IR B + H0LIC==3 ;LOAD SELECT IR C + H0LID==4 ;LOAD SELECT IR D + H0LIAC==5 ;LOAD SELECT IRA C + H0LIAD==6 ;LOAD SELECT IRA D + H0LUDR==7 ;LOAD SELECT UDR + H0LCMA==10 ;LOAD SELECT CMEM A + H0LCMB==11 ;LOAD SELECT CMEM B + H0LCMC==12 ;LOAD SELECT CMEM C + H0LCMD==13 ;LOAD SELECT CMEM D + H0LFLA==14 ;LOAD SELECT FLAG A + H0LFLB==15 ;LOAD SELECT FLAG B + H0LFLC==16 ;LOAD SELECT FLAG C + H0LFLD==17 ;LOAD SELECT FLAG D +;WHEN H0GO =1 +HU0STS==1_3 ;STATISTICS STOP +HU0SS==0_1 ;SINGLE STEP +HU0SLO==1_1 ;SLOW SPEED +HU0CRZ==2_1 ;CRUISE SPEED +HU0FAS==3_1 ;FAST SPEED +HU0GO==1_0 ;GO + + +;STATUS REGISTER XXXX02 +HU2RUN==1_15. ;RUN FLOP +HU2HER==1_14. ;HIRUN ERROR +HU2PAR==1_13. ;PARITY ERROR +HU2NXM==1_12. ;NXM +HU2SPO==1_11. ;SPC OVFLO +;LOW 6 BITS ARE STAR (SOFTWARE STATUS REGISTER) + %HSTAR== 040600,, ;BYTE POINTER TO LOAD STAR FROM UNIFA +;NEXT 4 BITS ARE DOORBELL REGISTER + %HDBL== 120400,, + +;DBR XXXX04 +;MUX XXXX06 +;BITS IN PARITY REGISTER (MUX SELECT 14) +H6PPOU==1_15. ;POUT +H6PTYP==1_14. ;TYP +H6PVAL==1_13. ;VAL +H6PLOC==1_12. ;LOC +H6PSPC==1_11. ;SPC +H6PIR==1_10. ;IR +H6PRPD==1_9. ;R PDL +H6PLPD==1_8. ;L PDL +H6PSPO==1_7. ;SPC OVFLO +H6PNXM==1_6. ;NXM +H6PRBB==1_5. ;R B-BUS +H6PLBB==1_4. ;L B-BUS +H6PRAC==1_3. ;R AC +H6PLAC==1_2. ;L AC +H6PRAA==1_1. ;R AAC +H6PLAA==1_0. ;L AAC + +;BITS IN SPEC-FCTN WD (MUX SELECT 15) +H6FSTM==1_7 ;SIDE TO MOVE +H6FPMV==1_6 ;PRO MV (PROMOTING MOVE POSSIBLE) +H6FEPC==1_5 ;EN PASENT CAPT (5TH RANK P CAPTURING INTO FILE OF GHOST) +H6FTGF==1_4 ;TO GHOST FILE +H6FF5R==1_3 ;FROM 5TH RANK +H6FTRK==1_2 ;TRANK +H6FPRO==1_1 ;PROMOTE (PAWN MOVE AND TRANK) +H6FPMV==1_0 ;PAWN MOVE + +;CHEOPS REGISTER ADDRESS DEFS +HRORG==40000 ;ORIGIN OF CHEOPS REGISTER ADDRESS SPACE +HRCMO==40000 ;ORIGIN OF CONTROL MEM + HRCME==44000 ; CONTROL MEM (C) 2K +HRPDO==44000 + HRPDE==46000 ; DATA PDL (P) 1K +HRUSO==46000 + HRUSE==46400 ; U STACK (U) 256 REG +HRACO==46400 + HRACE==46420 ; AC S AND AAC S (A) 16 REG TOTAL + HRRPAR==46410 ; PAR IS AAC 0 +;(BEFORE SQ LIST AND PC LIST SO ARRAYS GET LOADED CORRECTLY WHEN SCANNING UP) +HRPTO==46420 + HRPTE==46520 ; PIECE TYPE (T) 64 REG +HRSQO==46520 + HRSQE==46620 ; SQUARE LIST (S) 64 REG +HRPLO==46620 + HRPLE==46720 ; PIECE LOC (L) 64 REG +HRPVO==46720 + HRPVE==47020 ; PIECE VALUE (V) 64 REG +HRPXMO==47020 ; PIECE-EXISTS "MEMORY" (64 LOCN) EACH LOCN IS A BIT. + HRPXME==47120 ; ADDRESSES CORRESPOND WITH PIECE-LOC MEMORY + ; LOCNS 0-7 AND 40-47 SHOULD BE ALWAYS 0 + ; SINCE THEY CORRESPOND TO NULL PIECES. +HRRDRO==47120 ; RAID REGISTERS + HRRDRE==47130 +HRRGO==47130 + HRRGE==47330 ; RANDOM REGISTERS AND THINGS + HRRFLA==47130 ; FLAGA (THESE PRINT NUMERICALLY) + HRRFLB==47131 ; FLAGB + HRRFLC==47132 ; FLAGC + HRRFLD==47133 ; FLAGD + HRRSTA==47134 ; STATA + HRRSTB==47135 ; STATB + HRRUAR==47136 ; UAR + HRRUDR==47137 ; UDR + HRRORG==47140 ; OREG + HRRFC== 47141 ; FLAGCELL + HRRNFC==47142 ; NEXT-FLAGCELL + HRRUSP==47143 ; U-STACK POINTER + HRRSIR==47144 ; SIR + HRRSR== 47145 ; SR + HRRPR== 47146 ; PR + HRRIR== 47147 ; IR + HRRIRA==47150 ; IRA (2 WDS WORTH, SO GETS LOADED, DUMPED, AND CLEARED) + HRRNAF==47151 ; NAF (THIS IS ACTUALLY IR 10-0) + HRRPC== 47152 ; PC + HRRSC== 47153 ; STEP COUNT (INTERNAL TO CONSOLE PROG, THIS REGISTER COUNTS + ; FOR EVERY STEP TAKEN BY ^N ETC. CLEARED BY ^P OR :TP + HRRLTP==47154 ; LAST TEST POSITION USED + HRRSA== 47155 ; UCODE STARTING ADR + HRRSTR==47156 ; STAR (UNIBUS STATUS REGISTER) + HRRDBL==47157 ; DOORBELL REGISTER +HRRDMP==47157 ;LAST REGISTER LOCATION INCLUDED IN DUMP FILE +HRVO== 47157 ;ORIGIN OF "VIRTUAL REGISTERS" IN REGISTER SPACE + HRRSET==HRVO+1 ; RESET REGISTER (STUFF DEPOSITED HERE GETS PUT EVERYWHERE!) +;-CONTINUES ON NEXT PAGE- + +;THE FOLLOWING GROUP ARE PSEUDO-REGISTERS, WHOSE VALUES ARE OBTAINED BY +;READING THE INDICATED POINTS WITH THE REST OF THE MACHINE STATE RESTORED. + HRRNXP==HRVO+2 ; NEXT PIECE OUTPUT OF PIECE SCANNER + HRRNXS==HRVO+3 ; NEXT SQUARE OUTPUT OF SQUARE SCANNER + HRRPBS==HRVO+4 ; PIECE-BUS + HRRSBS==HRVO+5 ; SQUARE-BUS + HRRPOU==HRVO+6 ; POUT (OUTPUT OF SQUARE-LIST MEMORY) + HRRPLC==HRVO+7 ; (P)LOC (OUTPUT OF PIECE-LIST MEMORY) + HRRPVL==HRVO+10 ; (P)VAL (OUTPUT OF VAL MEMORY) + HRRPTP==HRVO+11 ; (P)TYP (OUTPUT OF TYP MEMORY) +;THE FOLLOWING PRINT OUT "SYMBOLICALLY" + HRSFLA==HRVO+12 ; FLAGA + HRSFLB==HRVO+13 ; FLAGB + HRSFLC==HRVO+14 ; FLAGC + HRSFLD==HRVO+15 ; FLAGD +;THE FOLLOWING AS PSEUDO REGISTER WHICH REFERENCE THE "NEXT" STATE +; IE THEY RESTORE THE MACHINE, NO-OP THE IR (CHANGING IT AS LITTLE AS +; POSSIBLE), PULSE THE CLOCK, AND PRINT THE RESULTING REGISTER. +; THIS DOES NOT CHANGE THE SAVED FLAG WORDS, SO HOPEFULLY MACHINE STATE IS +; NOT ALTERED. + HRRNLA==HRVO+16 ; NEXT-FLAGA + HRRNLB==HRVO+17 ; NEXT-FLAGB + HRRNLC==HRVO+20 ; NEXT-FLAGC + HRRNLD==HRVO+21 ; NEXT-FLAGD +;THE FOLLOWING COMBINE THE PROPERTIES OF THE ABOVE TWO GROUPS, IE +; THEY PRINT THE INDICATED NEXT-FLAG REGISTER "SYMBOLICALLY". + HRSNLA==HRVO+22 ; NEXT-FLAGA SYMBOLICALLY + HRSNLB==HRVO+23 ; NEXT-FLAGB " + HRSNLC==HRVO+24 ; NEXT-FLAGC " + HRSNLD==HRVO+25 ; NEXT-FLAGD " +;THE FOLLOWING ARE PSEUDO REGISTERS CORRESPONDING TO FLAGWORD QUARTERS. +; THE PRINT THE CORRESPONDING QUARTER BOTH SYMBOLICALLY AND NUMERICALLY + HRRQ0== HRVO+26 ; QUARTER 0 (THRU 17) +;THE FOLLOWING PRINT THE NEXT-QUARTER BOTH WAYS. + HRRNQ0==HRVO+46 ; NEXT-QUARTER 0 (THRU 17) +; + HRRSTM==HRVO+66 ; SIDE TO MOVE + HRRSQL==HRVO+67 ; DRAW PICTURE OF STATE OF SQUARE LINES + HRRBD== HRVO+70 ; DRAW PICTURE OF BOARD (IE IN SQUARE LIST MEM) + HRP11F==HRVO+71 ; PDP-11 FLAGS 1 AND 0 AS A 2 BIT QUANTITY. + ; (WORKS FOR EXAMINE AND DEPOSIT) + HRRGM== HRVO+72 ; PRINT CURRENT GAME LINE + ; (300@P -> C(PAR) + HRRSPD==HRVO+73 ; SPEED SELECT (0 - SINGLE STEP, 1 SLOW, 2 CRUISE, 3 FAST + HRRSTC==HRVO+74 ; STATA AND STATB AS A 32 BIT REGISTER + HRRPV== HRVO+75 ; PRINCIPLE VARIATION +HRASO==HRVO+100 + HRASE==HRVO+200 ; ASOURCE S (A-BUS AND R-BUS) (R) 64 LOCN +HRODO==HRVO+200 + HRODE==HRVO+300 ; ODEST S (64 LOCN) +HRREND==HRVO+300 ;END OF REGISTER ADR SPACE + +HUBADR: 776000 ;UNIBUS ADDRESS OF UNIFACE +H11N: 3 ;CHEOPS PDP11 NUMBER +TLCTL: 0 ;TEMP IN TEST LOOP + ;0 RUN 1,2 SPEED + ;3 STAT STOP, 4 -, 5 MEMR ENB + ;6 INTR ENB, 7 RESET, 8 MUXSL0 + ;9 MUXSL1, 10 MUXSL2, 11 MUXSL3 + ;12 ERR STOP, 13 DIAR LOAD, 14 PDP-11 FLAG1 + ;15 PDP-11 FLAG0 +HSA: 0 +HDA: 1 + +HINIT: PUSHJ P,HINIM ;INITIALIZE MEM PAGES + PUSHJ P,HINIC ;PREPARE TO FROB CHEOPS ITSELF. + POPJ P, + +HINIM: MOVE A,[3_42+10000_12+1777] ;R/W. NO PROTECT INSERT MEMORY PAGES + MOVE D,H11N ; JUST THIS IS ENUF IF INTEND TO RUN SOLELY IN BUFFERED MODE + ; AND UCODE ALREADY LOADED, ETC. + DPB D,[320300,,A] ;STORE IN PDP11 NUMBER + MOVEI D, ;EA PDP-10 PAGE ADDRESS ES 10000 BYTES + MOVEI C,HBMEM_-12 + MOVEI B,CBBAS +HINIT1: PUSH P,B ;INSERT UNIBUS MEMORY PAGES + PUSHJ P,HGPDP + POP P,B + ADDI C,1 + ADDI B,10000 + SOJG D,HINIT1 + HRRZ B,HUBADR ;INSERT I/O PAGE (FOR CHEOPS CONTROL LOCNS) + PUSHJ P,HGPDP + POPJ P, + +HINIC: MOVE A,[100000_4] ;INITIALIZE CHEOPS FOR FROBBING WITH, ETC + TDNE A,UNIFA ;CHEOPS RUNNING? + ESTOP ;TRY STOPPING IT + LDB A,[40600,,UNIFA] ;GOBBLE DOWN STAR REG + CAIE A,77 ;JUST POWERED ON? (IT POWERS UP 77) + POPJ P, + ERESET ;FOO, MUST HAVE JUST BEEN POWERED ON, RESET IT + CLEARM HTPLDF + PUSHJ P,HINPCM ;INITIALIZE VAL AND TYP TOO + MOVSI A,-HBMEML ;CLEAR OUT BUFFER MEM +HINILP: CLEARM HBMEM(A) + AOBJN A,HINILP + POPJ P, + +HGPDP: ASH B,-2 ;B IS DESIRED UNIBUS ADR + DPB B,[T11REL,,A] + .CALL [ SETZ + SIXBIT /T11MP/ + C + SETZ A ] + .VALUE + POPJ P, + +HCMAIN: MOVEM P,HSPDL ;SAVE BASE PDL LVL + .CALL [ SETZ ;SAVE TTY STATUS + SIXBIT /TTYGET/ + 1000,,TYIC + 2000,,HTSST1 + 2000,,HTSST2 + 402000,,HTSSTS] + .VALUE + .CALL [ SETZ ;DO ALL OWN ECHOING + SIXBIT /TTYSET/ + 1000,,TYIC + [030202,,020202] + 400000,,[030202,,020202] ] + .VALUE + .CALL [ SETZ ;GET SCREEN SIZE + SIXBIT /CNSGET/ + 1000,,TYIC + 2000,,A ;SCREEN VERTICAL SIZE + 402000,,B] ;SCREEN HORIZONAL SIZE + .VALUE + CLEARM HTICMF ;LEAVE COMMAND FILE MODE + SUBI A,10. + MOVEM A,HDLNN ;START CONSOLE DISPLAY THERE + SUBI B,5 + MOVEM B,HCHWD +HREI1: MOVEI A,1 ;CONSOLE PROGRAM MAIN LOOP + MOVEM A,HTTYMD ;INDICATE IN CONSOLE MONITOR MODE + MOVE A,[100000_4] ;IF CHEOPS RUNNING, STOP IT + TDNN A,UNIFA + JRST HCMN2 + ESTOP + PUSHJ P,HRDHU + HSOUT [ASCIZ /CHEOPS WAS RUNNING NOW STOPPED!/] +HCMN2: PUSHJ P,HENTER ;SAVE REST OF STATE AS WELL + CLEARM HCSDPF ;NOT DISPLAYING CONSOLE + PUSHJ P,HCSDPY ;DISPLAY CONSOLE + PUSHJ P,HRDHU ;HOME UP (BUT STAY BELOW RAID REG) +HCMN1R: CLEARM HRGOPF ;NO REGISTER OPEN +HCMN1: CLEARM HDPFLG ;DEPOSIT DONE FLAG + .CALL [ SETZ ;READ CURSOR POS + SIXBIT /RCPOS/ + 1000,,TYIC + 2000,,A + 402000,,B] + .VALUE + HLRZM A,HCLINE + HRRZM A,HCPOS + SETOM HRAIDM ;CONFINE PRINTOUT TO BETWEEN RAID AREA AND CONSOLE AREA + SETOM HCMREQ ;INDICATE GOT HERE + PUSHJ P,HGECOM ;RETURN WITH ASCIZ STRING IN HCBUF + ;HCNUMF ETC VALID. TERM CHAR IN A + CAIN A,33 ;ALT MODE + JRST HCMNX ;RETURN TO REGULAR MODE + SKIPL HCVALF + JRST HCMN1A ;NO VALUE, SO WHAT EVER HCNUMF HAS IS IT + MOVSI C,-4 ;ADD VALUE TO NUM, 16 BIT WISE + MOVEI B,0 ;CRY IN B +HCNM1L: ADD B,HCVAL(C) + ADD B,HCNUM(C) + DPB B,[002000,,HCNUM(C)] + LSH B,-20 ;CRY IF ANY + AOBJN C,HCNM1L + SETOM HCNUMF +HCMN1A: CLEARM HCVALF + MOVE B,A + MOVE A,HCNUM ;LOW ORDER ARG IN A ON DISPATCH + PUSHJ P,@HCMTAB(B) + DPB A,[002000,,HCVAL] ;THIS A NO-OP UNLESS COMMAND HAS SOS ED HCVALF + SKIPGE HTICMF + JRST HCMN1B ;DONT UPDATE IF IN COMMAND FILE MODE + SKIPGE HDPFLG + PUSHJ P,HCSDPY ;UPDATE RAID REGISTER IF DEPOSIT DONE +HCMN1B: JRST HCMN1 + +HREINI: MOVE P,HSPDL ;GET HERE ON SECOND ^X IF NO RESPONCE TO FIRST + HSOUT [ASCIZ /QUIT/] + JRST HREI1 + +HCMNX: CLEARM HTTYMD ;LEAVE CONSOLE MODE + MOVE P,HSPDL ;RETURN TO CALLER + .CALL [ SETZ ;RESTORE NORMAL ECHOING + SIXBIT /TTYSET/ + 1000,,TYIC + HTSST1 + HTSST2 + SETZ HTSSTS] + .VALUE + POPJ P, + +HCMCR: PUSHJ P,HRGCLS ;CLOSE OPEN REGISTER, IF ANY + JRST HCRR + +HCMERR: HSOUT [ASCIZ /???/] ;COMMAND ERROR + MOVE P,HSPDL ;RESET PDL + CLEARM HTICMF ;FLUSH ANY COMMAND FILES + JRST HCMN1R + + +HFF: PUSHJ P,HHU ;WIPE SCREEN + PUSHJ P,HCLEOF + PUSHJ P,HCSDPY + PUSHJ P,HRDHU + POPJ P, + +HGECMA: TDZA T,T ;READ COMMAND, NO ERROR ON UNDEF SYM (CALLER HANDLES) +HGECOM: MOVEI T,1 ;READ COMMAND, TYPE ERR ON UNDEF SYM + MOVEM T,HGEUSF + CLEARM HSMFND + PUSHJ P,HGCOM + SKIPGE HCSYL ;SKIP ON SYL NULL + SKIPGE HCNUMF + JRST HGECMX ;GOT NUMBER, OK + MOVEI B,HGSYMT ;SEARCH SYM TABLE +HGCSML: CAIL B,HGSYME + JRST HGCNF ;NOT FOUND + MOVE T,[440700,,HCBUF] + MOVE TT,(B) + HRLI TT,440700 +HGCSM2: ILDB ZR,T + ILDB C,TT + CAME ZR,C + JRST HGCSM3 ;THAT ONE LOSES + JUMPN C,HGCSM2 + MOVE B,1(B) + DPB B,[002000,,HCNUM] + SETOM HCNUMF + SETOM HSMFND +HGECMX: POPJ P, + +HGCSM3: ADDI B,2 + JRST HGCSML + +HGCNF: SKIPE HGEUSF + HSOUT [ASCIZ /??/] + POPJ P, + + +;SYMBOL TABLE FORMAT +; WD0 POINTER TO ASCIZ STRING +; WD1 VALUE (16 BITS) + +HGSYMT: [ASCIZ /FLAGA/] + HRRFLA + [ASCIZ /SFLAGA/] + HRSFLA + [ASCIZ /NFLAGA/] + HRRNLA + [ASCIZ /NSFLAGA/] + HRSNLA + [ASCIZ /FLAGB/] + HRRFLB + [ASCIZ /SFLAGB/] + HRSFLB + [ASCIZ /NFLAGB/] + HRRNLB + [ASCIZ /NSFLAGB/] + HRSNLB + [ASCIZ /FLAGC/] + HRRFLC + [ASCIZ /SFLAGC/] + HRSFLC + [ASCIZ /NFLAGC/] + HRRNLC + [ASCIZ /NSFLAGC/] + HRSNLC + [ASCIZ /FLAGD/] + HRRFLD + [ASCIZ /SFLAGD/] + HRSFLD + [ASCIZ /NFLAGD/] + HRRNLD + [ASCIZ /NSFLAGD/] + HRSNLD + [ASCIZ /STATA/] + HRRSTA + [ASCIZ /STATB/] + HRRSTB + [ASCIZ /STATC/] + HRRSTC + [ASCIZ /UAR/] + HRRUAR + [ASCIZ /UDR/] + HRRUDR + [ASCIZ /OREG/] + HRRORG + [ASCIZ /FCELL/] + HRRFC + [ASCIZ /NFCELL/] + HRRNFC + [ASCIZ /USP/] + HRRUSP + [ASCIZ /SIR/] + HRRSIR + [ASCIZ /SR/] + HRRSR + [ASCIZ /PR/] + HRRPR + [ASCIZ /IR/] + HRRIR + [ASCIZ /NAF/] + HRRNAF + [ASCIZ /PC/] + HRRPC + [ASCIZ /RAIDR/] + HRRDRO + [ASCIZ /PAR/] + HRRPAR + [ASCIZ /RESET/] + HRRSET + [ASCIZ /NXP/] + HRRNXP + [ASCIZ /NXS/] + HRRNXS + + [ASCIZ /PBUS/] + HRRPBS + [ASCIZ /SBUS/] + HRRSBS + [ASCIZ /POUT/] + HRRPOU + [ASCIZ /LOC/] + HRRPLC + [ASCIZ /VAL/] + HRRPVL + [ASCIZ /TYP/] + HRRPTP + REPEAT 20,[ + [HCONC ASCIZ /Q,\.RPCNT,/] + HRRQ0+.RPCNT +] + REPEAT 20,[ + [HCONC ASCIZ /NQ,\.RPCNT,/] + HRRNQ0+.RPCNT +] + [ASCIZ /STM/] + HRRSTM + [ASCIZ /SQL/] + HRRSQL + [ASCIZ /BD/] + HRRBD + [ASCIZ /STEPC/] + HRRSC + [ASCIZ /SA/] + HRRSA + [ASCIZ /STAR/] + HRRSTR + [ASCIZ /DBELL/] + HRRDBL + [ASCIZ /P11F/] + HRP11F + [ASCIZ /GM/] + HRRGM + [ASCIZ /SPD/] + HRRSPD + [ASCIZ /PV/] + HRRPV +HGSYME: + + +HCMTAB: HCMERR ;0 + HCMERR ;^A + HCB ;^B PROCEED TO BREAKPOINT + HSPC ;^C IGNORE + HCMERR ;^D + HCMERR ;^E + HCMERR ;^F + HCMERR ;^G (BELL) + HBS ;^H (BS) ?? + HCMERR ;^I (TAB) + HLF ;^J (LF) DDT-STYLE LINEFEED + HCMERR ;^K + HFF ;^L (FF) WIPE SCREEN + HCMCR ;^M (CR) + HCN ;^N STEP MACHINE. + HCMERR ;^O + HCP ;^P + HCMERR ;^Q (MUST BE QUOTED) + HCR ;^R + HCMERR ;^S + HCMERR ;^T + HCMERR ;^U + HCMERR ;^V + HCMERR ;^W + HCMERR ;^X + HCMERR ;^Y + HCMERR ;^Z + HCMERR ;ALT + HCMERR ;^\ + HCMERR ;^] + HCMERR ;^^ + HCMERR ;^_ + HPLS ;SPACE + HCMERR ;! + HCMERR ;" + HCMERR ;# + HCMERR ;$ + HTISM ;% (TYPE IN USER SYMBOL) + HCMERR ;& + HCMERR ;' + HCMERR ;( + HCMERR ;) + HCMERR ;* + HPLS ;+ + HCMERR ;, + HCMERR ;- + HCMERR ;. + HSLSH ;/ + + HCMERR ;0 (MUST FOLLOW @ TO DISPATCH) + HCMERR ;1 + HCMERR ;2 + HCMERR ;3 + HCMERR ;4 + HCMERR ;5 + HCMERR ;6 + HCMERR ;7 + HCMERR ;8 + HCMERR ;9 + HCLN ;: + HCMERR ;; + HCMERR ;< + HEQ ;= + HCMERR ;> + HCMERR ;? + HCMERR ;@ + HA ;A (MUST FOLLOW @ TO DISPATCH) + HCMERR ;B + HC ;C + HCMERR ;D + HCMERR ;E + HCMERR ;F + HG ;G + HCMERR ;H + HCMERR ;I + HCMERR ;J + HCMERR ;K + HL ;L + HCMERR ;M + HCMERR ;N + HO ;O + HP ;P + HCMERR ;Q + HR ;R + HS ;S + HT ;T + HU ;U + HV ;V + HCMERR ;W + HX ;X + HCMERR ;Y + HCMERR ;Z + + HCMERR ;[ + HCMERR ;\ + HCMERR ;] + HUPAR ;^ + HCMERR ;_ + HCMERR ;` + HCMERR ;{ + HCMERR ;| + HCMERR ;} + HCMERR ;~ +HRBCOD=.-HCMTAB ;MAPPED CODE FOR RUBOUT + HCMERR ;RUBOUT +IFN .-HCMTAB-200+32,.ERR \HCMTAB LOSES\ + + +HA: ADDI A,HRACO ;ADDRESS AC OR AAC +HVLRET: SOS HCVALF + POPJ P, + +HC: ADDI A,HRCMO ;ADDRESS CONTROL MEM + JRST HVLRET + +HP: ADDI A,HRPDO ;ADDRESS DATA PDL MEM + JRST HVLRET + +HU: ADDI A,HRUSO ;ADDRESS U-STACK (SPC) + JRST HVLRET + +HS: ADDI A,HRSQO ;ADDRESS SQUARE LIST + JRST HVLRET + +HL: ADDI A,HRPLO ;ADDRESS PIECE-LIST MEM + JRST HVLRET + +HV: ADDI A,HRPVO ;ADDRESS PIECE-VAL MEM + JRST HVLRET + +HT: ADDI A,HRPTO ;ADDRESS PIECE-TYPE MEM + JRST HVLRET + +HX: ADDI A,HRPXMO ;ADDRESS PIECE-EXISTS MEM + JRST HVLRET + +HR: ADDI A,HRASO ;ADDRESS A-SOURCE + JRST HVLRET + +HO: ADDI A,HRODO ;ADDRESS O-DEST + JRST HVLRET + +HPCNSP: MOVE A,HCHPT + PUSHJ P,HPAD + HSOUT [ASCIZ ?/ ?] + MOVE A,HCHPT + POPJ P, + +HRGPNT: PUSH P,A ;PRINT XXX/ WHERE XXX IS REG ADR + PUSHJ P,HPAD + HSOUT [ASCIZ ?/ ?] + POP P,A + PUSH P,HRGOPF ;DONT AFFECT HRGOPF + MOVEI B,HEXAMV + SETOM HEXPF + PUSHJ P,HREGDE + SKIPE HCPOS + HSOUT [ASCIZ / /] ;DONT PRINT SPACE AT BEG OF LINE + POP P,HRGOPF + POPJ P, + +HUPAR: PUSHJ P,HRGCLS ;UP ARROW + SOS HCHPT ;REGISTER CLOSED BEFORE MODIFING PT + JRST HLF2 + +HLF: PUSHJ P,HRGCLS ;CLOSE REGISTER BEFORE MODIFYING PT + AOS HCHPT ;LF EXAMINE NEXT REGISTE +HLF2: SKIPE HCPOS ;CR UNLESS AT BEG OF LINE + PUSHJ P,HCRR +HLF1: PUSHJ P,HPCNSP + SOS HCNUMF ;SIGNAL VALID ARG IN A +HSLSH: PUSHJ P,HPCSET ;SET UP POINT + MOVEI B,HEXAMV ;EXAMINE VECTOR + SETOM HEXPF ;WANT TO PRINT IT OUT + PUSHJ P,HREGDE + MOVE ZR,HRGDEF ;BASE OF LAST MEM EXAMINED + MOVEM ZR,HBLMEX + POPJ P, + + +HPCSET: SKIPL HCNUMF + JRST HSLSH3 ;NO ARG + CAIL A,HRORG + JRST HSLSH1 ;REGISTER ADDR OK + ADD A,HBLMEX ;TRY EXAMINING WITHIN LAST MEM + CAIL A,HRORG ;SKIP ON STILL LOSING +HSLSH1: MOVEM A,HCHPT + POPJ P, + +HSLSH3: MOVE A,HCHPT + POPJ P, + +HRGCLS: SKIPE HRGOPF ;CLOSE OPEN REGISTER + SKIPL HCNUMF + POPJ P, + MOVE A,HCHPT + MOVEI B,HDPV + PUSHJ P,HREGDD + POPJ P, + +HBS: PUSHJ P,HPCSET ;?? + SKIPN HCNUMF + PUSHJ P,HPCNSP + MOVE A,HCHPT + MOVEI B,HTIV + PUSHJ P,HREGDE + JRST HCRR + +HCR: CLEARM HTPLDF ;SIGNAL TYPE AND VAL MEMS NOT LOADED + PUSHJ P,HRESSV ;RESET + ERESET + POPJ P, + +HCB: SKIPL HCNUMF ;PROCEED TO BREAKPOINT + AOS HCNUM ;DEFAULT ARG OF 1 + MOVE A,HCNUM+1 + LSH A,16. + IOR A,HCNUM + MOVEM A,HCSTP1 + MOVE ZR,HSTFLG + CAIE ZR,1 + JRST [ PUSHJ P,HZST ;ZERO STAT BITS, REMEMBER WHERE THEY WERE + JRST HCB2] + SKIPLE HBPTIN + JRST HCB1 ;BPTS IN, OK +HCB2: MOVEI C,1 + MOVEM C,HBPTIN + PUSHJ P,HCB4 + JRST HCB1 + +HBOUT: MOVEI C,1 ;MAKE SURE BPTS OUT + CAMN C,HSTFLG + CAME C,HBPTIN + POPJ P, ;THEY RE NOT IN + CLEARB C,HBPTIN ;TAKE OUT BPTS +HCB4: HRLZ T,HBBPTP ;STORE LOW BIT OF C IN STAT BIT OF LOCNS IN BPT TBL + JUMPGE T,HCB1 +HCB3: MOVEI A,HELNTM + MOVE B,HBBPT(T) + JUMPL B,HCB5 ;XFER ON THIS ENTRY FLUSHED + ERCMEM + DPB C,[%H1ST HELNTM+1] + EWCMEM +HCB5: AOBJN T,HCB3 + MOVEI B,0 ;THE FOLLOWING IS A TOTAL KLUDGE TO GRONK INSTRUCTIONS + MOVEI A,HELNTM ; THAT WRITE INTO STATA OR STATB (THUS LOUSING UP THE WORKS). + MOVEI T,0 ; IT EVEN ATTEMPTS TO UNGRONK THEM SOMETIMES! + JUMPE C,HUCLBS ;UNCLOBBER STAT U INSTS. +HCLBS1: ERCMEM + LDB ZR,[%H1AMOP HELNTM+1] + JUMPN ZR,HCLBS2 ;SPARE THAT ONE, ITS AN ARRAY OP + LDB ZR,[%H2LIT HELNTM+2] + CAIN ZR,H2LPDS + JRST HCLBS2 ;PDL DEST IS OK TOO + LDB ZR,[%H2LOD HELNTM+2] + CAIE ZR,HODSTA + CAIN ZR,HODSTB + JRST .+2 + JRST HCLBS2 + MOVEM B,SCLB(T) ;FOUND ONE, SMASH IT + HRLM ZR,SCLB(T) + AOS T + MOVEI ZR,0 + DPB ZR,[%H2LOD HELNTM+2] + EWCMEM +HCLBS2: CAIGE B,CHECML-1 + AOJA B,HCLBS1 + CLEARM SCLB(T) + POPJ P, + +HUCLBS: SKIPN SCLB(T) + POPJ P, + HRRZ B,SCLB(T) + JUMPE B,CPOPJ + ERCMEM + HLRZ ZR,SCLB(T) + DPB ZR,[%H2LOD HELNTM+2] + EWCMEM + AOJA T,HUCLBS + +SCLB: BLOCK 40 + +HCN: SKIPL HCNUMF + AOS HCNUM ;DEFAULT ARG OF 1 + MOVE A,HCNUM+1 + LSH A,16. + IOR A,HCNUM + MOVEM A,HCSTP1 + CAIGE A,400000 ;MAX REASONABLE TO TRY STEPPING WITH 10 + SKIPE HSTEPM ;SKIP ON STEP WITH 10 + JRST HCNSTA ;STEP WITH STATISTICS COUNTER + PUSHJ P,HRESSV ;RESTORE STATE, SAVE, AND COME BACK +HCN1: SOSGE HCSTP1 + JRST HCN1X +HCN1A: AOS HSTEPS + ECLK + SKIPGE HCMREQ ;SKIP ON GUY WANTS TO QUIT OUT + JRST HCN1 +HCN1X: POPJ P, + +HCNSTA: SKIPL HSTFLG ;MAKE SURE STAT BITS SET + JRST [ PUSH P,HCNUM + MOVEI A,1 + MOVEM A,HCNUM + PUSHJ P,HSTAT1 + POP P,HCNUM + JRST .+1] +HCB1: AOS A,HCSTP1 ;(+1 BECAUSE HARDWARE STOPS ON -1) 32 BIT # OF STEPS + MOVNM A,HCSTPT + MOVEI A,HCSTPT ;LOAD MINUS NUMBER STEPS IN STATA, STATB + MOVEI B,HODSTA + EWOD + MOVN A,HCSTP1 + LSH A,-16. + MOVEM A,HCSTPT + MOVEI A,HCSTPT + MOVEI B,HODSTB + EWOD + PUSHJ P,HCSTA1 + SOS A,HCSTP1 ;COMPENSATE FOR AOS ABOVE + ADDM A,HSTEPS + POPJ P, + +HCSTA1: PUSHJ P,HRESSV + ESRUNS ;SET RUN AND ENABLE STAT STOP + MOVE A,[100000_4] ;RUN SIGNAL + TDNE A,UNIFA +HCHWA1: .HANG + JRST HCPX + +HCSTPT: 0 +HCSTP1: 0 + +HCP: CLEARM HSTEPS + PUSHJ P,HRESSV ;PROCEED! + ECLK ;CLOCK ONCE TO ELIMINATE POSSIBLE IR PARITY ERR + ESRUN ;SET RUN + SKIPL HCMREQ + JRST HCPX + MOVE A,[100000_4] ;WAIT FOR RUN TO GO AWAY + TDNE A,UNIFA +HCHWAT: .HANG +HCPX: MOVE A,UNIFA + TDNE A,[10000_<16.+4.>] ;SKIP ON PARITY STOP NOT ENABLED + TDNN A,[20000_4] ;SKIP ON PARITY ERROR + JRST HCPX1 + HSOUT [ASCIZ /PARITY STOP/] +HCPX1: ESTOP + POPJ P, + +HRESSV: PUSHJ P,HLEAVE ;LEAVE - CALL BACK -ENTER -RETURN + PUSHJ P,@(P) + PUSHJ P,HENTER + SOS HDPFLG ;REMEMBER TO UPDATE DISPLAY AT COMMAND LOOP + SUB P,[1,,1] + POPJ P, + + +;HRESNV IS SIMILAR TO HRESSV EXCEPT THE GENERAL IDEA IS TO GET THE +; MACHINE INTO A STATE WHERE IT CAN BE CLOCKED WITHOUT DESTROYING ITS STATE. +; IT THEN CALLS BACK CALLER, WHO CAN HACK. ON RETURN, REAL STATE OF MACHINE +; IS RESTORED (INSTEAD OF READING IT BACK FROM HARDWARE). + +HRESNV: MOVE A,[HSVIR,,HNVTIR] ;SAVE REAL IR + BLT A,HNVTIR+5 + MOVE A,HSVIR+1 ;NOW NO-OP IR + TRNE A,H1AMOP + JRST HRESN1 ;ARRAY INST, CLEAR WRITE PULSES + LDB C,[%H2LIT HSVIR+2] ;GET ASDEST TYPE FIELD + CAIN C,3 + JRST HRVCPD ;PDL DEST, CHANGE TO NON-IMMED + MOVE B,[.BM %H2LOD] ;OTHERWISE, CLEAR ODEST + ANDCAM B,HSVIR+2 +HRESN2: MOVE B,[H1STAT+H1PSHJ+H1POPJ+<.BM %H1PAF>+<.BM %H1UB>+<.BM %H1FC>] + ANDCAM B,HSVIR+1 ;CLEAR WD1 BITS THAT MIGHT DO SOMETHING BAD + PUSH P,HPSVAL ;REMEMBER HOW MUCH OF MACHINE STATE REALLY SAVED + PUSH P,HFSVAL + PUSH P,HPARSF + PUSH P,HUSPSF + NHPSH==4 ;NUMBER OF PUSH ES DONE HERE + PUSHJ P,HLEAVE ;RESTORE MACHINE STATE + PUSHJ P,@-NHPSH(P) ;RETURN TO CALLER + POP P,HUSPSF + POP P,HPARSF + POP P,HFSVAL + POP P,HPSVAL + MOVE A,[HNVTIR,,HSVIR] + BLT A,HSVIR+5 ;PUT BACK IR + SUB P,[1,,1] ;FLUSH RETURN TO CALL BACK GUY + POPJ P, + +HRVCPD: LDB A,[%H2ASL HSVIR+2] ;CHANGE PDL-DEST TO NON-IMMED + CLEARM HSVIR+2 + DPB A,[%H2ASH HSVIR+2] ;MOVE TO HIGH A-SRC FIELD + JRST HRESN2 + +HRESN1: MOVE B,[H2AWPX+H2AWSR+H2AWSIR+H2AWPR+H2AWMV+H2AWDT] + ANDCAM B,HSVIR+2 ;CLEAR WRITE PULSES + ANDCAM B,HSVIR+4 + JRST HRESN2 + +HSPC: +HPLS: SKIPL HCNUMF + POPJ P, ;NULL ARG, RETURN NULL + MOVE A,[HCNUM,,HCVAL] ;PLUS, SPACE JUST RETURN ARG AS VALUE + BLT A,HCVAL+4-1 + MOVE A,HCNUM + SOS HCVALF + POPJ P, + +HEQ: SKIPN HCNUMF + JRST HEQ1 ;TYPE OUT LAST REG INSTEAD + MOVE B,A + MOVEI C,6 + EOCTP +HEQ2: JRST HCRR + +HEQ1: CLEARM HEXPF ;FETCH POINT AND PRINT NUMERIC + MOVE A,HCHPT + MOVEI B,HEXAMV + PUSHJ P,HREGDE + IPNFLD + JRST HEQ2 + + +;CHECK IR BITS +HTEST: X HRESET ;TEST SEQUENCE + SETZM HSA +HLUP: MOVE A,HSA + AOJ A, + MOVEM A,HDA + DPB A,[10400,,TLCTL] ;DESTINATION + MOVE A,HSA + DPB A,[100400,,TLCTL] ;MUX + MOVE A,TLCTL + X HS1 + MOVEI A,0 + X HS2 + LDB B,[HMUX] + CAME A,B + .VALUE + MOVEI A,177777 + X HS2 + LDB B,[HMUX] + MOVE C,HSA + CAIN C,4 ;IRA 42-47 + ANDI A,176000 + CAME A,B + .VALUE + AOS A,HSA + CAIE A,6 + JRST HLUP + +;CHECK CMEM BITS + X HRESET + SETZM HDATA +HLUP1B: SETZM HSA +HLUP1: MOVE B,HSA ;CMEM ADDRESS + MOVEI A,1 ; IR 0-16 + X HDEP + MOVEI B,0 +HLUP1A: AOJ A, + X HDEP + CAIE A,6 + JRST HLUP1A + MOVEI A,10 +HLUP2: MOVE B,HDATA + X HDEP + CAIE A,13 + AOJA A,HLUP2 + X HSS + X HEXIR + MOVEI C,0 +HLUP3: MOVE A,HDATA + ANDI A,177777 + CAIN C,4 + ANDI A,176000 + MOVE B,HIRA(C) + CAME A,B + .VALUE + CAIE C,5 + AOJA C,HLUP3 + X HSS + X EXMPAR + TRNE B,2000 + .VALUE + AOS B,HSA + CAIE B,2000 + JRST HLUP1 + SETCMB A,HDATA + JUMPN A,HLUP1B + + ;TEST A MEMORY + X HRESET + SETZM HDATA +HLUP5A: SETZM HSA ;MEMORY LOCN +HLUP5: MOVE A,HSA + DPB A,[020400,,HCWAC+2] ;ODEST=AC + DPB A,[000400,,HCRAC+3] ;BBUS=AC + TRO A,20 + DPB A,[120600,,HCRAC+2] ;ASOURCE ALSO=AC + DPB A,[120600,,HCRACA+2] ; READ ABUS SIDE OF AC + MOVEI A,HCWAC ;WRITE AC OP + X HDEPI + MOVE A,HDATA + X HS2 + X HSS ;SINGLE STEP - WRITE AC + MOVEI A,HCRAC + X HDEPI + X EXMO + MOVE A,HDATA + ANDI A,177777 + CAME A,B + .VALUE + MOVE A,HSA + TRNE A,20 ;STILL IN AC'S (NOT AAC'S) + JRST HLUP5C + MOVEI A,HCRACA ;READ AC, THRU ABUS + X HDEPI + X EXMO + MOVE A,HDATA + ANDI A,177777 + CAME A,B + .VALUE +HLUP5C: X HSS + X EXMPAR + AOS A,HSA + TRNN A,20 ;UP INTO AAC YET? + TRZ B,3 ;IGNORE AAC ERRS UNTIL THEN + TRNE B,77 ; RBBUS, LBBUS, RAC, LAC, RAAC, LAAC + .VALUE + CAIE A,20 + JRST HLUP5 + SETCMB A,HDATA + JUMPN A,HLUP5A + +;TEST PDL CONTENTS +HLUP6: X HRESET + SETZM HDATA +HLUP6B: SETZM HSA ;MEMORY LOCN +HLUP6A: MOVEI A,[0 ? 0 ? 77_2 ? 3_10. ? 0 ? 0] ;WRITE PAR + X HDEPI + MOVE A,HSA + X HS2 ; PDL POINTER + X HSS + MOVEI A,[0 ? 0 ? 20_2 ? 3_10. ? 0 ? 0] ;WRITE PDL + X HDEPI + MOVE A,HDATA + X HS2 + X HSS ;SINGLE STEP + MOVEI A,[0?0? 0? 32_4? 0?0] ;READ PDL(PAR) + X HDEPI + X EXMO + MOVE A,HDATA + ANDI A,177777 + CAME A,B + .VALUE + X HSS + X EXMPAR + TRNE B,1400 + .VALUE + AOS A,HSA + CAIE A,2000 + JRST HLUP6A + SETCMB A,HDATA + JUMPN A,HLUP6B + + ;TEST SPC CONTENTS +HLUP7: X HRESET + SETZM HDATA +HLUP7A: SETZM HSA +HLUP7B: MOVEI A,[0?0? 22_2? 3_10.? 0?0] ;WRITE SPCPTR + X HDEPI + MOVE A,HSA + X HS2 + X HSS + MOVEI A,[0?0? 21_2? 3_10.? 0?0] ;WRITE SPC(SPCPTR) + X HDEPI + MOVE A,HDATA + X HS2 + X HSS + MOVEI A,[0?0? 0? 5_10.? 0?0] ;READ SPC=>OBUS + X HDEPI + X EXMO + MOVE A,HDATA + ANDI A,3777 + CAME A,B + .VALUE + MOVEI A,[0?1_12.? 0?0? 0?0] ;POPJ + X HDEPI + X HSS + MOVEI A,6_8 ;LOOK AT PC + X HS1 + MOVE A,HDATA + ANDI A,3777 + LDB B,[HMUX] + ANDI B,3777 + CAME A,B + .VALUE + MOVEI A,[0?0? 0?4_10.? 0?0] ;READ SPCPTR + X HDEPI + X EXMO + MOVE A,HSA + SOJ A, + ANDI A,377 + CAME A,B + .VALUE + X EXMPAR + TRNE B,4000 + .VALUE + AOS A,HSA + CAIE A,400 + JRST HLUP7B + SETCMB A,HDATA + JUMPN A,HLUP7A + + ;TEST RANDOM REGISTERS +HLUP9: X HRESET + SETZM HDATA +HLUP9A: SETZM HSA +HLUP9B: MOVE A,HSA + ADDI A,14 + MOVE B,HDATA + X HDEP + MOVE A,HSA + ADDI A,10 + DPB A,[120600,,HASRC+2] ;READ BACK THRU ABUS + MOVEI A,HASRC + X HDEPI + X EXMO + MOVE A,HDATA + MOVE D,HSA + AND A,HFLGBT(D) + AND B,HFLGBT(D) + CAME A,B + .VALUE + AOS A,HSA + CAIGE A,4 + JRST HLUP9B + SETCMB A,HDATA + JUMPN A,HLUP9A + + ;NOW RUN THROUGH SOME RANDOM REGISTERS +HLUP10: X HRESET + SETZM HDATA + ;STATA, STATB, UAR, FLAG-CELL, NXFLAG-CELL +HLP10A: + IRP ODEST,,[4,5,3,23,24]ASOURC,,[14,15,16,4,5]TAG,,[STATA,STATB,UAR,FLGCEL,NXFLGC] +TAG: HLOAD 7,HDATA + HXCT [0?0? 17_10.+ODEST_2 ? 32_4] ;UDR => ODEST + HXCT [0?0? ASOURC_10.+2_2 ? 32_4] ;ASOURC => UDR + HSTORE 17,A ;UDR => OBUS + CAME A,HDATA + .VALUE + TERMIN + ;PR +HPR: HLOAD 7,HDATA + HXCT [1?0? 17_10.+17_2? 32_4] ;UDR => PR,,SR + HLOADIR [0?H1AMOP? 0? 2_10.+1_6+1_2] ; PR=>PBUS=>PSBUS.L + HSTORE 11,A + LDB A,[101000,,A] + MOVE B,HDATA + ANDI B,377 + CAME A,B + .VALUE + ;SR +HSR: HLOAD 7,HDATA + HXCT [1?0? 17_10.+17_2? 32_4] ;UDR => PR,,SR + HLOADIR [0?H1AMOP? 0? 2_10.+1_6+1_2] ; SR=>SBUS=>PSBUS.R + HSTORE 11,A + LDB A,[1000,,A] + MOVE B,HDATA + ANDI B,377 + CAME A,B + .VALUE + +HPLIST: SETZM HSA +HPLST1: MOVE A,HDATA + MOVE B,HSA + DPB B,[101000,,A] ; ADR,,DATA => PR,,SR + HLOAD 7,A + HXCT [1?0? 17_10.+17_2? 32_4] ;UDR=>PR,,SR +HLOC: HXCT [2?H1AMOP? 40? 5_10.+1_6+1_2] ;WMOVE, LOC,,POUT =>PSBUS + HLOADIR [0?H1AMOP? 0? 5_10.+1_6+1_2] ; POUT,,LOC =>PSBUS + HSTORE 11,A + LDB A,[1000,,A] + LDB D,[1000,,HDATA] + CAME A,D + .VALUE +HVAL: HLOAD 7,HDATA + HXCT [1?0? 17_10.+14_2? 32_4] ;UDR =>VAL(ADR) + HLOADIR [0?H1AMOP? 0? 3_10.+1_6+1_2] ; VAL =>PSBUS + HSTORE 11,A + CAME A,D + .VALUE +HTYP: HXCT [1?0? 17_10.+13_2? 32_4] ;UDR => TYP(ADR) + HLOADIR [0?H1AMOP? 0? 4_10.+1_6+1_2] ; TYP => PSBUS + HSTORE 11,A + CAME A,D + .VALUE +HPOUT: MOVE A,HSA + DPB D,[101000,,A] + HLOAD 7,A + HXCT [1?0? 17_10.+17_2? 32_4] ;DATA,,ADR => PR,,SR + HXCT [2?H1AMOP? 40? 5_10.+1_6+1_2] ;WMOVE + HLOADIR [0?H1AMOP? 0? 5_10.+1_6+1_2] + HSTORE 11,A + LDB A,[101000,,A] + CAME A,D + .VALUE + AOS A,HSA + CAIGE A,256. + JRST HPLST1 + + MOVEI A,177777 + XORB A,HDATA + JUMPN A,HLP10A + + .VALUE + ;SETUP LOOP IN CMEM +HLUPR: X HRESET + MOVEI D,HPROG + X HLODC + MOVEI A,5 ;SET RUN + DPB A,[T11LH,,UNIFA] ;START + .VALUE + POPJ P, + +XSRUNS: MOVE A,HCHSPD ;SET RUN, ENABLE STAT STOP + TROA A,4 +XSRUN: MOVE A,HCHSPD ;SET RUN + ANDI A,7 + LSH A,1 + TRO A,10141 ;SET PARITY STOP, NPRENB AND INTENB + MOVEI B,10377 ;FIELD IN CONTROL WD WANT TO AFFECT (CLR RESET) +XSUCW: MOVE ZR,UNIFA ;READ IN CURRENT CONTROL WD + LSH A,16.+4. + LSH B,16.+4. + ANDCAM B,ZR ;SET CHEOPS CONTROL WORD + IORM A,ZR + TRO ZR,1_2 ;WRITE LEFT HALF ONLY + MOVEM ZR,UNIFA + LSHC A,-16.-4. ;PUT BACK A AND B + POPJ P, + + ;LOAD PROGRAM POINTED TO BY (D) +HLODC: PUSH P,A + PUSH P,B + HLRZ A,(D) + HRRM A,HCGO +HLOD1: SKIPN A,(D) + JRST HLODG + HLRZ B,A + X HDEPC + AOJA D,HLOD1 +HLODG: MOVEI A,HCGO + X HDEPI +POPBJ: POP P,B + POP P,A + POPJ P, + +HCGO: 0? 0? 0? 0? 0? 0 + +HASRC: 0 ? 0 + 0 ? 32_4 ;ALU = ABUS + 0 ? 0 + +HFLGBT: 41020 ? 177777 ? 177777 ? 170000 ;LOADABLE BITS + +HCWAC: 0 ? 0 + 60_2 ;ODEST=AC + 3_10. ;OBUS=DBR + 0 ? 0 + +HCRAC: 0 ? 0 + 0 ? 0 ;BBUS>ALU>OBUS + 0 ? 0 + +HCRACA: 0 ? 0 + 20_10. ? 32_4 ; AC=>ABUS=>ALU=>OBUS + 0 ? 0 + +HPROG: 100,,[ 100?0? 20_10.+60_2? 1_9] ;AC0+1 => AC0 + 101,,[ 102?0? 64_2? 34_4] ;SETO=>AC4 + 102,,[ 103?0? 65_2? 34_4] ;SETO => AC5 + 103,,[ 101?0? 25_10.? 32_4] ; AC(5) => OBUS + 0 + +HDATA: 0 + +HIRA: 0 +HIRB: 0 +HIRC: 0 +HIRD: 0 +HIRAC: 0 +HIRAD: 0 + + ;RANDOM ROUTINES +HBLATT: MOVEI A,HPROG + HLRZ B,(A) ;ADDRESS + LSH B,20. + TRO B,1 +HBLTT3: SKIPN C,(A) + JRST HBLTT1 + HRLI C,-4 + MOVEI TT,1 + DPB TT,[HLODSL] + MOVEM B,UNIFA+1 ;SET ADDRESS + MOVEI T,10 +HBLTT2: DPB T,[HLODSL] + MOVE TT,(C) + LSH TT,20. + TRO TT,1_2 + MOVEM TT,UNIFA+1 + AOJ T, + AOBJN C,HBLTT2 + ADD B,[1_20.] + AOJA A,HBLTT3 +HBLTT1: POPJ P, + +HQ: X HSS +HEXIR: MOVEI A,0 +HEXIR0: DPB A,[HMUXSL] + LDB B,[HMUX] + MOVEM B,HIRA(A) + CAIE A,5 + AOJA A,HEXIR0 + POPJ P, + +HDEPIF: PUSH P,A ;DEPOSIT ALL 6 WDS FROM BLOCK(A) INTO IR + MOVEI A,4(A) + PUSHJ P,HDEPI4 ;DO WDS 4 AND 5 FIRST SO HARDWARE IR PARITY FROB WINS + JRST HDEPI3 + + +;DEPOSIT INTO IR (FROM C(A)) +HDEPI: PUSH P,A + MOVE TT,1(A) + MOVEI A,2(A) + TRNE TT,H1AMOP + PUSHJ P,HDEPI4 ;IF ARRAY OP, PUT IR C AND D INTO IRA C AND D +HDEPI3: MOVE A,[100000_4] ;WAIT FOR RUN TO GO AWAY + TDNE A,UNIFA + XCT R.VL ;MACHINE HAD BETTER NOT BE RUNNING + MOVE A,(P) + MOVEI T,1 ;IR + HRLI A,-4 +HDEPI1: DPB T,[HLODSL] + MOVE TT,(A) + DPB TT,[T11LH,,UNIFA+1] + AOJ T, + AOBJN A,HDEPI1 + JRST HDEPC3 + +HDEPI4: MOVE T,[100000_4] ;WAIT FOR RUN TO GO AWAY + TDNE T,UNIFA + XCT R.VL ;MACHINE HAD BETTER NOT BE RUNNING + HRLI A,-2 ;LOAD IRA C AND D FROM (A), 1(A) + MOVEI T,5 +HDEPI2: DPB T,[HLODSL] + MOVE TT,(A) + DPB TT,[T11LH,,UNIFA+1] + AOJ T, + AOBJN A,HDEPI2 + POPJ P, + + + +;DEPOSIT INTO CMEM (FROM C(A)) AT LOC (B) +HDEPC: PUSH P,A + MOVEI T,10 ;CMEM + HRLI A,-4 +HDEPC2: MOVEI TT,1 ;IRA + DPB TT,[HLODSL] ;SET NADR + DPB B,[T11LH,,UNIFA+1] + MOVEI TT,2 ;IRB ASSURE POPJ BIT IS CLEAR!!! + DPB TT,[HLODSL] + MOVEI ZR,0 + DPB ZR,[T11LH,,UNIFA+1] +HDEPC1: DPB T,[HLODSL] ;STORE + MOVE TT,(A) + DPB TT,[T11LH,,UNIFA+1] + AOJ T, + AOBJN A,HDEPC1 + HSTORE 0,TT + ANDI TT,3777 + CAME TT,B + .VALUE +HDEPC3: MOVEI TT,0 + DPB TT,[HLODSL] ;CLEAR LOADSL + POP P,A + POPJ P, + +;STORE C(B) INTO LOADSL(A) +HDEP: MOVE T,[100000_4] ;WAIT FOR RUN TO GO AWAY + TDNE T,UNIFA + XCT R.VL ;MACHINE HAD BETTER NOT BE RUNNING + MOVEI T,0 + DPB A,[010400,,T] + MOVEI TT,1_2 + DPB T,[T11LH,,TT] + MOVEM TT,UNIFA + DPB B,[T11LH,,TT] + MOVEM TT,UNIFA+1 + POPJ P, + +XRESET: +HRESET: MOVEI A,200 + X HS1 + MOVEI A,0 + X HS1 ;RESET + POPJ P, + +XSTOP: CLEARM HRUN ;STOP CHEOPS + MOVEI A,0 + MOVEI B,201 ;MAKE SURE RESET OFF TOO + ESUCW ;FIRST TURN OFF RUN + MOVEI A,0 + MOVEI B,237 + ESUCW ;THEN CLEAR OUT THE REST (FOR RANDOMNESS) + POPJ P, + + +;SINGLE STEP +HSS: MOVE ZR,[100000_4] ;WAIT FOR RUN TO GO AWAY + TDNE ZR,UNIFA + XCT R.VL ;MACHINE HAD BETTER NOT BE RUNNING + MOVEI ZR,1 + DPB ZR,[T11LH,,UNIFA] + SETZ UNIFA + POPJ P, + +XCLK: PUSH P,A ;SINGLE STEP CLOCK + PUSH P,B + MOVE A,[100000_4] ;WAIT FOR RUN TO GO AWAY + TDNE A,UNIFA + XCT R.VL ;MACHINE HAD BETTER NOT BE RUNNING + MOVEI A,141 + MOVEI B,377 + ESUCW + MOVEI A,0 + MOVEI B,237 + ESUCW + POP P,B + POP P,A + POPJ P, + +EXMPAR: MOVEI A,14_8 ; SELECT PARITY BITS + X HS1 + LDB B,[HMUX] + POPJ P, + +EXMO: MOVEI A,11_8 ;MUX SEL=OBUS + X HS1 + LDB B,[HMUX] + POPJ P, + +HS1: MOVEI B,1_2 ;SET UNIFARCE CTL REG + DPB A,[T11LH,,B] + MOVEM B,UNIFA + POPJ P, + + +HS2: MOVEI B,1_2 ; SET DBR + DPB A,[T11LH,,B] + MOVEM B,UNIFA+1 + POPJ P, + +; CAIN A,HXCT_<-33> +; JRST HUUXCT +; CAIN A,HLOAD_<-33> +; JRST HUULOD +; CAIN A,HSTORE_<-33> +; JRST HUUSTO +; CAIN A,HLOADIR_<-33> +; JRST HUUIR +; CAIN A,HSOUT_<-33> +; JRST HUUSOU +;UUO HANDLER MUST XFER TO APPROPRIATE UUO ROUTINE WITH RUNTIME ACS +; SAVED IN BLOCK AT HUUOAC + +HUUINT: 0 ;PROCESS TTY INTERRUPT + MOVEI A,TYIC + .ITYIC A, + JRST HUUINX + SKIPN HTTYMD + JRST HUUINX ;NOT IN CONSOLE MODE + CAIE A,^X + JRST HUUINX + MOVE A,42 + HRRZ A,1(A) + CAIE A,HCHWA1 + CAIN A,HCHWAT + JRST [ MOVE A,42 ;IF WAITING ON CHEOPS, QUIT OUT + AOS 1(A) + JRST .+1] + AOSG HCMREQ ;TRY TO REACH COMMAND LVL + JRST HUUINX + MOVE A,42 ;QUIT OUT + HRLI A,HREINI + HLRM A,1(A) +HUUINX: JRST @HUUINT + +HUUSOU: HRRZ C,40 + HRLI C,440700 +HUUSO1: ILDB A,C + JUMPE A,HUUXIT + PUSHJ P,HTYO + JRST HUUSO1 + +HUUSTO: LDB A,[270400,,40] + DPB A,[HMUXSL] + LDB A,[HMUX] + HRRZ B,40 + CAIGE B,20 + ADDI B,HUUOAC + MOVEM A,(B) + JRST HUUXIT + +HUULOD: LDB A,[270400,,40] + DPB A,[HLODSL] ;PUT STUFF IN LOAD SELECT FIELD + HRRZ B,40 + CAIGE B,20 + ADDI B,HUUOAC + HRRZ A,(B) + DPB A,[T11LH,,UNIFA+1] ;PUT DATA IN DBR + MOVEI A,0 + DPB A,[HLODSL] ;CLEAR OUT LOAD SELECT + JRST HUUXIT + +HUUIR: HRRZ A,40 + X HDEPI + JRST HUUXIT + +HUUXCT: HRRZ A,40 + X HDEPI + X HSS +HUUXIT: POPJ P, + + + +;"REGISTER ADDRESS" ORIENTED ADDRESS TEST +HADRT: CLEARM HADRRC ;ROTATE COUNT +HADRL1: MOVEI T,HADRB + MOVEI B,HDPV + PUSHJ P,HADRSC ;MAKE SCAN WRITING + JFCL + MOVEI T,HADRC + MOVEI B,HEXAMV + CLEARM HEXPF ;DONT PRINT ANYTHING + PUSHJ P,HADRSC ;MAKE SCAN READING + PUSHJ P,HADTST + AOS A,HADRRC + CAIGE A,64. + JRST HADRL1 +HADCPJ: POPJ P, + +HADTST: LSH B,-9 ;# OF BITS IN THAT MEM + MOVEI C,HADRB +HADTS1: JUMPLE B,HADCPJ + MOVE D,(C) + XOR D,(A) + CAIGE B,16. + AND D,HADMSK(B) + TRNE D,177777 + .VALUE ;LOST + SUBI B,16. + AOS C + AOJA A,HADTS1 + +HADRSC: MOVEI C,HRGHTB ;TABLE OF "HOLES" IN REGISTER ADR SPACE + MOVEM B,HADRV ;MAKE SCAN THRU REGISTER ADDRESS SPACE + MOVEM T,HADRBP + MOVEI A,HRORG +HADRT3: MOVEM C,HADRHP +HADRT2: MOVE C,HADRHP ;GOT TO NEXT HOLE YET? + CAML A,(C) + AOJA C,[ MOVE A,(C) ;PLACE TO PICK UP + AOJA C,HADRT3] + CAIL A,HRREND + JRST [ AOS (P) + POPJ P,] ;THRU WITH PASS + MOVE T,HADRBP ;DEPOSIT IN THAT REG + MOVE B,HADRV ;VECTOR + HRR C,A ;GENERATE N BITS OF . + HRL C,A + MOVE D,C + ROTC C,@HADRRC + DPB D,[2000,,HADRB] + LSHC C,-20 + DPB D,[2000,,HADRB+1] + LSHC C,-20 + DPB D,[2000,,HADRB+2] + LSHC C,-20 + DPB D,[2000,,HADRB+3] + PUSH P,A + PUSHJ P,HREGDC + XCT @-1(P) ;MAYBE DO CHECKING + POP P,A + AOJA A,HADRT2 + + +HADRV: 0 ;SAVE VECTOR TO DISPATCH ON +HADRBP: 0 ;WHAT TO HAVE IN T ON HREGDC (AND THENCE IN A ON DISP) +HADRRC: 0 ;ROTATE COUNT +HADRHP: 0 ;POINTER TO HOLES TABLE + +HADRB: 0 ;BLOCK USED TO HOLD DATA + 0 + 0 + 0 + +HADRC: 0 ;BLOCK USED TO READ IN DATA + 0 + 0 + 0 + +HADMSK: 0 + 1 + 3 + 7 + 17 + 37 + 77 + 177 + 377 + 777 + 1777 + 3777 + 7777 + 17777 + 37777 + 77777 + 177777 + +HRGHTB: +IFN HRCME-HRCMO-CHECML,[ + HRCMO+CHECML ;TABLE OF HOLES IN REG ADR SPACE + HRCME ; ODD WDS GIVE END OF HOLE +] + HRSQO ;SQ LIST WOULD LOSE SINCE IT ALSO GETS WRITTEN WITH LOC + HRSQE + HRRGO ;RANDOM REGISTERS + HRREND + 200000,, + + + +XRCMEM: PUSH P,T ;READ C-MEM + PUSH P,TT + PUSH P,A + DPB B,[%H0JF XRCMA1] ;MAKE A 0 INSTRUCTION WITH THE DESIRED NAF + MOVEI A,XRCMA1 + EWIR + ECLK + MOVE A,(P) + JRST XRIR1 + +XRCMA1: 0 + 0 + 0 + 0 + +XRFIR: PUSH P,T ;READ FULL IR (ALL 6 WDS) + PUSH P,TT + PUSH P,A + MOVSI T,-6 + JRST XRIR2 + +XRIR: PUSH P,T ;READ IR + PUSH P,TT + PUSH P,A +XRIR1: MOVSI T,-4 +XRIR2: DPB T,[HMUXSL] + LDB TT,[HMUX] + MOVEM TT,(A) + AOS A + AOBJN T,XRIR2 + POP P,A + POP P,TT + POP P,T + POPJ P, + +XWFIR: PUSH P,T ;WRITE FULL IR (ALL 6 WDS) + PUSH P,TT + PUSHJ P,HDEPIF + JRST XWFI1 + +XWIR: PUSH P,T ;WRITE IR + PUSH P,TT + PUSHJ P,HDEPI +XWFI1: POP P,TT + POP P,T + POPJ P, + +XWCMEM: PUSH P,T ;WRITE C-MEM + PUSH P,TT + PUSHJ P,HDEPC + POP P,TT + POP P,T + POPJ P, + + +XRPDLB: PUSH P,B ;READ DATA PDL MEMORY + PUSHJ P,XLDPAR ;ASSURE PAR SAVED AND LOAD IN B + MOVEI B,HASPDL ;ASOURCE ADR OF PDL + ERAS + POP P,B + POPJ P, + +XLDPAR: PUSH P,A + MOVEM B,XRPDT1 ;SAVE PAR AND PUT B IN PAR + ESPAR ;ASSURE PAR SAVED +XSVPA1: MOVEI A,XRPDT1 + MOVEI B,HODAAC ;ODEST ADR OF PAR (AAC 0) + EWOD + POP P,A + POPJ P, + +XRPDT1: 0 + +XSPAR: SKIPGE HPARSF ;SAVE PAR IF NOT ALREADY + POPJ P, ;PAR ALREADY SAVED + PUSH P,A + PUSH P,B + MOVEI A,HPARSV ;SAVE PAR + MOVEI B,10 ;PAR IS AAC 0 + ERAC + SETOM HPARSF + POP P,B + POP P,A + POPJ P, + +XWPDLB: ;WRITE DATA PDL MEMORY + PUSHJ P,XLDPAR ;ASSURE PAR SAVED AND LOAD IN B + MOVEI B,HODPDL ;ODEST ADR OF PDL + EWOD + POPJ P, + +XLDUSP: PUSH P,A + MOVEM B,XRPDT1 ;SAVE USP AND PUT B IN USP + ESUSP +XSVUS1: MOVEI A,XRPDT1 + MOVEI B,HODUSP ;ODEST ADR OF USP + EWOD + POP P,A + POPJ P, + + +XSUSP: SKIPGE HUSPSF ;SKIP IF USP NOT SAVED ALREADY + POPJ P, ;USP ALREADY SAVED + PUSH P,A + PUSH P,B + MOVEI A,HUSPSV ;SAVE USP + MOVEI B,HOSUSP + EROS + SETOM HUSPSF + POP P,B + POP P,A + POPJ P, + +XRUSTK: PUSHJ P,XLDUSP ;READ U-STACK MEM (SAVE AND LOAD USP (SPCPTR) + MOVEI B,HOSUS ;O-BUS ADR OF U-STACK + EROS + POPJ P, + +XWUSTK: PUSHJ P,XLDUSP ;WRITE U-STACK MEM + MOVEI B,HODUS + EWOD + POPJ P, + +XRAC: PUSH P,A + DPB B,[%H3LBB XRACIN+3] ;READ B-BUS ADR (AC OR AAC) + MOVEI A,XRACIN + EWIR + POP P,A + HSTORE H0MOB,(A) ;READ OBUS + POPJ P, + +XRACIN: 0 ;ALU INSTRUCTION TO READ B-BUS + 0 + 0 + 37_4 ;SET B + + +XWAC: ADDI B,HODAC ;WRITE B-BUS ADR (CONVERT TO ODEST ADR) +XWOD: DPB B,[%H2LOD XWODIN+2] ;WRITE ODEST ADR (PUT DEST IN ALU INST) + PUSH P,A + MOVEI A,XWODIN ;PUT THAT IN IR + EWIR + POP P,A ;STORE DESIRED DATA IN DBR + MOVE B,(A) + DPB B,[T11LH,,UNIFA+1] + ECLK ;NOW CLOCK IT + POPJ P, + +XWODIN: 0 + 0 + 0 ;ODEST GETS STORED HERE + HOSDBR_10. + + +XRSQL: PUSH P,A ;READ SQUARE LIST MEM + PUSHJ P,XSQLSL ;SELECT ADDRESS IN SQARE LIST MEM + ; ALSO SELECT PS-BUS FROM POUT,,LOC + HSTORE H0MOB,B ;READ O-BUS + LDB B,[101000,,B] ;GET POUT + POP P,A + MOVEM B,(A) + POPJ P, + +XSQLSL: MOVEM B,XSQLS1 ;SELECT SQUARE LIST ADR IN B + MOVEI A,XSQLS1 + MOVEI B,0 + EWPDLB ;DEPOSIT THAT IN PDL-MEM 0 (ALSO LEAVING PAR=0) + MOVEI A,XSQLS2 + EWIR + POPJ P, + +XSQLS1: 0 + +XSQLS2: 0 ;ARRAY INSTRUCTION + H1AMOP ; PDL -> SBUS, POUT,,LOC -> PS-BUS + H2APSR + 5*H3APSB+1*H3ASQB + +XWSQL: PUSH P,A ;WRITE SQUARE LIST (DOES WMOVE) + MOVEM B,XSQLS1 + MOVE B,(A) ;GET DATA TO WRITE + DPB B,[101000,,XSQLS1] ;PUT THAT IN LH OF ADR (SO IT SHOW UP ON L A-BUS +XWSQL1: PUSH P,[XSQLS3] +XWSQL2: MOVEI A,XSQLS1 + MOVEI B,0 + EWPDLB + POP P,A + EWIR + ECLK + POP P,A + POPJ P, + +XSQLS3: 0 + H1AMOP + H2APSR+H2AWMV + 5*H3APSB+1*H3ASQB + +XWPIEC: PUSH P,A ;XWSQL AND ALSO SET PEX BIT + MOVEM B,XSQLS1 + MOVE B,(A) ;GET DATA TO WRITE + DPB B,[101000,,XSQLS1] ;PUT THAT IN LH OF ADR (SO IT SHOW UP ON L A-BUS + PUSH P,[XWPEC1] + JRST XWSQL2 + +XWPEC1: 0 ;SIMILAR TO ABOVE BUT ALSO WRITES PIECE-EXISTS BIT + H1AMOP + H2APSR+H2AWMV+H2APX+H2AWPX + 5*H3APSB+1*H3ASQB + + +XRPLOC: PUSH P,A ;READ PIECE-LOC MEM + CLEARM XSQLS1 + DPB B,[101000,,XSQLS1] ;WILL APPEAR ON L A-BUS + MOVEI A,XSQLS1 + MOVEI B,0 + EWPDLB + MOVEI A,XSQLS4 +XRPTY1: EWIR + HSTORE H0MOB,B ;READ O-BUS + ANDI B,377 + POP P,A + MOVEM B,(A) + POPJ P, + +XSQLS4: 0 ;ARRAY INST + H1AMOP ;PDL -> P-BUS + H2APSR ;POUT,,LOC -> PS-BUS + 5*H3APSB+0*H3APBB + +XWPLOC: PUSH P,A ;WRITE PIECE-LOC MEM (DOES WMOVE) + CLEARM XSQLS1 + DPB B,[101000,,XSQLS1] + MOVE B,(A) + DPB B,[001000,,XSQLS1] + JRST XWSQL1 + +XRPTYP: PUSH P,A ;READ PIECE-TYP MEM + CLEARM XSQLS1 + DPB B,[101000,,XSQLS1] ;STORE PIECE NUMBER (IE ADDRESS) + MOVEI A,XSQLS1 + MOVEI B,0 + EWPDLB + MOVEI A,XSQLS5 + JRST XRPTY1 + +XSQLS5: 0 ;ARRAY INST + H1AMOP ;PDL -> P-BUS + H2APSR ;TYP -> PS-BUS + 4*H3APSB+0*H3APBB + +XWPTYP: PUSH P,A ;WRITE PIECE-TYP MEM + DPB B,[101000,,XSQLS1] ;PIECE NUMBER (TO L A-BUS) + MOVE B,(A) + DPB B,[001000,,XSQLS1] ;VAL (TO R A-BUS) + MOVEI A,XSQLS1 + MOVEI B,0 + EWPDLB + MOVEI A,XSQLS6 ;WRITE TYP + EWFIR ;WRITE FULL IR TO ASSURE P-BUS DRIVEN FROM A-BUS + ECLK + POP P,A + POPJ P, + +XSQLS6: 0 ;ALU INST + 0 + HASPDL_11.+HODTYP_2 ; PDL -> ABUS, ODEST. -> TYP + 0*H3LOBB+32*H3LALU + 0 + 0*H3APBB + + +XRPVAL: PUSH P,A ;READ PIECE-VAL MEM + CLEARM XSQLS1 + DPB B,[101000,,XSQLS1] ;STORE PIECE NUMBER (IE ADDRESS) + MOVEI A,XSQLS1 + MOVEI B,0 + EWPDLB + MOVEI A,XSQLS8 + JRST XRPTY1 + +XSQLS8: 0 ;ARRAY INST + H1AMOP ;PDL -> P-BUS + H2APSR ;VAL -> PS-BUS + 3*H3APSB+0*H3APBB + + +XWPVAL: PUSH P,A ;WRITE PIECE-VAL MEM + DPB B,[101000,,XSQLS1] ;PIECE NUMBER (TO L A-BUS) + MOVE B,(A) + DPB B,[001000,,XSQLS1] ;TYP (TO R A-BUS) + MOVEI A,XSQLS1 + MOVEI B,0 + EWPDLB + MOVEI A,XSQL10 ;WRITE VAL + EWFIR ;WRITE FULL IR TO ASSURE P-BUS DRIVEN FROM A-BUS + ECLK + POP P,A + POPJ P, + +XSQL10: 0 ;ALU INST + 0 + HASPDL_11.+HODVAL_2 ; PDL -> ABUS, ODEST. -> VAL + 0*H3LOBB+32*H3LALU + 0 + 0*H3APBB + +XRAS: PUSH P,A ;READ A-SOURCE + DPB B,[%H2ASH XRAS1+2] + MOVEI A,XRAS1 + EWIR + POP P,A + HSTORE H0MOB,(A) + POPJ P, + +XRAS1: 0 ;ALU INST + 0 + 0 ;ABUS -> OBUS + 32*H3LALU + +XROS: PUSH P,A ;READ O-BUS SELECTOR + DPB B,[%H3LOBB XROS1+3] + MOVEI A,XROS1 + EWIR + POP P,A + HSTORE H0MOB,(A) + POPJ P, + +XROS1: 0 ;ALU INST + 0 + 0 + 0 + + +XRPXM: PUSH P,A ;READ PIECE-EXISTS "MEMORY" + CLEARM XSQLS1 + DPB B,[101000,,XSQLS1] + MOVEI A,XSQLS1 + MOVEI B,0 + EWPDLB + MOVEI A,XSQL11 + EWIR + ECLK ;CLOCK TO GET DATA INTO FLAG WD + MOVEI A,XRPXT1 + MOVEI B,HASFLC + ERAS + POP P,A + LDB B,[170100,,XRPXT1] ;SELP IS THE HIGH BIT + MOVEM B,(A) + POPJ P, + +XRPXT1: 0 + +XSQL11: 0 ;ARRAY INST + H1AMOP + H2APSR ;PDL -> ABUS + 0*H3ALPS ;LAST PIECE FROM LEFT A-BUS + +XWPXM: PUSH P,A ;READ PIECE-EXISTS "MEMORY" + CLEARM XSQLS1 + DPB B,[101000,,XSQLS1] + MOVE B,(A) + DPB B,[%H2APX XSQL12+2] ;INTO PEX BIT + MOVEI A,XSQLS1 + MOVEI B,0 + EWPDLB + MOVEI A,XSQL12 + EWIR + ECLK ;CLOCK TO WRITE DATA + POP P,A + POPJ P, + +XSQL12: 0 + H1AMOP + 1*H2AWPX+H2APSR ;WPEX WRITE PULSE + 0*H3ALPS + +XRSIR: PUSH P,A ;READ SIR REGISTER + MOVEI A,XRCHT1 +XRSIR2: MOVE ZR,[001000,,XRCHT2] +XRSIR3: MOVEM ZR,XRCHT3 + EWIR + MOVEI A,XRCHT2 + MOVEI B,HOSPSB + EROS + POP P,A + LDB ZR,XRCHT3 + MOVEM ZR,(A) + POPJ P, + +XRCHT1: 0 + H1AMOP + 0 + 0*H3APSB ;PS-BUS FROM PR,,SIR + +XRCHT2: 0 +XRCHT3: 0 + +XRCHT4: 0 + H1AMOP + 0 + 1*H3APSB+0*H3ASQB ;PS-BUS FROM POUT,,SQ-BUS + ;SQ-BUS FROM SR + + +XRSR: PUSH P,A ;READ SR + MOVEI A,XRCHT4 + JRST XRSIR2 + +XRPR: PUSH P,A ;READ PR + MOVEI A,XRCHT1 + MOVE ZR,[101000,,XRCHT2] + JRST XRSIR3 + +XWSIR: PUSH P,A + PUSH P,B ;WRITE SIR + MOVEI B,0 + EWPDLB ;PUT DATA IN DATA-PDL LOCN 0 + MOVEI A,XWCHT1 +XWSR1: EWIR + ECLK + POP P,B + POP P,A + POPJ P, + +XWCHT1: 0 + H1AMOP ;ARRAY INST. + H2APSR+H2AWSIR ;PDL-SRC AND WRITE SIR + 1*H3ASQB+0*H3ASIS ;SQ-BUS FROM RA BUS, SIR FROM SQ-BUS + +XWSR: PUSH P,A ;WRITE SR + PUSH P,B + MOVEI B,0 + EWPDLB + MOVEI A,XWCHT2 + JRST XWSR1 + +XWCHT2: 0 + H1AMOP + H2APSR+H2AWSR ;PDL SRC AND WRITE SR + 0*H3ASRS ;SR FROM RA BUS + +XWPR: PUSH P,A ;WRITE PR + PUSH P,B + MOVE B,(A) + DPB B,[101000,,XWCHT3] + MOVEI A,XWCHT3 + MOVEI B,0 + EWPDLB + MOVEI A,XWCHT4 + JRST XWSR1 + +XWCHT3: 0 + +XWCHT4: 0 + H1AMOP + H2APSR+H2AWPR ;PDL SRC AND WRITE PR + 0*H3APRS ;PR FROM LA BUS + + +XRFLG: PUSH P,A ;STORE ALL FOUR FLAG WORDS + HRLI A,-4 + MOVEI B,HASFLA +XRFLG1: PUSH P,B + ERAS + POP P,B + AOS B + AOBJN A,XRFLG1 + POP P,A + POPJ P, + +XWFLG: HLOAD H0LFLA,(A) ;LOAD ALL FOUR FLAG WORDS + HLOAD H0LFLB,1(A) + HLOAD H0LFLC,2(A) + HLOAD H0LFLD,3(A) + POPJ P, + +XRERWS: ;READ IN CHEOPS STATUS + LDB ZR,[T11RH,,UNIFA] ;176002 + MOVEM ZR,(A) ;WD0 GETS UNIBUS STATUS + HSTORE H0MPAR,1(A) ;WD1 GETS PARITY BITS + HSTORE H0MSFN,2(A) ;WD2 GETS SPEC-FCTN BITS + POPJ P, + + +HREGDD: MOVEI T,HCNUM ;GOOD FOR DEPOSITING + JRST HREGDC + +HREGDE: MOVEI T,HRGB ;USE THAT FOR READING INTO ... +HREGDC: MOVEI C,0 ;DECODE REGISTER ADR IN A, VECTOR IN B +HRGDCL: CAML A,HRGATL(C) ;A WILL GET ORIGINAL CONTENTS OF T ON DISPATCH + AOJA C,HRGDCL ;HIGHER THAN THAT + MOVE ZR,HRGATL-1(C) + MOVEM ZR,HRGDEF ;BASE OF LAST MEM ADDRESSED + SUB A,ZR ;GET RELATIVE ADR + ADD C,B ;GET DISPATCH ADR + MOVE B,A + MOVE A,T + JRST @(C) + +HRGDEF: 0 ;BASE OF LAST MEM ADDRESSSED +HBLMEX: 0 ;BASE OF LAST MEM EXAMINED (WITH /, ETC) +HEXPF: 0 ;EXAMINE PRINT FLAG. IF -1 EXAMINE ROUTINE + ; PRINTS DATA, OTHERWISE IT RETURNS WITH + ; POINTER TO DATA IN A AND FIELD SPEC IN B + + 0 ;MUST BE HERE +HRGATL: HRORG ;TOO LOW .. +HRGATH: HRCME ;CONTROL MEM + HRPDE ;DATA PDL + HRUSE ;U STACK + HRACE ;AC S AND AAC S + HRPTE ;PIECE TYPE LIST + HRSQE ;SQUARE LIST + HRPLE ;PIECE LOC LIST + HRPVE ;PIECE VAL LIST + HRPXME ;PIECE-EXISTS "MEMORY" + HRRDRE ;RAID REGISTERS + HRRGE ;RANDOM REGISTERS, ETC + HRASE ;A-SOURCE S + HRODE ;ODEST S + SETZ-1 + + +;IF HEXPF = -1, EXAMINE AND PRINT FROB +; OTHERWISE, RETURN WITH A POINTING TO DATA AND B A FIELD SPEC + +HEXAMV: HCMERR ;TOO LOW + HEXC ;CONTROL MEM + HEXP ;DATA PDL + HEXU ;U STACK + HEXAC ;AC S AND AAC S + HEXPT ;PIECE TYPE LIST + HEXS ;SQUARE LIST + HEXPL ;PIECE LOC LIST + HEXPV ;PIECE VAL LIST + HEXPXM ;PIECE-EXISTS "MEMORY" + HEXRDR ;RAID REGISTERS + HEXRG ;RANDOM REGISTERS, ETC + HEXAS ;A-SOURCE S + HEXOD ;ODEST S + HCMERR ;TOO HIGH + +HEXC: ERCMEM ;EXAMINE CONTROL MEM +HEXIR1: MOVEI B,64.*1000+0 + SKIPL HEXPF + POPJ P, + EPI + JRST HCRR + +HEXPXM: ERPXM ;EXAMINE PIECE-EXISTS "MEMORY" + MOVEI B,1.*1000+0 + JRST HEXPC1 + +HEXP0: MOVE C,HSVPD0 +HEXP0A: MOVEM C,(A) + JRST HEXPB1 + +HEXP: JUMPE B,HEXP0 ;PDL MEM 0 LOCN SPECIALLY STORED + PUSH P,B + ERPDLB ;EXAMINE DATA PDL + POP P,B + SKIPGE HEXPF + CAIGE B,300 + JRST HEXPB1 ;NO PRINTOUT OR IN REGISTER AREA + ANDI B,3 ;IN MOVE PDL AREA, PRINT AS MOVE AS WELL + CAIN B,3 + JRST HEXPB1 ;SAVED ALPHA-BETA, JUST PRINT NUMERIC + CAIN B,2 + JRST HEXPB1 ;SAVED FLAGCELL, JUST NUMERIC FOR NOW + EPRPCL ;PRINT LEFT HALF OF PDL DATA AS PC + EPRSQ ;PRINT RIGHT HALF OF PDL DATA AS SQ +HEXPB1: MOVEI B,16.*1000+0 +HEXPC1: SKIPL HEXPF + POPJ P, + IPNFLD +HEXRDX: SOS HRGOPF + POPJ P, + +HEXU: ERUSTK ;EXAMINE U STACK + MOVEI B,11.*1000+0 + JRST HEXPC1 + +HEXAC: SKIPE HPARSF ;IS PAR SAVED? + CAIE B,HRRPAR-HRACO ;AND EXAMINING PAR? + JRST HEXAC1 + MOVE C,HPARSV ;LOOK AT SAVED THING + JRST HEXP0A + +HEXAC1: ERAC ;EXAMINE AC S OR AAC S + JRST HEXPB1 + + +HEXS: ERSQL ;EXAMINE SQUARE LIST + SKIPGE HEXPF + EPRPC +HEXS1: MOVEI B,8*1000+0 + JRST HEXPC1 + +HEXPL: ERPLOC ;EXAMINE PIECE LOC + SKIPGE HEXPF + EPRSQ + JRST HEXS1 + +HEXPV: ERPVAL ;EXAMINE PIECE VAL + MOVEI B,8*1000+0 + JRST HEXPC1 + +HEXPT: ERPTYP ;EXAMINE PIECE TYPE + MOVEI B,8*1000+0 + JRST HEXPC1 + +HEXAS: ERAS ;EXAMINE A-SOURCE + JRST HEXPB1 + +HEXOD: JRST HCMERR ;CHECK FOR WHICH OF THESE WANT TO WIN .. + +HEXRDR: MOVE C,HRAIDA(B) ;EXAMINE RAID REGISTERS + MOVEM C,(A) + MOVEI B,16.*1000+0 + SKIPL HEXPF + POPJ P, + SKIPE A,(A) ;SKIP ON NULL + PUSHJ P,HPAD +HEXSET: HSOUT [ASCIZ / /] ;RESET REGISTER + JRST HEXRDX + +HEXRG: CAIL B,HEXCVL + JRST HCMERR + JRST @HRGCT(B) + +HRGCT: HEXFLW ;FLAGA + HEXFLW ;FLAGB + HEXFLW ;FLAGC + HEXFLW ;FLAGD + HEXSTA ;STATA + HEXSTB ;STATB + HEXUAR ;UAR + HEXUDR ;UDR + HEXORG ;O-REG + HEXFL ;FLAGCELL + HEXNFL ;NEXT-FLAGCELL + HEXUSP ;U-STACK POINTER + HEXSIR ;SIR + HEXSR ;SR + HEXPR ;PR + HEXIR2 ;SAVED IR + HEXIRA ;SAVED IRA + HEXNAF ;SAVED NAF + HEXPC ;SAVED PC + HEXSC ;STEP COUNTER + HEXLTP ;LAST TEST POSITION USED + HEXSA ;STARTING ADR + HEXSTR ;STAR REGISTER + HEXDBL ;DOORBELL REGISTER +;ADD NEW REGISTERS TO BE INCLUDED IN DUMP FILE HERE + HEXSET ;RESET REGISTER + HEXNXP ;NEXT-PIECE OUTPUT OF PIECE SCANNER + HEXNXS ;NEXT-SQUARE OUTPUT OF SQUARE SCANNER + HEXPBS ;PIECE-BUS + HEXSBS ;SQUARE-BUS + HEXPOU ;POUT + HEXPLC ;PIECE-LOC + HEXPVL ;PIECE-VAL + HEXPTP ;PIECE-TYPE + HEXFLS ;FLAGA SYMBOLICALLY + HEXFLS ;FLAGB SYMBOLICALLY + HEXFLS ;FLAGC SYMBOLICALLY + HEXFLS ;FLAGD SYMBOLICALLY + HEXNFW ;NEXT-FLAGA + HEXNFW ;NEXT-FLAGB + HEXNFW ;NEXT-FLAGC + HEXNFW ;NEXT-FLAGD + HEXNFS ;NEXT-FLAGA SYMBOLICALLY + HEXNFS ;NEXT-FLAGB SYMBOLICALLY + HEXNFS ;NEXT-FLAGC SYMBOLICALLY + HEXNFS ;NEXT-FLAGD SYMBOLICALLY + REPEAT 20,HEXFQ ;FLAGWORD QUARTER BOTH WAYS + REPEAT 20,HEXNFQ ;NEXT-FLAGWORD QUARTER BOTH WAYS + HEXSTM ;SIDE-TO-MOVE + HEXSQL ;DRAW PICTURE OF SQUARE LINES + HEXBD ;DRAW PICTURE OF BOARD + HEXP1F ;PDP11 FLAGS 1 AND 0 + HEXGM ;PRINT CURRENT GAME LINE (300@P -> C(PAR) + HEXSPD ;MACHINE SPEED CONTROL BITS + HEXSTC ;STATA AND STATB AS 32 BIT REGISTER + HEXPVP ;PRINCIPLE VARIATION +HEXCVL==.-HRGCT + + +HEXBD: PUSH P,HCPOS ;DRAW PICTURE OF BOARD + PUSH P,HCLINE + MOVEI A,70 + MOVEM A,HSQPSN +HEXBD1: LDB A,[300,,HSQPSN] ;THIS FIRST FILE OF RANK? + JUMPN A,HEXBD2 + LDB B,[30300,,HSQPSN] ;DO CURSOR POSITION + MOVNS B + ADDI B,18.+7 ;TO PUT IT BELOW SQUARE LINE PICTURE + MOVE A,HCHWD + SUBI A,8*5+4 + PUSHJ P,HCSRPS + PUSHJ P,HCLEOL +HEXBD2: MOVE B,HSQPSN + MOVEI A,HSQPST + ERSQL + SKIPN (A) + JRST [ LDB A,[30100,,HSQPSN] + XOR A,HSQPSN + ANDI A,1 + HSOUT HBDTX(A) + HSOUT [ASCIZ / /] + JRST HEXBD3] + EPRPC +HEXBD3: AOS A,HSQPSN + TRNN A,7 + SUBI A,20 + MOVEM A,HSQPSN + JUMPGE A,HEXBD1 + JRST HEXBDX + +HBDTX: ASCIZ / ++ / + ASCIZ / -- / + +HEXSQL: PUSH P,HCPOS ;DRAW PICTURE OF SQUARE LINES + PUSH P,HCLINE + MOVEI A,HEXSSR + ERSR ;SAVE SR + MOVE A,HSVIR+4 ;PRESERVE ARRAY SELECT, NOBLE ENABLE,ETC + ANDCM A,[H2AWPX+H2AWSR+H2AWSIR+H2AWPR+H2AWMV+H2AWDT] + MOVEM A,HSQPT1+4 + MOVE A,HSVIR+5 + TRO A,H3ALSS ;LAST SQ SELECT FROM SR + MOVEM A,HSQPT1+5 + MOVEI A,70 + MOVEM A,HSQPSN +HSQPL1: LDB A,[300,,HSQPSN] ;THIS FIRST FILE OF RANK? + JUMPN A,HSQPL2 ;NO + LDB B,[30300,,HSQPSN] ;DO CURSOR POSITION + MOVNS B + ADDI B,10.+7 + MOVE A,HCHWD + SUBI A,15. + PUSHJ P,HCSRPS + PUSHJ P,HCLEOL ;CLEAR TO END OF LINE +HSQPL2: MOVEI A,HSQPSN ;SQUARE TO HACK + EWSR ;PUT THAT IN SR + MOVEI A,HSQPT1 ;NOW PUT RIGHT THING IN IR + EWFIR + ECLK ;CLOCK IT TO LOAD FLAGS + MOVEI B,HASFLC ;READ IN FLAG WD C + MOVEI A,HSQPST + ERAS + LDB C,[010100,,HSQPST] ;GET SEL-SQ BIT + HSOUT HSQPTX(C) + AOS A,HSQPSN + TRNN A,7 + SUBI A,20 + MOVEM A,HSQPSN + JUMPGE A,HSQPL1 + MOVEI A,HEXSSR + EWSR ;RESTORE SR +HEXBDX: POP P,B + POP P,A + PUSHJ P,HCSRPS + POPJ P, + +HEXSSR: 0 ;TEM FOR SAVING SR +HSQPST: 0 ;TEM FOR READING FLAG WD INTO +HSQPSN: 0 ;SQUARE HACKING +HSQPT1: BLOCK 6 ;MODIFIED IR + +HSQPTX: ASCIZ /-/ + ASCIZ /+/ + + + +HEXGM: ESPAR ;ASSURE PAR SAVED + MOVE B,HPARSV + CAILE B,300+20.*4 + MOVEI B,300+20.*4 ;PRINT MAX OF 20 MOVES + MOVEM B,HEXGT2 + MOVEI B,300 ;PRINT CURRENT GAME LINE +HEXGM1: CAML B,HEXGT2 + JRST HEXGMX + MOVEI A,HEXGT1 + PUSH P,B + ERPDLB + EPRPCL ;PRINT MOVING PC + EPRSQ ;PRINT ORIGIN SQ + MOVEI A,"- + PUSHJ P,HTYO + POP P,B + AOS B + CAML B,HEXGT2 + JRST HEXGMX + PUSH P,B + ERPDLB + MOVE C,(A) + TRNE C,377_8 + EPRPCL ;PRINT PIECE CAPT IF ANY + EPRSQ ;DESTINATION + MOVEI A,40 + PUSHJ P,HTYO + POP P,B + CAIL B,300 ;SKIP IF PRINTING PV (TOTAL CROCK) + ADDI B,2 + AOJA B,HEXGM1 + +HEXGT1: 0 +HEXGT2: 0 + +HEXGMX: JRST HCLEOL + +HEXPVP: PUSH P,HCPOS ;PRINT PRINCIPLE VARIATION + PUSH P,HCLINE + MOVEI B,7 + PUSHJ P,HXPVP1 + MOVEI B,12 ;PV10A + MOVEM B,HEXGT2 ;SET LIMIT + MOVEI B,4 ;PV00A + PUSHJ P,HEXGM1 ;PRINT LVL 0 P.V. LINE + MOVEI B,7+1 + PUSHJ P,HXPVP1 + MOVEI B,16 ;PV20A + MOVEM B,HEXGT2 + MOVEI B,12 ;PV10A + PUSHJ P,HEXGM1 ;PRINT LVL 1 P.V. LINE + MOVEI B,7+1+1 + PUSHJ P,HXPVP1 + MOVEI B,20 ;PV20B+1 + MOVEM B,HEXGT2 + MOVEI B,16 + PUSHJ P,HEXGM1 + JRST HEXBDX + +HXPVP1: MOVE A,HCHWD + SUBI A,55. + PUSHJ P,HCSRPS + JRST HCLEOL + +HEXSTM: LDB C,[160100,,HSVFLA+1] ;EXAMINE SIDE TO MOVE + MOVEM C,(A) + MOVEI B,1*1000+0 + JRST HEXPC1 + +HEXFQ: SUBI B,HRRQ0-HRRFLA ;EXAMINE FLAGWORD QUARTER BOTH WAYS +HEXFQC: MOVEI D,HSVFLA ;ENTER HERE FROM CONSOLE DISPLAY +HEXFQ1: LDB T,[000200,,B] ;QUARTER WITHIN FLAGWORD + LSH B,-2 ;GET FLAGWORD # + ADD D,B ;GET POINTER TO WHERE IT IS STORED + LDB C,HEXFQT(T) ;GET QUARTER ITSELF + MOVEM C,(A) + PUSH P,A + SKIPL HEXPF + JRST HEXFQ2 + MOVE C,HEXFLT(B) ;GET POINTER TO SYMBOL TABLE FOR ENTIRE FLAGWORD + MOVE B,(D) ;GET ENTIRE FLAGWORD + AND B,HEXFQU(T) ;MASK TO DESIRED QUARTER + PUSHJ P,XPER1 ;PRINT THAT +HEXFQ2: POP P,A ;SET UP POINTER TO NUMERIC VALUE + MOVEI B,4.*1000+0 + JRST HEXPC1 + +HEXFQT: 000400,,(D) + 040400,,(D) + 100400,,(D) + 140400,,(D) + +HEXFQU: .BM <000400,,> + .BM <040400,,> + .BM <100400,,> + .BM <140400,,> + +HEXFQM: 0 ;TEMP + +HEXNFQ: PUSHJ P,HRNFWS ;EXAMINE NEXT FLAGWORD QUARTERS BOTH WAYS + MOVEI D,HNFWDS + SUBI B,HRRNQ0-HRRFLA + JRST HEXFQ1 + +HEXFLW: MOVE C,HSVFLA(B) ;EXAMINE SAVED FLAG WORDS + JRST HEXP0A + +HEXFLS: MOVE D,HSVFLA-HRSFLA+HRRFLA(B) ;EXAMINE SAVED FLAGS SYMBOLICALLY + MOVEM D,(A) + MOVE C,HEXFLT-HRSFLA+HRRFLA(B) ;POINTER TO "SYMBOL TABLE BLOCK" +HEXNF1: SKIPL HEXPF + JRST HEXPB1 + MOVE B,(A) + PUSHJ P,XPER1 + POPJ P, + +HEXFLT: HFLASM ;POINTER TO "SYMBOL TABLE BLOCK" + HFLBSM + HFLCSM + HFLDSM + + +HEXNFW: PUSHJ P,HRNFWS ;READ IN NEXT-FLAG WORDS + MOVE C,HNFWDS-HRRNLA+HRRFLA(B) + JRST HEXP0A + +HEXNFS: PUSHJ P,HRNFWS ;READ IN NEXT-FLAG WORDS AND PRINT SYMBOLICALLY + MOVE D,HNFWDS-HRSNLA+HRRFLA(B) + MOVEM D,(A) + MOVE C,HEXFLT-HRSNLA+HRRFLA(B) + JRST HEXNF1 + +HRNFWS: PUSH P,A + PUSH P,B ;READ IN "NEXT" FLAGWORDS + PUSHJ P,HRNFW1 + POP P,B + POP P,A + POPJ P, + +HRNFW1: PUSHJ P,HRESNV ;LIKE HRESSV BUT DONT RESTORE MACHINE STATE AFTERWARDS + ECLK ; ALSO NO-OPS IR BEFORE LOADING IT + MOVEI A,HNFWDS + ERFLG + POPJ P, + +HEXSTC: MOVEI B,HASSTB ;EXAMINE STATB AND STATA AS 32 BIT REGISTER + AOS A + ERAS ;READ HIGH ORDER WORD + SOS A + MOVEI B,HASSTA + ERAS ;NOW FOR LOW ORDER WORD + MOVEI B,32.*1000+0 + JRST HEXPC1 + +HEXSTA: +HEXSTB: +HEXUAR: +HEXUDR: MOVEI B,HASSTA-4(B) ;TURN INTO EQUIVALENT A-SOURCE + JRST HEXAS + +HEXORG: MOVE C,HSVORG ;EXAMINE SAVED O-REG + JRST HEXP0A + +HEXFL: MOVEI B,HASFC ;EXAMINE FLAG-CELL + JRST HEXAS + +HEXNFL: MOVEI B,HASNFC ;EXAMINE NEXT-FLAG-CELL + JRST HEXAS + +HEXUSP: SKIPL HUSPSF ;EXAMINE U-STACK POINTER + ESUSP ;SAVE IF NOT ALREADY SAVED + MOVE C,HUSPSV + MOVEM C,(A) + MOVEI B,8.*1000+0 + JRST HEXPC1 + +HEXSIR: ERSIR ;EXAMINE SIR +HEXSI1: SKIPGE HEXPF + EPRSQ +HEXSI2: MOVEI B,8.*1000+0 + JRST HEXPC1 + +HEXSR: ERSR ;EXAMINE SR + JRST HEXSI1 + +HEXPR: ERPR ;EXAMINE PR + SKIPGE HEXPF + EPRPC + JRST HEXSI2 + + +HEXIR2: MOVE C,HSVIR ;EXAMINE SAVED IR + MOVEM C,(A) + MOVE C,HSVIR+1 + MOVEM C,1(A) + MOVE C,HSVIR+2 + MOVEM C,2(A) + MOVE C,HSVIR+3 + MOVEM C,3(A) + JRST HEXIR1 + +HEXIRA: MOVE C,HSVIR+4 ;EXAMINED SAVED IRA + MOVEM C,(A) + MOVE C,HSVIR+5 + MOVEM C,1(A) + MOVEI B,32.*1000+0 + JRST HEXPC1 + +HEXNAF: MOVE C,HSVNAF ;EXAMINE SAVED NAF + MOVEM C,(A) +HEXOP1: MOVEI B,11.*1000+0 + JRST HEXPC1 + +HEXPC: MOVE C,HSVPC ;EXAMINE SAVED PC + MOVEM C,(A) + JRST HEXOP1 + +HEXSC: MOVE C,HSTEPS ;EXAMINE STEP COUNTER +HEXSC1: MOVEM C,(A) + MOVEI B,36.*1000+0 + JRST HEXPC1 + +HEXLTP: MOVE C,HTPLST ;EXAMINE LAST TEST POSITION USED + JRST HEXSC1 + +HEXSA: MOVE C,HUSADR ;EXAMINE UCODE STARTING ADR + JRST HEXOP1 + +HEXSTR: LDB C,[%HSTAR UNIFA] ;EXAMINE STAR REGISTER (UNIBUS STATUS) + MOVEM C,(A) + MOVEI B,6.*1000+0 + JRST HEXPC1 + +HEXDBL: LDB C,[%HDBL UNIFA] ;EXAMINE DOORBELL REGISTER + MOVEM C,(A) + MOVEI B,4.*1000+0 + JRST HEXPC1 + +HEXSPD: SKIPA C,HCHSPD +HEXP1F: LDB C,[100200,,HSVFLA+3];EXAMINE PDP-11 FLAGS 0 AND 1 AS A TWO BIT QUANTITY + MOVEM C,(A) + MOVEI B,2.*1000+0 + JRST HEXPC1 + +HEXNXP: PUSHJ P,HEXNX0 ;EXAMINE NXP +HEXPB2: LDB C,[101000,,HENPT2] + MOVE A,HENPT1 + MOVEM C,(A) + SKIPGE HEXPF + EPRPC + JRST HEXSI2 + +HEXNXS: PUSHJ P,HEXNX0 ;EXAMINE NXS +HEXSB1: LDB C,[001000,,HENPT2] + MOVE A,HENPT1 + MOVEM C,(A) + SKIPGE HEXPF + EPRSQ + JRST HEXSI2 + +HEXPBS: PUSHJ P,HEXNX4 ;EXAMINE PIECE-BUS + JRST HEXPB2 + +HEXSBS: PUSHJ P,HEXNX4 ;EXAMINE SQUARE-BUS + JRST HEXSB1 + +HEXPOU: PUSHJ P,HEXNX6 ;EXAMINE POUT + JRST HEXPB2 + +HEXPLC: PUSHJ P,HEXNX6 ;EXAMINE PIECE-LOC + JRST HEXSB1 + +HEXPVL: MOVEI C,3 ;READ VAL FROM PS-BUS + PUSHJ P,HEXNX7 +HEXPV1: LDB C,[001000,,HENPT2] + MOVE A,HENPT1 + MOVEM C,(A) + JRST HEXSI2 + +HEXPTP: MOVEI C,4 ;READ TYP FROM PS-BUS + PUSHJ P,HEXNX7 + JRST HEXPV1 + +HEXNX6: MOVEI C,5 ;READ POUT,,LOC FROM PS-BUS +HEXNX7: SETOB D,T + JRST HEXNX + +HEXNX4: SETOB D,T ;DONT CHANGE THOSE + JRST HEXNX5 + + +HEXNX0: MOVEI D,3 ;EVENTUALLY FOR SQUARE-BUS SELECTOR + MOVEI T,2 ;EVENTUALLY FOR PIECE-BUS SELECTOR +HEXNX5: MOVEI C,2 ;EVENTUALLY FOR PS-BUS SELECTOR TO SELECT P-BUS,,S-BUS +HEXNX: REPEAT 6,PUSH P,HSVIR+.RPCNT ;EXAMINE PS-BUS WITH MACHINE STATE + MOVEM A,HENPT1 ;"RESTORED" EXCEPT: + MOVE A,HSVIR+1 ;IF NON-NEG, C HAS NEW PS-BUS SELECTOR + TRNE A,H1AMOP ;D HAS SQUARE-BUS AND T PIECE-BUS + JRST HEXNX1 ;ARRAY OP, O-BUS WILL SELECT PS-BUS + MOVEI A,HOSPSB + DPB A,[%H3LOB HSVIR+3] ;MAKE SURE ALU INST SELECTS PS-BUS OUTPUT ON O-BUS +HEXNX1: SKIPL C + DPB C,[%H3SPS HSVIRA+1] ;PUT THAT IN PS-BUS SELECTOR + SKIPL D + DPB D,[%H3SSB HSVIRA+1] ;PUT THAT IN SQUARE BUS SELECTOR + SKIPL T + DPB T,[%H3SPB HSVIRA+1] ;PUT THAT IN PIECE BUS SELECTOR + PUSHJ P,HEXNX2 + REPEAT 6,POP P,HSVIR+5-.RPCNT ;UNBUGGER SAVED IR + POPJ P, + +HEXNX2: PUSHJ P,HRESSV ;"RESTORE" STATE OF MACHINE + HSTORE H0MOB,HENPT2 + POPJ P, + +HENPT1: 0 ;SAVED A +HENPT2: 0 ;SAVE P-BUS,,S-BUS WITH BUGGERED MACHINE STATE RESTORED + +HRGB: 0 ;TEMP BLOCK FOR EXAMINING FCTNS + 0 + 0 + 0 + + +HDPV: HCMERR ;TOO LOW + HDPC ;CONTROL MEM (NUMERIC STYLE) + HDPP ;DATA PDL + HDPU ;U STACK + HDPAC ;AC S AND AAC S + HDPPT ;PIECE TYPE LIST + HDPS ;SQUARE LIST + HDPPL ;PIECE LOC LIST + HDPPV ;PIECE VAL LIST + HDPPXM ;PIECE-EXISTS "MEMORY" + HDPRDR ;RAID REGISTERS + HDPRG ;RANDOM REGISTERS, ETC + HDPAS ;A-SOURCE S + HDPOD ;ODEST S + HCMERR ;TOO HIGH + + +HDPPXM: EWPXM ;DEPOSIT IN PIECE-EXISTS "MEMORY" + JRST HDPXIT + +HDPP0: MOVE C,(A) ;STORE IN PDL LOCN 0 + MOVEM C,HSVPD0 + JRST HDPXIT + +HDPP: JUMPE B,HDPP0 ;PDL LOCN 0 SPECIALLY STORED + EWPDLB ;DEPOSIT IN DATA PDL + JRST HDPXIT + +HDPU: EWUSTK ;DEPOSIT IN U STACK + JRST HDPXIT + +HDPAC: SKIPE HPARSF ;IS PAR SAVED? + CAIE B,HRRPAR-HRACO ;AND STORING INTO PAR? + JRST HDPAC1 + MOVE C,(A) + MOVEM C,HPARSV ;STORE INTO SAVED THING + JRST HDPXIT + +HDPAC1: EWAC ;DEPOSIT IN AC S OR AAC S + JRST HDPXIT + +HDPS: EWSQL ;DEPOSIT IN SQUARE LIST + JRST HDPXIT + +HDPPL: EWPLOC ;DEPOSIT IN PIECE LOC MEM + JRST HDPXIT + +HDPPV: EWPVAL ;DEPOSIT IN PIECE VAL MEM + JRST HDPXIT + +HDPPT: EWPTYP ;DEPOSIT IN PIECE TYPE MEM + JRST HDPXIT + +HDPAS: JRST HCMERR ;A-SOURCE (CHECK FOR THOSE THAT ARE TO WORK) + +HDPOD: EWOD ;DEPOSIT IN ODEST + JRST HDPXIT + +HDPRDR: MOVE C,(A) ;DEPOSIT IN RAID REGISTER + MOVEM C,HRAIDA(B) + JRST HDPXIT + + +HDPRG: CAIL B,HDPCVL + JRST HCMERR + JRST @HDRGCT(B) + +HDRGCT: HDPFLW ;FLAGA + HDPFLW ;FLAGB + HDPFLW ;FLAGC + HDPFLW ;FLAGD + HDPSTA ;STATA + HDPSTB ;STATB + HDPUAR ;UAR + HDPUDR ;UDR + HDPORG ;O-REG + HDPFL ;FLAGCELL + HDPNFL ;NEXT-FLAGCELL + HDPUSP ;U-STACK POINTER + HDPSIR ;SIR + HDPSR ;SR + HDPPR ;PR + HDPIR ;SAVED IR + HDPIRA ;SAVED IRA + HDPNAF ;SAVED NAF + HDPPC ;SAVED PC + HDPSC ;STEP COUNTER + HDPLST ;LAST TEST POSITION + HDPSA ;UCODE STARTING ADR + HDPSTR ;STAR REGISTER + HDPDBL ;DOORBELL REGISTER +;ADD NEW REGISTERS TO BE INCLUDED IN DUMP FILES HERE + HDPSET ;RESET REGISTER + HCMERR ;NEXT-PIECE OUTPUT OF PIECE SCANNER + HCMERR ;NEXT-SQUARE OUTPUT OF SQUARE SCANNER + HCMERR ;PIECE-BUS + HCMERR ;SQUARE-BUS + HCMERR ;POUT + HCMERR ;PIECE-LOC + HCMERR ;PIECE-VAL + HCMERR ;PIECE-TYP + HCMERR ;FLAGA SYMBOLICALLY + HCMERR ;FLAGB SYMBOLICALLY + HCMERR ;FLAGC SYMBOLICALLY + HCMERR ;FLAGD SYMBOLICALLY + HCMERR ;NEXT-FLAGA + HCMERR ;NEXT-FLAGB + HCMERR ;NEXT-FLAGC + HCMERR ;NEXT-FLAGD + HCMERR ;NEXT-FLAGA SYMBOLICALLY + HCMERR ;NEXT-FLAGB SYMBOLICALLY + HCMERR ;NEXT-FLAGC SYMBOLICALLY + HCMERR ;NEXT-FLAGD SYMBOLICALLY + REPEAT 20,HCMERR ;FLAGWORD QUARTERS BOTH WAYS + REPEAT 20,HCMERR ;NEXT FLAGWORD QUARTERS BOTH WAYS + HDPSTM ;SIDE-TO-MOVE + HCMERR ;SQUARE LINES PICTURE + HCMERR ;BOARD PICTURE + HDPP1F ;PDP-11 FLAGS 1 AND 0 + HCMERR ;GAME LINE + HDPSPD ;CHEOPS SPEED CONTROL + HDPSTC ;STATA AND STATB AS 32 BIT REGISTER + HCMERR ;PRINCIPLE VARIATION +HDPCVL==.-HDRGCT + + +HDPSTM: MOVE C,(A) ;DEPOSIT IN SIDE-TO-MOVE + DPB C,[160100,,HSVFLA+1] + PUSH P,A + PUSHJ P,HDPST1 + POP P,A + JRST HDPXIT + +HDPST1: PUSHJ P,HRESSV ;DO RESTORE AND SAVE IN ORDER TO GET IT INTO HARDWARE + POPJ P, ;STM, SO IT WILL BE THERE WHILE SITTING IN TTY WAIT + +HDPFLW: MOVE C,(A) ;DEPOSIT IN SAVED FLAG WORDS + MOVEM C,HSVFLA(B) + JRST HDPXIT + +HDPSTA: MOVEI B,HODSTA ;DEPOSIT IN STATA + JRST HDPOD ;CHANGE TO APPROPRIATE ODEST + +HDPSTB: MOVEI B,HODSTB ;DEPOSIT IN STATB + JRST HDPOD + +HDPSTC: MOVEI B,HODSTA ;DEPOSIT IN STATA AND STATB AS A 32 BIT REGISTER + EWOD + AOS A + MOVEI B,HODSTB + EWOD + SOJA A,HDPXIT + +HDPUAR: MOVEI B,HODUAR ;DEPOSIT IN UAR + JRST HDPOD + +HDPUDR: MOVEI B,HODUDR ;DEPOSIT IN UDR + JRST HDPOD + +HDPORG: MOVE C,(A) ;DEPOSIT IN O-REG + MOVEM C,HSVORG ;PUT THAT IN SAVED O-REG + JRST HDPXIT + +HDPFL: MOVEI B,HODFC ;DEPOSIT IN FLAG-CELL + JRST HDPOD + +HDPNFL: MOVEI B,HODNFC ;DEPOSIT IN NEXT-FLAG-CELL + JRST HDPOD + +HDPUSP: SKIPL HUSPSF ;DEPOSIT IN U-STACK POINTER + ESUSP ;SAVE U-STACK POINTER IF NOT ALREADY + MOVE C,(A) + MOVEM C,HUSPSV + JRST HDPXIT + +HDPSIR: EWSIR ;DEPOSIT IN SIR + JRST HDPXIT + +HDPSR: EWSR ;DEPOSIT IN SR + JRST HDPXIT + +HDPPR: EWPR ;DEPOSIT IN PR + JRST HDPXIT + + +HDPIR: MOVE C,(A) ;DEPOSIT IN IR + MOVEM C,HSVIR + MOVE C,1(A) + MOVEM C,HSVIR+1 + MOVE D,2(A) + MOVEM D,HSVIR+2 + MOVE TT,3(A) + MOVEM TT,HSVIR+3 + TRNN C,H1AMOP + JRST HDPXIT + MOVEM D,HSVIRA ;DEPOSITING ARRAY OP, SO PUT IT IN IRA C AND IRA D + MOVEM TT,HSVIRA+1 + JRST HDPXIT + +HDPIRA: MOVE C,(A) ;DEPOSIT IN SAVED IRA + MOVEM C,HSVIRA + MOVE C,1(A) + MOVEM C,HSVIRA+1 + JRST HDPXIT + +HG: CLEARM HSVIR ;"GO" COMMAND + CLEARM HSVIR+1 ;NO-OP OUT IR + CLEARM HSVIR+2 + CLEARM HSVIR+3 + MOVEI A,HCNUM +HDPNAF: MOVE C,(A) ;DEPOSIT IN NAF + MOVEM C,HSVNAF + JRST HDPXIT + +HDPPC: MOVE C,(A) ;DEPOSIT IN PC + MOVEM C,HSVPC + JRST HDPXIT + +HDPSC: MOVE C,(A) ;DEPOSIT IN STEP COUNTER + MOVEM C,HSTEPS + JRST HDPXIT + +HDPLST: MOVE C,(A) ;DEPOSIT IN LAST TEST POSITION USED + MOVEM C,HTPLST + JRST HDPXIT + +HDPSA: MOVE C,(A) ;DEPOSIT IN UCODE STARTING ADR + MOVEM C,HUSADR + JRST HDPXIT + +HDPSTR: MOVEI B,HODSTR ;DEPOSIT IN STAR (UNIBUS STATUS REGISTER) + EWOD + JRST HDPXIT + +HDPDBL: MOVE C,(A) ;DEPOSIT IN DOORBELL REGISTER + DPB C,[%HDBL UNIFA] + JRST HDPXIT + +HDPDB1: DPB A,[%HDBL UNIFA] ;DEPOSIT IN DOORBELL FROM OCM + POPJ P, + +HDPP1F: MOVE C,(A) ;DEPOSIT IN PDP11 FLAGS 1 AND 0 + DPB C,[100200,,HSVFLA+3] + JRST HDPXIT + +HDPSPD: MOVE C,(A) ;DEPOSIT IN SPEED CONTROL + MOVEM C,HCHSPD + JRST HDPXIT + +HDPSET: MOVEI B,HRCMO ;DEPOSIT IN "RESET" REGISTER + MOVEM B,HDPRC +HDPSE1: MOVEI B,HDPV + MOVE A,HDPRC + CAILE A,HRRDMP + JRST HDPXIT +IFN HRCME-HRCMO-CHECML,[ + CAIG A,HRCME + CAIGE A,HRCMO+CHECML + JRST .+2 + JRST HDPSE2 ;DONT TRY TO RESET NON-EXISTANT CONTROL MEM +] + PUSHJ P,HREGDD +HDPSE2: AOS HDPRC + JRST HDPSE1 + +HDPRC: 0 + +HTIV: HCMERR ;TOO LOW + HTIC ;CONTROL MEM + HCMERR ;DATA PDL + HCMERR ;U STACK + HCMERR ;AC S AND AAC S + HCMERR ;PIECE TYPE LIST + HCMERR ;SQUARE LIST + HCMERR ;PIECE LOC LIST + HCMERR ;PIECE VAL LIST + HCMERR ;PIECE-EXISTS "MEMORY" + HCMERR ;RAID REGISTERS + HTIRG ;RANDOM REGISTERS, ETC + HCMERR ;A-SOURCE S + HCMERR ;ODEST S + HCMERR ;TOO HIGH + +HTIC: ERCMEM ;GET CURRENT CONTENTS FOR DEFAULTING + PUSH P,B + PUSHJ P,HTIUI ;TYPE IN U-INST + POP P,B +HDPC: EWCMEM ;DEPOSIT IN C MEM + PUSH P,A + MOVEI A,HDPCTM + ERCMEM ;READ IT BACK TO CHECK + POP P,A +REPEAT 4,[ + MOVE ZR,HDPCTM+.RPCNT + CAME ZR,.RPCNT(A) + .VALUE ;DEPOSIT TO CONTROL MEM LOST +] +HDPXIT: SOS HDPFLG ;INDICATE DEPOSITING DONE + POPJ P, + +HDPCTM: 0 + 0 + 0 + 0 + + +HTIRG: CAIL B,HTICVL + JRST HCMERR + JRST @HTRGCT(B) + +HTRGCT: HCMERR ;FLAGA + HCMERR ;FLAGB + HCMERR ;FLAGC + HCMERR ;FLAGD + HCMERR ;STATA + HCMERR ;STATB + HCMERR ;UAR + HCMERR ;UDR + HCMERR ;O-REG + HCMERR ;FLAGCELL + HCMERR ;NEXT-FLAGCELL + HCMERR ;U-STACK POINTER + HCMERR ;SIR + HCMERR ;SR + HCMERR ;PR + HTIIR ;SAVED IR + HCMERR ;SAVED IRA + HCMERR ;SAVED NAF + HCMERR ;SAVED PC + HCMERR ;STEP COUNTER + HCMERR ;LAST TEST POSITION + HCMERR ;UCODE STARTING ADR + HCMERR ;STAR + HCMERR ;DOORBELL REGISTER +;ADD NEW REGISTERS TO BE INCLUDED IN DUMP FILES HERE + HCMERR ;RESET REGISTER + HCMERR ;NEXT-PIECE OUTPUT OF PIECE SCANNER + HCMERR ;NEXT-SQUARE OUTPUT OF SQUARE SCANNER + HCMERR ;PIECE-BUS + HCMERR ;SQUARE-BUS + HCMERR ;POUT + HCMERR ;PIECE-LOC + HCMERR ;PIECE-VAL + HCMERR ;PIECE-TYP + HCMERR ;FLAGA SYMBOLICALLY + HCMERR ;FLAGB SYMBOLICALLY + HCMERR ;FLAGC SYMBOLICALLY + HCMERR ;FLAGD SYMBOLICALLY + HCMERR ;NEXT-FLAGA + HCMERR ;NEXT-FLAGB + HCMERR ;NEXT-FLAGC + HCMERR ;NEXT-FLAGD + HCMERR ;NEXT-FLAGA SYMBOLICALLY + HCMERR ;NEXT-FLAGB SYMBOLICALLY + HCMERR ;NEXT-FLAGC SYMBOLICALLY + HCMERR ;NEXT-FLAGD SYMBOLICALLY + REPEAT 20,HCMERR ;FLAGWORD QUARTERS BOTH WAYS + REPEAT 20,HCMERR ;NEXT FLAGWORD QUARTERS BOTH WAYS + HCMERR ;SIDE-TO-MOVE + HCMERR ;SQUARE LINES PICTURE + HCMERR ;BOARD PICTURE + HCMERR ;PDP11 FLAGS 1 AND 0 + HCMERR ;GAME LINE + HCMERR ;CHEOPS SPEED CONTROL + HCMERR ;STATA AND STATB AS 32 BIT REGISTER +HTICVL==.-HTRGCT + +HTIIR: MOVEI A,HSVIR ;TYPE INTO IR + PUSHJ P,HTIUI + MOVE C,HSVIR+1 + TRNN C,H1AMOP + JRST HDPXIT + MOVE C,HSVIR+2 + MOVEM C,HSVIRA + MOVE C,HSVIR+3 + MOVEM C,HSVIRA+1 + JRST HDPXIT + +HPAD: PUSHJ P,HPUSM ;PRINT USER SYMBOL IF ANY .. + MOVEI TT,HGSYMT ;PRINT SYMBOL IF ONE FOUND EXACTLY EQUAL +HPASY1: CAIL TT,HGSYME + JRST HPASYX + CAMN A,1(TT) + JRST HPASYF ;FOUND IT + ADDI TT,2 + JRST HPASY1 + +HPASYF: HSOUT @(TT) ;SYMBOL FOUND, PRINT IT + POPJ P, + +HPASYX: MOVEI B,HPAV + PUSHJ P,HREGDE + POPJ P, + +HPAV: HPATL ;TOO LOW, JUST PRINT NUMBER + HPAC ;CONTROL MEM + HPAP ;DATA PDL + HPAU ;U STACK + HPAAC ;AC S AND AAC S + HPAPT ;PIECE TYPE LIST + HPAS ;SQUARE LIST + HPAPL ;PIECE LOC LIST + HPAPV ;PIECE VAL LIST + HPAPXM ;PIECE-EXISTS "MEMORY" + HPARDR ;RAID REGISTERS + HPANUL ;RANDOM REGISTERS, ETC + HPAAS ;A-SOURCE S + HPAOD ;ODEST S + HPANUL ;TOO HIGH + +HPARDR: HSOUT [ASCIZ /RAIDR+/] ;RAID REGISTERS + MOVEI C,1 + EOCTP + POPJ P, + +HPANUL: ADD B,HRGDEF ;GET BACK FULL ADR + HSOUT [ASCIZ /REGADR /] +HPATL: MOVEI C,6 + EOCTP + POPJ P, + + + +HPAC: MOVEI C,4 ;CONTROL MEM + EOCTP + HSOUT [ASCIZ /@C/] + POPJ P, + +HPAP: MOVEI C,4 ;DATA PDL + EOCTP + HSOUT [ASCIZ /@P/] + POPJ P, + +HPAU: MOVEI C,3 ;U STACK + EOCTP + HSOUT [ASCIZ /@U/] + POPJ P, + +HPAAC: MOVEI C,2 ;AC S AND AAC S + EOCTP + HSOUT [ASCIZ /@A/] + POPJ P, + +HPAS: MOVEI C,2 ;SQUARE LIST + EOCTP + HSOUT [ASCIZ /@S/] + POPJ P, + +HPAPL: MOVEI C,2 ;PIECE LOC + EOCTP + HSOUT [ASCIZ /@L/] + POPJ P, + +HPAPV: MOVEI C,2 ;PIECE VAL + EOCTP + HSOUT [ASCIZ /@V/] + POPJ P, + +HPAPT: MOVEI C,2 ;PIECE TYPE + EOCTP + HSOUT [ASCIZ /@T/] + POPJ P, + +HPAAS: MOVEI C,2 ;A SOURCE + EOCTP + HSOUT [ASCIZ /@R/] + POPJ P, + +HPAOD: MOVEI C,2 ;ODEST + EOCTP + HSOUT [ASCIZ /@D/] + POPJ P, + +HPAPXM: MOVEI C,2 ;PIECE-EXISTS "MEMORY" + EOCTP + HSOUT [ASCIZ /@X/] + POPJ P, + + +;THE FIELD SYMBOL TABLE IS USED TO ASSOCIATE BIT FIELDS IN THE MICRO-INSTRUCTION +; WITH SYMBOLIC NAMES ON BOTH INPUT AND OUTPUT. EACH ENTRY IN THE TABLE +; ALSO CONTAINS "CONTEXTS". THESE MAY BE NULL (IN WHICH CASE THE ENTRY IS +; ALWAYS VALID), OR MAY SPECIFY THAT CERTAIN FIELDS (IN THE MICRO-INSTRUCTION +; BEING PRINTED OR INPUTTED) MUST HAVE CERTAIN VALUES FOR THIS ENTRY TO BE +; VALID. FOR CHEOPS, THERE ARE TWO "CONTEXT FIELDS": +; A) THE OP CODE BIT (ARRAY OR ALU OP) +; B) THE TWO "INSTRUCTION TYPE" BITS IN WD2 OF THE ALU INSTRUCTION. +; THUS THE "A" CONTEXT IS TWO BITS HAVING THREE STATES: +; ALWAYS VALID, VALID IN ALU-INST, AND VALID IN ARRAY-INST +; THE "B" CONTEXT IS 3 BITS HAVING 5 STATES: +; ALWAYS VALID, VALID IN NON-IMMEDIATE-ALU, IN IMMEDIATE-ALU, +; IN PDL-SOURCE ALU, OR IN PDL-DEST ALU. +; ON BOTH INPUT AND OUTPUT, SYMBOLS NOT HAVING THE APPROPRIATE CONTEXT ARE IGNORED. + +; ON INPUT, THE ORDER OF THE SYMBOLS IN THE TABLE IS IMPORTANT, +;SINCE THIS DEFINES THE BASIC PROMPT SEQUENCE. +; THE INPUT OPERATION PROCEEDS AS FOLLOWS: +; 1) FIRST, THE DEFAULT IS GENERATED. THIS IS THE CURRENT CONTENTS +; OF THE OPEN REGISTER, IF ANY, OTHERWISE 0. +; 2) A POINTER IS INITIALIZED TO THE BEGINNING OF THE FIELD SYMBOL TABLE. +; 3) THE CONTEXT OF THIS SYMBOL IS CHECKED. IF IT LOSES GO TO STEP 6. +; 4) THE SYMBOL IS TYPED OUT AS A PROMPT AND INPUT AWAITED. +; 5) IF THE INPUT IS NUMERIC, IT IS DEPOSITED IN THE FIELD OF THE AS +; MICRO-INSTRUCTION AS DEFINED BY THE SYMBOL. +; IF THE INPUT IS SYMBOLIC, A SEARCH IS MADE FOR A MATCHING SYMBOL +; IN THE AUX SYMBOL TABLE OF A VALID SYMBOL. IF FOUND, THAT VALUE IS +; SUBSTITUTED AND THE PROMPT SEQUENCE PICKS UP FROM THERE. +; IF SEARCHING ON FROM THE ORIGINAL POINT DOESNT WIN, +; AN ATTEMPT TO WIN BY RESETING THE POINTER TO THE ROOT OF THE +; FIELD SYMBOL TABLE IS MADE BEFORE GIVING UP. +; 6) THE POINTER IS ADVANCED TO THE NEXT SYMBOL AND THE PROCESS REPEATED. +; WHEN ALL SYMBOLS WITH THE APPROPRIATE CONTEXT ARE EXHAUSTED, +; THE PROCESS TERMINATES. +; THIS PROCESS CAN BE MODIFIED IF A VALID SYMBOL WITH A "DISPATCH-ON-INPUT" +; BIT IS ENCOUNTERED. IN THAT CASE, CONTROL IS IMMEDIATELY TRANSFERRED +; TO THE LOCATION GIVEN BY THE SYMBOL. + +;ON OUTPUT, A MASK WHOSE LENGTH IS EQUAL TO THE LENGTH OF THE MICRO-INSTRUCTION +; (64 BITS FOR CHEOPS) IS INITIALIZED TO -1. THIS MASK CONTAINS ONES IN THOSE +; BIT POSITIONS THAT HAVE NOT BEEN "PRINTED" YET. +; THE OUTPUT OPERATION THEN PROCEEDS AS FOLLOWS: +; 1) A POINTER IS INITIALIZED TO THE BEGINNING OF THE FIELD SYMBOL TABLE. +; 2) THE CONTEXT OF THIS SYMBOL IS CHECKED. IF IT LOSES, GO TO STEP 7. +; 3) THE BYTE NAMED BY THE SYMBOL IS LOADED FROM THE MASK. +; IF THIS RESULT IS NOT ALL ONES, THE FIELD IS A LOSER (HAVING ALREADY +; BEEN PARTIALLY (OR COMPLETELY) PRINTED. GO TO STEP 7. +; 4) A BIT IS CHECKED TO SEE IF THIS FIELD PRINTS OUT "SYMBOLICALLY". +; IF SO, THE ASCIZ STRING FOUND AT THE NTH (VALUE OF FIELD IN U-INST +; TO BE PRINTED) IS PRINTED. GO TO STEP 6. +; 5) PRINT OUT THE NAME OF THE FIELD, FOLLOWED BY ITS VALUE AS +; EXTRACTED FROM THE MICRO-INST TO BE PRINTED. +; 6) ZERO THE BITS CORRESPONDING TO THE FIELD IN THE MASK +; 7) CONTINUE UNTIL ALL BITS HAVE BEEN PRINTED. IF RUN OUT OF +; FIELD SYMBOL TABLE FIRST, ITS A SEMI-ERROR. PRINT BIT NUMBERS +; OF ANY ONE BITS IN THE MICRO-INST TO BE PRINTED WHICH ARE MASKED +; ONES BY THE MASK. + + +;FIELD SYMBOL TABLE +;WD0 (LH) FLAGS AND CONTEXT INDICATORS +HSYIV==400000,, ; INPUT VALID (1) +HSYOV==200000,, ; OUTPUT VALID (1) +HSYAT==100000,, ; AUX SYMTAB FOR SYMBOLIC TYPEIN/OUT OF THIS FIELD EXISTS. + ; WD2 IS POINTER TO IT. +HSYACN==30000,, ; CONTEXT A (2) + HSYACA==10000,, ; VALID IN ARRAY INSTRUCTION + HSYACL==20000,, ; VALID IN ALU INSTRUCTION +HSYBCN==7000,, ; CONTEXT B (3) + HSYBCR==1000,, ; VALID IN NON-IMMEDIATE ALU INSTRUCTION + HSYBCI==2000,, ; VALID IN IMMEDIATE ALU INSTRUCTION + HSYBCS==3000,, ; VALID IN PDL-SRC ALU INSTRUCTION + HSYBCD==4000,, ; VALID IN PDL-DEST ALU INSTRUCTION + HSYBCO==5000,, ; VALID EXCEPT IN PDL-DEST (FOR ODEST) +HOZNUL==400,, ; IF FIELD ZERO, GENERATE NULL TYPOUT ON OUTPUT +; (RH) BYTE DEF +OFFSET +;WD1 POINTER TO ASCIZ +;WD2 (IF AUX SYMTAB) POINTER TO AUX SYMTAB +; AN AUX SYMTAB IS CONSISTS OF ONE WORD PER ENTRY, WHICH IS A +; POINTER TO AN ASCIZ STRING. THE SYMTAB MUST BE 2** +; ENTRIES LONG, AND EACH ENTRY REPRESENTS THE VALUE GIVEN BY ITS +; POSITION IN THE TABLE. +HIFST: + HSYIV+HSYOV+1*1000+31. ;OP CODE BIT + [ASCIZ /OP/] + HSYIV+HSYACL+2.*1000+32. ;ASDEST TYPE (INPUT ALU ONLY) + [ASCIZ /ASD-TYP/] +;WD2 ALU + HSYIV+HSYOV+HSYACL+HSYBCR+6*1000+42. ;A-SOURCE HIGH + [ASCIZ /A-SRC/] + HSYIV+HSYOV+HSYACL+HSYBCI+8*1000+40. ;IMMED DATA + [ASCIZ /IMM-DAT/] + HSYIV+HSYOV+HSYACL+HSYBCS+8*1000+40. ;PDL SRC + [ASCIZ /PS/] + HSYIV+HSYOV+HSYACL+HSYBCD+8*1000+40. ;PDL DEST + [ASCIZ /PD/] + HSYIV+HSYOV+HSYACL+HSYBCO+6*1000+34.+HOZNUL ;ODEST + [ASCIZ /OD/] + HSYIV+HSYOV+HSYACL+HSYBCD+6*1000+34. ;A-SOURCE LOW + [ASCIZ /A-SRC/] +;WD3 ALU + HSYIV+HSYOV+HSYACL+4*1000+48. ;B-BUS + [ASCIZ /B-BUS/] + HSYIV+HSYOV+HSYACL+5*1000+52.+HSYAT ;ALU OP + [ASCIZ /ALU/] + HASTAL ;AUX SYMBOL TABLE FOR ALU OPS + HSYIV+HSYOV+HSYACL+1*1000+57.+HOZNUL ;CRY + [ASCIZ /CRY/] + HSYIV+HSYOV+HSYACL+3*1000+58.+HOZNUL ;O-BUS SELECTOR + [ASCIZ /O-BUS/] + +HIFAST: ;WD2 ARRAY-OP + HSYIV+HSYOV+HSYACA+1*1000+47. ;ARRAY-SELECT BIT + [ASCIZ /ARY/] + HSYIV+HSYOV+HSYACA+1*1000+46. ;CAPT/MOVE BIT + [ASCIZ /CAPT/] + HSYIV+HSYOV+HSYACA+1*1000+45. ;ALLS + [ASCIZ /ALLS/] + HSYIV+HSYOV+HSYACA+1*1000+44. ;NOBLE-ENABLE BIT + [ASCIZ /N-ENB/] + HSYIV+HSYOV+HSYACA+1*1000+43. ;PAWN-ENABLE BIT + [ASCIZ /P-ENB/] + HSYIV+HSYOV+HSYACA+1*1000+42. ;PIECE-EXISTS BIT + [ASCIZ /PEX/] + HSYIV+HSYOV+HSYACA+1*1000+41.+HOZNUL ;WRITE PIECE-EXISTS REGISTER + [ASCIZ /WPEX/] + HSYIV+HSYOV+HSYACA+1*1000+40.+HOZNUL ;WRITE SQUARE REGISTER + [ASCIZ /WSR/] + HSYIV+HSYOV+HSYACA+1*1000+39.+HOZNUL ;WRITE SQUARE INPUT REGISTER + [ASCIZ /WSIR/] + HSYIV+HSYOV+HSYACA+1*1000+38.+HOZNUL ;WRITE PIECE REGISTER + [ASCIZ /WPR/] + HSYIV+HSYOV+HSYACA+1*1000+37.+HOZNUL ;WRITE MOVE + [ASCIZ /WMOV/] + HSYIV+HSYOV+HSYACA+1*1000+36. ;PDL-SOURCE BIT + [ASCIZ /PDL-S/] + HSYIV+HSYOV+HSYACA+1*1000+35.+HOZNUL ;WRITE DATA (IN OPPOSITE PLACE FROM + [ASCIZ /WDAT/] ; SPECD BY PDL-SOURCE + HSYIV+HSYOV+HSYACA+3*1000+32. ;ARRAY OP AC + [ASCIZ /AC/] +;WD3 ARRAY-OP + HSYIV+HSYOV+HSYACA+3*1000+58. ;PS-BUS SELECTOR + [ASCIZ /PS-B/] + HSYIV+HSYOV+HSYACA+1*1000+57. ;LAST-PIECE SELECTOR + [ASCIZ /LPC/] + HSYIV+HSYOV+HSYACA+3*1000+54. ;PIECE-BUS SELECTOR + [ASCIZ /P-B/] + HSYIV+HSYOV+HSYACA+1*1000+53. ;PIECE-REGISTER SELECTOR + [ASCIZ /PR-S/] + HSYIV+HSYOV+HSYACA+1*1000+52. ;LAST-SQUARE SELECTOR + [ASCIZ /LSQ/] + HSYIV+HSYOV+HSYACA+2*1000+50. ;SQUARE-BUS SELECTOR + [ASCIZ /SQ-B/] + HSYIV+HSYOV+HSYACA+1*1000+49. ;SQUARE-REGISTER SELECTOR + [ASCIZ /SR-S/] + HSYIV+HSYOV+HSYACA+1*1000+48. ;SQUARE-INPUT-REGISTER SELECTOR + [ASCIZ /SIR-S/] +LHAST==.-HIFAST ;LENGTH OF ARRAY INST WD 2 AND 3 PART + +;WD0 ALL INSTRUCTIONS + HSYIV+HSYOV+1*1000+15.+HSYAT ;INHIBIT-WRITE (ON SUCCESSFUL XFER) + [ASCIZ /INH-W/] + HASTI + HSYIV+HSYOV+4*1000+11.+HOZNUL ;COND FIELD + [ASCIZ /COND/] + HSYIV+HSYOV+11.*1000+0 ;JUMP ADDRESS + [ASCIZ /JMP/] +;WD1 ALL INSTRUCTIONS + HSYIV+HSYOV+1*1000+30.+HSYAT ;STATISTICS BIT + [ASCIZ /S/] + HASTS + HSYIV+HSYOV+1*1000+29.+HSYAT ;PUSHJ BIT + [ASCIZ /P/] + HASTP + HSYIV+HSYOV+1*1000+28.+HSYAT ;RETURN BIT + [ASCIZ /R/] + HASTR + HSYIV+HSYOV+5*1000+23.+HOZNUL ;PDL ADDRESS FIELD + [ASCIZ /PAF/] + HSYIV+HSYOV+2*1000+21.+HSYAT ;UNIBUS OP + [ASCIZ /UB/] + HASTUB + HSYIV+HSYOV+1*1000+20.+HSYAT ;E-LONG (LONG CLOCK TIMING) + [ASCIZ /E-L/] + HASTEL + HSYIV+HSYOV+4*1000+16.+HOZNUL ;FLAG-CONTROL + [ASCIZ /FC/] +HIFSTE: +LHFST==HIFSTE-HIFST ;LENGTH OF ENTIRE FIELD SYM TAB + +;AUX SYMBOL TABLE FOR ALU OPS +HASTAL: [ASCIZ /INCB/] + [ASCIZ /ALU1/] + [ASCIZ /ALU2/] + [ASCIZ /ALU3/] + [ASCIZ /ALU4/] + [ASCIZ /ALU5/] + [ASCIZ /SUB/] + [ASCIZ /ALU7/] + [ASCIZ /ALU10/] + [ASCIZ /ADD/] + [ASCIZ /ALU12/] + [ASCIZ /ALU13/] + [ASCIZ /SHFTB/] + [ASCIZ /ALU15/] + [ASCIZ /ALU16/] + [ASCIZ /DECB/] + [ASCIZ /SETCB/] + [ASCIZ /ANDCBOTH/] + [ASCIZ /ANDCB/] + [ASCIZ /SETZ/] + [ASCIZ /ORCBOTH/] + [ASCIZ /SETCA/] + [ASCIZ /XOR/] + [ASCIZ /ANDCA/] + [ASCIZ /ORCB/] + [ASCIZ /EQV/] + [ASCIZ /SETA/] + [ASCIZ /AND/] + [ASCIZ /SETO/] + [ASCIZ /ORCA/] + [ASCIZ /OR/] + [ASCIZ /SETB/] + + +HASTI: 0 ;AUX SYM TABLE FOR INHIBIT WRITE BIT + [ASCIZ /INHW/] +HASTS: 0 ;AUX SYM TABLE FOR STAT BIT + [ASCIZ /STAT/] + +HASTP: 0 ;AUX SYM TABLE FOR P BIT + [ASCIZ /PUSHJ/] + +HASTR: 0 ;AUX SYM TABLE FOR R BIT + [ASCIZ /POPJ/] + +HASTUB: 0 ;AUX SYM TABLE FOR UNIBUS OP + [ASCIZ /UBRD/] + [ASCIZ /UBWR/] + [ASCIZ /UBIN/] + +HASTEL: 0 ;AUX SYM TABLE FOR E-LONG + [ASCIZ /ELNG/] + + + +HTIUI: CLEARM HTICRF ;POINTER TO INITAL UINST IN A + MOVEI TT,HIFST ;POINTER TO FIELD SYMBOL TABLE +HTIU3: MOVE Q,(TT) ;GET FIRST WD OF SYM ENTRY + TLNN Q,(HSYIV) + JRST HTIU6 ;THAT ONE NOT VALID FOR INPUT + LDB C,[%H1AMOP 1(A)] ;CHECK A CONTEXT - GET AMOP BIT + LDB D,[.BP HSYACN Q] ;A CONTEXT OF SYMBOL + XCT HTACXT(D) + JRST HTIU6 ;LOSES + LDB C,[%H2LIT 2(A)] ;A CONTEXT OK, CHECK B CONTEXT. GET INST TYPE BITS + LDB D,[.BP HSYBCN Q] + XCT HTBCXT(D) + JRST HTIU6 ;B CONTEXT LOSES. + HSOUT @1(TT) ;TYPE OUT PROMPT + HSOUT [ASCIZ / /] ;AND SPACE +HTIU5D: PUSH P,A + PUSH P,Q + PUSH P,TT + PUSHJ P,HGECMA ;INPUT FIELD + CLEARM HTICRF + CAIN A,15 + SETOM HTICRF + POP P,TT + POP P,Q + POP P,A + SKIPL HCSYL + JRST HTIU6 ;NULL, PROCEED TO NEXT FIELD + SKIPL HCNUMF + JRST HTIU5B ;SYMBOL TYPED, LOOK IN AUX SYMTAB S + MOVE B,HCNUM +HTIU5C: CAIE TT,HIFST + JRST HTIU5E + CLEARM (A) ;DEPOSITING INTO OP FIELD + CLEARM 1(A) ;SO INITIALIZE WHOLE U-INST + CLEARM 2(A) + CLEARM 3(A) + MOVEI C,H1ELNG ;BUT SET E-LONG AS DEFAULT IF E-LONG BITS ARE SET + SKIPGE HELFLG + IORM C,1(A) + MOVEI C,H1STAT ;LIKEWISE STAT + SKIPGE HSTFLG + IORM C,1(A) +HTIU5E: HRRZ C,(TT) ;GET BYTE DESCRIPTOR + EDPB +HTIU6: SKIPGE HTICRF + JRST HTIUX + TLNE Q,(HSYAT) + AOS TT ;SKIP OVER AUX SYMTAB POINTER + ADDI TT,2 + CAIGE TT,HIFSTE + JRST HTIU3 +HTIUX: POPJ P, + +HTIU5B: MOVEM TT,HTIU5T ;SAVE IN CASE HAVE TO RETURN HERE + PUSHJ P,HTISS ;AUX SYMBOL SEARCH. IF FOUND, RETURN VAL IN B + SKIPGE HCNUMF ; AND HCNUM, UPDATE TT. + JRST HTIU5C ;FOUND IT, + MOVEI TT,HIFST ;TRY AGAIN FROM BEGINNING + PUSHJ P,HTISS + SKIPGE HCNUMF + JRST HTIU5C ;WON THAT TIME + HSOUT [ASCIZ /??? /] + MOVE TT,HTIU5T ;RETURN TO INPUTTING ORIG FLD + JRST HTIU5D + +HTIU5T: 0 + + +HTISS: MOVE Q,(TT) ;SEARCH AUX SYMTAB FOR SYM IN HCBUF + TLNE Q,(HSYIV) ;PICK UP AT CURRENT FIELD SYMTAB ENTRY IN TT + TLNN Q,(HSYAT) + JRST HTISS1 ;NOT VALID FOR INPUT OR DOESNT HAVE AUX SYMTAB ANYWAY + LDB C,[%H1AMOP 1(A)] ;CHECK A CONTEXT - GET AMOP BIT + LDB D,[.BP HSYACN Q] ;A CONTEXT OF SYMBOL + XCT HTACXT(D) + JRST HTISS1 ;LOSES + LDB C,[%H2LIT 2(A)] ;A CONTEXT OK, CHECK B CONTEXT. GET INST TYPE BITS + LDB D,[.BP HSYBCN Q] + XCT HTBCXT(D) + JRST HTISS1 ;B CONTEXT LOSES. + LDB D,[111100,,(TT)] ;BYTE SIZE + MOVEI B,1 + LSH B,(D) ;GET LENGTH OF AUX SYMTAB + MOVEM B,HTISSC ;SAVE INITIAL COUNT + MOVE C,2(TT) ;GET POINTER TO AUX SYMTAB +HTISS4: MOVE D,(C) ;AUX SYMTAB SEARCH LOOP + HRLI D,440700 + MOVE R,[440700,,HCBUF] +HTISS3: ILDB ZR,R ;CHARACTER COMPARISON LOOP + ILDB I,D + CAME ZR,I + JRST HTISS2 + JUMPN ZR,HTISS3 + MOVNS B ;NEGATE REMAINING COUNT + ADD B,HTISSC ;ADD INITIAL COUNT TO GET FIELD VALUE + MOVEM B,HCNUM + CLEARM HCNUM+1 + CLEARM HCNUM+2 + CLEARM HCNUM+3 + SETOM HCNUMF ;INDICATE HCNUM VALID + POPJ P, ;RETURN VALUE + +HTISS2: AOS C + SOJG B,HTISS4 ;TRY NEXT SYM +HTISS1: TLNE Q,(HSYAT) ;TRY NEXT FIELD + AOS TT ;SKIP OVER AUX SYMTAB POINTER + ADDI TT,2 + CAIGE TT,HIFSTE + JRST HTISS + POPJ P, ;OUT OF FIELDS, GIVE UP.. + +HTISSC: 0 ;LENGTH OF AUX SYMTAB + +;A CONTEXT TABLE +HTACXT: SKIPA ;SYM ALWAYS VALID + SKIPN C ;FLUSH IF ARRAY OP + SKIPE C ;FLUSH IF ALU OP + .VALUE + +;B CONTEXT TABLE +HTBCXT: SKIPA ;ALWAYS VALID + CAIE C,0 ;VALID ON NON-IMMED + CAIE C,1 ;VALID ON IMMED + CAIE C,2 ;VALID ON PDL-SRC + CAIE C,3 ;VALID ON PDL-DEST + CAIN C,3 ;VALID EXCEPT ON PDL-DEST + .VALUE + .VALUE + + +HCLN: PUSHJ P,HGCOM ;ACCEPT "COLON" COMMANDS + SKIPE HCSYL ;NO SYL + SKIPGE HCNUMF ;OR NUMBER + JRST HCMERR ;IS ERR + MOVE B,HCBUF + MOVE A,[-LHCLCM,,HCLCMT] +HCLN1: CAMN B,(A) + JRST @1(A) + AOBJN A,.+1 + AOBJN A,HCLN1 + JRST HCMERR + +HCLCMT: ASCIZ /DUMP/ ;NOTE!! THESE COMMAND CAN ONLY BE 4 CHRS LONG MAX!! + HDUMP + ASCIZ /SDMP/ + HSDMP ;DUMP "STATE" (EVERYTHING EXCEPT CONTROL MEM) + ASCIZ /LOAD/ + HFLOAD + ASCIZ /SYML/ ;LOAD ONLY SYMBOLS + HSLOAD + ASCIZ /TP/ ;SET BOARD TO PRESET TEST POSITION + HTP + ASCIZ /STEP/ ;"SET" STEP #. DO LAST :TP AGAIN, SET + HSETS ; PC TO STARTING ADDR, AND DO ARG STEPS + ASCIZ /SAVP/ ;SAVE CURRENT POSITION OFF SOMEWHERE + HSAVP + ASCIZ /RESP/ ;GET IT BACK FROM THERE + HRESP + ASCIZ /ELNG/ ;HACK E-LONG BITS IN CONTROL MEM + HELNG + ASCIZ /ZEL/ ;ZERO E-LONG BITS IN CONTROL MEM + HZEL + ASCIZ /REL/ ;REMEMBER WHERE E-LONG BITS ARE, BUT DONT AFFECT THEM + HREL + ASCIZ /STAT/ ;HACK STAT BITS IN CONTROL MEM + HSTAT + ASCIZ /ZST/ ;ZERO STAT BITS IN CONTROL MEM + HZST + ASCIZ /RST/ ;REMEMBER STAT BIT + HRST + ASCIZ /HUNT/ ;ENTER LOG SEARCH FOR LOSSAGE LOOP + HHUNT + ASCIZ /EHNT/ ;ENTER LOG SEARCH MODE FOR WHERE E-LONG BITS + HHUEL ; BITS IN CONTROL MEM HELP + ASCIZ /FEHU/ ;FILE E-LONG HUNT + HFEHNT + ASCIZ /CHNT/ ;DO "COMPARE" HUNT, SLOW SPEED VS CURRENT SPEED + HHUCM + ASCIZ /FCHU/ ;FILE COMPARE HUNT. (REINIT EACH TIME FROM + HFCHNT ; LAST FILE MENTIONNED + ASCIZ /SSB/ ;SET STAT BIT (OF SYM) + HSSB + ASCIZ /CSB/ ;CLEAR STAT BIT + HCSB + ASCIZ /SEL/ ;SET E-LONG BIT (OF SYM) + HSEL + ASCIZ /CEL/ ;CLEAR E-LONG BIT + HCEL + ASCIZ /CMF/ ;READ COMMAND FILE + HCMF + ASCIZ /B/ + HB + ASCIZ /UB/ + HUB + ASCIZ /UAB/ + HUAB + ASCIZ /SYME/ + HSYME +LHCLCM==.-HCLCMT + +HSDMP: TDZA A,A ;DONT DUMP CONTROL MEM +HDUMP: MOVNI A,1 ;DUMP CONTROL MEM + MOVEM A,HDMPCM + PUSHJ P,HFRDR + .OPEN UTYOC,HDUMO + .VALUE + MOVNI A,2 ;START FILE WITH -2 TO INDICATE NON-ZERO DUMP + SKIPL HDMPCM + MOVNI A,5 ; OR -5 IF NOT DUMPING CONTROL MEM + PUSHJ P,HDUMN + PUSHJ P,HDUCR + CLEARM HEXPF ;DUMP ENTIRE STATE OF CONS ONTO DISK FILE + MOVEI A,HRORG + SKIPL HDMPCM + MOVEI A,HRCME ;DONT DUMP CONTROL MEM +HDUMP1: CAIL A,HRCMO+CHECML + CAIL A,HRCME + JRST HDUMP2 + MOVEI A,HRCME ;ONLY DUMP EXISTING CONTROL MEM +HDUMP2: CLEARM HDUMV ;CLEAR VECTOR TO READ INTO + MOVE T,[HDUMV,,HDUMV+1] + BLT T,HDUMV+3 + MOVEI T,HDUMV + MOVEI B,HEXAMV + MOVEM A,HDUMAD + PUSHJ P,HREGDC ;EXAMINE REGISTER + PUSHJ P,HDUMW ;WRITE IT OUT + MOVE A,HDUMAD + CAIGE A,HRRDMP + AOJA A,HDUMP1 + MOVNI A,1 + PUSHJ P,HDUMN ;TERMINATE FILE IN -1 + .CLOSE UTYOC, + PUSHJ P,HCRR + POPJ P, + +HDMPCM: 0 ;-1 -> DUMP CONTROL MEM. ALWAYS DUMP ALL ELSE + +HDUMW: SKIPE HDUMV+3 + JRST HDUMW1 ;ALL FOUR WDS NON-ZERO + SKIPE HDUMV+2 + JRST HDUMW2 + SKIPE HDUMV+1 + JRST HDUMW3 + SKIPN HDUMV + POPJ P, ;ALL FOUR WDS 0, SO DONT WRITE ANYTHING + PUSHJ P,HDUMN1 + MOVE A,HDUMV +HDMWX1: PUSHJ P,HDUMN +HDUCR: MOVEI A,15 ;CR FOR THE END + PUSHJ P,HDMOCH + MOVEI A,12 + JRST HDMOCH + +HDUMW3: PUSHJ P,HDUMN1 + MOVE A,HDUMV + PUSHJ P,HDUMN + MOVE A,HDUMV+1 + JRST HDMWX1 + +HDUMW2: PUSHJ P,HDUMN1 + MOVE A,HDUMV + PUSHJ P,HDUMN + MOVE A,HDUMV+1 + PUSHJ P,HDUMN + MOVE A,HDUMV+2 + JRST HDMWX1 + +HDUMW1: PUSHJ P,HDUMN1 + MOVE A,HDUMV + PUSHJ P,HDUMN + MOVE A,HDUMV+1 + PUSHJ P,HDUMN + MOVE A,HDUMV+2 + PUSHJ P,HDUMN + MOVE A,HDUMV+3 + JRST HDMWX1 + +HDUMN1: MOVE A,HDUMAD +HDUMN: MOVEI B,-20 ;SPACE FOR THE END + HRLM B,(P) + PUSH P,[HDUMN3] + JUMPGE A,HDUMN2 + MOVEM A,HDUMNT + MOVEI A,"- + PUSHJ P,HDMOCH + MOVN A,HDUMNT +HDUMN2: IDIVI A,10 + HRLM B,(P) + SKIPE A + PUSHJ P,HDUMN2 +HDUMN3: HLRZ A,(P) + ADDI A,"0 +HDMOCH: .IOT UTYOC,A + POPJ P, + +HDUMO: 1,,(SIXBIT /DSK/) +HFNAM1: SIXBIT /CHEOPS/ +HFNAM2: SIXBIT /DMP/ + 0 + +HDUMV: BLOCK 4 ;TEMP TO READ REG ADR INTO +HDUMAD: 0 ;CURRENT REG ADR +HDUMNT: 0 ;TEM + + +HCMF: PUSHJ P,HFRDR ;SET UP COMMAND FILE + .CALL [ SETZ + SIXBIT /OPEN/ + 5000,,0 + 1000,,UTICOM + [SIXBIT /DSK/] + HFNAM1 + SETZ HFNAM2] + JRST HCMERR + SETOM HTICMF + POPJ P, + +HTICMF: 0 ;-1 IN COMMAND FILE READING MODE + +HFSTU1: .CALL [ SETZ + SIXBIT /OPEN/ + 5000,,2 + 1000,,UTYIC + [SIXBIT /DSK/] + HFNAM1 + SETZ HFNAM2] + JRST HCMERR + MOVE A,[440700,,INBUF+INBFSZ] + MOVEM A,INBUFP + POPJ P, + +HFGQAN: MOVEI C,HFLDV +HFLO3: PUSHJ P,INITGW + POPJ P, + MOVEM T,(C) + CAIGE C,HFLDV+3 + AOS C + JRST HFLO3 + +HSLOAD: PUSHJ P,HFRDR + PUSHJ P,HFSTU1 +HSLD1: PUSHJ P,INITGW + JRST .-1 + JUMPL T,HSLD2 + MOVEM T,HFLOA ;SAVE REG ADR IN CASE ITS UCODE STARTING ADDRESS + PUSHJ P,HFGQAN ; (THE ONLY THING WE REALLY LOAD) + MOVE A,HFLOA + MOVEI T,HFLDV + MOVEI B,HDPV + CAIN A,HRRSA ;SKIP UNLESS UCODE SA + PUSHJ P,HREGDC + JRST HSLD1 + +HSLD2: AOJE T,HSLOX ;EOF + AOJE T,HSLD1 ;NON-ZERO DUMP + AOJE T,HSLOSM ;SYMBOLS YEAH!! + AOJE T,HSLD1 ;NON-ZERO DUMP + AOJE T,HSLD1 ;OTHER FLAVOR NON ZERO DUMP + .VALUE + +HSLOX: .CLOSE UTYIC, + JRST HFLOX1 + +HSLOSM: PUSHJ P,HFLOS0 + JRST HSLD2 + +HFLOAD: PUSHJ P,HFRDR ;READ FILE NAMES +HFLOA1: PUSHJ P,HFSTU1 + SETOM HFLDM ;START OUT IN NORMAL LOAD MODE + PUSHJ P,HFLISQ ;LOAD TEMP PIECE LIST AND SQUARE LIST ARRAYS FROM HARDWARE +HFLO1: CLEARM HFLDV + MOVE C,[HFLDV,,HFLDV+1] + BLT C,HFLDV+3 + PUSHJ P,INITGW + JRST .-1 + JUMPL T,HFLO2 ;SPECIAL CODE + MOVEM T,HFLOA ;SAVE REG ADR + SKIPL A,HFLDM + PUSHJ P,HFLOZ ;LOADING NON-ZERO DUMP, ZERO STUFF IF NECC + PUSHJ P,HFGQAN + PUSHJ P,HFLO4 + JRST HFLO1 + +HFLO4: MOVE A,HFLOA ;ACTUALLY SALT IT +HFLO4A: MOVEI T,HFLDV + CAIL A,HRSQO ;DO SPECIAL CASE CHECKS FOR SQUARE LIST AND PIECE LIST + CAIL A,HRSQE ;(FIGURE OUT HOW TO LOAD THESE LATER) + JRST HFLO4C + MOVE C,(T) + MOVEM C,HFISQL-HRSQO(A) + POPJ P, + +HFLO4C: CAIL A,HRPLO + CAIL A,HRPLE + JRST HFLO4D + MOVE C,(T) + MOVEM C,HFIPCL-HRPLO(A) + POPJ P, + +HFLO4D: MOVEI B,HDPV + PUSHJ P,HREGDC + POPJ P, + +HFLOZ: MOVE T,HFLOA ;NOW GOING TO LOAD INTO ADR IN HFLOA + CAML A,T ;A HAS FIRST LOCN TO ZERO IF LESS THAN THAT + JRST [ AOS T + MOVEM T,HFLDM ;NOW UP TO HERE + POPJ P,] + SKIPLE HFLDM1 + JRST [ CAIL A,HRCMO ;DONT ZERO CONTROL MEM IF HFLDM1 IS + + CAIL A,HRCME + JRST HFLOZ1 + AOJA A,HFLOZ] + SKIPGE HFLDM1 + JRST [ CAIL A,HRPTO ;ORIGIN OF TYPE MEM + CAIL A,HRRDRE ;END OF RAID REG + JRST HFLOZ1 ;OK, ZERO IT + AOJA A,HFLOZ] ;IN SQUARE MEM RANGE, DONT. +HFLOZ1: +IFN 4000-CHECML,[ + CAIL A,HRCMO+CHECML + CAIL A,HRCME + JRST HFLOZ3 + MOVEI A,HRCME ;DONT TRY TO ZERO NON-EXISTANT CONTROL MEM + JRST HFLOZ +] +HFLOZ3: PUSH P,A + PUSHJ P,HFLO4A + POP P,A + AOJA A,HFLOZ + +HFLO2: AOJE T,HFLOX ;-1 TERMS FILE -- SEE ALSO HSLD2 -- + AOJE T,HFLONZ ;-2 SIGNALS NON-ZERO DUMP + AOJE T,HFLOSM ;-3 SIGNALS BEG OF SYMBOLS + AOJE T,HFLNZ1 ;-4 SIGNALS NON-ZERO DUMP, BUT LEAVE BOARD, RAID REG + AOJE T,HFLNZ3 ;-5 LIKE -2, BUT DONT ZERO CM SINCE IT WASNT DUMPED + .VALUE + +HFLOX: MOVEI T,HRRDMP+1 + MOVEM T,HFLOA + SKIPL A,HFLDM + PUSHJ P,HFLOZ ;ZERO REST IF NECC + .CLOSE UTYIC, + PUSHJ P,HFDISQ ;LOAD HARDWARE FROM TEM SQUARE LIST AND PIECE LIST + SKIPL HFLDM1 + JRST HFLOX1 + MOVE A,HUSADR ;THIS AN ASSEMBLED FILE? (SORT OF) + MOVEM A,HCNUM + PUSHJ P,HG ;SET STARTING ADR +HFLOX1: PUSHJ P,HCRR + POPJ P, + +HFLNZ1: SETOM HFLDM1 ;LEAVE BOARD, RAID REG + JRST HFLNZ2 + +HFLONZ: TDZA A,A ;CLEAR ALL +HFLNZ3: MOVEI A,1 ;DONT CLEAR CONTROL MEMORY + MOVEM A,HFLDM1 +HFLNZ2: MOVEI A,HRORG + MOVEM A,HFLDM ;WHERE UP TO IN NON-ZEROING + CLEARM HSTEPS ;PROBABLY THE MOST REASONABLE THING ... + CLEARM HSTFLG ;SIGNAL STATISTICS BIT TABLE INVALID + CLEARM HBPTIN ;BPTS NOT IN + CLEARM HELFLG ;ALSO E-LONG TABLE + CLEARM HTPLDF ;INDICATE TYPE AND VAL NOT LOADED + JRST HFLO1 + +;SYMBOL TABLE FORMAT: +;IN FILE: +; .. -3 SYMBOL-NAME ... +; SYMBOL TABLE SECTION IS TERMINATED BY ANY - NUMBER. +;IN CORE: +; BEGINS AT HSMTAB, FIRST FREE LOCN IS POINTED TO BY HSMPTR. +; ONE WD SYMBOL WHICH HAS GENERATION NUMBER AND NUMBER SYMBOL-LOCS IN LH, +; DATA POINTER IN RH. +; THE DATA TABLE BEGINS AT HSMDAT, FIRST FREE LOCN IS POINTED TO BY HDTPTR. +; EACH ENTRY IS POINTED TO BY HSMTAB ENTRY. FIRST N WDS ARE SYMBOL-LOCS. +; AFTER THAT STARTING IN THE NEXT WORD IS THE ASCIZ SYMBOL NAME, TAKING AS +; MANY WORDS AS NECESSARY. + +HSMSIZ==2000 ;POINTER TABLE SIZE +HDTSIZ==14000 ;DATA TABLE SIZE + +;LH OF POINTER WORD +%HSMNL==.BP <7700,,> ;NUMBER LOCATIONS +%HSGNN==.BP <77,,> ;GENERATION NUMBER + +HFLOSM: PUSHJ P,HFLOS0 + JRST HFLO2 + +HFLOS0: MOVEI A,HSMTAB ;RESET SYMBOL TABLE + MOVEM A,HSMPTR + MOVEI A,HSMDAT + MOVEM A,HDTPTR + CLEARM HSMDAT ;PHYSICALLY ZERO TO AVOID LOSING ON LOW ORDER BIT + MOVE A,[HSMDAT,,HSMDAT+1] ;LOSSAGE, ETC (OF ASCIZ STRING) + BLT A,HSMDAT+HDTSIZ-1 +HFLOS1: PUSHJ P,INITGW ;LOOP TO LOAD SYMBOL + JRST .-1 + JUMPL T,CPOPJ ;THRU LOADING SYMBOLS + HRRZ A,HSMPTR + CAIL A,HSMTAB+HSMSIZ + .VALUE ;OVERLOW OF POINTER SPACE + AOS HSMPTR + HRRZ B,HDTPTR + HRL B,T ;PUT IN GENERATION + PUSHJ P,INITGW + JRST .-1 + MOVE C,T ;NUMBER SYMBOL-LOCS + DPB C,[%HSMNL B] + MOVEM B,(A) +HFLOS2: JUMPLE C,HFLOS3 ;HAVE LOADED ALL SYMBOL-LOCS + PUSHJ P,INITGW + JRST .-1 + AOS D,HDTPTR + CAIL D,HSMDAT+HDTSIZ + .VALUE ;OVERFLOW OF DATA SPACE + MOVEM T,-1(D) + SOJA C,HFLOS2 + +HFLOS3: ILDB R,INBUFP ;NOW READ IN SYMBOL NAME. + CAIN R,3 ;FLUSH ANY GARBAGE UP TO SYMBOL CONSTITUENT + PUSHJ P,NEWBF + CAIG R,40 + JRST HFLOS3 + MOVE D,HDTPTR + HRLI D,440700 + JRST HFLOS5 + +HFLOS4: ILDB R,INBUFP + CAIN R,3 + PUSHJ P,NEWBF + CAILE R,40 +HFLOS5: IDPB R,D ;STORE CHAR + CAIE R,40 + JRST HFLOS4 ;SYMBOL TERM BY SPACE + MOVEI ZR,0 +HFLOS6: IDPB ZR,D ;TERM ASCIZ STRING + TLNE D,760000 + JRST HFLOS6 + MOVEI D,1(D) + CAIL D,HSMDAT+HDTSIZ + .VALUE ;LOST + MOVEM D,HDTPTR + JRST HFLOS1 ;THRU WITH THAT SYMBOL + +HSMPTR: 0 ;SYMBOL TABLE POINTER +HDTPTR: 0 ;DATA TABLE POINTER + +HFLISQ: MOVEI A,HFISQL ;LOAD TEMP ARRAY FROM HARDWARE + MOVEI B,0 +HFLIS1: PUSH P,B + ERSQL + MOVE B,(P) + ADDI A,100 + ERPLOC + POP P,B + SUBI A,100 + AOS A + CAIGE B,77 + AOJA B,HFLIS1 + POPJ P, + +HFDISQ: MOVEI B,0 ;FIGURE OUT HOW TO LOAD HARDWARE FROM TEMP ARRAYS +HFDIS3: SKIPE C,HFISQL(B) ;GET RID OF THE PAIRED ENTRIES + CAME B,HFIPCL(C) + JRST HFDIS1 ; (THESE WILL BE NO PROBLEM) + PUSH P,B ;PUSH SQUARE NUMBER + PUSH P,C ;PUSH PIECE NUMBER + PUSH P,[HFDIS2] + CLEARM HFISQL(B) + CLEARM HFIPCL(C) +HFDIS1: CAIGE B,77 + AOJA B,HFDIS3 + MOVEI B,0 ;NOW PUT IN THE LOOSE PIECE-LIST ENTRIES + MOVEI A,HFIPCL +HFDIS4: PUSH P,B + EWPLOC + POP P,B + AOS A + CAIGE B,77 + AOJA B,HFDIS4 + MOVEI B,0 + MOVEI A,HFISQL ;PUT IN LOOSE SQUARE LIST ENTRIES +HFDIS5: PUSH P,B + EWSQL + POP P,B + AOS A + CAIGE B,77 + AOJA B,HFDIS5 + POPJ P, + + +HFDIS2: POP P,HFDIST ;ROUTINE TO PUT MATCHED ENTRIES IN (POP PIECE NUMBER) + POP P,B ;POP SQUARE NUMBER + MOVEI A,HFDIST + EWSQL + POPJ P, + +HFDIST: 0 ;TEMP +HFISQL: BLOCK 64. ;TEMP ARRAY FOR SQUARE LIST +HFIPCL: BLOCK 64. ;TEMP ARRAY FOR PIECE LIST + +;ARG IS REG ADR IN A. PRINT ANY USER SYMBOL THAT MATCHES EXACTLY +HPUSM: PUSH P,A + PUSH P,B + PUSH P,C + PUSH P,D + SKIPN B,HSMPTR + JRST HPUSMX ;NO SYMS +HPUSM1: CAIG B,HSMTAB + JRST HPUSMX ;NOT FOUND + MOVE C,-1(B) + LDB D,[%HSMNL C] ;GET NUMBER LOCNS +HPUSM2: JUMPE D,HPUSM3 +HPUSM5: CAMN A,(C) + SOJA B,HPUSM4 ;FOUND IT + AOS C + SOJG D,HPUSM5 +HPUSM3: SOJA B,HPUSM1 + +HPUSM4: PUSHJ P,HPNTUS ;PRINT USER SYM IN B + MOVEI A,40 + PUSHJ P,HTYO +HPUSMX: POP P,D + POP P,C + POP P,B + POP P,A + POPJ P, + +HPNTUS: MOVEI A,"% ;PRINT GENERATION + PUSHJ P,HTYO + LDB A,[%HSGNN (B)] + ADDI A,"0 + PUSHJ P,HTYO + HRRZ C,(B) ;PRINT USER SYM, TAKES POINTER TO SYMBOL POINTER TBL + LDB D,[%HSMNL (B)] ;IN B + ADD C,D + HSOUT (C) + POPJ P, + + +HTISM: MOVEM A,HTISMT ;SAVE INPUT ARG (TO ADD IT IN LATER) + PUSHJ P,HTISC ;READ IN CHAR STRING + PUSHJ P,HUSEV ;EVALUATE IT + JRST HCMERR ;NOT FOUND + MOVE A,HTISMT + ADD A,(C) ;ADD IN FIRST VALUE WORD + JRST HVLRET + +HTISC: CLEARM HIUSGN ;GENERATION NUMBER + MOVE B,[440700,,HIUSBF] +HTISC6: PUSHJ P,HTYI ;GET FIRST CHAR + CAIN A,"% + JRST HTISC6 ;IN CASE GUY TYPES AN EXTRA ONE, FLUSH IT + CAIN A,"> + JRST [ SETOM HIUSGN ;ALL GENERATIONS + JRST HTISC4] + CAIL A,"0 + CAILE A,"9 + JRST HTISC1 ;NOT A NUMBER + SUBI A,"0 + MOVEM A,HIUSGN ;ITS GENERATION NUMBER +HTISC4: PUSHJ P,HTYI +HTISC1: CAIN A,177 + JRST HCMERR + CAIL A,140 + SUBI A,40 + CAIL A,"A + CAILE A,"Z + JRST HTISC2 +HTISC3: IDPB A,B + JRST HTISC4 + +HTISC2: CAIL A,"0 + CAILE A,"9 + CAIN A,"- ;MINUS A SYM CONST IN THESE + JRST HTISC3 + CAIN A,"+ ;SO IS + + JRST HTISC3 + MOVEM A,HTYIUR ;UNRCH THIS CHAR LATER .. + MOVEI ZR,0 +HTISC5: IDPB ZR,B + TLNE B,760000 + JRST HTISC5 + POPJ P, + +HIUSGN: 0 ;GENERATION OF USER SYMBOL READ +HIUSBF: BLOCK 20 ;GETS ASCIZ STRING OF SYMBOL +HTISMT: 0 ;TEM + +HUSEV: MOVE B,HSMPTR ;SEARCH USER SYMBOL TABLE FOR SYM IN HIUSGN,HIUSBF +HUSEV1: CAIG B,HSMTAB ; IF HIUSGN IS -, FIND ALL GENERATIONS + POPJ P, ;NOT FOUND + MOVE C,-1(B) + SKIPGE HIUSGN + JRST HUSEV3 ;GOBBLE ALL + LDB D,[%HSGNN C] + CAME D,HIUSGN + SOJA B,HUSEV1 ;WRONG GENERATION +HUSEV3: LDB D,[%HSMNL C] + ADD C,D + MOVEI D,HIUSBF +HUSEV2: MOVE ZR,(C) + CAME ZR,(D) + SOJA B,HUSEV1 ;LOSES + TRNE ZR,177_1 ;SKIP ON WINS + AOJA C,[AOJA D,HUSEV2] + MOVE C,-1(B) + AOS (P) + SOS B ;RETURN SYM POINTER WD IN C + POPJ P, + +HFLDM: -1 ;-1 OR FIRST LOCN TO ZERO IF LESS THAN WHERE LOADING +HFLDM1: 0 ;WHEN LOADING NON-ZERO DUMP: + ; 0 -> A FULL NON-ZERO DUMP + ;-1 -> DONT ZERO BOARD MEMORIES OR RAID REG + ; 1 -> DONT ZERO CONTROL MEMORY +HFLOA: 0 ;REG ADR LOADING +HFLDV: BLOCK 4 ;TEMP BLOCK + + +HUSMAP: MOVE B,HSMPTR ;CALL WITH SYM IN HIUSGN,HIUSBF +HUSMA1: PUSHJ P,HUSEV1 ;CALLS BACK FOR EACH VALUE OF SYM + JRST HUSMAX ;WITH VALUE IN B + PUSH P,B ;FOUND A GENERATION THAT MATCHES + LDB D,[%HSMNL C] +HUSMA2: JUMPE D,HUSMA3 + MOVE B,(C) + PUSH P,C + PUSH P,D + PUSHJ P,@-3(P) ;CALL GUY FOR EACH VALUE OF THAT GENERATION + POP P,D + POP P,C + SOS D + AOJA C,HUSMA2 +HUSMA3: POP P,B + SKIPGE HIUSGN ;SKIP ON ONE GENERATION, ASSUME ITS UNIQUE + JRST HUSMA1 ;WANT ALL GENERATIONS, SO KEEP LOOKING +HUSMAX: AOS (P) + POPJ P, + +HFRDR: MOVE T,[-2,,HFNAM1] ;READ FILE NAMES + MOVE A,HLASTC +HFRDR1: MOVE B,[440600,,C] + MOVEI C,0 +HFRDR2: CAIN A,177 + JRST HCMERR + CAIE A,12 + CAIN A,15 + JRST HFRDX + CAIG A,40 + JRST HFRDR3 ;TERM + CAIL A,140 + SUBI A,40 ;UPPER-CASIFY + SUBI A,40 ;SIXBIT IFY + IDPB A,B + TLNN B,770000 + TLZ B,-1 + PUSHJ P,HTYI + JRST HFRDR2 + +HFRDR3: JUMPE C,HFRDR4 + SKIPGE T + MOVEM C,(T) + AOBJP T,.+1 +HFRDR4: PUSHJ P,HTYI + JRST HFRDR1 + +HFRDX: JUMPE C,HFRDX1 + SKIPGE T + MOVEM C,(T) +HFRDX1: POPJ P, + +INITGW: MOVEI T,0 ;RETURN WORD IN T, CLOBBER R +INITG1: ILDB R,INBUFP ;SKIP UNLESS ENCOUNTER CR BEFORE NUMBER + CAIN R,3 + PUSHJ P,NEWBF + CAIN R,"- + JRST INIMNS ;HACK HACK + CAIN R,15 + POPJ P, + CAIL R,"0 + CAILE R,"9 + JRST INITG1 +INITG2: LSH T,3 + ADDI T,-"0(R) + ILDB R,INBUFP + CAIN R,3 + PUSHJ P,NEWBF + CAIN R,"- + JRST INIMNS ;HACK HACK + CAIL R,"0 + CAILE R,"9 + JRST INITG3 + JRST INITG2 + +INITG3: CAIE R,"_ + JRST [SETOM UTUNRF + MOVEM R,UTURCH + AOS (P) + POPJ P,] + PUSH P,T + PUSHJ P,INITGW + JFCL + MOVE R,T + POP P,T + LSH T,(R) + AOS (P) + POPJ P, + +INIMNS: PUSHJ P,INITGW ;HACK (AND I DO MEAN HACK) - + JFCL + MOVNS T + AOS (P) + POPJ P, + +NEWBF: HRRZ R,INBUFP ;UNSKIPS TWICE, CLOBBERS R + SKIPGE NEWBEF + JRST .+3 + CAIE R,INBUF+INBFSZ + .VALUE + MOVE R,[-INBFSZ,,INBUF] + .IOT UTYIC,R + JUMPL R,[ CAMN R,[-INBFSZ,,INBUF] + POPJ P, ;NO DATA XFERRED, RETURN IN R - + HRLI R,3_11. + MOVEM R,(R) ;ASSURE ^C AT END OF DATA + SETOM NEWBEF + JRST .+1] + MOVE R,[440700,,INBUF] + MOVEM R,INBUFP + SOS (P) + SOS (P) + SOS (P) + POPJ P, + +INBUFP: 440700,,INBUF+INBFSZ +NEWBEF: 0 ;-1 LAST IOT DID NOT XFER FULL AMT OF WDS +UTUNRF: 0 ;UNRCH FLAG +UTURCH: 0 ;UNRCH CHAR + +INBFSZ==100 + +INBUF: BLOCK INBFSZ + 3_29. + + +HSETS: PUSHJ P,HGCNUM ;"SET" STEP # + CLEARM HRFFLG ;DONT REINITIALIZE FROM FILE +HSETS1: PUSH P,HCNUM + SKIPL HRFFLG + PUSHJ P,HTP1R ;REDO LAST :TP (AND GIVE RUN COMMAND) + SKIPGE HRFFLG + PUSHJ P,HFLOA1 ;REINITIALIZE INSTEAD FROM LAST MENTIONED FILE + POP P,HCNUM + SETOM HCNUMF + JRST HCN ;DO THAT MANY STEPS + +HFCHNT: SKIPA A,[-2] ;COMPARE (SPEED) FILE HUNT. +HFEHNT: MOVEI A,1 ;E-LONG FILE HUNT + SETOM HRFFLG ;SIGNAL REINIT FROM FILE + JRST HFHNT1 + +HHUCM: SKIPA A,[-2] ;COMPARE (AT DIFFERENT SPEEDS) HUNT MODE +HHUEL: MOVEI A,1 ;E-LONG FLAVOR HUNT MODE + CLEARM HRFFLG ;SIGNAL REINIT FROM START +HFHNT1: MOVEM A,HHUNTM + JRST HHUEL1 + +HHUNT: SETOM HHUNTM ;USTEP FLAVOR HUNT MODE + CLEARM HRFFLG ;REINIT FROM START +HHUEL1: PUSHJ P,HGCOM ;ENTER LOG SEARCH LOOP + SKIPE HCSYL + SKIPL HCNUMF + JRST HHUNT3 ;CONTINUE PREVIOUS HUNT + MOVE B,HCNUM+1 + LSH B,16. + IOR B,HCNUM + MOVEM B,HHUNTV +HHUNT2: CAILE B,1 + LSH B,-1 + MOVEM B,HHUNTS ;STEP SIZE +HHUNT1: MOVE A,HHUNTV + DPB A,[2000,,HCNUM] + LSH A,-16. + MOVEM A,HCNUM+1 + SKIPL A,HHUNTM + JRST HHUEL2 ;E-LONG FLAVOR HUNT + AOJN A,HHUCM1 ;XFER ON SPEED COMPARE MODE HUNT + PUSHJ P,HSETS1 +HHUNT3: PUSHJ P,HCSDPY ;UPDATE DISPLAY + CLEARM HDPFLG ;HAVENT DONE ANY DEPOSITS SINCE THEN +HHUNT4: PUSHJ P,HTYI + MOVE B,HHUNTS + MOVN C,B + CAIN A,"* + JRST HHUNT1 ;GO AGAIN SAME PARAMETERS + CAIN A,"+ + JRST [ SKIPG HHUNTM ;IF IN E-LONG HUNT MODE, DONT CHANGE + ADDM B,HHUNTV ; HHUNTV, SINCE IT REPRESENTS THE TOP OF THE RANGE + JRST HHUNT2] + CAIN A,"- + JRST [ ADDM C,HHUNTV + JRST HHUNT2] + CAIN A,"? + JRST HHUNT ;ACCEPT NEW BASE VALUE + CAIN A,"/ + JRST [ MOVE B,HHUNTV ;DOUBLE HUNT BASE + ADDB B,HHUNTV + JRST HHUNT2] + CAIN A,"> ;DOUBLE STEP SIZE WITHOUT "MOVING" + JRST [ LSH B,1 + MOVEM B,HHUNTS + JRST HHUNT3] + CAIN A,"< + JRST [ CAILE B,1 + LSH B,-1 ;HALVE STEP SIZE WITHOUT "MOVING" + MOVEM B,HHUNTS + JRST HHUNT3] + CAIN A,"# + JRST [ PUSHJ P,HGCNUM ;SET STEP SIZE + MOVE B,HCNUM+1 + LSH B,16. + IOR B,HCNUM + MOVEM B,HHUNTS + JRST HHUNT3] + CAIN A,40 + JRST HHUNT4 + MOVEM A,HTYIUR ;UNRCH CHAR AND DROP OUT + PUSHJ P,HCRR + CLEARM HHUNTM + POPJ P, + +HHUEL2: SKIPL HELFLG ;SET ALL E-LONG BITS EXCEPT THOSE IN + PUSHJ P,HELNG1 ;RANGE FROM HHUNTV-HHUNTS TO HHUNTV. + MOVE TT,HHUNTV ;HOWEVER, LEAVE SET ANY IN THAT RANGE THAT WERE + SUB TT,HHUNTS ;"ORIGINALLY" SET. FIRST, SET ALL AND SAVE + SKIPGE TT ;ONES THAT WERE ORIGINALLY SET IF HAVENT ALREADY. + MOVEI TT,0 + MOVEI B,0 + MOVEI A,HELNTM + MOVEI C,H1ELNG + PUSHJ P,HHUELS ;SET ALL E-LONG BITS UP TO TT + MOVEI T,HELTBL ;FIND PLACE IN TABLE +HHUEL3: SKIPGE (T) + JRST HHUEL4 ;REACHED END OF TBL + CAMLE B,(T) + AOJA T,HHUEL3 +HHUEL4: CAIGE B,CHECML + CAML B,HHUNTV + JRST HHUEL5 ;THRU + ERCMEM + CAMN B,(T) + AOJA T,HHUEL6 ;SET THAT ONE SINCE IT ORIGINALLY WAS + ANDCAM C,HELNTM+1 +HHUEL8: EWCMEM +HHUEL7: AOJA B,HHUEL4 + +HHUEL6: IORM C,HELNTM+1 + JRST HHUEL8 + +HHUEL5: MOVEI TT,CHECML ;SET THE REST ABOVE THAT + PUSHJ P,HHUELS + SKIPL HRFFLG + PUSHJ P,HTP1R ;RESET POSITION + SKIPGE HRFFLG + PUSHJ P,HFLOA1 ;RESET FROM FILE INSTEAD + PUSHJ P,HCP ;PROCEED AND DO SEARCH + JRST HHUNT3 + +HHUELS: CAML B,TT + POPJ P, + ERCMEM + IORM C,1(A) + EWCMEM + AOJA B,HHUELS + +HHUNTV: 0 ;HUNT VALUE +HHUNTS: 0 ;HUNT STEP SIZE +HHUNTM: 0 ;0 NOT IN HUNT MODE (.NE. 0-> DISPLAY HHUNTS) + ; -1 USTEP FLAVOR HUNT MODE + ; +1 ELNG FLAVOR HUNT MODE + ; -2 SPEED COMPARE HUNT MODE +HRFFLG: 0 ;-1 -> REINIT FROM FILE AT HSETS1 + ;0 -> REINIT TO START OF SEARCH + +HHUCM1: PUSH P,HCHSPD ;SAVE PREVIOUS SPEED + MOVEI A,1 ;SWITCH TO SLOW SPEED + MOVEM A,HCHSPD + PUSHJ P,HSETS1 ;DO THAT! + MOVE A,HSVPC + MOVEM A,HHUCMT ;SAVE "CORRECT" PC + POP P,HCHSPD ;RESTORE SPEED + PUSHJ P,HSETS1 + MOVE A,HHUCMT + CAME A,HSVPC + JRST [ HSOUT [ASCIZ /LOST! CORRECT PC=/] + MOVE B,HHUCMT + PUSHJ P,HOCTP + JRST HHUNT3] + HSOUT [ASCIZ /OK/] + JRST HHUNT3 + +HHUCMT: 0 ;"CORRECT" PC AFTER N STEPS + +HTP: PUSHJ P,HGCOM ;LOAD TEST POSITION + SKIPE HCSYL + SKIPL HCNUMF + JRST HCMERR + MOVE A,HCNUM + CAIL A,HNTSTP ;NUMBER TEST POSITIONS + JRST HCMERR + MOVEM A,HTPLST ;SAVE LAST TEST POSITION USED +HTP1R: SKIPGE A,HTPLST ;LOAD HTPPCL WITH RIGHT THING + JRST HTP1R1 ;IT ALREADY HAS RIGHT THING + MOVE A,HTPTAB(A) ;LOAD IT TO POINT TO APPRO TEST POSITION. + MOVEM A,HTPPCL +HTP1R1: PUSHJ P,HTP1 +HCCMS: MOVEI A,1 ;GIVE CHEOPS COMMAND 1 (INITIATE SEARCH) +HCCOM: DPB A,[100200,,HSVFLA+3];WHEN IT GETS STARTED + POPJ P, + +HTP1: MOVE A,HUSADR ;LOAD CHEOPS WITH BOARD, ETC, SPECIFIED BY + MOVEM A,HCNUM ; BLOCK STARTING AT CONTENTS OF HTPPCL +.SEE HSVPTB ; USE "CLOSE-COUPLED" MODE + PUSHJ P,HG ;START AT HUSADR (AND SOS HDPFLG) + MOVEI A,[0] ;ZERO STATA, STATB + MOVEI B,HODSTA + EWOD + MOVEI B,HODSTB + EWOD + MOVEI B,HODSTR ;CLEAR STAR (CLEARING ANY COMPUTATION COMPLETE FLAG) + EWOD + MOVEI B,0 +HTP1L: PUSH P,B ;CLEAR OUT AC S AND AAC S FOR REPRODUCABILITY. + EWAC + POP P,B + CAIGE B,17 + AOJA B,HTP1L + MOVE A,HTPPCL ;INITIALIZE ALPHA + SUBI A,4 + MOVEI B,1 + EWAC + MOVE A,HTPPCL ;AND BETA + SUBI A,3 + MOVEI B,2 + EWAC + MOVE A,HTPPCL ;MAYBE SET DEPTH + SUBI A,5 + MOVEI B,1 + SKIPL (A) ;-1 -> NO CHANGE + EWPDLB ;SET DEPTH + CLEARM HSTEPS + CLEARM HSVFLA ;CLEAR FLAGS, PARTICULARLY STM + MOVE A,[HSVFLA,,HSVFLA+1] + BLT A,HSVFLA+3 + PUSHJ P,HINPCM ;CLEAR PXM, PIECE LOC. INITIALIZE VAL, TYP + PUSHJ P,HINSQ ;CLEAR SQUARE LIST + MOVE A,HTPPCL + SUBI A,1 ;GET POINTER TO BITS AND MODES WD + LDB B,[170100,,(A)] ;GET STM BIT FROM BITS AND MODES WD + MOVEM B,HS1TEM + MOVEI B,20 ;BITS AND MODES WD + EWPDLB ;PUT IN BITS AND MODES WD OF MACHINE + MOVEI A,HS1TEM +; SOS A + PUSHJ P,HDPSTM ;RESTORE SIDE TO MOVE +; SOS A ;NOW GET POINTER TO FLAGCELL WORD + MOVE A,HTPPCL + SUBI A,2 + MOVEI B,HODFC ;PUT THAT IN FLAGCELL + EWOD + MOVE A,HTPPCL ;GET PIECE LIST POINTER + MOVEI C,0 ;ADD UP MATERIAL BALANCE +HTPL: SKIPGE (A) + JRST HTPLX + MOVE B,1(A) + EWPIEC + MOVE B,(A) ;ADD UP MATERIAL BALANCE + TRNN B,10 + ADD C,HPNMV(B) + TRNE B,10 + SUB C,HPNMV(B) + ADDI A,2 + JRST HTPL + +HTPLX: MOVEM C,HS1TEM ;STORE INITIAL MATERIAL BALANCE IN + MOVEI A,HS1TEM ;AC[MATERIAL] + MOVEI B,3 + EWAC + POPJ P, + +;LOAD CHEOPS COMMAND BLOCK FOR OPERATION IN BUFFERED MODE +;TAKES ARGS IN SAME FORMS AS HTP1 +.SEE HSVPTB +HLDPB: MOVEM A,HTPPCL ;LOAD PARAMETER BLOCK +HBM1: MOVE B,HTPPCL ;GET ARG BLOCK POINTER + MOVEI C,CBABL ;ORIGIN OF PARAMETER BLOCK IN CHEOPS BUFFER MEMORY + ; (IN PDP-10 WDS) + PUSHJ P,HBM2 ;DO WORK + MOVE TT,C + LSH TT,1 ;CONVERT TO 16BIT WDS + ADDI TT,CBBAS/2 ;RELOCATE FOR START OF BUFFER MEM IN UNIBUS ADR SPACE. + ; /2 TO CONVERT BYTES TO WDS + LSH TT,4 ;GET POINTER TO BLOCK JUST LOADED + MOVEM TT,HBMEM+5 ;MAKE BACKGROUND ARG BLOCK POINTER POINT TO IT + POPJ P, + +HBM2: MOVE A,C ;ENTER HERE WITH CHEOPS BUFFER ADR IN C, + ; AND PARAMETER BLOCK POINTER IN B. TRANSFERS PARAMETER + ; BLOCK TO CHEOPS BUFFER MEMORY. DOES NOT START CHEOPS,ETC. + ADD A,[442000,,HBMEM+1] ;POINTER TO ARG SECTION OF COMMAND BLOCK + SETZM -1(A) ;CLEAR OUT STATEWORD + MOVE ZR,-1(B) ;BITS AND MODES WD + IDPB ZR,A + MOVE ZR,-5(B) ;DEPTH + IDPB ZR,A + MOVE ZR,-4(B) ;INITIAL ALPHA + IDPB ZR,A + MOVE ZR,-3(B) ;INITIAL BETA + IDPB ZR,A + MOVE ZR,-2(B) ;INITIAL FLAGWORD + IDPB ZR,A + MOVE A,C + ADD A,[242000,,HBMEM+17] ;GET POINTER TO PIECE POSITION SECTION + MOVE D,B +HBM1L: SKIPGE TT,(D) ;LOAD PIECES + JRST HBM1X + LSH TT,8 + IOR TT,1(D) + IDPB TT,A + ADDI D,2 + JRST HBM1L + +HBM1X: MOVEI TT,0 + IDPB TT,A ;STORE 0 TO TERMINATE LIST + MOVSI TT,-4 + MOVEM TT,HBMEM(C) ;SIGNAL BLOCK HAS ARGS FOR CHEOPS + POPJ P, + + +HTPTAB: HTPOS0 ;TWO KINGS EACH ON K1 + HTPOS1 ;INITIAL POSITION + HTPOS2 ;WK ON K3 BK ON W'S K5 + HTPOS3 ;K S ON K1 WKR ON KR1 + HTPOS4 ;K S ON K1 WQR ON QR1 + HTPOS5 ;K S ON K1 BKR ON KR1 + HTPOS6 ;K S ON K1 BQR ON QR1 + HTPOS7 ;WK ON K1, BK ON KB1, WKRP ON KR7 + HTPS10 ;WK ON K7, WKBP ON KB7, BK ON K8, BR ON KR2 + ; (TEST PROMOTING MOVE ILLEGAL) + HTPS11 ;WK ON K3, WKP ON K4, BK ON K2, BQP ON Q4. + HTPS12 ;K S ON K1, WKP ON WK2, BQP ON BQ5 + HTPS13 ;K S ON K1, WQP ON Q5, BKP ON K2 + HTPS14 ;K S ON K1, WKRP ON KR7, BQN ON KN1, BKN ON KR1 + ; (TEST PROMOTING CAPTURE) + HNTSTP==.-HTPTAB + +;10 -> WQR OR K MOVED +; 4 -> WKR OR K MOVED +; 2 -> BQR OR K MOVED +; 1 -> BKR OR K MOVED + +HFCTAB: 17 ;THING TO PUT IN FLAGCELL (RE: CASTLING PRIV AND GHOSTS) + 0 ;CASTLING BOTH WAYS FOR BOTH SIDES + 17 + 13 ;WKR NOT MOVED + 7 ;WQR NOT MOVED + 16 ;BKR NOT MOVED + 15 ;BQR NOT MOVED + 17 ;NO CASTLING + 17 + 17 + 17 + 17 + 17 + + -1 ;CHEOPS DEPTH (-1 -> NO CHANGE) + -20000 ;ALPHA + 20000 ;BETA + 17 ;FLAGCELL WD + 0 ;STM +HTPS14: 26 ;WKRP + 67 ; WKR7 + 56 ;BKN + 77 ; BKR1 + 57 ;BQN + 76 ; BKN1 + 50 ;BK + 74 ; BK1 + 40 ;WK + 4 ; WK1 + -1 + + -1 + -20000 + 20000 + 17 + 0 +HTPS12: 20 ;WKP + 14 ; WK2 + 31 ;BQP + 33 ; BQ5 + 50 ;BK + 74 ; BK1 + 40 ;WK + 4 ; WK1 + -1 + + -1 + -20000 + 20000 + 17 + 0 +HTPS13: 21 ;WQP + 43 ; WQ5 + 30 ;BKP + 64 ; BK2 + 50 ;BK + 74 ; BK1 + 40 ;WK + 4 ; WK1 + -1 + + -1 + -20000 + 20000 + 17 + 0 +HTPS10: 40 ;WK + 64 ; WK7 + 22 ;WKBP + 65 ; WKB7 + 50 ;BK + 4 ; BK8 + 52 ;BKR + 67 ; BKR2 + -1 + + -1 + -20000 + 20000 + 17 + 0 +HTPS11: 40 ;WK + 24 ; WK3 + 20 ;WKP + 34 ; WK4 + 50 ;BK + 64 ; BK2 + 31 ;BQP + 43 ; BQ4 + -1 + + -1 + -20000 + 20000 + 7 ;WQR NOT MOVED + 0 +HTPOS4: 43 ;WQR + 0 ;WQR1 + 50 ;BK + 74 ; BK1 + 40 ;WK + 4 ; WK1 + -1 + + -1 + -20000 + 20000 + 16 ;BKR NOT MOVED + 0 +HTPOS5: 52 ;BKR + 77 ; BKR1 + 50 ;BK + 74 ; BK1 + 40 ;WK + 4 ; WK1 + -1 + + -1 + -20000 + 20000 + 15 ;BQR NOT MOVED + 0 +HTPOS6: 53 ;BQR + 70 ;BQR1 + 50 ;BK + 74 ; BK1 + 40 ;WK + 4 ; WK1 + -1 + + -1 + -20000 + 20000 + 17 + 0 +HTPOS7: 26 ;WKRP + 67 ; WKR7 + 50 ;BK + 75 ; BKB1 + 40 ;WK + 4 ; WK1 + -1 + + -1 + -20000 + 20000 + 13 ;WKR NOT MOVED + 0 +HTPOS3: 42 ;WKR + 7 ; WKR1 + 50 ;BK + 74 ; BK1 + 40 ;WK + 4 ; WK1 + -1 + + -1 + -20000 + 20000 + 17 + 0 +HTPOS0: 50 ;BK + 74 ; BK1 + 40 ;WK + 4 ; WK1 + -1 + + -1 + -20000 + 20000 + 0 ;NO PCS MOVED + 0 +HTPOS1: 40 ;WK + 4 + 41 ;WQ + 3 + 42 ;WKR + 7 + 43 ;WQR + 0 + 44 ;WKB + 5 + 45 ;WQB + 2 + 46 ;WKN + 6 + 47 ;WQN + 1 + 20 ;WKP + 14 + 21 ;WQP + 13 + 22 ;WKBP + 15 + 23 ;WQBP + 12 + 24 ;WKNP + 16 + 25 ;WQNP + 11 + 26 ;WKRP + 17 + 27 ;WQRP + 10 + 50 ;BK + 74 + 51 ;BQ + 73 + 52 ;BKR + 77 + 53 ;BQR + 70 + 54 ;BKB + 75 + 55 ;BQB + 72 + 56 ;BKN + 76 + 57 ;BQN + 71 + 30 ;BKP + 64 + 31 ;BQP + 63 + 32 ;BKBP + 65 + 33 ;BQBP + 62 + 34 ;BKNP + 66 + 35 ;BQNP + 61 + 36 ;BKRP + 67 + 37 ;BQRP + 60 + -1 + + -1 + -20000 + 20000 + 17 + 0 +HTPOS2: 40 ;WK + 24 ; WK3 + 50 ;BK + 44 ; WK5 + -1 + + +HSAVP: MOVEI A,HS1TEM ;SAVE CURRENT POSITION + MOVEI B,0 + MOVEI C,HSVPTB +HSAVP1: PUSH P,B + ERSQL + POP P,B + SKIPE D,(A) + CAILE D,77 + JRST HSAVP2 + MOVEM D,(C) ;STORE PIECE + MOVEM B,1(C) ;STORE SQUARE + ADDI C,2 +HSAVP2: CAIGE B,77 + AOJA B,HSAVP1 + SETOM (C) ;TERMINATE LIST +; LDB C,[160100,,HSVFLA+1] ;STM +; MOVEM C,HSPSTM + MOVEI A,HSPSTM ;SAVE BITS AND MODES + MOVEI B,20 + ERPDLB + MOVEI A,HSPFLW + MOVEI B,HASFC + ERAS ;SAVE FLAGWORD + POPJ P, + +HRESP: MOVEI A,HSVPTB ;RESTORE SAVED POSITION +HLDPOS: MOVEM A,HTPPCL ;ENTER HERE TO LOAD POSITION FROM OCM, ETC + SETOM HTPLST + PUSHJ P,HTP1 + PUSHJ P,HCCMS ;GIVE RUN COMMAND + POPJ P, + +HS1TEM: 0 + +HSPD: -1 ;CHEOPS DEPTH (-1 -> NO CHANGE) +HSPIA: -20000 ;INITIAL ALPHA +HSPIB: 20000 ;INITIAL BETA +HSPFLW: 0 ;FLAGCELL WORD +HSPSTM: 0 ;BITS AND MODES WD (100000 BIT -> STM) +HSVPTB: -1 ;TAKE SIDE TO MOVE FROM WD BEFORE PIECE LIST BLOCK + BLOCK 64.*2 + +HINSQ: MOVEI A,100 ;CLEAR SQUARE LIST MEM + MOVEM A,HINSQT +HINSQ1: SOSGE B,HINSQT + POPJ P, + MOVEI A,[0] + EWSQL + JRST HINSQ1 + +HINPCM: MOVEI A,100 ;CLEAR PXM, INITIALIZE TYP AND VAL + MOVEM A,HINSQT +HINPC1: SOSGE B,HINSQT + JRST [ SETOM HTPLDF ;INDICATE TYP AND VAL LOADED + POPJ P,] + MOVEI A,[0] + EWPXM + SKIPGE HTPLDF + JRST HINPC1 ;TYP AND VAL ALREADY LOADED + MOVE B,HINSQT + MOVEI A,HPNMV(B) + EWPVAL + MOVE B,HINSQT + MOVEI A,HPNMT(B) + EWPTYP + JRST HINPC1 + +HINSQT: 0 + +HELNG1: MOVEI D,HELTBL ;ENTRY WHEN ARG ALREADY IN HCNUM + MOVEI C,H1ELNG + JRST HELN2 + +HZEL: MOVEI D,HELTBL ;ZERO E-LONG BITS, REMEMBER WHERE THEY WERE + MOVEI C,H1ELNG +HZST1: MOVEI ZR,1 + MOVEM ZR,HELSET ;DESIRED STATE OF HELFLG +HREL1: MOVEI ZR,105 + MOVEM ZR,HCNUM ;FAKE OUT THAT LOSER + JRST HELN3 + +HREL: MOVEI D,HELTBL ;REMEMBER STATE OF E-LONG BITS IN TABLE, + MOVE C,H1ELNG ; DONT AFFECT THEM +HRST1: CLEARM HELSET + JRST HREL1 + +HELNG: MOVEI D,HELTBL ;TABLE OF U INST LOCNS THAT HAVE THE "REAL" E LONG + MOVEI C,H1ELNG ;E LONG BIT IN WD1 OF UINST +HELN1: PUSH P,D ;D HAS POINTER TO "REAL BIT TABLE" + PUSH P,C ;C HAS WD1 BIT IN QUESTION + PUSHJ P,HGCNUM + POP P,C + POP P,D +HELN2: SETOM HELSET ;REMEMBER IN SETTING MODE +HELN3: MOVEI A,HELNTM ;TEMP BLOCK + MOVE T,D ;TABLE POINTER + MOVEI B,0 ;CONTROL MEM ADR + MOVE ZR,HCNUM + JUMPE ZR,HELNC ;XFER ON CLEAR BITS (IE RESTORE TO ORIG STATE) + SKIPE -1(D) + JRST HELA1 ;BITS ALREADY REMEMBERED +HELNS1: ERCMEM ;READ CONTROL MEM LOCN + TDNE C,HELNTM+1 + JRST HELNS2 ;THAT BIT SET, REMEMBER THE FACT + IORM C,HELNTM+1 ;SET IT NOW + SKIPL HELSET + JRST HELNS3 ;REALLY WANT TO LEAVE IT CLEAR (OR NOT AFFECT IT) +HELNS5: EWCMEM ;WRITE IT BACK + PUSH P,A ;SEE IF IT WON + MOVEI A,HELCKB + ERCMEM ;READ IT BACK +REPEAT 4,[ + MOVE ZR,HELCKB+.RPCNT + CAME ZR,HELNTM+.RPCNT + .VALUE +] POP P,A +HELNS3: CAIGE B,CHECML-1 + AOJA B,HELNS1 + SETOM (T) ;SIGNAL END OF TBL +HELAX: SKIPN B,HELSET + MOVEI B,2 ;REALLY JUST VALIDATING TABLE + MOVEM B,-1(D) ;SIGNAL TABLE LOADED + POPJ P, + +HELNS2: CAML T,-2(D) ;IF TABLE NOT FULL + JRST HELNS4 + MOVEM B,(T) ;REMEMBER THAT ADDRESS + AOJA T,HELNS4 + +HELNS4: SKIPG HELSET + JRST HELNS3 ;LEAVE THAT ONE SET (OR NO CHANGE) + ANDCAM C,HELNTM+1 ;REALLY WANT TO CLEAR IT + JRST HELNS5 + +HELA1: MOVE ZR,HELSET + JUMPE ZR,CPOPJ ;JUST VALIDATING, AND IT ALREADY IS +HELA2: ERCMEM ;HAVE ALREADY REMEMBERED WHERE THEY WERE SET + IORM C,HELNTM+1 ;JUST GRONK THEM THE DESIRED WAY + SKIPL HELSET + ANDCAM C,HELNTM+1 + EWCMEM + CAIGE B,CHECML-1 + AOJA B,HELA2 + JRST HELAX + +HELNC: SKIPN -1(D) + POPJ P, ;NO INFO IN TABLE, SO THEY MUST BE WINNING +HELNC2: ERCMEM + CAMN B,(T) + AOJA T,[IORM C,HELNTM+1 ;THAT ONE WANTS TO BE SET + JRST HELNC3] + ANDCAM C,HELNTM+1 ;WANTS TO BE CLEAR +HELNC3: EWCMEM +HELNC1: CAIGE B,CHECML-1 + AOJA B,HELNC2 + CLEARM -1(D) ;SIGNAL TABLE INVALID + POPJ P, + +HELSET: 0 ; 1 -> CLEAR BIT, REMEMBER WHERE THEY WERE SET + ;-1 -> SET BIT, REMEMBER WHERE THEY WERE SET + ;0 MAKE TABLE VALID, DONT AFFECT BITS IN C-MEM + ;EVENTUALLY GETS PUT INTO HELFLG, ETC +HELNTM: 0 + 0 + 0 + 0 + +HELCKB: 0 + 0 + 0 + 0 + +LHELTB==200 ;LENGTH OF TBL TO REMEMBER WHERE E-LONG BITS WERE + HELTBL+LHELTB-1 +HELFLG: 0 ;-1 E-LONG BITS ARE SET AND HELTBL REMEMBERS WHERE THEY WERE + ;1 E-LONG BITS CLEAR, AND HELTBL REMEMBERS WHERE THEY WERE + ;2 E-LONG BITS UNAFFECTED, AND HELTBL REMEMBERS " " " +HELTBL: BLOCK LHELTB + +HSTAT: MOVEI C,H1STAT ;SET OR CLEAR STATISTICS BITS. + MOVEI D,HSTTBL + JRST HELN1 + +HSTAT1: MOVEI C,H1STAT ;INTERNAL ENTRY WITH COMMAND ALREADY IN HCNUM + MOVEI D,HSTTBL + JRST HELN2 + +HZST: MOVEI C,H1STAT ;ZERO STAT BITS + MOVEI D,HSTTBL + JRST HZST1 + +HRST: MOVEI C,H1STAT ;REMEMBER STAT BITS + MOVEI D,HSTTBL + JRST HRST1 + +LHSTTB==200 ;LENGTH OF TBL TO REMEMBER WHERE STAT BITS WERE + HSTTBL+LHSTTB-1 +HSTFLG: 0 ;-1 STAT BITS ARE SET AND HSTTBL REMEMBERS WHERE THEY WERE + ;1 STAT BITS CLEAR, AND HSTTBL REMEBERS WHERE THEY WERE +HSTTBL: BLOCK LHSTTB ; IF HSTFLG =1, HBPTIN SAYS WHETHER BPTS ARE IN + + + +HSEL: SETOM HELSET ;SET E-LONG +HCEL1: MOVEI C,H1ELNG + JRST HSSB1 + +HCEL: MOVEI C,1 ;CLEAR E-LONG + MOVEM C,HELSET + JRST HCEL1 + +HCSB: MOVEI C,1 ;CLEAR STAT + MOVEM C,HELSET + JRST HCSB1 + +HSSB: SETOM HELSET ;SET STAT +HCSB1: MOVEI C,H1STAT +HSSB1: MOVEM C,HSSBTM + PUSHJ P,HTISC ;TYI CHEOPS SYM + PUSHJ P,HUSEV ;LOOK IT UP + JRST HCMERR ;LOSES + PUSHJ P,HUSMAP ;MAP OVER ALL VALUES OF ALL MATCHING GENERATIONS + JRST HSSB2 ;COME HERE FOR EACH WITH VALUE IN B + POPJ P, + +HSSB2: CAIGE B,CHECML + JRST HSSB3 + CAILE B,HRCME + POPJ P, + SUBI B,HRCMO +HSSB3: MOVEI A,HELNTM + ERCMEM + MOVE C,HSSBTM + IORM C,HELNTM+1 + SKIPL HELSET + ANDCAM C,HELNTM+1 + EWCMEM + POPJ P, + +HSSBTM: 0 + +HSYME: PUSHJ P,HTISC ;TYI CHEOPS SYM + PUSHJ P,HUSEV ;LOOK IT UP + JRST HCMERR + PUSHJ P,HUSMAP + SKIPA ;COME BACK HERE FOR EACH WITH VALUE IN B + POPJ P, + MOVEI C,4 ;DIGITS + EOCTP + HSOUT [ASCIZ / /] + POPJ P, + + +;BREAKPOINT STUFF +HB: SKIPA C,[ [ CPOPJ ;INSERT IN BPT TBL ALL READY THERE + HBIN1]] +HUB: MOVEI C,[ HBREM1 ;REMOVE FROM BPT TBL FOUND IT, FLUSH + CPOPJ] + MOVEM C,HBTEM + PUSHJ P,HBOUT + PUSHJ P,HTISC ;INSERT BREAKPOINT (TYI CHEOPS SYMBOL) + PUSHJ P,HUSEV ;LOOK IT UP + JRST HCMERR ;LOSES + PUSHJ P,HUSMAP ;MAP OVER ALL VALUES OF ALL MATCHING GENERATIONS + JRST HBI1 ;COME HERE FOR EACH WITH VALUE IN B + POPJ P, + +HBI1: MOVE C,HBTEM + CAIGE B,CHECML + JRST HB1A ;INTERPRET DIRECTLY AS C-MEM ADR + CAILE B,HRCME + POPJ P, + SUBI B,HRCMO +HB1A: HRLZ T,HBBPTP ;- # ENTRIES IN TBL + JUMPGE T,@1(C) ;END OF TBL REACHED +HB1B: CAMN B,HBBPT(T) + JRST @(C) ;FOUND DESIRED ENTRY + AOBJN T,HB1B + JRST @1(C) ;END OF TBL + +HBIN1: MOVN T,HBBPTP + CAIL T,BPTLEN-1 + .VALUE ;BPT TBL FULL + AOS T + MOVEM B,HBBPT-1(T) + MOVNM T,HBBPTP + POPJ P, + +HBREM1: SETOM HBBPT(T) + POPJ P, + +HUAB: PUSHJ P,HBOUT + CLEARM HBBPTP + POPJ P, + +HBBPTP: 0 ;- # ENTRIES IN BPT TBL +HBTEM: 0 +HBPTIN: 0 ;IF 1 AND HSTFLG=1, BPTS ARE IN. + +BPTLEN==40 +HBBPT: BLOCK BPTLEN ;LOCNS TO PUT BPTS (-1 -> NULL ENTRY) + + +HGCNUM: PUSHJ P,HGCOM ;GET NUMBER + SKIPE HCSYL + SKIPL HCNUMF + JRST HCMERR + POPJ P, + +HGCOM: MOVEI A,HSVIR ;PUT REAL IR IN MACHINE SO AS MUCH AS POSSIBLE + EWFIR ;OF TRUE STATE WILL SIT THERE. (ESP IN ARRAY MODULE) + MOVE B,[440700,,HCBUF] ;READ IN SYLABLE + MOVEM B,HCBUFP + CLEARM HCBUF + MOVEI B,HCBUFL*5-2 + MOVEM B,HCBUFC + PUSHJ P,HGCZNM ;CLEAR HCNUM BLOCK + CLEARM HCDNUM + SETOM HCNUMF + CLEARM HCMFRC ;COMMAND FORCE + CLEARM HCSYL +HGCOM1: PUSHJ P,HTYI + MOVEM A,HLASTC ;LAST CHAR SEEN + CAIN A,3 + JRST HGCOM1 + CAIGE A,173 + JRST HGCM1B + SUBI A,32 ;COLAPSE HOLE LEFT BY LOWER CASE LETTERS + JRST HGCMT ;LEAVING OPEN BRACE JUST ABOVE + +HGCM1B: CAILE A,140 + SUBI A,40 ;UPPER CASE IFY + SKIPE HCMFRC + JRST HGCMT ;FORCE TO BE COMMAND CHR + CAIL A,"0 + CAILE A,"9 + JRST HGCOM2 +HGCOMN: MOVE T,HCNUM ;READ IN 4 (16 BIT EA) PRECISION NUMBER + LSH T,3 + ADDI T,-"0(A) + MOVSI J,-4 +HGCMN1: DPB T,[2000,,HCNUM(J)] ;STORE BACK LOW 16 BITS + LSH T,-20 ;FLUSH THOSE + MOVE ZR,HCNUM+1(J) ;NEXT HIGH PRECISION PART + LSH ZR,3 + ADD T,ZR + AOBJN J,HGCMN1 ;PROPAGATE ON UP + MOVE T,HCDNUM + IMULI T,10. + ADDI T,-"0(A) + MOVEM T,HCDNUM +HGCHRS: SETOM HCSYL ;SIGNAL SYLABLE NOT NULL + SOSL HCBUFC ;SKIP ON STRING BUFFER FULL + IDPB A,HCBUFP + JRST HGCOM1 + +HGCOM2: CAIL A,"A + CAILE A,"Z + JRST HGCOM3 +HGCALP: PUSHJ P,HGCNNM ;SIGNAL NO NUMBER + JRST HGCHRS + +HGCOM3: CAIN A,". + JRST HGCPD + CAIN A,"@ + JRST HGCAT +HGCMT: MOVEI B,0 + IDPB B,HCBUFP ;STORE 0 ON ASCIZ STRING + MOVE B,HCBUF + CAMN B,[ASCIZ /./] + JRST HGCMPT ;GEE. THATS OUR SYMBOL! + SKIPE HCSYL + JRST HGCMT1 +HGCNNM: CLEARM HCNUMF ;NULLNESS IS REALLY NO NUMBER +HGCZNM: CLEARM HCNUM ;ASSURE HCNUM IS REALLY 0 IF NO NUMBER +HGCZN1: CLEARM HCNUM+1 + CLEARM HCNUM+2 + CLEARM HCNUM+3 +HGCMT1: POPJ P, + + +HGCAT: SETOM HCMFRC ;FORCE NEXT CHAR TO BE COMMAND + JRST HGCOM1 + +HGCMPT: MOVE B,HCHPT ;SYMBOL = . + MOVEM B,HCNUM ;STORE "VALUE" + SETOM HCNUMF ;MAKE NUMBER AGAIN + JRST HGCMT1 + +HGCPD: MOVE B,HCDNUM ;PERIOD SEEN + MOVEM B,HCNUM + PUSHJ P,HGCZN1 + SKIPN HCSYL + JRST HGCALP ;INITIAL . IS ALPHABETIC + JRST HGCHRS + +HCSDPY: AOS HCSDPF ;INDICATE IN CONSOLE DISPLAYER + PUSH P,HRAIDM ;MAKE "CONSOLE" DISPLAY + CLEARM HRAIDM + PUSH P,HCPOS + PUSH P,HCLINE + SKIPE HLLMOD + JRST HDSPL1 ;DONT DISPLAY RAID STUFF IN LL MODE + PUSHJ P,HHU ;START AT TOP OF SCREEN + PUSHJ P,HCLEOL + MOVEI B,0 +HDSRL: SKIPN HRAIDA(B) + JRST HDSRL1 ;THAT ONE NULL + PUSH P,B + SKIPE HCPOS + PUSHJ P,HCRR ;AT END OF PREV LINE + MOVEI C,1 + EOCTP ;PRINT RAID REG # + HSOUT [ASCIZ / /] + MOVE B,(P) + MOVE A,HRAIDA(B) + PUSHJ P,HRGPNT + PUSHJ P,HCLEOL ;TRY TO AVOID CLEARING LINE AFTER RAIDR AREA + POP P,B +HDSRL1: CAIGE B,10-1 + AOJA B,HDSRL +HDSPL1: MOVEI A,0 + MOVE B,HDLNN + PUSHJ P,HCSRPS ;POSITION CURSOR TO START CONSOLE SECTION + MOVE B,HCHWD + SUBI B,10 + MOVEI A,"* + PUSHJ P,HTYO + SOJG B,.-1 + HSOUT [ASCIZ / +NAF=/] + MOVE B,HSVNAF + MOVEI C,4 + EOCTP + HSOUT [ASCIZ / PC= /] + MOVE B,HSVPC + MOVEI C,4 + EOCTP + HSOUT [ASCIZ / O-BUS=/] + MOVE B,HSOBUS ;PRINT OUTPUT BUS + MOVEI C,6 + EOCTP + LDB B,[160100,,HSVFLA+1] ;GET STM + HSOUT @HSTMTX(B) + MOVE A,HSVPC + ANDI A,3777 + ADDI A,HRORG + PUSHJ P,HPUSM ;TRY PRINTING PC SYMBOLICALLY + PUSHJ P,HCRR + MOVEI A,HSVIR + EPIF + PUSHJ P,HCRR + MOVEI A,HSERR1 + EPERRS + PUSHJ P,HCRR + HSOUT [ASCIZ /STEPC=/] + MOVE B,HSTEPS + PUSHJ P,HOCTP + SKIPG HHUNTM + JRST HCSDP3 + HSOUT [ASCIZ / TOP HUNT RANGE=/];IF IN E-LONG HUNT MODE, STEPC IS + MOVE B,HHUNTV ;NOT HHUNTV + PUSHJ P,HOCTP +HCSDP3: SKIPN HHUNTM ;IF IN HUNT MODE, DISPLAY HUNT STEP SIZE + JRST HCSDP2 + HSOUT [ASCIZ / HUNT DELTA=/] + MOVE B,HHUNTS + PUSHJ P,HOCTP +HCSDP2: LDB B,[130400,,HSVIR] ;COND FIELD OF CURRENT INST + JUMPE B,HCSDP1 + HSOUT [ASCIZ / SELECTED FW Q= /] + SETOM HEXPF + PUSHJ P,HEXFQC +HCSDP1: PUSHJ P,HCLEOL + POP P,B + POP P,A + PUSHJ P,HCSRPS + POP P,HRAIDM + SOS HCSDPF + POPJ P, + +HSTMTX: [ASCIZ / STM = 0 (WHITE) /] + [ASCIZ / STM = 1 (BLACK) /] + + +;STATE SAVING IN CHEOPS: +; A PASSIVE STATE SAVE GENERALLY SAVES EVERYTHING THAT CAN BE SAVED +;WITHOUT ACTIVELY AFFECTING CHEOPS. THE FOLLOWING QUANTITES, +;READABLE FROM THE UNIBUS, EITHER DIRECTLY OR VIA THE MUX FALL IN THIS CATEGORY: +; IR (ALL 6 WDS), FLAG WORDS (ALL 4), ERROR WORDS (UNIBUS STATUS, AND +; PARITY ERRORS AND SPEC-FCTN WORDS ACCESSIBLE VIA MUX). + +;THE "PC". DEPENDING ON ONE'S POINT OF VIEW, CHEOPS EITHER DOESNT HAVE +; A PC OR HAS SEVERAL. THE "PC" REGISTER HAS WHERE THE CURRENT MICRO-INSTRUCTION +; CAME FROM (ASSUMING IT CAME FROM CONTROL-MEMORY), AND REALLY IS MORE OF AN +; "OPC" REGISTER. BECAUSE OF THIS, THE NEXT-ADDRESS FIELD OF THE CURRENT +; MICROINSTRUCTION IS CLOSER TO BEING A "PC" IN THAT IT HAS MORE TO DO WITH +; WHERE THE NEXT INSTRUCTION WILL COME FROM (ALTHO, OF COURSE, EVEN IT +; CAN BE MODIFIED BY THE FLAG LOGIC AND/OR THE U-STACK LOGIC). FOR THIS REASON, +; WHEN A STATE SAVE IS DONE, THE NEXT ADDRESS FIELD OF THE MICROINSTRUCTION +; IN THE IR IS SPECIALLY EXTRACTED AND STORED IN THE SAVED "NAF" (HSVNAF). +; WHEN A STATE RESTORE IS DONE, THE QUANTITY THERE IS DEPOSITED IN THE NEXT +; ADDRESS FIELD OF THE SAVED IR BEFORE THE IR IS RESTORED. + +HENTER: PUSHJ P,HPSSAV ;ENTERING, SAVE STATE AS APPRO TO HLLMOD + SKIPN HLLMOD + PUSHJ P,HFSSAV ;HIGH LVL MODE, DO FULL + POPJ P, + +HLEAVE: PUSHJ P,HFSRES ;LEAVING, RESTORE WHAT SAVED + PUSHJ P,HPSRES + POPJ P, + +HPSSAV: SKIPE HPSVAL ;DO PASSIVE STATE SAVE + JRST HPSSAX ;STATE ALREADY SAVED + HSTORE H0MOB,HSOBUS ;READ OBUS STATUS + HSTORE H0MPC,HSVPC ;SAVE PC + MOVEI A,3777 + ANDM A,HSVPC ;FLUSH EXTRA BITS THAT WILL SCREW US + MOVEI A,HSERR1 ;READ ERROR STATUS + ERERWS + MOVEI A,HSVIR ;SAVE IR + ERFIR ;FULL IR (ALL 6 WDS) + LDB A,[%H0JF HSVIR] ;CONSIDER JUMP FIELD OF IR TO BE "NAF" + MOVEM A,HSVNAF + MOVEI A,HSVFLA ;SAVE FLAGS + ERFLG + MOVE A,HSERR1 + TRNE A,HU2RUN ;UNIBUS STATUS RUN BIT + JRST HPSSAX ;MACHINE REALLY RUNNING, SO THAT PRETTY RANDOM + AOS HPSVAL ;INDICATE VALID STATE SAVED +HPSSAX: POPJ P, + +HFSSAV: SKIPE HFSVAL ;DO FULL STATE SAVE + JRST HFSSAX ;FULL STATE ALREADY SAVED + ESTOP ;STOP MACHINE, CLEAR HRUN, LEAVE HTRUN ALONE + CLEARM HPARSF ;INDICATE PAR NOT SAVED + CLEARM HUSPSF ;INDICATE USP NOT SAVED + PUSHJ P,HPSSAV ;DO PASSIVE SAVE + MOVEI A,HSVPD0 + MOVEI B,0 + ERPDLB ;SAVE PDL LOCN 0 + AOS HFSVAL ;INDICATE FULL SAVE VALID +HFSSAX: POPJ P, + + +HPSRES: CLEARM HPSVAL ;DO "RESTORE" AFTER PASSIVE SAVE + POPJ P, + +HFSRES: SKIPN HFSVAL ;RESTORE AFTER FULL SAVE + JRST HFSREX ; IMPORTANT NOTE!! IF ANY "DISTRUCTIVE" CODE + MOVEI A,HSVPD0 ; ADDED HERE, HRESNV MUST BE CHANGED TO SAVE + MOVEI B,0 ; AND RESTORE IT!! + EWPDLB ;RESTORE PDL LOCN 0 + SKIPL HPARSF + JRST HFSRE1 ;PAR NOT SAVED + MOVEI A,HPARSV ;RESTORE PAR + MOVEI B,HODAAC ;ODEST ADR OF PAR + EWOD ;RESTORE PAR + CLEARM HPARSF ;NOT SAVED ANY MORE +HFSRE1: SKIPL HUSPSF + JRST HFSRE2 ;USP NOT SAVED + MOVEI A,HUSPSV ;RESTORE USP + MOVEI B,HODUSP + EWOD + CLEARM HUSPSF +HFSRE2: LDB B,[160100,,HSVFLA+1];JUST LOADING FLAGWORD IS UNFORTURNATELY + MOVE A,HFSRTB(B) ;NOT SUFFICIENT TO SET SIDE TO MOVE + EWIR ;IT MUST ALSO BE SET VIA FLAG-CONTROL FCTN + ECLK + MOVEI A,HSVPC ;RESTORE PC. CAUTION! THIS GENERATES A CLOCK + EWIR ;AND WILL BE CLOBBERED IF ANYONE ELSE GENERATES + ECLK ;ONE + MOVEI A,HSVFLA + EWFLG + MOVE A,HSVNAF + DPB A,[%H0JF HSVIR] ;PUT THAT BACK IN JUMP FIELD OF IR + MOVEI A,HSVIR + EWFIR ;FULL IR (ALL 6 WDS) + LDB A,[100200,,HSVFLA+3];LOAD PDP11 FLAGS IN UNIFACE + LSH A,14. + MOVEI B,140000 + ESUCW + CLEARM HFSVAL +HFSREX: POPJ P, + +HFSRTB: HFSSMW + HFSSMB + +HFSSMW: 0 + 6 + 0 + 0 + +HFSSMB: 0 + 5 + 0 + 0 + +XPIF: MOVE C,1(A) ;PRINT "FULL" U INST + TRNE C,H1AMOP + JRST XPI ;ARRAY-OP, SO JUST PRINT IT + PUSHJ P,XPI ;PRINT THE ALU PART + HSOUT [ASCIZ / +--IRA CARRIED-- /] + MOVE A,XPIAS + MOVE C,4(A) ;GOBBLE DOWN IRA C AND D + MOVEM C,XPIFT1+2 ;PUT THEM IN WDS 2 AND 3 OF ARRAY INST + MOVE C,5(A) + MOVEM C,XPIFT1+3 + MOVEI A,XPIFT1 + MOVE TT,[-LHAST,,HIFAST];PNTR TO ARRAY INST WD 2 AND 3 PART OF FIELD TBL + JRST XPIF1 ;PRINT THE REST + +XPIFT1: 0 ;DUMMY UP ARRAY INST TO PRINT HERE + H1AMOP + 0 + 0 + +XPI: MOVE TT,[-LHFST,,HIFST] ;PRINT INSTRUCTION POINTED TO BY A +XPIF1: MOVEM A,XPIAS + MOVEI C,177777 ;SET UP PRINTED MASK + MOVEM C,XPIM0 + MOVEM C,XPIM1 + MOVEM C,XPIM2 + MOVEI C,017777 ;TOP 3 BITS WD 3 ARE SPARE + MOVEM C,XPIM3 +XPIL1: MOVE Q,(TT) + TLNN Q,(HSYOV) + JRST XPIL7 ;FIELD NOT VALID ON OUTPUT + MOVE A,XPIAS + LDB C,[%H1AMOP 1(A)] ;CHECK A CONTEXT - GET AMOP BIT + LDB D,[.BP HSYACN Q] ;A CONTEXT OF SYMBOL + XCT HTACXT(D) + JRST XPIL7 + LDB C,[%H2LIT 2(A)] ;A CONTEXT OK, CHECK B CONTEXT. GET INST TYPE BITS + LDB D,[.BP HSYBCN Q] + XCT HTBCXT(D) + JRST XPIL7 ;B CONTEXT LOSES. + HRRZ B,(TT) ;GET BYTE SPEC + MOVEI A,XPIM0 + ELDB ;LOAD FIELD FROM MASK + LDB D,[111100,,B] ;FIELD SIZE + CAME A,HONET(D) + JRST XPIL7 ;NOT ALL ONES + MOVE A,XPIAS + TLNE Q,(HSYAT) + JRST XPIL5 ;GEN SYMBOLIC PRINTOUT + TLNE Q,(HOZNUL) + JRST [ ELDB ;MAKE NULL PRINTOUT IF FIELD ZERO + JUMPE A,XPIL6 + MOVE A,XPIAS + JRST .+1] + HSOUT @1(TT) + HSOUT [ASCIZ / /] + CAIN B,11.*1000 + JRST [ PUSH P,A + MOVE A,(A) + ANDI A,3777 + ADDI A,HRORG ;JMP FIELD, TRY TO PRINT SYMBOLICALLY TOO + PUSHJ P,HPUSM + POP P,A + JRST .+1] + IPNFLD +XPIL6: MOVEI A,XPIM0 + MOVEI B,0 + HRRZ C,(TT) + EDPB ;INDICATE HAVE PRINTED THOSE BITS +XPIL7: TLNE Q,(HSYAT) + ADD TT,[1,,1] ;SKIP OVER AUX SYMTAB POINTER + ADD TT,[1,,1] + AOBJN TT,XPIL1 +; SKIPN XPIM0 ;SHOULD HAVE PRINTED ALL THE BITS +; SKIPE XPIM1 +; .VALUE +; SKIPN XPIM2 +; SKIPE XPIM3 +; .VALUE + POPJ P, + + +XPIL5: ELDB ;LOAD FIELD FROM U INST + ADD A,2(TT) + SKIPN (A) + JRST XPIL6 ;NULL PRINTOUT, (DONT PRINT SPACE EITHER) + HSOUT @(A) + HSOUT [ASCIZ / /] + JRST XPIL6 + +XPIM0: 0 ;MUST BE CONSEC +XPIM1: 0 +XPIM2: 0 +XPIM3: 0 + +XPIAS: 0 ;TEMP FOR SAVING POINTER TO INST AT XPI + + +XPERRS: MOVE B,(A) ;PRINT ERROR WD BLOCK (A) + MOVEI C,XPERT1 + PUSHJ P,XPER1 + MOVE B,1(A) + MOVEI C,XPERT2 + PUSHJ P,XPER1 + MOVE B,2(A) + MOVEI C,XPERT3 + PUSHJ P,XPER1 + POPJ P, + +XPER1: TRNN B,177777 + POPJ P, + TRNN B,100000 + JRST XPER2 + SKIPE (C) + HSOUT @(C) +XPER2: LSH B,1 + AOJA C,XPER1 + +XPERT1: [ASCIZ /RUN /] + [ASCIZ /HIERR /] + [ASCIZ /PARERR /] + [ASCIZ /NXMR /] + [ASCIZ /SPCOVF /] +REPEAT 11.,0 + +XPERT2: [ASCIZ /POUT-P /] + [ASCIZ /TYP-P /] + [ASCIZ /VAL-P /] + [ASCIZ /LOC-P /] + [ASCIZ /SPC-P /] + [ASCIZ /OLD-IR-P /] + [ASCIZ /R-PDL-P /] + [ASCIZ /L-PDL-P /] + [ASCIZ /SPCOVF /] + [ASCIZ /NXMR /] + [ASCIZ /R-BBUS /] + [ASCIZ /L-BBUS /] + [ASCIZ /R-AC /] + [ASCIZ /L-AC /] + [ASCIZ /R-AAC /] + [ASCIZ /L-AAC /] + +XPERT3: REPEAT 7.,0 + [ASCIZ /IR-P /] + [ASCIZ /STM /] + [ASCIZ /PROMV /] + [ASCIZ /EP-CPT /] + [ASCIZ /TO-G-FILE /] + [ASCIZ /FM-5-RANK /] + [ASCIZ /TRANK /] + [ASCIZ /PROMOTE /] + [ASCIZ /P-MV /] + + +HONET: 0 ;ALL ONES TABLE (INDEX OF NUMBER OF ONES) + 1 + 3 + 7 + 17 + 37 + 77 + 177 + 377 + 777 + 1777 + 3777 + 7777 + 17777 + 37777 + 77777 + 177777 + 377777 + 777777 + +XLDB: PUSH P,I ;POINTER TO BLOCK OF 16 BIT DATA WORDS IN A + PUSH P,J ;BYTE DESCRIPTOR IN B, LOAD FIELD INTO A + PUSH P,R + LDB I,[040500,,B] ;WORDS COMPONENT OF SHIFT + ADD A,I + MOVE R,(A) ;LOW WORD + LSH R,2 ;LEFT ADJUST IN RIGHT HALF OF WD + HRL R,1(A) ;GET HIGH WORD + LDB I,[000400,,B] ;BITS COMPONENT OF SHIFT + ADDI I,2 ;LOW TWO BITS DONT COUNT + MOVEI J,R + DPB I,[360600,,J] + LDB I,[111100,,B] ;BYTE SIZE + DPB I,[300600,,J] + LDB A,J + POP P,R + POP P,J + POP P,I + POPJ P, + + +XDPB: PUSH P,I ;POINTER TO BLOCK OF 16 BIT DATA WORDS IN A + PUSH P,J ;DATA IN B + PUSH P,R ;BYTE DESC IN C + PUSH P,A + LDB I,[040500,,C] ;WORDS COMPONENT OF SHIFT + ADD A,I + MOVE R,(A) ;"LOW" WORD + LSH R,2 ;LEFT ADJUST IN RH + HRL R,1(A) ;GET HIGH WORD + LDB I,[000400,,C] ;BITS COMPONENT OF SHIFT + ADDI I,2 ;LOW BITS DONT COUNT + MOVEI J,R + DPB I,[360600,,J] + LDB I,[111100,,C] + DPB I,[300600,,J] + DPB B,J + HLRM R,1(A) + LSH R,-2 + ANDI R,177777 + HRRM R,(A) + POP P,A + POP P,R + POP P,J + POP P,I + POPJ P, + +XPNFLD: PUSH P,A ;PRINT NUMERIC FIELD. POINTER TO DATA BLOCK IN A + PUSH P,B ; BYTE FIELD DESCRIPTION IN B + PUSH P,C + PUSH P,D + PUSH P,B + LDB C,[111100,,B] + CAILE C,16. + JRST [ SUBI B,20000 + ADDI B,20 + PUSHJ P,XPNFLD + HSOUT [ASCIZ / /] + MOVEI B,20 + DPB B,[111100,,(P)] + MOVE B,(P) + JRST .+1] + ELDB + POP P,B + LDB C,[111100,,B] + ADDI C,2 + IDIVI C,3 ;GET # OF DIGITS TO PRINT + MOVE B,A + EOCTP + HSOUT [ASCIZ / /] + POP P,D + POP P,C + POP P,B + POP P,A + POPJ P, + +XOCTP: PUSH P,A ;PRINT DATA IN B, NUMBER OF DIGITS IN C + PUSH P,C +XOCTP1: LDB A,XOCTPT(C) + ADDI A,"0 + PUSHJ P,HTYO + SOJG C,XOCTP1 + POP P,C + POP P,A + POPJ P, + +XOCTPT: 000000,,B ;BITS TO PRINT ON NTH FROM LAST DIGIT + 000300,,B + 030300,,B + 060300,,B + 110300,,B + 140300,,B + 170300,,B + 210300,,B + +HOCTP: LSHC B,-35. ;ZERO SUPPRESSING 36 BIT OCTAL PRINT OF B + LSH C,-1 + DIVI B,10 + HRLM C,(P) + SKIPE B + PUSHJ P,HOCTP + HLRZ A,(P) + ADDI A,"0 + JRST HTYO + + + +HTYI: SKIPL A,HTYIUR + JRST [ SETOM HTYIUR ;READ UNRCH CHAR + POPJ P,] + SKIPGE HTICMF + JRST HTICF1 ;IN COMMAND FILE MODE + PUSHJ P,TYI +HTICF2: CAIE A,12 + CAIN A,15 + POPJ P, ;DONT ECHO CR OR LF NOW + PUSH P,A + PUSHJ P,HTYO ;DO OWN ECHOING + POP P,A + POPJ P, + +HTICF1: .IOT UTICOM,A ;GOBBLE COMMAND FILE + ANDI A,177 + CAIN A,3 + JRST HTICF2 + .CLOSE UTICOM, + CLEARM HTICMF + MOVEI A,"_ + PUSHJ P,HTYO + JRST HTYI + +HCRR: MOVEI A,15 + PUSHJ P,HTYO + MOVEI A,12 +HTYO: CAIN A,12 ;TYO CHR AND KEEP TRACK OF THINGS + JRST HTYOC1 + CAIE A,15 + JRST HTYO2 + PUSHJ P,HCLEOL + PUSHJ P,HTCR + SKIPN HRAIDM + JRST HTYOC2 + MOVE A,HCLINE + AOS A + CAMGE A,HDLNN + JRST HTYOC2 ;WILL STILL BE ABOVE CONSOLE AREA +HRDHU: PUSH P,B + PUSH P,C + CLEARB A,B ;HOME UP TO BOTTOM OF ACTIVE RADI AREA + MOVEI C,HRAIDA +HRDHU1: SKIPE (C) ;COUNT RAID REGISTERS IN USE + AOS B + CAIGE C,HRAIDA+7 + AOJA C,HRDHU1 + PUSHJ P,HCSRPS + POP P,C + POP P,B + JRST HTYOC1 + +HTYOC2: PUSHJ P,HTLF +HTYOC1: PUSHJ P,HCLEOL +HTYOX: POPJ P, + +HTCR: .IOT TYOC,[15] + CLEARM HCPOS + POPJ P, + +HTLF: .IOT TYOC,[12] ;DO LOGICAL LINE FEED + AOS HCLINE + POPJ P, + +HCLEOL: .IOT TYOC,[^P] ;OUTPUT CLEAR END OF LINE + .IOT TYOC,["L] + POPJ P, + +HCLEOF: .IOT TYOC,[^P] ;CLEAR TO EOF + .IOT TYOC,["E] + POPJ P, + + +HCSRPS: ;SET CURSOR TO HORIZ POS IN A, VERT IN B + MOVEM A,HCPOS + MOVEM B,HCLINE + .IOT TYOC,[^P] + .IOT TYOC,["H] + ADDI A,10 + .IOT TYOC,A + .IOT TYOC,[^P] + .IOT TYOC,["V] + MOVEI A,10(B) + .IOT TYOC,A + POPJ P, + +HHU: .IOT TYOC,[^P] + .IOT TYOC,["T] + CLEARM HCPOS + CLEARM HCLINE + POPJ P, + +HTYO2: PUSH P,B + CAIGE A,40 ;ACTUALLY TYOIFY + JRST HTYO2A +HTYO2B: AOS B,HCPOS + CAMGE B,HCHWD + JRST HTYO2T ;OK WILL STILL BE ON LINE + PUSH P,A + PUSHJ P,HCRR + POP P,A + JRST HTYO2B + +HTYO2A: PUSH P,A + MOVEI A,"^ + PUSHJ P,HTYO + MOVE A,(P) + ADDI A,100 + PUSHJ P,HTYO + POP P,A + POP P,B + POPJ P, + +HTYO2T: .IOT TYOC,A + POP P,B + POPJ P, + + +XPRSQ: PUSH P,A ;PRINT SYMBOLICALLY (A) AS SQUARE + PUSH P,B + PUSH P,C + MOVE C,(A) + ANDI C,377 + TRNE C,200 + JRST [ HSOUT [ASCIZ / NS /] ;NULL SQUARE + JRST HPRSQ2] + CAIL C,100 + JRST HPRSQ2 + LDB B,[160100,,HSVFLA+1] ;GET STM + HSOUT HPRSQT(B) + LDB C,[300,,(A)] + HSOUT HFNM(C) + LDB A,[30300,,(A)] + AOS A + JUMPE B,HPRSQ1 + MOVNS A + ADDI A,9 +HPRSQ1: ADDI A,"0 + PUSHJ P,HTYO + MOVEI A,40 + PUSHJ P,HTYO +HPRSQ2: POP P,C + POP P,B + POP P,A + POPJ P, + +HPRSQT: ASCIZ /W/ + ASCIZ /B/ + +XPRPCL: PUSH P,B ;PRINT "LEFT HALF" (SIXTEEN BITS WISE) AS PIECE INDEX + LDB B,[101000,,(A)] + JRST XPRPC2 + +XPRPC: PUSH P,B ;PRINT PIECE INDEX + MOVE B,(A) + ANDI B,377 +XPRPC2: CAIL B,100 + JRST HPRPC1 + HSOUT HPNM(B) + HSOUT [ASCIZ / /] +HPRPC1: POP P,B + POPJ P, + + + + +HFLASM: [ASCIZ /0-15 /] ;QUARTER 3 + [ASCIZ /KCHK /] + [ASCIZ /0-13 /] + [ASCIZ /0-12 /] + [ASCIZ /0-11 /] ;QUARTER 2 + [ASCIZ /0-10 /] + [ASCIZ /A-M-P /] + [ASCIZ /0-8 /] + [ASCIZ /0-7 /] ;QUARTER 1 + [ASCIZ /0-6 /] + [ASCIZ /0-5 /] + [ASCIZ /A-M-S /] + [ASCIZ /0-3 /] ;QUARTER 0 + [ASCIZ /0-2 /] + [ASCIZ /0-1 /] + [ASCIZ /0-0 /] + +HFLBSM: [ASCIZ /STACK-END-CHECK /] ;QUARTER 7 + [ASCIZ /STM /] + [ASCIZ /B-13 /] + [ASCIZ /DBELL /] + [ASCIZ /0-11 /] ;QUARTER 6 + [ASCIZ /EXTB-2 /] + [ASCIZ /EXTB-1 /] + [ASCIZ /EXTB-0 /] + [ASCIZ /0-7 /] ;QUARTER 5 + [ASCIZ /0-6 /] + [ASCIZ /ALU-LESS /] + [ASCIZ /ALU-LEQ /] + [ASCIZ /LEGAL /] ;QUARTER 4 + [ASCIZ /DEEP /] + [ASCIZ /ALU-EQ /] + [ASCIZ /ALU-NO-CRY-OUT /] + +HFLCSM: [ASCIZ /SEL-P-EXISTS /] ;QUARTER 13 + [ASCIZ /0-14/] + [ASCIZ /Q-CAS-LGL /] + [ASCIZ /K-CAS-LGL /] + [ASCIZ /0-11 /] ;QUARTER 12 + [ASCIZ /OFF-BOARD /] + [ASCIZ /PROMOTE-P /] + [ASCIZ /E-P-CAPT /] + [ASCIZ /ANY-RANK /] ;QUARTER 11 + [ASCIZ /P-TYP-2 /] + [ASCIZ /P-TYP-1 /] + [ASCIZ /P-TYP-0 /] + [ASCIZ /TERM-RANK /] ;QUARTER 10 + [ASCIZ /PROMOTING-POSS /] + [ASCIZ /SEL-SQ /] + [ASCIZ /ANY-SQS /] + +HFLDSM: [ASCIZ /O-BUS-3 /] ;QUARTER 17 + [ASCIZ /O-BUS-2 /] + [ASCIZ /O-BUS-1 /] + [ASCIZ /O-BUS-0 /] + [ASCIZ /0-11 /] ;QUARTER 16 + [ASCIZ /UNIBUS-CYC /] + [ASCIZ /PDP-11F1 /] + [ASCIZ /PDP-11F0 /] + [ASCIZ /FC-7 /] ;QUARTER 15 + [ASCIZ /F-C-KCHK /] + [ASCIZ /F-C-DEEP /] + [ASCIZ /F-C-LEGAL /] + [ASCIZ /W-Q-CS-NOT-POSS /] ;QUARTER 14 + [ASCIZ /W-K-CS-NOT-POSS /] + [ASCIZ /B-Q-CS-NOT-POSS /] + [ASCIZ /B-K-CS-NOT-POSS /] + + + + +HBOARD: BLOCK 64. ;PIECE IMAGE OF BOARD FOR HACKING + +HFNM: ASCIZ /QR/ ;FILE NAMES + ASCIZ /QN/ + ASCIZ /QB/ + ASCIZ /Q/ + ASCIZ /K/ + ASCIZ /KB/ + ASCIZ /KN/ + ASCIZ /KR/ + +HPNM: REPEAT 8,[HCONC ASCIZ /WNL,\.RPCNT,/ +] ;0X + REPEAT 8,[HCONC ASCIZ /BNL,\.RPCNT,/ +] ;1X + ASCIZ /WKP / ;2X + ASCIZ /WQP / + ASCIZ /WKBP/ + ASCIZ /WQBP/ + ASCIZ /WKNP/ + ASCIZ /WQNP/ + ASCIZ /WKRP/ + ASCIZ /WQRP/ + + ASCIZ /BKP / ;3X + ASCIZ /BQP / + ASCIZ /BKBP/ + ASCIZ /BQBP/ + ASCIZ /BKNP/ + ASCIZ /BQNP/ + ASCIZ /BKRP/ + ASCIZ /BQRP/ + + ASCIZ / WK / ;4X + ASCIZ / WQ / + ASCIZ /WKR / + ASCIZ /WQR / + ASCIZ /WKB / + ASCIZ /WQB / + ASCIZ /WKN / + ASCIZ /WQN / + + ASCIZ / BK / ;5X + ASCIZ / BQ / + ASCIZ /BKR / + ASCIZ /BQR / + ASCIZ /BKB / + ASCIZ /BQB / + ASCIZ /BKN / + ASCIZ /BQN / + + ASCIZ /WKX / ;PROMOTED KP 6X + ASCIZ /WQX / + ASCIZ /WKBX/ + ASCIZ /WQBX/ + ASCIZ /WKNX/ + ASCIZ /WQNX/ + ASCIZ /WKRX/ + ASCIZ /WQRX/ + + ASCIZ /BKX / ;PROMOTED KP 7X + ASCIZ /BQX / + ASCIZ /BKBX/ + ASCIZ /BQBX/ + ASCIZ /BKNX/ + ASCIZ /BQNX/ + ASCIZ /BKRX/ + ASCIZ /BQRX/ + +HPNMV: ;ALL THESE VALUES MULTIPLIED BY 2 SO THAT POSITION + REPEAT 2*8,0*2 ;VALUE IS ALWAYS EVEN. THUS, ODD VALUES CAN BE USED + REPEAT 2*8,4*2 ;FOR ALPHA BETA HACKING, AND CAN BE DISTINGUISHED +REPEAT 2,[ + 254. ;K VALUE, HOPEFULLY ACADEMIC + 35.*2 + 20.*2 + 20.*2 + 14.*2 + 14.*2 + 13.*2 + 13.*2 +] REPEAT 2*8,35.*2 ;ASSEMBLE FOR Q PROMOTION + +HPNMT: + REPEAT 2*8,0 + REPEAT 8,207 + REPEAT 8,306 +REPEAT 2,[ + 200+.RPCNT*100+1 + 200+.RPCNT*100+2 + 200+.RPCNT*100+3 + 200+.RPCNT*100+3 + 200+.RPCNT*100+4 + 200+.RPCNT*100+4 + 200+.RPCNT*100+5 + 200+.RPCNT*100+5 +] REPEAT 8,202 ;ASSEMBLE FOR Q PROMOTION + REPEAT 8,302 + + +HSMTAB: BLOCK HSMSIZ ;SYMBOL TABLE POINTER TABLE +HSMDAT: BLOCK HDTSIZ ;SYMBOL TABLE DATA AREA + +R.VL: .VALUE ;THIS XCT ED WHEN RUN OF CHEOPS OBSERVED ON WHEN IT SHOULDNT. + ; HERE FOR EASE OF CHANGING SINCE SOMETIMES THE WORLD GETS + ; INTO A HUNG MODE. +HCSYL: 0 ;-1 SYL TYPED +HCNUMF: 0 ;-1 HCNUM VALID +HCNUM: 0 ;NUMBER + 0 + 0 + 0 +HCDNUM: 0 ;DECIMAL NUMBER + +HCVALF: 0 ;-1 HCVAL VALID (COMMAND HAS RETURNED VALUE) +HCVAL: 0 ;COMMAND S RETURN VALUES IN HCVAL (IF HCVALF -1) + 0 + 0 + 0 + +HCHPT: 0 ;VALUE OF SYMBOL "." +HRGOPF: 0 ;-1 -> REGISTER "OPEN" + +HCMFRC: 0 ;-1 FORCE NEXT CHR TO BE A BREAK AT HGCOM +HTICRF: 0 ;-1 LAST FIELD TERM BY CR AT HTIUI + +HCBUFL==10 +HCBUF: BLOCK HCBUFL ;COMMAND STRING BUFFER +HCBUFC: 0 ;CHARS LEFT IN HCBUF +HCBUFP: 0 ;POINTER TO HCBUF +HLASTC: 0 ;LAST CHR TYI ED BY HGCOM + +HPSVAL: 0 ;NON ZERO -> PASSIVE STATE SAVE VALID +HFSVAL: 0 ;NON ZERO -> FULL STATE SAVE VALID +HRUN: 0 ;NON ZERO -> CHEOPS ACTUALLY RUNNING +HTRUN: 0 ;NON ZERO -> CHEOPS "TRYING" TO RUN + ; DOES NOT GET CLEARED WHEN CHEOPS STOPPED ON FULL STATE SAVE +HLLMOD: 0 ;NON ZERO -> "LOW LEVEL MODE". 0 NORMAL + +HSVIR: 0 ;"OBSERVED" IR A + 0 ; IR B + 0 ; IR C + 0 ; IR D +HSVIRA: 0 ;"OBSERVED" IRA C + 0 ; IRA D + +HNVTIR: BLOCK 6 ;TEMP FOR IR AT HRESNV +HNFWDS: BLOCK 4 ;"NEXT FLAGS" READ IN BY HEXRNF + +HSVFLA: 0 ;"OBSERVED" FLAG A + 0 ; FLAG B + 0 ; FLAG C + 0 ; FLAG D + +HSVNAF: 0 ;"OBSERVED" NAF (THIS IS ACTUALLY IR 10-0) +HSVPC: 0 ;"OBSERVED" PC + 0 ;DUMMY WDS MUST FOLLOW HSVPC + 0 + 0 + +HSOBUS: 0 ;"OBSERVED" O-BUS +HSVORG: 0 ;"OBSERVED" O-REG +HSVPD0: 0 ;"OBSERVED" LOCN 0 OF DATA PDL MEMORY + ; (THAT LOCN USED INTERNALLY BY CONSOLE PRGM) + +HSERR1: 0 ;SAVED STATUS (FROM 176002) +HSERR2: 0 ;SAVED PARITY BITS (FROM MUX-SEL 14) +HSERR3: 0 ;SAVED "SPEC-FCTN" BITS (FROM MUX-SEL 15) + +HPARSF: 0 ;-1 PAR SAVED IN HPARSV +HPARSV: 0 ;IF HPARSF IS -1, SAVED PAR. + ; (TO AVOID LOADING AND UNLOADING ON EVERY REF TO PDL) +HUSPSF: 0 ;-1 USP SAVED IN HUSPSV +HUSPSV: 0 ;IF HUSPSF IS -1, SAVED USP. + +HSTEPS: 0 ;STEP COUNTER. INCR FOR EACH STEP BY ^N. CLEARED BY + ;^P OR :TP AND BY :LOAD BEFORE LOADING A NON-ZERO DUMP FILE +HTPLST: 1 ;LAST TEST POSITION USED +HTPPCL: 0 ;PIECE LIST POINTER TO USE IF HTPLST IS - +HTPLDF: 0 ;IF -1, TYP AND VAL MEMORIES HAVE BEEN RELOADED SINCE + ;LAST RESET OR NON-ZERO FILE LOAD +HSTEPM: 0 ;STEP MODE. IF ZERO, CNTRL-N COMMAND STEPS + ;CHEOPS DIRECTLY, IF >0, IT USES STAT STOP FEATURE + ;OF CHEOPS. +HUSADR: 0 ;UCODE STARTING ADR + +HCHSPD: 3 ;CHEOPS RUNNING SPEED + +HDPFLG: 0 ;NON ZERO -> SOME DEPOSITING DONE, RECOMPUTE RAID REG + +HSPDL: 0 ;SAVED PDL LVL WHEN ENTERED CONSOLE MODE +HTSST1: 0 ;SAVED TTYST1 WD WHEN ENTERED +HTSST2: 0 ;SAVED TTYST2 +HTSSTS: 0 ;SAVED TTYSTS + +HTTYMD: 0 ;0 -> NORMAL, 1-> CHEOPS CONSOLE MODE +HCMREQ: -1 ;+ OR ZERO, "TRYING" TO REACH COMMAND LOOP + +HGEUSF: 0 ;ZERO -> NO ERROR ON "UNDEFINED" SYMBOL +HSMFND: 0 ;-1 -> SYMBOL FOUND AT HGECOM + +HTYIUR: -1 ;-1 OR UNRCH THIS CHAR AT HTYI + +HCLINE: 0 ;LINE POSITION +HCPOS: 0 ;CHARACTER POSITION +HCHWD: 80. ;SCREEN WIDTH IN CHARACTERS + +HCSDPF: 0 ;NON-ZERO -> IN CONSOLE DISPLAYER +HDLNN: 26. ;LINE NUMBER TO START CONSOLE AREA ON +HRAIDM: 0 ;-1 -> CONFINE PRINTOUT TO MAIN CONSOLE AREA + ; (AVOID RAID REG AREA AND CONSOLE AREA) + +HRAIDA: REPEAT 10,0 ;RAID REGISTERS (REGISTER ADR TO DISPLAY, OR ZERO) + +CONSTANTS +VARIABLES + diff --git a/src/chprog/chnet.29 b/src/chprog/chnet.29 new file mode 100755 index 00000000..61878297 --- /dev/null +++ b/src/chprog/chnet.29 @@ -0,0 +1,395 @@ +;CHAOSNET ROUTINES, BASICALLY FROM MC:MOON;NNETWK > +.INSRT SYSTEM; CHSDEF > + +DEFINE SYSCAL NAME,ARGS +.CALL [SETZ ? SIXBIT /NAME/ ? ARGS ((SETZ))] +TERMIN + +;CHESS PACKET TYPES +PKTPOS==1 ;SEND OVER POSITION +PKTRQR==2 ;REQUEST RESULT +PKTRES==3 ;RETURNNED RESULTS +PKTBKS==4 ;CLOSE RING AND START BACKGROUND + +;FORMATING OF PACKET FOR TRANSFERING A CHESS POSITION: + $CXPKT==242000,,%CPKDT ;PACKET TYPE + $CXBFM==042000,,%CPKDT ;CHEOPS BUFFER MEMORY LOCN + $CXPRI==242000,,%CPKDT+1 ;PRIORITY OPTION + $CXMOD==042000,,%CPKDT+1 ;MODES (WD2 OF CHEOPS ARG BLOCK) + $CXSTD==242000,,%CPKDT+2 ;SETD (WD3) + $CXALP==042000,,%CPKDT+2 ;ALPHA (WD4) + $CXBET==242000,,%CPKDT+3 ;BETA (WD5) + $CXFLG==042000,,%CPKDT+3 ;FLAGWORD (WD6) + $CXCHN==242000,,%CPKDT+4 ;CHAIN WORD (WD7) + $CXPOS==$CXCHN ;FIRST DATA WORD OF POSITION. NOTE IDPB THIS.. +%CXPKL==<10.*2>+<33.*2> ;MAX BYTE LENGTH OF MESSAGE. THIS IS HOW LONG POSITION PACKETS + ; ACTUALLY ARE +;FORMATTING FOR CHEOPS RESULT PACKET + $CRPKT==242000,,%CPKDT ;PACKET TYPE, SAME AS ABOVE + $CRBFM==042000,,%CPKDT ;BUFFER ADR, SAME AS ABOVE + $CRSTD==242000,,%CPKDT+1 ;SETD FROM WD3 OF PARAM BLOCK + $CRPAD==042000,,%CPKDT+1 ;PADDING TO MAKE FOLLOWING ALIGN ON PDP10 WORD BOUNDARIES. +;MUST ALIGN ON WORD BOUNDARY + $CRSTA==242000,,%CPKDT+2 ;WD16 STATA (LOW ORDER) + $CRSTB==042000,,%CPKDT+2 ;WD17 STATB (HIGH ORDER) + $CRVAL==242000,,%CPKDT+3 ;WD20 VALUE + $CRIVL==042000,,%CPKDT+3 ;WD21 INITIAL VALUE + $CRPV1==%CPKDT+4 ;WD22,23 PV1 + $CRPV2==%CPKDT+5 ;WD24,25 PV2 + $CRPV3==%CPKDT+6 ;WD26,27 PV3 + $CRPH1==%CPKDT+7 ;WD30,31 PV1 WITH HIM TO MOVE + $CRPH2==%CPKDT+10 ;WD32,33 PV2 " + $CRPH3==%CPKDT+11 ;WD34,35 PV3 " + $CRHVL==242000,,%CPKDT+12 ;VALUE WITH HIM TO MOVE + +;FORMATTING FOR CLOSE RING AND START BACKGROUND PACKET + $CCPKT==242000,,%CPKDT ;PACKET TYPE, SAME AS ABOVE + $CCBFM==042000,,%CPKDT ;BUFFER ADR, HEAD OF RING + $CCBF1==242000,,%CPKDT+1 ;BUFFER ADR OF BLOCK TO RING TO HEAD BUFFER + +;PV WITH OTHER SIDE TO MOVE + +;CHAOS NETWORK CONNECT ROUTINE +; +;Call: +; MOVEI B,host ;host number to connect to +; MOVEI C,contact name ;an ASCIZ string +; MOVEI D,window size +; PUSHJ P,CHACON +; lossage ;you may call ANALYZE to get an error message. +; ;If $$ERRHAN is nonzero, we call ANALYZE for you. +; +;Clobbers only T and TT. +; + +.VECTOR PKTBUF(%CPMXW) ;Buffer used by Open, Close, and Analyze + +CHACON: MOVEI TT,%CORFC + SETZM PKTBUF + MOVE T,[PKTBUF,,PKTBUF+1] + BLT T,PKTBUF+%CPMXW-1 ;For extra luck, clear the packet buffer + DPB B,[$CPKDA+PKTBUF] ;Destination host + DPB TT,[$CPKOP+PKTBUF] + PUSHJ P,CHSTNG ;Store string from C + SYSCAL CHAOSO,[MOVEI CHNETI ? MOVEI CHNETO] ;Assign Chaos index + JRST CHACNL + SYSCAL PKTIOT,[MOVEI CHNETO ? MOVEI PKTBUF] ;Send RFC or LSN + .LOSE 1000 + MOVEI TT,30.*30. ;30-second timeout + SKIPE DEBUG + MOVSI TT,177777 ;Or infinite, in debug mode + LDB T,[$CPKOP+PKTBUF] + CAIE T,%COLSN ;Get the boring state + SKIPA T,[%CSRFS] + MOVEI T,%CSLSN + SYSCAL NETBLK,[MOVEI CHNETO ? T ? TT ? MOVEM TT] ;Await completion of connection + JRST CHACNL + CAIE TT,%CSOPN + JRST CHACNL + JRST POPJ1 ;CHACON done + +CHACNL: ;CHACON lost + MOVEI A,CHNETI + PUSHJ P,ANALYZE + JFCL ;SKIPS SOMETIMES + .CLOSE CHNETI, + POPJ P, + +;Send CLOSE packet, then close connection +;Call: MOVEI C,message ;asciz string +; PUSHJ P,CHACLS +; lossage + +CHACLS: MOVEI T,%COCLS + DPB T,[$CPKOP+PKTBUF] + PUSHJ P,CHSTNG + SYSCAL PKTIOT,[MOVEI CHNETO ? MOVEI PKTBUF] + SKIPA + AOS (P) + .CLOSE CHNETI, + .CLOSE CHNETO, + JRST POPJ1 + +CHSDTO: MOVEI T,%CODAT ;FINISH FORMATING AND SEND DATA PACKET + DPB T,[$CPKOP+PKTBUF] ;-NOTE--BYTE LENGTH SHOULD ALREADY BE IN [$CPKNB+PKTBUF] + SYSCAL PKTIOT,[MOVEI CHNETO ? MOVEI PKTBUF] + .VALUE + POPJ P, + + +;Store string from C into PKTBUF. Bash T, TT +CHSTNG: PUSH P,B + PUSH P,C + MOVE B,[440800,,PKTBUF+%CPKDT] + MOVEI TT,0 + HRLI C,440700 +CHSTG1: ILDB T,C + JUMPE T,CHSTG2 + IDPB T,B + CAIGE TT,%CPMXC-1 + AOJA TT,CHSTG1 +CHSTG2: DPB TT,[$CPKNB+PKTBUF] + POP P,C + POP P,B + POPJ P, + + +; Network error analysis. + +;Call: MOVEI A,pin ;channel number that is losing +; PUSHJ P,ANALYZE +; .VALUE ;always skip-returns +; +;Clobbers only T and TT. Uses the PUTCHR routine to type out its messages. + +.VECTOR WHYINT(4) ;Cruft returned from WHYINT + +ANALYZE: + AOS (P) + PUSH P,B + PUSH P,C +ANALN1: SYSCAL WHYINT,[A ? MOVEM T ;Get device type + MOVEM WHYINT ? MOVEM WHYINT+1 ? MOVEM WHYINT+2 ? MOVEM WHYINT+3 ] + MOVEI T,0 ;Channel not open, probably + CAIN T,%WYCHA + JRST ANLCHA ;Chaos net channel open, further info available + SYSCAL USRVAR,[MOVEI %JSELF ? MOVEI .RIOS(A) ? MOVEM T] ;Get I/O status wd for channel + .LOSE 1000 + LDB TT,[220600,,T] ;only the open-loss code is available + CAIE TT,%ENAPP ;Other end of pipeline gone, or + CAIN TT,%ENSDR ;No such directory + JRST [ JSP TT,SPEAK ;means destination host dead + ASCIZ\Destination Host dead.\ ] + CAIN TT,%EFLDV ;Device full (this one applies to both Arpanet & Chaos net) + JRST [ JSP TT,SPEAK + ASCIZ \All sockets in use.\ ] + CAIN TT,%ENRDV ;Device not ready + JRST [ JSP TT,SPEAK + ASCIZ \Network down.\ ] + CAIN TT,%ESCO ;Self-contradictory open + JRST [ JSP TT,SPEAK + ASCIZ \Connection cannot be opened because of inconsistent byte sizes.\ ] + .CALL [ SETZ ;Some other error - get ITS error message + 'IOPUSH + SETZ A ] + .LOSE 1000 + .CALL [ SETZ + SIXBIT/OPEN/ + MOVEI (A) ;here we rely on .UAI=0 + ['ERR,,] + MOVEI 3 + SETZ T ] + .LOSE 1400 + MOVEI TT,[ASCIZ\? Internal error - \] + PUSHJ P,ZTYPE +ANAL0: .CALL [ SETZ ;copy error message to output device + 'IOT,, + MOVEI (A) + SETZM T ] + .LOSE 1000 + CAIGE T,40 + JRST ANALYX + PUSHJ P,PUTCHR + JRST ANAL0 + +ANALYX: .CALL [ SETZ + SIXBIT/IOPOP/ + SETZI (A) ] + .LOSE 1000 +ANALX: MOVEI TT,[ASCIZ / +/] + PUSHJ P,ZTYPE + POP P,C + POP P,B + POPJ P, + +ANALT: MOVEI TT,[ASCIZ /Attempt to open connection timed out./] +SPEAK: PUSHJ P,ZTYPE ;send message from TT + JRST ANALX ; and return + +;Analyze on chaos channel, still open + +ANLCHA: MOVE TT,WHYINT ;Connection state + CAIE TT,%CSLOS + CAIN TT,%CSCLS + JRST ANLCH1 + CAIE TT,%CSINC + JRST ANLCH0 ;Still open + JSP TT,SPEAK + ASCIZ /Connection broken -- foreign host not communicating./ + +ANLCH0: PUSH P,CHSTTB(TT) + MOVEI TT,[ASCIZ/Timed-out while connection /] + PUSHJ P,ZTYPE + POP P,TT + JRST SPEAK + +CHSTTB: [ASCIZ/closed/] + [ASCIZ/listening/] + [ASCIZ/has received RFC/] + [ASCIZ/has sent RFC/] + [ASCIZ/open/] + [ASCIZ/lost/] + [ASCIZ/broken/] + +ANLCH1: PUSH P,CHSTTB(TT) + MOVEI TT,[ASCIZ/Connection /] + PUSHJ P,ZTYPE + POP P,TT + PUSHJ P,ZTYPE + MOVEI TT,[ASCIZ/ -- /] + PUSHJ P,ZTYPE + HLRZ TT,WHYINT+1 ;get number of input packets +ANLCH2: SOJL TT,ANALX ;scan input looking for CLS, LOS + HLRZ T,WHYINT+3 ;Pick up input channel number + SYSCAL PKTIOT,[T ? MOVEI PKTBUF] + .LOSE 1000 + LDB T,[$CPKOP+PKTBUF] + CAIE T,%COCLS + CAIN T,%COLOS + SKIPA B,[440800,,PKTBUF+%CPKDT] + JRST ANLCH2 + LDB C,[$CPKNB+PKTBUF] +ANLCH3: SOJL C,ANALX + ILDB T,B + PUSHJ P,PUTCHR + JRST ANLCH3 + + +ZTYPE: PUSH P,B + PUSH P,A + MOVEI B,TYO + SOUT (TT) + POP P,A + POP P,B + POPJ P, + +PUTCHR: PUSH P,A + MOVE A,T + PUSHJ P,TYO + POP P,A + POPJ P, + +DEBUG: 0 ;NON-ZERO -> INIFINITE TIMEOUT ON RFC + + +NSTRT: MOVEI C,CBABL ;PRIORITY BLOCK, WANT 16 BIT WORD ADR + MOVEI T,CHXTB + MOVEI D,1 ;USE PRIORITY POINTER +CXTPO1: PUSHJ P,CXNPOS + MOVEI ZR,%CXPKL + DPB ZR,[$CPKNB+PKTBUF] ;SET # BYTES TO SOMETHING BIG ENUF + PUSHJ P,CHSDTO + POPJ P, + +CXTPOS: MOVEI D,2 ;ADD TO BACKGROUND + JRST CXTPO1 + +CXNPOS: MOVEI ZR,PKTPOS ;FOLLOWING ROUTINE SEMI-COMPATABLE WITH CXBPOS + DPB ZR,[$CXPKT+PKTBUF] ;CHEOPS PACKET TYPE + MOVE ZR,C + LSH ZR,1 ;LISPM ADDRESS 1 UNIBUS LOCN PER ADR, NOT TWO + DPB ZR,[$CXBFM+PKTBUF] ;CHEOPS BUFFER ADR + DPB D,[$CXPRI+PKTBUF] ;PRIORITY OPTION + MOVE TT,[$CXPOS+PKTBUF] + MOVE B,[-NPC,,1] +CXPK1: SKIPN A,PIECEL(B) + JRST CXPK2 + SKIPGE D,CHEOPC(B) + JRST [ LDB ZR,[PTID,,PIECE(B)] + CAIE ZR,PID + TRO D,40 ;THIS P PROMOTED + JRST .+1] + MOVE ZR,CHEOSQ(A) + DPB D,[101000,,ZR] + IDPB ZR,TT +CXPK2: AOBJN B,CXPK1 + MOVEI ZR,0 + IDPB ZR,TT ;TERMINATE LIST + MOVE ZR,-1(T) ;BITS AND MODES WD + DPB ZR,[$CXMOD+PKTBUF] + MOVE ZR,-5(T) ;DEPTH + DPB ZR,[$CXSTD+PKTBUF] + MOVE ZR,-4(T) ;INITIAL ALPHA + DPB ZR,[$CXALP+PKTBUF] + MOVE ZR,-3(T) ;INITIAL BETA + DPB ZR,[$CXBET+PKTBUF] + MOVE ZR,-2(T) ;INITIAL FLAGWORD + DPB ZR,[$CXFLG+PKTBUF] + MOVE ZR,-6(T) ;CHAIN WORD + DPB ZR,[$CXCHN+PKTBUF] + POPJ P, + +CXBFNT: MOVE C,CBBIP ;CLOSE RING, AND START BACKGROUND SEARCH + LSH C,1 + MOVE T,CBBBP + SUBI T,40 + LSH T,1 + MOVEI ZR,PKTBKS + DPB ZR,[$CCPKT+PKTBUF] + DPB C,[$CCBFM+PKTBUF] + DPB T,[$CCBF1+PKTBUF] + MOVEI ZR,3*2 + DPB ZR,[$CPKNB+PKTBUF] ;DATA BYTES IN PACKET + PUSHJ P,CHSDTO + POPJ P, + +;REQUEST RESULTS FROM CHEOPS +NGTV: MOVEI C,CBABL +CXGVN: MOVEI ZR,PKTRQR + DPB ZR,[$CXPKT+PKTBUF] + MOVE ZR,C + LSH ZR,1 + DPB ZR,[$CXBFM+PKTBUF] + MOVEI ZR,2*2 + DPB ZR,[$CPKNB+PKTBUF] ;PACKET DATA LENGTH IN BYTES + PUSHJ P,CHSDTO ;SEND REQUEST FOR RESULTS. + SYSCAL PKTIOT,[MOVEI CHNETI ? MOVEI PKTBUF] +;FOLLOWING SEMI-COMPATABLE WITH HCHGVR + LDB T,[$CPKOP+PKTBUF] + CAIE T,%CODAT + .VALUE ;NOT DATA PACKET + LDB T,[$CXPKT+PKTBUF] + CAIE T,PKTRES + .VALUE ;NOT RESULT PACKET + LDB J,[$CRSTD+PKTBUF] + MOVEM J,HCHSTD + MOVEM J,CHXSTD + MOVE J,$CRPV1+PKTBUF + SOSL HCHSTD + TLNN J,777774 + JRST [ CLEARM CHXPV1 + CLEARM CHXPV2 + CLEARM CHXPV3 + JRST NTGV1] + PUSHJ P,HCHMMV + MOVEM R,CHXPV1 + MOVE J,$CRPV2+PKTBUF + SOSL HCHSTD + TLNN J,777774 + JRST [ CLEARM CHXPV2 + CLEARM CHXPV3 + JRST NTGV1] + PUSHJ P,HCHMMV + MOVEM R,CHXPV2 + MOVE J,$CRPV3+PKTBUF + SOSL HCHSTD + TLNN J,777774 + JRST [ CLEARM CHXPV3 + JRST NTGV1] + PUSHJ P,HCHMMV + MOVEM R,CHXPV3 +NTGV1: LDB R,[$CRIVL+PKTBUF] + TRNE R,100000 + ORCMI R,77777 + MOVEM R,CHXIMB + LDB R,[$CRSTA+PKTBUF] + LDB J,[$CRSTB+PKTBUF] + LSH J,20 + IOR J,R + MOVEM J,CHXSTA + LDB R,[$CRVAL+PKTBUF] + TRNE R,100000 + ORCMI R,77777 + MOVEM R,CHXVAL + POPJ P, diff --git a/src/chprog/ocaux.224 b/src/chprog/ocaux.224 new file mode 100755 index 00000000..6402125c --- /dev/null +++ b/src/chprog/ocaux.224 @@ -0,0 +1,8093 @@ +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 diff --git a/src/chprog/ocdagb.31 b/src/chprog/ocdagb.31 new file mode 100755 index 00000000..c37c9fd1 --- /dev/null +++ b/src/chprog/ocdagb.31 @@ -0,0 +1,821 @@ +; TV CHESSBOARD, INTENDED TO BE .INSRT'ED +IFN TS-DECTS,[ + +;VARIABLES WITH PREFIX Z ARE FOR FONT 1 (SMALL BOARD) MODE + +TVBBAS==370*2000 ;BASE OF VIDEO BUFFER +NWSCNL==22 ;# WDS / SCAN LINE + TVSQW==50. ;# BITS SQUARE IS WIDE FONT 0 + ZTVSQW==30. ; FONT 1 + TVBBW==TVSQW*8 ;# BITS BASIC BOARD WIDE + ZTVBBW==ZTVSQW*8 +TVBDRW==3 ;# BITS BOARDERS WIDE + NWBEDG==/32. ;# FULL WORDS IN BOTTOM BORDER + ZNWBEDG==/32. + NBBEDG==-NWBEDG*32. ;# EXTRA BITS IN BOTTOM BORDER + ZNBBEDG==-ZNWBEDG*32. + BLDGP==<4_12.>+NBBEDG*100,,NWSCNL-NWBEDG-1 ;BP TO LEFT EDGE OF BOTTOM BORDER + ZBLDGP==<4_12.>+ZNBBEDG*100,,NWSCNL-ZNWBEDG-1 + TVLBTS==1100-TVBBW-2*TVBDRW ;BITS TO LEFT OF BOARD + ZTVLBTS==1100-ZTVBBW-2*TVBDRW + TVLWDS==TVLBTS/32. ;# FULL WORDS TO LEFT OF BORDER + ZTVLWDS==ZTVLBTS/32. + TLEBTS==TVLBTS-TVLWDS*32. ;# EXTRA BITS TO LEFT OF BORDER + ZTLEBTS==ZTVLBTS-ZTVLWDS*32. +IFL TLEBTS-TVBDRW,.ERR SPIT ACROSS PDP-10 WORD BOUNDARY +IFL ZTLEBTS-TVBDRW,.ERR SMALL FONT LEFT EDGE SPLIT ACROSS PDP-10 WORD BOUNDARY + LEDGP==<<44-TLEBTS-TVBDRW>_12.>+300,,TVLWDS+NWSCNL*TVBDRW + ;BYTE POINTER FOR LEFT EDGE + + ZLEDGP==<<44-ZTLEBTS-TVBDRW>_12.>+300,,ZTVLWDS+NWSCNL*TVBDRW + +TVCTAB: MOVE A,61C(B) ; VACANT WHITE SQ + MOVE A,153C(B) ; WP ON W SQ + MOVE A,151C(B) ; WN ON W SQ + MOVE A,147C(B) ; WB ON W SQ + MOVE A,145C(B) ; WR ON W SQ + MOVE A,143C(B) ; WQ ON W SQ + MOVE A,141C(B) ; WK ON W SQ + MOVE A,113C(B) ; BP ON W SQ + MOVE A,111C(B) ; BN ON W SQ + MOVE A,107C(B) ; BB ON W SQ + MOVE A,105C(B) ; BR ON W SQ + MOVE A,103C(B) ; BQ ON W SQ + MOVE A,101C(B) ; BK ON W SQ + JFCL [0] ; VACANT BLACK SQ + MOVE A,152C(B) ; WP ON B SQ + MOVE A,150C(B) ; WN ON B SQ + MOVE A,146C(B) ; WB ON B SQ + MOVE A,144C(B) ; WR ON B SQ + MOVE A,142C(B) ; WQ ON B SQ + MOVE A,140C(B) ; WK ON B SQ + MOVE A,112C(B) ; BP ON B SQ + MOVE A,110C(B) ; BN ON B SQ + MOVE A,106C(B) ; BB ON B SQ + MOVE A,104C(B) ; BR ON B SQ + MOVE A,102C(B) ; BQ ON B SQ + MOVE A,100C(B) ; BK ON B SQ + +DSQ: MOVE TT,BOARD(A) ; DISPLAY SQ WHOSE NUMBER IS IN RIGHT HALF OF A +DSQC: JUMPLE TT,DSQ2 ;DISPLAY CONTENTS IN TT ON SQUARE IN A + HRRZ ZR,TT ;SAVE A COPY + LDB TT,[PTID,,(TT)] + ADDI TT,1 + SKIPL @ZR + ADDI TT,7-1 +; CAIGE TT,PIECE+20 +; SKIPA TT,[1] +; MOVEI TT,7 +; ADD TT,@BOARD(A) +DSQ2: SKIPE BFLIP + SETCMI A,-170(A) ; WANT INVERTED BOARD + MOVEI A,-2*BW(A) + IDIVI A,BW + MOVE T,REVERS+2(A) + SKIPE FONT + JRST ZDSQ1 ;USE 30. HIGH FONT + IMULI T,TVSQW*NWSCNL + MOVE D,REVERS(B) ;FILE NUMBER (+1) + EQVI B,(A) ;RANK NUMBER + TRNN B,1 ? SKIPA B,TVCTAB+15(TT) ? MOVE B,TVCTAB(TT) + HLLZM B,MRBTS2 ? MOVEI C,44 ? MOVE A,(B) + HRLI T,-TVSQW ? JRST @DSQ3-1(D) +DSQ3: BLOCK 10 + +DEFINE DPBSEQ A,B + MOVEI D,A ? JSP TT,MORBTS +IFL A-40, DPB ZR,[<44->_36+_30+ZAZ2+B(T)] +IFE A-40, LSH ZR,4 ? MOVEM ZR,ZAZ2+B(T) +TERMIN + +REPEAT 8,[ +$$==. ? LOC DSQ3+.RPCNT ? $$ ? LOC $$ +;ZZ==1100-403.+50.*.RPCNT +ZZ==1100-TVBBW-TVBDRW+TVSQW*.RPCNT ;BIT ADDRESS OF LEFT EDGE OF SQUARE +;ZZ2==760066+/40 +ZAZ2=TVBBAS+NWSCNL*TVBDRW+/40 ;WORD ADDRESS +ZZ==ZZ/40*40+40-ZZ ;# BITS IN SQUARE IN ADDRESSED WD + MOVEI D,ZZ ? JSP TT,MORBTS + DPB ZR,[<400+ZZ>_30+ZAZ2(T)] +IFLE 22-ZZ, DPBSEQ 62-ZZ,1 +IFG 22-ZZ, DPBSEQ 40,1, ? DPBSEQ 22-ZZ,2 + ADDI T,NWSCNL-1 ? AOBJN T,$$ ? POPJ P, +] + +MORBTS: MOVEI ZR,0 ;GET # OF BITS IN D + CAILE D,(C) ? AOJA B,MRBTS1 + LSHC ZR,(D) ? SUBI C,(D) ? JRST (TT) +MRBTS1: LSHC ZR,(C) +MRBTS2: MOVE A,(B) + SUBI D,(C) ? LSHC ZR,(D) + SETCMI C,-45(D) ? JRST (TT) + +TVDINI: .CALL [ SETZ + 'CNSGET + 1000,,TYOC + 2000,, ;VERTICAL SCREEN SIZE + 2000,, ;HORIZ SCREEN SIZE + 402000,,ZR ] ; TCTYP + .VALUE + CAIE ZR,5 ; SKIP IF TV + JRST NO.TV + MOVEI ZR,28. + SKIPE FONT + MOVEI ZR,50. + MOVEM ZR,LINEL + SETOM TVFLG + MOVE A,[-10,,TVBBAS/2000] + MOVEI B,0 + .CALL [ SETZ + 'CORBLK + 1000,,600000 + 1000,,-1 + A + 1000,,-2 + SETZ B ] + .VALUE + POPJ P, + +NO.TV: SETZM TVFLG ? MOVSI ZR,(POPJ P,) ? MOVEM ZR,DBRD ? MOVEM ZR,INCD + MOVEI ZR,79. ? MOVEM ZR,LINEL + POPJ P, + +DBRD: CAI + SKIPE FONT + JRST ZDBRD + MOVSI A,-8*TVSQW ;WRITE BORDERS + SETO B, +DBRD1: DPB B,[TVBBAS+LEDGP(A)] + DPB B,[<4_12.>+,,TVBBAS+NWSCNL-1+NWSCNL*TVBDRW(A)] + ADDI A,NWSCNL-1 + AOBJN A,DBRD1 + SETCMI C,17 ? MOVSI A,-14 + REPEAT 3, DPB B,[42600,,760005+22*.RPCNT(A)] + REPEAT 3, DPB B,[42600,,776133+22*.RPCNT(A)] +DBRD2: REPEAT 3, MOVEM C,760006+22*.RPCNT(A) + REPEAT 3, MOVEM C,776134+22*.RPCNT(A) + AOBJN A,DBRD2 +; MOVSI S,-12.*BW+2*BW+1-1 ;-142+25-1 +;TVBD: MOVEI A,2*BW+1(S) +; SKIPL BOARD(A) +; PUSHJ P,DSQ +; AOBJN S,TVBD +ZTVBD: MOVEI S,8*BW+2*BW-1-1 ;BLACK'S QR1 +TVBD: MOVE A,S + SKIPL BOARD(A) + PUSHJ P,DSQ + CAILE S,2*BW+1 + SOJA S,TVBD +TVBD1: MOVE ZR,[PIECEL+1,,DPCL] ;SAVE STATE SO CAN UPDATE WHAT HAS CHANGED + BLT ZR,DPCL+37 + POPJ P, + +CHSQS: BLOCK 100 +DPCL: BLOCK 40 ;LOCN OF PCS WHEN LAST UPDATED +NOINCU: 0 ;-> NO INCREMENTAL UPDATE, REDIS WHOLE THING. + +INCDU: MOVEM 16,INCDUT+16 ;INCR UPDATE OF DISPLAY, SAVING ALL ACS (P=17) + MOVEI 16,INCDUT + BLT 16,INCDUT+15 + PUSHJ P,INCD + MOVSI 16,INCDUT + BLT 16,16 + POPJ P, + +INCDUT: BLOCK 17 + +INCD: CAI + SKIPGE TTYOFF + POPJ P, ;TTY OFF, SO DONT UPDATE DISPLAY EITHER + AOSG NOINCU + JRST DBRD ;INCR UPDATE NOT REALLY GOING TO WIN. + MOVEI S,CHSQS-1 + MOVSI A,-40 +INCD1: MOVE ZR,PIECEL+1(A) + CAMN ZR,DPCL(A) + JRST INCD2 ;THAT PC IN SAME PLACE + PUSH S,ZR ;PUSH WHERE IT IS + PUSH S,DPCL(A) ;PUSH WHERE IT WAS +INCD2: AOBJN A,INCD1 + PUSHJ P,INCD3 ;FLUSH THINGS THAT HAVE GONE + SKIPE BOARD(A) + PUSHJ P,INCD3 ;THEN PUT ON THINGS THAT HAVE COME ON + SKIPG BOARD(A) + JRST TVBD1 + +INCD3:; SETCMI R,-CHSQS+2(S) +; HRLOI R,(R) +; AOBJP R,CPOPJ1 + HRREI R,-CHSQS(S) + JUMPL R,POPJ1 +INCD3A: SKIPLE A,CHSQS(R) + XCT @(P) + JRST INCD3B + PUSHJ P,DSQ +INCD3B: SOJGE R,INCD3A + JRST POPJ1 + +TVCR: + IRP A,,[^P,"H,^H,^P,"D] + .IOT TYOC,[A] ? TERMIN +TVCEOL: + IRP A,,[ZR,A,B] + PUSH P,A ? TERMIN + .CALL [ SETZ + SIXBIT /RCPOS/ + 1000,,TYOC + 402000,,A ] + .VALUE + MUL A,[22*14/2,,] + ADD A,[-14,,TVBBAS] + SETZ B, + HRRM A,TVCR2 +TVCR1: HRLI B,-5 + SKIPE FONT + HRLI B,-9 +TVCR2: SETZB (B) + AOBJN B,.-1 + DPB [321200,,@TVCR2] + ADDI B,22-9 + SKIPN FONT + ADDI B,4 + AOBJN A,TVCR1 + IRP A,,[B,A,ZR] + POP P,A ? TERMIN + POPJ P, + 61C: +600300140060 ? 030010014006 ? 003001400400 ? 600300140060 ? 030030014006 ? 003001401400 +600300140060 ? 060030014006 ? 003003001400 ? 600300140140 ? 060030014006 ? 006003001400 +600300300140 ? 060030014014 ? 006003001400 ? 600200300140 ? 060030010014 ? 006003001400 +600600300140 ? 060030030014 ? 006003001401 ? 400600300140 ? 060060030014 ? 006003003001 +400600300140 ? 140060030014 ? 006006003001 ? 400600300300 ? 140060030014 ? 004006003001 +400600200300 ? 140060030014 ? 014006003001 ? 400600600300 ? 140060030030 ? 014006003001 +401400600300 ? 140060060030 ? 014006003003 ? 001400600300 ? 140140060030 ? 014006006003 +001400600300 ? 100140060030 ? 014004006003 ? 001400600300 ? 300140060030 ? 014014006003 +001400600600 ? 300140060030 ? 030014006003 ? 001401400600 ? 300140060060 ? 030014006003 +003001400600 ? 300140140060 ? 030014006002 ? 003001400600 ? 300100140060 ? 030014006006 +003001400600 ? 300300140060 ? 030014014006 ? 003001400600 ? 600300140060 ? 030030014006 +003001401400 ? 600300140060 ? 060030014006 ? 003000000000 + +101C: +600300140060 ? 030010014006 ? 003001400400 ? 600300140060 ? 030030014006 ? 003001401400 +600000140060 ? 060030000006 ? 003003001401 ? 700300140140 ? 060022014006 ? 006003000440 +600300300140 ? 011000014014 ? 006007637000 ? 600200300100 ? 020030010014 ? 002000401400 +600600076370 ? 060030030000 ? 044000001401 ? 400701101600 ? 060060077622 ? 377003003007 +017476034140 ? 140300071600 ? 142006014000 ? 360001400300 ? 600003000014 ? 004010000060 +000100200600 ? 001400003014 ? 030000030000 ? 030600600000 ? 600000630010 ? 000014000004 +400200360001 ? 700100044004 ? 600062002003 ? 140304001060 ? 140141014140 ? 060602006020 +201001004040 ? 100604020020 ? 103004004140 ? 601406040300 ? 101004020101 ? 014003030100 +406060600620 ? 202010101030 ? 030777777777 ? 761401407777 ? 777777060060 ? 140000000063 +003003000000 ? 001440140060 ? 601403030002 ? 001414030060 ? 600100030000 ? 000014006004 +600000000300 ? 300317777777 ? 776014014377 ? 777777740600 ? 600000000000 ? 030030000000 +000001401400 ? 600300140060 ? 060030014006 ? 003000000000 + +103C: +600300140060 ? 030010014006 ? 003001400400 ? 600300140060 ? 030030014006 ? 003001401400 +600300140060 ? 060030014006 ? 003003001400 ? 600300140140 ? 060030014006 ? 006003001400 +600300300000 ? 060030000014 ? 000003001400 ? 000200000000 ? 000000010000 ? 000000000000 +600700000000 ? 007030013000 ? 000000320400 ? 330000000015 ? 400003201400 ? 140260002024 +030003005000 ? 140500300140 ? 120006012007 ? 007002400300 ? 240120120050 ? 004005402402 +403200200110 ? 050050044014 ? 003201201201 ? 300600024024 ? 024024030000 ? 500500500501 +401012012012 ? 012020060260 ? 260640640003 ? 004404411011 ? 000140150150 ? 260260006001 +201205005000 ? 100024027720 ? 120004000543 ? 777706400300 ? 011360007510 ? 014000236000 +036200600007 ? 777777774030 ? 020177777777 ? 701401403000 ? 000006020060 ? 060000000140 +003001400000 ? 003000140030 ? 301406060002 ? 000606030141 ? 400100014000 ? 000030006000 +300000000600 ? 300007777777 ? 774014000177 ? 777777700600 ? 600000000000 ? 030030000000 +000001401400 ? 600300140060 ? 060030014006 ? 003000000000 + +105C: +600300140060 ? 030010014006 ? 003001400400 ? 600300140060 ? 030030014006 ? 003001401400 +600300140060 ? 060000000000 ? 003003000000 ? 000000140140 ? 000000000006 ? 006000000000 +000300300000 ? 000000004014 ? 000760770370 ? 000200010410 ? 204200010000 ? 217607704000 +600404000000 ? 100030030100 ? 000002001401 ? 402000000040 ? 060060040000 ? 001003003001 +000000020140 ? 140037777777 ? 406006000006 ? 003000300300 ? 000140060004 ? 004000006000 +600000200200 ? 140014000014 ? 014006000140 ? 000600600140 ? 003000030030 ? 006000030001 +401400140000 ? 600060060006 ? 000006003003 ? 000140000140 ? 140140006000 ? 001406006000 +140000030100 ? 100006000000 ? 300004000140 ? 000006000300 ? 006000000060 ? 014000140000 +001400600406 ? 000000014030 ? 030140000000 ? 300401406000 ? 000003000060 ? 140000000060 +003002000000 ? 000400140077 ? 777777770002 ? 001000000000 ? 200100020000 ? 000004006000 +400000000100 ? 300017777777 ? 776014000377 ? 777777740600 ? 600000000000 ? 030030000000 +000001401400 ? 600300140060 ? 060030014006 ? 003000000000 + +107C: +600300140060 ? 030010014006 ? 003001400400 ? 600300140060 ? 030030014000 ? 003001401400 +600000140060 ? 060030000006 ? 003003001400 ? 000300140140 ? 060014000006 ? 006003000740 +000300300140 ? 031400014014 ? 006001414000 ? 600200300060 ? 140030010014 ? 003001401400 +600600140014 ? 020030030006 ? 000600001401 ? 400100030000 ? 060060006001 ? 400003003000 +100060000140 ? 140002003014 ? 006006000140 ? 041700300300 ? 102001163014 ? 004006040036 +020600200301 ? 000000410014 ? 014030000030 ? 000600600200 ? 000400030030 ? 004000010001 +401400100300 ? 200060060002 ? 006004003003 ? 000060770300 ? 140140040417 ? 604006006003 +010060100300 ? 100140201402 ? 014004006006 ? 030140600300 ? 300040002010 ? 014014001000 +040000600600 ? 030003000030 ? 030000200040 ? 001401400006 ? 003000060060 ? 000040040003 +003000001403 ? 000140140000 ? 010040000002 ? 000000303000 ? 000100000002 ? 040000006000 +000077000000 ? 300077777777 ? 777414001777 ? 777777770200 ? 600000000000 ? 030030000000 +000001401400 ? 600300140060 ? 060030014006 ? 003000000000 + +111C: +600300140060 ? 030010014006 ? 003001400400 ? 600300140060 ? 030030014006 ? 003001401400 +600300140060 ? 060030014006 ? 003003001400 ? 000300140140 ? 060000014006 ? 006003000000 +600300300140 ? 700000014014 ? 006017400000 ? 600200300316 ? 000030010014 ? 002070001400 +600600040340 ? 060030030003 ? 001401001401 ? 400140014000 ? 060060006000 ? 140003003000 +306001400140 ? 140014100014 ? 006006000600 ? 000100300300 ? 030000003004 ? 004000400000 +030000200030 ? 000000300014 ? 001400000002 ? 000600060000 ? 000060030001 ? 000160000401 +400060016600 ? 014060001000 ? 606000101002 ? 060070140003 ? 000141417003 ? 000020006017 +600140000400 ? 100160006000 ? 014004000000 ? 300000100300 ? 000014000002 ? 014000001600 +000060600000 ? 060000001410 ? 020007000000 ? 030001400300 ? 000000600060 ? 014000000014 +003001600000 ? 000300140060 ? 000000006002 ? 003000000000 ? 140100140000 ? 000003006003 +000000000060 ? 300077777777 ? 777414001777 ? 777777770200 ? 600000000000 ? 030030000000 +000001401400 ? 600300140060 ? 060030014006 ? 003000000000 + +113C: +600300140060 ? 030010014006 ? 003001400400 ? 600300140060 ? 030030014006 ? 003001401400 +600300140060 ? 060030014006 ? 003003001400 ? 600300140140 ? 060030014006 ? 006003001400 +600300300140 ? 060030014014 ? 006000000400 ? 600200300000 ? 000030010014 ? 000000001400 +600600001400 ? 060030030000 ? 176003001401 ? 400016070040 ? 060060000600 ? 300003003001 +010002000140 ? 140060600060 ? 006006003010 ? 000400300300 ? 140600014014 ? 004006014000 +300600200300 ? 100004030014 ? 014003000301 ? 400600600020 ? 004020030030 ? 000600300001 +401400007034 ? 000060060020 ? 077600003003 ? 001401004000 ? 140140060020 ? 100006006003 +001403000300 ? 100140030060 ? 014004006000 ? 400400600300 ? 300010010030 ? 014014000600 +300400600600 ? 010002000030 ? 030000200040 ? 001401400004 ? 001000060060 ? 000700034001 +003000070000 ? 160000140007 ? 000000700002 ? 000700000003 ? 400100030000 ? 000014006000 +600000000300 ? 300017777777 ? 776014010377 ? 777777740600 ? 600000000000 ? 030030000000 +000001401400 ? 600300140060 ? 060030014006 ? 003000000000 + +141C: +600300140060 ? 030010014006 ? 003001400400 ? 600300140060 ? 030030014000 ? 003001401400 +600000140060 ? 060030000006 ? 003003001400 ? 000300140140 ? 060014000006 ? 006003000300 +000300300140 ? 006000014014 ? 006000140000 ? 200200300077 ? 740000010014 ? 001777000000 +600600001400 ? 000030030000 ? 030000001401 ? 400700601600 ? 020060077614 ? 377000003007 +777337774000 ? 140377777777 ? 740006017777 ? 777777400300 ? 777774777774 ? 004017777717 +777700200777 ? 776377777014 ? 037777747777 ? 770200777777 ? 177777600017 ? 777763777774 +000377417776 ? 077700007770 ? 177701776002 ? 177403776017 ? 740141760037 ? 700176006037 +400776003740 ? 100770017740 ? 077004007600 ? 176001740300 ? 176003740077 ? 014003740077 +001760600037 ? 401760077010 ? 020777777777 ? 760001407777 ? 777777000060 ? 140000000060 +003003000000 ? 001400140060 ? 601403030002 ? 001414030060 ? 600100030000 ? 000014006000 +600000000300 ? 300017777777 ? 776014010377 ? 777777740600 ? 600000000000 ? 030030000000 +000001401400 ? 600300140060 ? 060030014006 ? 003000000000 + +143C: +600300140060 ? 030010014006 ? 003001400400 ? 600300140060 ? 030030014006 ? 003001401400 +600300140060 ? 060030014006 ? 003003001400 ? 600300140140 ? 060030014006 ? 006003001400 +600300300000 ? 060030000014 ? 000003001400 ? 000200000000 ? 000000010000 ? 000000000000 +600700000000 ? 007030017000 ? 000000360400 ? 370000000017 ? 400003601400 ? 140360002074 +030003007400 ? 140700300140 ? 160006016007 ? 007003400300 ? 340160160070 ? 004007403403 +403600200170 ? 070070074014 ? 003601601601 ? 700600034034 ? 034034030000 ? 700700700701 +401016016016 ? 016020060360 ? 360740740003 ? 007407417017 ? 000140170170 ? 360360006001 +601607007000 ? 100034037760 ? 160004000743 ? 777707400300 ? 017360007570 ? 014000376000 +037600600007 ? 777777774030 ? 020177777777 ? 701401403777 ? 777776020060 ? 077777777740 +003001777777 ? 777000140037 ? 476371760002 ? 000771747637 ? 400100017777 ? 777770006000 +377777777600 ? 300007777777 ? 774014000177 ? 777777700600 ? 600000000000 ? 030030000000 +000001401400 ? 600300140060 ? 060030014006 ? 003000000000 + +145C: +600300140060 ? 030010014006 ? 003001400400 ? 600300140060 ? 030030014006 ? 003001401400 +600300140060 ? 060030014006 ? 003003000000 ? 000000140140 ? 000000000006 ? 006000000000 +000300300000 ? 000000004014 ? 000760770370 ? 000200017417 ? 607600010000 ? 377777774000 +600407777777 ? 700030030177 ? 777776001401 ? 403777777740 ? 060060077777 ? 777003003001 +777777760140 ? 140037777777 ? 402006000007 ? 777000000300 ? 000177760000 ? 004000007777 +600000200200 ? 177774000014 ? 014007777740 ? 000600600177 ? 777000030030 ? 007777770001 +401400177777 ? 600060060007 ? 777776003003 ? 000177777740 ? 040140007777 ? 777400006000 +177777770000 ? 100007777777 ? 700004000177 ? 777776000300 ? 007777777760 ? 014000177777 +777400600407 ? 777777774030 ? 030177777777 ? 701401407777 ? 777777020060 ? 177777777760 +003003000000 ? 001400140060 ? 000000030002 ? 001400000000 ? 600100037777 ? 777774006000 +777777777700 ? 300017777777 ? 776014000377 ? 777777740600 ? 600000000000 ? 030030000000 +000001401400 ? 600300140060 ? 060030014006 ? 003000000000 + +147C: +600300140060 ? 030010014006 ? 003001400400 ? 600300140060 ? 030030014000 ? 003001401400 +600000140060 ? 060030000006 ? 003003001400 ? 000300140140 ? 060014000006 ? 006003000740 +000300300140 ? 037400014014 ? 006001774000 ? 600200300077 ? 740030010014 ? 003777401400 +600600177774 ? 020030030007 ? 777600001401 ? 400177770000 ? 060060007777 ? 400003003000 +177760000140 ? 140003777014 ? 006006000177 ? 741700300300 ? 103777177014 ? 004006077777 +760600200301 ? 777777410014 ? 014037777770 ? 000600600377 ? 777400030030 ? 007777770001 +401400177477 ? 600060060003 ? 771774003003 ? 000077007700 ? 140140040760 ? 174006006003 +017717700300 ? 100140376376 ? 014004006007 ? 747740600300 ? 300077776010 ? 014014001777 +740000600600 ? 037777000030 ? 030000377740 ? 001401400007 ? 777000060060 ? 000077740003 +003000001777 ? 000140140000 ? 017740000002 ? 000000377000 ? 000100000003 ? 740000006000 +000077000000 ? 300077777777 ? 777414001777 ? 777777770200 ? 600000000000 ? 030030000000 +000001401400 ? 600300140060 ? 060030014006 ? 003000000000 + +151C: +600300140060 ? 030010014006 ? 003001400400 ? 600300140060 ? 030030014006 ? 003001401400 +600300140060 ? 060030014006 ? 003003001400 ? 000300140140 ? 060000014006 ? 006003000000 +600300300140 ? 700010014014 ? 006017400000 ? 600200300376 ? 000030010014 ? 003770001400 +600600077740 ? 060030030003 ? 777401001401 ? 400177774000 ? 060060007777 ? 740003003000 +363777400140 ? 140017577774 ? 006006000777 ? 777700300300 ? 037777777004 ? 004000777777 +770000200037 ? 777777700014 ? 001777777776 ? 000600077777 ? 777760030001 ? 777777777401 +400077776777 ? 774060001777 ? 607777701002 ? 073770177777 ? 000141777003 ? 777760006017 +600177777400 ? 100160007777 ? 774004000000 ? 377777700300 ? 000017777776 ? 014000001777 +777760600000 ? 077777777410 ? 020007777777 ? 770001400377 ? 777777600060 ? 017777777774 +003001777777 ? 777700140077 ? 777777776002 ? 003777777777 ? 740100140000 ? 000003006003 +000000000060 ? 300077777777 ? 777414001777 ? 777777770200 ? 600000000000 ? 030030000000 +000001401400 ? 600300140060 ? 060030014006 ? 003000000000 + +153C: +600300140060 ? 030010014006 ? 003001400400 ? 600300140060 ? 030030014006 ? 003001401400 +600700140060 ? 060030030006 ? 003003001401 ? 400300140140 ? 060060014006 ? 006003003000 +600300300140 ? 140030014014 ? 006006000400 ? 600200300000 ? 000030010014 ? 000000001400 +600600001400 ? 060030030000 ? 176003001401 ? 400017770040 ? 060060000777 ? 700003003000 +017776000140 ? 140040777760 ? 006006003017 ? 777400300300 ? 140777774014 ? 004006017777 +700600200300 ? 177774030014 ? 014003777701 ? 400600600037 ? 774020030030 ? 000777700001 +401400007774 ? 000060060000 ? 077600003003 ? 001001774000 ? 140140060037 ? 700006006003 +001777000300 ? 100140037760 ? 014004006000 ? 777400600300 ? 300017770030 ? 014014000777 +700400600600 ? 017776000030 ? 030000377740 ? 001401400007 ? 777000060060 ? 000777774001 +003000077777 ? 760000140007 ? 777777700002 ? 000760000017 ? 400100036000 ? 000074006000 +777777777700 ? 300017777777 ? 776014010377 ? 777777740600 ? 600000000000 ? 030030000000 +000001401400 ? 600300140060 ? 060030014006 ? 003000000000 + +100C: +REPEAT 8, 0 +000000000001 ? 700000000000 ? 000022000000 ? 000000000440 +000000000000 ? 011000000000 ? 000007637000 ? 000000000100 ? 020000000000 ? 002000400000 +000000076370 ? 000000000000 ? 044000000000 ? 000701101600 ? 000000077622 ? 377000000007 +017476034000 ? 000300071600 ? 140000014000 ? 360001400000 ? 600003000014 ? 000010000060 +000100000600 ? 001400003000 ? 030000030000 ? 030000600000 ? 600000600010 ? 000014000004 +000200360001 ? 700100004004 ? 600062002000 ? 140304001060 ? 140001014140 ? 060602000020 +201001004040 ? 000604020020 ? 103000004140 ? 601406040000 ? 101004020101 ? 000003030100 +406060000020 ? 202010101000 ? 000777777777 ? 760000007777 ? 777777000000 ? 140000000060 +000003000000 ? 001400000060 ? 601403030000 ? 001414030060 ? 600000030000 ? 000014000000 +600000000300 ? 000017777777 ? 776000000377 ? 777777740000 +; PLUS 6 ZEROES TELESCOPED INTO NEXT CHAR + +102C: +REPEAT 22, 0 +000700000000 ? 007000013000 ? 000000320000 ? 330000000015 ? 400003201400 ? 140260000024 +030003005000 ? 000500300140 ? 120000012007 ? 007002400000 ? 240120120050 ? 000005402402 +403200000110 ? 050050044000 ? 003201201201 ? 300000024024 ? 024024000000 ? 500500500500 +000012012012 ? 012000000260 ? 260640640000 ? 004404411011 ? 000000150150 ? 260260000001 +201205005000 ? 000024027720 ? 120000000543 ? 777706400000 ? 011360007510 ? 000000236000 +036200000007 ? 777777774000 ? 000177777777 ? 700000003000 ? 000006000000 ? 060000000140 +000001400000 ? 003000000030 ? 301406060000 ? 000606030141 ? 400000014000 ? 000030000000 +300000000600 ? 000007777777 ? 774000000177 ? 777777700000 +; PLUS 6 ZEROES TELESCOPED INTO NEXT CHAR + +104C: +REPEAT 16, 0 +000760770370 ? 000000010410 ? 204200000000 ? 217607704000 +000004000000 ? 100000000100 ? 000002000000 ? 002000000040 ? 000000040000 ? 001000000001 +000000020000 ? 000037777777 ? 400000000006 ? 003000000000 ? 000140060000 ? 000000006000 +600000000000 ? 140014000000 ? 000006000140 ? 000000000140 ? 003000000000 ? 006000030000 +000000140000 ? 600000000006 ? 000006000000 ? 000140000140 ? 000000006000 ? 001400000000 +140000030000 ? 000006000000 ? 300000000140 ? 000006000000 ? 006000000060 ? 000000140000 +001400000006 ? 000000014000 ? 000140000000 ? 300000006000 ? 000003000000 ? 140000000060 +000002000000 ? 000400000077 ? 777777770000 ? 001000000000 ? 200000020000 ? 000004000000 +400000000100 ? 000017777777 ? 776000000377 ? 777777740000 +; PLUS 6 ZEROES TELESCOPED INTO NEXT CHAR + +106C: +REPEAT 12, 0 +000014000000 ? 000000000740 +000000000000 ? 031400000000 ? 000001414000 ? 000000000060 ? 140000000000 ? 003001400000 +000000140014 ? 000000000006 ? 000600000000 ? 000100030000 ? 000000006001 ? 400000000000 +100060000000 ? 000002003014 ? 000000000140 ? 041700000000 ? 002001163000 ? 000000040036 +020000000001 ? 000000400000 ? 000030000030 ? 000000000200 ? 000400000000 ? 004000010000 +000000100300 ? 200000000002 ? 006004000000 ? 000060770300 ? 000000000417 ? 604000000000 +010060100000 ? 000000201402 ? 000000000006 ? 030140000000 ? 000040002000 ? 000000001000 +040000000000 ? 030003000000 ? 000000200040 ? 000000000006 ? 003000000000 ? 000040040000 +000000001403 ? 000000000000 ? 010040000000 ? 000000303000 ? 000000000002 ? 040000000000 +000077000000 ? 000077777777 ? 777400001777 ? 777777770000 +; PLUS 6 ZEROES TELESCOPED INTO NEXT CHAR + +110C: +REPEAT 15, 0 +700000000000 ? 000017400000 ? 000000000316 ? 000000000000 ? 002070000000 +000000040340 ? 000000000003 ? 001400000000 ? 000140014000 ? 000000006000 ? 140000000000 +306001400000 ? 000014100014 ? 000000000600 ? 000100000000 ? 030000003000 ? 000000400000 +030000000030 ? 000000300000 ? 001400000002 ? 000000060000 ? 000060000001 ? 000160000400 +000060016600 ? 014000001000 ? 606000100000 ? 060070140003 ? 000001417003 ? 000020000017 +600140000400 ? 000160006000 ? 014000000000 ? 300000100000 ? 000014000002 ? 000000001600 +000060000000 ? 060000001400 ? 000007000000 ? 030000000300 ? 000000600000 ? 014000000014 +000001600000 ? 000300000060 ? 000000006000 ? 003000000000 ? 140000140000 ? 000003000003 +000000000060 ? 000077777777 ? 777400001777 ? 777777770000 +; PLUS 6 ZEROES TELESCOPED INTO NEXT CHAR + +112C: +REPEAT 22, 0 +000000001400 ? 000000000000 ? 176000000000 ? 000016070000 ? 000000000600 ? 300000000000 +010002000000 ? 000000600060 ? 000000000010 ? 000400000000 ? 000600014000 ? 000000014000 +300000000000 ? 100004000000 ? 000003000300 ? 000000000020 ? 004000000000 ? 000600300000 +000000007034 ? 000000000000 ? 077600000000 ? 000001004000 ? 000000000020 ? 100000000000 +001403000000 ? 000000030060 ? 000000000000 ? 400400000000 ? 000010010000 ? 000000000600 +300000000000 ? 010002000000 ? 000000200040 ? 000000000004 ? 001000000000 ? 000700034000 +000000070000 ? 160000000007 ? 000000700000 ? 000700000003 ? 400000030000 ? 000014000000 +600000000300 ? 000017777777 ? 776000000377 ? 777777740000 +; PLUS 6 ZEROES TELESCOPED INTO NEXT CHAR + +140C: +REPEAT 12, 0 +000014000000 ? 000000000300 +000000000000 ? 006000000000 ? 000000140000 ? 000000000077 ? 740000000000 ? 001777000000 +000000001400 ? 000000000000 ? 030000000000 ? 000700601600 ? 000000077614 ? 377000000007 +777337774000 ? 000377777777 ? 740000017777 ? 777777400000 ? 777774777774 ? 000017777717 +777700000777 ? 776377777000 ? 037777747777 ? 770000777777 ? 177777600017 ? 777763777774 +000377417776 ? 077700007770 ? 177701776000 ? 177403776017 ? 740001760037 ? 700176000037 +400776003740 ? 000770017740 ? 077000007600 ? 176001740000 ? 176003740077 ? 000003740077 +001760000037 ? 401760077000 ? 000777777777 ? 760000007777 ? 777777000000 ? 177777777760 +000003777777 ? 777400000077 ? 176374770000 ? 001763747717 ? 600000037777 ? 777774000000 +777777777700 ? 000017777777 ? 776000000377 ? 777777740000 +; PLUS 6 ZEROES TELESCOPED INTO NEXT CHAR + +142C: +REPEAT 22, 0 +000700000000 ? 007000017000 ? 000000360000 ? 370000000017 ? 400003601400 ? 140360000074 +030003007400 ? 000700300140 ? 160000016007 ? 007003400000 ? 340160160070 ? 000007403403 +403600000170 ? 070070074000 ? 003601601601 ? 700000034034 ? 034034000000 ? 700700700700 +000016016016 ? 016000000360 ? 360740740000 ? 007407417017 ? 000000170170 ? 360360000001 +601607007000 ? 000034037760 ? 160000000743 ? 777707400000 ? 017360007570 ? 000000376000 +037600000007 ? 777777774000 ? 000177777777 ? 700000003777 ? 777776000000 ? 077777777740 +000001777777 ? 777000000037 ? 476371760000 ? 000771747637 ? 400000017777 ? 777770000000 +377777777600 ? 000007777777 ? 774000000177 ? 777777700000 +; PLUS 6 ZEROES TELESCOPED INTO NEXT CHAR + +144C: +REPEAT 16, 0 +000760770370 ? 000000017417 ? 607600000000 ? 377777774000 +000007777777 ? 700000000177 ? 777776000000 ? 003777777740 ? 000000077777 ? 777000000001 +777777760000 ? 000037777777 ? 400000000007 ? 777000000000 ? 000177760000 ? 000000007777 +600000000000 ? 177774000000 ? 000007777740 ? 000000000177 ? 777000000000 ? 007777770000 +000000177777 ? 600000000007 ? 777776000000 ? 000177777740 ? 000000007777 ? 777400000000 +177777770000 ? 000007777777 ? 700000000177 ? 777776000000 ? 007777777760 ? 000000177777 +777400000007 ? 777777774000 ? 000177777777 ? 700000007777 ? 777777000000 ? 177777777760 +000003000000 ? 001400000060 ? 000000030000 ? 001400000000 ? 600000037777 ? 777774000000 +777777777700 ? 000017777777 ? 776000000377 ? 777777740000 +; PLUS 6 ZEROES TELESCOPED INTO NEXT CHAR + +146C: +REPEAT 12, 0 +000014000000 ? 000000000740 +000000000000 ? 037400000000 ? 000001774000 ? 000000000077 ? 740000000000 ? 003777400000 +000000177774 ? 000000000007 ? 777600000000 ? 000177770000 ? 000000007777 ? 400000000000 +177760000000 ? 000003777014 ? 000000000177 ? 741700000000 ? 003777177000 ? 000000077777 +760000000001 ? 777777400000 ? 000037777770 ? 000000000377 ? 777400000000 ? 007777770000 +000000177477 ? 600000000003 ? 771774000000 ? 000077007700 ? 000000000760 ? 174000000000 +017717700000 ? 000000376376 ? 000000000007 ? 747740000000 ? 000077776000 ? 000000001777 +740000000000 ? 037777000000 ? 000000377740 ? 000000000007 ? 777000000000 ? 000077740000 +000000001777 ? 000000000000 ? 017740000000 ? 000000377000 ? 000000000003 ? 740000000000 +000077000000 ? 000077777777 ? 777400001777 ? 777777770000 +; PLUS 6 ZEROES TELESCOPED INTO NEXT CHAR + +150C: +REPEAT 15, 0 +700000000000 ? 000017400000 ? 000000000376 ? 000000000000 ? 003770000000 +000000077740 ? 000000000003 ? 777400000000 ? 000177774000 ? 000000007777 ? 740000000000 +363777400000 ? 000017577774 ? 000000000777 ? 777700000000 ? 037777777000 ? 000000777777 +770000000037 ? 777777700000 ? 001777777776 ? 000000077777 ? 777760000001 ? 777777777400 +000077776777 ? 774000001777 ? 607777700000 ? 073770177777 ? 000001777003 ? 777760000017 +600177777400 ? 000160007777 ? 774000000000 ? 377777700000 ? 000017777776 ? 000000001777 +777760000000 ? 077777777400 ? 000007777777 ? 770000000377 ? 777777600000 ? 017777777774 +000001777777 ? 777700000077 ? 777777776000 ? 003777777777 ? 740000140000 ? 000003000003 +000000000060 ? 000077777777 ? 777400001777 ? 777777770000 +; PLUS 6 ZEROES TELESCOPED INTO NEXT CHAR + +152C: +REPEAT 22, 0 +000000001400 ? 000000000000 ? 176000000000 ? 000017770000 ? 000000000777 ? 700000000000 +017776000000 ? 000000777760 ? 000000000017 ? 777400000000 ? 000777774000 ? 000000017777 +700000000000 ? 177774000000 ? 000003777700 ? 000000000037 ? 774000000000 ? 000777700000 +000000007774 ? 000000000000 ? 077600000000 ? 000001774000 ? 000000000037 ? 700000000000 +001777000000 ? 000000037760 ? 000000000000 ? 777400000000 ? 000017770000 ? 000000000777 +700000000000 ? 017776000000 ? 000000377740 ? 000000000007 ? 777000000000 ? 000777774000 +000000077777 ? 760000000007 ? 777777700000 ? 000760000017 ? 400000036000 ? 000074000000 +777777777700 ? 000017777777 ? 776000000377 ? 777777740000 +REPEAT 6, 0 + + +ZTVCTB: MOVE A,Z61C(B) ; VACANT WHITE SQ ... THESE LABELS ARE SWAPPED WHITE FOR + MOVE A,Z153C(B) ; WP ON W SQ BLACK AS USED BY OCM + MOVE A,Z151C(B) ; WN ON W SQ + MOVE A,Z147C(B) ; WB ON W SQ + MOVE A,Z145C(B) ; WR ON W SQ + MOVE A,Z143C(B) ; WQ ON W SQ + MOVE A,Z141C(B) ; WK ON W SQ + MOVE A,Z113C(B) ; BP ON W SQ + MOVE A,Z111C(B) ; BN ON W SQ + MOVE A,Z107C(B) ; BB ON W SQ + MOVE A,Z105C(B) ; BR ON W SQ + MOVE A,Z103C(B) ; BQ ON W SQ + MOVE A,Z101C(B) ; BK ON W SQ + MOVEI A,0 ; VACANT BLACK SQ + MOVE A,Z152C(B) ; WP ON B SQ + MOVE A,Z150C(B) ; WN ON B SQ + MOVE A,Z146C(B) ; WB ON B SQ + MOVE A,Z144C(B) ; WR ON B SQ + MOVE A,Z142C(B) ; WQ ON B SQ + MOVE A,Z140C(B) ; WK ON B SQ + MOVE A,Z112C(B) ; BP ON B SQ + MOVE A,Z110C(B) ; BN ON B SQ + MOVE A,Z106C(B) ; BB ON B SQ + MOVE A,Z104C(B) ; BR ON B SQ + MOVE A,Z102C(B) ; BQ ON B SQ + MOVE A,Z100C(B) ; BK ON B SQ + +ZDSQ1: IMULI T,ZTVSQW*NWSCNL + MOVE D,REVERS(B) + EQVI B,(A) + TRNN B,1 + ADDI TT,15 + MOVSI B,-ZTVSQW + JRST @ZDSQD-1(D) + +ZDSQD: REPEAT 8,CONC ZDQS,\.RPCNT + +REPEAT 8,[ +CONC ZDQS,\.RPCNT,: + ZLBTBA== 1100-ZTVBBW-TVBDRW+ZTVSQW*.RPCNT ;BIT ADDRESS OF LEFT EDGE OF SQUARE + ZLBTWA== TVBBAS+NWSCNL*TVBDRW+ZLBTBA/40 ;WORD ADDRESS + ZLBN== 40-ZLBTBA+ ;# ACTIVE BITS IN ADDRESSED WD + ZLBS== 40-ZLBN ;# INACTIVE BITS AT LEFT OF ADR WD + +IFGE ZLBN-ZTVSQW,[ ;WILL FIT IN ONE WHACK +CONC ZTT,\.RPCNT,: + XCT ZTVCTB(TT) ; MOVE A,CHTAB(B) + DPB A,[<4+<32.-ZTVSQW>-ZLBS>_12.+ZTVSQW*100,,ZLBTWA(T)] + ADDI T,NWSCNL + AOBJN B, CONC ZTT,\.RPCNT, + POPJ P, +] +.ELSE [ +ZLWBTS==ZTVSQW-ZLBN ;NUMBER OF ACTIVE BITS IN LOW WORD +CONC ZTT,\.RPCNT,: + XCT ZTVCTB(TT) ;MOVE A,CHTAB(B) + DPB A,[<44-ZLWBTS>_12.+,,ZLBTWA+1(T)] ;DBP LOW BITS FIRST + ;(THESE ARE LEFT ADJUSTED) + LSH A,-ZLWBTS ;FLUSH THEM + DPB A,[4_12.+<*100>,,ZLBTWA(T)] ;THESE ARE RIGHT ADJUSTED + ADDI T,NWSCNL + AOBJN B,CONC ZTT,\.RPCNT, + POPJ P, +] +] + +ZDBRD: MOVSI A,-8*ZTVSQW ;WRITE BORDERS + SETO B, +ZDBRD1: DPB B,[TVBBAS+ZLEDGP(A)] + DPB B,[<4_12.>+,,TVBBAS+NWSCNL-1+NWSCNL*TVBDRW(A)] + ADDI A,NWSCNL-1 + AOBJN A,ZDBRD1 + SETCMI C,17 + MOVSI A,-ZNWBEDG +REPEAT TVBDRW, DPB B,[<4_12.>+,,TVBBAS+NWSCNL*.RPCNT+ZTVLWDS(A)] +REPEAT TVBDRW,[ + DPB B,[<4_12.>+,,TVBBAS+NWSCNL*.RPCNT+ZTVLWDS+ZTVBBW*NWSCNL+TVBDRW*NWSCNL(A)] +] +ZDBRD2: +REPEAT TVBDRW, MOVEM C,TVBBAS+NWSCNL*.RPCNT+ZTVLWDS+1(A) +REPEAT TVBDRW, MOVEM C,TVBBAS+NWSCNL*.RPCNT+ZTVLWDS+1+ZTVBBW*NWSCNL+TVBDRW*NWSCNL(A) + AOBJN A,ZDBRD2 + JRST ZTVBD + + +Z61C: 4141414141 ? 303030303 ? 606060606 ? 1414141414 ? 3030303030 ? 6060606060 + 4141414141 ? 303030303 ? 606060606 ? 1414141414 ? 3030303030 ? 6060606060 + 4141414141 ? 303030303 ? 606060606 ? 1414141414 ? 3030303030 ? 6060606060 + 4141414141 ? 303030303 ? 606060606 ? 1414141414 ? 3030303030 ? 6060606060 + 4141414141 ? 303030303 ? 606060606 ? 1414141414 ? 3030303030 ? 6060606060 + +Z100C: 0 ? 0 ? 0 ? 340000 ? 240000 ? 1670000 + 1010000 ? 1670000 ? 240000 ? 16247000 ? 61670600 ? 100340100 + 200100040 ? 200100040 ? 400100020 ? 400000020 ? 416007020 ? 421010420 + 221010440 ? 220420440 ? 210421040 ? 177777700 ? 100000100 ? 104102100 + 104102100 ? 100000100 ? 177777700 ? 0 ? 0 ? 0 + +Z101C: 4141414141 ? 303030303 ? 606000606 ? 1414341414 ? 3030243030 ? 6061670060 + 4141010141 ? 301670303 ? 600240006 ? 1416247014 ? 3061670630 ? 6100340100 + 4200100041 ? 200100043 ? 400100026 ? 400000020 ? 2416007020 ? 6421010420 + 4221010441 ? 220420443 ? 210421046 ? 1177777714 ? 3100000110 ? 6104102100 + 4104102101 ? 100000103 ? 577777706 ? 1400000014 ? 3000000030 ? 6060606060 + +Z102C: 0 ? 0 ? 0 ? 0 ? 0 ? 0 + 0 ? 0 ? 300000140 ? 340000340 ? 142004300 ? 143014300 + 141430300 ? 141430300 ? 141430300 ? 141430300 ? 61430600 ? 61430600 + 61350600 ? 63774600 ? 56007200 ? 77777600 ? 40000200 ? 42104200 + 42104200 ? 40000200 ? 77777600 ? 0 ? 0 ? 0 + +Z103C: 4141414141 ? 303030303 ? 606060606 ? 1414141414 ? 3030303030 ? 6000606000 + 4000000001 ? 3 ? 300000142 ? 340000340 ? 2142004300 ? 6143014300 + 4141430301 ? 141430303 ? 141430306 ? 141430304 ? 2061430600 ? 6061430600 + 4061350601 ? 63774603 ? 56007206 ? 77777614 ? 2040000210 ? 6042104200 + 4042104201 ? 40000203 ? 77777606 ? 14 ? 3000000030 ? 6060606060 + +Z104C: 0 ? 0 ? 0 ? 0 ? 0 ? 0 + 34343400 ? 23434400 ? 20000400 ? 20000400 ? 20000400 ? 37777400 + 1010000 ? 2004000 ? 2004000 ? 4002000 ? 4002000 ? 10001000 + 10001000 ? 20000400 ? 20000400 ? 40000200 ? 40000200 ? 40000200 + 77777600 ? 40000200 ? 77777600 ? 0 ? 0 ? 0 + +Z105C: 4141414141 ? 303030303 ? 606060606 ? 1400000014 ? 3000000030 ? 6000000020 + 4034343401 ? 23434403 ? 420000406 ? 1420000414 ? 3020000430 ? 6037777460 + 4001010001 ? 202004003 ? 602004006 ? 1404002014 ? 3004002030 ? 6010001060 + 4010001001 ? 20000403 ? 20000406 ? 1040000204 ? 3040000200 ? 6040000200 + 4077777601 ? 40000203 ? 77777606 ? 14 ? 2000000030 ? 6060606060 + +Z106C: 0 ? 0 ? 0 ? 0 ? 100000 ? 340000 + 420000 ? 1010000 ? 2010000 ? 2020000 ? 4040000 ? 4046000 + 4062000 ? 4002000 ? 4002000 ? 4002000 ? 4102000 ? 4342000 + 2104000 ? 2104000 ? 2004000 ? 1010000 ? 1010000 ? 420000 + 420000 ? 240000 ? 77777600 ? 0 ? 0 ? 0 + +Z107C: 4141414141 ? 303030303 ? 606000606 ? 1414001414 ? 3030100030 ? 6060340060 + 4140420141 ? 301010303 ? 602010006 ? 1402020014 ? 3004040030 ? 6004046060 + 4104072141 ? 304002103 ? 604002006 ? 1404002014 ? 3004102030 ? 6004342060 + 4142104141 ? 302104303 ? 602004006 ? 1401010014 ? 3001010030 ? 6000420060 + 4000420001 ? 240003 ? 77777606 ? 0 ? 2000000000 ? 6060606060 + +Z110C: 0 ? 0 ? 0 ? 0 ? 0 ? 0 + 3600000 ? 1140000 ? 1020000 ? 2010000 ? 4404000 ? 10402000 + 20001000 ? 40000400 ? 100000400 ? 100600200 ? 203100200 ? 214100200 + 160200100 ? 400100 ? 1000100 ? 6000040 ? 10000040 ? 60000040 + 100000040 ? 200000040 ? 377777740 ? 0 ? 0 ? 0 + +Z111C: 4141414141 ? 303030303 ? 606060606 ? 1414001414 ? 3030003030 ? 6060000060 + 4143600141 ? 301140303 ? 601020206 ? 1402010014 ? 3004404030 ? 6010402060 + 4020001001 ? 40000403 ? 100000406 ? 100600214 ? 203100210 ? 4214100200 + 4160200101 ? 400103 ? 1000106 ? 6000040 ? 2010000040 ? 6060000040 + 4100000041 ? 200000043 ? 377777746 ? 0 ? 2000000000 ? 6060606060 + +Z112C: 0 ? 0 ? 0 ? 0 ? 0 ? 0 + 0 ? 0 ? 340000 ? 1430000 ? 1010000 ? 2004000 + 2004000 ? 2004000 ? 1010000 ? 1010000 ? 760000 ? 420000 + 420000 ? 1010000 ? 1010000 ? 1010000 ? 1010000 ? 6006000 + 30001400 ? 40000200 ? 77777600 ? 0 ? 0 ? 0 + +Z113C: 4141414141 ? 303030303 ? 606060606 ? 1414141414 ? 3030303030 ? 6060606060 + 4140000141 ? 300000303 ? 600340606 ? 1401430014 ? 3021010030 ? 6062004060 + 4142004141 ? 302004303 ? 601010206 ? 1401010014 ? 3020760030 ? 6060420060 + 4140420141 ? 301010303 ? 601010206 ? 1401010014 ? 3001010030 ? 6006006000 + 4030001401 ? 40000203 ? 77777606 ? 1000000014 ? 3000000030 ? 6060606060 + +Z140C: 0 ? 0 ? 0 ? 0 ? 100000 ? 100000 + 760000 ? 760000 ? 100000 ? 16107000 ? 77537600 ? 177777700 + 377677740 ? 377677740 ? 777677760 ? 777777760 ? 761770760 ? 760760760 + 340760340 ? 340340340 ? 360340740 ? 177777700 ? 177777700 ? 173675700 + 173675700 ? 177777700 ? 177777700 ? 0 ? 0 ? 0 + +Z141C: 4141414141 ? 303030303 ? 606000606 ? 1414001414 ? 3030100030 ? 6060100060 + 4140760001 ? 300760003 ? 600100006 ? 1416107000 ? 3077537600 ? 6177777700 + 4377677741 ? 377677743 ? 777677760 ? 777777760 ? 761770760 ? 4760760760 + 4340760341 ? 340340343 ? 360340746 ? 177777700 ? 2177777700 ? 6173675700 + 4173675701 ? 177777703 ? 177777706 ? 1000000014 ? 3000000030 ? 6060606060 + +Z142C: 0 ? 0 ? 0 ? 0 ? 0 ? 0 + 0 ? 0 ? 300000140 ? 340000340 ? 342004340 ? 143014300 + 141430300 ? 141430300 ? 141430300 ? 141430300 ? 61430600 ? 61430600 + 61770600 ? 63774600 ? 76007600 ? 77777600 ? 77777600 ? 75673600 + 75673600 ? 77777600 ? 77777600 ? 0 ? 0 ? 0 + +Z143C: 4141414141 ? 303030303 ? 606060606 ? 1414141414 ? 3030303030 ? 6000606000 + 4000000001 ? 3 ? 300000142 ? 340000340 ? 2342004340 ? 6143014300 + 4141430301 ? 141430303 ? 141430306 ? 141430304 ? 2061430600 ? 6061430600 + 4061770601 ? 63774603 ? 76007606 ? 77777614 ? 2077777610 ? 6075673600 + 4075673601 ? 77777603 ? 77777606 ? 14 ? 3000000030 ? 6060606060 + +Z144C: 0 ? 0 ? 0 ? 0 ? 0 ? 0 + 34343400 ? 37777400 ? 37777400 ? 37777400 ? 37777400 ? 3774000 + 1770000 ? 3774000 ? 3774000 ? 7776000 ? 7776000 ? 17777000 + 17777000 ? 37777400 ? 37777400 ? 77777600 ? 77777600 ? 40000200 + 40000200 ? 77777600 ? 77777600 ? 0 ? 0 ? 0 + +Z145C: 4141414141 ? 303030303 ? 606060606 ? 1400000014 ? 3000000030 ? 6000000020 + 4034343401 ? 37777403 ? 437777406 ? 1437777414 ? 3037777430 ? 6003774000 + 4001770001 ? 203774003 ? 603774006 ? 1407776014 ? 3007776030 ? 6017777000 + 4017777001 ? 37777403 ? 37777406 ? 1077777614 ? 3077777610 ? 6040000200 + 4040000201 ? 77777603 ? 77777606 ? 14 ? 3000000030 ? 6060606060 + +Z146C: 0 ? 0 ? 0 ? 0 ? 100000 ? 340000 + 760000 ? 1770000 ? 3770000 ? 3760000 ? 7740000 ? 7706000 + 7776000 ? 7776000 ? 7776000 ? 7776000 ? 7676000 ? 7436000 + 3674000 ? 3674000 ? 3774000 ? 1774000 ? 1770000 ? 760000 + 760000 ? 340000 ? 77777600 ? 0 ? 0 ? 0 + +Z147C: 4141414141 ? 303030303 ? 606000606 ? 1414001414 ? 3030100030 ? 6060340060 + 4140760141 ? 301770303 ? 603770006 ? 1403760014 ? 3007740030 ? 6007706060 + 4107776141 ? 307776103 ? 607776006 ? 1407776014 ? 3007676030 ? 6007436060 + 4143674141 ? 303674303 ? 603774006 ? 1401774014 ? 3001770030 ? 6000760060 + 4000760001 ? 340003 ? 77777606 ? 0 ? 2000000000 ? 6060606060 + +Z150C: 0 ? 0 ? 0 ? 0 ? 0 ? 0 + 3600000 ? 1740000 ? 1760000 ? 3770000 ? 7374000 ? 17376000 + 37777000 ? 77777400 ? 177777400 ? 177777600 ? 377177600 ? 374177600 + 160377700 ? 777700 ? 1777700 ? 7777740 ? 17777740 ? 77777740 + 177777740 ? 300000140 ? 377777740 ? 0 ? 0 ? 0 + +Z151C: 4141414141 ? 303030303 ? 606060606 ? 1414001414 ? 3030003030 ? 6060002060 + 4143600141 ? 301740303 ? 601760206 ? 1403770014 ? 3007374030 ? 6017376060 + 4037777001 ? 77777403 ? 177777406 ? 177777614 ? 377177610 ? 4374177600 + 4160377701 ? 777703 ? 1777706 ? 7777740 ? 2017777740 ? 6077777740 + 4177777741 ? 300000143 ? 377777746 ? 0 ? 2000000000 ? 6060606060 + +Z152C: 0 ? 0 ? 0 ? 0 ? 0 ? 0 + 0 ? 0 ? 340000 ? 1770000 ? 1770000 ? 3774000 + 3774000 ? 3774000 ? 1770000 ? 1770000 ? 760000 ? 760000 + 760000 ? 1770000 ? 1770000 ? 1770000 ? 1770000 ? 7776000 + 37777400 ? 60000600 ? 77777600 ? 0 ? 0 ? 0 + +Z153C: 4141414141 ? 303030303 ? 606060606 ? 1414101414 ? 3030203030 ? 6060406060 + 4140000141 ? 300000303 ? 600340606 ? 1401770014 ? 3001770030 ? 6043774060 + 4143774141 ? 303774303 ? 601770206 ? 1401770014 ? 3000760030 ? 6040760060 + 4140760141 ? 301770303 ? 601770206 ? 1401770014 ? 3001770030 ? 6007776000 + 4037777401 ? 60000603 ? 77777606 ? 1000000014 ? 3000000030 ? 6060606060 +] + + diff --git a/src/chprog/ocdis.21 b/src/chprog/ocdis.21 new file mode 100755 index 00000000..f79e249c --- /dev/null +++ b/src/chprog/ocdis.21 @@ -0,0 +1,118 @@ +IFE TS+DECTS,[ + +DIS1: 0 + IDIVI A,10. + JSR DISC + IDIVI A,6. + JSR DISC + MOVEI B,":-"0 + JSR DISC + JRST @DIS1 + +DISC: 0 + ADDI B,"0 + DPB B,DISIP + MOVE B,DISIP + ADD B,[60000,,] + SKIPGE B + SUB B,[440000,,1] + MOVEM B,DISIP + JRST @DISC + +APREX: MOVE A,CASAVE + MOVE B,CBSAVE +APREX1: CONO 1000+APRCHN + JRST 12,@IAPRBRK + +DISL2: 20156220054 + 61200274040 +WNUM: 607260607260 + 605660343337 + 20000 + 61200024040 +BNUM: 607260607260 + 605660373737 + 3000,, +] +IFN DSPLY,[ +FONT: 1 ;FONT ON TV. 0-> 50. WIDE BIG, 1-> 30. WIDE SMALL +FFANCY: -2 +FANCY: PUSHJ P,GETNUM +FANSET: MOVE A,FFANCY ;OLD VALUE + MOVEM C,FFANCY + CLEARM TOPVP + CAILE C,2 + JRST FFANTV + CAILE A,2 + PUSHJ P,TVBOFF ;FLUSH TV PAGES + AOJL C,PSRET ;NO DISPLAY + MOVEI C,11. + MOVEM C,TOPVP + PUSHJ P,TOS + PUSHJ P,DISUP + JRST PSRET + +FFANTV: PUSHJ P,TVDINI + PUSHJ P,DBRD + SKIPGE TVFLG + .CALL [ SETZ ;FLUSH ECHOING OF CR, LF, AND TAB + SIXBIT /TTYSET/ + 1000,,TYIC + [232323232323] + SETZ [230323032323]] + JFCL + POPJ P, + +TVBOFF: CLEARM TVFLG + .CALL [ SETZ ;ECHO CR, LF AND TAB AS NORMAL + SIXBIT /TTYSET/ + 1000,,TYIC + [232323232323] + SETZ [232323232323]] + .VALUE +TVBCLR: MOVE A,[-10,,TVBBAS/2000] ;FLUSH VIDEO BUFFER PAGES + .CALL [ SETZ + SIXBIT /CORBLK/ + 1000,,0 + 1000,,-1 + SETZ A] + .VALUE + POPJ P, + +DISUP: +IFN TS,[ + MOVE A,FFANCY + CAILE A,2 + JRST INCD ;DO INCR UPDATE OF TV BOARD + SKIPL TTYOFF + SKIPL GETTY + POPJ P, ;NO DISPLAY + HRROI B,TYO1 + .IOT TYOC,[^P] + .IOT TYOC,["S] ;SAVE CURSOR POSITION + .IOT TYOC,[^P] + .IOT TYOC,["T] + .IOT TYOC,[^P] + .IOT TYOC,["L] + PUSHJ P,.DISBD + .IOT TYOC,[^P] + .IOT TYOC,["R] ;RESTORE CURSOR POSITION + POPJ P, +] +.DISBD: SKIPLE FFANCY + SOUT [ASCII / !/] ;3 TAB'S + MOVE A,PLYN + TRNE A,1 + SOUT [ASCII /BLACK!/] + TRNN A,1 + SOUT [ASCII /WHITE!/] + SOUT [ASCII / TO MOVE + +!/] +.DISB1: SKIPE FFANCY + PUSHJ P,BDOUT +DISUP3: POPJ P, + + +.INSRT OCDAGB > +] diff --git a/src/chprog/ocm.470 b/src/chprog/ocm.470 new file mode 100755 index 00000000..70d1be06 --- /dev/null +++ b/src/chprog/ocm.470 @@ -0,0 +1,10617 @@ + +.SYMTAB 10000. +.MLLIT==1 +NEWPLS==0 ;USE NEW PLAUSIFER +TITLE CHESS C + +.XCREF ZR,A,B,C,D,T,TT,R,Q,I,J,S,T1,T2,W,P + +KLNTS==0 ;KL10 NON TS +DBG==1 ;0 TO FLUSH SELF CHECKING AND SOME DEBUGGING ROUTINES +KILLH==0 ;0 NO KILL HEURSTIC 1 KILL HEURSTIC +HSCOD==1 ;HASH CODE FEATURE +BOOK==1 ;INCLUDE CODE FOR BOOK OPENINGS +UTAPE==1 ;INCLUDE UTAPE ROUTINES +DSPLY==1 ;INCLUDE DISPLAY (TS OR NO) +DECTS==0 +DEC==0 +CHEOPS==1 ;INCLUDE STUFF FOR CHEOPS SPECIAL PURPOSE CHESS PROCESSOR + ; (THIS WINS, OF COURSE, ONLY ON AI MACHINE IN TS) +CHNET==1 ;--NOW CAN NOW WIN IN BUFFERED MODE ON "ANY" MACHINE WITH + ; CHAOS NET CONNECTION TO CHEOPS. + CHHSTN==434 ;CHAOSNET HOST NUMBER TO USE +CMFLAG==0 ;TELL .INSRT FILES THEY ARE IN OCM (NOT CM, ETC) + +TS==1 ;0 FOR NON TS +IFN KLNTS,[ + TS==0 + UTAPE==0 + DSPLY==0 + BOOK==0 + + PAG==10 ;PAGING DEVICE + CCA==14 ;CACHE SWEEPING DEVICE + TIM==20 ;TIMER + MTR==24 ;METER + + EPT==0 ;EXEC PAGE TABLE + .INSRT SYSTEM; EPT > +] + +IFE TS+KLNTS,RELOCATABLE +IFN TS,[DEC==1 +UTAPE==1] + +IFN DECTS,[ +.DECREL +DEC==1 +TS==0 +DSPLY==0 +DECASA==140 +] + + +IF1 [ EXPUNGE MOVST] ;CRUFTY KL-10 STRING INSTRUCTION + +LOC 100 + + +IFN KLNTS+DECTS,[ +LOC 20000 + JRST GO +] +IFE DEC+TS+KLNTS,[ +IRPS A,,PILPT LINEPOS LPTWAT + .GLOBAL A + .LIBRQ A + TERMIN +IRPS A,,A P LPTCHN LPTBSZ + .GLOBAL A + TERMIN +] + +ZR=0 +A=1 +B=2 +C=3 +D=4 +T=5 +TT=6 +R=7 +Q=10 +I=11 +J=12 +S=13 +T1=14 +T2=15 +W=16 +P"=17 + +PDLL=10000. + +;MOVE FORMAT ON PDL +;WD1 LH SQUARE RH PIECE (NORMAL HACK FOR O-O ETC) +;WD2 PLAUSIBILITY +;WD3 4.9 ALWAYS INVESTIGATE 3.1 BAD DEV RH NUMBER FORCES +; 4.8 MOVE IS A FORK (IE LMFORS >1) +;4.7 MOVE DISCOVERS AN IMPORTANT ATTACK (LMFOR) + +BMTHR==200000 +BIDSF==100000 + +;PIN TABLE ENTRY +;WD1 LINK 4.9 TO K +;WD2 4.9-4.4 ATTACKING PIECE +PINATP==360600 +;4.3-3.5 PINNED SQUARE (OCC BY PIECE WHICH IS PINNED) +PINOPS==261000 +;3.1-3.4 PIN DIRECTION +PINDIR==220400 +;1.1-1.6 PIN BASE SQUARE +PINBS==700 +;BIT 2.9 USED IN IC CHECKER +DPBIT==200000 ;PIN BY DOUBLED P +BPDPB==200100 ;BYTE PNTR TO ABOVE SET ON PIN BY DOUBLED PIEECES + +LPINE==2 ;WORDS IN PIN ENTRY +LPINDT==30.*2 ;MAX NUMBER OF ACTIVE PINS + +;ASSORTED OUTPUT UUO'S +PTTY=1000,, +SOUT=2000,, +ERRTTY=3000,, +;UUOS 4-12 USED FOR PLS MOVE TRACE +ISOUT=13000,, ;LIKE SOUT BUT INTERPRET * FROBS ETC +TSOUT==14000,, ;LIKE ISOUT, BUT OUTPUT TO TRACE BUFFER AREA (FOR USE IN TP, ETC) +;CHEOPS UUOS +IFN CHEOPS,[ +HLUUO==TSOUT+<1000,,> ;LOWEST CHEOPS UUO +HXCT==HLUUO ;PUT INST POINTED TO BY E IN CHEOPS IR AND XCT IT +HLOAD==HXCT+<1000,,> ;AC HAS LOAD SELECT CODE, DATA IN C(E). STORES DATA IN CHEOPS +HSTORE==HLOAD+<1000,,> ;AS HAS MUX SELECT CODE, DATA READ FROM THERE INTO E +HLOADIR==HSTORE+<1000,,>;PUT INST POINTED TO BY E INTO CHEOPS IR +HSOUT==HLOADIR+<1000,,> ;CHEOPS STRING OUTPUT +HHUUO==HSOUT ;HIGHEST CHEOPS UUO + +CBABL==40 ;LOCATION IN CHEOPS ES BUFFER MEMORY OF HIGH-PRIORITY ARG BLOCK + ; (USE THIS CONSTANT +HBMEM TO ADDRESS BLOCK FROM 10) +CBBBL==100 ;FIRST LOCN IN BUFFER MEM TO USE FOR BACKGROUND BLOCK + +] + +IFE DEC,[ + HSTB=200000 ;IF AT HACK USE MOBY TABLE IN MOBY MEMORY + HTNE=100000 ;MUST BE A POWER OF 2 + HSTBV=HSTB+HTNE + HSTBL=HSTB+2*HTNE +] + +IFE DECTS,IFN DEC,HTNE=40000 +IFN DECTS,HTNE=400 +HSHMSK==HTNE-1 + +IFN BOOK,[BMXS==600. ;MAX NO TAGS + BKSS==22000. ;NO BYTES IN ACTUAL BOOK +] + +IFN DECTS,[ +BKSS=5900. +BXMS==85. +] +DEFINE RC A,B/ + RCSTO \.+1,A,\NRMM,ZZ + NRMM==NRMM+1 + B + TERMIN + +DEFINE RCSTO A,B,C,D + DEFINE D!C + A,,[.ASCII ?B?] + TERMIN + TERMIN + +DEFINE RS A,B/ + RCSTO \.+1,A,\NSMM,ZQ + NSMM==NSMM+1 + B + TERMIN + +DEFINE RT A,B/ + RCSTO \.+1,A,\NTMM,ZW + NTMM==NTMM+1 + B + TERMIN + +NRMM==0 ;NUMBER REMOTE MACROS OF FORM ZZ... +NSMM==0 ;NUMBER REMOTE MACROS OF FORM ZQ... +NTMM==0 ;NUMBER REMOTE MACROS OF FORM ZW... + +DEFINE FIX A +.ZZQ==A + MULI .ZZQ,400 + TSC .ZZQ,.ZZQ + ASH .ZZQ+1,-243(.ZZQ) +TERMIN + +DEFINE FLOAT A +.ZZQ==A + TLC .ZZQ,232000 + FAD .ZZQ,.ZZQ +TERMIN + +DEFINE MMSAVAC + MOVEM 16,CATCSA+16 + MOVEI 16,CATCSA + BLT 16,CATCSA+15 +TERMIN + +DEFINE MMRSAC + MOVSI 16,CATCSA + BLT 16,16 + TERMIN + +;SUMMARY OF ARRAYS AFFECTED BY MOVE AND UNMOVE + +;PIECE (PIECE NUMBER) + ;4.9=BLACK 3.6-3.8=TYPE OF PIECE + ;1.1-2.9=ADR OF "MM" ROUTINE OR ZERO IF PIECE NON EXTANT + +;NMOVES (PIECE NUMBER) + ;=NUMBER OF MOVES MADE SO FAR + +;NMKING (SIDE) + ;0=>UNCASTLED 1=>CASTLED + +;NUMORP (SIDE) + ;=NUMBER OF ORTHAGONALLY SLIDING PIECES + +;PCATV (PIECE NUMBER) + ;3.1-4.9=1 + ;1.1-2.9=1 FOR K, 2 FOR Q, 3 FOR R, 4 FOR B, 5 FOR N, 6 FOR P + +;RPIECE (PIECE NUMBER) + ;4.9=KING + +;BOARD (SQUARE NUMBER) + ;-1=>OFF BOARD + ;0=>EMPTY + ;>0=POINTER INTO PIECE ARRAY + +;PIECEL (PIECE NUMBER) + ;FOR EXISTANT PIECES THEIR SQUARE NUMBER + +;RFPCS (PIECE NUMBER) + ;4.9=ORTHAGONALLY SLIDING + +;DDPCS (PIECE NUMBER) + ;4.9=DIAGONALLY SLIDING + +;SLDPC (PIECE NUMBER) + ;4.9=SLIDING + +;PVALUE (PIECE NUMBER) + ;=VALUE OF PIECE + +;RPVAL (PIECE NUMBER) + ;=REAL VALUE OF PIECE + +;PCBAL (SIDE) + ;TOTAL MATERIAL (K=600) + +;LMGT (PIECE NUMBER) + ;4.9=PAWN + ;1.1-2.9=ADR OF "LM" ROUTINE + +;LMGSTD (PIECE NUMBER) + ;4.9=WHITE PAWN + ;1.1-2.9=ADR OF "LM" OR "LS" ROUTINE + +;SNFBP (PIECE NUMBER) + ;4.9=BLACK PAWN + +;PLPWN (PIECE NUMBER) + ;PLY AT WHICH PAWN WAS PROMOTED OR -1 + +;ASSOCIATED WITH BOARD CONTROL HACK +;NWK BOARD SIZE JFCL EXCEPT ADD C,NSKI FOR +;SQUARES IN 8 NEIGHBORHOOD OF WK. +;NBK SAME FOR NEAR BK +;PINVF VALUE INV. PROPORTIONAL TO PIECE VALUE + +;RMDTB (PIECE NUMBER) +;DISPATCH FOR INCREMENTAL UPDATING ROUTINES +;SIGN SET FOR BISHOPS + +;SUMMARY OF ARRAYS SET BY CAT + +;BDBLK (SQUARE NUMBER) + ;BLOCKING DATA + +;ONEB (SQ N) + ;POTENTIAL PIN DATA ETC + ;SQUARE NUMBER OF FIRST OBSTRUCTION A SLIDING PIECE HITS FROM THAT SQUARE TO + ;SECOND OBSTRUCTION + +;PPASED (PIECE NUMBER) + ;4.9=PASSED PAWN BLOCKED BY FRIENDLY PAWN + ;1.1-2.9=RANK IF PASSED PAWN,0 OTHERWISE + +;PPTP (PIECE NUMBER) + ;-1=>PAWN DEFENDED BY PAWN + ;1=>FORWARD, 2=>BACKWARD, 3=>ISOLATED PAWN + ;0 OTHERWISE + +;WPNFLS (FILE) + ;=NUMBER OF WHITE PAWNS + +;BPNFLS (FILE) + ;=NUMBER OF BLACK PAWNS + +;WNPNFL (FILE) + ;=NUMBER OF NON PASSED WHITE PAWNS + +;BNPNFL (FILE) + ;=NUMBER OF NON PASSED BLACK PAWNS + +;PINT (PIECE NUMBER) + ;PIN DATA + +;BDA1, BDA2, AND BDA3 (SQUARE NUMBER) + ;ATTACK DIRECTION DATA + +;BA (SQUARE NUMBER) + ;=BLACK ATTACKS + +;WA (SQUARE NUMBER) + ;=WHITE ATTACKS + + +;SUMMARY OF MISCELLANEOUS ARRAYS + +;NSM (PIECE NUMBER) + ;=NUMBER OF APPARENTLY SAFE MOVES AVAILABLE + +;PNTB (PIECE NUMBER) + ;=BYTE POINTER TO BIT IN BPCSOP + +;NPODT (PIECE NUMBER) + ;BYTE POINTER TO BIT IN NPODBT(C) + +;NPOD (PIECE NUMBER) + ;=NUMBER OF ATTACKED PIECES GIVEN PIECE IS ONLY DEFENDER OF + +;NPODBT (PIECE NUMBER) + ;BITS FOR NPOD + +;BPREL (SQUARE NUMBER) + ;4.1-4.9=FILE NUMBER + ;3.1-3.9=RANK NUMBER + ;2.1-2.9=POSITIVE DIAGONAL NUMBER + ;1.1-1.9=NEGATIVE DIAGONAL NUMBER + +;CDEVT (PIECE NUMBER) + ;CURRENT DEVELOPMENT VALUE + +;ASSIGNMENTS IN PIECE ARRAY + +NPC==32. +NPCS==16. +BD2==12.*10. +BW==10. +PTID==270300 + +PID==0 +KNID==1 +BID==2 +RID==3 +QID==4 +KID==5 + +LGAME==300. ;MAX LENGTH OF GAME IN PLYS + +;BOARD ORG. +; WHITE +; -1 ... +; -1 ... +; -1 WKR1 WKN1 ... -1 +; .. + + +;STANDARD INTERNAL MOVE FORMAT + +;4.9 =0 NO CAPT 1 = CAPT +;4.8 =0 WHITE =1 BLACK +;4.7-4.2 =NO OF MOVING PIECE 6 BITS +;4.1 3.4 =ORG SQUARE 7 BITS +;3.3 2.7 =CAP PIECE 6 BITS +;1.9 2.6 DESTIN SQ 7 BITS +;1.8 1 IF MOVE A CHECK +;1.4 1.7 GHOST ELIM 4 BITS +; IF WHITE MOVES, SQUARE IS 2*BW+5*BW+N+1 +; IF BLACK MOVES, 2*BW+2*BW+N+1 +;1.1 1.3 0 - 1 O-O 2 O-O-O 3 EP +;4 PROMOTED TO QUEEN 5 ROOK 6 BIS 7 KNT + + +;HASH TABLE FORMAT + +;HSTB +;1 WD KEY 1.1=0 WHITE TO MOVE 1 BLACK + +;HSTBV +HTVCOD==410300 ;RH VALUE 4.9 4.7 INFO CODE 0 ACTUAL POS VALU + ;1 ACTUAL VALUE IS >= THIS VALUE(BETTER FOR SIDE TO MOVE) + ;2 ACT VALUE IS <= THIS VALUE(WORSE FOR SIDE TO MOVE) + ;3 POSITION REACHED IN GAME + ;4 POSITION PENDING IN CURRENT SEARCH + ;5 POSITION MARKED IN BY CHEOPS + ;6 POSITION MARKED OUT BY CHEOPS + ;REST LH PLYS DEEP THIS INFO BASED ON 0- STATEV 69 ACT GAME +HNPLB==220400 ;PLIES DEEP FIELD +MHPLN==15. ;LARGEST # IN ABOVE. +;HSTBL +;RH LINK TO PRINC VARIATION IN HASH TBL OR -1 +HSTPON==310700 ;SQ OF PC TO MOVE (PRINC VAR) +HSTSQN==220700 ;SQ TO MOVE TO, 1- O-O 2- O-O-O +HSTPRN==400300 ;SPECIAL MOVE BITS + +;OPENING BOOK FORMAT + +;6 BIT BYTES, 77=E 76=T (NEXT 2 CHRS GIVE TAG NO TRANSFERRED TO) +;75 MOVE >= ADD 75 TO NEXT CHR UNLESS IT IS A 75 ETC +;REST = NO OF MOVE AS GEN BY PLAUS MOVE GEN PRIOR TO SORT +;BOOK SYM TAB FIRST BLOCK BKSMT 6 BIT SYM +;SECOND BKSMTV RH=CHR ADR LH=DEPTH ALONG TREE + +;MACRO FOR ASSEMBLING WORDS WITH VARIOUS BITS SET +DEFINE BIT A/ +ZZ==0 +IRPS Q,CC,[A] +IFSE [CC]+,ZZ=ZZ+Q +.ELSE ZZ==ZZ+_- +TERMIN +ZZ +TERMIN + +DEFINE CONC A,B +A!B!TERMIN + +DEFINE FLT A +<.OP FADR <.OP TLC A 233000 > 0 >TERMIN + +;MACRO FOR TAGING ARRAYS OFFSET BY ONE +DEFINE PP A +IRPS Z,,A + Z=.-1 + TERMIN + TERMIN + +;SYMBOLIC BYTE POINTERS INTO STANDARD MOVE FORMAT +MPC=340600 +MPO=250700 +MPTK=170600 +MPTO=100700 +MGHEL=30400 +CHKBT==200 + +PTIDS=320400 +SBRLNG==40 ;SEARCH WIDTH VECTOR LENGTH + +NWDPM==4 ;# WDS PER MODE ON PDL + + +PP PIECE:, +OPIECE: REPEAT 2,[ +ZZ=1 + REPEAT 8,0 PID,MMWPWN ;WHITE +IFE .RPCNT,WKR: + <_3+RID>_23.+MMRK +ZZ=ZZ+1 + 0 KNID,RMWN + <_3+BID>_23.+MMBS +ZZ=ZZ+1 +IFE .RPCNT,WKING: + 0 KID,RMWK + <_3+QID>_23.+MMQN +ZZ=ZZ+1 + <_3+BID>_23.+MMBS +ZZ=ZZ+1 + 0 KNID,RMWN +IFE .RPCNT,WQR: + <_3+RID>_23.+MMRK +ZZ=ZZ+1 + +IFE .RPCNT, BPIECE: BPV=.-PIECE + + REPEAT 8,SETZ PID,MMBPWN ;BLACK +IFE .RPCNT,BKR: + SETZ+<_3+RID>_23.+MMRK +ZZ=ZZ+1 + SETZ KNID,RMBN + SETZ+<_3+BID>_23.+MMBS +ZZ=ZZ+1 +IFE .RPCNT,BKING: + SETZ KID,RMBK + SETZ+<_3+QID>_23.+MMQN +ZZ=ZZ+1 + SETZ+<_3+BID>_23.+MMBS +ZZ=ZZ+1 + SETZ KNID,RMBN +IFE .RPCNT,BQR: + SETZ+<_3+RID>_23.+MMRK +ZZ=ZZ+1 +] + +PP NMOVES:, BLOCK NPC ;NUMBER OF MOVES FOR EACH PIECE + +NMKING: 0 ;0=UNCASTLED 1=CASTLED FOR WHITE + 0 ;FOR BLACK + +NUMORP: 3 ;NUMBER OF ORTHAGONALLY SLIDING PIECES FOR WHITE + 3 ;FOR BLACK + +BDAST: 0 ;MAPS COMPACTED CODE USED IN BDBLK TO PIECE NUMBER + REPEAT 2,[ + IRP A,,[WKR,WKR+2,WKING+1,WKING+2,WQR] + A+NPCS*.RPCNT-PIECE +TERMIN +] + LOC BDAST+20 + + +PP PCATV:, REPEAT 32.,1 + + +PP RPIECE:, REPEAT 2,[ + REPEAT 11.,0 ;SIGN NEG FOR KINGS + SETZ + REPEAT 4,0 +] + + +TXTB: ASCII /WP!/ + ASCII /WN!/ + ASCII /WB!/ + ASCII /WR!/ + ASCII /WQ!/ + ASCII /WK!/ + + ASCII /BP!/ + ASCII /BN!/ + ASCII /BB!/ + ASCII /BR!/ + ASCII /BQ!/ + ASCII /BK!/ + +TXTB1: ASCII /P!/+"P + ASCII /N!/+"N + ASCII /B!/+"B + ASCII /R!/+"R + ASCII /Q!/+"Q + ASCII /K!/+"K + +TXTB3: 112 ;FOR XGP + 110 + 106 + 104 + 102 + 100 + 152 + 150 + 146 + 144 + 142 + 140 + +PP PLPWN:, REPEAT NPC,-1 ;PLY AT WHICH PAWN WAS PROMOTED + +PP RMDTB:, REPEAT 8,RMWP ;REMOVE PIECES ROUTINES SIGN SET FOR B'S + RMWR + RMWN + SETZ RMWB + RMWK + RMWQ ;RMWQ +RMBQ REALLY SAME + SETZ RMWB + RMWN + RMWR + REPEAT 8, RMBP + RMBR + RMBN + SETZ RMBB + RMBK + RMBQ + SETZ RMBB + RMBN + RMBR + +GHLOC: 0 ;LOCN OF GHOST OR ZERO IF NONE +GHSD: 0 ; - = BLACK + WHITE + +DIRDT: 0 +RDT: -1 + 1 + BW + -BW + +BDT: BW-1 + BW+1 + -BW+1 + -BW-1 + +RDTINS: CAMG S,A ;SKIP IF SQ IN A MIGHT BE IN DIR FROM S + CAML S,A + CAML S,A + CAMG S,A + +BDTINS: CAML S,A + CAML S,A + CAMG S,A + CAMG S,A + +TXDIR: ASCII /LR!/ ;NAMES OF DIRECTION AS PER ENTIRES IN BDA'S + ASCII /RR!/ + ASCII /DF!/ + ASCII /UF!/ + ASCII /LLD!/ + ASCII /LRD!/ + ASCII /URD!/ + ASCII /ULD!/ + ASCII /NLR2!/ + ASCII /NLL2!/ + ASCII /NUR2!/ + ASCII /NRL2!/ + ASCII /NLR!/ + ASCII /NLL!/ + ASCII /NUR!/ + ASCII /NUL!/ + ASCII /EPL!/ + ASCII /EPR!/ + +INVDT: 1 ;NUMBER OF OPPOSITE DIRECTION + 0 + 3 + 2 + 6 + 7 + 4 + 5 + + +BOARD: REPEAT 2*BW,-1 ;THE INTERNAL BOARD + REPEAT 8,[-1 + REPEAT 8,0 + -1 +] + REPEAT 2*BW,-1 + +PP PIECEL:, ;FOR EACH EXISTANT PIECE, A POINTER INTO BOARD + BLOCK NPC + +PP PFILE:, BLOCK NPC ;FILE PC ON +PP PRANK:, BLOCK NPC ;RANK (FROM BPREL DIRECT) +PP RPRANK:, BLOCK NPC ;RANK (REVERSED FOR BLACK PCS) + +PP NPCPT:, ;ADDRESS TO SOS IF PIECE GOES AWAY + REPEAT 8,WPNC + WRKC + WKNC + WBSC + NWKG ;! + SETZ WQNC + WBSC + WKNC + WRKC + REPEAT 8,BPNC + BRKC + BKNC + BBSC + NBKG ;! + SETZ BQNC + BBSC + BKNC + BRKC + +PP NPCP1:, ;ANOTHER ADDRESS TO SOS IF PC GOES AWAY + REPEAT 10.,NPCTEM ;DOES SOMETHING ONLY FOR B'S + WLBC + REPEAT 2,NPCTEM + WDBC + REPEAT 12.,NPCTEM + BDBC + REPEAT 2,NPCTEM + BLBC + REPEAT 2,NPCTEM + +NPCTEM: 0 ;RANDOM + +PP PCCPNR:, ;YET ANOTHER ADDRESS TO SOS IF PC GOES AWAY + REPEAT 8,NPCTEM + REPEAT 8,WPCCNT + REPEAT 8,NPCTEM + REPEAT 8,BPCCNT + +BFLIP: 0 ;FLIP BOARD +MSSW: 1 ;MULTIPLE SEARCH SWITCH +ICSW: 1 ;INCREMENTAL CAT SWITCH 0 NO IC -1 CHK OR 1 IC +LNSW: 0 ;.NE. 0 ENABLE LINE ANALYSIS +PPVSW: 0 ;+ PRINT STATIC EVAL - ALSO DEVEL VALUES AFTER MOVE TYPED IN +INVCLK: 0 ;XORED WITH CLOCK KLUDGE +PARSW: 0 ;1 MACHINE SELECTS PARAMETERS +ALGSW: 0 ;0 DESCRIPTIVE 1 ALGBRADIC -1 BOTH +EST: 0 ;ESTIMATE FOR MULT SEARCH +ESTSW: 0 ;-1 EST SET BY COMMAND, DONT RECOMPUTE IF SAME PLYN +SETESP: 0 ;PLYN FOR ABOVE +GESTSW: 0 ;-1 EST FROM GAME, 0 OTHERWISE +CANCSW: 0 ;CONTROL CANCUT S. 0-> NONE, OTHERWISE ONLY AT PLY LEVELS >= THIS. +SLEEPT: 0 ;DO A .SLEEP THIS AMT BEFORE CALLING LMG (PRESUMABLY TO LET CHEOPS RUN) +CNTSW: 2 ;.NE. 0 TURN ON CENTRALIZE KNIGHTS AND PAWNS FACTOR IN STATEV + ; (INTEGER VALUE MULTIPLIES WEIGHT). +HDUOSW: 2 ;.NE. 0 TURN ON ADVANCED DUO FACTOR IN STATEV + ; (INTEGER VALUE MULTIPLIES WEIGHT). +OKFILE: 2 ;.NE. 0 OPEN FILE NEAR K IN STATEV (INTEGER VALUE MULT. WEIGHT) +KCUT: 40 ;WEIGHT K CUTTOFF FACTOR +PINWSQ: 10 ;WEIGHT FOR PIN OF PIECE ON A SQUARE NOT DEF BY PAWN +RKPOS: 1 ;WEIGHT FOR ROOK POSITION TERM +AVGSW: 1 ;.NE. 0 TURN ON AVERAGING HACK IN STATEV. +CDELT: 3 ;AMT OTHER MOVE MUST BETTER THAN MAIN OCM MOVE TO BE SELECTED IN CHEOPS + ; 10 MODE (IN CHEOPS UNITS) + ;3 SAYS DONT GO FOR JUST MINOR EXCHANGE +NBKST: 0 ;FLAG IN HACK1. -1 SAYS BACKGROUND NOT STARTED YET. + +;4.9-4.7 0 SOUT 1 TYPE AS SIXBIT 2 PUSHJ 3 DPT 4 DPT RIGHT ADJ TO 24 MULT +;4.6 SAYS NO CR 4.5 SAYS TAB TO 24 MULT +INFDT: 100000,,VNAME1 + 100000,,VNAME2 +IFN TS,[200000,,DATP + 200000,,TIMP +] + 40000,,[ASCIZ /SETD=/] + 300000,,HK1V + 40000,,[ASCIZ /SETW=/] + 200000,,PSETW + 40000,,[ASCIZ /SETF=/] + 300000,,MCFB + 40000,,[ASCIZ /ALPHA/] + 300000,,BPREV + 40000,,[ASCIZ /BETA/] + 300000,,BPREV+1 + 40000,,[ASCIZ /EST=/] + 300000,,MSIBB + 40000,,[ASCIZ /SETEST=/] + 300000,,ESTSW + 40000,,[ASCIZ /EMTLSW=/] + 300000,,EMTLSW + 40000,,[ASCIZ /WTPWSW=/] + 300000,,WTPWSW + 40000,,[ASCIZ /WTPCSW=/] + 300000,,WTPCSW +; 40000,,[ASCIZ /PWBSW=/] +; 300000,,PWBSW + 40000,,[ASCIZ /ACTIVITY DELTA/] + 300000,,ACTV + 40000,,[ASCIZ /BCS=/] + 300000,,NSBVS + 40000,,[ASCIZ /CNTSW=/] + 300000,,CNTSW + 40000,,[ASCIZ /HDUOSW=/] + 300000,,HDUOSW + 40000,,[ASCIZ /OKFILE=/] + 300000,,OKFILE + 40000,,[ASCIZ /KCUT=/] + 300000,,KCUT + 40000,,[ASCIZ /PINWSQ=/] + 300000,,PINWSQ + 40000,,[ASCIZ /RKPOS=/] + 300000,,RKPOS + 40000,,[ASCIZ /AVGSW=/] + 300000,,AVGSW + 40000,,[ASCIZ /HASH=/] + 300000,,NHSW + 40000,,[ASCIZ /PCGPWN=/] + 300000,,PCGPWN + 40000,,[ASCIZ /FDCTSW=/] + 300000,,FDCTSW + 40000,,[ASCIZ /CANCSW=/] + 300000,,CANCSW + 40000,,[ASCIZ /SLEEPT=/] + 300000,,SLEEPT +IFN CHEOPS,[ + 40000,,[ASCIZ /CRCYC=/] + 300000,,CRCYC + 40000,,[ASCIZ /CHEOSW=/] + 300000,,CHEOSW + 40000,,[ASCIZ /CHCSTP=/] + 300000,,CHCSTP + 40000,,[ASCIZ /CHMPC=/] + 300000,,CHMPC + 40000,,[ASCIZ /CHPSTP=/] + 300000,,CHPSTP + 40000,,[ASCIZ /CHFDL=/] + 300000,,CHFDL +] + +LINFDT==.-INFDT + +VNAME1: .FNAM1 +VNAME2: .FNAM2 + +STAPT: 60000,,[ASCIZ /P.M.G. RUN/] + 400000,,NPL + 60000,,[ASCIZ /STATEV RUN/] + 400000,,NSV + 60000,,[ASCIZ /FEEDOVERS/] + 400000,,NFD + 60000,,[ASCIZ /FEEDOV LIM REACHED/] + 400000,,NMFD + 60000,,[ASCIZ /MOVES MADE/] + 400000,,NMMV + 60000,,[ASCIZ /TRAPP CALLED/] + 400000,,TRAPS + 60000,,[ASCIZ /TRAPP TRUE/] + 400000,,TRAPSC + 60000,,[ASCIZ /HASH MATCH P.M./] + 400000,,NHMCH + 60000,,[ASCIZ /HASH MATCH STATEV/] + 400000,,NHMSB + 60000,,[ASCIZ /TOTAL HASH MATCH/] + 400000,,THTM + 60000,,[ASCIZ /SECONDARY LINE ANAL/] + 400000,,NSLA + 60000,,[ASCIZ /MULT SEARCHES/] + 400000,,NSRCHS + 60000,,[ASCIZ /CANCUTS/] + 400000,,CANCUT +IFN CHEOPS,[ + 60000,,[ASCIZ /CHEOPS FORCES/] + 400000,,NCHFRC +] +LSTAPT==.-STAPT + +IFN CHEOPS,[ +CHSDT: 40000,,[ASCIZ /NOT RDY/] + 300000,,CSNRDY + 40000,,[ASCIZ /BUSY/] + 300000,,CSNBSY + 40000,,[ASCIZ /CHEOPS STOPPED FEEDOVER/] + 300000,,NCHNFD + 40000,,[ASCIZ /PMG LVL, # SRCHS/] + 300000,,PMSRCH + 40000,,[ASCIZ /BETTER FOR STM/] + 300000,,CPBSTM + 40000,,[ASCIZ /EVEN/] + 300000,,CPEVEN + 40000,,[ASCIZ /WORSE FOR STM/] + 300000,,CPWSTM + 40000,,[ASCIZ /SUGGESTED MOVE/] + 300000,,CPMVPC + 40000,,[ASCIZ /FOUND MATE/] + 300000,,CPMATD + 40000,,[ASCIZ /CANCUTS STOPPED/] + 300000,,CPCTS + 40000,,[ASCIZ /PCG LVL, # SRCHS/] + 300000,,CSSRCH + 40000,,[ASCIZ /BETTER FOR STM/] + 300000,,CSBSTM + 40000,,[ASCIZ /EVEN/] + 300000,,CSEVEN + 40000,,[ASCIZ /WORSE FOR STM/] + 300000,,CSWSTM + 40000,,[ASCIZ /MADE CHEOPS MV PLAUS CAPT/] + 300000,,CSMVPC + 40000,,[ASCIZ /FOUND MATE/] + 300000,,CSMATD + 40000,,[ASCIZ /CAUSED FEEDOVERS/] + 300000,,NCHFDO + 40000,,[ASCIZ /FEEDOVERS WOULD LIKE TO HAVE CAUSED/] + 300000,,NCHWFD + 40000,,[ASCIZ /AVG STATC PMG/] + 300000,,CPSTAV + 40000,,[ASCIZ /AVG STATC PCG/] + 300000,,CSSTAV +LCHSDT==.-CHSDT +] + +LHFLT==20 +HFLT: BLOCK LHFLT +LSHFLT==20 +SHFLT: BLOCK LSHFLT ;MUST IMMEDIATELY FOLLOW HFLT + +IFN TS,[ +EHRNM: 0 ;RUN TIME AT WHICH ENTERED HACK1 +EHRTM: 0 ;REAL TIME AT WHICH ENTERED HACK1 +] + +MSIB: 200 ;OFFSET FOR INITIAL ALPHA AND BETA +MSIBB: 0 ;INITIAL GUESS EVALUATION +LSSFL: 0 ;-1 IF CURRENT SEARCH MUST GIVE FINAL RESULTS +NPLNCP: 0 ;NUMBER PLY SINCE P MOVE OR CAPTURE +CURCKS: 0 ;CLOCK AT ENTRY + +PPNTF1: 0 +PPNTF2: 0 + +NPL: 0 ;NO TIMES PLAUS MV GEN RUN +NSV: 0 ;NO TIMES STATEV RUN +NFD: 0 ;NO FEEDOVERS +NABF: 0 ;NO ALPHA BETA FLUSHES +NMFD: 0 ;NO TIMES REACHED MAX FEDDOVER LIMIT +IFN CHEOPS,[ +NCHNFD: 0 ;# FEEDOVERS CHEOPS "STOPPED" +] +NSVS: 0 ;NO TIMES STATEV CALLED SELF +NCAT: 0 ;NO TIMES CAT RUN +NMMV: 0 ;NO TIMES MMOVE RUN +NHMCH: 0 ;NO HASH MATCHES PLS MOVE +NHMSB: 0 ;NO HASH MATCHES STAT BOARD EV +NFDCK: 0 ;NO OF FEEDOVERS IN CH AND NO KING MOVES +NSLA: 0 ;NO SECONDARY LINE ANAL +THTM: 0 ;NET TOTAL HASH MATCHES +.TIME: 0 ;THINKING TIME +..TIME: 0 ;THINK PER MAIN VARIATION +TRAPS: 0 ;NO TIMES TRAPP RUN +TRAPSC: 0 ;NO TRAPPED PIECES FOUND +OPNMID: 0 +CANCUT: 0 ;NUMBER OF CANTAKE CUTTOFFS +ATEVEC: 0 ;NUMBER OF ATEVE CALLS +IFN CHEOPS,[ +CSSRCH: 0 ;# CHEOPS SEARCHES IN PCG MODE +PMSRCH: 0 ;# CHEOPS SEARCHES IN PMG MODE +CSNRDY: 0 ;# TIMES CHEOPS NOT READY WHEN 10 WANTED RESULTS +CSNBSY: 0 ;# TIMES CHEOPS "BUSY" WHEN DESIRED TO INITIATE SEARCH +CSBSTM: 0 ;# OF CHEOPS PCG SEARCHES THAT RESULTED IN "BETTER FOR SIDE-TO-MOVE" +CSEVEN: 0 ;# " " .. IN NO MATERIAL GAIN FOR EITHER SIDE +CSWSTM: 0 ;# " " .. WORSE FOR SIDE TO MOVE +CPBSTM: 0 ; SIMILAR TO CSBSTM BUT AT PMG LVL +CPEVEN: 0 ; " " CSEVEN +CPWSTM: 0 ; " " CSWSTM +CSMVPC: 0 ;# TIMES MADE CHEOPS MOVE A PLAUS CAPT +CPMVPC: 0 ;# TIMES CHEOPS "GRONKED UP" MOVE IN PMG +CSMATD: 0 ;# TIMES CHEOPS DETECTED FORCED MATE FROM PCG LVL +CPMATD: 0 ;# TIMES CHEOPS DETECTED FORCED MATE FROM PMG LVL +NCHFRC: 0 ;# TIMES CHEOPS "FORCED" MOVE AT EVM +NCHFDO: 0 ;# FEEDOVERS CHEOPS CAUSED +NCHWFD: 0 ;# FEEDOVERS CHEOPS WOULD LIKE TO HAVE CAUSED +CPCTS: 0 ;# CANCUTS CHEOPS STOPPED AT PMG LVL +CPSTA: 0 ;STATISTICS COUNT FROM PMG (SUM OF ALL) +CSSTA: 0 ; " " " PCG " +CPSTAC: 0 ;# COUNTS SUMMED INTO CPSTA +CSSTAC: 0 ; " " " CSSTA +] +OPENF: 0 ;LAST LOCN CLEARED AT HACK1 + +DISSUP: 0 ;-1 DONT UPDATE DISPLAY AT MNLP2 + +PCRAT1: 0 ;CHANGE IN RATIO HACK (SEE STVL4) +PCRAT2: 0 ;PCBAL DIFF AT TOP +PNRAT2: 0 ;PNBAL DIFF AT TOP + +NSRCHS: 0 ;NUMBER SEARCHES REQUIRED +IFN TS,..TSTM: 0 ;RUN TIME AT LAST P.V. + +EMTLSW: 0 ;-1 IF MATL SUBSTANTUALLY EQUAL AT TOP + ;IE ELEMINATE PC RATIO HACK +WTPWSW: 0 ;1 W WANTS TO TRADE PAWNS 0 DOESNT CARE -1 DOESNT WANT TO +WTPCSW: 0 ;1 W WANTS TO TRADE PCS 0 DOESNT CARE -1 DOESNT WANT TO + + +LSQBT1: SUBI C,4 + ADDI C,4 + +LSQBT2: ADDI C,10 + SUBI C,10 + +LMGD: 0 ;REAL PLY DEPTH OF CURRENT ANALYSIS +LMGD2: 0 ;PSEUDO DEPTH ("WEIGHTED" IE DOESNT GET AOS ED ON REPLY TO CHECK, + ; AND ALSO GETS HACKED ON SECONDARY SEARCH) + +LGMST1: 0 + NPCS + 0 + +LGMST2: -NPCS,,0+1 + -NPCS,,NPCS+1 + -NPCS,,0+1 + +HASV: BPREV+1 ;HIS ASSURED VAL +OASV: BPREV ;OUR ASSURED VAL + BPREV+1 + +HPLMVD: 0 ;PIECE HE LAST MOVED +PCSATS: 0 ;PIECES AS THEY STAND (MATERIAL ONLY) +AHDATS: 0 ;NET LACKING FOR ABCUT (-POSBGF) +ABFATS: 0 ;NET LACKING FOR BSF (-POSBGF) +POSBGF: 20 ;AMOUNT TO ALLOW IN ABOVE FOR POSITIONAL CHNGS ETC + +PP LNCP:, BLOCK NPC ;PIECE CAPTURED IN PRINCIPLE VARIATION + +BPREV: 0 ;BEST KNOWN WHITE + 0 ;BEST KNOWN BLACK + +IBPRV: 0 ;INITIALIZED VALUES OF BPREV AT HACK1 + 0 ;IF NOT = TO EVMST OK FOR BEST SO FAR TO BE POSSIBLY BETTER + +LMG5T1: 0 + +PCSWSM: 0 ;NO PIECES W/ SAFE MOVES +NSMVS: 0 ;NO SAFE MOVES FOR CURRENT PIECE +NCKF: 0 ;NO SAFE CHECKS +ICKF: 0 ;CURRENT MOVE A SAFE CHECK +IDISKF: 0 ;-1 IF CURRENT MOVE DISCOVERED AN LMFORS + +;IN REPLAY MODE +RWPF: 0 ;-1 PLAY WHITE MOVES 0 READ WHITE MOVES +RBPF: 0 ;SAME FOR BLACK +RPLYPN: 0 ;PLY # + +;BDPV: 3 ;CHANGE TO FINAL SCORE IF MOVE WAS BAD POSITIONALLY +;MSP1MV: 2 ;DOUBLE MOVE OF PIECE POSSIBLE IN ONE MOVE +;MSP0MV: 4 ;MOVE PIECE BACK TO ORIGINAL SQUARE +;MSPMV: 1 ;MOVE PIECE TWICE IN OPENING + +RDAT: BDARL(A) + BDARR(A) + BDAFB(A) + BDAFT(A) +BDAT: BDALL(A) + BDALR(A) + BDAUR(A) + BDAUL(A) + + BDALR2(A) + BDALL2(A) + BDAUR2(A) + BDAUL2(A) + BDALR1(A) + BDALL1(A) + BDAUR1(A) + BDAUL1(A) + BDAEPL(A) + BDAEPR(A) + +RDATS: BDARL(C) + BDARR(C) + BDAFB(C) + BDAFT(C) + BDALL(C) + BDALR(C) + BDAUR(C) + BDAUL(C) + +RDATSS: BDARL(S) + BDARR(S) + BDAFB(S) + BDAFT(S) + BDALL(S) + BDALR(S) + BDAUR(S) + BDAUL(S) + +RDAT1: BDARL(T1) + BDARR(T1) + BDAFB(T1) + BDAFT(T1) + BDALL(T1) + BDALR(T1) + BDAUR(T1) + BDAUL(T1) + +RDATI: BDARR(A) ;RDAT FOR OPPOSITE DIRECTION + BDARL(A) + BDAFT(A) + BDAFB(A) + BDAUR(A) + BDAUL(A) + BDALL(A) + BDALR(A) + + +RMPPT1: CAIE B,6 + CAIE B,3 + +RMPPT2: SKIPLE T1,BOARD+BW(A) + SKIPLE T1,BOARD-BW(A) + +RMPPT3: SKIPL SNFBP-PIECE(T1) + SKIPL LMGSTD-PIECE(T1) + +RMPPT4: CAIN B,5 + CAIN B,4 + +RMPPT5: SKIPE T1,BOARD+2*BW(A) + SKIPE T1,BOARD-2*BW(A) + +RMPPT7: BOARD+BW+1(A) + BOARD-BW+1(A) + +RMPPT8: BOARD+BW-1(A) + BOARD-BW-1(A) + +RMPTA: BOARD-BW+1(A) + BOARD+BW+1(A) + +RMPTB: BOARD-BW-1(A) + BOARD+BW-1(A) + +RMINS: ADDM R,WA(A) + ADDM R,BA(A) + +RMDTT: CAILE C,5 ;SKIP ON DIAG TOWARD BLACK + CAIG C,5 ;SKIP ON DIAG TOWARD WHITE + CAILE C,5 + +RMDTT1: CAILE D,5 + CAIG D,5 + +RMP5T: REPEAT 4,RFPCS(S) + REPEAT 4,DDPCS(S) + +RMP5T1: REPEAT 4,RFPCS-PIECE(D) + REPEAT 4,DDPCS-PIECE(D) + + + ;DATA BASE ARRAYS SETUP BY CAT + ; +BDBLK: BLOCK BD2 ;BLOCKING DATA +ONEB1: BLOCK BD2 +ONEB2: BLOCK BD2 +PP PDV:, BLOCK NPC ;CURRENT PIECE DEVELOPMENT VAL +WAV: BLOCK BD2 ;VALUE FOR WHITE ATTACK ON EACH SQUARE +BAV: BLOCK BD2 ;VALUE FOR BLACK ATTACK ON EACH SQUARE + +AT: ADD W,WAV(A) + ADD W,BAV(A) + +ATS: SUB W,WAV(A) + SUB W,BAV(A) + +NWPPP: 0 ;# WHITE PASSED P +NBPPP: 0 ;# BLACK PASSED P + +NHPPP: NBPPP + NWPPP + NBPPP + + ; + ;PAWN STRUCTURE ARRAYS +PP PPASED:, ;RANK IF PASSED PAWN, O OTHERWISE + ;4.9=1 IF PASSED AND BLOCKED BY FRIENDLY PAWN + BLOCK NPC +PP PPTP:, ;-1=PAWN DEFENDED BY PAWN + ;1=FORWARD, 2=BACKWARD, 3=ISOLATED PAWN + ;0 OTHERWISE + BLOCK NPC ;CAT DEPENDS ON LAST REGISTER OF PPTP TO =0 + +PP PMOB:, ;FACTORS AFFECTING PAWN MOBILITY + BLOCK NPC + + ;FREE + ;BLOCKED BY OUR PC + ;BLOCKED BY OUR PAWN + ;BLOCKADED BY HIS PC + ;BLOCKADED BY HIS PAWN + + ; WILL BE DEFENDED BY P IF PUSHED + + ; ADVANCE SQ CONTROLED BY US + ; ADVANCE SQ CONTROLED B HIM + + ;PAWN HOLDING OUR PAWN + ;PAWN HOLDING OUR PIECE + + ;PAWN PINNED + +SNPNFL: WNPNFL(TT) ;NUMBER OF PAWNS IN FILE S FOR SIDE + BNPNFL(TT) + WNPNFL(TT) + +SQNPNF: WNPNFL+1(TT) ;NUMBER OF PAWNS IN FILE ONE TO Q SIDE + BNPNFL+1(TT) + WNPNFL+1(TT) + +SQNPN2: WNPNFL+2(TT) ;NUMBER OF PAWNS IN FILE TWO TO Q SIDE + BNPNFL+2(TT) + WNPNFL+2(TT) + +SKNPNF: WNPNFL-1(TT) ;NUMBER OF PAWNS IN FILE ONE TO K SIDE + BNPNFL-1(TT) + WNPNFL-1(TT) + +SKNPN2: WNPNFL-2(TT) ;NUMBER OF PAWNS IN FILE TWO TO K SIDE + BNPNFL-2(TT) + WNPNFL-2(TT) + +;START OF AREA CLEARED BY COMMON BLT IN CAT + +WPNFLS: BLOCK 10. ;NUMBER OF WHITE PAWNS IN FILES +BPNFLS: BLOCK 10. ;BLACK (MUST HAVE 0 FOR FILES 0 & 9) +WNPNFL: BLOCK 10. ;NUMBER OF NON-PASSED WHITE PAWNS IN FILES +BNPNFL: BLOCK 10. ;BLACK (MUST HAVE 0 FOR FILES 0 & 9) +;NUMMM: BLOCK 1 ;NUMBER OF PAWN GROUPS ON BOARD +; BLOCK 4 ;ENTRY FOR EACH GROUP >0 WHITE MAJORITY <0 BLACK MAJORITY + ;IN UNITS OF 1/2 PAWN +;PP PFILES:, ;-1=DOUBLE OPEN FILE + ;0=FILE HAS ONLY PASSED PAWNS IN IT + ;>0=POINTER TO GROUP (NUMMM+1 TO 4) + BLOCK 8 + ; +PP PINT:, ;PIN DATA + BLOCK NPC ;0 PIECE NOT PINNED ELSE PNTR TO PINDT + ; +; END OF AREA CLEARED IN COMMON BLT +BDA1: BLOCK BD2 ;ATTACK DIRECTION DATA +BDA2: BLOCK BD2 +BDA3: BLOCK BD2 + ; +BA: BLOCK BD2 ;BLACK ATTACKS ON EACH SQUARE + ; +WA: BLOCK BD2 ;WHITE ATTACKS ON EACH SQUARE + +DEFINE ATA + XCT RMINS(I) + XCT AT(I) +TERMIN + + [0] ;MUST BE AT PPT, MAY BE REFERENCED AT MMBPWN +PP PPT:, REPEAT 2,[REPEAT 8,PIECEL+.-PPT + REPEAT 8, [0] +] + +PP PDVPNR:, REPEAT NPCS,WTDVL + REPEAT NPCS,BTDVL + +BDBSQ: 400400,,BDBLK(A) + 340400,,BDBLK(A) + 300400,,BDBLK(A) + 240400,,BDBLK(A) + +BDBD: 200400,,BDBLK(A) + 140400,,BDBLK(A) + 100400,,BDBLK(A) + 40400,,BDBLK(A) + +ONEBSQ: 331100,,ONEB1(A) + 221100,,ONEB1(A) + 111100,,ONEB1(A) + 1100,,ONEB1(A) + +ONEBBD: 331100,,ONEB2(A) + 221100,,ONEB2(A) + 111100,,ONEB2(A) + 1100,,ONEB2(A) + +ONEBS: 331100,,ONEB1(S) + 221100,,ONEB1(S) + 111100,,ONEB1(S) + 1100,,ONEB1(S) + 331100,,ONEB2(S) + 221100,,ONEB2(S) + 111100,,ONEB2(S) + 1100,,ONEB2(S) + +REVERS: REPEAT 10.,9-.RPCNT ;RANKS FROM BLACKS SIDE + +OURGY: SKIPGE (D) + SKIPL (D) + SKIPGE (D) + +HKNG: CAIN D,BKING + CAIN D,WKING + +OURGY1: SKIPL (T1) + SKIPGE (T1) + +OURGY2: SKIPGE (T2) + SKIPL (T2) + SKIPGE (T2) + +OURGYJ: SKIPGE (J) + SKIPL (J) + SKIPGE (J) + +RMOY: SKIPGE PIECE(B) + SKIPL PIECE(B) + +RMOY1: +RMOY3: SKIPGE PIECE(S) + SKIPL PIECE(S) + SKIPGE PIECE(S) + +RMOY2: SKIPGE PIECE(Q) + SKIPL PIECE(Q) + SKIPGE PIECE(Q) + +RMOY4: SKIPGE PIECE(T1) + SKIPL PIECE(T1) + +RMOY5: SKIPGE PIECE(D) + SKIPL PIECE(D) + +RMOY6: SKIPGE PIECE(T2) + SKIPL PIECE(T2) + SKIPGE PIECE(T2) + +RMOYTT: SKIPGE PIECE(TT) + SKIPL PIECE(TT) + SKIPGE PIECE(TT) + +RMOYJ: SKIPGE PIECE(J) + SKIPL PIECE(J) + SKIPGE PIECE(J) + + +PCPINS: 0 ;ALL LIST OF ALL PINS OF PIECES. + +PINFS: PINDT +PINDT: BLOCK LPINDT*LPINE +EPINDT: + +BASQ1: 0 ;BITS CORRESP TO SQ (FIRST 32) +BASQ2: 0 ;GETS SET WITH SQS CURRENTLY ATTS + +BAZZQ==430100 +BATTSQ==.-2*BW +REPEAT 4,[ + 0 + REPEAT 8,[ BAZZQ,,BASQ1 + BAZZQ==BAZZQ-10000 +] + 0 +] +BAZZQ==430100 +REPEAT 4,[ + 0 + REPEAT 8,[ BAZZQ,,BASQ2 + BAZZQ==BAZZQ-10000 +] + 0 +] + +;WHITE NEAR SIDE +;HIGHER NOS TOWARD BLACK +BDARL=360600,,BDA1 ;RANK FROM LEFT +BDARR=300600,,BDA1 ;" " RIGHT +BDAFB=220600,,BDA1 ;FILE " BOT +BDAFT=140600,,BDA1 ; " " TOP +BDALL=60600,,BDA1 ;DIAG " LOWER LEFT +BDALR=600,,BDA1 ;DIAG " " RIGHT +BDAUR=360600,,BDA2 ;DIAG " UPPER " +BDAUL=300600,,BDA2 ;" " " LEFT +BDALR2=220600,,BDA2 ;KNIGHT 2*BW FROM LR +BDALL2=140600,,BDA2 ;KNIGHT " " LL +BDAUR2=60600,,BDA2 ;" " " UR +BDAUL2=600,,BDA2 ;" " " UL +BDALR1=360600,,BDA3 ;" BW " LR +BDALL1=300600,,BDA3 ;" " " LL +BDAUR1=220600,,BDA3 ;" " " " UR +BDAUL1=140600,,BDA3 ;" " " UL +BDAEPL=60600,,BDA3 ;EP FROM L +BDAEPR=600,,BDA3 ;EP FROM R + +MCATT2: REPEAT 4, SKIPL RFPCS(D) + REPEAT 4, SKIPL DDPCS(D) + +MCATT3: -1 ;PIECE AND SIDE BEING PINNED AGREE + 1 ;DISAGREE + + +CATFLG: -1 + +MMPWNF: 0 ;PASSED PAWN BLOCKED BY FRIENDLY PAWN FLAG + +PP RFPCS:, ;NEGATIVE FOR ORTHAGONALLY SLIDING PIECES + REPEAT 2,[ + BLOCK 8 + -1 + BLOCK 3 + -1 + BLOCK 2 + -1 +] + +PP DDPCS:, ;NEGATIVE FOR DIAGONALLY SLIDING PIECES + REPEAT 2,[ + BLOCK 12 + -1 + 0 + -1 + -1 + BLOCK 2 +] +PP SLDPC:, ;NEG FOR SLIDING PIECES + REPEAT 2,[ + BLOCK 8 + -1 + 0 + -1 + 0 + -1 + -1 + 0 + -1 +] + + +LPINTB=100 +PINTB: BLOCK LPINTB + +RMERR1: 0 +LCHAR: 0 ;LAST CHAR READ (AT GSYL4) +IFN HSCOD,[ +NHSW: 1 ;-1=SUPPRESS ALL HASH 0=ALLOW DRAW DET ONLY +] +IFN BOOK,[ +UBKF: 0 ;0=DON'T USE BOOK 1=USE BOOK +] +IFN CHEOPS,[ +CHEOSW: 0 ;0 DONT USE CHEOPS, NON-ZERO -> DO + ; -1 -> BRUTE FORCE MODE. + ;IF >0, BIT DECODED TO SAY WHAT TO USE CHEOPS FOR. + ; 1 BIT -> STATEV STABILITY PREDICATE MODE. + ; 2 BIT -> PMG HACKERY + ; 4 BIT -> RUN BLUNDER STOPPER + ;10 BIT -> ACTUALLY "USE" BLUNDER STOPPER TO PLAY MOVE. + ;20 BIT -> 10 BIT, PLUS RECYCLE OCM TO IMPLEMENT + ; CHEOPS MOVE SELECTOR IF DECIDE TO PLAY CHEOPS MOVE. +CHEOS: PUSHJ P,GETONM ;READ IN OCTAL NUMBER + MOVEM C,CHEOSW + JUMPN C,HINITC ;INITIALIZE IT AND EVERYTHING + CLEARM HINITD + .CLOSE CHELCH, ;RELEASE CHEOPS LOCK + POPJ P, + +CRCYC: 0 ;-1 -> IN VERIFY MODE AFTER CHEOPS VETOED INTENDED OCM MOVE +STABD: 3 ;SETD TO USE IN STAB PRED MODE +PMGAD: 3 ;SETD TO USE FOR LMG A SEARCH. +PMGBD: 3 ;SETD TO USE FOR LMG B SEARCH. +STABEP: 10000 ;EPISLON TO USE SETTING UP INITIAL ALPHA AND BETA IN STAB PRED MODE +PMGEP: 10000 ; " " FOR LMG SEARCHES +LMCHAC: 0 ;IF IN PMG, 0 -> CHEOPS NOT ACTIVE + ; -1 -> CHEOPS DOING A SEARCH + ; 1 -> CHEOPS DOING B SEARCH +CHCSTP: -1 ;CHEOPS PCG STOP SWITCH. IF IN PCG AND DEPTH > THIS AND CHEOPS SAYS + ; POSITION COMPLETELY STABLE (DELTA = 0), RETURN PCSATS WITHOUT + ; ALLOWING EITHER SIDE TO MOVE! -1 TURNS OFF THIS FEATURE. +CHPSTP: -1 ;CHEOPS PMG STOP SWITCH. SIMILAR TO CHCSTP +CHMPC: 8 ;CHEOPS MOVE PLAUSIBLE CAPTURE SWITCH. IF .NE. 0 AND CHEOPS RETURNS + ;BETTER FOR STM AT PCG LVL, AND LMGD < CHMPC, FORCE FIRST MV IN + ;CHEOPS'ES P.V. TO BE A PLAUSIBLE CAPT IF IT ISNT ALREADY. +CHMPM: 30 ;CHEOPS PMG MAKE PLAUSIBLE SWITCH. SIMILAR TO CHMPC BUT OPERATES AT PMG + ;AND FORCES MOVE TO BE MOST PLAUSIBLE IF ACTIVATED. +CHPMV: 0 ;MOVE (IN PC,,SQ FORMAT) MADE PLAUSIBLE BY CHEOPS OR 0 +CHCUTF: 0 ;-1 IF CHPSTP .NE. -1 & LMGD>CHPSTP & CHEOPS SAYS POSITION STABLE + ; CAUSES IMMEDIATE RETURN OF PCSATS. +CHFDVF: 8 ;FEEDOVER VERIFY SWITCH. IF CHFDVF .NE. 0, AND LMGD > OR = CHFDVF, + ;AND PCG WANTS TO FEEDOVER, + ;USE CHEOPS TO "VERIFY" NEED TO FEEDOVER. IE IF FEEDOVER IS BECAUSE + ;MAY BE BETTER FOR STM, DONT DO IT UNLESS CHEOPS IN FACT RETURNS BETTER + ;FOR STM. LIKEWISE FOR WORSE FOR STM. +CHFDL: 20 ;CHEOPS PCG FEEDOVER LIMIT. DONT PERMIT CHEOPS TO CAUSE FEEDOVER ON + ; WORSE FOR STM AT PCG LEVEL IF LMGD > THIS. (OR THIS 0) +CHBLFL: 0 ;-1 -> BLUNDER STOPPER SEARCH HAS BEEN INITIALIZED AND IS RUNNING NOW ON CHEOPS +BACKEP: 21 ;EPSILON TO USE IN SETTING INITIAL ALPHA AND BETA + ; FOR BACKGROUND CHEOPS SEARCH. 0-> +/- INF. +] + +IVVDD: 2 ;EFFECTIVE SETD FOR SEC INV +INVD: 0 ;SEC INVEST START FROM THIS PLY OR LESS + +HACKVV: 0 ;CONTAINS NET POSITION VALUE FROM LAST SEARCH +HACKVR: 0 ;RELIABILITY + +PP EVMPB:, REPEAT NPC, <43-.RPCNT>_12.+100,,ESPHI(P) +SBR: ;SEARCH BREADTH VECTOR + REPEAT SBRLNG,6 + +IFN KILLH,[ +AKHS: 1 +IRPC X,,ABC +ABFT!X: BLOCK SBRLNG+1 +TERMIN +] + +PP LGLMPT:, ;PIECE IN B CUR LOC IN A DESTIN IN S + REPEAT 8,LWPWN + LROOK + LKNT + LBIS + LKING + LQUEEN + LBIS + LKNT + LROOK + REPEAT 8,LBPWN + LROOK + LKNT + LBIS + LKING + LQUEEN + LBIS + LKNT + LROOK + +STPLVL: 0 ;DISPLAY STOP LEVEL +;DBS1: 0 ;0 NO DISP 1 DISPLAY 2 DISPLAY FEEDOVERS + ;3 TYPE LIST OF PLAUSIBLE MOVES +;DBS2: 0 ;0 NO LOOK AHEAD 1 LOOK AHEAD AFTER DISPLAY +;MVDS: 0 ;MAIN VARIATION DIS SWITCH +INCSHW: 0 ;UPDATE TV DISPLAY DURING SEARCH, + BOTH PMG AND STATEV, - PMG ONLY +SELSHW: 0 ;SHOW "REASON" FOR SELECTION, + BOTH PMG AND STATEV, - PMG ONLY +SELTXT: 0 ;TEXT STRING POINTER TO REASON FOR LATEST SELECTION. + +OKINGT: WKING-PIECE+PIECEL + BKING-PIECE+PIECEL + WKING-PIECE+PIECEL + +KFILE: PFILE+WKING-PIECE + PFILE+BKING-PIECE + PFILE+WKING-PIECE + +KRNK: PRANK+WKING-PIECE + PRANK+BKING-PIECE + PRANK+WKING-PIECE + +RKRNK: RPRANK+WKING-PIECE + RPRANK+BKING-PIECE + RPRANK+WKING-PIECE + +LMUATS: 0 +LMUDR: 0 +ATTHF: 0 ;-1 IF S ROUTINE MOVES THRU OPPONENTS PIECE OF HIGHER VAL (OR=) + +LMUAT1: BRANK,,BPREL(S) + BRANK,,BPREL(S) + BFILE,,BPREL(S) + BFILE,,BPREL(S) + BPDAG,,BPREL(S) + BMDAG,,BPREL(S) + BPDAG,,BPREL(S) + BMDAG,,BPREL(S) + +LMUAT: BRANK,,BPREL(A) + BRANK,,BPREL(A) + BFILE,,BPREL(A) + BFILE,,BPREL(A) + BPDAG,,BPREL(A) + BMDAG,,BPREL(A) + BPDAG,,BPREL(A) + BMDAG,,BPREL(A) + + +;ATTRIBUTE VALUES + +OPATV: 10 ;UNCOVERING ATTACK ON ADEQUATELY DEFENDED PIECE +IVLU: 1000 ;INITIAL +MJVLU: 100 ;MORE ATTACKS THAN OPP +TTVLU: 20 ;ATTACK POORLY DEFENDED PIECE +BSQVAL: 10 ;BASIC SQUARE VALUE +NKVLU: 20 ;NEAR KING VALUE +CSQV: 20 ;CENTER SQUARE VALUE EARLY +NCSQV: 10 ;NEAR CENTER VALUE EARLY +WPVLU: -400 ;TOO EARLY TO MOVE PIECE UNLESS ATTACKED +BRKVLU: 50 ;PAWN BREAK +FMKING: 40 ;FIRST KING MOVE +KKCAS: 200 ;FIRST KING MOVE IF CASTLE IS POSSIBLE +FMROOK: 60 ;FIRST ROOK MOVE IF CASTLE IS POSSIBLE +MPFMV: 44 ;FIRST MOVE OF MINOR PIECE + +PTFVLU: 20 ;MOVING TO SAME RANK OR FILE AS OPP KING + +POFVLU: 60 ;MOVEING TO OPEN FILE SAME AS KING + +BCPVLU: 140 ;BLOCKING PAWN BY PLAYING TO K3 OR Q3 - +BDDMT: -60 ;THRES FOR MOVE TO BE BAD DEVL WISE +GMAVLU: 140 ;CHANGE BALANCE OF POWER ON OTHER THAN PAWN DEF. BY PAWN + +ACSPV: 50 ;PLAUSIBLITITY VAL ATTACKING CENTER SQUARE W PAWN + +APVLU: 100 ;ATTACKING A PINED PIECE + +APDPV: 20 ;ATTACKING A PINNED PAWN WHICH IS DEFENDED BY PAWN + +APFVLU: 14 ;ATTACKING PAWN ON FILE + +AWPVLU: 50 ;ATTACKING WEAK P (FOR B ISO) + +APFPV: 20 ;EXTRA IF PASSED AND NOT BLOCKED BY FRIENDLY P + + +LMMPDP: 4 ;MOVING P DEFENDED BY P - +LMMFP: 14 ;MOVING FORWARD P - +LMMBP: 30 ;MOVING BACKWARD P + +LMMIP: 4 ;MOVING ISOLATED P + +RDEFVLU: 2 ;VALUE FOR RANDOMLY DEFENDING OUR PIECE + +PINVLT: 60 ;VALUE FOR PIN OF PIECE AS FUNCTION OF RANK (ATTACK NOT SIG) + 50 + 50 + 60 + 70 + 100 + 110 + 110 + +PINVAT: 140 ;ALSO REPRESENTS ATTACK + 120 + 120 + 140 + 160 + 200 + 220 + 220 + +;PLAUS VALUES ADDED TO MOVE +LMFPT: 100 ;ATTACKING TWO + 240 ;3 + 400 ;4 + 600 ;5 OR MORE + +;PASSED PAWN PUSH VALUES(PLAUS) + +PPP: 10 ;NOTE RANK PSEUDO REDUCED BY 2 FOR PP BLOCKED BY FRIENDLY + 10 + 40 ;BLOCKING PP ON RANK 2 + 60 ;PP TO OR BLOCK PP ON RANK 3 + 100 ;... + 140 + 200 ;... + 300 ;PP TO OR BLOCK PP ON RANK 7 + 400 ;TO RANK 8 + +PWNV==200 +NV==640 ;3 1/4 P +BV==700 ;3 1/2 P +RV==1200 ;5 P +KQV==2140 ;8 3/4 P + +QNINC==KQV-PWNV ;EXCESS Q VS P ON SEVENTH + +BVMNV==BV-NV +TPCS==2*+KQV+600 ;INITIAL MATERIAL PER SIDE (K=600) EXCEPT FOR PAWNS +MIDMAT==2*+600 ;THIS AMT OF MATERIAL OR MORE IS CONSIDERED MIDDLE GAME +TPNS==8.*PWNV + +IFN CHEOPS, CHVCNV==4 ;CONVERSION SHIFT, CHEOPS VALUE -> OCM VALUE + ; PAWN IN CHEOPS = 10 + ; PAWN IN OCM = 200 + +GDMF: 0 ;SAFE MOVE FLAG + +LLMGPL==500 +LMGPDL: BLOCK LLMGPL + +LGLMST: 0 +TEFAL: 0 +LMQS: 0 +LMJS: 0 +LMAS: 0 +LMBS: 0 +PCMVNG: 0 +LMARK: 0 ;RANK MOVE TO +CDEVV: 0 +CDVCF: 0 ;CURRENT DEVEL VAL COMPUTED FLAG +ORGPCL: 0 ;ORIGIONAL LOCN OF MOVING PC +TEFFORT: 0 +LMOA: 0 + + +WMID: 0 ;-1 WHITE HAS MIDDLE GAME MATERIAL (OR A Q) +BMID: 0 ; LIKEWISE BLACK + +HMID: BMID ;INDEXING TABLE TO ADDRESS HIS MID FLAG + WMID + BMID + +PCBAL: TPCS ;MATERIAL FOR WHITE + TPCS ;FOR BLACK +PNBAL: TPNS ;PAWN MATERIAL FOR W + TPNS ;FOR B + +OPCBAL: BLOCK 2 ;PCBAL AT TOP OF TREE +OPNBAL: BLOCK 2 ;PNBAL AT TOP OF TREE +ONETBL: 0 ;NET AT TOP OF TREE IE MAGNITUDE + ;OPCBAL+OPNBAL - (OPCBAL+1 + OPNBAL+1) + +PP PBALP:, REPEAT 8,PNBAL + REPEAT 8,PCBAL + REPEAT 8,PNBAL+1 + REPEAT 8,PCBAL+1 + +BLGCLR: 0 ;BEG OF BLOCK CLEARED AT LMGCD1 +LMFORS: 0 ;NUMBER FORCING POSSIBILITIES +EGAIN: 0 ;ESTIMATED GAIN +AGAIN: 0 ;TOTAL VALUE OF ALL ATTACKED +HPVAL: 0 ;EFFECTIVE VALUE OF HIS PIECE + ;ADJUSTED FOR TRADE DESIREABILITY ETC +ELGCLR: ;END OF BLOCK + +CPOSV: 0 ;VALUE OF CURRENT POSITIONALLY +LMGT1: 0 ;TEMP USED IN CAPT SECT OF LMGR +LCDFR: 0 ;HIS DEFENDER IN CAPT SECT OF LMGR +LCATR: 0 ;OUR NEXT ATTACKER IN CAPT SECT OF LMGR +BPCSOP: 0 ;BITS SET FOR PIECE ON PREY +CANTK: 0 ;-1 STM CAN TAKE PCS AS THEY STAND +CANMV: 0 ;-1 HAS LGL MV +GDNATS: 0 ;-1 WOULD BE GOOD ENUF FOR A-B CUT IF COULD TAKE IT +PMGLVL: 0 ;LMGD2-HK1V + ;0 LAST NORMAL PMG LVL + ;+ USE STATEV UNLESS FEEDOVER +OSTV: 0 ;OUTSTANDING THREATS W AGAINST BLACK + 0 ;BLACK AGAINST WHITE + +OSTVP: OSTV + OSTV+1 + OSTV + + + +OWPNC: 0 ;WHITE P CNT AT TOP OF TREE +OBPNC: 0 ;B " " +WPNC: 8 ;WHITE PAWN COUNT +BPNC: 8 ;BLACK PAWN COUNT +WQNC: 1 ;WHITE QUEEN COUNT +BQNC: 1 ;BLACK QUEEN COUNT +WRKC: 2 ;WHITE ROOK COUNT +BRKC: 2 ;BLACK ROOK COUNT +WBSC: 2 ;WHITE BISHOP COUNT +BBSC: 2 ;BLACK BISHOP COUNT +WKNC: 2 ;WHITE KNIGHT COUNT +BKNC: 2 ;BLACK KNIGHT COUNT +NWKG: 1 ;# WHITE KINGS ! +NBKG: 1 ;# BLACK KINGS! + +WLBC: 1 ;WHITE BISH ON LIGHT SQ +BLBC: 1 ;BLACK BISH ON LIGHT SQ +WDBC: 1 ;WHITE BISH ON DARK SQ +BDBC: 1 ;BLACK BISH ON DARK SQ + +WPCCNT: 7 ;# WHITE PCS (EXCLUDE K + PAWNS) +BPCCNT: 7 ;BLACK + +PCCNTP: WPCCNT ;PNTR TO WPPCNT + BPCCNT + WPCCNT + +SLBC: WLBC + BLBC + WLBC + +SDBC: WDBC + BDBC + WDBC + +SPNC: WPNC + BPNC + WPNC + +SQNC: WQNC + BQNC + WQNC + +SRKC: WRKC + BRKC + WRKC + +SBSC: WBSC + BBSC + WBSC + +SKNC: WKNC + BKNC + WKNC + +SNUOP: NUMORP + NUMORP+1 + NUMORP + +OSPNC: OWPNC + OBPNC + OWPNC + + + + +;SQVAL: BLOCK BD2 +PP PVALUE:, REPEAT 4,[ +IFE .RPCNT-2, PP RPVAL:, + REPEAT 8,PWNV + RV + NV + BV + 3000 + KQV + BV + NV + RV +] + +CSQP=.-2*BW + REPEAT 3*BW,0 + REPEAT 2,[ + REPEAT 4,0 + REPEAT 2,-1 + REPEAT 4,0 +] + REPEAT 3*BW,0 + +LMRDT: BW + 1 + -BW + -1 + +LMBDT: BW+1 + BW-1 + -BW-1 + -BW+1 + +PP LMGT:, ;SIGN SET FOR PAWNS + IRPS PWC,,LMWPW LMBPW + REPEAT 8, SETZ PWC + LMROOK + LMKNT + LMBIS + LMKING + LMQUEEN + LMBIS + LMKNT + LMROOK + +TERMIN + + +PP LMGSTD:, ;SCORING TALE DIRRERENT ROUTINES FOR SLIDING PIECES + ;SIGN NEG FOR WHITE PAWNS +IRP PWC,,[SETZ LMWPW,LMBPW] + REPEAT 8,PWC + LSROOK + LMKNT + LSBIS + LMKING + LSQUEEN + LSBIS + LMKNT + LSROOK + TERMIN + +PP SNFBP:, ;SIGN NEG FOR BLACK PAWNS + REPEAT NPCS,0 + REPEAT 8,SETZ + REPEAT 8,0 + +PP PNTB:, ;PIECE TO BIT + REPEAT NPC,<42-.RPCNT>_12.+100,,BPCSOP +;OFFSET ONE BIT SO JFFO WILL WORK +PP NPODT:, + REPEAT NPC,<42-.RPCNT>_12.+100,,NPODBT(C) +PP HNPODT:, + REPEAT NPC,<42-.RPCNT>_12.+100,,NPODBT(D) + +PP NPOD:,BLOCK NPC ;NUMBER OF ATTACKED PIECES GIVEN PIECE IS ONLY DEFENDER OF + +PP NPODBT:,BLOCK NPC ;BITS FOR ABOVE PIECES MUST FOLLOW NPOD + +PP DEFVL:, BLOCK NPC ;VALUE FOR DEFENDING THIS P + ;MUST FOLLOW NPODBT + + +PP ENPCL:, BLOCK NPC ;CALCULATED LOSS IN ENPRISE + +SYMT: SIXBIT /K/ + SIXBIT /Q/ + SIXBIT /KR/ + SIXBIT /KN/ + SIXBIT /KB/ + SIXBIT /QR/ + SIXBIT /QN/ + SIXBIT /QB/ + SIXBIT /B/ + SIXBIT /N/ + SIXBIT /R/ + SIXBIT /G/ + SIXBIT /KP/ + SIXBIT /QP/ + SIXBIT /KRP/ + SIXBIT /KNP/ + SIXBIT /KBP/ + SIXBIT /QRP/ + SIXBIT /QNP/ + SIXBIT /QBP/ + SIXBIT /BP/ + SIXBIT /NP/ + SIXBIT /RP/ + SIXBIT /P/ + SIXBIT /O/ + +SYMPS: + SIXBIT /PPV/ ;PRINT PRINCIPLE VARIATION (AFTER MAKING MOVE) + SIXBIT /M/ + SIXBIT /U/ + SIXBIT /BD/ + SIXBIT /RESET/ + SIXBIT /PG/ + SIXBIT /PW/ + SIXBIT /PB/ + SIXBIT /PS/ + SIXBIT /PN/ +IFN DSPLY, SIXBIT /FANCY/ + SIXBIT /PNT/ + SIXBIT /WALLP/ + SIXBIT /SETW/ + SIXBIT /SETD/ + SIXBIT /SETF/ + SIXBIT /SETC/ +;IFE DEC, SIXBIT /TTY/ + SIXBIT /DRAW/ +IFN HSCOD, SIXBIT /HASH/ +IFE DECTS, SIXBIT /TIMES/ +IFE DECTS, SIXBIT /CLKSW/ +IFE DECTS, SIXBIT /SPARM/ +IFN BOOK, SIXBIT /BOOK/ +IFN UTAPE, SIXBIT /UREAD/ + SIXBIT /SETSD/ + SIXBIT /SETSSD/ +IFE DECTS, SIXBIT /CLKSET/ +IFN UTAPE,[ + SIXBIT /FILE/ + SIXBIT /UWRITE/ + SIXBIT /SAVE/ + SIXBIT /RS/ +] SIXBIT /SPOT/ +IFN BOOK, SIXBIT /CBOOK/ + SIXBIT /TRACE/ + SIXBIT /KPTR/ +IFE DECTS, SIXBIT /TSW/ +IFN BOOK, SIXBIT /RBOOK/ +IFN BOOK, SIXBIT /CKBOOK/ +IFN BOOK, SIXBIT /CKBKEP/ + SIXBIT /LIST/ + SIXBIT /BCS/ + SIXBIT /TPC/ +IFN KILLH, SIXBIT /KHS/ + SIXBIT /FDCTSW/ +IFN BOOK, SIXBIT /WBOOKB/ +IFN BOOK, SIXBIT /RBOOKB/ + SIXBIT /SMSS/ ;MULTIPLE SEARCH MODE + SIXBIT /ICSW/ ;INCREMENTAL CAT MODE + SIXBIT /SLASW/ + SIXBIT /SPVS/ + SIXBIT /TPDV/ + SIXBIT /ICLOCK/ + SIXBIT /STOP/ +IFE DECTS, SIXBIT /FASTER/ +IFE DECTS, SIXBIT /SLOWER/ + SIXBIT /PARSW/ + SIXBIT /ALG/ +IFN TS, SIXBIT /REPLAY/ + SIXBIT /CLEAR/ +IFN UTAPE, SIXBIT /WPOS/ + SIXBIT /RPOS/ + SIXBIT /PUT/ + SIXBIT /SIDE/ + SIXBIT /HPV/ +IFN UTAPE, SIXBIT /SKIP/ + SIXBIT /HBPT/ +IFN UTAPE, SIXBIT /ZPOS/ + SIXBIT /PCGPWN/ +IFN TS, SIXBIT /COMP/ + +IFN CHEOPS,[ + SIXBIT /CHEOPS/ + SIXBIT /CC/ + SIXBIT /CLPOS/ + SIXBIT /CCBFM/ + SIXBIT /CT/ + SIXBIT /CTA/ + SIXBIT /STABD/ + SIXBIT /STABEP/ + SIXBIT /CHCSTP/ + SIXBIT /CHSTAT/ + SIXBIT /CHMPC/ + SIXBIT /CSPD/ + SIXBIT /PMGAD/ + SIXBIT /PMGBD/ + SIXBIT /PMGEP/ + SIXBIT /CHPSTP/ + SIXBIT /CHMPM/ + SIXBIT /CHFDVF/ + SIXBIT /CHFDL/ + SIXBIT /SBACK/ + SIXBIT /CBACK/ + SIXBIT /PBACK/ + SIXBIT /CDELT/ + SIXBIT /BACKEP/ +] + SIXBIT /PMSTAT/ +IFN DSPLY,[ + SIXBIT /FONT/ +] + SIXBIT /INCSHW/ + SIXBIT /SELSHW/ + SIXBIT /PC/ + SIXBIT /SQ/ + SIXBIT /CANCSW/ + SIXBIT /SLEEPT/ + SIXBIT /CNTSW/ + SIXBIT /HDUOSW/ + SIXBIT /OKFILE/ + SIXBIT /KCUT/ + SIXBIT /PINWSQ/ + SIXBIT /RKPOS/ + SIXBIT /AVGSW/ + SIXBIT /PMGL/ + SIXBIT /BKERR/ +IFN TS, SIXBIT /MORE/ +IFE DECTS,[ + SIXBIT /SRATE/ + SIXBIT /BASPAR/ +] + SIXBIT /BFLIP/ +IFE DECTS,[ + SIXBIT /PPARAM/ +] + SIXBIT /BELL/ + ;ADD NEW PSEUDOS HERE ^ + +BKSMS: +IFN BOOK,[ + SIXBIT /V/ + SIXBIT /E/ + SIXBIT /L/ + SIXBIT /T/ +] + +NSYMS=.-SYMT + +PTB: +REPEAT 3,[ + BIT 12 +;0 1 2 3 4 5 6 7 8 +IFE .RPCNT,PTBQ: + BIT 13 +;G KRP KNP KBP KP QP QBP QNP QRP + BIT 9 +;9 10 11 12 13 14 15 16 + BIT 10 +;KR KN KB K Q QB QN QR + BIT 11 + BIT 16 + BIT 15 + BIT 14 + BIT 11 14 + BIT 10 15 + BIT 9 16 + BIT 0 +IFE .RPCNT,PTBP: + BIT 18 4+ + BIT 18 5+ + BIT 18 1+ + BIT 18 2+ + BIT 18 3+ + BIT 18 8+ + BIT 18 7+ + BIT 18 6+ + BIT 18 60+6+ + BIT 18 40+7+ + BIT 18 20+8+ + BIT 1 2 3 4 5 6 7 8 + BIT 17 +;CASTLE +IFE .RPCNT,PTBL=.-PTB +] + +SQTB: 4 ;1 2 3 4 5 6 7 8 + 5 ;KR KN KB K Q QB QN QR + 1 + 2 + 3 + 8 + 7 + 6 + 3,,6 + 7,,2 + 1,,8 + REPEAT 14.,600000,, + PSDS: +;4.9 USE STANDARD OUTPUT +;4.8 USE STANDARD INPUT + 600000,,PPV ;IF 4.9 BUT NOT 4.8 VARIABLE IS IN DISP ADR -1 + HACK1 + HACK2 +; 600000,,MVDS + PBOARD + ARESET + APG + PWHITE + PBLACK + PSELF + PNORM +IFN DSPLY,SETZ FANCY + SETZ PNT + SETZ AWALLP + ASETW + SETZ ASETD + SETZ ASETF + 600000,,CATCUT +;IFE DEC,600000,,HEAR + ADRAW +IFN HSCOD, 600000,,NHSW +IFE DECTS, ATTIME ;TYPE TIME +IFE DECTS, 600000,,CLKSW ;SWITCH CLOCK KLUDGE ON AND OFF +IFE DECTS, ASPARM ;STORE PARAMETERS +IFN BOOK, 600000,,UBKF +IFN UTAPE,AUREAD + 600000,,IVVDD ;SET DEPTH OF SECONDARY ANAL + 600000,,INVD ;SET PLYN FROM WHICH SEC ANAL MADE +IFE DECTS, ASETCL ;SET CLOCK +IFN UTAPE,[ + AFILE + AWRT + ASAVE + ARST +] ASPOT ;ODDS +IFN BOOK, ACBOOK + ATRACE + AKPTR ;CRITICAL POSITION TRACE +IFE DECTS, 600000,,TSW +IFN BOOK, ARBOOK +IFN BOOK, 600000,,CKBOOK ;-1 USE CHEOPS TO CHECK BOOK FOR REASONABILITY +IFN BOOK, 600000,,CKBKEP ;THRESHHOLD FOR CHEOPS VALUE WHEN CHECKING BOOK + ALIST + 600000,,NSBVS ;BCS + ATPCG +IFN KILLH,600000,,AKHS + 600000,,FDCTSW ;FEEDOVER CUTOFF SWITCH +IFN BOOK, AWBKB +IFN BOOK, ARBKB + 600000,,MSSW ;MULTIPLE SEARCH SWITHC + 600000,,ICSW ;INCREMENAL CAT SWITCH + 600000,,LNSW + 600000,,PPVSW + ATPCC + 600000,,INVCLK + ASTOP +IFE DECTS, AFASTER +IFE DECTS, ASLOWER + 600000,,PARSW + 600000,,ALGSW +IFN TS, AREPLAY + ACLEAR +IFN UTAPE, AWPOS + ARPOS + APUT + ASIDE + AHPV +IFN UTAPE, ASKIP + AHBPT +IFN UTAPE, AXPOS + 600000,,PCGPWN +IFN TS, ACOMP + +IFN CHEOPS,[ + SETZ CHEOS ;SET CHEOSW + ACC ;ENTER CHEOPS CONSOLE PRGM + ACLPOS ;XFER POSITION TO CHEOPS + SETZ ACCBFM ;SET BUFFERED-MODE SWITCH + ; (AS OPPOSED TO CLOSE-COUPLED MODE) + ACT ;"TRY" CHEOPS ON CURRENT POSITION. + ; ARG IS SETD. PRINT VALUE AND PV. + ACTA ;SAME AS CT, BUT USE ASYMETRICAL A/B MODE + 600000,,STABD ;SETD TO USE IN CHEOPS IN STABILITY PRED MODE + 600000,,STABEP ;EPSILON TO USE IN SETTING UP INITIAL ALPHA-BETA + ; IN STABILITY PRED MODE + 600000,,CHCSTP ;"CHEOPS STOP SWITCH". IF DEPTH > THIS AND CHEOPS + ; SAYS POSITION COMPLETELY STABLE (DELTA=0), + ; RETURN PCSATS WITHOUT ALLOWING EITHER SIDE TO MOVE! + SETZ ACHSTT ;SET CHEOPS STATISTICS SWITCH (OR, IF NO ARGS, PRINT + ; STATISTICS ON TTY). 0 -> OFF 1 -> PRINT AFTER MOVE. + 600000,,CHMPC ;"CHEOPS MOVE PLAUSIBLE CAPTURE" SWITCH. IF .NE. 0, + ;IF CHEOPS RETURNS BETTER FOR STM, AND IF CHMPC < LMGD, + ;MAKE FIRST MOVE IN + ;CHEOPS'ES P.V. A PLAUSIBLE CAPTURE IF IT ISNT ALREADY. + ACSPD ;SET CHEOPS'ES SPEED. + 600000,,PMGAD ;DEPTH TO USE FOR A SEARCH IN PMG + 600000,,PMGBD ;DEPTH TO USE FOR B SEARCH IN PMG + 600000,,PMGEP ;EPSILON TO USE FOR A-B IN PMG MODE + 600000,,CHPSTP ;PMG LVL STOP SWITCH + 600000,,CHMPM ;PMG LVL MAKE CHEOPS MV MOST PLAUSIBLE SWITCH + ; (IF IT WINS WOOD FOR STM AND LMGD < CHMPM) + 600000,,CHFDVF ;FEEDOVER VERIFY SWITCH + 600000,,CHFDL ;CHEOPS PCG FEEDOVER LIMIT ON WORSE FOR STM + ASBACK ;START BACKGROUND CHEOPS SEARCH + ACBACK ;"CONTINUE" BACKGROUND SEARCH.. IE + ; RECONSTRUCT INTERNAL BUFFER ASSUMING CURRENT POSITION + ; IS SAME AS SEARCH WAS STARTED IN. USE THIS WHEN + ; "PICKING UP" A SEARCH STARTED BY A DIFFERENT OCM. + APBACK ;PRINT STATE OF BACKGROUND SEARCH + 600000,,CDELT ;DELTA BY WHICH OTHER MOVE HAS TO BE BETTER THAN MAIN + ; OCM MOVE TO BE SELECTED IN CHEOPS 10 MODE. (CHEOPS UNITS) + 600000,,BACKEP ;EPSILON TO USE IN SETTING INITIAL ALPHA AND BETA + ; FOR BACKGROUND CHEOPS SEARCH. 0-> +/- INF. +] + APMSTA ;TYPE PMG STATS +IFN DSPLY,[ + 600000,,FONT ;0 -> 50. WIDE FONT, 1 -> 30. WIDE FONT +] + 600000,,INCSHW ;UPDATE TV DISPLAY TO SHOW POSITION DURING SEARCH + ; + BOTH LMG AND STATEV, - LMG ONLY + 600000,,SELSHW ;SHOW "REASON" FOR MOVE SELECTION, + BOTH LMG AND STATEV, + ; - LMG ONLY. + APPC ;PRINT PIECE NUMBER + APSQ ;PRINT SQUARE NUMBER + 600000,,CANCSW ;CONTROL CANCUT S. + 600000,,SLEEPT ;DO A .SLEEP THIS AMT BEFORE CALLING LMG (PRESUMABLY TO + ; LET CHEOPS RUN) + 600000,,CNTSW ;CENTRALIZE KNIGHTS AND PAWNS SWITCH AND WEIGHT + 600000,,HDUOSW ;HEAD DUO SWITCH AND WEIGHT + 600000,,OKFILE ;OPEN FILE NEAR KING SWITCH AND WEIGHT + 600000,,KCUT ;KING CUT OFF SWITCH AND WEIGHT + 600000,,PINWSQ ;PIN OF PIECE ON SQUARE NOT DEF BY PAWN + 600000,,RKPOS ;ROOK POSITION TERM + 600000,,AVGSW ;1 -> TURN ON AVERAGING HACK IN STATEV. + APMGL ;PRINT LIST OF PLAUSIBLE MOVES. + ABKERR ;PRINT LAST TAG AND LAST LEVEL SEEN IN READING IN BOOK. +IFN TS, 600000,,MORE ;TURNS ON MORE PROCESSING +IFE DECTS,[ + ASRATE ;SET TIME CONTROL RATE, ETC. + 600000,,BASPAR ;BASE PARAMETER SET (FOR AUTO PARAMETER SETTING) +] ; THIS IS WHAT IT STARTS OFF IN, AND WILL SPEED UP BEYOND + ; THIS FOR FIRST PART OF THE GAME. + 600000,,BFLIP ;FLIP BOARD ON DISPLAY +IFE DECTS,[ + APPAR ;PRINT ALL PARAMETER BLOCKS +] + 600000,,BELL ;TYPE BELL ON MAKING MOVE + ;ADD NEW PSEUDOS HERE ^ + +IFN BOOK,[ + BKV ;VARIATION NAME + BKE ;POP 1 + BKM ;POP MULTIPLE + BKT ;TRANSPOSITION +] + +IFN .-SQTB-NSYMS,[PRINTC /SYM TAB LOSSAGE! +/] + +PDL: BLOCK PDLL + +SQN: 0 +TAKES: 0 +TAKES1: 0 +TAKES2: 0 +EQSGNF: 0 +GME: 0 ;-1 ON RETURN FROM RMOVE IF TERMINATED BY SOMETHING GROSS (CR OR SOMETHING) +RSAWMN: 0 ;-1 IF SAW MOVE NUMBER ON CURRENT LINE. IF SO, ASSUME READING IN GAME + ; AND SPACE = TAB (AND TERMINATES MOVE). OTHERWISE, SPACE IS JUST A + ; SEPARATOR (LIKE -) FOR TYPING CONVENIENCE. +LGLMV: 0 +SIDE: NPCS +CASLF: 0 +PLYN: 0 +POSRDI: 0 ;-1 POSITION HAS BEEN READ IN SO PLYN NOT REAL +LPSLSH: 0 ;LAST PLY OUTPUT WITH BACKSLASHES ON WALLP +GAME: BLOCK LGAME +IFN HSCOD,[ +GHK1: BLOCK LGAME +] +GAMEV: BLOCK LGAME ;VALUE OF POSITION OR SETZ IF MOVE TYPED IN OR BOOK +GAMP: GAME-1 +GSYLNF: 0 +GSYLMF: 0 + + 777776,, + -1 +LSYLT==5 +SYLT: BLOCK LSYLT + + + +MCAT4: CLEARM PKINGF + POP T,A ;RH OF A HAS LOCN OF PIECE PINNED TO + LDB B,[PINATP,,A] ;PIECE PINNING + LDB C,[PINDIR,,A] ;DIRECTION OF PIN + MOVEI I,0 + SKIPGE @BOARD(A) + MOVEI I,1 ;I GETS SIDE PINNED + MOVE D,BOARD(A) + SKIPGE RPIECE-PIECE(D) + JRST [ SETOM PKINGF ;PIN TO K + JRST MCAT6] + XCT (I) [ SKIPN T1,WA(A) + SKIPN T1,BA(A)] + JRST MCAT6 ;YES REAL PIN (NOT DEFENDED) + MOVE T2,PVALUE(B) + CAML T2,PVALUE-PIECE(D) ;SKIP ON PIECE PINNED TO MORE VAL THAN PINNING PIECE + JRST MCAT6A +MCAT6: LDB T1,[PINOPS,,A] ;SQUARE OF PIECE PINNED + MOVE T1,BOARD(T1) +MCAT6B: SKIPGE RPIECE-PIECE(T1) + POPJ P, + MOVE S,PIECEL-PIECE(T1) + LDB D,ONEBS(C) + JUMPE D,MCAT6X + EXCH C,D + LDB T2,RDATS(D) + XCT RMOY6(I) + TRO A,DPBIT ;PIN BY DOUBLED PIECES +MCAT6X: AOS B,PINFS + CAIL B,EPINDT-LPINE + JRST PINNFS + AOS PINFS + MOVEM A,1(B) + EXCH B,PINT-PIECE(T1) + SKIPGE PKINGF + TLO B,400000 + MOVEM B,@PINT-PIECE(T1) + SKIPGE LMGT-PIECE(T1) + POPJ P, ;PIECE PINNED IS PAWN + AOS B,PINFS + CAIL B,EPINDT-LPINE + JRST PINNFS + AOS PINFS + MOVEM A,1(B) ;ALSO MAKE LIST OF ALL PINS OF PIECES. + EXCH B,PCPINS + MOVEM B,@PCPINS + POPJ P, + +PINNFS: PTTY [ASCIZ /PIN FS EXH/] + POPJ P, + +PKINGF: 0 + +;THIS CODE DETECTS CASE WHERE +;PINNED PIECE IS PROVIDING ONLY DEFENCE TO +;PIECE PINNED TO AND PINNED PIECE +;IS OBVIOUSLY EN PRISE +MCAT6A: SOJN T1,CPOPJ ;MORE THAN ONE DEFENCE + LDB T1,[PINOPS,,A] + MOVE T1,BOARD(T1) + SKIPGE SLDPC-PIECE(T1) ;PINNED PIECE NOT SLIDING + CAML T2,PVALUE-PIECE(T1) ;WONT HAVE TO MOVE + JRST MCAT6C + SKIPGE RFPCS-PIECE(T1) + CAILE C,3 + JRST .+2 + JRST MCAT6B + SKIPGE DDPCS-PIECE(T1) + CAIG C,3 + POPJ P, + JRST MCAT6B + +MCAT6C: MOVE T2,@LMGST+1(I) ;ATTACKS CURRENTLY ON SQUARE PINNED TO + PUSH P,A ;COMPUTE ATTACKS CURRENTLY STOPPED BY PIECE PINNED + MOVE A,PIECEL(B) +MCAT6E: LDB D,RDAT(C) + JUMPE D,MCAT6D + XCT MCATT2(C) ;SLIDING PIECE OF RIGHT TYPE? + JRST MCAT6D + MOVE A,PIECEL(D) + LDB D,[430100,,PIECE(D)] + XOR D,I + ADD T2,MCATT3(D) + JRST MCAT6E + +MCAT6D: POP P,A + MOVE T1,@LMGST(I) + SUBI T1,1(T2) ;EXTRA 1 FOR FIRST PINNING PIECE + JUMPL T1,MCAT6 + POPJ P, + + +HACK1: +IFN TS,[ + MOVE A,KALINT + MOVEM A,KAMCLK + SETOM TRYMOV ;TRYING TO MOVE, IF WE HANG UP, ITS NOT TOO GOOD. + SKIPN WALLP + JRST HWPM1 + MOVE A,LPSLSH ;PUT OUT LAST MOVE WITH SLASHES ON WALLPAPER + SKIPE PLYN + CAMN A,PLYN + JRST HWPM1 + MOVEM A,LPSLSH + MOVEI B,PILPT + SOUT [ASCIZ ?\?] + PUSHJ P,TYPLM + SOUT [ASCIZ ?\?] +HWPM1: SKIPN TSW + JRST HTIM1 + .RDTIM A, ;HACK TIMES. + MOVEM A,EHRTM + .SUSET [.RRUNT,,A] + MOVEM A,EHRNM + MOVEM A,..TSTM +HTIM1:] + LDB I,[100,,PLYN] + MOVE A,MACCLR +IFE DECTS,[ + MOVE B,@CLKTB(I) + MOVEM B,CURCKS +] +IFN BOOK,[ + SKIPGE TSSW ;TRACE HACKERY ACTIVE. + SKIPN UBKF + JRST HB1 ;USE NO BOOK + JRST HB1E +] + +HB1: +IRPS WKING,,WKING BKING,HK1XW,,HK1XW HK1XB,WKR,,WKR BKR,WQR,,WQR BQR,BKING,,BKING WKING + SKIPE PIECEL+WKING+1-PIECE + JRST HK1XW + SKIPN PIECEL+WKR-PIECE + JRST .+3 + SKIPE PIECEL+WQR-PIECE +HK1XW: SKIPA A,[1*2] + MOVEI A,4*2 + EXCH A,PINVF+BKING-PIECE + SUB A,PINVF+BKING-PIECE + IMUL A,PDV+BKING-PIECE + MOVNS A + ADDM A,@PDVPNR+BKING-PIECE +TERMIN + MOVE A,HASHSS + MOVEM A,HASHS + CLEARM HSTB + MOVE A,[HSTB,,HSTB+1] + BLT A,HSTB+HTNE-1 + MOVE A,GAMP + SOS A ;DONT ENTER CURRENT POSITION + CLEARM NPLNCP ;NUMBER PLY NO CAPTURE OR P MOVE + +HK1H2: CAIN A,GAME-1 + JRST HK1H1 + MOVE S,GHK1-GAME(A) + PUSHJ P,HSHK1 + JRST HK1H3 + MOVSI T1,300000+MHPLN + MOVEI J,-1 + PUSHJ P,HASHE1 +HK1H3: LDB T1,[MPC,,(A)] + SKIPL LMGT(T1) + SKIPGE (A) + JRST HK1H1 + AOS NPLNCP + SOJA A,HK1H2 +HK1H1: + +IFN CHEOPS,[ + CLEARM CRCYC ;IN A CHEOPS RECYCLE FLAG +] + CLEARM NSRCHS ;NUMBER SEARCHES REQUIRED + CLEARM ACTV ;VALUE IF NO ACTIVITY + MOVE A,GAMP + MOVEM A,ACTVP +IFN CHEOPS,[ + MOVE T1,CHEOSW + SKIPN HINITD + JUMPN T1,[ PUSHJ P,HINITC ;INSERT CHEOPS PAGES, ETC IF NOT ALREADY + JRST .+1] ;(T1 CLOBBERED IN THIS PATH) + SETOM NBKST ;NEED TO START BACKGROUND FLAG (CANT START IT NOW BECAUSE + ; ESTIMATE NOT AVAILABLE). +] + JRST MSI1 ;COMPUTE INITIAL VALUES FOR ALPHA AND BETA + +MSINR: MOVE D,EVMST ;INITIALIZE ALPHA BETA ENTER HERE TO SET A-B FULL WIDTH + MOVE T1,EVMST+1 +HK1E1: MOVEM D,BPREV ;ENTER HERE WITH INITIAL A-B IN D,T1 + MOVEM T1,BPREV+1 + MOVEM D,IBPRV + MOVEM T1,IBPRV+1 ;IF NOT = EVMST OK FOR BEST SO FAR TO BE POSSIBLY BETTER +HKTRC1: LDB I,[100,,PLYN] + CLEARM STPLVL ;DISPLAY STOP LEVEL + CLEARM LMGD + CLEARM LMGD2 + CLEARM PDVLV + CLEARM CPCDVL ;SHOULDNT MATTER IF SETD >=1, BUT JUST FOR REPRODUCABILITY +IFN KILLH,[ + SKIPN AKHS + JRST HK1KH1 + SETZM ABFTA + MOVE D,[ABFTA,,ABFTA+1] + BLT D,ABFTC+SBRLNG +HK1KH1:] +IFN CHEOPS,[ + SKIPLE T1,CHEOSW + TRNN T1,34 + JRST BLSTR1 ;NO CHEOPS OR NO BLUNDERSTOPPER + SKIPL TSSW + JRST BLSTR1 ;NOT REALLY GOING TO LOOK AHEAD, ETC + AOSG NBKST ;SKIP IF ALREADY STARTED IT. + PUSHJ P,CHBLI ;START BACKGROUND SEARCH FOR BLUNDER STOPPING + ; IF A-B HACKING ENABLED, TAKES ESTIMATE FROM MSIBB. +BLSTR1: +] + SKIPN WALLP + JRST HACK11 + MOVEI B,PILPT + PUSHJ P,FORMF + SOUT [ASCII / +[MOVE !/] ;] + MOVE A,PLYN + ADDI A,2 + LSH A,-1 + PUSHJ P,DPT + SOUT @SIDTXT(I) + PUSHJ P,PWNPNT + MOVE W,[-LINFDT,,INFDT] + PUSHJ P,STFPNT +HACK11: CLEARM NPL ;CLEAR STATISTICS + MOVE T1,[NPL,,NPL+1] + BLT T1,OPENF + MOVE T1,PLYN + MOVEI T2,2 ;NORMAL COEF FOR QUEEN + CAIG T1,20 + JRST HKOPN1 + CAIG T1,50 +HKOPN2: SETOM OPNMID + MOVEM T2,QDCOF + MOVEM T2,PINVF+WKING+1-PIECE +; SUB T2,PINVF+WKING+1-PIECE +; IMUL T2,PDV+WKING+1-PIECE +; MOVNS T2 +; ADDM T2,@PDVPNR+WKING+1-PIECE + MOVE T2,QDCOF + MOVEM T2,PINVF+BKING+1-PIECE +; SUB T2,PINVF+BKING+1-PIECE +; IMUL T2,PDV+BKING+1-PIECE +; MOVNS T2 +; ADDM T2,@PDVPNR+BKING+1-PIECE + MOVE T1,PCBAL + ADD T1,PNBAL + ADD T1,PCBAL+1 + ADD T1,PNBAL+1 + MOVEM T1,PCRAT1 + CLEARM HFLT + MOVE T1,[HFLT,,HFLT+1] + BLT T1,HFLT+LHFLT+LSHFLT-1 +;CLEAR LEVEL TABLES FOR STATIC AND PLAUS HASH FLUSH RECORD + PUSHJ P,.CAT1 ;NON-INCREMENTAL CAT(TO HELP ASSURE REPRODUCABILITY) +IFN CHEOPS,[ +; SKIPGE CHEOSW +; JRST [ PUSHJ P,LMCHEO ;USE CHEOPS TO GENERATE MOVE +; JRST HK1CH1] +] + SKIPE T1,SLEEPT + JRST [ .SLEEP T1, ;WAIT SOME (PRESUMABLY TO LET CHEOPS RUN IN BACKGROUND + JRST .+1] ; MODE. + PUSHJ P,LMG +HK1CH1: MOVEM Q,HACKVR + MOVEM R,HACKVV + PUSHJ P,CAT ;ASSURE CORRECT DATA IN NON INCREMENTAL MODE + SKIPGE QTF + JRST HACK1L + MOVEI B,PILPT + SKIPN WALLP + JRST HACK1H + PUSHJ P,DCRR + MOVE W,[-LSTAPT,,STAPT] + PUSHJ P,STFPNT +IFE TS,[ + SOUT [ASCIZ / TOTAL TIME /] + MOVE T1,.TIME + PUSHJ P,.DPT + SOUT [ASCIZ / SECONDS /] +] + SOUT [ASCIZ / +LEVELS OF P M HASH FLUSHES /] + MOVSI J,-LHFLT+1 + MOVE A,HFLT+1(J) + PUSHJ P,DPT + PUSHJ P,DSPACE + AOBJN J,.-3 + SOUT [ASCIZ / +LEVELS OF S EV HASH FLUSHES /] + MOVSI J,-LSHFLT+1 + MOVE A,SHFLT+1(J) + PUSHJ P,DPT + PUSHJ P,DSPACE + AOBJN J,.-3 + PUSHJ P,DCRR +HACK1H: SKIPE Q,HACKVR ;NO MOVE + JRST MSR1 +IFN CHEOPS,[ + SKIPLE A,CHEOSW + TRNN A,34 + JRST MSR1B ;NO CHEOPS OR NO BLUNDERSTOPPER + SKIPL TSSW + JRST MSR1B ;REALLY DIDNT LOOK AHEAD, ETC +BSMS3: SKIPN A,CVPR ;HACK BLUNDER STOPPER + JRST MSR1B + MOVE A,1(A) ;MOVE INTEND TO PLAY + PUSHJ P,BSTP + ;RETURN V1 CHEOP'S OPINION IF THAT MOVE IS A BLUNDER + ; V2 APPARENTLY BETTER MOVE, IF ANY + ; V3 NUMBER OF DISTINCT MOVES WITH BEST SCORE + MOVEI B,TYO + SOUT [ASCII /CHOSEN /] + MOVEI W,INVAL + PUSHJ P,ACTPRB ;PRINT RESULTS BLOCK + PUSHJ P,BABWRN + MOVE ZR,INMOV + CAMN ZR,CBSMOV + JRST BSTPA1 + MOVE ZR,CBSVAL + CAMN ZR,INVAL + JRST BSTPA1 + SOUT [ASCII /CHEOP'S BEST /] + MOVE C,CBSMOV + PUSHJ P,EPMOVE + PUSHJ P,DCRR + MOVEI W,CBSVAL + PUSHJ P,ACTPRB + PUSHJ P,BABWRN +BSTPA1: ISOUT [.ASCII /*U!BSTCNT MOVES TIED FOR BEST/ +] + MOVE T1,CHEOSW + TRNN T1,30 + JRST MSR1B ;JUST PRINT RESULTS, DONT ACTUALLY USE THEM + SKIPN CVPR + JRST MSR1B ;EVIDENTLY MATED OR STALEMATED, CHEOPS CANT DO ANYTHING ABOUT THIS! + LDB I,[100,,PLYN] + MOVE A,CBSVAL + CAME A,CBALPH + CAMN A,CBBETA + JRST BSMS1 ;CHEOPS'S BEST AN A-B CUT, SO RECYCLE BACKGROUND +BSMS2: SUB A,INVAL ; RETURN IF BEST IS ONLY ONE TIED. + XCT (I) [ JUMPLE A,MSR1B ;JUMP ON INTENDED MOVE JUST AS GOOD, + JUMPGE A,MSR1B] ; SO GO AHEAD AND PLAY IT. + MOVMS A ;AMT COULD IMPROVE WITH CHEOPS MOVE (CHEOPS UNITS) + CAMGE A,CDELT + JRST MSR1B ;NOT REALLY ENUF.. + MOVE T1,CHEOSW + TRNE T1,20 + SKIPE CRCYC ;DONT DO THIS IF ALREADY IN CHEOPS RECYCLE + JRST BSTPA2 + MOVE T1,BSTCNT + SOJE T1,BSTPA2 ;IF ONLY ONE, PLAY IT FOR NOW + MOVE T1,CBSVAL + LDB I,[100,,PLYN] + XCT (I) [ SUB T1,CDELT + ADD T1,CDELT] + PUSHJ P,NBMRK ;MARK NON BLUNDERS + MOVEI B,TYO + ISOUT 1,[.ASCII /REJECTING OCM MOVE, (/] + MOVE C,CVPR + MOVE C,1(C) + PUSHJ P,PMOVE + ISOUT [.ASCII /) + RECYCLING OCM TO SELECT ALTERNATE AMONG *U!NBMRKC ./] + PUSHJ P,DCRR + MOVE C,CVPR + PUSHJ P,LFSRC + CLEARM CVPR + SETOM CRCYC + JRST MSINR + +BSMS1: MOVEI B,TYO + SOUT [ASCIZ /CHEOP'S BEST AN A-B CUT/] + MOVE ZR,BSTCNT + SOJE ZR,[ SOUT [ASCIZ /, BUT ITS ONLY ONE TIED. +/] + MOVE A,CBSVAL + JRST BSMS2] + SKIPE CRCYC + JRST [ SOUT [ASCIZ /, BUT ALREADY IN A RECYCLE. +/] + MOVE A,CBSVAL + JRST BSMS2] + SOUT [ASCIZ /, RECYCLING BACKGROUND SEARCH. +/] + PUSHJ P,CHBLFR ;RECYCLE WITH FULL RANGE + MOVEI T2,30.*60. + .SLEEP T2, ;TOTAL CROCK + SETOM CRCYC ;TRY TO AVOID INFINITE LOOP + JRST BSMS3 + +BSTPA2: MOVEI B,TYO + SOUT [ASCIZ /REJECTING OCM MOVE, (/] + MOVE C,CVPR + MOVE C,1(C) + PUSHJ P,PMOVE + SOUT [ASCIZ /), PLAYING INSTEAD /] + PUSHJ P,DCRR + MOVE A,CBSMOV + MOVE T1,CVPR + MOVEM A,1(T1) ;CLOBBER IN P.V. + MOVEI C,0 + EXCH C,(T1) ;LEAVE THIS A ONE MOVE P.V. AND + PUSHJ P,LFSRC ;FLUSH THE REST OF OLD P.V. +] +MSR1B: +HACK1E: SKIPN A,CVPR + JRST HACK1C + MOVE A,1(A) + PUSHJ P,IMMOVE ;PLAY MOVE + .VALUE ;SHOULDNT BE ILLEGAL BY THIS TIME + MOVE A,GAMP + MOVE T1,HACKVV + MOVEM T1,GAMEV-GAME(A) ;RECORD NET POSITION VALUE +HB2D: +IFN TS,[ + SKIPGE GETTY + PUSHJ P,DISUP +] + MOVEI A,"\ + SKIPE WALLP + PUSHJ P,PILPT + MOVEI B,TYO + PUSHJ P,TYPLM + MOVEI A,"\ + SKIPE WALLP + PUSHJ P,PILPT + MOVE A,PLYN + MOVEM A,LPSLSH ;LAST PLY PUT OUT WITH BACKSLASHES + MOVE A,@OKINGT+1(I) + MOVE C,@LMGST(I) + JUMPE C,HK1F1 + PUSHJ P,DSPACE + SOUT [ASCII /CHECK!/] + MOVM A,HACKVV + CAIN A,70000-2 + SOUT [ASCII /MATE!/] +IFN TS,[ +HK1F1: SKIPN TSW + JRST HACK1F + PUSHJ P,DSPACE + PUSH P,B + PUSHJ P,CLKUD + POP P,B + MOVE C,LRNTIM + SUB C,EHRNM + PUSHJ P,TSMTP + SOUT [ASCII / IN !/] + MOVE C,LRTIM + SUB C,EHRTM + PUSHJ P,TSRTP +] +IFE TS,HK1F1: +HACK1F: PUSHJ P,CRR + MOVEI B,TYO + MOVEI A,7 + SKIPE BELL + PUSHJ P,(B) ;ATTRACT GUY'S ATTENTION + MOVE A,HACKVV + SKIPN PPV + JRST HACK1B + PUSHJ P,DPT + PUSHJ P,DCRR + SOUT [ASCII /PRINCIPAL VARIATION +!/] + MOVE R,CVPR + PUSHJ P,TYPLNE +HACK1B: SETOM DISSUP + MOVE C,CVPR + PUSHJ P,LFSRC + CLEARM CVPR +HACK1A: +IFN HSCOD,[ + PUSHJ P,HSREC ;PERMANENT MOVE RECORD FOR HASH TBL SETUP +] +IFE DECTS,[ + LDB I,[100,,PLYN] + XORI I,1 ;MOVE HAS ALREADY BEEN PLAYED + CAME I,MACCLR + JRST CLKRC1 + MOVE A,@CLKTB(I) + SUB A,CURCKS ;RECORD TIME FOR THIS MOVE +IFN TS, IDIVI A,3 ;CONVERT TO TENTHS + AOS B,MMTMP + CAIL B,LTMDF + CLEARB B,MMTMP + MOVEM A,MMTMT(B) + AOS MSPC ;MOVES SINCE PARAMETER CHANGE +CLKRC1:] + MOVE T1,LFS + MOVEI T2,0 + JUMPE T1,FSCH1 + HRRZ T1,(T1) + AOJA T2,.-2 +FSCH1: CAIE T2,LSPCL+1 + PTTY [ASCII /FS LOST!/] +IFE DECTS,[ + SKIPE PARSW + PUSHJ P,CCTIM ;MAYBE CHANGE PARAMETERS +] +IFN TS, CLEARM TRYMOV ;FINISHED TRYING TO MOVE (HOPEFULLY) + POPJ P, + +HACK1C: SKIPGE TSSW + SKIPN HK1V + JRST HACK1B ;JUST STAT BOARD EV (DID SETD 0) + MOVEI B,TYO ;MATED OR STALEMATED + MOVE R,HACKVV + JUMPE R,SMATE + SOUT [ASCII / +CHECKMATE +!/] +HACK1G: MOVEI A,MNLPA + MOVEM A,GSW + JRST HACK1B + +SMATE: SOUT [ASCII / +STALEMATE +!/] + JRST HACK1G + +PPV: 0 + +HACK1L: SKIPE C,CVPR + PUSHJ P,LFSRC + JRST PNORM + + +MSI1: SKIPL TSSW + JRST HKTRC1 ;TRY NOT TO DISTURB STUFF IF TRACING, ETC. + PUSHJ P,VALPRE + MOVE T1,PLYN + CAME T1,SETESP + CLEARM ESTSW + SKIPGE ESTSW + JRST MSI2A ;USE TYPED IN ESTIMATE + MOVE T1,GAMP +MSI1A: CAIN T1,GAME-1 + JRST MSI2 + MOVE D,GAMEV-GAME(T1) + CAMN D,[SETZ] + SOJA T1,MSI1A + SETOM GESTSW ;GOT ESTIMATE FROM GAME +MSI3: MOVEM D,MSIBB + PUSHJ P,RLSSET + MOVE T1,D + SUB D,MSIB + ADD T1,MSIB + MOVM T2,MSIBB + CAIGE T2,2*PWNV + JRST ACTS2 + MOVEI TT,0 + MOVE S,GAMP +ACTS4: CAIN S,GAME-1 + JRST ACTS3 + LDB Q,[MPC,,(S)] + SKIPL (S) + SKIPGE LMGT(Q) + JRST ACTS3 + AOS TT + SOJA S,ACTS4 + +ACTS3: SUBI TT,10. ;NUMBER OF PLYS BEFORE PANIC + JUMPLE TT,ACTS2 + IMUL TT,T2 + TLC TT,232000 + FADR TT,TT + FMPR TT,[.015] ;AMOUNT LOST EACH PLY + MULI TT,400 + ASH R,-243(TT) + SKIPL MSIBB + MOVNS R ;WHITE AHEAD, SO GOOD FOR BLACK IF NO ACTIVITY + MOVEM R,ACTV +ACTS2: SKIPE GESTSW + SKIPN MSSW + JRST MSINR ;USE FULL RANGE + JRST HK1E1 ;USE ESTIMATE IN D,T1 + +MSI2A: SETOM GESTSW + JRST MSI2B + +MSI2: CLEARM GESTSW +MSI2B: MOVEI D,0 ;HAVE MADE NO MOVES IN GAME + SKIPGE ESTSW + MOVE D,EST + JRST MSI3 + +MSR1: SKIPL TSSW + JRST MSR1B ;TRACE HACKERY + SKIPN MSSW + JRST MSRE + CAMGE R,BPREV + CAMG R,BPREV+1 + JRST MSR1A +MSRE: PTTY [ASCII /MULTIPLE SEARCH ERROR!/] + JRST MSR1B + +MSR1A: SKIPE C,CVPR + PUSHJ P,LFSRC ;RECLAIM FS + CLEARM CVPR + MOVEM R,MSIBB ;UPDATE GUESS VALUE +IFN CHEOPS,[ + SKIPG NBKST + JRST MSCRC1 + MOVEI A,0 ;LOOK TO SEE IF CHEOPS IS GETTING A/B TOO + PUSHJ P,BSTP + MOVE A,CBSVAL + CAME A,CBALPH + CAMN A,CBALPH + JRST MSCRC1 + MOVEI B,TYO + SOUT [ASCIZ /ON MULTIPLE SEARCH, CHEOPS GETTING A-B CUT TOO. RECYCLING BACKGROUND SEARCH./] + PUSHJ P,CHBLFR +] +MSCRC1: MOVE D,EVMST ;MAKE FINAL SEARCH SET UP A B TO REFLECT RESULT OF ORG SEARCH + MOVE T1,EVMST+1 + AOS C,NSRCHS + JRST HK1E1 + +; LDB I,[100,,PLYN] +; XCT MSRT1(I) ;TRANSFER TO MSR1C IF WE LOSE +; XCT EVMT5+1(I) +; JRST MSRRS ;WE MATE +; MOVE C,CVPR +; MOVE A,1(C) +; PUSHJ P,LFSRC +; PUSHJ P,MMOVE + +;MSRRS: MOVE R,HACKVV +; SKIPGE Q +; MOVEI Q,0 +; XCT @MMSRT2(I) +; JRST HK1E1 + +;MSRT1: JUMPL Q,MSR1C +; JUMPG Q,MSR1C + +MMSRT2: MMSRT3(Q) + MMSRT4(Q) + +MMSRT3: HRREI T1,1(R) + HRREI D,-1(R) + +MMSRT4: HRREI T1,1(R) + HRREI D,-1(R) + +HKOPN1: MOVEI T2,0 + SETOM OPENF + JRST HKOPN2 + +QDCOF: 2 ;DEVAL VAL OF QUEEN + +VALPRE: MOVE S,[PCBAL,,OPCBAL] ;COMPUTE ALG STUFF + BLT S,OPCBAL+4-1 ;NOTE: THIS DATA ALWAYS SET UP FOR POSITION AT TOP OF TREE + MOVE S,PCBAL + ADD S,PNBAL + SUB S,PCBAL+1 + SUB S,PNBAL+1 + MOVMM S,ONETBL + MOVE S,PCBAL + SUB S,PCBAL+1 + MOVEM S,PCRAT2 + MOVE S,PNBAL + SUB S,PNBAL+1 + MOVEM S,PNRAT2 + MOVE S,WPNC + MOVEM S,OWPNC + MOVE S,BPNC + MOVEM S,OBPNC +; PUSHJ P,CDVLV +; MOVEM S,ORGDSM +; ADDM T1,ORGDSM +; SUB S,T1 +; MOVEM S,DVLDIF + +; CLEARB TT,ACTV ;COMPUTE ADV THAT WOULD ACCRUE FOR INACTIVITY (IF ANY) +; MOVE S,GAMP +;VALP1: CAIN S,GAME-1 ;COUNT MOVES SINCE LAST P MV OR CAPT +; JRST VALP2 +; LDB Q,[MPC,,(S)] +; SKIPL (S) +; SKIPGE LMGT(Q) +; JRST VALP2 +; AOS TT +; SOJA S,VALP1 +; +;VALP2: SUBI TT,10. ;NUMBER OF PLYS BEFORE PANIC +; JUMPLE TT,VALP3 +; TLC TT,232000 +; FADR TT,TT +; FMPR TT,[.015] ;AMOUNT LOST EACH PLY +; CAMLE TT,[.75] +; MOVE TT,[.75] +; MULI TT,400 +; ASH R,-243+35.(TT) +; MOVEM R,ACTV +VALP3: POPJ P, + +RLSSET: CLEARM WTPWSW ;SET RELATIVE SWITCHES ACCORDING TO CURRENT POS, EST IN D + CLEARM WTPCSW ;NOTE: THIS DATA SOMETIMES SET UP FOR EXPECTED POSITION OR PREVIOUS GAME POSITION +; CLEARM PWBSW + MOVM T2,D + SETOM EMTLSW + LDB S,[430100,,D] ;SIDE AHEAD + CAIL T2,PWNV + JRST RLS1 ;ONE SIDE AT LEAST A P AHEAD + MOVE ZR,T2 + TLC ZR,232000 + FADR ZR,ZR ;FLOAT AMT AHEAD + MOVE TT,PCBAL(S) + ADD TT,PNBAL(S) + TLC TT,232000 + FADR TT,TT + FDVR ZR,TT + CAML ZR,[.15] +RLS1: CLEARM EMTLSW ;ONE SIDE A P OR 15% AHEAD +; CLEARM ACTVSW + CAIGE T2,PWNV + POPJ P, +; MOVEI ZR,1 +; SKIPN S +; MOVNI ZR,1 +; MOVEM ZR,ACTVSW ;SIDE WHICH GAINS FROM LACK OF ACTIVITY +RLS2: MOVE S,PCBAL + SUB S,PCBAL+1 + MOVM T1,S + CAIL T1,PWNV + JRST VALPR1 ;PCS UNEVEN + MOVE S,PNBAL + SUB S,PNBAL+1 + MOVM T1,S + CAIGE T1,PWNV + POPJ P, ;EVEN + LDB T1,[430100,,S] + XCT VALPR2(T1) ;SIDE P AHEAD WANTS TO TRD PCS +; XCT VALPR6(T1) ;SIDE AHEAD WANTS TO KEEP P'S APT + POPJ P, + +VALPR1: LDB TT,[430100,,S] ;TT GETS SIDE AHEAD PCS + MOVE ZR,S + ADD ZR,PNBAL + SUB ZR,PNBAL+1 + XOR ZR,S + JUMPL ZR,VALPR7 ;OTHER SIDE AHEAD ENUF P'S TO COUNTER BALANCE + CAIL T1,5*PWNV + JRST VALPR5 ;SUFFICENTLY AHEAD PAWNS DONT MATTER + XCT VALPR4(TT) + JRST VALPR5 ;SAME SIDE AHEAD + XCT VALPR2(TT) ;SIDE AHEAD PCS WANTS TO TRD PCS + XCT VALPR3+1(TT) ;AND NOT PAWNS + POPJ P, + +VALPR7: XCT VALPR2+1(TT) ;SIDE AHEAD PCS WANTS TO TRADE NEITHER + XCT VALPR3+1(TT) + POPJ P, + +VALPR4: SKIPLE PNRAT2 ;WHITE AHD ON PCS SKIP BLACK AHEAD ON PAWNS + SKIPGE PNRAT2 + +VALPR5: XCT VALPR2(TT) ;SUPER AHEAD, TRD PCS AND PAWNS + XCT VALPR3(TT) + POPJ P, + +VALPR2: AOS WTPCSW ;WHITE WANTS TO TRD PCS + SOS WTPCSW + AOS WTPCSW + +VALPR3: AOS WTPWSW ;WHITE WANTS TO TRD PAWNS + SOS WTPWSW + AOS WTPWSW + +;VALPR6: AOS PWBSW +; SOS PWBSW + + + +GO: MOVE A,[JSR ERROR] + MOVEM A,41 + MOVE P,[-PDLL,,PDL-1] + CLEARM ICMMNT +IFE DECTS+KLNTS,[ +IFE TS,[CONO 633550+APRCHN +IFE DEC,[ + MOVE A,[373737,,373737] + MOVEM A,DISBUF + SETOM TTYON + SETOM TTYON+1 + CONO TTY,TTYCHN +] +IFN DEC,[CONO TTY,TTYCHN + SETOM TTYON +] + CONO PTP,0 + CONO PI,12377 +] +] + +IFN KLNTS,[ + CONO 267760 ;I/O RESET, DISABLE AND CLEAR ALL FLAGS + CONO PI,12377 + CONO PAG,600000 ;TURN ON CACHE, SET EPT TO 0 +] +IFN DECTS,[ CALLI + INIT TYIC,101 + SIXBIT /TTY/ + TYOO,,TYII + CALL [SIXBIT /EXIT/] + OUTPUT TYOC, + SETZM UREADF + SETZM UTINT + SETZM LPTINT +] +IFN CHEOPS,[ + CLEARM HINITD + .CLOSE CHELCH, +] +IFN TS,[ .OPEN TYOC,TYOF + .VALUE + .OPEN TYIC,TYIF + ERRTTY [ASCII /NO TYPE IN!/] + .CALL [ SETZ + SIXBIT /SSTATU/ + 2000,,SDWNTM + 2000,,SYSDBG + 2000,,SUSRS + 2000,,PARERR + 2000,,TIME + 402000,,MACHNM] + .VALUE + CLEARM GETTY + .CALL [ SETZ + 'CNSGET + 1000,,TYOC + 2000,,SVSIZ ;VERTICAL SCREEN SIZE + 2000,,SHSIZ ;HORIZ SCREEN SIZE + 402000,,STCTYP ] ; TCTYP + .VALUE + .CALL [ SETZ + 'TTYGET + 1000,,TYOC + 2000,,TTYST1 + 2000,,TTYST2 + 402000,,TTYSTS] + .VALUE + MOVE ZR,[%TSMOR,,] + IORM ZR,TTYSTS ;TURN OFF SYSTEM MORE PROCESSING + .CALL [ SETZ + 'TTYSET + 1000,,TYOC + TTYST1 + TTYST2 + 400000,,TTYSTS] + .VALUE + MOVE ZR,SHSIZ + MOVEM ZR,LINEL ;INITIAL APPROX. CHANGE THIS FOR TV. + PUSHJ P,FFANTV ;TRY TO GET INTO TV MODE + CLEARM TOPVP ;TOP OF PAGE VERTICAL POSITION + SKIPGE TVFLG + JRST [ SETOM GETTY + MOVEI A,3 + JRST GO1C] ;HAVE TV + .STATUS TYOC,A + ANDI A,77 + CAIN A,2 + SETOM GETTY + SKIPL GETTY + JRST [ MOVEI B,PNTDIS + JRST GO1B] + MOVEI A,11. ;LINE FOR BOARD AT TOP. THIS CONSTANT ALSO AT FANSET+ A FEW + MOVEM A,TOPVP + MOVNI A,2 +GO1C: MOVEM A,FFANCY + MOVEI B,TYO +GO1B: MOVEM B,TRPSW +GO1: MOVEI A,TYINT+PDLOVI+%PICLK + .SETMSK A, + .RDTIM A, + MOVEM A,LRTIM + .SUSET [.RRUNT,,A] + MOVEM A,LRNTIM +] +IFN CHEOPS,[ + SKIPE CHEOSW ;INITIALIZE CHEOPS + PUSHJ P,HINITC ; (ACTUALLY T11 MAP MOSTLY) +] + MOVEI A,OCLOCK + MOVEM A,CURCLK + SETZB TT,B + PUSHJ P,BDINI +IFN HSCOD,[CLEARM HSTB + MOVE A,[HSTB,,HSTB+1] + BLT A,HTNE+HSTB-1 +] + PUSHJ P,ARS1 + JRST MNLP2 + +SDWNTM: 0 ;THESE VARIABLES AS READ BY SSTATU +SYSDBG: 0 +SUSRS: 0 +PARERR: 0 +TIME: 0 +MACHNM: 0 + +;THESE VARIABLES AS READ BY CNSGET +SVSIZ: 0 ;VERT SIZE +SHSIZ: 0 ;HORIZ SIZE +STCTYP: 0 ;TCTYP + +;THESE AS READ BY TTYGET +TTYST1: 0 +TTYST2: 0 +TTYSTS: 0 + +IFN CHEOPS,[ +HINITD: 0 ;-1 IF CHEOPS PAGES INSERTED, ETC +HINIBF: -1 ;-1 INITIALIZED FOR BUFFERED MODE ONLY (JUST MEMORY PAGES + ; INSERTED, CHEOPS ITSELF UNTOUCHED) + +HINITC: SKIPE HINITD + POPJ P, ;ALREADY INITED + .CALL [ SETZ + SIXBIT /OPEN/ + 5000,,100001 + 1000,,CHELCH + [SIXBIT /DSK/] + [SIXBIT /CHEOPS/] + [SIXBIT / LOCK/] + SETZ [SIXBIT /CHPROG/] ] +CHLCKD: JRST HINITE ; FAILED; SOMEONE ELSE USING CHEOPS + SETOM HINITD + MOVE A,MACHNM + CAME A,[SIXBIT /AI/] ;ONLY DO THAT STUFF ON AI... + POPJ P, + PUSHJ P,HINIM ;INSERT MEMORY PAGES.. + LDB A,[40600,,UNIFA] ;CHEOPS JUST POWERED UP? + CAIE A,77 ;STAR POWERS UP 77 + POPJ P, ;LOOKS LIKE ITS PROBABLY LOADED AND ALL.. + MOVEI B,TYO + ISOUT [ASCIZ /CHEOPS RESET, IT WILL HAVE TO BE RELOADED +/] +HINIL: AOS HINIBF ;SIGNAL REALLY GRONKED IT + JRST HINIC ;AND REALLY GRONK IT. + +HINITE: CLEARM CHEOSW + ERRTTY [ASCIZ /CHEOPS BUSY!!/] + JRST MNLP2 +] + +IFN TS,[TYIF: (SIXBIT /TTY/) + SIXBIT /CHESS/ + SIXBIT /INPUT/ + +TYOF: (21+SIXBIT /TTY/) + SIXBIT /CHESS/ + SIXBIT /OUTPUT/ +GETTY: 0 ;-1 => GE CONSOLES WIN WIN +] + +IFN DECTS,[ +TYII: BLOCK 3 +TYOO: BLOCK 3 +RENTER: SETOM QTF + JRST 2,@JOBOPC +] + +MNLP1: +IFN DSPLY,PUSHJ P,DISUP + PTTY [ASCII /ILLEGAL!/] + +MNLP: SETZM DISSUP +IFE TS+DECTS+KLNTS,[ + CONO PI,12377 + CONO 2000+APRCHN + CONO TTY,TTYCHN +] + CLEARM BKF2R +IFN BOOK,[CLEARM BOOKF1 +] +IFE DECTS,[ + SKIPL CLKSW + JRST MNCL1 +IFN TS, PUSHJ P,CLKUD + MOVE A,GSW + MOVE B,PLYN + MOVEI C,WCLOCK + TRNE B,1 + MOVEI C,BCLOCK + CAIN A,MNLPA + MOVEI C,OCLOCK + MOVEM C,CURCLK +] +MNCL1: +IFN TS, CLEARM TRYMOV ;NOT TRYING TO MOVE (YET) + MOVE P,[-PDLL,,PDL-1] + LDB A,[100,,PLYN] + PUSHJ P,@GSW + JRST MNLP + +MNLPA: PUSHJ P,RMOVE + JRST MNLP2B + PUSHJ P,IMMOVE + JRST MNLP1 +IFN HSCOD,[ + PUSHJ P,HSREC ;PERMANENT MOVE RECORD FOR HASH TBL SETUP +] + MOVSI A,(SETZ) + MOVE T1,GAMP + MOVEM A,GAMEV-GAME(T1) + MOVEI A,"_ + SKIPN UREADF + PUSHJ P,TYO + SKIPE UREADF + SETOM DISSUP + SKIPN PPVSW + JRST MNLP2R + LDB I,[100,,PLYN] + PUSHJ P,STVL4 + MOVE A,R + MOVEI B,TYO + PUSHJ P,DPT + SKIPGE PPVSW + JRST MNLPP1 +MNLPP2: PUSHJ P,DCRR +MNLP2R: +IFN DSPLY,[ + AOSE DISSUP + PUSHJ P,DISUP +] + JRST MNLP + +MNLP2: PUSHJ P,LFSRES ;PLACE TO MANUALLY RESTART MAIN LOOP. RESET FREE STORAGE. + CLEARM ICMMNT + MOVEI A,MNLPA + MOVEM A,GSW + JRST MNLP2R + +MNLP2B: SKIPGE UREADF + SETOM DISSUP + JRST MNLP2R + +MNLPP1: PUSHJ P,DTAB + MOVE T1,WTDVL + MOVE T2,BTDVL + MOVE D,T1 + SUB D,T2 + ISOUT [.ASCII /WTDVL *U!T1 BTDVL *U!T2 DIF *U!D +/] + PUSHJ P,ATPCC + JRST MNLP + + +;SQPT1: SQVAL+2*BW+1,,SQVAL+2*BW+2 +; SQVAL+6*BW+1,,SQVAL+6*BW+2 +; +;SQPT2: SQVAL+6*BW+1,,SQVAL+6*BW+2 +; SQVAL+5*BW+1,,SQVAL+5*BW+2 +; +;SQPT3: SQVAL+7*BW+1,,SQVAL+7*BW+2 +; SQVAL+4*BW+1,,SQVAL+4*BW+2 +; +;SQPT4: SQVAL+10*BW+1,,SQVAL+10*BW+2 +; SQVAL+3*BW+1,,SQVAL+3*BW+2 +; +;SQPT5: SQVAL+11*BW+1,,SQVAL+11*BW+2 +; SQVAL+2*BW+1,,SQVAL+2*BW+2 +; + +ENPP: ENPCL+1,,ENPCL+2 + ENPCL+NPCS+1,,ENPCL+NPCS+2 + +WKB3=2*BW+2*BW+2+1 +WKP==4 +WQP==5 +WK3=WKB3+1 +WQ3=WK3+1 +BKP=WKP+NPCS +BQP=WQP+NPCS +BK3=WK3+3*BW +BQ3=WQ3+3*BW + + +; USING CHEOPS IN OCM'S PMG. +; A) CHEOPS SEARCH IN CURRENT POSITION W/ CURRENT STM +; A1) IF MATE RESULTS, IMMEDIATELY RETURN THAT SINCE IT MUST BE CORRECT. +; A2) IF BETTER FOR STM, MAKE SURE P.V. MOVE GETS LOOKED AT. +; A3) IF EVEN OR WORSE FOR STM, AND PCSATS WORSE FOR STM THAN +; ALTERNATIVE HE ALREADY HAS AND DEEP ENUF, +; CONSIDER FORWARD CUT. +; +; B) CHEOPS SEARCH IN CURRENT POSITION W/ OTHER STM +; B1) IF BETTER OR EVEN FOR ORIG STM, IT IS AN INDICATION THERE ARE +; NOT LIKELY TO BE ANY TACTICAL THREATS OUTSTANDING AGAINST +; ORIGINAL STM. THUS: (IE CANTK -> -1) +; B1A) IF PCSATS GOOD ENUF FOR A/B CUT AND DEEP ENUF, +; CONSIDER JUST RETURNING PCSATS. +; B2) IF WORSE FOR STM, P.V. MOVE IS A THREAT, PARTICULARILY IF +; B SEARCH IS WORSE FOR STM THAN A SEARCH WAS. +; (CANTK -> 0) + +LMGQ: SKIPE BKF2R + JRST LMGQ1 + CLEARB R,CVPR + MOVEI Q,0 + MOVEI D,-1 + MOVEM D,POSHSA ;HASH ADR OF RETURNNED VARIATION + POPJ P, + +;VALUES RETURNNED FROM LMG +; VALUE IN R +; RELIABILITY IN Q +; HASH TBL LINK IN D AND POSHSA + +LMG: SKIPGE QTF + JRST LMGQ +LMGQ1: CLEARM SFB ;IN A FEEDOVER FLAG + PUSH P,PDVLV + PUSH P,BPREV(I) + MOVE T,[-LLMGPL,,LMGPDL-1] + MOVEM P,LGLMST + AOS LMGD + MOVE A,@OKINGT(I) + SKIPE @LMGST+1(I) + SKIPA C,LMGD2 ;IN CHECK, SO DONT AOS LMGD2 + AOS C,LMGD2 + SUB C,HK1V + MOVEM C,PMGLVL +IFN HSCOD,[ + MOVN Q,C + SKIPGE Q + MOVEI Q,0 + SKIPGE NHSW ;SUPRESS ALL HASH + JRST LMGH5 + PUSHJ P,HASHR0 + JRST LMGH1 ;POSITION FOUND +LMGH2: CAILE Q,MHPLN + MOVEI Q,MHPLN + MOVSI T1,400000(Q) ;POSITION PENDING + MOVEI J,-1 ;NO HASH LINK OUT + PUSHJ P,HASHE1 +] +LMGH5: JUMPG C,STATE1 ;BELOW BASIC DEPTH, SWITCH TO PCG MODE + + +STATE2: +IFN DSPLY,[ + SKIPE INCSHW + PUSHJ P,INCDU ;UPDATE BOARD ON SCREEN +] +IFN CHEOPS,[ + CLEARM LMCHAC ;CLEAR CHEOPS ACTIVE FLAG + CLEARM CHPMV ;MOVE MADE PLAUSIBLE BY CHEOPS + CLEARM CHCUTF ;CHEOPS CUTOFF FLAG. GETS -1 IF CHPSTP .NE. -1 + SKIPLE T1,CHEOSW ; & LMGD>CHPSTP & CHEOPS SAYS POSITION STABLE + TRNN T1,2 + JRST LPRD1 ;DONT USE CHEOPS OR DONT USE STABILITY PRED HACK + SKIPG C,PMGAD ;DEPTH TO USE FOR A SEARCH IN PMG MODE + JRST LPRD1 + PUSH P,T + MOVEM C,CHXD + MOVE R,PMGEP ;EPSILON TO APPLY TO PCSATS WHEN SETTING UP CHEOPS + MOVEM R,CHXIA ; IN PMG STABILITY PRED MODE + MOVEI R,14000 + MOVEM R,CHXSTM ;ASYMETRICAL A/B AND DELTA AROUND PCSATS + AOS PMSRCH + PUSHJ P,ACLPS3 ;MAKE CHEOPS ARG BLOCK + PUSHJ P,ACSTRT ;START CHEOPS + SETOM LMCHAC ;SIGNAL CHEOPS "ACTIVE" + POP P,T +LPRD1: +] + CLEARM POSREL + MOVE R,STVT1(I) + MOVEM R,POSVAL + MOVE R,PCBAL + ADD R,PNBAL + SUB R,PCBAL+1 + SUB R,PNBAL+1 + MOVEM R,PCSATS + SUB R,@HASV(I) + SKIPN I + MOVNS R + SUB R,POSBGF + MOVEM R,AHDATS + MOVE R,PCSATS + SUB R,@OASV(I) + SKIPN I + MOVNS R + SUB R,POSBGF + MOVEM R,ABFATS + HRRZ T1,GAMP + LDB T2,[MPC,,(T1)] + CAIGE T1,GAME + MOVEI T2,0 + MOVEM T2,HPLMVD ;PIECE HE LAST MOVED + AOS NPL +; MOVE A,BSQVAL +; SKIPGE OPNMID +; JRST LMGSQ1 +; MOVEM A,SQVAL+2*BW+1 +; MOVE A,[SQVAL+2*BW+1,,SQVAL+2*BW+2] +; BLT A,SQVAL+BD2-2*BW-2 +; JRST LMGSQ2 +;LMGSQ1: IRPC T,,12345 +; MOVE C,SQPT!T(I) +; MOVEM A,-1(C) +;IFSN T,1, MOVEI T1,7(C) +;IFSE T,1, MOVEI T1,7+3*BW(C) +; BLT C,(T1) +;IFSN T,5, AOS A +; TERMIN +;LMGSQ2: MOVE C,CSQV ;CENTER SQUARE VALUE +; XCT LSQBT1(I) +; ADDM C,SQVAL+WKB3+BW+1 +; ADDM C,SQVAL+WKB3+BW+2 +; XCT LSQBT2(I) +; ADDM C,SQVAL+WKB3+2*BW+1 +; ADDM C,SQVAL+WKB3+2*BW+2 +; MOVE C,NCSQV +; IRP L,,[0,1,2,3,BW,BW+3,2*BW,2*BW+3,3*BW,3*BW+1,3*BW+2,3*BW+3] +; ADDM C,SQVAL+WKB3+L +; TERMIN +;LMG3: MOVE C,@OKINGT+1(I) +; MOVE T1,NKVLU +; IRP L,,[1,-1,BW,-BW,BW+1,BW-1,-BW+1,-BW-1] +; ADDM T1,SQVAL+L(C) +; TERMIN + CLEARM BPCSOP ;BIT SET FOR PIECES ON PREY + CLEARM OSTV ;OUTSTANDING THREAT VAL (WHITE AGAINST BLACK) + CLEARM OSTV+1 ;BLACK AGAINST WHITE + CLEARM CANTK ;FLAG -1 SAYS STM CAN TAKE PCS AS THEY STANK + CLEARM GDNATS ;-1 => WOULD BE GOOD ENUF FOR A.B. IF COULD TAKE + MOVE ZR,PCBAL + CLEARM WMID + SKIPN WQNC + CAIL ZR,MIDMAT + SETOM WMID ;WHITE HAS MID-GAME MATERIAL + MOVE ZR,PCBAL+1 + CLEARM BMID + SKIPN BQNC + CAIL ZR,MIDMAT + SETOM BMID + CLEARM NPOD+1 + MOVE T1,[NPOD+1,,NPOD+2] + BLT T1,DEFVL+NPC-1+1 ;NOPD NOPDBT DEFVL CONSEC + MOVE T1,ENPP(I) + MOVE T2,T1 + CLEARM -1(T1) + BLT T1,NPCS-2(T2) ;CLEAR ENPCL + CLEARM TRPPCF + SKIPE D,@TPT1(I) ;CHECK KR2 FOR B'S + XCT OURGY+1(I) + JRST LTRP1 + SKIPL RMDTB-PIECE(D) + JRST LTRP1 + MOVE T2,@TPT2A(I) + XCT TPT2(I) + JRST LTRP2 ;OUR P AT N3 + MOVE T2,@TPT2B(I) + XCT TPT2(I) + JRST LTRP4 ;OUR P AT N2 +LTRP1: SKIPE D,@TPT4(I) ;QR2 + XCT OURGY+1(I) + JRST LTRP3 + SKIPL RMDTB-PIECE(D) + JRST LTRP3 + MOVE T2,@TPT5A(I) + XCT TPT2(I) + JRST LTRP5 + MOVE T2,@TPT5B(I) + XCT TPT2(I) + JRST LTRP4 +LTRP3: MOVE B,LGMST2(I) + +LMG5: SKIPE A,PIECEL(B) ;OUR PIECES + SKIPGE RPIECE(B) ;KING + JRST LMG4 +LMG5A: SKIPN TT,@LMGST+1(I) + JRST LMG4 ;NOT ATTACKED + SKIPN @LMGST(I) + JRST LMG5F3 ;NOT DEFENDED AT ALL + PUSHJ P,DFLATA ;ASSUME PINS ON DEFENDERS (OUR PCS) HOLD + JUMPE C,LMG5F1 ;NOT EFFECTIVELY DEFENDED (HE MUST BE PINNED) +LMG5F2: MOVE S,@LMGST(I) + SOJN S,LMG5E + AOS NPOD(C) + MOVEI T1,1 ;PIECE DEFENDED ONCE AND ATTACKED RECORD WARNING + DPB T1,NPODT(B) +LMG5E: MOVN S,PVALUE(D) + ADD S,PVALUE(B) + JUMPG S,LMG5G + MOVE TT,@LMGST+1(I) + SOJE TT,LMG4R + ADD S,PVALUE(C) + JUMPLE S,LMG4R + MOVE W,@LMGST(I) + SOJG W,LMG5B2 ;DEFENDED TWICE OR MORE +LMG5B: CAMLE S,PVALUE(B) + MOVE S,PVALUE(B) ;EN PRISE +LMG5C: MOVEM S,ENPCL(B) ;SAVE EN PRISE VALUE FOR USE AT LMGCD + ADDM S,@OSTVP+1(I) ;HIS THREATS AGAINST US +LMG5C1: SKIPE PINT(B) + JRST LMG5D + PUSHJ P,TRAPP + SKIPL TRPF + LSH S,-1 +LMG5D: MOVEM S,DEFVL(B) + MOVEI T2,1 + DPB T2,PNTB(B) +LMG4: AOBJN B,LMG5 + + MOVE B,LGMST2+1(I) ;HIS PCS +LHPC1: SKIPE A,PIECEL(B) + SKIPN T1,@LMGST(I) + JRST LHPC2 ;NOT EXISTANT OR NOT ATTACKED + SKIPN @LMGST+1(I) + JRST LHPC3 ;NOT DEFENDED BY HIM + PUSHJ P,AFLATA + JUMPE D,LHPC3 ;HIS ONLY DEF PINNED + MOVE T2,@LMGST+1(I) + SOJN T2,LHPC2 ;DEFENDED BY OTHER THAN ONE + MOVEI T1,1 + DPB T1,HNPODT(B) + AOS NPOD(D) +LHPC2: MOVN S,PVALUE(C) ;OUR ATTACKER + ADD S,PVALUE(B) + JUMPG S,LHPC4 ;WE'RE ATTACKING HIM WITH LESS + MOVE TT,@LMGST(I) + SOJE TT,LHPC5 ;THAT WAS OUR ONLY ATTACK, SO HE'S NOT E.P. + ADD S,PVALUE(D) ;HIS FIRST DEFENDER + JUMPLE S,LHPC5 ;HE WOULD BE OK EVEN IF HE LOST PC AND FIRST + ;DEFENDER COMPLETELY +LHPC3: +LHPC6: +LHPC7: MOVE S,PVALUE(B) ;DECLARE PIECE E.P. SINCE WE DONT +LHPC8: ADDM S,OSTV(I) ;FEEL LIKE FIGURING IT OUT ANY MORE +LHPC5: AOBJN B,LHPC1 + + MOVE A,@OKINGT(I) + CLEARM CANMV + SKIPN @OSTVP+1(I) ;SKIP ON THREATS OUTSTANDING + SKIPE @LMGST+1(I) ;SKIP UNLESS IN CHECK + JRST PCGM5A ;CAN'T TAKE + SETOM CANTK + SKIPE T1,CANCSW + CAMLE T1,LMGD + JRST PCGM5 ;NO CANCUT S THIS LVL. + MOVE R,PCSATS + MOVE Q,EVMT5A(I) + SUBI R,40 ;ALLOW FOR POSSIBLE WEAK P S ETC + SKIPE I + ADDI R,100 + XCT PCGABT(I) + JRST PCGM2 ;NOT GOOD ENUF FOR A.B. CUT + SETOM GDNATS + SKIPL PMGLVL + JRST PCGM1 ;CUT OFF +PCGM2: SKIPGE PMGLVL + JRST PCGM5 +IFN CHEOPS,[ +PCGM2A: SKIPGE LMCHAC ;WAIT FOR A SEARCH TO BE COMPLETED + JRST [ PUSH P,R + PUSHJ P,LCSSTP + POP P,R + JRST PCGM2A] + SKIPL CANTK + JRST PCGM5 ;CHEOPS FOUND COULDNT TAKE.. +] + MOVEI Q,0 ;LOOKS LIKE STM CAN TAKE PCS AS THEY STAND.. + XCT EVMT8(I) + PUSHJ P,BPRVS ;UPDATE ALPHA BETA VARS + MOVEM Q,POSREL + MOVEM R,POSVAL +PCGM5: CLEARM PCSWSM ;PIECES WITH SAFE MOVES + MOVE A,@OKINGT(I) + MOVE B,LGMST2(I) + MOVEI Q,LMGR + CLEARM TEFAL ;TOTAL EFFORT ALLOCATED + MOVEM Q,LMQS + CLEARM NCKF + SKIPE C,@LMGST+1(I) + JRST LMG1 ;IN CHECK + +LMG2: +IFN CHEOPS,[ + SKIPE LMCHAC ;CHEOPS ACTIVE? + PUSHJ P,LCSC ;TEST IF CHEOPS READY, IF SO, ADVANCE STATE AND STUFF +] + CLEARM NSMVS ;NO. SAFE MOVES + SETOM CDVCF ;CURRENT DEV VALUE COMPUTED FLAG + SKIPE A,PIECEL(B) + PUSHJ T,@LMGT(B) + SKIPE NSMVS + AOS PCSWSM + AOBJN B,LMG2 + +LMG2E: SKIPN @NKM(I) + JRST LMCAS ;TRY CASTLING +LMCAS3: +IFN CHEOPS,[ +LCSW1: SKIPGE LMCHAC ;WAIT FOR A SEARCH TO BE COMPLETED + JRST [ PUSHJ P,LCSSTP ;CHEOPS STILL RUNNING, ADVANCE STATE. + JRST LCSW1] ; (HCHGV WILL WAIT TILL CHEOPS THRU) +] + MOVEI T1,0 + EXCH T1,BKF2R + JUMPN T1,(T1) +; JRST TD1 ;OLD STYLE DEBUGGING DISPLAY +IFN DSPLY,[ + SKIPE WALLP + JRST TDISPL +] +TD7: JRST EVM + +LMGXR: SOS LMGD ;EXITING VIA RETURN IN BKF2R AND NOT COMMING BACK + MOVE A,@OKINGT(I) + SKIPN @LMGST+1(I) + SOS LMGD2 ;DONT SOS UNLESS IT WAS AOS ED + POPJ P, + +LPEXIT: PUSHJ P,LMGXR + MOVE P,LGLMST ;SET BKF2R TO HERE TO CAUSE PMG TO JUST POPJ + POP P,BPREV(I) ; SIMILAR TO EVM5B1 + POP P,PDVLV + CLEARB R,CVPR ;SIMILAR TO LMGQ + MOVE Q,0 + MOVEI D,-1 + MOVEM D,POSHSA + POPJ P, + +IFN CHEOPS,[ +;IF LMCHAC .NE. 0, PUSHJ HERE OCCASIONALY TO SEE IF CHEOPS NEEDS TENDING. +LCSC: SKIPG HBMEM+CBABL ;CHEOPS READY? + POPJ P, ; NOPE + PUSH P,A + PUSH P,B + PUSH P,Q + PUSH P,T + PUSHJ P,LCSSTP ;"STEP" CHEOPS SEARCHER + POP P,T + POP P,Q + POP P,B + POP P,A + POPJ P, + +LCSSTP: PUSHJ P,HCHGV ;GET CHEOPS VALUE + MOVE ZR,CHXSTA ;SUM IN STATISTICS COUNT + ADDM ZR,CPSTA + AOS CPSTAC ;COUNT OF NUMBER OF FROBS SUMMED IN. + SKIPL LMCHAC + JRST LCBSC ;B SEARCH COMPLETED +LCASC: MOVM ZR,R ;A SEARCH COMPLETED + CAIL ZR,10000-40 + JRST LCASC1 ;SOMEBODY MATES! + MOVE Q,R + SUB Q,CHXIMB ;INITIAL WOOD ON BOARD + JUMPE Q,LCASC2 ;NO GAIN FOR ANYBODY + XCT (I)[ JUMPG Q,LCASC3 ;XFER IF BETTER FOR STM + JUMPL Q,LCASC3] +LCASC5: AOS CPWSTM ;DROP THRU ON WORSE FOR STM + CLEARM CANTK ;CERTAINLY CANT TAKE PCS AS THEY STAND +LCBSS: CLEARM LMCHAC ;START B SEARCH (NULL FOR NOW) + POPJ P, + +LCBSC: .VALUE ;B SEARCH COMPLETED? + +LCASC1: XCT (I)[ JUMPL R,LCASC5 ;XFER IF WE GET MATED + JUMPG R,LCASC5] + AOS CPMATD ;WE MATE + SKIPE BKF2R + JRST LCBSS ;REALLY GENERATING MOVES OR SOMETHING... + PUSHJ P,HOCMMV + CLEARM CVPR +; MOVE ZR,LMGD +; SOJN ZR,LCASC4 + PUSH P,R ;NEED AT LEAST ONE MV OF P.V. + SKIPN C,CHXPV1 + .VALUE ;MATE WITH NO P.V.? + HRRZ A,C + HLRZ B,C + PUSHJ P,TMOVE + .VALUE ;MOBY MATING MOVE ILLEGAL? + PUSHJ P,RECMP ;"RECORD" MOVE + PUSHJ P,UNMOVE ;UNMAKE IT + POP P,R +LCASC4: + MOVE P,LGLMST ;TRAP OUT AND RETURN VALUE + MOVEI Q,0 + JSP ZR,PCGM3 + +LCASC2: AOS CPEVEN ;COMPLETELY STABLE + SKIPL T1,CHPSTP + CAMLE T1,LMGD + JRST LCBSS ;NOT STOP MODE OR NOT DEEP ENUF + SETOM CHCUTF + JRST LCBSS + +LCASC3: AOS CPBSTM ;BETTER FOR STM + SKIPE T1,CHMPM + CAMGE T1,LMGD + JRST LCBSS ;DONT HACK PLAUSIFING CHEOP'S MOVES + MOVN ZR,Q ;Q HAS DELTA + XCT (I) [ CAME Q,CHXIA ;PV INVALID DUE TO A/B CUTTOFS? + CAME ZR,CHXIA] ;CHXIA HAS DELTA TO WHICH A/B WERE SET + SKIPN C,CHXPV1 + JRST LCBSS + HLRZ A,C + SKIPN PIECEL(A) + .VALUE + MOVEM C,CHPMV ;MOVE CHEOPS STRONGLY SUGGESTS + JRST LCBSS +] + + +IFN HSCOD,[ +LMGH1: PUSHJ P,HHVC + JRST LMGH2 ;DATA NOT SIG + HRRZM T2,POSHSA + MOVE T1,LMGD +IFN CHEOPS,[ + SKIPE CRCYC + JRST [ CAIE T1,2 ;IN CHEOPS RECYCLE + JRST .+1 + LDB ZR,[HTVCOD,,HSTBV(T2)] ;AT TOP LEVEL. IS THIS MOVE IN OR OUT? + CAIN ZR,5 + JRST LMGH5 ;IN, PROCEED TO SEARCH. + CAIN ZR,6 + MOVEI J,2 ;OUT, RETURN IMMEDIATELY SPECIAL SIGNAL (MOVED TO Q BELOW) + JRST .+1] + CLEARM CVPR + AOS NHMCH + MOVE Q,J + AOS HFLT(T1) + MOVE D,POSHSA + JSP ZR,EVM5B2 +] +.ELSE JRST LMGH5 +] + +LMG5F3: PUSHJ P,DFLATA ;LOAD D WITH HIS LEAST VAL ATTACKER + JRST LMG5F + +LMG5F1: MOVE T1,@LMGST+1(I) + SOJG T1,LMG5F ;MORE THAN ONE ATTACKER + SKIPGE RPIECE(D) + JRST LMG4 ;ONLY ATTACKER IS K PIN DOESNT MATTER + PUSH P,B + PUSH P,D + MOVE B,D ;DISABLE HIS FIRST GUY FOR PURPOSES OF PINNING + PUSHJ P,DFLATA + POP P,D + POP P,B + JUMPE C,LMG5F ;THAT DIDNT MAKE OUR DEFENDER "APPEAR" + JRST LMG5F2 ;FIRST ATTACKER WAS PINNING + + +LMG5G: MOVE T2,@LMGST+1(I) + CAMLE T2,@LMGST(I) ;SKIPN ON WE WILL RECAPTURE (APPROXIMATALLY) +LMG5F: MOVE S,PVALUE(B) + MOVEM S,ENPCL(B) + ADDM S,@OSTVP+1(I) + CAML S,PVALUE(D) + MOVE S,PVALUE(D) ;PIECE WORTH MORE THAN ATTACKER SO MOST DEFENSE + JRST LMG5C1 ;CAN DO IS RECPATURE + +LMG5B2: MOVEM S,LMG5T1 ;CAN ESCAPE WITH THIS LOSS AT WORSE + PUSHJ P,F2LA + JUMPE T1,LMG5B ;DEFENDERS PINNED + SUB S,PVALUE(T2) + JUMPL S,LMG5B4 ;OUR SIDE AHEAD AFTER CAPTURE OF 2ND ATTACKER + ;NOT ENPRISE UNLESS MORE THAN 2 ATTACKERS + SOJG TT,LMG5B3 ;TRANSFER ON MORE THAN 2 ATTACKERS +LMG5B5: CAML S,LMG5T1 +LMG5B3: MOVE S,LMG5T1 + JRST LMG5B + +LMG5B4: SOJE TT,LMG4R ;2 ATTACKERS NOT E P + ADD S,PVALUE(T1) + JUMPLE S,LMG4R + JRST LMG5B5 + +LHPC4: MOVE TT,@LMGST(I) + SOJE TT,LHPC8 ;THIS OUR ONLY ATTACK AND HE CAN RECAPT + JRST LHPC7 + +LTRP2:; MOVEI S,100 ;ALREADY GOT HIM TRAPPED ZAP SQVAL OR KR1+KR2 +; ADDM S,@TPT6B(I) + JRST LTRP1 + +LTRP4: SETOM TRPPCF + JRST LTRP3 + +LTRP5:; MOVEI S,100 ;ZAP QR1 QR2 +; ADDM S,@TPT6D(I) + JRST LTRP3 + +BBS==2*BW+1 ;OFFSET FROM ARRAY BEG TO KR1 + +TPT1: BOARD+BBS+BW ;PNTR TO KR2 + BOARD+BBS+6*BW + +TPT2: SKIPGE LGLMST-PIECE(T2) ;SKIP ON NOT OUR P + SKIPGE SNFBP-PIECE(T2) + +TPT2A: BOARD+BBS+2*BW+1 ;PNTR TO KN3 + BOARD+BBS+5*BW+1 + +TPT2B: BOARD+BBS+BW+1 ;PNTR TO KN2 + BOARD+BBS+6*BW+1 + +TPT4: BOARD+BBS+BW+7 ;PNTR TO QR2 + BOARD+BBS+6*BW+7 + +TPT5A: BOARD+BBS+2*BW+6 ;PNTR TO QN3 + BOARD+BBS+5*BW+6 + +TPT5B: BOARD+BBS+BW+6 ;PNTR TO QN2 + BOARD+BBS+6*BW+6 + +;TPT6B: SQVAL+BBS+BW ;SQVAL KR2 +; SQVAL+BBS+6*BW + +;TPT6D: SQVAL+BBS+BW+7 ;QR2 +; SQVAL+BBS+6*BW+7 + +TRPPCF: 0 ;-1 IF B MAY BE TRAPPED BY P-N3 + +LMG4R: MOVE S,MSIBB +; XCT LMG4T(I) + JRST LMG4 +; MOVN S,PVALUE(D) +; ADD S,PVALUE(B) +; JUMPL S,LMG4 +; MOVE S,PCBAL ;THREATENED WITH TRADE AND BEHIND +; MOVE ZR,S +; SUB ZR,PCBAL+1 +; ADD S,PCBAL+1 +; SUB S,PVALUE(B) +; SUB S,PVALUE(B) +; MOVEM ZR,LRH3 ;TEMP +; IMUL ZR,PCRAT1 +; IDIVM ZR,S +; SUB S,LRH3 +; MOVEM S,ENPCL(B) +; JRST LMG4 + +;LMG4T: CAMLE S,[-PWNV] +; CAIGE S,PWNV + +PCGM5A: XCT PCGABT(I) ;CANT TAKE, BUT SET UP GDNATS ANYWAY + JRST PCGM5 + SETOM GDNATS + JRST PCGM5 + +PCGM1: ;WOULD LIKE TO FORW CUT, ALLOWING STM TO TAKE PCSATS-40 +IFN CHEOPS,[ +PCGM1A: SKIPE LMCHAC + JRST [ PUSH P,R + PUSH P,Q + PUSHJ P,LCSSTP + POP P,Q + POP P,R + JRST PCGM1A] + SKIPL CANTK + JRST [ AOS CPCTS ;CANCUTS CHEOPS STOPPED + JRST PCGM5] ;CHEOPS CLEARED CANTK, SO CANT TAKE +] + AOS CANCUT ;# CAN TAKE CUTS + CLEARM CVPR +PCGM3: SKIPGE SFB + AOS MCFB ;THIS A FEEDOVER + SKIPL D,HSADR ;ENTER HERE IF CHEOPS RETURNS MATE VALUE (CVPR SET UP TO + SKIPGE T1,NHSW ; MATING MOVE) + JRST PCGF1 + JUMPE T1,PCGF2 + LDB T1,[HTVCOD,,HSTBV(D)] + CAIE T1,4 + JRST PCGF1 + MOVE T1,@STVL5T(I) + DPB T1,[HTVCOD,,HSTBV(D)] + HRRM R,HSTBV(D) +PCGF1: JSP ZR,EVM5B2 + + +PCGF2: CLEARM HSTB(D) + AOS HASHS + MOVNI D,1 + JRST PCGF1 + + +PCGABT: CAMGE R,BPREV+1 + CAMLE R,BPREV + + +LMCAS: PUSH P,T + MOVE T,LGMST1(I) + PUSHJ P,LKCAS + JRST LMCAS1 + POP P,T + PUSH P,[376] + PUSH P,[1401] + PUSH P,[0] + PUSH P,[0] + PUSH P,T +LMCAS1: MOVE T,LGMST1(I) + PUSHJ P,LQCAS + JRST LMCAS2 + POP P,T + PUSH P,[377] + PUSH P,[1400] + PUSH P,[0] + PUSH P,[0] + JRST LMCAS3 + +LMCAS2: POP P,T + JRST LMCAS3 + +NKM: NMOVES+WKING-PIECE + NMOVES+BKING-PIECE + + +LDPN1: TLNE D,777000 + JSP TT,LDPN6 +LDPBS: TLNE D,777 + JSP TT,LDPN6 + TRNE D,777000 + JSP TT,LDPN6 + TRNE D,777 + JSP TT,LDPN6 + JRST (W) + +LDPN6: LDB C,MMP3T1-LDPBS(TT) ;GET ONEBLK ENTRY + MOVE T1,@LDPT1-LDPBS1(W) ;GET DIRECTION + MOVE J,BOARD(C) ;FETCH CENTER GUY + XCT OURGYJ(I) + JRST LDPN7 ;HIS GUY, POSSIBLE DISCOVERY. + SKIPN S,PINT-PIECE(J) + JRST (TT) + LDB T2,RDATS(T1) + XCT RMOY6+1(I) + JRST (TT) +LDPN5: LDB C,[PINBS,,1(S)] ;STOPPING SECOND LINE ON OUR PIECE + CAMN C,A + JRST LDPN4 + HRRZ S,(S) + JUMPN S,LDPN5 + JRST (TT) + +LDPN4: RC *M!J PINNED TO ME, SUBI R,40 + JRST (TT) + +LDPN7: LDB T2,RDATS(T1) ;GET PIECE WHICH MAY GET DISCOVERED + XCT RMOY6+1(I) + JRST (TT) ;OUR GUY, NO DICE. + SKIPGE LMGT-PIECE(J) + JRST [ ;IF PAWN HAS CAPT AVAIL, IT DEFINITELY THREATENS TO CLEAR. + XCT (I) [ MOVEI S,-BW(C) ;GET SQUARE AHEAD OF PAWN + MOVEI S,BW(C)] + SKIPLE J,BOARD+1(S) + XCT OURGYJ(I) + SKIPA + JRST .+1 ;PAWN HAS CAPTURE + SKIPLE J,BOARD-1(S) + XCT OURGYJ(I) + SKIPA + JRST .+1 + SKIPE BOARD(S) + JRST (TT) ;PAWN BLOCKED, SO NO DISCOVERY + XCT (I) [ CAIE T1,3 ;CENTER PIECE HIS PAWN. CAN IT REALLY MOVE OUT OF THE WAY? + CAIE T1,2 ] + JRST .+1 + JRST (TT)] ;NO DISCOVERY, SINCE ITS FRONTWISE FOR PAWN. + MOVE S,PVALUE(T2) + CAMGE S,PVALUE(B) + RC POSSIBLE DISCOVERY BY *P!T2, SUBI R,100 + JRST (TT) + +LDPT1: ,MMP3T3-LDPBS(TT) + 0 + ,MMP3T4-LDPBS(TT) + +EVM: SKIPGE PMGLVL + JRST EVMA + PUSHJ P,CDVLV ;GOING TO STATEV THIS TIME + SUB S,T1 + MOVEM S,PDVLV +EVMA: PUSH P,P ;-26 MUST BE TOP +EVMET==-26 + PUSH P,[0] ;-25 NUMBER MOVES INVESTIGATED SINCE LAST + ;BEST SO FAR (RH) + ;NUMBER MOVES INVESTIGATED (LH) + ;(ACTUALLY INVESTIGATED, FC ETC DONT COUNT) +EVNMS==-25 + PUSH P,[,-1] ;-24 HASH ADR OF BEST SO FAR +ESMBHA==-24 + PUSH P,LMGD2 ;DEPTH AT START +ESLD2==-23 +IFE CHEOPS, PUSH P,[0] ;FREE + .ELSE [ PUSH P,CHPMV ;CHEOPS SUGGESTED MOVE + ECHPMV==-22 ] + MOVE T1,PCSWSM + MOVE S,LMGD +IFN KILLH,SETZM ABFTC(S) + LSH T1,1 + CAMLE T1,SBR-1(S) + MOVE T1,SBR-1(S) + LSH T1,-1 + PUSH P,T1 ;DISTINCT PIECES THAT WANT TO MOVE +ESNPM==-21 + PUSH P,[0] +ESPHI==-20 ;BIT SET FOR PIECE IF HAVE INVESTIGATED MOVE BY THAT PIECE + MOVE T1,EVMET-ESNLM+1(P) + SUB T1,LGLMST + HRRZS T1 + IDIVI T1,NWDPM + LSH T1,1 + MOVNS T1 + CAMGE T1,[-NOCM*2] + SKIPA T1,[JRST OPNS2] + HRLI T1,(MOVEI T1,) + PUSH P,T1 ;MOVEI T1,-2*NUM LEGAL MOVES OR +ESNLM=-17 ;JRST OPNS2 IF LGL MVS > NOCM + HRRZ T1,LGLMST + PUSH P,T1 ;POINTER TO BEG OF MOVES +ESMLP=-16 + PUSH P,FDCV ;CUTOFF VALUE ON FEEDOVER INVESTIGATION +ESFCV==-15 + PUSH P,POSREL ;-14 CURRENT RELIABILITY CODE +ESMR=-14 + PUSH P,LGLMST ;-13 POINTER TO LAST MOVE INVESTIGATED +ESMTP=-13 + PUSH P,HSADR ;ADR OF CURRENT POS IN HASH TABLE +ESMHA=-12 + PUSH P,BPCSOP ;SAVE PCS ON PREY FOR LINE ANALISYS +ESPOP=-11 + PUSH P,NCKF ;NO. SAFE CHECKS +ESNFK=-10 + PUSH P,SFB ;IN A FEEDOVER FLAG +ESFBL=-7 + PUSH P,[0] ;PRINCIPAL VARIATION SO FAR-6 + PUSH P,[0] ;BEST MOVE-5 + PUSH P,STVT1(I) ;-4 UNMUNGED SIT VALUE + PUSH P,POSVAL ;INITIAL SIT VALUE -3 + PUSH P,I ;-2 + PUSH P,LGLMST ;-1 + PUSH P,SBR-1(S) ;BASIC SEARCH WIDTH AS FUNCTION OF DEPTH 0 + +EVM4: SOSGE (P) + JRST EVM5D +IFN CHEOPS,[ + SKIPE T1,ECHPMV(P) + JRST ECHMV1 ;CHEOPS SAYS THIS WINS MATERIAL .. +] + MOVEI J,[ASCIZ /BASIC SORT +/] +EVM5D3: MOVNI R,2 + XCT ESNLM(P) + HRRZ T2,EVMET(P) ;PICK UP PNTR TO END OF MOVES + JRST OPNSRT(T1) + +OPNS2: MOVE T1,EVMET(P) ;CHECK MOVES OFF TOP IN EXCESS OF NOCM + SUB T1,ESMLP(P) + HRRZS T1 + IDIVI T1,NWDPM + MOVE T2,ESMLP(P) ;PNTR TO BEG +OPNS3: CAMGE R,2(T2) + JSP Q,SRTSET + CAIG T1,NOCM+1 + JRST OPNS4 + ADDI T2,NWDPM + SOJA T1,OPNS3 + +SRTSET: MOVEI C,@-2(Q) + MOVE R,(C) + JRST @Q + +NOCM==50. ;NUMBER INTERATIONS IN OPEN SORT +;NWDPM==4 ;NUMBER WORDS PER MOVE ON PDL +OPNS4: MOVEI T1,2+NWDPM(T2) ;NEXT LCN THAT WOULD HAVE BEEN COMPARED BY OPNS3 + HRRZ T2,EVMET(P) + CAIE T1,@OPNS4A + PTTY [ASCII /SEARCH ERROR!/] +OPNS4A:REPEAT NOCM,[ + CAMGE R,-*NWDPM+2(T2) + JSP Q,SRTSET +] +NWPOS==2 +OPNSRT: + + JUMPL R,EVM5 + SUBI C,2 +EVM5DX: +EVHSH2: MOVEM C,ESMTP(P) + SETOM 2(C) + SKIPGE 3(C) + SOS ESNFK(P) ;NUMBER OF "CHECKING" MOVES REMAINING UNINVESTIGATED +EVFC2: MOVE T1,[1,,1] + ADDM T1,EVNMS(P) + SKIPE SELSHW + JRST [ IFN DSPLY, PUSHJ P,INCDU ;DISPLAY SELECTION AND REASON + MOVEI B,TYO + MOVE A,1(C) + PUSHJ P,PPMMV + SOUT (J) + PUSHJ P,TYI + JRST .+1] + HRRZ A,1(C) + HLRZ B,1(C) + CLEARM CPCDVL + CAIL A,375 + JRST EVM5E1 + LDB T1,EVMPB(B) + JUMPN T1,EVM5E2 ;SECOND OR MORE MOVE FOR THIS PIECE INVESTIGATED + MOVEI T1,1 ;NEW PIECE MOVING + DPB T1,EVMPB(B) + SOS ESNPM(P) +EVM5E2: SKIPE D,BOARD(A) + JRST EVM5E4 + CAMN A,GHLOC + SKIPL LMGT(B) + JRST EVM5E1 + MOVE D,@EVMT13(I) +EVM5E4: MOVE T1,PDV-PIECE(D) + IMUL T1,PINVF-PIECE(D) + MOVEM T1,CPCDVL +EVM5E1: PUSHJ P,TMOVE + JRST EVM4A ;MOVE ILLEGAL + XORI I,1 + PUSH P,BPREV + PUSH P,BPREV+1 + PUSHJ P,LMG +;RETURN RELIABILITY IN Q 1 ACTUAL VALUE MAY BE NUMERICALLY >, -1 < + POP P,T1 + POP P,T2 + CAMN T1,BPREV+1 + CAME T2,BPREV + ERRTTY 2,[ASCIZ /A B RESTORE LOSSAGE/] + LDB T1,[100,,PLYN] + CAME T1,I + ERRTTY 2,[ASCIZ /I LOSES AT EVM5E1/] + XORI I,1 + CAIN Q,2 ;SPECIAL SIGNAL MOVE MARKED OUT BY CHEOPS? + JRST EVM6C ; YES COMPLETELY FLUSH IT. + SKIPN LNSW + JRST LNAL1 + MOVEI T1,0 + CLEARM LNCP+1 + MOVE A,[LNCP+1,,LNCP+1+1] + BLT A,LNCP+NPC-1 + SKIPN T2,CVPR + JRST LNAL2 +LNAL4: SKIPL 1(T2) + JRST LNAL3 ;NOT CAPTURE + LDB TT,[MPTK,,1(T2)] + SETOM LNCP(TT) + MOVE S,RPVAL(TT) + SKIPGE PIECE(TT) + MOVNS S + ADD T1,S +LNAL3: SKIPE T2,(T2) + JRST LNAL4 + MOVE T2,CVPR +LNAL2: XCT LNT1(I) ;TRANSFER TO LNAL1 ON AHEAD OR EVEN + MOVMS S + LSH S,-1 + LDB T1,[MPC,,1(T2)] ;WOULD LIKE TO PREVENT HIS MOVE + MOVE T1,PIECEL(T1) + HRRZ C,ESMLP(P) + MOVE J,(T2) +LNAL5A: SKIPGE 2(C) + JRST LNAL5 + HRRZ TT,1(C) + CAME TT,T1 + JRST LNAL6 + MOVEI D,20 + ADDM D,2(C) +LNAL6: HLRZ TT,1(C) + SKIPL LNCP(TT) + JRST LNAL5 + MOVEI D,20 + TLNE J,BMTHR+BIDSF + MOVE D,S + ADDM D,2(C) +LNAL5: ADDI C,NWDPM + CAIL C,EVMET(P) + JRST LNAL5A +LNAL1: MOVE A,R + CAMLE R,[-67000] + CAIL R,67000 + JRST MVD3C ;DONT BUGGER ON FLUSH OR MATE +; JUMPN Q,MVD3 +; +;;TIME TO DO CLEVER DIDDLING +; +; PUSH P,A +; MOVE C,ESMTP-1(P) +; LDB T1,[220100,,3(C)] +; SKIPE T1 +; XCT EVMT6(I) ;MOVE WAS BAD POSITIONALLY +; SKIPE CVPR +; SKIPN C,@CVPR +; JRST MVD3Y +; SKIPL A,1(C) ;"'REPETITION'" +; TRNE A,7 +; JRST MVD3Y +; MOVE C,@GAMP +;MVD3B: JUMPL C,MVD3Y +; LDB T1,[MPTO,,A] +; XOR A,C +; TLNE A,176000 ;SAME PIECE? +; JRST MVD3Y +; MOVE T2,PLYN +; CAIGE T2,20 +; XCT EVMT12(I) +; LDB A,[MPO,,C] +; MOVE S,A +; CAMN T1,A +; JRST MVD3A +; LDB B,[MPC,,C] +; MOVE A,T1 +; MOVE T1,PIECEL(B) +; ADDI T1,BOARD +; PUSH P,(T1) +; SETZM (T1) +; HRRM T1,MVD3Z +; PUSHJ P,LGLMP2 ;IN ONE LEGAL MOVE +; JRST MVD3Z +; XCT EVMT10(I) +; JRST MVD3Z +;MVD3A: XCT EVMT11(I) ;BACK TO SAME SQUARE +; JRST MVD3Y +;MVD3Z: POP P,. +;MVD3Y: POP P,A + +MVD3: +; SKIPN MVDS + SKIPE WALLP + PUSHJ P,MVD1 +MVD2: + XCT EVMT2(I) + JRST EVM5C ;REJECT WHOLE BRANCH + XCT EVMT7A(I) ;TRANSFER (TO EVM6D) ON FLUSH AT LOWER LEVEL IE + ;POSITION MAY BE EVEN LESS FAVORABLE + + XCT EVMT5(I) + AOS (P) ;MOVE LED TO MATE + XCT EVMT1(I) + JRST EVM6 +EVM6A: SKIPE C,CVPR + PUSHJ P,LFSRC +EVM6C: PUSHJ P,UNMOVE +EVM4A: JRST EVM4 + +EVM6D: +; SKIPE -5(P) ;SKIPE IF FIRST LEGAL MOVE INVEST AT THIS LEVEL + XCT EVMT1(I) ;SKIP UNLESS VALUE BEST SO FAR + JRST ESL1A ;WILL EVENTUALLY BE FLUSHED BUT RECORD SO BEST SHOWS IN PRINTOUT +EVM6F: XCT EVMT5(I) + AOS (P) ;LED TO MATE + JRST EVM6A + +EVM5D: IFN CHEOPS,[ + SKIPE CRCYC + JRST [ MOVE J,LMGD + CAIE J,1 + JRST .+1 + MOVEI J,[ASCIZ /CHEOPS RECYCLE, CONSIDER ALL +/] + JRST EVM5D3] +] + SKIPLE ESNPM(P) ;REGULAR WIDTH EXHAUSTED + JRST [ MOVEI J,[ASCIZ /NEED TO CONSIDER MOVE OF MOVE DISTINCT PCS +/] + JRST EVM5D3] ;NOT ENOUGH PIECES MOVED SO TAKE NEXT MOST PLAUS + SKIPN ESNFK(P) ;YES NOW LOOK ONLY AT INDIVIDUAL FLAGGED MOVES + JRST EVM5 + HRRZ C,ESMLP(P) + HRRZ T1,EVMET(P) +EVM5D2: CAMN C,T1 + JRST EVM5 + SKIPGE 2(C) + JRST EVM5D1 ;ALREADY INVESTIGATED + SKIPGE 3(C) + JRST [ MOVEI J,[ASCIZ /FLAGGED +/] + JRST EVM5DX] +EVM5D1: ADDI C,NWDPM + JRST EVM5D2 + + +;EVHSH1: AOS NHFRC +IFN CHEOPS,[ +ECHMV1: AOS NCHFRC + MOVEI C,[ASCIZ /CHEOPS FORCE +/] + CLEARM ECHPMV(P) + MOVEI J,[ASCIZ /CHEOPS FORCE +/] +] +EVHSH: MOVE B,LMGD ;FORCE MOVE IN T1 TO BE NEXT ONE LOOKED AT + SOJN B,EVHSH5 + MOVEI B,PILPT + SKIPE WALLP + SOUT (C) +EVHSH5: HRRZ C,ESMLP(P) + HRRZ R,EVMET(P) +EVHSH3: CAMN T1,1(C) + JRST EVHSH2 + ADDI C,NWDPM + CAMGE C,R + JRST EVHSH3 + ERRTTY [ASCIZ /CANT FIND FORCE- EVHSH3/] + +MVD3C: XCT EVMT14(I) ;TRANSFER TO MVD3 ON US GETTING MATED + MOVM T1,R ;HIM GETTING MATED + SUBI T1,70000 + ADD T1,LMGD + MOVNS T1 + SOJE T1,MVD3D ;MATE IN ON DISCONTINUE SEARCH + MOVE T2,HK1V + SUBI T2,-1(T1) + CAMLE T2,LMGD2 + MOVEM T2,LMGD2 + JRST MVD3 + +MVD3D: CLEARM (P) ;STOP FURTHER SEARCH THIS LEVEL + CLEARM ESNPM(P) + CLEARM ESNFK(P) + JRST MVD3 + +EVM6: JUMPN Q,ESL1 ;DONT DO SEC SEARCH ON FLUSHED VAL + MOVE T1,LMGD + CAMLE T1,INVD + JRST ESL1 + CAMLE R,[-67000] + CAIL R,67000 + JRST ESL1 + PUSH P,Q ;-10 +ESLPQ=-10 + PUSH P,A ;-7 +ESLPA=-7 + PUSH P,R ;SAVE PREV SCORE -6 +ESLPR=-6 + PUSH P,LMGD2 ;DO SECONDARY SEARCH -5 + PUSH P,CVPR ;-4 + PUSH P,PLYN ;-3 + PUSH P,I ;-2 + SUB A,R + PUSH P,A ;SAVE AMT OF BUGGERING + MOVE A,CVPR + PUSHJ P,PLLN ;PLAY OUT ALL PLAUS MOVE GEN MOVES + MOVE A,HK1V + SUB A,IVVDD + MOVEM A,LMGD2 + PUSHJ P,.CAT + LDB I,[100,,PLYN] + CLEARM CVPR + AOS NSLA + PUSHJ P,LMG + POP P,T1 + MOVE I,-2+2(P) + MOVE A,R + CAMLE R,[-67000] + CAIL R,67000 + JRST ESL3A ;DONT BUGGER ON MATE OR FLUSH + SUB R,T1 +ESL3A: +; SKIPN MVDS + SKIPE WALLP + PUSHJ P,MVD1A + XCT ESLT1(I) + JRST ESL3A1 + MOVE A,ESLPA+2(P) ;DONT ALLOW VALUE TO IMPROVE RESTORE PREV VALUE + MOVE R,ESLPR+2(P) + MOVE Q,ESLPQ+2(P) ;+2 S BECAUSE TWO PUSHES HAVENT BEEN DONE YET +ESL3A1: PUSH P,R ;-1 + PUSH P,A ;0 + +ESL3: MOVE A,-3(P) + CAMN A,PLYN + JRST ESL2 + PUSHJ P,UNMOVE + JRST ESL3 + + +ESL2: MOVE T1,-4(P) + JUMPE T1,ESL6 + HRRZ T2,(T1) +ESL5: JUMPE T2,ESL4 + SKIPGE (T2) + JRST ESL4 + MOVE T1,T2 + HRRZ T2,(T2) + JRST ESL5 + +ESL4: MOVE C,CVPR + EXCH C,(T1) + PUSHJ P,LFSRC ;PATCH IN NEW PRINC VAR +ESL7: POP P,A + POP P,R + POP P,I + SUB P,[1,,1] + POP P,CVPR + POP P,LMGD2 + SUB P,[3,,3] + XCT EVMT7A(I) + XCT EVMT5(I) + AOS (P) ;WE GET MATED + XCT EVMT1(I) + JRST ESL1 + JRST EVM6A + +ESL6: EXCH T1,CVPR + MOVEM T1,-4(P) + JRST ESL7 + +ESL1: +ESL1A: MOVEM Q,ESMR(P) + XCT EVMT8(I) + PUSHJ P,BPRVS + MOVEM R,-3(P) + MOVEM A,-4(P) + MOVE C,ESMTP(P) +EVM6B: MOVEM C,-5(P) + MOVE C,-6(P) + PUSHJ P,LFSRC + PUSHJ P,RECMP + MOVE C,CVPR + MOVE T2,POSHSA + MOVEM T2,ESMBHA(P) + MOVE T2,ESMTP(P) + HLLZ T1,3(T2) + TLZ T1,-1-BIDSF-BMTHR ;SET DISCOVERY AND MULTIPLE THREAT BITS + IORM T1,(C) + HLRZ T1,EVNMS(P) + DPB T1,[PUSNM,,(C)] + HLLZS EVNMS(P) + MOVEM C,-6(P) + SETZM CVPR + SKIPE FDCTSW ;SKIP ON NOT IN FEEDOVER CUTTOFF MODE + SKIPL ESFBL(P) ;SKIPN ON INVESTIGATING FEEDOVER + JRST EVM6C + XCT FCT1(I) + JRST EVM6C +IFN HSCOD,[ + SKIPL D,ESMHA(P) + SKIPGE T1,NHSW + JRST EVM6B1 + JUMPE T1,EVM6B2 ;DRAW DET ONLY FLUSH FROM TABLE + LDB T1,[HTVCOD,,HSTBV(D)] + CAIE T1,4 + JRST EVM6B1 + MOVEI T1,1 + DPB T1,[HTVCOD,,HSTBV(D)] + HRRM R,HSTBV(D) ;ACT VALUE BETTER OR = +EVM6B1:] + CLEARM (P) + CLEARM ESNPM(P) + CLEARM ESNFK(P) + JRST EVM6C + +IFN HSCOD,[ +EVM6B2: CLEARM HSTBV(D) + AOS HASHS + SETOM ESMHA(P) + JRST EVM6B1 +] +FCT1: CAMGE R,ESFCV(P) + CAMLE R,ESFCV(P) + + + +BPRVS: MOVEM R,BPREV(I) + XCT EVMT8A(I) ;IF THIS IS BEST SO FAR + ;Q SHOULD NOT SHOW THAT IT MAY BE BETTER FOR US + PTTY [ASCII /ALPHA BETA LOSSAGE!/] + PUSH P,A + PUSH P,B + PUSH P,C + PUSH P,R + PUSH P,I + MOVEI B,TYO + MOVE R,GAMP + SUB R,LMGD +BPRV2: MOVE C,1(R) + PUSHJ P,EPMOVE + PUSHJ P,MCRR + PUSHJ P,DSPACE + AOS R + CAME R,GAMP + JRST BPRV2 + MOVEI A,"! + PUSHJ P,(B) + PUSHJ P,DSPACE + MOVE R,CVPR + PUSHJ P,TYPLNE + POP P,I + POP P,R + POP P,C + POP P,B + JRST POPAJ + + +ESLT1: CAMG R,ESLPR+2(P) + CAML R,ESLPR+2(P) + + EVM5C: +IFN KILLH,[ + SKIPN AKHS + JRST EVM5CK + MOVE S,LMGD + MOVE C,ESMTP(P) + MOVE D,1(C) + SETCMB T1,ABFTC(S) + XCT EVMT51(T1) + SETCMM T1 + XCT EVMT52(T1) ;RECORD AB FL FOR POSSIBLE USE DIRECTING +EVM5CK: ;FUTURE SEARCHES +] +IFN HSCOD,[ + SKIPL D,ESMHA(P) + SKIPGE T1,NHSW + JRST EVM5C1 + JUMPE T1,EVM5C1 ;DRAW DET ONLY FLUSH FROM TABLE + LDB T1,[HTVCOD,,HSTBV(D)] + CAIE T1,4 + JRST EVM5C1 ;DONT CLOBBER. (MAY BE CHEOPS MARK OUT, FOR EXAMPLE). + MOVEI T1,1 + DPB T1,[HTVCOD,,HSTBV(D)] + HRRM R,HSTBV(D) ;ACT VALUE BETTER OR EQUAL +] +EVM5C1: AOS NABF + MOVEM R,-3(P) + MOVEM R,-4(P) + MOVE C,-6(P) + PUSHJ P,LFSRC + PUSHJ P,RECMP + MOVE C,POSHSA ;MAKE SURE POSHSA AND CVPR IN PHASE (FALSE FALSE HASH MATCHS + MOVEM C,ESMBHA(P) ; CAN HAPPEN OTHERWISE) + MOVE C,CVPR + MOVEM C,-6(P) + HLRZ A,EVNMS(P) + DPB A,[PUSNM,,(C)] + MOVEI A,[105] + MOVEM A,-5(P) + PUSHJ P,UNMOVE + SKIPA Q,EVMT5A(I) ;SCORE MAY BE EVEN BETTER FOR SIDE MOVING + +NEV5P==7 ;NUMBER POPS BETWEEN EVM5 AND EVM5B + +EVM5: MOVE Q,ESMR(P) ;RET CURRENT RELIABILITY + MOVE T1,ESLD2(P) + MOVEM T1,LMGD2 + SKIPE ESFBL(P) + AOS MCFB ;RETURNING FROM FEEDOVER + SUB P,[1,,1] ;0 + POP P,LGLMST ;-1 + POP P,I ;-2 + POP P,R ;-3 + SUB P,[1,,1] ;-4 + POP P,T2 ;-5 + POP P,CVPR + JUMPE T2,EVM5A ;NO MOVE +EVM5B: +IFN HSCOD,[ + SKIPL D,ESMHA+NEV5P(P) + SKIPGE T1,NHSW + JRST EVM5B2 + JUMPE T1,EVM5F1 + LDB T1,[HTVCOD,,HSTBV(D)] + CAIE T1,4 + JRST EVM5B3 + MOVE T1,@STVL5T(I) ;GET APPROPRIATE CODE AS INDICATED BY Q AND I + DPB T1,[HTVCOD,,HSTBV(D)] + HRRM R,HSTBV(D) +EVM5B3: HRRZ T2,ESMBHA+NEV5P(P) + MOVE C,CVPR + JUMPE C,EVM5B2 ;NO PRINC VARIATION ANYWAY + MOVE C,1(C) + LDB A,[300,,C] + DPB A,[HSTPRN,,T2] + LDB A,[MPTO,,C] + LDB B,[MPO,,C] + DPB B,[HSTPON,,T2] + DPB A,[HSTSQN,,T2] + MOVEM T2,HSTBL(D) +] +EVM5B2: MOVEM D,POSHSA + + +EVM5B1: MOVE P,LGLMST + POP P,BPREV(I) + POP P,PDVLV + MOVE A,@OKINGT(I) + SKIPN @LMGST+1(I) + SOS LMGD2 ;DONT SOS UNLESS IT WAS AOS ED + SOS S,LMGD +IFN KILLH,SETZM ABFTB+2(S) ;CLEAR ONLY ABFTB FOR RANDOMLY LOWER LEVEL + POPJ P, + + +EVM5F1: CLEARM HSTBV(D) + MOVNI D,1 + AOS HASHS + JRST EVM5B2 + +EVM5A: CAME R,STVT1(I) + JRST EVM5B ;RETURNING VAL FROM CANTK? + MOVEI Q,0 + MOVE A,@OKINGT(I) + SKIPN @LMGST+1(I) + JRST EVM5A1 ;STALEMATE + MOVE R,EVMT3(I) ;CHECHMATE + XCT EVMT4(I) + JRST EVM5B + +EVM5A1: MOVEI R,0 + JRST EVM5B + + +EVMT4: ADD R,LMGD + SUB R,LMGD + + 100000 +EVMST: -100000 + 100000 + +EVMT3: -70000 + 70000 + + +IFN KILLH,[ + CAMN D,ABFTA(S) +EVMT51: CAMN D,ABFTB(S) + + MOVEM D,ABFTA(S) +EVMT52: MOVEM D,ABFTB(S) +] + +EVMTT1: CAMG A,[-67000] + CAIL A,67000 + +EVMT5: CAMG R,[-67000] + CAIL R,67000 + CAMG R,[-67000] + +EVMT1: CAMLE R,-3(P) + CAMGE R,-3(P) + +EVMT2: CAML R,BPREV+1 + CAMG R,BPREV + +;EVMT6: SUB R,BDPV +; ADD R,BDPV + +EVMT8: CAML R,BPREV + CAMG R,BPREV+1 + +EVMT8A: JUMPLE Q,CPOPJ + JUMPGE Q,CPOPJ + +EVMT9: CAMLE A,BPREV + CAMGE A,BPREV+1 + +;EVMT10: SUB R,MSP1MV +; ADD R,MSP1MV +; +;EVMT11: SUB R,MSP0MV +; ADD R,MSP0MV +; +;EVMT12: SUB R,MSPMV +; ADD R,MSPMV +; +EVMT13: BOARD-BW(A) + BOARD+BW(A) + +EVMT14: JUMPL R,MVD3 + JUMPGE R,MVD3 + +LNT1: JUMPLE S,LNAL1 + JUMPGE S,LNAL1 + +EVMT7A: JUMPL Q,EVM6D + JUMPG Q,EVM6D + +EVMT5A: 1 + -1 + 1 + + + +PLLN: JUMPE A,CPOPJ +PLLN1: SKIPGE (A) ;PLAY OUT ALL MOVES IN LINE IN A + POPJ P, ;THAT WERE GEN BY PLAUS MOVE + PUSH P,A + MOVE A,1(A) + LDB I,[420100,,A] + PUSHJ P,MMVNC + JFCL + POP P,A + HRRZ A,(A) + JUMPN A,PLLN1 + POPJ P, + +IFN 0,[ +PLLLNE: JUMPE A,CPOPJ ;PLAY OUT ALL MOVES OF LINE IN A + PUSH P,A + MOVE A,1(A) + SETOM NCFLG + LDB I,[420100,,A] + PUSHJ P,MMVNC + JFCL + POP P,A + HRRZ A,(A) + JRST PLLLNE +] + + + +LMGR7A: SKIPGE LMGT(B) + CAME A,LMGEPS + POPJ T, + JRST LMGR + +LMGR7: SKIPGE RPIECE(B) + POPJ T, + MOVE T1,KSQTBP + CAME A,KSQTB(T1) + AOBJN T1,.-1 + JUMPGE T1,LMGR7A + +LMGR: SKIPGE T1,BOARD(A) + POPJ T, + JUMPE T1,LMGRA + XCT OURGY1(I) ;SKIP ON HIS GUY + POPJ T, +LMGRA: SETOM GDMF ;SAFE MOVE FLAG + CLEARM ICKF + CLEARM IDISKF + MOVEM J,LMJS + MOVEM A,LMAS + MOVEM B,LMBS + HRRZM B,PCMVNG + LDB T1,[BRANK,,BPREL(A)] + MOVEM T1,LMARK +LMGCD1: MOVE T1,[BLGCLR,,BLGCLR+1] + BLT T1,ELGCLR-1 + AOSN CDVCF + JRST LMGCD +TRS1: ;INSERT TRACE TEST WHEN IN TRACE MODE + RC C DEV VAL, MOVE R,CDEVV ;CURRENT DEVEL VALUE + MOVN W,CPOSV ;CURRENT POSITIONAL VALUE + CLEARM DISPOS ;POSITIONAL FACTORS ASSOC WITH DISCOVERIES + MOVE D,PIECEL(B) + SKIPE T1,BDBLK(D) ;UNBLOCKING SOMETHING ? + JRST LMUA +LMUA2: LDB T1,[PTID,,PIECE(B)] + XCT LMPTT(T1) ;FACTORS RELATING TO TYPE OF PIECE +LMPTX: RC CONSTANT, ADD R,IVLU ;INITIAL EFFORT + SKIPE C,ONEB1(A) + JSP Q,LMRP1 ;SEE IF RELIEVING PIN +LMRPBS: SKIPE C,ONEB2(A) + JSP Q,LMRP1 + SKIPN BOARD(A) ;DONT WORRY ABT BLOCKING PAWNS IF CAPTURE + SKIPGE LMGT(B) + JRST LMCPB1 + JUMPN I,LMCPB + SKIPLE T1,BOARD-BW(A) + SKIPL LMGSTD-PIECE(T1) + JRST LMCPB1 + CAIN A,WK3 + RC BLOCKING KP AT K3, SUB R,BCPVLU + CAIN A,WQ3 + RC BLOCKING QP AT Q3, SUB R,BCPVLU +LMCPB1: +IFE NEWPLS,[ + MOVE T2,@LMGST(I) ;OUR DEFENSE + SKIPN BOARD(A) ;SKIP ON CAPTURE + SKIPL LMGT(B) ;SKIP ON PAWN + SOS T2 ;UNLESS PAWN NON CAPTURE + MOVEM T2,LMOA +LMGR6: + SKIPN T1,BOARD(A) + JRST LMGR3 ;NO CAPTURE +LMGR6A: MOVE T2,LMGD ;GET BACK HERE ON E.P. CAPT + CAMG T2,CATCUT + SETOM ICKF ;INVESTIGATE ALL CAPTURES AT FIRST N LEVELS + RC DEVEL VAL FOR PIECE TAKEN, MOVEI B,-PIECE(T1) + PUSH P,T1 + PUSHJ P,CBDV ;ADD DEV VAL OF PIECE TAKEN + MOVE B,LMBS + POP P,T1 ;NOT BOARD(A) IN CASE OF E.P. + MOVE TT,PVALUE-PIECE(T1) + SKIPGE LMGT-PIECE(T1) + SKIPN S,PPASED-PIECE(T1) + JRST LMAV1 + ADD TT,PASPV(S) ;ALSO ADD VALUE FOR BEING PASSED +LMAV1: MOVEM TT,HPVAL + SKIPN @LMGST+1(I) + JRST LMGR4I ;ITS NOT PROTECTED + PUSHJ P,AFLATA + MOVEM C,LCATR ;NEXT ATTACKER + MOVEM D,LCDFR ;FIRST DEFENDER + MOVE T1,BOARD(A) + JUMPE D,LMGR4I + ;FOLLOWING CODE IS SIMILAR TO LRDC1 + MOVE ZR,@LMGST+1(I) + SOJN ZR,LMAV1A ;NOT ONLY DEF + SKIPL LMGT(D) + JRST PMO1 + MOVE TT,PFILE(D) ;ONLY DEF IS PAWN + MOVE ZR,@SNPNFL+1(I) + SOJN ZR,PMO1 ;NOT CURRENTLY ONLY P ON FILE + MOVE T2,PFILE(B) + SKIPE @SKNPN2+1(I) + JRST PMO2 ;PAWNS IN TWO OVER FILE TO K SIDE, SO K SIDE OK + CAIN TT,-1(T2) + RC RECAPTING P WILL BE ISO,ADDI R,40 + SKIPE @SKNPNF+1(I) + RC ADJ P TO K SIDE MADE ISO,ADDI R,40 +PMO2: SKIPE @SQNPN2+1(I) + JRST PMO1 + CAIN TT,1(T2) + RC RECAPTING P WILL BE ISO,ADDI R,40 + SKIPE @SQNPNF+1(I) + RC ADJ P TO Q SIDE MADE ISO,ADDI R,40 +PMO1: SKIPN T2,NPOD(D) ;SEE IF ONLY DEFENDER CONSTRAINED + JRST LMAV1A ; NO. + MOVE J,D + MOVE C,NPODBT(J) + AND C,FJLRT1+1(I) ;RESTRICT TO HIS PCS +LRCJ2: JFFO C,LRCJ1 +LMAV1A: SKIPE LMFORS + JRST LMGR4I ;SOME ATTACKS UNCOVERED WHICH MAY PREVENT RECAPTURE + MOVE TT,PVALUE(B) + CAMGE TT,HPVAL + JRST LMGR4B ;FAVORABLE TRADE (AT LEAST) + CAMG TT,HPVAL ;PIECE WORTH LESS + JRST LMGCT1 ;EVEN TRADE + SUB TT,HPVAL ;UNFAVORABLE TRADE + SKIPE LMOA + JRST LMGR4D ;WE ALSO HAVE OTHER ATTACKS + MOVNM TT,EGAIN + RC CALC LOSS 1, SUB R,TT + JRST LMGR4N + +;PIECE DEFENDING CAPTED PC IS ONLY DEF OF SOME OTHER PCS. SEE IF IT HOLDS. +LRCJ1: ANDCM C,FJLRT2(D) ;CLEAR BIT + MOVE T2,PIECEL(D) + CAMN T2,LMAS + JRST LRCJ2 ;RECAPTING ON THIS PC NOW. + LDB T2,[PTID,,PIECE(J)] + SOJLE T2,LRCJ3 ;P OR N, WILL NOT HOLD + MOVE S,PIECEL(B) + PUSH P,BOARD(S) + CLEARM BOARD(S) ;AVOID INTERFERENCE BY MOVING PC + PUSH P,B + MOVE S,PIECEL(D) ;PIECE WHICH WOULD BE LEFT LOOSE + MOVE B,J + PUSHJ P,@LGLMPT(B) + JRST LRCJ3A ;WILL NOT HOLD + MOVE A,LMAS ;STILL HOLDS + POP P,B + MOVE S,PIECEL(B) + POP P,BOARD(S) + JRST LRCJ2 + +LRCJ3A: MOVE A,LMAS ;DOESNT HOLD + POP P,B + MOVE S,PIECEL(B) + POP P,BOARD(S) +LRCJ3: MOVE ZR,PVALUE(B) + SUB ZR,PVALUE(D) + CAILE ZR,BVMNV + JRST LRCJ3B ;PIECE GETTING LEFT LOOSE NOT TOO VALUABLE. ASSUME RECAPT WILL + ; TAKE PLACE, BUT CREDIT CURRENT MOVE FOR POSSIBLE GAIN + ; DUE TO LEFT-LOOSE PIECE + RC *P!J NOT DEFENDING BECAUSE THEN *P!D WOULD BE LOOSE, JRST LMGR4I + +LRCJ3B: RC IF *P!J RECAPTS *P!D WOULD BE LOOSE, ADDI R,100 + JRST LRCJ2 + +LMGCT1: PUSHJ T,LRH2 ;TAKE INTO ACCOUNT WHETHER AHEAD + XCT WTRD(I) ;SKIP ON I WANTS TO TRADE + JRST LMGR4B + MOVE ZR,HPVAL + LSH ZR,-3 + MOVEM ZR,EGAIN + RC WANT TO TRADE,ADD R,ZR + JRST LMGR4B + +WTRD: SKIPG WTPCSW + SKIPL WTPCSW +] +LMGG1: XCT LMGR6T(I) + JRST LMGR6A + +LMGR6T: MOVE T1,BOARD-BW(A) + MOVE T1,BOARD+BW(A) + +LMGRT1: SKIPLE T1,BOARD+BW(A) + SKIPLE T1,BOARD-BW(A) + + +LMGRT3: SUBM T2,T1 + SUB T1,T2 + +OQT: BKING+1-PIECE+PIECEL + WKING+1-PIECE+PIECEL + +;DISPATCH TABLE ON TYPE OF PIECE +LMPTT: JRST LMPTP ;PAWN, CENTRALIZE, FORM HEAD DUO, PAWN BREAK. + JRST LMPTN ;NIGHT, CENTRALIZE + JFCL ;B + JFCL ;R + JFCL ;Q + JRST LMPTK ;K, MAYBE PULL BACK. + +LMPTP: MOVE T1,WCFCT(A) + SKIPGE PIECE(B) + MOVM T1,BCFCT(A) ;WANT A POSITIVE FACTOR + SKIPE CNTSW + IMUL T1,CNTSW + RC P CENTERING FACTOR,ADD R,T1 + JRST LMPTX + +LMPTN: MOVE T1,WCFCT(A) + SKIPGE PIECE(B) + MOVM T1,BCFCT(A) ;WANT A POSITIVE FACTOR + IMUL T1,CPCFCT+1 + SKIPE CNTSW + IMUL T1,CNTSW + RC N CENTERING FACTOR,ADD R,T1 + JRST LMPTX + +LMPTK: SKIPN OPNMID ;PLAUSIBLE TO PULL BACK KING + JRST LMGCMY + MOVE T1,LMARK + MOVE T2,PRANK(B) + XCT LMGRT3(I) + LSH T1,3 + SKIPE OPENF + LSH T1,3 + SKIPN @OQT(I) + JRST LMGCMZ + SKIPE I + MOVE T2,REVERS(T2) + IMUL T1,T2 +LMGCMZ: RC PULL KING BACK, ADD R,T1 +LMGCMY: JRST LMPTX + +LMCPB: SKIPLE T1,BOARD+BW(A) + SKIPL SNFBP-PIECE(T1) + JRST LMCPB1 + CAIN A,BK3 + RC BLOCKING KP AT K3, SUB R,BCPVLU + CAIN A,BQ3 + RC BLOCKING QP AT Q3, SUB R,BCPVLU + JRST LMCPB1 + +LMFA3: LDB T1,[BFILE,,BPREL(A)] + CAMN T1,@KFILE+1(I) + RC SAME RANK AS K, ADD R,PTFVLU + LDB T1,[BRANK,,BPREL(A)] ;NOT LMARK BECAUSE OF CCPV + CAME T1,@KRNK+1(I) + POPJ P, + RC SAME FILE AS K, ADD R,PTFVLU + SKIPE BPNFLS(T1) + POPJ P, + SKIPN WPNFLS(T1) + RC FILE OPEN,ADD R,POFVLU + POPJ P, + +LMDA: MOVE TT,@OKINGT+1(I) + LDB T2,[BPDAG,,BPREL(A)] + LDB T1,[BPDAG,,BPREL(TT)] + CAMN T1,T2 + RC SAME +DIAG AS K, ADD R,PTFVLU + LDB T2,[BMDAG,,BPREL(A)] + LDB T1,[BMDAG,,BPREL(TT)] + CAMN T1,T2 + RC SAME -DIAG AS K, ADD R,PTFVLU + POPJ P, + +LMRP1: JFFO C,LMRP6 + JRST (Q) + +LMRP6: LDB S,FJRPT1(D) + ANDCM C,FJRPT2(D) + MOVE J,BOARD(S) + SKIPE TT,PINT-PIECE(J) + XCT OURGYJ(I) + JRST LMRP1 + MOVE T1,@FJRPT3-LMRPBS(Q) + LDB T2,RDATSS(T1) ;OUR PINNED PIECE +; SKIPGE SLDPC(T2) ;WOULD NEVER SKIP + XCT RMOY6+1(I) + JRST LMRP1 +LMRP5: LDB ZR,[PINATP,,1(TT)] ;ATTACKED BY HIS SLIDER + CAMN ZR,T2 + JRST LMRP4 + HRRZ TT,(TT) + JUMPN TT,LMRP5 + JRST LMRP1 + +LMRP4: LDB TT,[PINBS,,1(TT)] + CAMN TT,PIECEL(B) + JRST LMRP1 ;SAME PIECE AS PINNED TO NOW + MOVE ZR,PVALUE(T2) + CAMGE ZR,PVALUE-PIECE(J) + JRST LMRP4A ;HE CAN TAKE PINNED PIECE PROFITABLY + CAML ZR,PVALUE(B) + JRST LMRP4B ;NO NEW PIN UNLESS LOOSE +LMRP4A: RC EASING PIN ON *M!J, ADDI R,20 + JRST LMRP1 + +LMRP4B: RC RELIEVING PIN ON *M!J, ADDI R,40 + JRST LMRP1 + +FJRPT1: ZZQ==331100,,C + REPEAT 4,[ + REPEAT 9,ZZQ + ZZQ==ZZQ-<110000,,> +] +FJRPT2: ZZQ==777000,, + REPEAT 4,[ + REPEAT 9,ZZQ + ZZQ==ZZQ_-9 +] +FJRPT3: FJRPT4(D) + 0 + FJRPT5(D) + +FJRPT4: ZZQ==0 + REPEAT 4,[ + REPEAT 9,ZZQ + ZZQ==ZZQ+1 +] +FJRPT5: REPEAT 4,[ + REPEAT 9,ZZQ + ZZQ==ZZQ+1 +] + +IFE NEWPLS,[ +LMGR4I: MOVE ZR,HPVAL + MOVEM ZR,EGAIN + RC PIECE TAKEN LOOSE- FULL VALUE, ADD R,ZR + JRST LMGR1 + +LMGR4E: MOVE S,@LMGST+1(I) + SOJE S,LMGR4F ;WE WONT LOSE OUR 2ND ATTACKER +LMGR4G: CAMG TT,LMGT1 + MOVE TT,LMGT1 ;NOT PROFITABLE TO RECAPTURE + MOVEM TT,EGAIN + RC CALC GAIN 1, ADD R,TT + CAML TT,[-BVMNV] + JRST LMGR1 ;NOT REALLY ALL THAT BAD +LMGR4N: AOS GDMF + +LMGR4M: PUSH P,A ;CAPTURE WHEN RECAPTURE EXPECTED OR MOVING INTO PRISE + HRLM B,(P) + JRST LGR1F1 + +LMGR4F: ADD TT,PVALUE(C) + JUMPL TT,LMGR4G ;BAD ANYWAY + JRST LMGR4H + +LMGR4D: MOVNM TT,LMGT1 ;WE CAN ESCAPE WITH THIS LOSS AT WORSE + MOVE C,LCATR + MOVE D,LCDFR + MOVE TT,PVALUE(D) ;HIS LOSSES + ADD TT,HPVAL ;PIECE TAKEN + FIRST DEFENDER + SUB TT,PVALUE(B) ;OUR LOSSES + SUB TT,PVALUE(C) ;PIECE TAKING + FIRST DEFENDER + JUMPL TT,LMGR4E ;TRADE APPARENTLY BAD FOR US IF CARRIED OUT ALL THE WAY +LMGR4H: CAMLE TT,HPVAL ;HE HAS OPTION OF NOT TAKING FIRST TIME + MOVE TT,HPVAL + MOVEM TT,EGAIN + RC CALC GAIN 2, ADD R,TT +LMGR4C: MOVE T2,@LMGST+1(I) ;TRADE MAY BE OK ANYWAY + + CAMGE T2,LMOA + RC HAVE MORE ATTACKS, ADD R,MJVLU ;MORE ATTACKS THAN OPP +] + + +LMGR1: PUSH P,A ;STORE MOVE + HRLM B,(P) + PUSHJ P,LMGR1A ;EVALUATE POSITIONAL FACTORS, ATTACKS, ETC. + MOVE T1,LMFORS + SOJG T1,LGR1F ;TWO OR MORE FORCING THREATS +LGR1F1: MOVEI T1,0 + SKIPE ICKF + TLO T1,400000 + SKIPE IDISKF + TLO T1,BIDSF ;DISCOVERY + SKIPE ICKF + AOS NCKF ;NO. OF CHECKING MOVES + IORM T1,LMFORS + ADD W,DISPOS + MOVM T1,W + XCT STDVL1 + SKIPGE W + MOVNS T1 + RC SCALED POSTIONAL CHANGE,ADD R,T1 + SKIPGE R + MOVEI R,0 + PUSH P,R ;NET PLAUSIBILITY NWDPM + PUSH P,LMFORS ;RETURNED VALUE + PUSH P,W ;POSITIONAL VALUE + ADDM R,TEFAL + SKIPGE GDMF + AOS NSMVS + MOVE A,LMAS + MOVE J,LMJS + MOVE Q,LMQS +IFN KILLH,[ + SKIPN AKHS + JRST CPOPJT + MOVE T2,LMGD + MOVE T1,-NWDPM+1(P) + CAMN T1,ABFTA(T2) + CAME T1,ABFTB(T2) +] +CPOPJT: POPJ T, +IFN KILLH,[ + MOVEI T1,4000 ;THIS MOVE CAUSED AB FLUSH IN PREV INVES + IORM T1,-NWDPM+2(P) ;MAKE IT VERY PLAUS + POPJ T, +] + + +LGR1F: CAILE T1,3 + MOVEI T1,3 + RC MULTIPLE THREATS, ADD R,LMFPT(T1) ;ADD BONUS FOR THE THREATS + SETOM ICKF ;BE SURE TO INVESTIGATE MOVE + MOVSI T1,BMTHR + IORM T1,LMFORS ;WILL GET SET INTO WD3 + JRST LGR1F1 + +LMGR4B: SKIPE LMOA + JRST LMGR4J ;WE ALSO HAVE OTHER ATTACKS +LMGR4K: SUB TT,HPVAL + MOVNM TT,EGAIN + RC CALC GAIN 3, SUB R,TT + JRST LMGR4M + +LMGR4L: CAMGE T2,LMOA + JRST LMGR4I + JRST LMGR4K + +LMGR4J: MOVE T2,@LMGST+1(I) + SOJN T2,LMGR4L ;HE HAS MORE THAN 1 DEF + MOVE D,LCDFR + JUMPE D,LMGR4I ;ITS NOT REALLY DEFENDED + MOVE TT,HPVAL + SUB TT,PVALUE(B) + ADD TT,PVALUE(D) + CAML TT,HPVAL + MOVE TT,HPVAL ;HE CANT RECAPTURE PROFITABLY + MOVEM TT,EGAIN + RC CALC GAIN 4, ADD R,TT + JRST LMGR4C + + +LMGR1A: PUSH P,W + MOVEI W,0 + RC COMPUTE DEV VAL FOR *P!B AT *S!A,MOVEM A,CSMTM + ;SAVE CURRENT ORG SQUARE FOR USE IN LMGR2 + SKIPGE RFPCS(B) + PUSHJ P,LMFA3 + SKIPGE DDPCS(B) + PUSHJ P,LMDA + XCT LMGRT1(I) ;BLOCK PASSED PAWNS + XCT OURGY1(I) + JRST LMGR1F + SKIPE T1,PPASED-PIECE(T1) + RC BLOCKING PP, ADD R,PPP(T1) +LMGR1F: HRROI Q,LMGR2 + SKIPGE LMGT(B) + JRST LGR1C + PUSHJ T,@LMGSTD(B) ;EVALUATE DEVELOPMENT AND STRATEGIC VALUE +LMGR1B: IMUL W,PINVF(B) + RC TOTAL POSITIONAL VALUE, ADD W,(P) + SUB P,[1,,1] + MOVE Q,LMQS + MOVE A,CSMTM + POPJ P, + + +LGR1C: SKIPGE @LGR1CT(I) + JRST LGR1C1 ;QUEENING + PUSHJ T,LMGR1C + JRST LMGR1B + +LMGR1C: XCT LMGRT(I) ;EVALUATE PAWN ATTACK + PUSHJ T,(Q) + SUBI A,2 + JRST (Q) + +LMGRT: ADDI A,BW+1 + SUBI A,BW-1 + + +LGR1CT: BOARD+BW(A) + BOARD-BW(A) + +LGR1C1: SETOM ICKF + PUSHJ T,LSQUEEN + JRST LMGR1B + +CCPV: RC COMPUTE TACT POS VAL *P!B AT *S!A,MOVEM A,CSMTM + SKIPGE RFPCS(B) + PUSHJ P,LMFA3 + SKIPGE DDPCS(B) + PUSHJ P,LMDA + XCT LMGRT1(I) ;SKIPLE T1,BOARD +(-)BW(A) + XCT OURGY1(I) + JRST .+3 + SKIPE T1,PPASED-PIECE(T1) + RC WAS BLOCKING PP,ADD R,PPP(T1) +CCPV5: MOVEI W,1 ;FOR USE IN DPB ING IN BATTSQ + HRROI Q,CCPV1 + SKIPGE LMGT(B) + JRST CCPV2 + PUSHJ T,@LMGSTD(B) +CCPV3: MOVE A,CSMTM + MOVE Q,LMQS + MOVE W,PDV(B) + RC PRESENT POSITIONAL VALUE,IMUL W,PINVF(B) + POPJ P, + +CCPV2: PUSHJ T,LMGR1C + JRST CCPV3 + +LMGCD: +TRS2: ;INSERT TRACE TEST WHEN IN TRACE MODE + ;GET CURRENT DEVELOPMENT VAL + RC COMPUTE DEVEL VAL, CLEARB R,W + MOVE A,PIECEL(B) + MOVEM A,ORGPCL ;ORGINAL PIECE LOCN + CLEARM BASQ1 ;GET SET UP WITH SQS CURRENTLY HITTING + CLEARM BASQ2 + PUSHJ P,CCPV + RC CURRENT DEVEL VAL, MOVEM W,CPOSV ;POS VALUE OF CURRENT LOCN + SKIPE D,ONEB1(A) ;SEE IF WE ARE BASE PIECE OF A PIN + JSP W,LDPN1 +LDPBS1: SKIPE D,ONEB2(A) + JSP W,LDPN1 +; SKIPGE SLDPC(B) ;WILL GET BONUS FOR ATTACKING PINNED PIECE +; JRST LMGCP1 ;ARE WE PINNING SOMETHING NOW? +LMGCP2: LDB T1,[PTID,,PIECE(B)] + XCT LMGCDX(T1) ;FACTORS RELATING TO TYPE OF PIECE +LMGCDA: +LMGCD7: RC ENPRISE CALC LOSS, SUB R,ENPCL(B) +LMGCD8: +LMGCD5: + MOVE T2,PLYN + SKIPGE POSRDI + MOVEI T2,105 ;POSITION HAS BEEN READ IN + LDB T1,[PTID,,PIECE(B)] + XCT LMGCD3(T1) ;TOO EARLY TO MOVE PIECE? + JRST LMGCD4 +LMGCD2: MOVNM R,CDEVV + MOVE A,LMAS + JRST LMGCD1 + + + +;LMGCP1: MOVE T2,LGMST2+1(I) +;LMGCP4: SKIPE T1,PINT(T2) +; JRST LMGCP3 +;LMGCP6: AOBJN T2,LMGCP4 +; JRST LMGCP2 +; +;LMGCP3: LDB S,[PINATP,,1(T1)] +; CAIN S,(B) +; JRST LMGCP5 +; HRRZ T1,(T1) +; JUMPN T1,LMGCP4 +; JRST LMGCP6 +; +;LMGCP5: RC PINNING *P!T2, ADDI R,20 +; JRST LMGCP6 + +LMGCDX: JRST LMGCDP + JRST LMGCDN + JRST LMGCDB + JRST LMGCDR + JFCL + JRST LMGCDK + +LMGCDK: SKIPL @HMID(I) + JRST LMGCD5 ;"ENDGAME" NO PENALITY + SKIPE T1,NMOVES(B) ;NEG FACTORS ON KING MOVE + JRST LMGDK3 + RC FIRST KING MOVE,ADD R,FMKING + XCT LMGKT1(I) ;DOES QR EXIST? + XCT LMGKT2(I) ;HAS IT MOVED? + JRST .+2 + JRST LGCDK2 + XCT LMGKT3(I) ;KR + XCT LMGKT4(I) + JRST LMGCD5 +LGCDK2: RC MOVING K WHEN O-O(-O) POSSIBLE,ADD R,KKCAS + JRST LMGCD5 + +LMGDK3: SKIPE NMKING(I) + SOS T1 + SKIPG T1 + RC FIRST K MOVE OTHER THAN O-O(-O), ADD R,FMKING + JRST LMGCD5 + +LMGCDR: SKIPE @NKM(I) + JRST LMGCDA + SKIPN NMOVES(B) + RC MOVING R WHEN O-O(-O) POSSIBLE, ADD R,FMROOK + JRST LMGCDA + +LMGCDN: +LMGCDB: SKIPN NMOVES(B) + RC MOVING MINOR PIECE FIRST TIME, SUB R,MPFMV + JRST LMGCDA + +LMGCDP: SKIPN T1,PPASED(B) + JRST LGCDP2 + SKIPGE T1 + SUBI T1,2 ;BLOCKED BY FRIENDLY P + RC PUSHING PASSED PAWN, SUB R,PPP(T1) +LGCDP2: SKIPE T1,PPTP(B) + XCT LMPPTP(T1) + JRST LMGCDA + + + RC MOVING P DEFENDED BY P, ADD R,LMMPDP +LMPPTP: ERRTTY [ASCII /LOSE AT LMPPTP!/] + RC MOVING FORWARD PAWN, ADD R,LMMFP + RC MOVING BACKWARD PAWN, SUB R,LMMBP + RC MOVING ISOLATED PAWN, SUB R,LMMIP + +LMGCD3: JRST LMGCD2 ;P + CAIGE T2,2 ;N + CAIGE T2,2 ;B + CAIGE T2,6 ;R + CAIGE T2,10 ;Q + CAIGE T2,10 ;K + + +LMGCD4: SKIPE @LMGST+1(I) ;PIECE ATTACKED + JRST LMGCD2 + RC TOO EARLY TO MOVE THIS PIECE,SUB R,WPVLU + JRST LMGCD2 + +LMGKT1: SKIPE PIECEL+WQR-PIECE + SKIPE PIECEL+BQR-PIECE + +LMGKT2: SKIPE NMOVES+WQR-PIECE + SKIPE NMOVES+BQR-PIECE + +LMGKT3: SKIPE PIECEL+WKR-PIECE + SKIPE PIECEL+BKR-PIECE + +LMGKT4: SKIPE NMOVES+WKR-PIECE + SKIPE NMOVES+BKR-PIECE + + +IFE NEWPLS,[ +LMGR3: CAMN A,GHLOC + SKIPL LMGT(B) + JRST .+2 + JRST LMGG1 ;EP CAPTURE + SKIPE T1,BDA1(A) + JSP Q,LBL1 +LBFJBS: SKIPE T1,BDA2(A) + JSP Q,LBL2 + SKIPGE TRPPCF + JRST LTMT1 ;SEE IF TRAPPING EXPOSED PIECE(B AT R2) +LTMT2: SKIPN LMFORS ;UNCOVERING ATTACK + SKIPN @LMGST+1(I) + JRST LR3 ;NO ATTACKED + PUSHJ P,AFLATA + JUMPE D,LR3 + JUMPE C,LMGR3X ;NOT DEFENDED + MOVE TT,PVALUE(D) + SUB TT,PVALUE(B) + MOVE S,TT + CAMGE TT,[-BVMNV] ;BIS-NT VAL + JRST LMGR3C ;SQUARE ATTACKED BY LESSER VALUE + MOVE T1,@LMGST+1(I) + SOJE T1,LR3E ;ONLY ATTACK + SUB TT,PVALUE(C) + JUMPG TT,LR3E ;OUR FIRST TWO LESS VAL THA HIS FIRST ONE + MOVE T2,@LMGST+1(I) + CAMG T2,LMOA + JRST LR3E +LMGR3C: MOVN T1,PVALUE(B) + CAMG TT,T1 ;LOSS IS PIECE OR EXCHANGE WHICHEVER IS LESS +LMGR3X: MOVN TT,PVALUE(B) ;LOSS IS PIECE +LRDC1: SKIPN T2,NPOD(D) + JRST LMGR3G ;HIS PIECE UNENCUMBERED + MOVE T1,@LMGST+1(I) + SOJN T1,LMGR3G ;MORE THAN ONE DEF + MOVE J,D + MOVE C,NPODBT(J) + AND C,FJLRT1+1(I) ;RESTRICT TO HIS PCS +LRDFJ2: JFFO C,LRDFJ1 +LMGR3G: ADDM TT,EGAIN + RC MOVING INTO PRISE CALC LOSS,ADD R,TT + AOS GDMF +LMGR4A: MOVE T1,LMGD + CAMLE T1,CATCUT + JRST LMGR4M +LCHK1: MOVE S,A + MOVE A,@OKINGT+1(I) + PUSHJ P,@LGLMPT(B) + JRST LCHK3 + SETOM ICKF ;LOOK AT ALL CHECKS AT TOP LEVELS +LCHK3: MOVE A,LMAS + JRST LMGR4M + + +LRDFJ1: ANDCM C,FJLRT2(D) ;CLEAR BIT + LDB T2,[PTID,,PIECE(J)] + SOJLE T2,LRDC6 ;P OR N WILL NOT HOLD + MOVE S,PIECEL(B) + PUSH P,BOARD(S) + CLEARM BOARD(S) ;AVOID INTERFERENCE BY MOVING PIECE + PUSH P,B + MOVE S,PIECEL(D) + MOVE B,J + PUSHJ P,@LGLMPT(B) + JRST LRDC6A ;WILL NOT HOLD + MOVE A,LMAS ;STILL HOLDS + POP P,B + MOVE S,PIECEL(B) + POP P,BOARD(S) + JRST LRDFJ2 + + +LRDC6A: MOVE A,LMAS + POP P,B + MOVE S,PIECEL(B) + POP P,BOARD(S) +LRDC6: MOVE ZR,PVALUE(B) + SUB ZR,PVALUE(D) + CAILE ZR,BVMNV + JRST LRDFJ2 + SKIPG ZR + MOVEI ZR,1 + RC NOT DETERRED BY *P!J BECAUSE THEN *P!D WOULD BE LOOSE,SUB R,ZR + JRST LR3 + +LR3E: SKIPGE S + RC CALC MINOR LOSS,ADD R,S +LR3: SKIPN NPOD(B) ;MOVE LOOKS OK BUT ARE WE ABANDONING ANYTHING + JRST LMGR1 + MOVE C,NPODBT(B) + AND C,FJLRT1(I) ;RESTRICT TO OUR PCS +FJLR2: JFFO C,FJLR1 + JRST LMGR1 + +FJLR1: ANDCM C,FJLRT2(D) + LDB T2,[PTID,,PIECE(B)] + SOJLE T2,LR3C ;YES LEAVING SOMETHING EN PRISE + MOVE S,PIECEL(D) + PUSHJ P,@LGLMPT(B) + JRST LR3C1 + JRST FJLR2 + +LR3C1: +LR3C: MOVE S,RPVAL(D) + LSH S,-2 + RC ABANDONING *P!D ,SUB R,S + JRST FJLR2 + +] +FJLRT1: 377776,,0 ;MASK TO OUR PCS + 1,,777770 + 377776,,0 + +FJLRT2: 0 +PP PCBIT:, REPEAT 32.,MOVE_-.RPCNT + REPEAT 3,0 + + + + +SQVAT: ADD W,WAV(A) + ADD W,BAV(A) + +LMUAGR: SKIPGE BOARD(A) ;FOR UNCOVERED ATTACK + POPJ T, + POP T,LMUTT0 + POP T,LMUTT1 + POP T,LMUTT2 + PUSH T,@LMURAT(I) + PUSH T,@RDAT(J) + PUSH T,A + HRLM J,(T) + PUSH T,[LMUUN1] + PUSH T,LMUTT2 + PUSH T,LMUTT1 + PUSH T,LMUTT0 + MOVE T1,LMUBAI + ADDM T1,@LMURAT(I) + SKIPN ATTHF + DPB B,RDAT(J) + JRST LMGR2C + +LMGR2: SKIPGE BOARD(A) ;COME HERE FOR EACH SQUARE PIECE ATTACKS + POPJ T, +LMGR2C: XCT SQVAT(I) + SKIPN T1,BOARD(A) + POPJ T, + +LMGR2A: SKIPE DISCOVF + JRST LG2DA1 + LDB T2,BATTSQ(A) + JUMPN T2,LGAA1 ;ALREADY ATTACKING HERE (BUT MAYBE ADD DEF VALS + ;TO COMPENSATE +LG2DA1: MOVE T2,(T1) + XOR T2,PIECE(B) + JUMPGE T2,LDFP1 ;OUR GUY + SKIPGE SLDPC(B) + JRST LMGP1 +LMGP2: SKIPGE RPIECE-PIECE(T1) + SETOM ICKF ;CHECK + SKIPL LMGT(B) ;PAWN BREAK + JRST .+3 + SKIPGE LMGT-PIECE(T1) + RC PAWN BREAK,ADD R,BRKVLU + SKIPGE PPTP-PIECE(T1) + SKIPN PINT-PIECE(T1) + JRST LPSS1 + RC PINNED P DEF BY P,ADD R,APDPV + JRST LPSS2 +LPSS1: SKIPE PINT-PIECE(T1) + RC ATTACKING PINNED PIECE *M!T1 ,ADD R,APVLU +LPSS2: SKIPGE RFPCS(B) + SKIPL LMGT-PIECE(T1) + JRST LPSS3 + SKIPGE PPTP-PIECE(T1) + JRST LPSS3 ;PAWN DEF BY PAWN + ;FILE MOVEING PIECE ATTACKING P + MOVE T2,CSMTM ;ADD BONUS IF ATTACKING ON FILE + LDB T2,[BFILE,,BPREL(T2)] + CAME T2,PFILE-PIECE(T1) + JRST LPSS3 + RC ATTACKING *M!T1 ON FILE,ADD R,APFVLU ;ATTACK PAWN ON FILE + SKIPLE PPASED-PIECE(T1) + RC PASSED *M!T1 ON FILE,ADD R,APFPV ;ADD EXTRA BONUS IF PAWN PASSED +LPSS3: SKIPGE LMGT-PIECE(T1) + SKIPG PPTP-PIECE(T1) + JRST LPSS4 + RC ATTACKING WEAK P, ADD R,AWPVLU +LPSS4: MOVE T2,RPVAL-PIECE(T1) + ADDM T2,AGAIN + SKIPN @LMGST+1(I) + JRST LMGR2D ;HIS PIECE UNDEFENDED + SUB T2,RPVAL(B) + JUMPLE T2,LMGR2H + LSH T2,-1 + CAIL T2,2*PWNV + MOVEI T2,2*PWNV + RC ATTACK VAL *M!T1 ,ADD R,T2 + AOS LMFORS + +LMGR2B: MOVE T1,@LMGST+1(I) + CAMG T1,@LMGST(I) + RC OVERATTACKING,ADD R,TTVLU + POPJ T, + + +CSMTM: 0 ;HOLDS SQUARE BEING MOVED TO IN CURRENT MOVE + + +LMGP1: SKIPE ATTHF + JRST LMGP2 + PUSH P,A ;SEE IF PINNING PIECE +LMGP3: ADD A,RDT(J) + SKIPN T2,BOARD(A) + JRST LMGP3 + JUMPL T2,LMGP4 + XCT OURGY2+1(I) + JRST LMGP4 + SKIPN @LMGST+1(I) + JRST LMGP5 ;YES PINNED + MOVE ZR,PVALUE-PIECE(T2) + CAMLE ZR,PVALUE(B) + JRST LMGP5 + SKIPL LMGT-PIECE(T2) + JRST LMGP6 + SKIPG PPTP-PIECE(T2) + JRST LMGP4 ;DONT WORRY ABOUT NON WEAK P +LMGP6: MOVE ZR,@LMGST(I) + CAMN ZR,@LMGST+1(I) + JRST LMGP7 ;MIGHT BE PINNING + CAML ZR,@LMGST+1(I) + RC PSEUDO PIN ON *M!T1, ADDI R,20 +LMGP4: POP P,A + JRST LMGP2 + +LMGP7: RC MAYBE PIN ON *M!T1,ADDI R,40 + JRST LMGP4 + +LMGP5: SKIPL LMGT-PIECE(T1) + JRST LMGP5A + SKIPG PPTP-PIECE(T1) + JRST LMGP5B ;PINNING NON WEAK P +LMGP5A: MOVE S,RPRANK-PIECE(T1) + MOVE ZR,PVALUE-PIECE(T1) + CAMLE ZR,PVALUE(B) + JRST LMGP5C ;ALSO VALID ATTACK + RC PINNING *M!T1 AT RANK *U!S, ADD R,PINVLT(S) + JRST LMGP4 + +LMGP5B: RC PINNING NON WEAK P,ADDI R,40 + JRST LMGP4 + +LMGP5C: RC PINNING+ATTACKING *M!T1 AT RANK *U!S, ADD R,PINVAT(S) + JRST LMGP4 + +LTMT1: SKIPL LMGT(B) + JRST LTMT2 + CAME A,LTMTT1(I) ;MOVING TO KN3? + JRST LTMT3 + SKIPE D,@TPT1(I) + XCT OURGY+1(I) + JRST LTMT3 + SKIPGE RMDTB-PIECE(D) + RC TRAPPING B,ADDI R,200 +LTMT3: CAME A,LTMTT2(I) ;MOVING TO QN3 + JRST LTMT2 + SKIPE D,@TPT4(I) + XCT OURGY+1(I) + JRST LTMT2 + SKIPGE RMDTB-PIECE(D) + RC TRAPPING B,ADDI R,200 + JRST LTMT2 + +LTMTT1: BBS+2*BW+1 ;KN3 + BBS+5*BW+1 + +LTMTT2: BBS+2*BW+6 ;QN3 + BBS+5*BW+6 + +LGAA1: MOVE T2,(T1) ;ALREADY ATT THIS SQ + XOR T2,PIECE(B) + JUMPL T2,CPOPJT ;NOT DEF +LDFP1: CAIN T1,PIECE(B) + POPJ T, + SKIPE ATTHF + JRST LDFP1A + SKIPN DEFVL-PIECE(T1) + RC RANDOMLY DEFENDING *M!T1,ADD R,RDEFVLU +LDFP1A: RC DEFENDING *M!T1,ADD R,DEFVL-PIECE(T1) + SKIPL SLDPC(B) + POPJ T, +LDISC1: SKIPE ATTHF ;SETTING UP DISCOVERY + POPJ T, + SKIPGE LMGT-PIECE(T1) + JRST LDISC3 ;P SEE IF BLOCKED +LDISC6: PUSH P,A +LDISC2: ADD A,RDT(J) + SKIPN T2,BOARD(A) + JRST LDISC2 + JUMPL T2,LDISC4 + XCT OURGY2+1(I) + JRST LDISC4 + SKIPN @LMGST+1(I) + JRST LDISC5 ;YES POSSIBLE DISCOVERY + MOVE ZR,PVALUE-PIECE(T2) + CAMLE ZR,PVALUE(B) + JRST LDISC5 +LDISC4: POP P,A + POPJ T, + +LDISC5: SKIPL LMGT-PIECE(T2) ;DISCOVERY ON PAWN NOT THAT BIG A DEAL + AOS LMFORS + RC SETTING UP DISCOVERY BY *P!B ON *M!T2,ADDI R,40 + JRST LDISC4 + +LDISC3: SKIPE @LDISCT(I) + JRST LDISC7 ;BLOCKED AHEAD HAVE CAPT? + HRRZ T2,J + CAIL T2,2 + CAIL T2,4 + JRST LDISC6 +LDISC7: SKIPLE T2,@LDSCT1(I) ;DROP THRU ON ON FILE SO MUST HAVE CAPT + XCT RMOY6+1(I) + JRST .+2 + JRST LDISC6 + SKIPLE T2,@LDSCT2(I) + XCT RMOY6+1(I) + POPJ T, + JRST LDISC6 + +LDISCT: BOARD+BW(A) + BOARD-BW(A) + +LDSCT1: BOARD+BW+1(A) + BOARD-BW+1(A) + +LDSCT2: BOARD+BW-1(A) + BOARD-BW-1(A) + +LMGR2H: JUMPN T2,LRH1 + SKIPN ATTHF + PUSHJ T,LRH2 ;EVEN SO SEE IF WANT TO OFFER TRADE +LRH1: SKIPL PPTP-PIECE(T1) ;SHIFTING BALANCE OF POWER OF OTHER THAN PAWN DEF. BY PAWN + SKIPN T2,@LMGST(I) + JRST LMGR2B + SKIPL SLDPC(B) + JRST LRH4 + LDB ZR,RDAT(J) + CAIN ZR,(B) + JRST LRH5 ;MOVING TO SAME RANK OR FILE NOTHING UNLESS DISCOVERY + +LRH4: CAME T2,@LMGST+1(I) + JRST LMGR2B +LRH4A: RC SHIFTING BAL OF POWER AT *S!A,ADD R,GMAVLU + POPJ T, + +LRH5: SKIPL DISCOVF + POPJ T, + MOVE S,@LMGST+1(I) + CAIE T2,1(S) ;COMPENSATE FOR DISCOVERED ATTACK + JRST LMGR2B ;WHICH HAS BEEN ADDED TO LMGST(I) ALREADY + SKIPL LMGT-PIECE(T1) + AOS LMFORS + JRST LRH4A + +LMGR2D: LDB T2,[PTID,,(T1)] ;ATTACKING UNDEFENDED PIECE + LDB S,[PTID,,PIECE(B)] + CAMN S,T2 + JRST LMGR2E +LMGR2F: MOVE T2,PVALUE-PIECE(T1) + LSH T2,-2 + RC ATTACKING LOOSE PIECE *M!T1 ,ADD R,T2 + AOS LMFORS + POPJ T, + +LMGR2E: SKIPE PINT-PIECE(T1) + JRST LMGR2F +LRH2: MOVE S,PDV(B) + CAMGE S,PDV-PIECE(T1) + RC OFFERING TRADE FOR GREATER DEV VAL,ADDI R,40 + RC OFFERING TRADE,ADDI R,10 + POPJ T, + +; MOVE S,PCBAL +; MOVE ZR,S +; ADD ZR,PCBAL+1 +; SUB S,PCBAL+1 +; MOVEM S,LRH3 +; SUB ZR,PVALUE(B) +; SUB ZR,PVALUE(B) ;EACH SIDE LOSES VALUE OF PIECE +; IMUL S,PCRAT1 +; IDIVM S,ZR +; SUB ZR,LRH3 +; SKIPE I +; MOVNS ZR +; RC TRADE VALUE *M!T1,ADD R,ZR +; POPJ T, + +;LRH3: 0 ;TEMP + +CCPV1: SKIPN ATTHF + SKIPGE T1,BOARD(A) ;STORE RLSING ATT BIT + POPJ T, + DPB W,BATTSQ(A) + JUMPE T1,CPOPJT + MOVE T2,(T1) + XOR T2,PIECE(B) + JUMPL T2,CPOPJT + SKIPN DEFVL-PIECE(T1) + RC NOW RANDOMLY DEF *M!T1,ADD R,RDEFVLU + RC NOW DEF *M!T1,ADD R,DEFVL-PIECE(T1) + POPJ T, + + +LMUA7: JUMPE T2,LMUA2 + MOVE T1,T2 +LMUA: JFFO T1,LUJF1 + JRST LMUA2 + +LUJF1: LDB TT,FUJFT1(T2) + ANDCM T1,FUJFT2(T2) + SKIPN TT,BDAST(TT) + JRST LMUA + MOVE D,FUJFT3(T2) + MOVE T2,T1 + +LMUA1: CAMN A,PIECEL(TT) ;PIECE BEING TAKEN? + JRST LMUA7 + XCT RMOYTT(I) + JRST LMUA1A ;HIS GUY + SKIPL @LMUAT2(D) + JRST LMUA1A + SKIPGE @LMUAT3(D) + JRST LMUA7 ;OUR OWN GUY ALREADY ACCOUNTED FOR BY CAT (NEVER REALLY BLOCKING HIM) +LMUA1A: MOVE S,PCATV(TT) ;COMPUTE WA,BA INC OF WHATS BEING BLOCKED + SKIPA T1,PIECEL(TT) +LMUA1D: MOVE T1,PIECEL(T1) + LDB T1,RDAT1(D) + JUMPE T1,LMUA1C + MOVE ZR,PIECE(TT) + XOR ZR,PIECE(T1) + JUMPL ZR,LMUA1C + SKIPL SLDPC(T1) + JRST LMUA1C + ADD S,PCATV(T1) + JRST LMUA1D + +LMUA1C: MOVEM S,LMUBAI + LDB C,LMUAT(D) ;FETCH LINE ID FROM SQUARE PIECE MOVING TO (A) + MOVE S,PIECEL(TT) + LDB ZR,LMUAT1(D) + CAME C,ZR + JRST LMUA5 ;NO SECONDARY EFFECTS + SKIPGE LMGT(B) + JRST LMUA1B + XCT RMOYTT+1(I) + JRST LMUA7 ;OUR GUY DO NOTHING EX PAWN MOVE +LMUA1B: SUB S,A + MOVE ZR,PIECEL(B) + SUBM A,ZR + XOR S,ZR + JUMPGE S,LMUA7 ;RESTRICTING + XCT RMOYTT+1(I) + JRST LMUOP + SKIPGE RPIECE(B) + POPJ T, ;ILLEGAL KING MOVING INTO "SHADOW" + MOVN ZR,@AT+1(I) + SKIPE PINVF(TT) + IMUL ZR,PINVF(TT) + RC UNBLOCKING *P!TT ON *S!A, ADDM ZR,DISPOS + PUSH T,@LMURAT+1(I) + PUSH T,@RDAT(D) + PUSH T,A + HRLM D,(T) + MOVE T1,LMUBAI + ADDM T1,@LMURAT+1(I) + DPB TT,RDAT(D) + PUSHJ T,LMUA7 + JRST LMUUNC + +LMUOP: MOVE ZR,@AT(I) + SKIPE PINVF(TT) + IMUL ZR,PINVF(TT) + RC UNBLOCKING *P!TT ON *S!A, ADDM ZR,DISPOS + PUSH T,@LMURAT(I) + PUSH T,@RDAT(D) + PUSH T,A + HRLM D,(T) + MOVE T1,LMUBAI + ADDM T1,@LMURAT(I) + DPB TT,RDAT(D) + PUSHJ T,LMUA7 + JRST LMUUN1 + +ZZQ==400400,,T1 +FUJFT1: REPEAT 9,[ + REPEAT 4,ZZQ + ZZQ==ZZQ-<40000,,> +] +ZZQ==740000,, +FUJFT2: REPEAT 9,[ + REPEAT 4,ZZQ + ZZQ==ZZQ_-4 +] +ZZQ=0 +FUJFT3: REPEAT 9,[ + REPEAT 4,ZZQ + ZZQ==ZZQ+1 +] + +LMUA5: MOVEM A,LMUOSQ ;SAVE SQUARE MOVING TO + HRRZM B,LMUOPC ;ORG PIECE MOVING + SKIPE S,BOARD(A) + SUBI S,PIECE + MOVEM S,LMUPCP ;PIECE CAPTURED + PUSH P,LMFORS ;SO CHECK CAN BE MADE FOR IMPORTANT DISCOVERYS + ;PUSH ONTO P DATA NEEDED TO CONTINUE UNBLOCKING SEARCH + PUSH P,B + PUSH P,T2 + PUSH P,W + MOVE A,PIECEL(B) + MOVE B,TT + MOVE J,D + MOVEI Q,LMUAGR + CLEARB D,W + SETOM DISCOVF + XCT RMOYTT(I) + JRST LMUA6 ;HIS GUY +LMUA6R: MOVE T1,PIECEL(B) + MOVEM T1,CSMTM + RC UNBLOCKING *P!B ,MOVEM J,LMUDR + CAILE J,3 + JRST LMUA6S + PUSHJ T,LSROOK+1 +LMUA6T: CLEARM DISCOVF + SKIPE PINVF(B) + IMUL W,PINVF(B) + CAIN Q,LMUOA + MOVNS W ;UNBLOCKING HIS GUY + RC POSITIONAL VAL OF UNBLOCKAGE, ADDM W,DISPOS + POP P,W + MOVE Q,LMQS + POP P,T2 ;NOTE ALSO POPS AT LMV6A + POP P,B + MOVE A,LMAS + POP P,T1 + CAME T1,LMFORS + SETOM IDISKF ;IMPORTANT DISCOVERY + JRST LMUA7 + +LMUA6X: POP P,W ;MOVE ILLEGAL EXIT + POP P,T2 + POP P,B + MOVE A,LMAS + MOVE J,LMJS + CLEARM DISCOVF + MOVE Q,LMQS + POP P,T1 + POPJ T, + +LMUA6S: PUSHJ T,LSBIS+1 + JRST LMUA6T + +LMURT1: WA(C) + BA(C) + WA(C) + +LMURAT: WA(A) + BA(A) + WA(A) + +LMURAS: WA(S) + BA(S) + WA(S) + +LMUAT2: REPEAT 4,RFPCS(B) + REPEAT 4,DDPCS(B) + +LMUAT3: REPEAT 4,RFPCS(TT) + REPEAT 4,DDPCS(TT) + +LUA3: MOVE T2,[-6,,12.] + JRST LUA4 + +LUA2: SKIPA T2,[-6,,6] +LUA1: MOVSI T2,-6 +LUA4: LDB S,RDAT(T2) + JUMPE S,LUA5 + XCT RMOY3(I) + JRST LUA6 ;BELONGS TO SIDE NOT TO MOVE + CAMN S,LMUOPC + JRST LUA5A ;THIS PIECE MOVING +LUA5C: AOS NDEFS + JUMPE C,LUA5B + MOVE TT,PVALUE(S) + CAMLE TT,PVALUE(S) +LUA5B: MOVE C,S +LUA5: AOBJN T2,LUA4 + POPJ P, + +LUA6: CAME S,LMUPCP + SKIPE PINT(S) + JRST LUA5 ;THIS PIECE CAPTURED OR PINNED + AOS NATTS + JUMPE D,LUA6A + MOVE TT,PVALUE(D) + CAMLE TT,PVALUE(S) +LUA6A: MOVE D,S + SKIPL SLDPC(S) + JRST LUA5 +LUA6B: MOVE S,PIECEL(S) + LDB S,RDATSS(T2) + JUMPE S,LUA5 + XCT RMOY3(I) + SKIPL SLDPC(S) + JRST LUA5 + AOS NATTS + JRST LUA6B + +LUA5A: LDB S,ONEBSQ(T2) + JUMPE S,LUA5 + LDB S,RDATSS(T2) ;ORIG PIECE MOVING HAVE FRIEND BEHIND IT? + SKIPGE SLDPC(S) + XCT RMOY3(I) + JRST LUA5 + JRST LUA5C + +LMUPCP: 0 ;PIECE CAPTURED BY MOVE +LMUOPC: 0 ;PIECE MOVING +LMUOSQ: 0 ;SQUARE MOVING TO +DISCOVF: 0 ;-1 IF ATTACK INVESTIGATING IS A DISCOVERY +LMUBAI: 0 ;INC TO WA BA + +LMUA6: MOVE S,@OKINGT(I) + LDB T1,ONEBS(J) + CAMN T1,A + JRST LMUA6X ;MOVE DISCOVERS ON K, ILLEGAL + MOVEI Q,LMUOA ;UNBLOCKING HIS GUY + JRST LMUA6R + +LMUOA: SKIPGE BOARD(A) + POPJ T, + POP T,LMUTT0 ;RETURN TO LSROK, ETC + POP T,LMUTT1 ;PUSHED BY LSROK, ETC + POP T,LMUTT2 ;RETURN TO LMUA6T + PUSH T,@LMURAT+1(I) + PUSH T,@RDAT(J) + PUSH T,A + HRLM J,(T) + PUSH T,[LMUUNC] + PUSH T,LMUTT2 ;PUT EM BACK + PUSH T,LMUTT1 + PUSH T,LMUTT0 + MOVE T1,LMUBAI + ADDM T1,@LMURAT+1(I) + SKIPN ATTHF + DPB B,RDAT(J) + RC UNBLOCKING SQ *S!A FOR OPP,ADD W,@AT+1(I) + SKIPE T1,BOARD(A) + XCT LMUOAT(I) ;SKIPN ON OUR PIECE + POPJ T, + CAMN A,@OKINGT(I) + JRST LMV6A ;STOP WORKS MOVE ILLEGAL +LMV6F: CLEARM NDEFS + CLEARM NATTS + CLEARB C,D + MOVE T2,LMUOPC + LDB S,[PTID,,PIECE(T2)] + JUMPN S,LUE1 ;MOVING PIECE MIGHT STILL HOLD + SKIPN @LMGST(I) + JRST LMV6B +LUE2: SKIPE BDA1(A) + PUSHJ P,LUA1 + SKIPE BDA2(A) + PUSHJ P,LUA2 + SKIPE BDA3(A) + PUSHJ P,LUA3 + JUMPE C,LMV6B + JUMPE D,LUEX + MOVE TT,PVALUE(D) + SUB TT,PVALUE-PIECE(T1) + JUMPL TT,LUE4 ;ATTACKED BY LESS + SOSG NATTS + JRST LMV6C ;ONLY ATTACK NOT E P + SUB TT,PVALUE(D) + JUMPGE TT,LMV6C ;CAN AFFORD TO LOSE P+D FOR A + SOSLE NDEFS + JRST LMV6C ;MORE THAN ONE DEF MAKE OPT ASSUMPTION + MOVNS TT +LUE6: CAMLE TT,PVALUE-PIECE(T1) + MOVE TT,PVALUE-PIECE(T1) +LUE5: RS DIS ATTACK ON *M!T1 CALC LOSS,SUB R,TT +LUEX: POPJ T, + +LUE1: MOVE S,LMUOSQ + PUSH P,T1 + PUSH P,B + MOVE B,LMUOPC + PUSHJ P,@LGLMPT(B) + JRST LUE3 + MOVE C,B ;STILL HOLDS + AOS NDEFS +LUE3: POP P,B + POP P,T1 + JRST LUE2 + +LUE4: MOVMS TT + SOSG NDEFS ;SKIP ON MULTPLE DEFS + SOSG NATTS ;SKIP ON MULT ATTACKS + JRST LUE5 + SUB TT,PVALUE(D) + JRST LUE6 + +NDEFS: 0 ;NUMBER DEFS +NATTS: 0 ;NUMBER ATTACKS ON DISCOVERED UPON PIECE + + +LMUOAT: SKIPGE (T1) + SKIPL (T1) + +LMV6B: RC DIS ATTACK ON *M!T1 ITS LOOSE,SUB R,PVALUE-PIECE(T1) + JRST LUEX + +LMV6C: RC DIS ATTACK ON *M!T1 ,SUB R,OPATV ;UNBLOCKING ATTACK + JRST LUEX + +LMV6A: SKIPE ATTHF + JRST LMV6F ;NOT REALLY + ERRTTY [ASCIZ /ILLEGAL MOVE AT LMV6A/] + +LMUTT0: 0 ;TEM AT LMUOA AND LMUAGR +LMUTT1: 0 +LMUTT2: 0 +DISPOS: 0 ;POSITIONAL FACTORS ASSOC WITH DISCOVERIES + +LMUUNC: POP T,S + HLRZ T1,S + POP T,@RDATSS(T1) + POP T,@LMURAS+1(I) + POPJ T, + +LMUUN1: POP T,S + HLRZ T1,S + POP T,@RDATSS(T1) + POP T,@LMURAS(I) + POPJ T, + + + +LBL2: AND T1,[777700,,] ;ONLY SLIDING DIRECTIONS +LBL5: +LBL1: JFFO T1,LBFJ1 + JRST (Q) + +LBFJ1: LDB J,FJTB1(T2) + ANDCM T1,FJTB2(T2) + MOVE S,@FJTB3-LBFJBS(Q) + SKIPL SLDPC(J) + JRST LBL5 + CAIN J,(B) + JRST LBL5 + SKIPGE @LBLT2(S) + JRST LBL5 + SKIPGE @LBLT3(S) + JRST LBL5A + XCT RMOYJ(I) + JRST LB6L1 ;HIS GUY +LBL6: ADD A,RDT(S) ;OURS + SKIPGE D,BOARD(A) + JRST LBL7 + LDB ZR,RDAT(S) + CAME ZR,J + JRST LBL7 +LBL6B: MOVE ZR,@AT(I) + SKIPE PINVF(J) + IMUL ZR,PINVF(J) + RC BLOCKING OUR GUY *P!J AT *S!A, SUB W,ZR +LBL6A: JUMPE D,LBL6 ;VACANT SQ +;IMPOSSIBLE FOR A TO BE = LMAS SINCE WE STARTED THERE ADDING + CAMN A,ORGPCL + JRST LBL7 ;USED TO BE BLOCKED HERE + XCT OURGY(I) + JRST LBL7 ;NOT RUNNING INTO OUR GUY + MOVE ZR,@LMGST(I) + SOJG ZR,LBL7 ;HES DEFENDED OTHERWISE + MOVE ZR,@LMGST+1(I) + JUMPE ZR,LBL7 ;HES NOT ATTACKED + + MOVE S,A ;IS MOVING PC PICKING UP DEFENSE? + MOVE A,LMAS + PUSH P,T1 + PUSHJ P,@LGLMPT(B) + JRST LBL6BO ;NO + POP P,T1 + JRST LBL7 ;OK FOR A TO GET CLOBBERED + +LBL6BO: POP P,T1 + MOVE ZR,RPVAL-PIECE(D) + LSH ZR,-2 + RC BLOCKING ONLY DEF OF *M!D ,SUB R,ZR ;LEAVING HIM EN PRISE +LBL7: MOVE A,LMAS + JRST LBL5 + +LB6L1: ADD A,RDT(S) + SKIPGE D,BOARD(A) + JRST LBL7 + LDB ZR,RDAT(S) + CAME ZR,J + JRST LBL7 +LBL6C: MOVE ZR,@AT+1(I) + SKIPE PINVF(J) + IMUL ZR,PINVF(J) + RC BLOCKING HIS GUY *P!J AT *S!A, ADD W,ZR + JUMPE D,LB6L1 ;VACANT SQ + CAMN A,ORGPCL + JRST LBL7 ;USE TO BE BLOCKED HERE + XCT OURGY+1(I) + JRST LBL7B + SKIPN @LMGST(I) + JRST LBL7 ;NOT ATT BY US + MOVE ZR,@LMGST+1(I) + SOJN ZR,LBL7 ;DEF MORE THAN ONCE + RC BLOCKING ONLY DEF OF HIS PC *M!D, ADDI R,40 + MOVE ZR,RPVAL-PIECE(D) + ADDM ZR,AGAIN + JRST LBL7 + +LBL7B: MOVE ZR,@LMGST+1(I) + SOJE ZR,LBL7C + RC BLOCKING ATTACK ON *M!D,ADD R,DEFVL-PIECE(D) + JRST LBL7 + +LBL7C: RC BLOCKING ONLY ATTACK ON *M!D,ADD R,ENPCL-PIECE(D) + JRST LBL7 + + +LBLT2: REPEAT 4,RFPCS(B) +LBLT3: REPEAT 4,[[0] +] ;USED FOR BOTH + REPEAT 4,DDPCS(B) + +LBL5A: XCT RMOYJ(I) + JRST LB6L1 ;NOT OUR GUY + LDB ZR,[PTID,,PIECE(J)] + CAIN ZR,BID + SKIPE NMOVES(J) + JRST LBL7 + JRST LBL6 ;BLOCKING B THAT HASNT MOVED BAD EVEN IF BY Q + +LMGST: WA(A) + BA(A) + WA(A) + +LMGST1: WA(T1) + BA(T1) + WA(T1) + +LMWPW: ADDI A,2*BW + CAIL A,6*BW + JRST LMWPW1 + SKIPN BOARD(A) + SKIPE BOARD-BW(A) + JRST LMWPW1 + PUSHJ T,(Q) +LMWPW1: SUBI A,BW +LMBPW2: SKIPN BOARD(A) + PUSHJ T,(Q) + ADDI A,1 + CAME A,GHLOC + SKIPLE BOARD(A) + PUSHJ T,(Q) + SUBI A,2 + CAME A,GHLOC + SKIPLE BOARD(A) + JRST (Q) + POPJ T, + +LMBPW: SUBI A,2*BW + CAIG A,6*BW + JRST LMBPW1 + SKIPN BOARD(A) + SKIPE BOARD+BW(A) + JRST LMBPW1 + PUSHJ T,(Q) +LMBPW1: ADDI A,BW + JRST LMBPW2 + + + +LMKNT: ADDI A,2*BW+1 + PUSHJ T,(Q) + SUBI A,2 + PUSHJ T,(Q) + SUBI A,4*BW + PUSHJ T,(Q) + ADDI A,2 + PUSHJ T,(Q) + ADDI A,3*BW+1 + PUSHJ T,(Q) + SUBI A,4 + PUSHJ T,(Q) + SUBI A,2*BW + PUSHJ T,(Q) + ADDI A,4 + JRST (Q) + + +DEFINE LMKC + SKIPE @LMGST+1(I) + SKIPGE Q + PUSHJ T,(Q) +TERMIN + +LMKING: ADDI A,1 + LMKC + ADDI A,BW + LMKC + SUBI A,1 + LMKC + SUBI A,1 + LMKC + SUBI A,BW + LMKC + SUBI A,BW + LMKC + ADDI A,1 + LMKC + ADDI A,1 + LMKC + POPJ T, + + +LMROOK: MOVSI J,-4 + PUSH T,A +LMROK1: MOVE A,(T) +LMROK4: ADD A,RDT(J) + PUSHJ T,(Q) + SKIPN T1,BOARD(A) + JRST LMROK4 + JUMPL T1,LMROK2 +LMROK2: AOBJN J,LMROK1 +POPAJT: POP T,A + POPJ T, + +LMQUEEN: PUSHJ T,LMROOK +LMBIS: MOVE J,[-4,,4] + PUSH T,A +LMBIS1: MOVE A,(T) +LMBIS4: ADD A,RDT(J) + PUSHJ T,(Q) + SKIPN T1,BOARD(A) + JRST LMBIS4 + JUMPL T1,LMBIS2 +LMBIS2: AOBJN J,LMBIS1 + POP T,A + POPJ T, + +LSROOK: MOVSI J,-4 ;FOR SCORING DEV VALUE + PUSH T,A +LSROK1: CLEARM ATTHF + MOVE A,(T) +LSROK4: ADD A,RDT(J) + PUSHJ T,(Q) + SKIPN T1,BOARD(A) + JRST LSROK4 + JUMPL T1,LSROK2 + MOVE T2,(T1) + XOR T2,PIECE(B) + JUMPL T2,LSRK4A ;HIS GUY + SKIPGE RFPCS-PIECE(T1) + JRST LSRK4B +LSROK2: AOBJN J,LSROK1 + CLEARM ATTHF + POP T,A + POPJ T, + +LSRK4A: MOVE ZR,PVALUE-PIECE(T1) + CAMGE ZR,PVALUE(B) + JRST LSROK2 +LSRK4B: SETOM ATTHF + HRRZ ZR,Q + CAIN ZR,LMGR2 + SKIPE DISCOVF + JRST LSROK4 + LDB ZR,BATTSQ(A) + JUMPN ZR,LSROK2 ;ALREADY HITTING THIS SQ AND WHATS BEYOND + JRST LSROK4 + +LSQUEEN: PUSHJ T,LSROOK +LSBIS: MOVE J,[-4,,4] + PUSH T,A +LSBIS1: CLEARM ATTHF + MOVE A,(T) +LSBIS4: ADD A,RDT(J) + PUSHJ T,(Q) + SKIPN T1,BOARD(A) + JRST LSBIS4 + JUMPL T1,LSBIS2 + MOVE T2,(T1) + XOR T2,PIECE(B) + JUMPL T2,LSBS4A + SKIPGE DDPCS-PIECE(T1) + JRST LSBS4B + SKIPGE LMGT-PIECE(T1) + JRST LSBIS5 +LSBIS2: AOBJN J,LSBIS1 + CLEARM ATTHF + POP T,A + POPJ T, + +LSBS4A: MOVE ZR,PVALUE-PIECE(T1) + CAMGE ZR,PVALUE(B) + JRST LSBIS2 +LSBS4B: SETOM ATTHF + HRRZ ZR,Q + CAIN ZR,LMGR2 + SKIPE DISCOVF + JRST LSBIS4 + LDB ZR,BATTSQ(A) + JUMPE ZR,LSBIS4 ;NOT ALREADY ATTACKING THIS SQ, OK. + LDB ZR,RDAT(J) + CAIE ZR,(B) ;SKIP ON ALREADY ATTACKING IT FROM THIS DIR. + JRST LSBIS4 + JRST LSBIS2 + +LSBIS5: SKIPL @BTPDIR(I) + JRST LSBIS2 + SETOM ATTHF + HRRZ ZR,Q + CAIN ZR,LMGR2 + SKIPE DISCOVF + JRST LSBIS6 + LDB ZR,BATTSQ(A) + JUMPN ZR,LSBIS2 +LSBIS6: ADD A,RDT(J) + PUSHJ T,(Q) + JRST LSBIS2 + +BTPDIR: WBTHP(J) + BBTHP(J) + +BBTHP==.-4 + 0 + 0 +WBTHP==.-4 + -1 + -1 + 0 + 0 + + +IFN HSCOD,[ +HSREC: LDB I,[100,,PLYN] + PUSHJ P,HASHR0 ;GET HASH WORD AND RECORD FOR USE + JFCL ;INITIALIZING HASH TABLE + MOVE S,HSP + MOVE T2,GAMP + MOVEM S,GHK1-GAME(T2) + POPJ P, +] + + + ;HASH BOARD POSITION + LOOK UP IN TABLE + ;SKIP IF NOT FOUND NO SKIP IF FOUND + ;SETS UP HSP WITH HT KEY + ;HSADR WITH TABLE ADR IF FOUND OR ADR OF NEW ENTRY + ;HSADR ALSO RETURNED IN T1 +HASHR0: SKIPN ICSW +HASHR: PUSHJ P,HSKG + MOVE S,HSKEY ;IF FOUND, LEAVE HASH ADR IN T2, KEY IN T1 + SKIPE T1,GHLOC + XOR S,RANDN(T1) + SKIPE NMOVES+WKING-PIECE + JRST HASHR1 + SKIPN PIECEL+WKR-PIECE + JRST .+3 + SKIPN NMOVES+WKR-PIECE + XORI S,20 + SKIPN PIECEL+WQR-PIECE + JRST .+3 + SKIPN NMOVES+WQR-PIECE + XORI S,2 +HASHR1: SKIPE NMOVES+BKING-PIECE + JRST HASHR2 + SKIPN PIECEL+BKR-PIECE + JRST .+3 + SKIPN NMOVES+BKR-PIECE + XORI S,4 + SKIPN PIECEL+BQR-PIECE + JRST .+3 + SKIPN NMOVES+BQR-PIECE + XORI S,10 +HASHR2: DPB I,[100,,S] ;SIDE TO MOVE + CAMN S,HSBPT + JRST HSBPT1 ;HASH BREAKPOINT +HSHK1: MOVEM S,HSP ;TABLE KEY -- ENTRY FOR PRECOMPUTED KEYS + MOVE T2,S + ANDI T2,HSHMSK ;MASK TO SIZE OF TABLE + MOVNM T2,HASHT1 ;TRIAL ADR + HRLI T2,-HTNE(T2) + MOVE T1,HSP +HASHR3: HRRZM T2,HSADR + CAMN T1,HSTB(T2) + POPJ P, + SKIPN HSTB(T2) + JRST POPJ1 + AOBJN T2,HASHR3 + HRLZ T2,HASHT1 + +HASHR4: HRRZM T2,HSADR + CAMN T1,HSTB(T2) + POPJ P, + SKIPN HSTB(T2) + JRST POPJ1 + AOBJN T2,HASHR4 + ERRTTY [ASCII /HT FULL!/] + +HSKG: SETZM HSKEY +REPEAT 32.,[ + SKIPN T1,PIECEL+.RPCNT+1 + JRST .+4 + MOVE T1,RANDN(T1) + ROT T1,@HROT+.RPCNT+1 + XORM T1,HSKEY +] POPJ P, + +HSBPT1: SKIPLE HBPTSW ;REACHED HSBPT POSITION, WHAT NOW? + .VALUE +; SKIPGE HBPTSW +; SETOM HSTTF + SKIPL HBPTSW + JRST HSHK1 + PUSHJ P,STVTR1 ;TRACE STATEV, GENERATE PRINTOUT, UNTRACE STATEV + SETOM QTF + JRST HSHK1 + +PP HROT:, + REPEAT 8,1+PID + 1+RID + 1+KNID + 1+BID + 1+KID + 1+QID + 1+BID + 1+KNID + 1+RID + REPEAT 8,10+PID + 10+RID + 10+KNID + 10+BID + 10+KID + 10+QID + 10+BID + 10+KNID + 10+RID + + +;HASH TABLE PARAM+VARIABLES +HSKEY: 0 ;INCREMENTAL PORTION OF CURRENT HASH KEY. TO COMPUTE HASH KEY + ; FOR CURRENT POSITION, COMBINE THIS WITH ADJUSTMENTS FOR + ; GHOST, CASTLING AND STM. +HSBPT: 0 ;HASH CODE OF POSITION TO STOP ON. +HBPTSW: 0 ;WHAT TO DO ON HSBPT MATCH. >0 -> .VALUE. <0 TRACE STATEV. +HSP: 0 ;HASH KEY OF CURRENT POSITION +HASHT1: 0 ;TRIAL ADDRESS (TEMP) +HSADR: 0 ;HASH ADR OF CURRENT POSITION. +IFN DEC,[ + 0 ;HERE FOR LOSING HPV +HSTB: BLOCK HTNE +HSTBV: BLOCK HTNE +HSTBL: BLOCK HTNE +] +HASHS: HTNE/5*4 ;NO ENTRIES LEFT +HASHSS: HTNE/5*4 ;NO ENTRIES ALLOWED + +HASHE: +HASHE1: MOVE T2,HSADR ;ENTER CURRENTLY ADDRESSED HASH ENTRY + JUMPL T2,CPOPJ ; T1 -> VALUE + SKIPE HSTB(T2) ; J -> LINK + JRST HASHE3 + SKIPG HASHS ;AVAILABLE SPACE + JRST HASHE2 + SOS HASHS +HASHE3: MOVEM T1,HSTBV(T2) + MOVE T1,HSP + MOVEM T1,HSTB(T2) + MOVEM J,HSTBL(T2) + POPJ P, + + +HASHE2: SETOB T2,HSADR + POPJ P, + +;TABLE OF RANDOM NUMBERS +RANDN==.-2*BW-1 +ZQ==105.105105 +ZQQ==SIXBIT /FOOBAR/ +ZY==696969.69 +ZYY==SIXBIT /BLETCH/ + +REPEAT 8*BW-2,[ +ZQ==.OP FMP ZQ ZQQ +ZY==.OP FMP ZY ZYY + ZQ,,ZY +] + IFN HSCOD,[ +HHVC: AOS THTM + SKIPGE NHSW ;CHECK SIG OF HASH DATA + POPJ P, + MOVE S,LMGD + SOJE S,CPOPJ ;NO HASH ON FIRST LEVEL NEED MOVE + LDB S,[HNPLB,,HSTBV(T2)] + LDB T1,[HTVCOD,,HSTBV(T2)] + CAIN T1,4 ;POSITION IN SEARCH + JRST HHVC4 + CAMGE S,Q + POPJ P, ;NO DICE + JRST HHVCT1(T1) + +HHVCT1: JRST HHVC1 ;ACTUAL VALUE + JRST HHVC2 ;>= + JRST HHVC3 ;<= + JRST HHVC4 ;POS IN GAME + JRST HHVC4 ;POS IN SEARCH + REPEAT 2,JRST HHVC0 ;POSITION MARKED BY CHEOPS + ERRTTY, [ASCII /HT LOSSAGE!/] + +HHVC1: SKIPG NHSW + POPJ P, +HHVC0: HRRE R,HSTBV(T2) + MOVEI J,0 + AOS (P) + POPJ P, + +HHVC2: SKIPG NHSW + POPJ P, + HRRE R,HSTBV(T2) + XCT EVMT2(I) + JRST HHVC2A + POPJ P, + +HHVC2A: MOVE J,EVMT5A(I) + AOS (P) + POPJ P, + +HHVC3: SKIPGE NHSW ;POSITION MAY BE WORSE + POPJ P, + HRRE R,HSTBV(T2) + XCT HHVC3A(I) + POPJ P, + MOVE J,EVMT5A+1(I) + AOS (P) + POPJ P, + +HHVC3A: CAML R,BPREV + CAMG R,BPREV+1 + +HHVC4: CLEARB R,J + AOS (P) + POPJ P, + +] + + +LMGD1: MOVEI T1,0 + LSHC T1,6 + JUMPE T1,.-1 + XCT LMGDT(I) + AOS C + JUMPN T2,LMGD1 + POPJ P, + +LMG1: SOJE C,LMG1A + MOVEI C,0 + SKIPE T2,BDA1(A) + PUSHJ P,LMGD1 + SKIPE T2,BDA2(A) + PUSHJ P,LMGD1 + SKIPE T2,BDA3(A) + PUSHJ P,LMGD1 + SOJE C,LMG1A ;NOT REALLY DOUBLE CHECK + ADD B,[NPCS-1,,WKING-PIECE-1] ;DOUBLE CHECK + JRST LMG2 + +LMGDT: SKIPGE PIECE(T1) + SKIPL PIECE(T1) + +LMG1A: PUSH T,B + ADDI B,WKING-PIECE-1 + PUSH T,A + SETOM CDVCF + PUSHJ T,LMKING + POP T,A + PUSHJ T,KSQMK + POP T,B + MOVEI Q,LMGR7 + MOVEM Q,LMQS + JRST LMG2 + + +KSQMK: PUSHJ P,FLATA + JUMPE D,LOSEY + MOVEI T2,0 ;INDEX TO KSQTB + LDB T1,[PTID,,PIECE(D)] + MOVE TT,PIECEL(D) + CLEARM LMGEPS + JUMPE T1,LMG1P ;PAWN + SOJE T1,LMG1D ; KNIGHT + SOJE T1,LMG1E ;BIS + SOJE T1,LMG1F ;ROOK + SOJN T1,LOSEY ;KING? + LDB T1,[BFILE,,BPREL(A)] ;QUEEN + CAMN T1,PFILE(D) + JRST LMG1F + LDB T1,[BRANK,,BPREL(A)] + CAMN T1,PRANK(D) + JRST LMG1F + + +LMG1E: LDB T1,[BPDAG,,BPREL(TT)] + LDB S,[BPDAG,,BPREL(A)] + CAMN S,T1 + JRST LMG1E1 + LDB T1,[BMDAG,,BPREL(TT)] + LDB S,[BMDAG,,BPREL(A)] + CAME S,T1 + JRST LOSEY + TDZA T1,T1 +LMG1E1: MOVEI T1,1 + ADDI T1,LMBDT +LMG1F2: CAML A,TT + ADDI T1,2 +LMG1H: ADD A,(T1) + MOVEM A,KSQTB(T2) + CAME A,TT + AOJA T2,LMG1H + JRST LMG1M + +LMG1F: LDB S,[BRANK,,BPREL(A)] + CAMN S,PRANK(D) + JRST LMG1F1 + LDB S,[BFILE,,BPREL(A)] + CAME S,PFILE(D) + JRST LOSEY + TDZA T1,T1 +LMG1F1: MOVEI T1,1 + ADDI T1,LMRDT + JRST LMG1F2 + +LMG1D: MOVEM TT,KSQTB(T2) +LMG1M: AOS T2 + MOVNS T2 + HRLZM T2,KSQTBP + POPJ T, + +LOSEY: ERRTTY [ASCII /LOSEY LOSEY!/] + +LMG1PT: MOVEI T1,BW(TT) + MOVEI T1,-BW(TT) + +LMG1P2: ADDI TT,BW + SUBI TT,BW + +LMG1P: XCT LMG1PT(I) + CAMN T1,GHLOC + MOVEM T1,LMGEPS ;PAWN THAT IS CHECKING CAN BE TAKEN EP + JRST LMG1D + +TRAPP: AOS TRAPS + PUSH P,A + PUSH P,I + MOVEM T,TRPPTS + LDB I,[430100,,PIECE(B)] + MOVEI Q,TRP1 ;CHECK TO SEE IF PIECE IN B IS TRAPPED + SETOM TRPF + MOVE A,PIECEL(B) + PUSHJ T,@LMGT(B) + POP P,I + POP P,A + AOS TRAPSC + POPJ P, + +TRP1: SKIPGE T1,BOARD(A) + POPJ T, + JUMPE T1,TRP3 + MOVE T2,(T1) + XOR T2,PIECE(B) + JUMPGE T2,CPOPJT + MOVE T2,PVALUE(B) + CAMLE T2,PVALUE-PIECE(T1) + SKIPN @LMGST+1(I) + JRST TRP2 ;PIECE NOT TRAPPED + POPJ T, + +TRP3: SKIPE @LMGST+1(I) + POPJ T, +TRP2: CLEARM TRPF + MOVE T,TRPPTS + POP P,I + POP P,A + POPJ P, + +TRPF: 0 +TRPPTS: 0 + +CBDV: PUSH P,I + PUSH P,W + MOVEI W,0 + LDB I,[430100,,PIECE(B)] + MOVEI Q,CBDV1 + MOVE A,PIECEL(B) + SKIPGE LMGT(B) + JRST CBDV2 +CBDV3: PUSHJ T,@LMGSTD(B) +CBDV4: SKIPE PINVF(B) + IMUL W,PINVF(B) + RC POS VAL CAPT PIECE,ADD W,(P) + SUB P,[1,,1] + POP P,I + MOVE A,LMAS + POPJ P, + +CBDV2: PUSHJ T,LMGR1C + JRST CBDV4 + +CBDV1: SKIPGE D,BOARD(A) + POPJ T, + RC SQ VAL SQ *S!A ,ADD W,@AT(I) + JUMPE D,CPOPJT + XCT OURGY+1(I) + POPJ T, + MOVEI ZR,-PIECE(D) + CAMN ZR,PCMVNG + POPJ T, ;THIS GUY DOING THE CAPTING + SKIPE PINT(B) + JRST CBDV5 + RC THREATNING *M!D, ADD R,ENPCL-PIECE(D) + POPJ T, + +CBDV5: RC THREATNING *M!D BUT PINNED, ADD R,DEFVL-PIECE(D) + POPJ T, + +STATEV: AOS NSVS + AOS LMGD + MOVE A,@OKINGT(I) + SKIPE @LMGST+1(I) + SKIPA T1,LMGD2 ;IN CHECK, DONT AOS LMGD2 + AOS T1,LMGD2 + SUB T1,HK1V + MOVEM T1,PMGLVL + PUSH P,PDVLV + PUSH P,BPREV(I) + MOVEM P,LGLMST +IFN HSCOD,[ + MOVEI Q,0 + SKIPGE NHSW + JRST STAH1 ;DONT USE HASH TABLE + PUSHJ P,HASHR0 ;LOOK UP CURRENT POSITION + JRST STAH2 ;FOUND IT, SEE WHETHER TO HASH CUT +STAH3: CAILE Q,MHPLN + MOVEI Q,MHPLN + MOVSI T1,400000(Q) ;NOPE, ENTER CURRENT POSITION IN TABLE AS PENDING + MOVEI J,-1 + PUSHJ P,HASHE1 +STAH1: +] +STATE1: +IFN DSPLY,[ + SKIPLE INCSHW + PUSHJ P,INCDU +] +IFN CHEOPS,[ + SKIPLE T1,CHEOSW + TRNN T1,1 + JRST CPRD1 ;DONT USE CHEOPS OR DONT USE STABILITY PRED HACK + SKIPG C,STABD ;DEPTH TO USE IN STABILITY MODE + JRST CPRD1 + MOVEM C,CHXD +; MOVE R,PCBAL ;COMPUTE INITIAL ALPHA-BETA SETTINGS FOR CHEOPS. +; ADD R,PNBAL ; THIS IS SOMEWHAT OF A CROCK. CHEOPS SHOULD HAVE +; SUB R,PCBAL+1 ; A MODE WHICH ALLOWS THEM TO BE SET AT + AND - +; SUB R,PNBAL+1 ; DELTA FROM VALUE OF WOOD ON BOARD (IE INITIAL +; ; AC[MATERIAL]). +; ASH R,-CHVCNV ;CONVERT OCM VALUE TO CHEOPS VALUE +; MOVE Q,R +; SUB R,STABEP ;EPSILON TO APPLY TO PCSATS WHEN SETTING UP CHEOPS IN +; ADD Q,STABEP ; STABILITY PRED MODE +; MOVEM R,CHXIA +; MOVEM Q,CHXIB + MOVE R,PMGEP + MOVEM R,CHXIA + MOVEI R,14000 + MOVEM R,CHXSTM ;ASYMETRICAL A/B AND DELTA AROUND PCSATS + AOS CSSRCH + PUSHJ P,ACLPS3 ;MAKE CHEOPS ARG BLOCK + PUSHJ P,ACSTRT ;START CHEOPS +CPRD1: +] + PUSHJ P,STVL4T ;DO SUPER-STATIC EVALUATION + MOVEM R,PCSATS + MOVE T,[-LLMGPL,,LMGPDL-1] + HRRZ T1,GAMP + LDB T2,[MPC,,(T1)] + CAIGE T1,GAME + MOVEI T1,0 + MOVEM T2,HPLMVD ;PIECE HE LAST MOVED +; MOVE R,PCBAL +; ADD R,PNBAL +; SUB R,PCBAL+1 +; SUB R,PNBAL+1 +; MOVEM R,PCSATS + MOVE R,PCSATS + SUB R,@HASV(I) + SKIPN I + MOVNS R + SUB R,POSBGF + MOVEM R,AHDATS + MOVE R,PCSATS + SUB R,@OASV(I) + SKIPN I + MOVNS R + SUB R,POSBGF + MOVEM R,ABFATS + AOS NSV + CLEARM CVPR + CLEARM HPCOP ;NUMBER HIS PIECES E P + CLEARM HPCOPV + SETZM SFEEDF + SETZM SFDF1 + CLEARM TRDF + MOVE A,@PCSP(I) + CAMLE A,@PCSP+1(I) + SETOM TRDF ;SIDE TO MOVE AHEAD PIECES SO INVESTIGATE TRADES + SKIPN NWPPP(I) + JRST STVQLX ;NO PASSED PAWNS, SAVE TIME. + MOVE B,STT1(I) ;LOOP OVER OUR PAWNS. +STVQL1: SKIPG T1,PPASED(B) ;QUEENING + JRST STVQL + CAIE T1,7 + JRST STVQL3 + MOVE T1,PIECEL(B) ;ON 7TH RANK + ADD T1,STT2(I) + SKIPE BOARD(T1) + JRST STVQL + PUSH P,T1 + HRLM B,(P) + PUSH P,[1000] +STVQL: AOBJN B,STVQL1 +STVQLX: +;DROPS THRU + + + MOVE A,@OKINGT(I) + MOVE B,@LMGST+1(I) + MOVEM B,SMICKF ;SIDE TO MOVE IN CHECK FLAG + CLEARM TRDP+1 + MOVE B,[TRDP+1,,TRDP+2] + BLT B,NODF+NPC-1+1 ;CLEAR TRDP, NODF + + MOVE B,LGMST2+1(I) ;HIS PIECES +STV1: SKIPN A,PIECEL(B) + JRST STV2 ;NON EXISTANT + SKIPGE LMGT(B) + JRST SPA2 + HRRZ ZR,B + CAME ZR,HPLMVD + SKIPE PINT(B) + JRST SPA1 ;NON PAWN PINNED OR LAST MOVED. CAN IT BE ATTACKED BY A P? +SPA2: SKIPN @LMGST(I) + JRST STV2 ;PIECE NOT ATTACKED + SKIPN @LMGST+1(I) + JRST [ MOVEI D,0 + JRST STV3] ;ON PREY (IE NOT DEFENDED) + PUSHJ P,AFLATA + JUMPE D,STV3 ;HIS PC LOOSE + MOVE ZR,@LMGST+1(I) + SOJN ZR,STOD1 + AOS NODF(D) ;THIS PIECE HIS ONLY DEFENSE. +STOD1: MOVE S,RPVAL(C) + SUB S,RPVAL(B) + JUMPL S,STV3 ;ATTACKING WITH SMALLER GUY, P.C. + CAMGE S,[-] ;DEFICIT NOT TOO MUCH, COULD IT BE OVERCOME BY + JRST STMO1 ; GIVING HIM ISO PAWNS? + MOVE ZR,@LMGST+1(I) + SOJN ZR,STMO1 ;NOT ONLY DEFENSE + SKIPL LMGT(D) + JRST STMO1 + MOVE TT,PFILE(D) ;ONLY DEF A PAWN. WILL RECAPT CAUSE ISOLATED PAWNS? + MOVE ZR,@SNPNFL+1(I) + SOJN ZR,STMO1 ;NOT CURRENTLY ONLY PAWN IN THAT FILE + MOVE T1,PFILE(B) + SKIPN @SKNPNF+1(I) ;DETERMINE IF PAWNS IN FILE TO K-SIDE OR CAPTING TO K-SIDE + CAIN TT,-1(T1) + JRST [ SKIPN @SKNPN2+1(I) ;NO PAWNS IN FILE +2 TO K-SIDE -> MAKING ISO PAWNS + JRST STV3 + JRST .+1] + SKIPN @SQNPNF+1(I) + CAIN TT,1(T1) + JRST [ SKIPN @SQNPN2+1(I) + JRST STV3 + JRST .+1] +STMO1: JUMPN S,STOD2 + SKIPGE TRDF + JRST STV3 ;LOOK AT TRADES (STM AHEAD PCS) + SKIPL TRDP(C) ;SKIP ON PC ALREADY HAS P.C. + HRRM A,TRDP(C) ;CAN AT LEAST TRADE OFF (ALSO SAVE SQ TO MOVE TO) +STOD2: MOVE TT,@LMGST(I) + SOJE TT,STV2 + SUB S,RPVAL(D) ;MORE THAN ONE ATTACK. + JUMPL S,STV3E + +STV2: AOBJN B,STV1 + MOVE B,LGMST2(I) ;OUR PIECES + CLEARM PCC + CLEARM PMC + CLEARM PMCVAL +STVF1: SKIPE A,PIECEL(B) + SKIPN TT,@LMGST+1(I) + JRST STVF2 ;NOT EXISTANT OR NOT ATTACKED + SKIPN @LMGST(I) + JRST STVF3F ;NOT DEFENDED SO PRESSING MOVE UNLESS HAS A + ;PLAUSIBLE CAPTURE (OR TRADE) AND NOT PINNED +STVF3G: PUSHJ P,DFLATA + JUMPE C,STVF3 ;NOT DEFENDED + MOVE S,RPVAL(D) + SUB S,RPVAL(B) + JUMPL S,STVF3 ;E.P. + SKIPGE TRDF + JUMPE S,STVF4 ;TRADE OFFERED AND FAVORABLE SO NOT + ;PRESSING MOVE UNLESS PINNED +STVF5: SOJE TT,STVF2 ;ONLY ATTACK SO NOT EN PRISE EVEN IF MOVE GIVEN UP + SUB S,RPVAL(C) + JUMPL S,STVF6 + +STVF2: AOBJN B,STVF1 +;DROPS THRU + + + SKIPGE TPCFL + PUSHJ P,ATPCG1 ;IN PCG TRACE MODE, TRAP OUT. KLUDGE KLUDGE + MOVE A,PMC + SKIPL SFEEDF + CAIL A,2 + JRST STATE4 ;SIDE TO MOVE HAS TWO PCS ON PREY. (MAY BE WORSE FOR STM) + JUMPE A,STATE5 ;SIDE TO MOVE HAS NONE ON PREY + SKIPE PCC + JRST STATE4 ;SIDE TO MOVE HAS 1 EP AND PRESSING MOVE (MAY BE WORSE FOR STM) + CAIN A,1 + CAME A,HPCOP + JRST STATE5 + SKIPGE SFDF1 ;SET IF SIDE NOT TO MOVE HAS PIECE TRAPPED + JRST SFDBS4 ;BOTH HAVE ONE PIECE ON PREY, BUT SIDE NOT TO MOVE IS TRAPPED + ; (MAY BE BETTER FOR STM) +STATE5: SKIPN SMICKF + JRST STATE8 ;NOT IN CHECK + MOVE A,PCC + ADD A,PMC + SOJG A,STATE6 ;IN CHECK AND HAS PIECES ON PREY(OTHER THAN KING) + ; (MAY BE WORSE FOR STM) + MOVE A,HPCOP + CAIL A,2 + JRST SFDBS6 ;AFTER GETTING OUT OF CHECK, OTHER SIDE WILL HAVE 2 EN PRISE + ; (MAY BE BETTER FOR STM) +STATE9: MOVE J,[-8,,0] ;MAKE SURE NOT MATED. IF HAVE ANY K MOVES, WE ARE NOT MATED. +STMT3: MOVE A,@OKINGT(I) + LDB B,BDBSQ(J) + ADD A,RDT(J) + SKIPL T1,BOARD(A) + SKIPE @LMGST+1(I) + JRST STMT1 ;NOT ON BOARD OR ATTACKED BY HIM + JUMPE T1,STMT4 + XCT OURGY1(I) + JRST STMT1 ;ALREADY OCCUPIED BY US +STMT4: JUMPE B,STATE8 ;OK SAFE KING MOVE + MOVE D,BDAST(B) + XCT HISGY(I) + JRST STATE8 ;UNBLOCKING OUR GUY + ;MOVING INTO "SHADOW" +;DROPS THRU + +STMT1: AOBJN J,STMT3 + MOVE A,SMICKF ;NO KING MOVES CAN CHECKING PIECE BE CAPTURED + SOJN A,STMT1A ;IN DOUBLE CHECK + MOVE A,@OKINGT(I) + PUSHJ P,FLATA + MOVE T1,PIECEL(D) + HRRZ A,LGLMST +STMT1L: CAIL A,-STWPM+1(P) + JRST STMT1A + HRRZ TT,1(A) + CAMN TT,T1 + JRST STMT1B ;CAN CAPTURE CHECKING PIECE IN PLAUSIBLE CAPTURE +STMT1C: ADDI A,STWPM + JRST STMT1L + +STMT1A: AOS NFDCK + MOVEI T2,1 + JRST STMT2 ;NO KING MOVES CAUSE FEEDOVER ANYHOW + +HISGY: SKIPL PIECE(D) + SKIPGE PIECE(D) + +STMT1B: HLRZ B,1(A) ;CAN CAPTURE CHECKING PIECE + SKIPE PINT(B) + JRST STMT1C ;BUT CAPTURING PIECE PINNED +STATE8: +IFN CHEOPS,[ ;OCM THINKS POSITION STABLE, DOES CHEOPS? + SKIPLE A,CHEOSW + TRNN A,1 + JRST CHSTR1 + PUSHJ P,HCHGV ;GET CHEOPS RESULT + SKIPE T1,CHXSTA ;SUM IN STATISTICS COUNTER + AOS CSSTAC ;# OF FROBS SUMMED IN (SKIP TO AVOID DOUBLE COUNT IF TRIED + ADDM T1,CSSTA ; TO FEEDOVER. + CLEARM CHXSTA + MOVM ZR,R + CAIL ZR,10000-40 + JRST [ AOS CSMATD ;CHEOPS DETECTED FORCED MATE + PUSHJ P,HOCMMV ;MATE VALUE, CONVERT TO OCM VALUE AND RETURN IT + JRST STIRE4] + MOVE Q,R + SUB Q,CHXIMB + JUMPE Q,[ AOS CSEVEN + SKIPL T1,CHCSTP ;COMPLETELY STABLE, NO MATERIAL CHANGE EITHER WAY + CAMLE T1,LMGD + JRST CHSTR3 ;CHEOPS STOP MODE OFF OR NOT DEEP ENUF + JRST STIRET] ;IMMEDIATELY RETURN VALUE OF PCSATS + XCT (I)[ JUMPG Q,CHSTR2 ;XFER TO CHSTR2 IF BETTER FOR SIDE TO MOVE + JUMPL Q,CHSTR2] + AOS CSWSTM + SKIPE Q,CHFDL + CAMGE Q,LMGD + JRST [ AOS NCHWFD ;# FEEDOVERS WOULD HAVE CAUSED + JRST CHSTR4] + AOS NCHFDO ;# FEEDOVERS CHEOPS CAUSED + JRST STMT6 ;WORSE FOR STM, FORCE FEEDOVER + +CHSTR2: AOS CSBSTM ;BETTER FOR STM + SKIPE T1,CHMPC ;MAKE CHEOPS MOVE A PLAUSIBLE CAPTURE? + CAMGE T1,LMGD ; IF NOT TOO DEEP, THAT IS + JRST CHSTR4 + MOVN ZR,Q ;Q HAS RETURNNED DELTA, CHXIA INITIAL A/B DELTA + XCT (I)[ CAME Q,CHXIA ;IF VALUE COMES BACK = LOW A/B LIMIT FOR STM, + CAME ZR,CHXIA] ;FLUSH BECAUSE EVERYTHING CUT OFF AND PV IS INVALID +; CAME R,CHXIA ;DUE TO LOSSAGE, IT LOSES ON EITHER LIMIT +; CAMN R,CHXIB ; (DOESNT UPDATE P.V. ON A/B CUT) +; JRST CHSTR4 + SKIPN C,CHXPV1 ;MAKE P.V. MOVE A "PLAUSIBLE CAPTURE" + JRST CHSTR4 + HLRZ A,C + SKIPN PIECEL(A) + .VALUE ;SOMETHING SCREWWED UP ... + HRRZ A,LGLMST ;FIRST MAKE SURE IT ISNT ALREADY IN THERE +CHSTR5: CAIL A,1-1(P) + JRST CHSTR6 ;OK, NOT PREVIOUSLY A PLAUS CAPT + CAMN C,1(A) + JRST CHSTR4 ;ALREADY A PC, FLUSH + ADDI A,STWPM + JRST CHSTR5 + +CHSTR6: AOS CSMVPC ;MAKE CHEOPS MOVE A PLAUS CAPT + PUSH P,C + PUSH P,[3000] ;MAKE THIS THE FIRST ONE LOOKED AT +CHSTR4: +CHSTR3: +CHSTR1: +] + HRRZ A,LGLMST + AOS A + MOVEI B,1(P) + CAME P,LGLMST + PUSHJ P,SORT ;STWPM IMPLICIT.. + PUSH P,[0] ;# OF MV INVESTIGATED FROM THIS POS +STDMN==-4 + PUSH P,[,-1] +STDBHA==-3 + PUSH P,HSADR +STHSAD==-2 + MOVE T2,LGLMST + PUSH P,T2 +STPDS==-1 + MOVEI T2,1(T2) + PUSH P,T2 +STMVP==0 +NWSTP==5 ;NUMBER WORDS PUSHED HERE +STWPM==2 ;# WDS PUSHED PER MOVE + ;WD0 MOVE + ;WD1 RH VALUE, 4.8 -> FORCE PCG IN REPLY TO THIS MOVE (NOT IMPLEMENTED NOW) +; PUSHJ P,STVL4T + MOVE R,PCSATS + MOVE A,PDVDF + MOVEM A,PDVLV + + ;DROPS THRU +;DROPS IN +STRET: CLEARM STSIG + MOVEM R,STBSV + XCT EVMT2(I) + JRST STRET2 + XCT EVMT8(I) + MOVEM R,BPREV(I) + +STV3L: HRRZ T1,STMVP(P) + CAIN T1,-NWSTP+1(P) + JRST STVL5 + HRRZ A,(T1) + HLRZ B,(T1) +STVL6: AOS STDMN(P) + CLEARM CPCDVL + SKIPE D,BOARD(A) + JRST STVL6B + CAMN A,GHLOC + SKIPL LMGT(B) + JRST STVL6A + MOVE D,@EVMT13(I) +STVL6B: MOVE T1,PDV-PIECE(D) + IMUL T1,PINVF-PIECE(D) + MOVEM T1,CPCDVL +STVL6A: PUSHJ P,TMOVE ;TRANSLATE AND MAKE MOVE + JRST STV3B + XORI I,1 + PUSH P,STSIG + PUSH P,CVPR + PUSH P,STBSV + PUSHJ P,STATEV ;ANALYZE SITUATION + POP P,STBSV + POP P,C + POP P,STSIG + XORI I,1 + XCT EVMT2(I) + JRST STVL2 ;REJECT BRANCH + XCT STVT2(I) + JRST TMS1 ;WANT MOVE +STV3D1: EXCH C,CVPR + PUSHJ P,LFSRC ;RECLAIM FS +STV3D: PUSHJ P,UNMOVE +STV3B: MOVEI T1,STWPM + ADDM T1,STMVP(P) + JRST STV3L + +STVL2:IFN HSCOD,[ + MOVE ZR,POSHSA + MOVEM ZR,STDBHA(P) + SKIPL D,STHSAD(P) + SKIPGE T1,NHSW + JRST STVL2C + JUMPE T1,STVL2B + LDB T1,[HTVCOD,,HSTBV(D)] + CAIE T1,4 + JRST STVL2A + MOVEI T1,1 + DPB T1,[HTVCOD,,HSTBV(D)] + HRRM R,HSTBV(D) +] +STVL2A: PUSH P,D + MOVE Q,EVMT5A(I) + MOVEM Q,STSIG + MOVEM R,STBSV + PUSHJ P,LFSRC + PUSHJ P,RECMS + MOVE T2,STDMN-1(P) ;ONE ADDTL PUSH DONE + DPB T2,[PUSNM,,@CVPR] + PUSHJ P,UNMOVE + POP P,D + CAIE D,-1 + JUMPGE D,STVL5C + JRST STVL5A + +IFN HSCOD,[ +STVL2B: CLEARM HSTB(D) + AOS HASHS +STVL2C: MOVEI D,-1 + JRST STVL2A +] + +STVT1: -10000000 ;LOSING SITUATIONS + 10000000 + +STVT2: CAMLE R,STBSV + CAMGE R,STBSV + CAMLE R,STBSV + + + +TMS1: MOVE ZR,POSHSA + MOVEM ZR,STDBHA(P) + MOVEM Q,STSIG + XCT EVMT8(I) + PUSHJ P,BPRVS + PUSHJ P,LFSRC ;RECLAIM FS + PUSHJ P,RECMS + MOVE ZR,STDMN(P) + DPB ZR,[PUSNM,,@CVPR] + MOVEM R,STBSV + JRST STV3D + +LFSRES: MOVEI A,LSPC+2 ;REINITIALIZE FS. + MOVEI B,LSPCL +LFSRE1: MOVEM A,-2(A) + CLEARM -1(A) + ADDI A,2 + SOJG B,LFSRE1 + CLEARM -2(A) + CLEARM -1(A) + MOVEI A,LSPC + MOVEM A,LFS + POPJ P, + +LFSRC: HRRZS C +LFSRC1: JUMPE C,CPOPJ ;RECLAIM POINTER IN C + HRRZ T2,C + HRRZ C,(C) + EXCH T2,LFS + MOVEM T2,@LFS + JRST LFSRC1 + + +STVL5T: STV5TW(Q) + STV5TB(Q) + + 2 +STV5TW: 0 + 1 + + 1 +STV5TB: 0 + 2 + +POSVAL: 0 ;POS VAL +POSREL: 0 ;POS RELIABILITY +POSHSA: 0 ;RETURNNED HASH ADR +CVPR: 0 ;VALUE RETURNED FOR PRINCIPLE VARIATION +STBSV: 0 +BPPVLU: 4 ;EXTRA VALUE FOR P P BLOCKED BY OWN PAWN + +HPCOP: 0 ;HIS PIECES EN PRISE +HPCOPV: 0 ;LARGEST VALUE OF PIECES THAT COUNTED HPCOP + +PCC: 0 ;PRESSING CAPTURE COUNT + ;(OK IF CAPTURED IMMEDIATELY, BUT WOULD BE EN PRISE IF IT + ;WAS HIS TURN TO MOVE + +PMC: 0 ;PRESSING MOVE COUNT + ;PIECE EN PRISE AND MUST BE MOVED , LOSING TEMPO +PMCVAL: 0 ;MAX VALUE OF PIECES THAT COUNTED PMC. + +SFEEDF: 0 +SFDF1: 0 + +CATCUT: 2 ;INVESTIGATE ALL CAPTURES AT THIS PLY OR LESS +FDCUT: 7 ;NO FEEDOVERS THIS DEEP OR DEEPER +SFB: 0 ;IN A FEEDOVER +LMGEPS: 0 ;LOCN AT WHICH CHECKING PAWN CAN BE TAKEN EP +STSIG: 0 ;CURRENT SIG ON STBSV +SMICKF: 0 ;-1 SIDE TO MOVE IN CHECK + +TRDF: 0 ;PROFITABLE FOR SIDE TO MOVE TO TRADE + +PCSP: PCBAL + PCBAL+1 + PCBAL + +KSQTBP: 0 +KSQTB: BLOCK 40 +PP TRDP:, BLOCK NPC ;-1 IF CAN GET RID OF PIECE WITH TEMPO TRACE OR + ;PLAUS CAPT + +PP NODF:, BLOCK NPC ;NUMBER ATTACKED PIECES PIECE ONLY DEFENCE OF + + +IFN HSCOD,[ +STAH2: PUSHJ P,HHVC + JRST STAH3 + HRRZM T2,POSHSA + MOVE T1,LMGD + CLEARM CVPR + AOS NHMSB + MOVE Q,J + CAIGE T1,LSHFLT + AOS SHFLT(T1) + MOVE D,POSHSA + JSP ZR,EVM5B2 +] +STT1: -8,,1 + -8,,1+NPCS + +STT2: BW + -BW + BW + +STT3: BDAFB(T2) + BDAFT(T2) + +STVF4: SKIPE PINT(B) + JRST STVF5 +STVF4A: AOS PCC ;PRESSING CAPTURE NOT INVOLVING LOSS OF TEMPO + JRST STVF2 + +STVF6: MOVE J,@LMGST(I) ;NOT ATTACKED BY LESS THAN P BUT IS LESS THAN P+D + SOJE J,STVF3A ;ONLY ONE DEFENCE + SOJG TT,STVF3A ;MORE THAN TWO ATTACKS + PUSHJ P,F2LA + JUMPE T1,STVF3A + ADD S,PVALUE(T2) + JUMPGE S,STVF2 + JRST STVF3A + +STVF3E: SKIPN PINT(B) + JRST STVF3A + MOVE S,RPVAL(D) ;UNDEFENDED IS IT ATTACKED BY LESS? + SUB S,RPVAL(B) + JUMPL S,STVF3C ;ATTACKED BY LESS AND PINNED + JRST STVF3A + +STVF3F: SKIPN PINT(B) + JRST STVF3A + JRST STVF3G + +STVF3: SKIPE PINT(B) ;OUR PC EP + JRST STVF3X +STVF3A: SKIPGE TT,TRDP(B) ;IF PINNED BUT NOT ATTACKED BY LESS DONT SET SFEEDF + JRST STVF4A ;CAN SWAP OFF OR MAKE PLAUS CAPT + JUMPG TT,STVF4B ;HAVE TRADE, BUT ITS NOT A P.C. YET + SKIPGE LMGT(B) + JRST STVF3D + PUSHJ P,TRAPP + SKIPGE TRPF +STVF3C: SETOM SFEEDF +STVF3D: AOS PMC + MOVE ZR,PVALUE(B) + CAMLE ZR,PMCVAL + MOVEM ZR,PMCVAL + SKIPE PCGPWN + ;CAN WE INTERPOSE WITH P, ATTACKING HIM? + SKIPL DDPCS(D) + JRST STVF2 + SKIPN PINT(D) + CAMN D,HPLMVD + JRST STVF2 ;MV (IF EXISTS) ALREADY HACKED BY OTHER HACK + MOVE TT,PIECEL(D) ;POSSIBLE TO INTERPOSE P WITH GAIN OF TEMPO? +; LDB T1,STVFT1(I) +; JUMPE T1,STVF2 ;CANNOT BE ATTACKED BY OUR P IN ONE MOVE + MOVE T1,PFILE(D) ;SQ OF A + CAMG T1,PFILE(B) ;FILE OF PC + JRST STVFC1 ;A TO K SIDE OF PIECE INTERPOSE TO Q SIDE OF A + SKIPE @STVFT5(I) ;P WOULDNT BE DEFENDED + SKIPE @STVFT4(I) ;PIECE NEXT TO A NO INTERPOSE POSSIBLE + JRST STVF2 + MOVEI T1,@STVFT4(I) ;SQUARE TO MOVE TO + SKIPG T2,@STVFT2(I) + JRST STVFC3 ;DOUBLE ADVANCE POSSIBLE? +STVFC4: SUBI T2,PIECE + XCT STVFT3(I) ;NOT OUR P + JRST STVF2 + SUBI T1,BOARD + PUSH P,T1 + HRLM T2,(P) + MOVE T1,PVALUE(D) + SUB T1,PVALUE(T2) + PUSH P,T1 +; ASH T1,-1 +; CAMLE T1,BPCV +; MOVEM T1,BPCV + MOVSI ZR,(MOVE) + IORM ZR,(P) ;FORCE PCG ON NEXT PLY + JRST STVF2 + +STVFC3: XCT STVFT6(I) + SKIPG T2,@STVFT7(I) + JRST STVF2 + JRST STVFC4 + +STVFC1: SKIPE @STVFQ5(I) + SKIPE @STVFQ4(I) + JRST STVF2 + MOVEI T1,@STVFQ4(I) + SKIPLE T2,@STVFQ2(I) + JRST STVFC4 + XCT STVFT6(I) + SKIPG T2,@STVFQ7(I) + JRST STVF2 + JRST STVFC4 + +;STVFT1: NPAS1,,WPAS(TT) +; NPAS1,,BPAS(TT) + +STVFT5: WA-BW-1(TT) + BA+BW-1(TT) + +STVFT4: BOARD-BW-1(TT) + BOARD+BW-1(TT) +STVFT2: BOARD-2*BW-1(TT) + BOARD+2*BW-1(TT) + +STVFT3: SKIPL LMGSTD(T2) + SKIPL SNFBP(T2) + +STVFT6: SKIPL 4RNKP(TT) + SKIPG 4RNKP(TT) + +STVFT7: BOARD-3*BW-1(TT) + BOARD+3*BW-1(TT) + +STVFQ5: WA-BW+1(TT) + BA+BW+1(TT) + +STVFQ4: BOARD-BW+1(TT) + BOARD+BW+1(TT) + +STVFQ2: BOARD-2*BW+1(TT) + BOARD+2*BW+1(TT) + +STVFQ7: BOARD-3*BW+1(TT) + BOARD+3*BW+1(TT) + + +SPA1: SKIPN PCGPWN + JRST SPA2 ;DONT HACK MOVES +; LDB ZR,SPAT1(I) ;SEE IF CAN ATT PINNED PC OR LAST PC MVED W/ P +; JUMPE ZR,SPA2 + SKIPE @SPAT2(I) + JRST SPA3 ;SQ TO K SIDE NOT OPEN + SKIPN @SPAT3(I) + JRST SPA4 ;P WOULD NOT BE ATT ED + SKIPN @SPAT4(I) + JRST SPA3 ;P WOULD BE ATT AND NOT DEF +SPA4: MOVEI T1,@SPAT2(I) + SKIPG T2,@SPAT5(I) + JRST SPA5 ;NO PC THERE, DOUBLE ADV POSSIBLE? +SPA4A: SUBI T2,PIECE + XCT STVFT3(I) + JRST SPA3 + SUBI T1,BOARD + PUSH P,T1 + HRLM T2,(P) + PUSH P,[MOVE] +SPA3: SKIPE @SPAT6(I) + JRST SPA2 + SKIPN @SPAT7(I) + JRST SPA6 + SKIPN @SPAT8(I) + JRST SPA2 +SPA6: MOVEI T1,@SPAT6(I) + SKIPG T2,@SPAT9(I) + JRST SPA7 +SPA6A: SUBI T2,PIECE + XCT STVFT3(I) + JRST SPA2 + SUBI T1,BOARD + PUSH P,T1 + HRLM T2,(P) + PUSH P,[MOVE] + JRST SPA2 + +SPA5: JUMPN T2,SPA3 ;SINGLE ADV SQUARE NOT VACANT + XCT SPATR(I) + SKIPG T2,@SPAT5A(I) + JRST SPA3 + JRST SPA4A + +SPA7: JUMPN T2,SPA2 ;SINGLE ADV SQ NOT VACANT + XCT SPATR(I) + SKIPG T2,@SPAT9A(I) + JRST SPA2 + JRST SPA6A + +SPATR: SKIPLE 4RNKP(A) ;SKIP UNLESS SQ IN 5TH RANK FOR STM, IE, CAN BE ATT + SKIPGE 4RNKP(A) ; BY P'S ON 4TH RANK, WHICH IN TURN CAN BE REACHED BY + ; DOUBLE ADVANCE +;SPAT1: NPAS1,,WPAS(A) +; NPAS1,,BPAS(A) + +SPAT2: BOARD-BW-1(A) + BOARD+BW-1(A) + +SPAT3: BA-BW-1(A) + WA+BW-1(A) + +SPAT4: WA-BW-1(A) + BA+BW-1(A) + +SPAT5: BOARD-2*BW-1(A) + BOARD+2*BW-1(A) + +SPAT5A: BOARD-3*BW-1(A) + BOARD+3*BW-1(A) + +SPAT6: BOARD-BW+1(A) + BOARD+BW+1(A) + +SPAT7: BA-BW+1(A) + WA+BW+1(A) + +SPAT8: WA-BW+1(A) + BA+BW+1(A) + +SPAT9: BOARD-2*BW+1(A) + BOARD+2*BW+1(A) + +SPAT9A: BOARD-3*BW+1(A) + BOARD+3*BW+1(A) + +STVF4B: CAMN P,LGLMST + JRST STVF4A ;HAD NO OTHER P.C. S + PUSH P,TT ;STORE TRADE OF OUR E.P. PC + HRLM B,(P) + PUSH P,[0] + JRST STVF4A + +STVF3X: SKIPG TT,TRDP(B) + JRST STVF3C + CAMN P,LGLMST + JRST STVF3C + PUSH P,TT ;STORE MOVE IN CASE TOO DEEP FOR FEEDOVER + HRLM B,(P) + PUSH P,[0] + JRST STVF3C + +STVQL3: SKIPN PCGPWN ;OUR PAWN PASSED, BUT NOT ON 7TH + JRST STVQL +STVQL5: SKIPE @PCCNTP+1(I) ;POINTER TO NUMBER OF HIS PCS. SKIP ON HE HAS ONLY K LEFT. + JRST STVQL4 + MOVEI ZR,1(T1) ;ASSUME WE ADVANCE P + SUB ZR,@RKRNK+1(I) ;RPRANK OF HIS K + CAILE ZR,1 + JRST STVQQ1 ;P AHEAD + MOVE A,PFILE(B) ;HE HAS ONLY K LEFT + SUB A,@KFILE+1(I) + MOVMS A + CAMG A,REVERS(T1) + JRST STVQL4 +STVQQ1: MOVE T1,PIECEL(B) ;THIS P OUTSIDE SQ OF HIS K + ADD T1,STT2(I) + SKIPE BOARD(T1) + JRST STVQL4 ;BLOCKED +STVQL6: PUSH P,T1 + HRLM B,(P) + PUSH P,[200000,,1000] ;PLAUSIBILITY OF QUEENING + JRST STVQL + +STVQL4: MOVE T1,PPASED(B) + CAIGE T1,5 + JRST STVQL + MOVE T1,PIECEL(B) ;PP ON 5TH, ADVANCE PLAUS CAPT IF LOOKS SAFE + ADD T1,STT2(I) + SKIPE BOARD(T1) + JRST STVQL + SKIPN T2,@LMGST1+1(I) + JRST STVQL8 ;HE DOESNT OPPOSE + MOVE A,@LMGST1(I) + LDB TT,STT3(I) ;GET PIECE ATTACKING PAWN FROM REAR. + JUMPE TT,STVQL7 ;NONE. + SKIPGE RFPCS(TT);NOT SLIDING + XCT RMOYTT(I) ;NOT MINE + JRST STVQL7 + AOS A ;OK THAT WILL BE AN EXTRA DEFENDER. +STVQL7: JUMPE A,STVQL ;WOULD BE E.P. +STVQL8: PUSH P,T1 + HRLM B,(P) + MOVE TT,PPASED(T1) + MOVE ZR,PASPV+1(TT) + SUB ZR,PASPV(TT) + PUSH P,ZR + JRST STVQL + + +STVL4T: +STVL4: MOVE ZR,PCBAL + CLEARM WMID + SKIPN WQNC + CAIL ZR,MIDMAT + SETOM WMID ;WHITE HAS MID-GAME MATERIAL + MOVE ZR,PCBAL+1 + CLEARM BMID + SKIPN BQNC + CAIL ZR,MIDMAT + SETOM BMID + RS WHITE PCS,MOVE R,PCBAL + RS WHITE PWNS,ADD R,PNBAL + MOVE T2,R + RS BLACK PCS,SUB R,PCBAL+1 + RS BLACK PWNS,SUB R,PNBAL+1 + ADD T2,PCBAL+1 + ADD T2,PNBAL+1 + RS NET PCS,IMUL R,PCRAT1 + RS PC RATIO CHNG,IDIV R,T2 + SKIPE NSBVS + PUSHJ P,STVD ;ADD DEVEL FACTORS BCS + SKIPE ACTV + PUSHJ P,STACE ;ACTIVITY FACTOR + SKIPE CNTSW + PUSHJ P,STCNT ;CENTRALIZED KNIGHTS AND PAWNS FACTOR + SKIPE OKFILE + PUSHJ P,STOKF ;OPEN FILES NEAR K + SKIPE KCUT + PUSHJ P,STKC ;KING CUT OFF (PINNED AGAINST EDGE OF BOARD) + SKIPE PINWSQ + PUSHJ P,STWSP ;PIN OF PIECE ON SQUARE NOT DEF BY PAWN + SKIPE RKPOS + PUSHJ P,STRKP ;ROOK POSITION + SKIPL BMID ;KING SAFETY IF MID GAME MATL + JRST STVLK1 + MOVE A,PRANK+WKING-PIECE + SOS A + LSH A,3 + RS W KING LOCN,SUB R,A +STVLK1: SKIPL WMID + JRST STVL4A + MOVE A,RPRANK+BKING-PIECE + SOS A + LSH A,3 + RS B KING LOCN,ADD R,A +STVL4A: MOVE B,[-8,,1] +STVLP3: SKIPE A,PIECEL(B) + SKIPL LMGT(B) + JRST STVLP1 + SKIPG T1,PPTP(B) + JRST STVLP2 + MOVE T2,PFILE(B) + MOVE D,BNPNFL(T2) + CAIN T1,3 ;WILL DEAL WITH ISOLATED P LATER + JRST STVLP2 + MOVE S,PMOB(B) + JUMPE D,[ MOVE T1,OBACKV(S) ;ON OPEN FILE + JRST SWOFB1] + MOVE T1,BACKV(S) +SWOFB1: IMUL T1,IFILEW(T2) + RS W FORWARD/BACKWARD *P!B AT *S!A,SUB R,T1 +STVLP2: SKIPN T1,PPASED(B) + JRST STLHD1 + JUMPL T1,STVLP4 ;BLOCKED BY FRIENDLY + MOVE T2,PMOB(B) + RS *P!B PASSED P ON *O!T1 RANK,ADD R,@PPVM(T2) +STLHD1: SKIPLE D,BOARD+1(A) ;IS OUR P ADJ TO K-SIDE? + SKIPL LMGSTD-PIECE(D) + JRST STVLP1 + SKIPN PMOB(B) + SKIPE PMOB-PIECE(D) + JRST STVLP1 ;NOT BOTH MOBILE + MOVE T1,RPRANK(B) + MOVE T2,HDOVAL(T1) + IMUL T2,HDUOSW + RS DUO AT *S!A, ADD R,T2 +STVLP1: MOVE T1,WNPNFL(B) + JUMPE T1,STVLF1 + RS W PAWNS IN *F!B FILE, SUB R,MULTP(T1) + SKIPN WPNFLS-1(B) + SKIPE WPNFLS+1(B) + JRST STVLF1 + HRRZ ZR,B + SUB ZR,PFILE+WKING-PIECE + MOVMS ZR + SKIPGE BMID + CAILE ZR,2 + JRST [ MOVEI T2,IMULTP(T1) ;PAWNS ISOLATED (NOT NEAR K, OR NOT MIDDLE GAME) + SKIPE BNPNFL(B) + JRST STVLF2 ;NOT ON OPEN FILE + ADDI T2,OIMULT-IMULTP + SKIPN NUMORP+1 + ADDI T2,OIMULV-OIMULT ;OTHER SIDE HAS NO RFPCS + JRST STVLF2] + MOVEI T2,KIMLTP(T1) ;ISO PAWNS NEAR K IN MIDDLE GAME + SKIPN BNPNFL(B) + ADDI T2,KOIMLT-KIMLTP ;ON OPEN FILE +STVLF2: MOVE T1,(T2) + IMUL T1,IFILEW(B) + RS W ISOLATED PAWNS IN *F!B FILE, SUB R,T1 +STVLF1: +STVLP6: MOVE T1,BNPNFL(B) + JUMPE T1,STVLF3 + RS B PAWNS IN *F!B FILE, ADD R,MULTP(T1) + SKIPN BPNFLS-1(B) + SKIPE BPNFLS+1(B) + JRST STVLF3 + HRRZ ZR,B + SUB ZR,PFILE+BKING-PIECE + MOVMS ZR + SKIPGE WMID + CAILE ZR,2 + JRST [ MOVEI T2,IMULTP(T1) ;PAWNS ISOLATED (NOT NEAR K, OR NOT MIDDLE GAME) + SKIPE WNPNFL(B) + JRST STVLF4 + ADDI T2,OIMULT-IMULTP + SKIPN NUMORP + ADDI T2,OIMULV-OIMULT + JRST STVLF4] + MOVEI T2,KIMLTP(T1) + SKIPN WNPNFL(B) + ADDI T2,KOIMLT-KIMLTP +STVLF4: MOVE T1,(T2) + IMUL T1,IFILEW(B) + RS B ISOLATED PAWNS IN *F!B FILE , ADD R,T1 +STVLF3: AOBJN B,STVLP3 + + MOVE B,[-8,,NPCS+1] +STVLP5: SKIPE A,PIECEL(B) + SKIPL LMGT(B) + JRST STVLP9 + SKIPG T1,PPTP(B) + JRST STVLP7 + MOVE T2,PFILE(B) + MOVE D,WNPNFL(T2) + CAIN T1,3 + JRST STVLP7 + MOVE S,PMOB(B) + JUMPE D,[ MOVE T1,OBACKV(S) ;ON OPEN FILE + JRST SBOFB1] + MOVE T1,BACKV(S) +SBOFB1: IMUL T1,IFILEW(T2) + RS B FORWARD/BACKWARD *P!B AT *S!A,ADD R,T1 +STVLP7: SKIPN T1,PPASED(B) + JRST STLHD2 + JUMPL T1,STVLP8 + MOVE T2,PMOB(B) + RS *P!B PASED ON *O!T1 RANK,SUB R,@PPVM(T2) +STLHD2: SKIPLE D,BOARD+1(A) + SKIPL SNFBP-PIECE(D) + JRST STVLP9 + SKIPN PMOB(B) + SKIPE PMOB-PIECE(D) + JRST STVLP9 + MOVE T1,RPRANK(B) + MOVE T2,HDOVAL(T1) + IMUL T2,HDUOSW + RS DUO AT *S!A, SUB R,T2 +STVLP9: AOBJN B,STVLP5 + + LDB A,[430100,,R] + SKIPN WPNC(A) + SKIPE WRKC(A) + JRST STVLS0 + MOVE T1,WBSC(A) + CAIGE T1,2 + SKIPE WQNC(A) + JRST STVLS0 + MOVE T2,WKNC(A) + CAIGE T2,3 + JUMPE T1,STVLS1 + JUMPN T2,STVLS0 +STVLS1: RS BUT LACKS MATING FORCES,MOVEI R,0 +STVLS0: POPJ P, + +STVLP4: RS *P!B PASSED BUT BLOCKED BY FRIENDLY P, ADD R,BPPVLU + JRST STLHD1 + +STVLP8: RS *P!B PASSED BUT BLOCKED BY FRIENDLY, SUB R,BPPVLU + JRST STLHD2 + +STVTR1: MMSAVAC ;TRACE SUPER STATIC BD EV FROM "DYNAMIC" POSITION + MOVEI I,2 ; (GET HERE ON HBPT -1) + MOVEM I,TRCSW1 + PUSHJ P,ASTRC1 + MOVE T1,PDVLV + MOVE T2,CPCDVL + MOVE B,TRPSW + ISOUT [.ASCII ?PDVLV=*U!T1 CPCDVL=*U!T2?] + MOVE I,CATCSA+I + PUSHJ P,STVL4 + MOVEM R,CATCSA+R + PUSHJ P,ATRAF1 ;FINISH OFF PRINTOUT AND UNTRACE. + PUSHJ P,TYI + MMRSAC + POPJ P, + +STVL5: MOVE Q,STSIG + +IFN HSCOD,[ + SKIPL D,STHSAD(P) + SKIPGE T1,NHSW + JRST STVL5D + JUMPE T1,STVL5B + LDB T1,[HTVCOD,,HSTBV(D)] + CAIE T1,4 + JRST STVL5C + MOVE T1,@STVL5T(I) + DPB T1,[HTVCOD,,HSTBV(D)] + MOVE R,STBSV + HRRM R,HSTBV(D) +STVL5C: HRRZM D,POSHSA + MOVE T2,STDBHA(P) + MOVE C,CVPR + JUMPE C,STVL5A + MOVE C,1(C) + LDB A,[300,,C] + DPB A,[HSTPRN,,T2] + LDB A,[MPTO,,C] + LDB B,[MPO,,C] + DPB B,[HSTPON,,T2] + DPB A,[HSTSQN,,T2] + MOVEM T2,HSTBL(D) +] +STVL5A: MOVE Q,STSIG + MOVE P,STPDS(P) + MOVE R,STBSV +STIRE3: POP P,BPREV(I) + POP P,PDVLV + SOS LMGD + MOVE A,@OKINGT(I) + SKIPN @LMGST+1(I) ;DONT SOS IT IF DIDNT AOS IT + SOS LMGD2 + POPJ P, + +STIRET: MOVE R,PCSATS ;IMMEDIATELY RETURN PCSATS WITH RELIABILITY OF 0! +STIRE4: ;RETURN R WITH RELIABILITY OF 0 +IFN HSCOD,[ + SKIPL D,HSADR + SKIPGE T1,NHSW + JRST STIRE1 + JUMPE T1,STIRE2 + LDB T1,[HTVCOD,,HSTBV(D)] + CAIE T1,4 + JRST STIRE1 + MOVEI T1,0 + DPB T1,[HTVCOD,,HSTBV(D)] + HRRM R,HSTBV(D) +] +STIRE1: MOVEI Q,0 + MOVEI D,-1 + MOVEM D,POSHSA + MOVE P,LGLMST + JRST STIRE3 + +STRET2: IFN HSCOD,[ + SKIPL D,HSADR + SKIPGE T1,NHSW + JRST STRET3 + JUMPE T1,STRET4 + LDB T1,[HTVCOD,,HSTBV(D)] + CAIE T1,4 + JRST STRET3 + MOVEI T1,1 + DPB T1,[HTVCOD,,HSTBV(D)] + HRRM R,HSTBV(D) +] +STRET3: MOVE Q,EVMT5A(I) + MOVEM Q,STSIG + MOVEM R,STBSV +STVL5D: MOVEI D,-1 + MOVEM D,POSHSA + JRST STVL5A + +IFN HSCOD,[ +STRET4: CLEARM HSTB(D) + MOVEI D,-1 + AOS HASHS + JRST STRET3 + +STVL5B: CLEARM HSTB(D) + AOS HASHS + JRST STVL5D + +STIRE2: CLEARM HSTB(D) + AOS HASHS + JRST STIRE1 +] + + +SFDBS4: TDZA T2,T2 +SFDBS6: MOVNI T2,1 + MOVEI T1,1 ;MAY BE BETTER FOR STM + JRST SFDBS5 + +STATE4: TDZA T2,T2 ;"TRY" TO FEEDOVER +STATE6: MOVNI T2,1 ;SAVE IN T2 INDICATION AS TO RETURN POINT + MOVEI T1,0 ;MAY BE WORSE FOR STM +SFDBS5: MOVE Q,LMGD2 + CAMGE Q,FDCUT + SKIPG MCFB + JRST STATE7 ;TOO DEEP OR FEEDOVERS USED UP +IFN CHEOPS,[ + SKIPLE Q,CHEOSW + TRNN Q,1 + JRST STMT2 + SKIPE Q,CHFDVF + CAMLE Q,LMGD + JRST STMT2 + PUSH P,T1 + PUSH P,T2 + PUSH P,A + PUSHJ P,HCHGV + SKIPE T1,CHXSTA ;SUM IN STATISTICS COUNT + AOS CSSTAC + ADDM T1,CSSTA + CLEARM CHXSTA ;AVOID POSSIBLE DOUBLE COUNTING IF FILTER BACK THRU + POP P,A + POP P,T2 + POP P,T1 + MOVM ZR,R + CAIL ZR,10000-40 + JRST [ AOS CSMATD + PUSHJ P,HOCMMV + JRST STIRE4] + MOVE Q,R + SUB Q,CHXIMB + JUMPE Q,CHFDV0 ;NEITHER BETTER NOR WORSE, NO FEEDOVER + JUMPN I,CHFDV1 + JUMPE T1,[ JUMPL Q,STMT2 ;THOUGHT MIGHT BE WORSE FOR STM AND WAS, SO FEEDOVER + JRST CHFDV0] ;TURNS OUT IT ISNT, SO DONT... + JUMPG Q,STMT2 ;THOUGHT MIGHT BE BETTER AND IS, SO FEEDOVER + JRST CHFDV0 ;TURNS OUT IT ISNT, SO DONT... + +CHFDV1: JUMPE T1,[ JUMPG Q,STMT2 + JRST CHFDV0] + JUMPL Q,STMT2 + JRST CHFDV0 +] + + +;DROP IN IN CHEOPS=0 MODE. +STMT2: SKIPE FDCTSW + JRST STMT5 ;IN FEEDOVER CUTOFF MODE +STMT6: SOS MCFB ;FEEDOVER (ENTER HERE IF CHEOPS SAYS WORSE FOR STM) + SETOM SFB ;SET IN A FEEDOVER FLAG + AOS NFD + MOVE P,LGLMST + MOVE T,[-LLMGPL,,LMGPDL-1] + MOVE T1,LMGD2 + SUB T1,HK1V + MOVEM T1,PMGLVL + JRST STATE2 + +STMT5: SETOM HSADR +; PUSH P,A +; PUSH P,T +; PUSH P,T2 +; PUSHJ P,STVL4 +; POP P,T2 +; POP P,T +; POP P,A + MOVE R,PCSATS + XCT STMT5T(I) + JRST STATE7 ;ALREADY HAVE A BETTER LINE ELSEWHERE EVEN IF THIS GETS NO WORSE + MOVEM R,FDCV ;QUIT ON FINDING A LINE AS GOOD AS THIS OR BETTER + JRST STMT6 + +IFN CHEOPS,[ +CHFDV0: AOS NCHNFD ;# FEEDOVERS CHEOPS "STOPPED" + JRST CHFDV2 +] +STATE7: AOS NMFD +CHFDV2: JUMPL T2,STATE9 + JUMPG T2,STATE8 ;EVIDENTLY IMPOSSIBLE ... + JRST STATE5 + +STMT5T: CAMG R,BPREV + CAML R,BPREV+1 + +FDCTSW: 0 ;FEEDOVER CUTOFF SWITCH +FDCV: 0 ;FEEDOVER VERIFICATION VALUE. + + +STV3E: SKIPGE RPIECE(D) + JRST STV3 ;KING FIRST DEF ATTACKED TWICE THEREFORE EN PRISE + PUSHJ P,F2LA + JUMPE T2,STV3 + MOVE S,RPVAL(C) + SUB S,RPVAL(B) ;NET ON FIRST EXCH + ADD S,RPVAL(T1) + SUB S,RPVAL(D) + JUMPL S,STV3 ;AHEAD AFTER SECOND TRADE + MOVE J,@LMGST(I) + CAIN J,2 + JRST STV2 ;NO POSSIBILITY OF RECAPTURE + SUB S,RPVAL(T2) + JUMPGE S,STV2 ;RECAPTURE WOULD NOT RECOUP + +STV3: AOS HPCOP ;D HAS HIS FIRST DEFENDER OR 0 IF NONE + MOVE ZR,PVALUE(B) + CAMLE ZR,HPCOPV + MOVEM ZR,HPCOPV + SKIPGE LMGT(B) ;PIECE IN B CONSIDERED TO BE EN PRISE. + JRST STV3F1 +STV3F2: SKIPE PINT(B) + SETOM SFDF1 ;ALSO PINNED, MAYBE CAUSE FEEDOVER EVENTUALLY + PUSHJ P,TRAPP + SKIPGE TRPF + SETOM SFDF1 ;OR TRAPPED, LIKEWISE. +STV3F: SKIPE T1,BDA1(A) ;CAUSE CAPTURES OF THIS PIECE (BY US) TO BE PLAUSIBLE (MAYBE) + PUSHJ T,STV3A + SKIPE T1,BDA2(A) + PUSHJ T,STV3A + SKIPE T1,BDA3(A) + PUSHJ T,STV3A + JRST STV2 + + +STV3F1: SKIPG PPTP(B) ;DONT WORRY ABOUT PAWN PINNED, ETC, UNLESS WEAK. + JRST STV3F + JRST STV3F2 ;WEAK PAWN + +STV3A: JFFO T1,STV3A1 + POPJ T, + +STV3T: SKIPGE PIECE(TT) + SKIPL PIECE(TT) + +STV3A1: LDB TT,FJTB1(T2) + ANDCM T1,FJTB2(T2) + XCT STV3T(I) + JRST STV3A + SKIPE J,PINT(TT) + JRST STPL1 ;THIS MOVE REALLY LGL? +STPL2: MOVE J,A + SKIPGE LMGT(TT) + SKIPL LMGT(B) + JRST STV3A7 + LDB Q,[BRANK,,BPREL(A)] + CAMN Q,PRANK(TT) + XCT STV3AT(I) ;EP CAPT +STV3A7: MOVE T2,RPVAL(B) + SKIPN @LMGST+1(I) + JRST STV3VK + JUMPE D,STV3VK ;NO EFFECTIVE DEFENDER + SKIPGE RPIECE(TT) + JRST STV3A2 ;K CANT CAP DEF ED THING + SUB T2,RPVAL(TT) + JUMPL T2,STV3A3 + MOVE Q,@LMGST(I) + SOJE Q,STV3A8 + MOVE T2,RPVAL(D) ;MIN P, P+D-A + SUB T2,RPVAL(TT) + ADD T2,RPVAL(B) + CAMLE T2,RPVAL(B) + MOVE T2,RPVAL(B) +STV3A4: CAML T2,RPVAL(TT) +STV3VK: SETOM TRDP(TT) ;PIECE HAS PLAUS CAPT +STV3VF: PUSH P,J + HRLM TT,(P) + PUSH P,T2 +STV3A2: JFFO T1,STV3A1 + POPJ T, + +STPL1: SKIPGE (J) + JRST STPL3 ;PIN TO K + HRRZ J,(J) + JUMPE J,STPL2 + JRST STPL1 + +STPL3: LDB Q,[PINDIR,,1(J)] + MOVE T2,PIECEL(TT) + LDB ZR,STPLT1(Q) + LDB T2,STPLT2(Q) + CAMN T2,ZR + JRST STPL2 ;ALONG LINE OF PIN, OK + JRST STV3A2 ;ILLEGAL + +STPLT1: BRANK,,BPREL(T2) + BRANK,,BPREL(T2) + BFILE,,BPREL(T2) + BFILE,,BPREL(T2) + BPDAG,,BPREL(T2) + BMDAG,,BPREL(T2) + BPDAG,,BPREL(T2) + BMDAG,,BPREL(T2) + +STPLT2: BRANK,,BPREL(A) + BRANK,,BPREL(A) + BFILE,,BPREL(A) + BFILE,,BPREL(A) + BPDAG,,BPREL(A) + BMDAG,,BPREL(A) + BPDAG,,BPREL(A) + BMDAG,,BPREL(A) + +STPLT3: BRANK,,BPREL(S) + BRANK,,BPREL(S) + BFILE,,BPREL(S) + BFILE,,BPREL(S) + BPDAG,,BPREL(S) + BMDAG,,BPREL(S) + BPDAG,,BPREL(S) + BMDAG,,BPREL(S) + +STV3AT: MOVEI J,BW(A) + MOVEI J,-BW(A) + +STV3A3: MOVE ZR,@LMGST(I) + SOJN ZR,STV3A5 ;WE HAVE OTHER ATTACKS +STV3A6: MOVE S,PIECEL(TT) + SKIPN @STLST+1(I) + JRST [ SKIPL LMGT(D) ;IS THIS THE CREATING ISOLATED PAWNS CASE? + JRST STV3A2 ;THIS PIECE NOT ATTACKED + MOVE T2,RPVAL(B) + SUB T2,RPVAL(TT) + CAMGE T2,[-] + JRST STV3A2 + JRST .+1] ;YES, MAYBE CREATING ISO PAWN. + MOVEI T2,0 + JRST STV3VF ;APPARENT UNFAVORABLE TRADE, BUT PIECE ATTACKED SO IT MAY BE BEST + + +STV3A5: MOVE T2,RPVAL(TT) + SUB T2,RPVAL(B) + SUB T2,RPVAL(D) + JUMPG T2,STV3A6 ;PIECE WORTH MORE THAN PIECE TAKEN+1ST DEFENDER + ;THEREFORE DONT CONSIDER UNLESS PIECE ATTACKED + MOVNS T2 + CAMLE T2,RPVAL(B) ;HE CAN RECAPT EXACTLY ONCE IF HE WANTS +STV3A8: MOVE T2,RPVAL(B) + JRST STV3A4 + +STLST: WA(S) + BA(S) + WA(S) + + +STVD: PUSHJ P,CDVLV + SUB S,T1 + MOVEM S,PDVDF ;DEVEL DIF THIS LVL + SKIPN AVGSW + JRST [ MOVM T1,S ;TURN OFF AVERAGING HACK + XCT STDVL2 ;THIS SHIFT GENERALLY ONE LESS THAN STDVLS + SKIPGE S + MOVNS T1 + JRST STVD0] + ADD S,PDVLV ;DEVEL DIF LAST LVL + XCT (I) [ SUB S,CPCDVL ;WHITE TO MOVE NOW, SO A WHITE PC CAPTED. THEREFORE, + ADD S,CPCDVL] ; CURRENT VALUE TOO GOOD FOR WHITE, THEREFORE SUB. + MOVM T1,S + XCT STDVLS ;SHIFT TO ADJUST + SKIPGE S + MOVNS T1 +STVD0: RS DEV VAL,ADD R,T1 + MOVE T1,WTDVL + ADD T1,BTDVL + ASH T1,-14. + XCT STVDI + POPJ P, + +STVI1: RS TOTAL DEVEL FACTOR, ADD R,T1 + RS TOTAL DEVEL FACTOR, SUB R,T1 +STVDI: JFCL ;LOAD AT HACK1 IF SIDE SHOULD KEEP GAME CLOSED + +STACE: HRRZ T1,GAMP +STACE1: CAIN T1,GAME-1 + POPJ P, + CAMN T1,ACTVP + JRST STACR1 + LDB T2,[MPC,,(T1)] + SKIPL (T1) + SKIPGE LMGT(T2) + POPJ P, + SOJA T1,STACE1 + +STACR1: RS ACTIVITY, ADD R,ACTV + POPJ P, + +STCNT: SKIPGE WMID + SKIPL BMID + POPJ P, ;BOTH SIDES MUST HAVE MIDGAME MATL + MOVE C,[-LCSQT,,CSQT] +STCNT1: MOVE A,(C) + SKIPE D,BOARD(A) + SKIPGE SLDPC-PIECE(D) + JRST STCNT2 ;SQUARE VACANT OR OCC BY SLIDING PC + LDB T2,[PTID,,(D)] + CAILE T2,KNID ;P=0, N=1 + JRST STCNT2 + MOVE T1,WCFCT(A) ;WHITE CENTER SQUARE FACTOR TABLE + SKIPGE (D) + MOVE T1,BCFCT(A) ;BLACK CENTER SQUARE FACTOR TABLE + IMUL T1,CPCFCT-PID(T2) + IMUL T1,CNTSW ;KLUDGILY ALLOW IMPORTANCE OF THIS TO BE SET. + RS CENTER OCC *M!D,ADD R,T1 +STCNT2: AOBJN C,STCNT1 + POPJ P, + +CSQT: WKB3 + WK3 + WQ3 + WQ3+1 + WKB3+BW + WK3+BW + WQ3+BW + WQ3+1+BW + WKB3+2*BW + WK3+2*BW + WQ3+2*BW + WQ3+1+2*BW + WKB3+3*BW + WK3+3*BW + WQ3+3*BW + WQ3+1+3*BW +LCSQT==.-CSQT + +CPCFCT: 1 ;CENTRALIZIING FACTOR FOR PAWNS + 4 ;CENTRALIZING FACTOR FOR KNIGHTS + +WCFCT==.-2*BW + REPEAT 2,[ + 0 + BLOCK 8 + 0 +] + 0 + 0 ? 0 ? 1 ? 2 ? 2 ? 1 ? 0 ? 0 ;3RD RANK + 0 ? 0 + 0 ? 0 ? 2 ? 3 ? 3 ? 2 ? 0 ? 0 ;4TH RANK + 0 ? 0 + 0 ? 0 ? 3 ? 4 ? 4 ? 3 ? 0 ? 0 ;5TH RANK + 0 ? 0 + 0 ? 0 ? 3 ? 5 ? 5 ? 3 ? 0 ? 0 ;6TH RANK + 0 + REPEAT 2,[ + 0 + BLOCK 8 + 0 +] +BCFCT==.-2*BW + REPEAT 2,[ + 0 + BLOCK 8 + 0 +] + 0 + 0 ? 0 ? -3 ? -5 ? -5 ? -5 ? 0 ? 0 ;6TH RANK + 0 ? 0 + 0 ? 0 ? -3 ? -4 ? -4 ? -3 ? 0 ? 0 ;5TH RANK + 0 ? 0 + 0 ? 0 ? -2 ? -3 ? -3 ? -2 ? 0 ? 0 ;4TH RANK + 0 ? 0 + 0 ? 0 ? -1 ? -2 ? -2 ? -1 ? 0 ? 0 ;3RD RANK + 0 + REPEAT 2,[ + 0 + BLOCK 8 + 0 +] + +STOKF: MOVE T1,PFILE+WKING-PIECE + MOVEI T2,4 + SKIPN WQNC+1 + JRST [ SKIPN NUMORP+1 + JRST STOKF5 + MOVEI T2,1 + JRST .+1] + CAIG T1,1 + JRST STOKF1 ;-1 FILE OFF BOARD + MOVEI C,0 + SKIPN WPNFLS-1(T1) + ADDI C,2 + SKIPN BPNFLS-1(T1) + ADDI C,1 + MOVE ZR,T2 + IMUL ZR,OKFACT(C) + IMUL ZR,OKFILE + SKIPGE BMID ;OK IF BLACK DOESNT HAVE MID GAME MATL + RS OPEN FILE TO K SIDE OF WK,SUB R,ZR +STOKF1: CAIL T1,8 + JRST STOKF2 + MOVEI C,0 + SKIPN WPNFLS+1(T1) + ADDI C,2 + SKIPN BPNFLS+1(T1) + ADDI C,1 + MOVE ZR,T2 + IMUL ZR,OKFACT(C) + SKIPGE BMID ;OK IF BLACK DOESNT HAVE MID GAME MATL + RS OPEN FILE TO Q SIDE OF WK,SUB R,ZR +STOKF2: MOVEI C,0 + SKIPN WPNFLS(T1) + ADDI C,2 ;AT LEAST HALF OPEN FOR US + SKIPN BPNFLS(T1) + ADDI C,1 ;AT LEAST HALF OPEN FOR HIM + LSH T2,1 ;DOUBLE FOR FILE K IS ON + IMUL T2,OKFACT(C) + IMUL T2,OKFILE + SKIPGE BMID ;OK IF BLACK DOESNT HAVE MID GAME MATL + RS WK ON OPEN FILE,SUB R,T2 +STOKF5: MOVE T1,PFILE+BKING-PIECE + MOVEI T2,4 + SKIPN WQNC + JRST [ SKIPN NUMORP + POPJ P, + MOVEI T2,1 + JRST .+1] + CAIG T1,1 + JRST STOKF6 ;-1 FILE OFF BOARD + MOVEI C,0 + SKIPN BPNFLS-1(T1) + ADDI C,2 + SKIPN WPNFLS-1(T1) + ADDI C,1 + MOVE ZR,T2 + IMUL ZR,OKFACT(C) + IMUL ZR,OKFILE + SKIPGE WMID ;OK IF WHITE DOESNT HAVE MID GAME MATL + RS OPEN FILE TO K SIDE OF BK,ADD R,ZR +STOKF6: CAIL T1,8 + JRST STOKF7 + MOVEI C,0 + SKIPN BPNFLS+1(T1) + ADDI C,2 + SKIPN WPNFLS+1(T1) + ADDI C,1 + MOVE ZR,T2 + IMUL ZR,OKFACT(C) + SKIPGE WMID ;OK IF WHITE DOESNT HAVE MID GAME MATL + RS OPEN FILE TO Q SIDE OF BK,ADD R,ZR +STOKF7: MOVEI C,0 + SKIPN BPNFLS(T1) + ADDI C,2 ;AT LEAST HALF OPEN FOR US + SKIPN WPNFLS(T1) + ADDI C,1 ;AT LEAST HALF OPEN FOR HIM + LSH T2,1 ;DOUBLE FOR FILE K IS ON + IMUL T2,OKFACT(C) + IMUL T2,OKFILE + SKIPGE WMID ;OK IF WHITE DOESNT HAVE MID GAME MATL + RS BK ON OPEN FILE,ADD R,T2 + POPJ P, + +OKFACT: 0 ;FILE CLOSED + 2 ;HALF OPEN FOR HIM + 1 ;HALF OPEN FOR US + 4 ;FILE OPEN + +STKC: MOVE A,PIECEL+WKING-PIECE + SKIPGE BOARD-BW(A) + JRST STWKC1 +STWKR1: SKIPGE BOARD-1(A) + JRST STWKC2 +STWKR2: SKIPGE BOARD+1(A) + JRST STWKC3 +STWKR3: SKIPGE BOARD+BW(A) + JRST STWKC4 +STWKR4: MOVE A,PIECEL+BKING-PIECE + SKIPGE BOARD-BW(A) + JRST STBKC1 +STBKR1: SKIPGE BOARD-1(A) + JRST STBKC2 +STBKR2: SKIPGE BOARD+1(A) + JRST STBKC3 +STBKR3: SKIPGE BOARD+BW(A) + JRST STBKC4 +STBKR4: POPJ P, + +STWKC1: SKIPGE BOARD+BW-1(A) + JRST .+3 + SKIPN BA+BW-1(A) ;AT BOTTOM OF BOARD, FENCED IN? + JRST STWKR1 + SKIPGE BOARD+BW+1(A) + JRST .+3 + SKIPN BA+BW+1(A) + JRST STWKR1 + SKIPE BA+BW(A) + RS W K PINNED TO EDGE,SUB R,KCUT + JRST STWKR1 + +STWKC2: SKIPGE BOARD+BW+1(A) + JRST .+3 + SKIPN BA+BW+1(A) + JRST STWKR2 + SKIPGE BOARD-BW+1(A) + JRST .+3 + SKIPN BA-BW+1(A) + JRST STWKR2 + SKIPE BA+1(A) + RS W K PINNED TO EDGE,SUB R,KCUT + JRST STWKR2 + +STWKC3: SKIPGE BOARD+BW-1(A) + JRST .+3 + SKIPN BA+BW-1(A) + JRST STWKR3 + SKIPGE BOARD-BW-1(A) + JRST .+3 + SKIPN BA-BW-1(A) + JRST STWKR3 + SKIPE BA-1(A) + RS W K PINNED TO EDGE,SUB R,KCUT + JRST STWKR3 + +STWKC4: SKIPGE BOARD-BW+1(A) + JRST .+3 + SKIPN BA-BW+1(A) + JRST STWKR4 + SKIPGE BOARD-BW-1(A) + JRST .+3 + SKIPN BA-BW-1(A) + JRST STWKR4 + SKIPE BA-BW(A) + RS W K PINNED TO EDGE,SUB R,KCUT + JRST STWKR4 + +STBKC1: SKIPGE BOARD+BW-1(A) + JRST .+3 + SKIPN WA+BW-1(A) ;AT BOTTOM OF BOARD, FENCED IN? + JRST STBKR1 + SKIPGE BOARD+BW+1(A) + JRST .+3 + SKIPN WA+BW+1(A) + JRST STBKR1 + SKIPE WA+BW(A) + RS B K PINNED TO EDGE,ADD R,KCUT + JRST STBKR1 + +STBKC2: SKIPGE BOARD+BW+1(A) + JRST .+3 + SKIPN WA+BW+1(A) + JRST STBKR2 + SKIPGE BOARD-BW+1(A) + JRST .+3 + SKIPN WA-BW+1(A) + JRST STBKR2 + SKIPE WA+1(A) + RS B K PINNED TO EDGE,ADD R,KCUT + JRST STBKR2 + +STBKC3: SKIPGE BOARD+BW-1(A) + JRST .+3 + SKIPN WA+BW-1(A) + JRST STBKR3 + SKIPGE BOARD-BW-1(A) + JRST .+3 + SKIPN WA-BW-1(A) + JRST STBKR3 + SKIPE WA-1(A) + RS B K PINNED TO EDGE,ADD R,KCUT + JRST STBKR3 + +STBKC4: SKIPGE BOARD-BW+1(A) + JRST .+3 + SKIPN WA-BW+1(A) + JRST STBKR4 + SKIPGE BOARD-BW-1(A) + JRST .+3 + SKIPN WA-BW-1(A) + JRST STBKR4 + SKIPE WA-BW(A) + RS B K PINNED TO EDGE,ADD R,KCUT + JRST STBKR4 + +STWSP: SKIPN C,PCPINS + POPJ P, +STWSP1: LDB A,[PINOPS,,1(C)] + MOVE D,BOARD(A) + SKIPGE (D) + JRST STWSP2 ;PIN ON BLACK + SKIPLE T1,BOARD-BW-1(A) + SKIPL LMGSTD-PIECE(T1) + JRST .+2 + JRST STWSP3 ;OK DEFENDED BY OUR P + SKIPLE T1,BOARD-BW+1(A) + SKIPL LMGSTD-PIECE(T1) + RS *M!D PINNED AND NOT DEF BY PAWN, SUB R,PINWSQ +STWSP3: SKIPE C,(C) + JRST STWSP1 + POPJ P, + +STWSP2: SKIPLE T1,BOARD+BW-1(A) + SKIPL SNFBP-PIECE(T1) + JRST .+2 + JRST STWSP3 + SKIPLE T1,BOARD+BW+1(A) + SKIPL SNFBP-PIECE(T1) + RS *M!D PINNED AND NOT DEF BY PAWN, ADD R,PINWSQ + JRST STWSP3 + +;ROOK POSITION TERM. CREDIT ROOK PENETRATION AND # OPPOSING PCS ON SAME RANK +STRKP: SKIPN A,WKR+PIECEL-PIECE + JRST STRKP1 + MOVE C,WKR+RPRANK-PIECE + RS WKR RANK,ADD R,RRNKV(C) + PUSHJ P,STRKRW ;CREDIT FOR OPPOSING PCS ON SAME RANK +STRKP1: SKIPN A,WQR+PIECEL-PIECE + JRST STRKP2 + MOVE C,WQR+RPRANK-PIECE + RS WQR RANK,ADD R,RRNKV(C) + PUSHJ P,STRKRW +STRKP2: SKIPN A,BKR+PIECEL-PIECE + JRST STRKP3 + MOVE C,BKR+RPRANK-PIECE + RS BKR RANK,SUB R,RRNKV(C) + PUSHJ P,STRKRB +STRKP3: SKIPN A,BQR+PIECEL-PIECE + JRST STRKP4 + MOVE C,BQR+RPRANK-PIECE + RS BQR RANK,SUB R,RRNKV(C) + PUSHJ P,STRKRB +STRKP4: POPJ P, + +STRKRW: MOVEI T1,0 ;COUNT HIS PCS ON RANK WITH R ON SQUARE IN A. + PUSH P,A +STKRW1: SKIPGE D,BOARD-1(A) + JRST STKRW2 + JUMPE D,STKRW5 + SKIPGE (D) + AOS T1 +STKRW5: SOJA A,STKRW1 +STKRW2: POP P,A +STKRW4: SKIPGE D,BOARD+1(A) + JRST STKRW3 + JUMPE D,STKRW6 + SKIPGE (D) + AOS T1 +STKRW6: AOJA A,STKRW4 +STKRW3: IMUL T1,RKPOS + RS HIS PCS ON RANK WITH R,ADD R,T1 + POPJ P, + +STRKRB: MOVEI T1,0 ;COUNT HIS PCS ON RANK WITH R ON SQUARE IN A. + PUSH P,A +STKRB1: SKIPGE D,BOARD-1(A) + JRST STKRB2 + JUMPE D,STKRB5 + SKIPL (D) + AOS T1 +STKRB5: SOJA A,STKRB1 +STKRB2: POP P,A +STKRB4: SKIPGE D,BOARD+1(A) + JRST STKRB3 + JUMPE D,STKRB6 + SKIPL (D) + AOS T1 +STKRB6: AOJA A,STKRB4 +STKRB3: IMUL T1,RKPOS + RS HIS PCS ON RANK WITH R,SUB R,T1 + POPJ P, + +RRNKV: 0 ;ROOK PENETRATION, VALUE FOR ROOK AS FCTN OF RANK + 0 ;1ST + 0 ;2ND + 1 ;3RD + 2 ;4TH + 3 ;5TH + 4 ;6TH + 5 ;7TH + 6 ;8TH + +CDVLV: SKIPN ICSW + JRST .CDVLV + MOVE S,WTDVL + MOVE T1,BTDVL + POPJ P, + +.CDVLV: MOVE B,[-NPCS,,1] + CLEARB T1,S +STVD1: SKIPN A,PIECEL(B) + JRST STVD2 + MOVE T2,PDV(B) + IMUL T2,PINVF(B) + ADD S,T2 +STVD2: AOBJN B,STVD1 + HRLI B,-NPCS +STVD3: SKIPN A,PIECEL(B) + JRST STVD4 + MOVE T2,PDV(B) + IMUL T2,PINVF(B) + ADD T1,T2 +STVD4: AOBJN B,STVD3 + MOVE B,NMKING + SKIPGE BMID + ADD S,STVDT1(B) + MOVE B,NMKING+1 + SKIPGE WMID + ADD T1,STVDT1(B) + MOVEM S,WTDVL + MOVEM T1,BTDVL + POPJ P, + +ACTV: 0 ;IF NE 0 DELTA TO BE ADDED IF NO P MOVE OR CAPT +ACTVP: 0 ;PNTR TO GAMP AT TOP LEVEL + +WTDVL: 0 ;TOTAL WHITE DEVEL +BTDVL: 0 ;TOTAL BLACK DEVEL + +PDVLV: 0 ;DEVELOPMENT VALUE AT PREV LEVEL +STDVLS: ASH T1,-6 ;AMT TO SHIFT SUM OF THIS + PREV DIF BEFORE ADDING TO POS VAL +STDVL2: ASH T1,-5 ;AMT TO SHIFT DEVEL VAL BEFORE ADDING TO POS VAL (IF AVGSW OFF) +STDVL1: ASH T1,-4 ;DEVEL VALUE SCALING SHIFT USED IN PMG +PDVDF: 0 ;DIFFERENCE CURRENT POSITION +CPCDVL: 0 ;PDV OF PIECE CAPTURED LAST MOVE IF ANY (COMPENSATE PDVLV) + + +STVDT1: 0 ;DEVELOPMENT VALUES FOR CASTLING + 750. ;O-O + 600. ;O-O-O + +CDVPNR: WTDVL ;DEVEL (SIDE) + BTDVL + + +ATPCG: SETOM TPCFL ;TYPE PLAUSIBLE CAPTS + LDB I,[100,,PLYN] + MOVEM P,LGLMST + MOVE T,[-LLMGPL,,LMGPDL-1] + JRST STATE1 + +ATPCG1: +ATPCG5: + MOVE B,TRPSW + HRRZ R,LGLMST +ATPCG4: CAIL R,-STWPM+1(P) + JRST ATPCG3 + HLRZ A,1(R) + PUSHJ P,PCOUT + MOVEI A,"- + PUSHJ P,(B) + HRRZ A,1(R) + PUSHJ P,SQOUT + PUSHJ P,DSPACE + MOVE A,2(R) + PUSHJ P,DPT + PUSHJ P,DCRR + ADDI R,STWPM + JRST ATPCG4 + +ATPCG3: CLEARM TPCFL + JRST MNLP + +TPCFL: 0 ;TOTALLY KLUDGEY TRACE PCG FLAG + +ATPCC: MOVEI B,TYO +ATPC1: MOVE C,[-NPC,,1] +ATPC3: SKIPN T1,PIECEL(C) + JRST ATPC2 + MOVE T2,PDV(C) + MOVE TT,T2 + IMUL TT,PINVF(C) + ISOUT [.ASCII ?*P!C AT *S!T1 *U!T2 TOTAL *U!TT?] +ATPC2: AOBJN C,ATPC3 + POPJ P, + +NSBVS: 1 ;BCS +PCGPWN: 1 + +DEFINE SQVRK A,B,C,D + 0 + A + B + C + D + D + C + B + A + 0 +TERMIN + +CSQVL=.-2*BW + SQVRK 2,3,4,4 + SQVRK 3,6,8,8 + SQVRK 4,8,12.,12. + SQVRK 4,8,12.,14. + SQVRK 4,8,12.,14. + SQVRK 4,8,12.,12. + SQVRK 3,6,8,8 + SQVRK 2,3,4,4 + + +PP PINVF:, +REPEAT 2,[ + REPEAT 8, 6*2 + 2*2 + 3*2 + 3*2 + 1*2 + 1*2 + 3*2 + 3*2 + 2*2 +] + +;1 FOR W'S FOURTH RANK -1 FOR BLACKS +4RNKP==.-2*BW + REPEAT 3*BW,0 + REPEAT BW,1 + REPEAT BW,-1 + REPEAT 3*BW,0 + +ATEV: CLEARM WAV ;FILL WAV BAV + MOVE A,[WAV,,WAV+1] + BLT A,BAV+BD2-1 + MOVSI T1,-8 + MOVE T2,[-8,,2*BW+1] +ATEV1: MOVE A,CSQVL(T2) + LSH A,1 + ADDI A,1(T1) + MOVEM A,WAV(T2) + MOVE A,CSQVL(T2) + LSH A,1 + MOVEI S,-8(T1) + SUB A,S + HRRZM A,BAV(T2) + AOBJN T2,ATEV1 + ADD T2,[-8,,2] + AOBJN T1,ATEV1 + MOVE T2,PIECEL+BKING-PIECE + MOVE T1,NKSI + MOVE S,PIECEL+WKING-PIECE +IRP A,,[1,-1,BW,-BW,BW+1,BW-1,-BW+1,-BW-1,0] + SKIPL BOARD+A(T2) + ADDM T1,WAV+A(T2) + SKIPL BOARD+A(S) + ADDM T1,BAV+A(S) +TERMIN + POPJ P, + +NKSI: 10. ;EXTRA FOR NEAR KING + + + +;ARRAYS OF VALUES FOR PAWN STRUCTURE STATEV + +MULTP: 0 ;0 PAWNS IN FILE + 0 ;1 PWN. + 10 ;... + 40 + 140 + 240 + 340 + +;ISOLATED PAWN BUGGER VALUES + ;BASE VALUES, NON OPEN FILE, NO SPECIAL FACTORS + IP1==20/4 ;REGULAR ISOLATED + IP2==100/4 ;DOUBLED AND ISOLATED, APPLIED ONCE PER FILE + IP3==300/4 ;TRIPLED, ETC + +;NEAR K IN MIDDLE GAME FACTOR +DEFINE IPNKF +3/2!TERMIN + +;OPEN FILE FACTOR +DEFINE IPOFF +2!TERMIN + +;BOTH OPEN FILE AND NEAR K IN MIDDLE GAME +DEFINE IPNKOF +3!TERMIN + +;OPEN FILE, OTHER SIDE HAVING NO RFPCS +DEFINE IPONR +5/4!TERMIN + +IMULTP: 0 ;ISOLATED NON OPEN FILE PWNS IN FILE + IP1 ? IP2 ? IP3 ? IP3 ? IP3 ? IP3 + +KIMLTP: 0 ;ISOLATED NON OPEN FILE PWNS IN FILE NEAR K IN MIDDLE GAME + IP1*IPNKF ? IP2*IPNKF ? IP3*IPNKF ? IP3*IPNKF ? IP3*IPNKF ? IP3*IPNKF + +OIMULT: 0 ;OPEN FILE ISOLATED PWNS + IP1*IPOFF ? IP2*IPOFF ? IP3*IPOFF ? IP3*IPOFF ? IP3*IPOFF ? IP3*IPOFF + +KOIMLT: 0 ;OPEN FILE ISOLATED PWNS NEAR K IN MIDDLE GAME + IP1*IPNKOF ? IP2*IPNKOF ? IP3*IPNKOF ? IP3*IPNKOF ? IP3*IPNKOF ? IP3*IPNKOF + +OIMULV: 0 ;OPEN FILE ISO PWNS OTHER SIDE HAVING NO RFPCS + IP1*IPONR ? IP2*IPONR ? IP3*IPONR ? IP3*IPONR ? IP3*IPONR ? IP3*IPONR + +IFILEW: 0 ;WEIGHTING OF ISOLATED PAWNS AS FUNCTION OF FILE + 2 + 2 + 3 + 4 + 4 + 3 + 2 + 2 + 0 + +;VALUE OF FORWARD/BACKWARD PAWN NOT ON OPEN FILE AS FCTN OF MOBILITY +BACKV: 14/4 ;FREE + 20/4 ;OUR PC + 24/4 ;OUR PAWN + 40/4 ;HIS PC + 4/4 ;HIS PAWN + +;VALUE OF FORWARD/BACKWARD PAWN ON OPEN FILE AS FCTN OF MOBILITY +OBACKV: 34/4 ;FREE + 40/4 ;OUR PC + 44/4 ;OUR PAWN + 60/4 ;HIS PC + 0/4 ;HIS PAWN (IMPOSSIBLE) + +;PASSED P VALUES AS FUNCTION OF PAWN MOBILITY AND RANK IN T1 +PPVM: PASPV(T1) ;SQUARE AHEAD CLEAR + PASPV(T1) ;BLOCKED BY OUR PC (SLIGHTLY LESS MOBILE) + PASPV(T1) ;BLOCKED BY OUR PAWN ??? SHOULD BE IMPOSSIBLE + PASPV1(T1) ;BLOCKED BY HIS PC (BLOCKADED) + PASPV1(T1) ;BLOCKED BY HIS PAWN ??? SHOULD BE IMPOSSIBLE + +;PASSED PAWN VALUES (FOR MOBILE PAWNS) +PASPV: 0 ;PP ON RANK 0? + 0 + 10 ;PP ON RANK 2 + 14 ;... + 30 + 64 + 160 ;... + 400 ;PP ON RANK 7 + 1000 ;8TH (CAN BE REF'ED AT STVQL4) + +;IF PAWN BLOCKADED BY HIS PIECE +PASPV1: 0 ;PP ON RANK 0? + 0 + 10/2 ;PP ON RANK 2 + 14/2 ;... + 30/2 + 64/2 + 160/2 ;... + 400/2 ;PP ON RANK 7 + 1000/2 ;8TH (CAN BE REF'ED AT STVQL4) + +;VALUE OF MOBILE DUO AS FUNCTION OF RANK +HDOVAL: 0 ;RANK 0? + 0 ;1 + 0 ;2 + 0 ;3 + 4 ;4 + 20 ;5 + 200 ;6 (THEY ARE REALLY CONNECTED PASSED PAWNS) + 400 ;7 + 400 ;8? + +BPREL: REPEAT 2*BW,0 + REPEAT 8,[ + ZZ==.RPCNT + 0 + REPEAT 8,[ + ZFILE==.RPCNT+1 + ZRANK==ZZ+1 + ZPDAG==ZRANK+ZFILE + ZMDAG==ZRANK+9-ZFILE + ZFILE_9+ZRANK,,ZPDAG_9+ZMDAG +] + 0 +] + REPEAT 2*BW,0 + +;SYMBOLIC BYTE POINTERS INTO BPREL +BFILE=331100 +BRANK=221100 +BPDAG=111100 +BMDAG=1100 +BCOLR==110100 + +LSPCL=100. +;LIST STRUCTURE SPACE FOR RECORDING PRINCPLE VARIATIONS +;1ST WD LINK +;4.9 MOVE GEN BY STATIC BD EV 4.8,4.7- BMTHR,BIDSF +PUSNM==220600 ;NTH MOVE INVESTIGATED AT THIS LVL +;2 ND WD STANDARD MOVE + +LSPC: REPEAT LSPCL,[ .+2 + 0 +] + 0 + 0 + +LFS: LSPC + + + +ICCST: SETZ WA ;PNTRS TO ARRAYS STORED/CHECKED 4.9 BOARD SIZE 4.8 NOT PIECE 4.7 FILE ORIENTED + SETZ BA ;4.6 SINGLE WORD + SETZ BDA1 + SETZ BDA2 + SETZ BDA3 + SETZ BDBLK + SETZ ONEB1 + SETZ ONEB2 + SETZ WAV + SETZ BAV + PPASED + PPTP + 100000,,PDV + 200000,,WPNFLS + 200000,,BPNFLS + 200000,,WNPNFL + 200000,,BNPNFL + 40000,,NWPPP + 40000,,NBPPP + 40000,,HSKEY + 40000,,WTDVL + 40000,,BTDVL + +LICCST==.-ICCST +NPCAR==3 ;NUMBER PIECE SIZE +NBDAR==10. ;NUMBER BOARD SIZE +NFLAR==4 ;NUMBER FILE ORIENTED +NWDAR==5 ;NUMBER WORD ORIENTED + +ICEDT: ISOUT [.ASCII ?WA DFRS *S!A (#=*H!A) CPY *O!Q ARY *O!D?] + ISOUT [.ASCII ?BA DFRS *S!A (#=*H!A) CPY *O!Q ARY *O!D?] + JRST CBDA1D + JRST CBDA2D + JRST CBDA3D + JRST CBDBKD + JRST CONB1D + JRST CONB2D + ISOUT [.ASCII ?WAV DFRS *S!A (=*H!A) CPY *O!Q ARY *O!D?] + ISOUT [.ASCII ?BAV DFRS *S!A (=*H!A) CPY *O!Q ARY *O!D?] + ISOUT [.ASCII ?PPASED DFRS *P!A (#=*H!A) CPY *O!Q, ARY *O!D?] + ISOUT [.ASCII ?PPTP DFRS *P!A (#=*H!A) CPY *O!Q ARY *O!D?] + ISOUT [.ASCII ?PDV DFRS *P!A (=*H!A) CPY *O!Q ARY *O!D?] + ISOUT [.ASCII ?WPNFLS DFRS *F!A ARY *O!D, CPY *O!Q?] + ISOUT [.ASCII ?BPNFLS DFRS *F!A ARY *O!D, CPY *O!Q?] + ISOUT [.ASCII ?WNPNFL DFRS *F!A ARY *O!D, CPY *O!Q?] + ISOUT [.ASCII ?BNPNFL DFRS *F!A ARY *O!D, CPY *O!Q?] + ISOUT [.ASCII ?NWPPP DFRS *O!D, CPY *O!Q?] + ISOUT [.ASCII ?NBPPP DFRS *O!D, CPY *O!Q?] + ISOUT [.ASCII ?HSKEY DFRS *O!D, CPY *O!Q?] + ISOUT [.ASCII ?WTDVL DFRS *O!D, CPY *O!Q?] + ISOUT [.ASCII ?BTDVL DFRS *O!D, CPY *O!Q?] + +IFN .-ICEDT-LICCST,.ERR ICEDT LOSES + +BDINI: SETZM PLYN ;INITIALIZE BOARD, PIECEL, PCBAL, PLYN, GAMP, AND ALL CAT ARRAYS + MOVEI A,GAME-1 + MOVEM A,GAMP + MOVEI A,TPCS + MOVEM A,PCBAL + MOVEM A,PCBAL+1 + MOVEI A,TPNS + MOVEM A,PNBAL + MOVEM A,PNBAL+1 + SETZM NMOVES+1 + MOVE A,[NMOVES+1,,NMOVES+1+1] + BLT A,NMOVES+NPC-1+1 + MOVE A,[OPIECE+NPC,,OPIECE] + BLT A,OPIECE+NPC-1 + MOVSI C,-8 + MOVEI B,OPIECE + MOVEM B,BOARD+3*BW+1(C) + AOS B + AOBJN C,.-2 + MOVSI C,-8 + MOVEM B,BOARD+2*BW+1(C) + AOS B + AOBJN C,.-2 + MOVSI C,-8 + MOVEM B,BOARD+8*BW+1(C) + AOS B + AOBJN C,.-2 + MOVSI C,-8 + MOVEM B,BOARD+9*BW+1(C) + AOS B + AOBJN C,.-2 + MOVSI T1,-4 +BDINI1: MOVSI C,-8 + SETZM BOARD+4*BW+1(T1) + AOS T1 + AOBJN C,.-2 + AOS T1 + AOBJN T1,BDINI1 + SETZM PIECEL+1 + MOVE A,[PIECEL+1,,PIECEL+1+1] + BLT A,PIECEL+NPC-1+1 + MOVSI T1,-BD2 +BDIN3: SKIPG B,BOARD(T1) + JRST BDIN2 + HRRZM T1,PIECEL-PIECE(B) + LDB T2,[BFILE,,BPREL(T1)] + MOVEM T2,PFILE-PIECE(B) + LDB T2,[BRANK,,BPREL(T1)] + MOVEM T2,PRANK-PIECE(B) + SKIPGE (B) + MOVE T2,REVERS(T2) + MOVEM T2,RPRANK-PIECE(B) +BDIN2: AOBJN T1,BDIN3 + PUSHJ P,ATEV ;SET UP WAV BAV + CLEARM POSRDI + JRST .CAT1 + +ATEVE: AOS ATEVEC + MOVEI C,DFPCT + MOVEI D,ATPCT + SKIPE T1,BDA1(A) + JSP TT,AT1 +FATBS: SKIPE T1,BDA2(A) + JSP TT,AT1 + SKIPE T1,BDA3(A) + JSP TT,AT1 + MOVEM C,DFPCP + MOVEM D,ATPCP + POPJ P, + +BATSVB: ;BEGINNING SAVE BLOCK FOR ATEVE +ATPCP: 0 ;POINTER TO ATTACK PIECES TABLE DOES NOT POINT TO ACTIVE ENTRY IN STEADY STATE +DFPCP: 0 ;DEFENDING PIECES +NATKS: 0 ;NUMBER ATTACKS - 1 +SPCLST==10. ;SIZE OF LISTING TABLES + BLOCK SPCLST +ATPCT=.-1 + BLOCK SPCLST +DFPCT=.-1 +EATSVB: ;END SAVE BLOCK +ATSVBB: BLOCK EATSVB-BATSVB ;PLACE TO STORE ATPCP, ETC IF WANT TO ATEVE + ; AND PRESERVE CONTENTS + +AJ1: LDB S,FJTB1(T2) + ANDCM T1,FJTB2(T2) + XCT RMOY3(I) + JRST AT1C ;ATTACKS + CAIE C,DFPCT + JRST AT1D + MOVEM S,(C) + SOJA C,AT1B1 ;ONLY ONE + +AT1D: MOVE ZR,PVALUE(S) + MOVE Q,1(C) + CAMLE ZR,PVALUE(Q) + JRST AT1E + MOVEM S,(C) + SOJA C,AT1B1 ;LESS THAN LEAST SO FAR + +AT1E: MOVE J,C +AT1G: CAIN J,DFPCT-1 ;INSERT IN LIST AFTER ITEM POINTED TO IN J + JRST AT1F + MOVE Q,2(J) + CAMLE ZR,PVALUE(Q) ;SKIP ON GOES BEFORE THIS ONE + AOJA J,AT1G +AT1F: HRRZ ZR,C + HRLI ZR,1(C) + BLT ZR,(J) + MOVEM S,1(J) + SOJA C,AT1B3 + +AT1B1: SKIPL LMGT(S) + SKIPGE SLDPC(S) + JRST AT1B2 +AT1B: CAILE C,DFPCT-SPCLST + CAIG D,ATPCT-SPCLST + ERRTTY [ASCIZ /LOSSAGE AT ATEVL/] +AT1BL: +AT1: JFFO T1,AJ1 + JRST (TT) + +AT1B2: MOVE J,C +AT1B4: MOVE S,PIECEL(S) ;SLIDING PIECE OR P MAY DOUBLE WITH SOMETHING + MOVE Q,@FATTB1-FATBS(TT) + LDB S,RDATSS(Q) ;J POINTS TO MAIN GUY INSERTED (IE C(1(J)) IS ITS PIECE # + JUMPE S,AT1B + SKIPGE SLDPC(S) ;SKIP ON NOT SLIDING + XCT RMOY3(I) ;SKIP ON OUR GUY + JRST AT1B + MOVE ZR,PVALUE(S) ;UNBLOCKING OUR PIECE + TLO S,400000 + CAILE C,DFPCT-SPCLST + JRST AT1G ;IF COME AROUND AGAIN, KNOWN TO BE SLIDING, NOT P + ERRTTY [ASCIZ /LOOP DEFS AT ATEVL/] + +AT1B3: SKIPL LMGT(S) + SKIPGE SLDPC(S) + SOJA J,AT1B4 + JRST AT1B + +AT1C: CAIE D,ATPCT + JRST AT2D + MOVEM S,(D) + SOJA D,AT1B7 + +AT2D: MOVE ZR,PVALUE(S) + MOVE Q,1(D) + CAMLE ZR,PVALUE(Q) + JRST AT2E + MOVEM S,(D) + SOJA D,AT1B7 + +AT2E: MOVE J,D +AT2G: CAIN J,ATPCT-1 + JRST AT2F + MOVE Q,2(J) + CAMLE ZR,PVALUE(Q) + AOJA J,AT2G +AT2F: HRRZ ZR,D + HRLI ZR,1(D) + BLT ZR,(J) + MOVEM S,1(J) + SOJA D,AT1B5 + +AT1B5: SKIPL LMGT(S) + SKIPGE SLDPC(S) + SOJA J,AT1B6 + JRST AT1B + +AT1B7: SKIPGE LMGT(S) + JRST AT1B8 + SKIPL SLDPC(S) + JRST AT1B +AT1B8: MOVE J,D +AT1B6: MOVE Q,@FATTB1-FATBS(TT) + TRNE Q,30 + JRST AT1B ;MUST BE EP (NOT RANK OR FILE AND BY P) + MOVE S,PIECEL(S) + LDB S,RDATSS(Q) + JUMPE S,AT1B + SKIPGE SLDPC(S) + XCT RMOY3+1(I) + JRST AT1B + MOVE ZR,PVALUE(S) + TLO S,400000 + CAILE D,ATPCT-SPCLST + JRST AT2G + ERRTTY [ASCIZ /LOOP ATS AT ATEVL/] + +FATTB1: FJTB4(T2) + 0 + FJTB5(T2) + 0 + FJTB6(T2) + +APINS: 0 +DPINS: 0 + +IRPS ACNAM,,Q S J T2 TT +FSA!ACNAM: 0 +TERMIN + +;PIECES OF SIDE TO MOVE "DEFEND" +;PIECES OF OTHER SIDE "ATTACK" + +PFLATA: SETOM DPINS ;PINED PIECES DONT DEFEND +AFLAT1: SETOM APINS ;DONT ATTACK + JRST MFLATA + +AFLATA: CLEARM DPINS ;PINNED PIECES DEFEND + JRST AFLAT1 + +DFLATA: SETOM DPINS ;PINNED PIECES ATTACK + JRST DFLAT1 + +FLATA: CLEARM DPINS ;PINNED PIECES DEFEND +DFLAT1: CLEARM APINS ;PINNED PIECES ATTACK +MFLATA: IRPS A,,Q S J T2 TT + MOVEM A,FSA!A +TERMIN + CLEARB C,D ;SQUARE IN A DO NOT RETURN PIECE IN B + SKIPE T1,BDA1(A) ;RET FIRST DEFENDER (SAME AS I) IN C + JSP TT,FLATA2 ;ATTACKER (DIF SIDE FROM I) IN D +FLTBS: SKIPE T1,BDA2(A) ;IF PIECE PINNED BY PC IN B, IGNORE PIN + JSP TT,FLATA2 + SKIPE T1,BDA3(A) + JSP TT,FLATA2 + IRPS A,,Q S J T2 TT + MOVE A,FSA!A +TERMIN + POPJ P, + + +FLATA2: JFFO T1,FJ1 + JRST (TT) + +FJ1: LDB J,FJTB1(T2) + ANDCM T1,FJTB2(T2) + CAIN J,(B) + JRST FLATAB +FLATAC: XCT FAT2(I) + JRST FLATA4 ;HIS GUY + SKIPGE DPINS + SKIPN S,PINT(J) +FLTP2: SKIPA S,PVALUE(C) + JRST FLTP1 + JUMPE C,FLATA5 + CAMLE S,PVALUE(J) +FLATA5: MOVE C,J + JFFO T1,FJ1 + JRST (TT) + +FLTP1: HRRZ ZR,(S) + JUMPN ZR,FLATA2 ;MULTIPLY PINNED + LDB ZR,[PINATP,,1(S)] + CAIE ZR,(B) + JRST FLATA2 ;HONOR PIN + LDB ZR,[BPDPB,,1(S)] + JUMPE ZR,FLTP2 ;IGNORE PIN + JRST FLATA2 ;DONT IGNORE DOUBLE PIN + +FLTP3: HRRZ ZR,(S) + JUMPN ZR,FLATA2 ;MULTIPLY PINNED + LDB ZR,[PINATP,,1(S)] + CAIE ZR,(B) + JRST FLATA2 + LDB ZR,[BPDPB,,1(S)] + JUMPE ZR,FLTP4 + JRST FLATA2 + +FLTP5: PUSH P,S + MOVE S,PINT(J) + HRRZ ZR,(S) + JUMPN ZR,POPSJ ;MULTIPLY PINNED + LDB ZR,[BPDPB,,1(S)] + JUMPN ZR,POPSJ ;DONT IGNORE PIN BY MULTIPLE PIECES + LDB ZR,[PINATP,,1(S)] + CAIN ZR,(B) + JRST FLTP6R + +POPSJ: POP P,S + POPJ P, + +FLTP6R: POP P,S + JRST FLTP6 + +FLTP7: PUSH P,S + MOVE S,PINT(J) + HRRZ ZR,(S) + JUMPN ZR,POPSJ ;MULTIPLY PINNED + LDB ZR,[BPDPB,,1(S)] + JUMPN ZR,POPSJ + LDB ZR,[PINATP,,1(S)] + CAIN ZR,(B) + JRST FLTP8R + POP P,S + POPJ P, + +FLTP8R: POP P,S + JRST FLTP8 + + +FLATA4: SKIPGE APINS + SKIPN S,PINT(J) +FLTP4: SKIPA S,PVALUE(D) + JRST FLTP3 + JUMPE D,FLATAA + CAMLE S,PVALUE(J) +FLATAA: MOVE D,J + JFFO T1,FJ1 + JRST (TT) + +FLATAB: MOVE Q,@FJTB3-FLTBS(TT) ;IGNORE THAT GUY, GOBBLE GUY BEHIND HIM? + CAILE Q,7 + JRST FLATA2 + MOVE J,PIECEL(J) + LDB J,F2LAT(Q) + JUMPE J,FLATA2 + SKIPGE SLDPC(J) + JRST FLATAC + JRST FLATA2 + + +ZQY==360600,,T1 +FJTB1: REPEAT 6,[ + REPEAT 6,ZQY + ZQY==ZQY-<60000,,0> +] +ZQY==770000,, +FJTB2: REPEAT 6,[ + REPEAT 6,ZQY + ZQY==ZQY_-6 +] +FJTB3: FJTB4(T2) + 0 + FJTB5(T2) + 0 + [69] + + ZQY==0 +FJTB4: REPEAT 6,[ + REPEAT 6,ZQY + ZQY==ZQY+1 +] + + ZQY==6 +FJTB5: REPEAT 6,[ + REPEAT 6,ZQY + ZQY==ZQY+1 +] +ZQY==12. +FJTB6: REPEAT 6,[ + REPEAT 6,ZQY + ZQY==ZQY+1 +] + +F2LA: PUSH P,Q + PUSH P,S + PUSH P,J + CLEARB T1,T2 ;FIND 2ND ATTACK ON SQUARE IN A + SKIPN S,BDA1(A) ;RESULT OF FLATA IN C,D + JRST F2LA1 ;RETURN RESULT IN T1,T2 + MOVEI Q,6 +F2LA3: SOS Q + TRNE S,77 + PUSHJ P,F2LA2 + LSH S,-6 + JUMPN S,F2LA3 +F2LA1: SKIPN S,BDA2(A) + JRST F2LA8 + MOVEI Q,12. +F2LA7: SOS Q + TRNE S,77 + PUSHJ P,F2LA2 + LSH S,-6 + JUMPN S,F2LA7 +F2LA8: SKIPN S,BDA3(A) + JRST F2R + MOVEI Q,69 +F2LA9: TRNE S,77 + PUSHJ P,F2LA2 + LSH S,-6 + JUMPN S,F2LA9 +F2R: POP P,J + POP P,S + POP P,Q + POPJ P, + + +F2LA2: LDB J,[600,,S] + CAIN J,(B) + JRST F2LA2A + +F2LA4B: XCT FAT2(I) + JRST F2LA4 + CAMN J,C + JRST F2LA4A + SKIPGE DPINS + SKIPN PINT(J) + JRST .+2 + JRST FLTP5 +FLTP6: JUMPE T1,F2LA5 + MOVE ZR,PVALUE(T1) + CAMLE ZR,PVALUE(J) +F2LA5: MOVE T1,J + POPJ P, + +F2LA4: CAMN J,D + JRST F2LA4A + SKIPGE APINS + SKIPN PINT(J) + JRST .+2 + JRST FLTP7 +FLTP8: JUMPE T2,F2LA4C + MOVE ZR,PVALUE(T2) + CAMLE ZR,PVALUE(J) +F2LA4C: MOVE T2,J + POPJ P, + +F2LA4A: CAILE Q,7 + POPJ P, + MOVE J,PIECEL(J) + LDB J,F2LAT(Q) + JUMPE J,CPOPJ + SKIPGE SLDPC(J) + JRST F2LA4B + POPJ P, ;NOT SLIDING + +F2LA2A: CAME J,C + CAMN J,D + JRST F2LA4A + POPJ P, + +FAT2: SKIPGE PIECE(J) + SKIPL PIECE(J) + +F2LAT: BDARL(J) + BDARR(J) + BDAFB(J) + BDAFT(J) + BDALL(J) + BDALR(J) + BDAUR(J) + BDAUL(J) + + +APMGL: MOVEI A,APMGL1 ;PRINT SORTED PMG MOVE LIST + PUSHJ P,CMPM + POPJ P, + +APMGL1: PUSHJ P,LMGXR + MOVEI B,TYO + MOVE T,[-LLMGPL,,LMGPDL-1] + PUSHJ T,TDFROB + JRST CMPMX + +APMSTA: MOVEI B,TYO ;PRINT OUT PMG STATS + MOVE W,[-LINFDT,,INFDT] + PUSHJ P,STFPNT + MOVE W,[-LSTAPT,,STAPT] + PUSHJ P,STFPNT + JRST DCRR + + +IFN CHEOPS,[ +ACC: SKIPN HINITD + PUSHJ P,HINITC + SKIPGE HINIBF + PUSHJ P,HINIL ;REALLY WANT TO CONTROL IT + SKIPE CCBFM ;SKIP ON NOT IN BUFFERED MODE + PUSHJ P,CXENC ;WERE, LEAVE IT AND SAVE STATE + PUSH P,FFANCY + MOVEI C,1 + PUSHJ P,FANSET + PUSHJ P,HHU ;CLEAR SCREEN + PUSHJ P,HCLEOF + PUSHJ P,HCMAIN + POP P,C + PUSHJ P,FANSET + POPJ P, + +ASBACK: SKIPN HINITD + PUSHJ P,HINITC + PUSHJ P,CHBLI ;START BACKGROUND + POPJ P, + +ACBACK: SKIPN HINITD + PUSHJ P,HINITC + MOVE TT,CCBFM ;TRY TO SET UP A/B LIMITS AS WERE. + CAIN TT,1 + JRST [ MOVNI A,20000 ;TOO MUCH HAIR, IM AFRAID. TRY TO LIMIT CONFUSION + MOVN B,A + JRST ACBAK0] + LDB A,[242000,,HBMEM+CBBBL+2] ;GET WHAT A-B ACTUALLY WERE OUT OF ARG BLOCK + TRNE A,100000 + ORCMI A,77777 + LDB B,[042000,,HBMEM+CBBBL+2] + TRNE B,100000 + ORCMI B,77777 +ACBAK0: MOVEM A,CBALPH + MOVEM B,CBBETA + MOVEI A,ACBAKR ;"CONTINUE" BACKGROUND.. USE THIS WHEN "PICKING UP" + JRST ACBAK1 ; BACKGROUND SEARCH STARTED BY A DIFFERENT OCM + ; BOARD POSITION MUST BE SAME AS SEARCH WAS STARTED IN. + +ACBAKR: PUSHJ P,LMGXR + MOVEI A,CBBBL + MOVEM A,CBBBP ;KEEP TRACK OF THIS JUST SO WILL KNOW IF BUFFER FILLED + MOVEI A,CBBMT + MOVEM A,CBBMP + HRRZ A,LGLMST + ADDI A,1 + MOVEI B,1(P) + PUSHJ P,4SORT + MOVE TT,LGLMST +ACBAK2: CAMN TT,P + JRST ACBAKX + PUSH P,TT + HRRZ A,1(TT) + HLRZ B,1(TT) + LDB I,[100,,PLYN] + PUSHJ P,TMOVE + JRST ACBAK3 + MOVE C,CBBBP + CAIL C,HBMEML + JRST ACBAK3 + ADDI C,40 + MOVEM C,CBBBP + MOVE A,@GAMP + MOVEM A,@CBBMP + AOS CBBMP +ACBAK3: PUSHJ P,UNMOVE + POP P,TT + ADD TT,[NWDPM,,NWDPM] + JRST ACBAK2 + +ACBAKX: CLEARM @CBBMP + JRST CMPMX + +NBMRK: MOVEM T1,NBMVAL ;MARK MOVES WITH CHEOPS VALUE AT LEAST AS GOOD AS THIS + CLEARM NBMRKC ;COUNT OF MOVES MARKED. + SETOM BRCYC +NBMRK0: MOVEI A,CBBBL + MOVEM A,CBBBP + MOVEM A,BSMIND + CLEARM BSMAXD + MOVEI A,CBBMT + MOVEM A,CBBMP +NBMRK1: SKIPN @CBBMP + JRST NBMRKX + MOVE C,CBBBP + MOVE A,CCBFM + XCT CXBRV(A) ;SETS UP CHXVAL, ETC. ALSO VALUE IN R. + MOVE C,CHXSTD + CAMLE C,BSMAXD + MOVEM C,BSMAXD + CAMGE C,BSMIND + MOVEM C,BSMIND + MOVE A,@CBBMP + LDB I,[100,,PLYN] + PUSHJ P,MMOVE + .VALUE ;THAT SHOULD BE LEGAL + LDB I,[100,,PLYN] + PUSHJ P,HASHR0 ;LOOK UP IN HASH TABLE + JRST NBMRK3 ;FOUND + MOVEI J,-1 + MOVEI T1,0 +NBMRK5: MOVE A,CHXVAL + HRLI T1,500000+MHPLN ;POSITION MARKED IN + XCT (I) [ CAMLE A,NBMVAL ;I HAS OPPOSITE SIDE FROM SIDE REALLY TO MOVE. + CAMGE A,NBMVAL ] + JRST [ HRLI T1,600000+MHPLN ;POSITION MARKED OUT + JRST NBMRK6] + AOS NBMRKC ;COUNT MARKED IN. +NBMRK6: PUSHJ P,HASHE1 +NBMRK4: PUSHJ P,UNMOVE +NBMRK2: MOVE C,CBBBP + ADDI C,40 + MOVEM C,CBBBP + AOS CBBMP + JRST NBMRK1 + +NBMRK3: HRRZ T1,HSTBV(T2) ;PRESERVE VALUE INFO FOR DEBUGGING + LDB ZR,[HTVCOD,,HSTBV(T2)] ;POSITION FOUND IN HASH TABLE + CAIN ZR,3 + JRST NBMRK4 ;POSITION IN GAME, LEAVE THAT IN HASH TABLE + MOVE J,HSTBL(T2) ;PRESERVE PREVIOUS LINK, ETC + JRST NBMRK5 + +NBMRKX: POPJ P, + +NBMVAL: 0 ;MARK MOVES AS GOOD OR BETTER THAN THIS FOR STM +NBMRKC: 0 ;COUNT OF MOVES MARKED + +;STOP BLUNDERS!! GETS RESULTS OF BACKGROUND SEARCH. +; SAVES TWO SETS OF CHEOPS RESULTS: THE "BEST" (CBSXXX) AND THE "CHOSEN" (INXXX) +BSTP: MOVEM A,INMOV ;SAVE INTENDED MOVE + SETOM BRCYC ;RECYCLE FLAG. IF SETD'S READ FROM CHEOPS DIFFER BY + ; MORE THAN 1, CYCLE BACK TO GET UPDATED STUFF. +BSTP0: LDB I,[100,,PLYN] + MOVEI A,CBBBL + MOVEM A,CBBBP + MOVEM A,BSMIND + CLEARM BSMAXD + MOVEI A,CBBMT + MOVEM A,CBBMP + MOVE R,EVMST(I) + MOVEM R,CBSVAL ;BEST VALUE SO FAR + CLEARM CBSSTD ;FOR NULL DETECTION + CLEARM BSTCNT ;NUMBER OF MOVES WITH THAT VALUE + CLEARM INFND ;CLEAR FOUND CHOSEN ONE FLAG +BSTP1: SKIPN @CBBMP + JRST BSTPX + MOVE C,CBBBP + MOVE A,CCBFM + XCT CXBRV(A) ;SETS UP CHXVAL, ETC. ALSO RETS VALUE IN R. + MOVE C,CHXSTD + CAMLE C,BSMAXD + MOVEM C,BSMAXD + CAMGE C,BSMIND + MOVEM C,BSMIND + MOVE C,@CBBMP ;THIS THE CHOSEN MOVE? + CAMN C,INMOV + JRST BSTPF ;OK FOUND IT, IS IT A BLUNDER.. +BSTPF1: XCT (I)[ CAMGE R,CBSVAL + CAMLE R,CBSVAL] + JRST BSTP2 ;THIS ONE A COMPLETE LOSER + CAMN R,CBSVAL + JRST [ AOS BSTCNT ;ANOTHER ONE WITH EQUAL TO BEST VALUE + JRST BSTP2] + MOVEM C,CBSMOV + MOVE A,[CHXVAL,,CBSVAL] ;THIS A NEW BSF + BLT A,CBSE-1 + MOVEI A,1 + MOVEM A,BSTCNT +BSTP2: MOVE C,CBBBP + ADDI C,40 + MOVEM C,CBBBP + AOS CBBMP + JRST BSTP1 + +BSTPX: AOSLE BRCYC + POPJ P, ;ALREADY RECYCLED ONCE, DONT GET INTO LOOP. + MOVE C,BSMAXD + SUB C,BSMIND + CAILE C,1 + JRST BSTP0 ;MIN AND MAX DFR BY MORE THAN ONE, SO ANOTHER PLY OF INFO + POPJ P, ; BE AVAILABLE. LOOP BACK TO GET BETTER DATA. + ; (THIS CAN HAPPEN PARTICULARILY ON MC WITH + ; CHAOS NET LOSSAGE). + +BSTPF: SKIPE INFND ;SAVE STUFF FOR SELECTED MOVE + .VALUE ;MOVE IN LIST TWICE?? + SETOM INFND + MOVE A,[CHXVAL,,INVAL] + BLT A,INE-1 + JRST BSTPF1 + +BSTCNT: 0 ;# OF MOVES TIED WITH BEST CHEOPS VALUE +INFND: 0 ;-1 -> HAVE FOUND SELECTED MOVE + +BRCYC: 0 ;FLAG TO AVOID POSSIBLE LOOP RE-READING CHEOPS +BSMIND: 0 ;MIN SETD OF ANY OF CHEOPS RESPONSES +BSMAXD: 0 ;MAX SETD OF ANY OF CHEOPS RESPONSES. + +APBACK: ;PRINT BACKGROUND STATUS + MOVEI A,CBBBL + MOVEM A,CBBBP + MOVEI A,CBBMT + MOVEM A,CBBMP +APBL1: SKIPN @CBBMP + POPJ P, + MOVE C,CBBBP + MOVE A,CCBFM + XCT CXBRV(A) ;GET RESULT + MOVEI B,TYO + ISOUT 1,[ASCII /AFTER /] + MOVE C,@CBBMP ;MOVE + PUSHJ P,EPMOVE + ISOUT [.ASCII ?, SETD *U!CHXSTD ?] + PUSHJ P,ACTPR + PUSHJ P,BABWRN + MOVE C,CBBBP + ADDI C,40 + MOVEM C,CBBBP + AOS CBBMP + JRST APBL1 + +CHBLI: SKIPE BACKEP ;INITIALIZE ALPHA AND BETA + JRST [ SKIPN GESTSW + JRST CHBLFR ;ESTIMATE NOT REALLY WORTH MUCH + MOVE C,MSIBB ;IF A-B HACKING ENABLED TAKE ESTIMATE FROM MSIBB + IDIVI C,1_CHVCNV + MOVE D,C + MOVM ZR,C ;IF ONE SIDE WAY AHEAD, ALLOW EXTRA MARGIN. + LSH ZR,-2 + ADD ZR,BACKEP + SUB C,ZR + ADD D,ZR + JRST CHBLI4] +CHBLFR: MOVNI C,20000 ;ENTER DIRECTLY HERE TO FORCE FULL RANGE A-B + MOVN D,C +CHBLI4: MOVEM C,CHXIA + MOVEM D,CHXIB + MOVEM C,CBALPH ;ALPHA AND BETA BACKGROUND SEARCHES INITIALIZED TO + MOVEM D,CBBETA + MOVEI C,2 ;INITIAL SETD TO USE, -1 + MOVEM C,CHXD ;IT INCR S FIRST, SO START OFF AT SETD 3 + MOVE A,CCBFM + XCT CXBKI(A) ;INITIALIZE BACKGROUND SEARCH + +CXBIB: MOVE A,[177777_4] ;CLOBBER ARG POINTER SO SEARCH DOESNT START AGAIN + MOVEM A,HBMEM+5 + MOVEI A,13 ;ABORT ANY BACKGROUND SEARCH IN PROGRESS + PUSHJ P,HDPDB1 + MOVEI B,100000 +CHBLI0: LDB A,[%HDBL UNIFA] ;MAKE SURE COMMAND ACKNOWLEDGED TO AVOID ANY + TRNE A,3 ; POSSIBLE TIMING ERROR + JRST [ SOJG B,CHBLI0 + MOVEI B,TYO + SOUT [ASCIZ /CHEOPS FAILED TO ACKNOWLEDGE, TRYING AGAIN +/] + JRST CXBIB] + MOVE A,HBMEM+5 + TLNN A,777774 + JRST [ SOJG B,CHBLI0 + MOVEI B,TYO + SOUT [ASCIZ /CHEOPS FAILED TO ABORT BACKGROUND +/] + JRST CXBIB] +CXBIN: MOVEI A,CHBLIR +ACBAK1: ;INITIALIZE BLUNDER STOPPER MODE IN CHEOPS. + ; IE STORE LVL 1 SUCCESSOR POSITIONS IN POSITION BUFFER + ;ENTER HERE FROM CONTINUE BACKGROUND + PUSHJ P,CMPM + LDB I,[100,,PLYN] ;MAKE SURE REAL STM LEFT IN I + POPJ P, + +CHBLIR: PUSHJ P,LMGXR ;UNWEDGE LMGD, ETC + MOVEI A,CBBBL ;FIRST LOCN TO USE FOR BACKGROUND BLOCK + MOVEM A,CBBBP ;INITIALIZE PNTR + MOVEM A,CBBIP ;INITIAL PNTR TO RING TO + MOVEI A,CBBMT ;INITIALIZE POINTER THAT KEEPS TRACK OF WHICH + MOVEM A,CBBMP ; MOVES LEAD TO WHICH POSITION + HRRZ A,LGLMST + ADDI A,1 + MOVEI B,1(P) + PUSHJ P,4SORT ;SORT FROBS + MOVE TT,LGLMST +CHBLI1: CAMN TT,P + JRST CHBLIX ;THRU + PUSH P,TT + HRRZ A,1(TT) + HLRZ B,1(TT) + LDB I,[100,,PLYN] + PUSHJ P,TMOVE ;PLAY MOVE + JRST CHBLI3 ;MOVE ILLEGAL + PUSHJ P,ACLPS1 ;MAKE ARG BLOCK + MOVEI A,3000 + IORM A,CHXSTM ;SET CHAIN MODE AND INCR SETD MODE + MOVE C,CBBBP + CAIL C,HBMEML ;SKIP ON ROOM IN BUFF MEM + JRST CHBLI3 +; SKIPE T,CBBLB ;LAST BUFFER ADR +; JRST [ MOVE TT,C ;CHAIN PREVIOUS BUFFER TO THIS ONE +; LSH TT,1 +; ADDI TT,CBBAS/2 +; MOVEM TT,CHXCHW +; DPB TT,[042000,,HBMEM+3(T)] ;INTO CHAIN POINTER +; JRST .+1] + MOVEI TT,40(C) ;ADR OF NEXT BLOCK + LSH TT,1 + ADDI TT,CBBAS/2 + MOVEM TT,CHXCHW ;LINK THIS BLOCK TO FOLLOWING BLOCK (ASSUMING, FOR + ; THE MOMENT, THERE IS ONE). + MOVEI T,CHXTB +CXBTRN: MOVE A,CCBFM + XCT CXBKT(A) + ADDI C,40 ;INCR TO NEXT BLOCK + MOVEM C,CBBBP + MOVE A,@GAMP ;SAVE MOVE WHICH LEAD TO THIS POSITION + MOVEM A,@CBBMP + AOS CBBMP +CHBLI3: PUSHJ P,UNMOVE + POP P,TT +CHBLI2: ADD TT,[NWDPM,,NWDPM] + JRST CHBLI1 + +CHBLIX: CLEARM @CBBMP ;TERMINATE LIST OF MOVES + MOVE A,CCBFM + XCT CXBFN(A) ;FINALIZE RING AND START BACKGROUND + JRST CMPMX + +CXBFC: MOVE TT,CBBIP + LSH TT,1 + ADDI TT,CBBAS/2 + MOVE T,CBBBP + DPB TT,[042000,,HBMEM+3-40(T)] ;RING BUFFERS + LSH TT,4 + MOVEM TT,HBMEM+5 ;INTO BACKGROUND ARG BLOCK POINTER + POPJ P, + +CBBBP: 0 ;PNTR TO NEXT ARG BLOCK +CBBIP: 0 ;PNTR TO INITIAL ARG BLOCK (TO RING AT END) +CBBMP: 0 ;PNTR TO CBBMT TBL + +CBALPH: 0 ;ALPHA USED TO INITIALIZE BACKGROUND BLOCKS +CBBETA: 0 ;BETA USED TO INITIALIZE BACKGROUND BLOCKS + +.SEE CBBMT ;ONE WD FOR EACH POSITION IN POSITION BUFFER + ;WHICH HOLDS MOVE THAT LEAD TO THAT POSITION. + ;TERMINATED BY 0 MOVE. + +LMCHEO: ;GENERATE MOVE IN CHEOPS BRUTE FORCE MODE + MOVEI A,LMCHR + PUSHJ P,CMPM ;GENERATE PLAUSIBLE MOVES ... + POPJ P, + +LMCHR: PUSHJ P,LMGXR + MOVEI A,20000 ;INITIALIZE ALPHA AND BETA + MOVNM A,CHXIA ;TO + AND - INF + MOVEM A,CHXIB + HRRZ A,LGLMST ;SORT FROBS + ADDI A,1 + MOVEI B,1(P) + PUSHJ P,4SORT + MOVE TT,LGLMST +LMCHR1: CAMN TT,P + JRST LMCHEV ;NOW SEE WHICH MOVE WAS BEST + PUSH P,TT + HRRZ A,1(TT) + HLRZ B,1(TT) + LDB I,[100,,PLYN] + PUSHJ P,TMOVE ;PLAY MOVE + JRST [ PUSHJ P,UNMOVE + POP P,TT ;MOVE ILLEGAL + MOVSI ZR,(SETZ) + IORM ZR,1(TT) ;FLAG MOVE A LOSER + JRST LMCHR2] + PUSHJ P,ACLPS1 ;MAKE ARG BLOCK DESCRIBING POSITION + PUSHJ P,ACSTRT ;"START" CHEOPS + PUSHJ P,HCHGV ;GET CHEOPS VALUE INTO R + PUSH P,R + PUSHJ P,UNMOVE + POP P,R + POP P,TT + PUSHJ P,HOCMMV ;CONVERT TO OCM VALUE, SAVE CHEOPS VALUE IN Q + MOVEM R,2(TT) ;CLOBBER VALUE INTO PLAUSIBILITY WD + LDB I,[100,,PLYN] + XCT LMCABT(I) ;SEE IF THIS BEST SO FAR (COMPARE CHEOPS VALUE) + XCT LMCABU(I) ;UPDATE A-B VARIABLE TO REFLECT THAT + ; STORE CHEOPS VALUE +LMCHR2: ADD TT,[NWDPM,,NWDPM] + JRST LMCHR1 + + +ACSTRT: MOVE TT,CCBFM ;"START" CHEOPS + XCT CXSTRT(TT) + +ACWATP: MOVEI C,CBABL ;PRIORITY BLOCK, RIGHT THING FOR CCBFM + AND - + SKIPGE HBMEM(C) + JRST [ AOS CSNBSY + SKIPGE HBMEM(C) + .HANG ;WAIT UNTIL CHEOPS FINISHED WITH PREVIOUS LOSSAGE + JRST .+1] + POPJ P, + +AXST2: PUSHJ P,ACWATP + PUSHJ P,ACLBPM ;USE PRIORITY HACK, ETC + POPJ P, + +AXST1: PUSHJ P,ACWATP + PUSHJ P,ACLBM ;LOAD POSITION INTO BUFFER MEM + POPJ P, + +LMCHB1: PUSHJ P,ACLPS2 ;LOAD POSITION INTO CHEOPS + MOVEI A,[0] ;CLEAR STATISTICS COUNTER + MOVEI B,HODSTA + PUSHJ P,XWOD + MOVEI B,HODSTB + PUSHJ P,XWOD + PUSHJ P,HCP ;RUN CHEOPS AND WAIT FOR IT TO STOP + POPJ P, + +HCHGV1: MOVEI A,HS1TEM + MOVEI B,HASSTB + PUSHJ P,XRAS ;GOBBLE DOWN STATISTICS COUNTER + MOVE J,HS1TEM + MOVEI B,HASSTA + PUSHJ P,XRAS + LSH J,20 + IOR J,HS1TEM + MOVEM J,CHXSTA ;RETURNNED STATISTICS COUNTER + MOVEI B,1 ;GOBBLE DOWN SETD DEEP-PARAMETER + PUSHJ P,XRPDLB + MOVE J,HS1TEM + MOVEM J,HCHSTD ;TEMP FOR SETD + MOVSI C,-3 + MOVEI B,4 ;PV00A +HCHGV3: PUSHJ P,XRPDLB ;GOBBLE P.V. + MOVE J,HS1TEM + AOS B + PUSHJ P,XRPDLB + LSH J,16. + IOR J,HS1TEM + LSH J,4 ;REFORMAT A LA BUFFERED MODE + SOSL HCHSTD ;SKIP ON THIS ALL OF P.V. THATS VALID + TLNN J,777774 + JRST HCHGV5 ;MATE OR STALEMATE REACHED + PUSHJ P,HCHMMV ;MAP TO OCM STYLE MOVES + MOVEM R,CHXPV1(C) + AOS B + AOBJN C,HCHGV3 +HCHGV6: MOVEI B,3 ;AC MATERIAL + MOVEI A,CHXIMB + PUSHJ P,XRAC ;GET INITIAL MATERIAL BALANCE FOR COMPAIRSON + MOVE R,CHXIMB + TRNE R,100000 + ORCMI R,77777 + MOVEM R,CHXIMB ;SAVE THAT FOR COMPARISON + MOVEI B,4 ;AC VALUE + MOVEI A,HS1TEM ;DIG VALUE OUT OF CHEOPS AND RETURN + PUSHJ P,XRAC + MOVE R,HS1TEM + TRNE R,100000 ;EXTEND 16 BIT NEG NUMBERS + ORCMI R,77777 + MOVEM R,CHXVAL + POPJ P, + + +HCHGV5: CLEARM CHXPV1(C) ;ENCOUNTERED MATE OR STALEMATE, CLEAR REST + AOBJN C,HCHGV5 + JRST HCHGV6 + +HCHGV: MOVE TT,CCBFM + XCT CXGV(TT) + +GXV1: MOVEI C,CBABL ;WAIT FOR CHEOPS TO FINISH AND RETURN VALUE +HCHGVC: SKIPG HBMEM(C) ;ENTER HERE DIRECTLY WITH ADR IN C TO READ BACKGROUND BLOCK + JRST [ AOS CSNRDY + SKIPG HBMEM(C) + .HANG + JRST .+1] +HCHGVR: LDB J,[042000,,HBMEM+1(C)] ;GET SETD FROM PARAM BLOCK + MOVEM J,HCHSTD ;FOR INTERNAL HACKERY + MOVEM J,CHXSTD ;ALSO RETURN DEPTH TO USER + MOVE J,HBMEM+11(C) ;GET RETURNED PV (1ST MV) + SOSL HCHSTD + TLNN J,777774 + JRST [ CLEARM CHXPV1 ;EVIDENTLY MATE OR STALEMATE ON MOVE + CLEARM CHXPV2 + CLEARM CHXPV3 + JRST HCHGV4] + PUSHJ P,HCHMMV ;"MAP" MOVE + MOVEM R,CHXPV1 + MOVE J,HBMEM+12(C) ;2ND MV + SOSL HCHSTD + TLNN J,777774 + JRST [ CLEARM CHXPV2 + CLEARM CHXPV3 + JRST HCHGV4] + PUSHJ P,HCHMMV + MOVEM R,CHXPV2 + MOVE J,HBMEM+13(C) ;3RD MV + SOSL HCHSTD + TLNN J,777774 + JRST [ CLEARM CHXPV3 + JRST HCHGV4] + PUSHJ P,HCHMMV + MOVEM R,CHXPV3 +HCHGV4: LDB R,[042000,,HBMEM+10(C)] ;GET INITIAL MATERIAL BALANCE + TRNE R,100000 + ORCMI R,77777 + MOVEM R,CHXIMB ;SAVE THAT FOR COMPARISON + LDB R,[242000,,HBMEM+7(C)] ;STATA (LOW ORDER) + LDB J,[042000,,HBMEM+7(C)] ;STATB (HIGH ORDER) + LSH J,20 + IOR J,R + MOVEM J,CHXSTA ;STORE STATISTICS COUNTER + LDB R,[242000,,HBMEM+10(C)] + TRNE R,100000 ;EXTEND 16 BIT NEG NUMBERS + ORCMI R,77777 + MOVEM R,CHXVAL + LDB J,[042000,,HBMEM+1(C)] ;GET SETD FROM PARAM BLOCK AGAIN + CAME J,CHXSTD ;SAME AS READ BEFORE? + JRST HCHGVR ;NOPE, MUST HAVE COMPLETED NEW SETD, TRY AGAIN + POPJ P, + +HOCMMV: MOVE Q,R ;LEAVE CHEOPS VALUE IN Q + MOVM ZR,R ;CONVERT CHEOPS VALUE IN R TO OCM VALUE + SUBI ZR,10000-40 + JUMPGE ZR,HOCMM1 ;MATE VALUE + ASH R,CHVCNV ;CONVERT CHEOPS VALUE -> OCM VALUE + POPJ P, + +HOCMM1: ADDI ZR,70000-40-2 ;MATE BASE IN OCM IS 70000 + SKIPGE R + MOVNS ZR + MOVE R,ZR + POPJ P, + +LMCABT: CAMLE Q,CHXIA ;SKIP ON R WORSE OR EQUAL TO WHAT SIDE ALREADY HAS + CAMGE Q,CHXIB + +LMCABU: MOVEM Q,CHXIA ;STORE SIDE NOW GUARRENTEED AT LEAST THIS + MOVEM Q,CHXIB + + +LMCHEV: MOVE TT,LGLMST ;FIND "BEST" MOVE + LDB I,[100,,PLYN] + MOVE B,LMCHIV(I) ;INITIAL VALUE + MOVNI T,1 +LMCHE1: CAMN TT,P + JRST LMCHEX ;THRU + SKIPGE 1(TT) + JRST LMCHE2 ;THAT MOVE ILLEGAL + XCT LCHTST(I) + JRST [ HRRZ T,TT ;BEST SO FAR + MOVE B,2(TT) + JRST .+1] +LMCHE2: ADD TT,[NWDPM,,NWDPM] + JRST LMCHE1 + +LMCHEX: JUMPL T,LMCHNM ;NO MOVE, MATE OR STALEMATE? + PUSH P,B + CLEARM CVPR ;GENERATE "PRINCIPLE VARIATION" + HRRZ A,1(T) + HLRZ B,1(T) + LDB I,[100,,PLYN] + PUSHJ P,TMOVE ;PLAY MOVE + .VALUE ;SHOULD HAVE BEEN LEGAL + PUSHJ P,RECMP + PUSHJ P,UNMOVE + MOVEI Q,0 + POP P,R + JRST CMPMX + +LMCHNM: .VALUE + +LMCHIV: -10000000 + +10000000 + +LCHTST: CAMGE B,2(TT) + CAMLE B,2(TT) + + +ACLPOS: SKIPN HINITD + PUSHJ P,HINITC + MOVEI A,20000 + MOVNM A,CHXIA ;ON DIRECT COMMAND, USE + AND - INF + MOVEM A,CHXIB + PUSHJ P,ACLPS1 ;MAKE ARG BLOCK + MOVE A,CCBFM + XCT CXLPS(A) + +ACLBPM: MOVEI T,CHXTB ;USE NEW HACK BUFFERED MODE, USE PRIORITY BLOCK. + MOVEI C,CBABL + PUSHJ P,CXBPOS + MOVE TT,C + LSH TT,1 + ADDI TT,CBBAS/2 + LSH TT,4 + MOVEM TT,HBMEM+3 ;PRIORITY POINTER +CCOMV1: MOVEI TT,3000 + MOVEI A,3 ;SEND DOORBELL OP 0 TO INITIATE PRIORITY BLOCK + PUSHJ P,HDPDB1 +CCOMV2: LDB A,[%HDBL UNIFA] + TRNN A,1 + POPJ P, + SOJG TT,CCOMV2 + MOVEI B,TYO + SOUT [ASCIZ /CHEOPS FAILED TO ACKNOWLEDGE COMMAND TO START PRIORITY BLOCK +/] + JRST CCOMV1 + +ACLPS2: MOVEI A,CHXTB ;POINTER TO ARG BLOCK + PUSHJ P,HLDPOS ;IN CLOSE-COUPLED MODE + POPJ P, + +ACLBM: MOVEI A,CHXTB + PUSHJ P,HLDPB ;IN BUFFERED MODE (THIS MAKES BACKGROUND POINTER POINT + POPJ P, ; TO BACKGROUND BLOCK) + +ACLPS1: CLEARM CHXSTM ;CONSTRUCT CHEOPS ARG BLOCK AT CHXTB +ACLPS3: PUSHJ P,CHXBD ;ENTER HERE WHEN CHXSTM INITED TO FUNNY MODE + LDB A,[100,,PLYN] ;GET STM + LSH A,17 ;SHIFT INTO APPRO BIT + IORM A,CHXSTM ;PUT INTO BITS AND MODES WD + MOVEI A,0 + SKIPE PIECEL+WKR-PIECE + SKIPE NMOVES+WKR-PIECE + TRO A,4 ;WKR MOVED OR FLUSHED + SKIPE PIECEL+WQR-PIECE + SKIPE NMOVES+WQR-PIECE + TRO A,10 ;WQR MOVED OR FLUSHED + SKIPE NMOVES+WKING-PIECE + TRO A,14 ;NO CASTLING FOR WHITE + SKIPE PIECEL+BKR-PIECE + SKIPE NMOVES+BKR-PIECE + TRO A,1 ;BKR MOVED OR FLUSHED + SKIPE PIECEL+BQR-PIECE + SKIPE NMOVES+BQR-PIECE + TRO A,2 ;BQR MOVED OR FLUSHED + SKIPE NMOVES+BKING-PIECE + TRO A,3 ;NO CASTLING FOR BLACK + LDB I,[100,,PLYN] + MOVE T1,@OKINGT(I) + SKIPE @LMGST1+1(I) ;STM IN CHECK? + TRO A,100 ;SET KCHK BIT + SKIPE B,GHLOC + JRST [ MOVE B,CHEOSQ(B) ;CONVERT TO CHEOPS SQUARE # + ANDI B,7 ;MASK TO FILE + TRO B,10 ;SET GHOST PRESENT + DPB B,[100400,,A] + JRST .+1] + MOVEM A,CHXFW ;FLAGWORD + POPJ P, + +;TRANSFER TABLES INDEXED ON VALUE OF CCBFM + + POPJ P, +CXBKI: POPJ P, ;BACKGROUND PRE-INITIALIZATION. FROM CHBLI + JRST CXBIB ;ABORT ANY PREVIOUS BACKGROUND SEARCH, ETC. + JRST CXBIN + + JRST 4,. +CXBKT: JRST 4,. ;"TRANSFER" POSITION TO CHEOPS IN BACKGROUND MODE. + PUSHJ P,CXBPOS ; FROM CXBTRN + PUSHJ P,CXTPOS + + JRST 4,. +CXBFN: JRST 4,. ;FINALIZE, CLOSE RING, AND START BACKGROUND + PUSHJ P,CXBFC + PUSHJ P,CXBFNT + + JRST 4,. +CXBRV: JRST 4,. ;GET RESULTS FROM ARG BLOCK IN C FROM BSTP1 AND APBL1 + PUSHJ P,HCHGVC ; (BACKGROUND MODE) + PUSHJ P,CXGVN + + JFCL +CXSLIR: JFCL ;SKIP IF BACKGROUND MODE AVAILABLE FROM CHBLIR + SKIPA + SKIPA + + JRST AXST1 +CXSTRT: JRST LMCHB1 ;ROUTINE TO START CHEOPS FROM ACSTRT + JRST AXST2 + JRST NSTRT + + JRST GXV1 +CXGV: JRST HCHGV1 ;GET VALUE ROUTINE FROM HCHGV. + JRST GXV1 + JRST NGTV + + JRST ACLBM +CXLPS: JRST ACLPS2 ;LOAD POSITION ROUTINE FROM ACLPOS. + JRST ACLBPM + JRST NSTRT + + PUSHJ P,CXLVB +CXLV: PUSHJ P,CXLVC ;LEAVING THIS MODE FROM ACCBFM + PUSHJ P,CXLVB + PUSHJ P,CXLVN + + PUSHJ P,CXENB +CXENT: PUSHJ P,CXENC ;ENTERING THIS MODE FROM ACCBFM + PUSHJ P,CXENB + PUSHJ P,CXENN ;ENTER NETWORK MODE + +CCBFM: 1 ;CHEOPS BUFFERED-MODE SWITCH + ; 0 -> CLOSE-COUPLED + ; 10 STORES POSITIONS DIRECTLY INTO CHEOPS WITH CONSOLE PROGRAM + ;-1 -> BUFFERED-MODE + ; 10 STORES POSITIONS IN BUFFER MEMORY, CHEOPS LOADS ITSELF + ; 1 -> BUFFERED-MODE USING PRIORITY BLOCK AND NEW + ; CHEOPS TRANSFER ROUTINES. + ; 2 -> BUFFERED-MODE VIA CHAOS NET + ; +ACCBFM: PUSHJ P,GETNUM + CAIN C,2 + JRST .+3 ;IN NET MODE, REALLY OPEN AND CLOSE IT. + CAMN C,CCBFM + POPJ P, + MOVE D,CCBFM + MOVEM C,CCBFM + XCT CXLV(D) + MOVE C,CCBFM + XCT CXENT(C) + POPJ P, + +CXLVC: POPJ P, + +CXLVB: POPJ P, ;ENTER HERE TO LEAVE BUFFERED MODE + +CXENB: MOVE A,[177777_4] ;CLOBBER POINTER TO ARG BLOCK SO IT DOESNT POINT AT + MOVEM A,HBMEM+5 ; ANY PREVIOUS LOSSAGE + MOVEM A,HBMEM+3 ;ALSO OTHER ARG BLOCK POINTER + CLEARM HBMEM+CBABL + MOVEI A,2 ;START CHEOPS, AND GIVE IT COMMAND 2 + PUSHJ P,HCCOM ; (GO INTO BUFFERED MODE) + MOVE A,HUSADR + MOVEM A,HCNUM + PUSHJ P,HG ;SET STARTING ADR +ACLBF2: PUSHJ P,HLEAVE ;RESTORE STATE + PUSHJ P,XCLK + PUSHJ P,XSRUN ;START CHEOPS AND LEAVE IT RUNNING + POPJ P, + + +CXENC: CLEARM CCBFM ;CAN BE CALLED VIA PRGM ... +CXENC1: SKIPGE HINIBF ;ENTER CLOSE-COUPLED MODE + PUSHJ P,HINIL ;REALLY GRAB CHEOPS IF HAVENT ALREADY + PUSHJ P,HCPX ;CHECK FOR PARITY ERROR, AND STOP CHEOPS + PUSHJ P,HENTER ;SAVE STATE + SOS HDPFLG ;INDICATE CONSOLE NEEDS UPDATING + POPJ P, + +CHHOST: CHHSTN ;CHAOS NET HOST NUMBER OF CHEOPS. + +CXENN: MOVE B,CHHOST ;SET UP CHEOPS CHAOS NET CONNECTION + MOVEI C,[ASCIZ /CHEOPS-SERVER/] + MOVEI D,3 + PUSHJ P,CHACON + JRST .+2 + POPJ P, + MOVEI B,TYO + SOUT [ASCIZ /CONNECTION FAILED +/] + JRST MNLP2 + +CXLVN: .STATUS CHNETI,A + SKIPN A + POPJ P, + MOVEI C,[ASCIZ /I'M THRU, SO LONG/] + PUSHJ P,CHACLS + .VALUE + POPJ P, ;SHOULD CLOSE NETWORK CONNECTION + + +ACT: TDZA C,C ;USE REGULAR MODE +ACTA: MOVEI C,4000 ;USE ASYMETRICAL A/B + MOVEM C,CHXSTM + SKIPN HINITD + PUSHJ P,HINITC + PUSHJ P,GETNUM ;TRY CHEOPS IN CURRENT POSITION, ARG IS SETD + MOVEM C,CHXD + MOVEI A,20000 ;INITIALIZE ALPHA AND BETA IF NOT GIVEN + MOVNM A,CHXIA + MOVEM A,CHXIB + SKIPGE GME + JRST ACT1 + PUSHJ P,GETNUM ;OTHER ARGS, IF SUPPLIED, ARE ALPHA AND BETA + MOVEM C,CHXIA + SKIPGE GME + JRST ACT1 + PUSHJ P,GETNUM + MOVEM C,CHXIB +ACT1: PUSHJ P,ACLPS3 ;MAKE ARG BLOCK + PUSHJ P,ACSTRT ;LOAD INTO CHEOPS + PUSHJ P,HCHGV ;GET RESULT +ACTPR: MOVEI W,CHXVAL ;VALUE BLOCK TO PRINT + MOVEI B,TYO +ACTPRB: MOVE R,CHXVAL-CHXVAL(W) ;COMPUTE DELTA + MOVE Q,R + SUB Q,CHXIMB-CHXVAL(W) ;INITIAL MATERIAL BALANCE + MOVE J,CHXSTA-CHXVAL(W) + MOVE C,CHXSTD-CHXVAL(W) + ISOUT 1,[.ASCII ?VALUE *U!R, DELTA *U!Q, STATC *U!J, SETD *U!C +PV ?] + SKIPE C,CHXPV1-CHXVAL(W) + PUSHJ P,PMVT + PUSHJ P,DSPACE + SKIPE C,CHXPV2-CHXVAL(W) + PUSHJ P,PMVT + PUSHJ P,DSPACE + SKIPE C,CHXPV3-CHXVAL(W) + PUSHJ P,PMVT + PUSHJ P,DCRR + POPJ P, + +BABWRN: MOVE R,CHXVAL-CHXVAL(W) ;WARN IF TOP LEVEL A/B CUTOFF HAS OCCURRED + CAMN R,CBALPH ;(ASSUMING VALUE FROM BACKGROUND SEARCH) + SOUT [ASCIZ / NEG A-B CUT /] + CAMN R,CBBETA + SOUT [ASCIZ / POS A-B CUT /] + POPJ P, + +PMVT: HRRZ R,C ;PRINT MOVE IN C (TMOVE FORMAT) + HLRZ Q,C + CAIL R,376 + JRST PMVT1 + ISOUT 1,[.ASCII ?*P!Q - *S!R ?] + POPJ P, + +PMVT1: SOUT TYPMT-376(R) + POPJ P, + + +CHSTSW: 0 ;CHEOPS STATISTICS SWITCH +ACHSTT: SKIPGE GME + JRST ACHPST ;PRINT CHEOPS STATISTICS + PUSHJ P,GETNUM + MOVEM C,CHSTSW + JUMPE C,CPOPJ +ACHPST: MOVE ZR,CPSTA ;COMPUTE AVERAGER STAT COUNTS + IDIV ZR,CPSTAC + MOVEM ZR,CPSTAV + MOVE ZR,CSSTA + IDIV ZR,CSSTAC + MOVEM ZR,CSSTAV + MOVEI B,TYO + MOVE W,[-LCHSDT,,CHSDT] + PUSHJ P,STFPNT + PUSHJ P,DCRR + POPJ P, + +CPSTAV: 0 ;AVG STATC PMG +CSSTAV: 0 ;AVG STATC PCG + +ACSPD: SKIPN EQSGNF ;HACK CHEOPS SPEED + JRST ACSPD1 ; SET IT + MOVEI B,TYO ;TYPE CURRENT SPEED OUT + MOVE A,HCHSPD + JRST DPT + +ACSPD1: PUSHJ P,GETNUM + MOVEM C,HCHSPD ;SET SPEED + SKIPL HINIBF + SKIPN HINITD + JRST [ MOVEI B,TYO + ISOUT [ASCIZ /NOT IN CONTROL OF CHEOPS, DO CC SO NEW SPEED TAKES/] + POPJ P,] + SKIPN CCBFM + POPJ P, + PUSHJ P,CXENC1 ;STOP CHEOPS + PUSHJ P,ACLBF2 ;THEN START IT AGAIN SO NEW SPEED TAKES + POPJ P, + +;FOLLOWING ROUTINE STORES BOARD AT ADR IN CHEOPS BUFFER MEMORY GIVEN IN C. +;DOES IT IN ONE STEP, UNLIKE OLD CROCK WHICH TOOK TWO. ARG BLOCK POINTER IN +;T (LIKE CHXTB, BUT ONLY STUFF -(T) IS RELAVENT). +CXBPOS: MOVE TT,C + ADD TT,[242000,,HBMEM+17] + MOVE B,[-NPC,,1] +CXBP1: SKIPN A,PIECEL(B) + JRST CXBP2 + SKIPGE D,CHEOPC(B) + JRST [ LDB ZR,[PTID,,PIECE(B)] + CAIE ZR,PID + TRO D,40 ;THIS P PROMOTED + JRST .+1] + MOVE ZR,CHEOSQ(A) + DPB D,[101000,,ZR] + IDPB ZR,TT +CXBP2: AOBJN B,CXBP1 + MOVEI ZR,0 + IDPB ZR,TT ;TERMINATE LIST + MOVE TT,C + ADD TT,[442000,,HBMEM+1] ;POINTER TO ARG SECTION OF COMMAND BLOCK + MOVE ZR,-1(T) ;BITS AND MODES WD + IDPB ZR,TT + MOVE ZR,-5(T) ;DEPTH + IDPB ZR,TT + MOVE ZR,-4(T) ;INITIAL ALPHA + IDPB ZR,TT + MOVE ZR,-3(T) ;INITIAL BETA + IDPB ZR,TT + MOVE ZR,-2(T) ;INITIAL FLAGWORD + IDPB ZR,TT + MOVE ZR,-6(T) ;CHAIN WORD + IDPB ZR,TT + MOVSI TT,-4 + MOVEM TT,HBMEM(C) ;SIGNAL BLOCK READY FOR CHEOPS + POPJ P, + +CHXBD: MOVEI C,CHXTB ;TRANSLATE BOARD INTO A FORM SUITABLE FOR CHEOPS + MOVEI A,2*BW+1 +CHXBD1: SKIPG B,BOARD(A) + JRST CHXBD2 + SKIPGE D,CHEOPC-PIECE(B) ;GET CHEOPS PC #. SKIP UNLESS INDEX WAS + JRST [ LDB ZR,[PTID,,PIECE-PIECE(B)] ;A OCM PAWN + CAIE ZR,PID + TRO D,40 ;THIS A PROMOTED P + JRST .+1] + MOVE T,CHEOSQ(A) + HRRZM D,(C) + MOVEM T,1(C) + ADDI C,2 +CHXBD2: CAIGE A,2*BW+8*BW + AOJA A,CHXBD1 + SETOM (C) + POPJ P, + +;THE FOLLOWING IS AN OCM CHEOPS VALUE BLOCK.. ORDER, ETC IMPORTANT +CHXVAL: 0 ;VALUE +CHXPV1: 0 ;MV1 CHEOPS RETURNED PV +CHXPV2: 0 ;MV2 +CHXPV3: 0 ;MV3 +CHXIMB: 0 ;INITIAL MATERIAL BALANCE (FOR COMPARISON) +CHXSTA: 0 ;RETURNED STATISTICS COUNTER +CHXSTD: 0 ;SETD DONE + +;THE FOLLOWING RESULT BLOCKS USED BY BLUNDER STOPPER MODE. ARE BLT ED FROM CHXVAL, ETC. + +CBSMOV: 0 ;MOVE THAT REACHED BELOW POSITION +CBSVAL: 0 ;"BEST" RESULT FOUND DURING BACKGROUND SCAN +CBSPV1: 0 +CBSPV2: 0 +CBSPV3: 0 +CBSIMB: 0 +CBSSTA: 0 +CBSSTD: 0 +CBSE: + +INMOV: 0 ;MOVE THAT OCM SELECTED (REACHES BELOW POSITION) +INVAL: 0 ;RESULTS FOR "INTENDED" MOVE, IE THE ONE OCM WAS ABOUT TO PLAY +INPV1: 0 +INPV2: 0 +INPV3: 0 +INIMB: 0 +INSTA: 0 +INSTD: 0 +INE: + +HCHSTD: 0 ;SETD DONE (SO AS TO IGNORE GARBAGE P.V. MVS) INTERNAL TEMP. + +;THE FOLLOWING BLOCK OF VARIABLES ARE A STANDARD ARG BLOCK. ORDER IS IMPORTANT! +CHXCHW: 0 ;CHAIN TO NEXT BLOCK WORD +CHXD: -1 ;CHEOPS DEPTH +CHXIA: -20000 ;INITIAL ALPHA +CHXIB: 20000 ;INITIAL BETA +CHXFW: 0 ;FLAGCELL WORD +CHXSTM: 0 ;BITS AND MODES WD + ; 100000 -> STM + ; 40000 -> ALPHA CARRY OVER MODE (NOT IMPLEMENTED) + ; 20000 -> BETA " " " " " + ; 10000 -> USE ALPHA AS DELTA AROUND CURRENT MATERIAL. + ; 4000 -> ASYMMETRICAL A/B MODE + ; 2000 -> INCR SETD BEFORE STARTING SEARCH (GETS STORED + ; BACK WHEN SEARCH DONE) + ; 1000 -> CHAIN TO FOLLOWING CHEOPS ARG BLOCK. +CHXTB: -1 + BLOCK 64.*2 + +HCHMMV: SKIPN R,J + POPJ P, ;NO MOVE, RETURN NIL + LDB Q,[341000,,J] ;MAP CHEOPS MOVE IN J TO OCM MOVE (PC -? SQ FORM) IN R + SKIPGE Q,OCMPC(Q) ;MAP PC MOVING + .VALUE + LDB R,[041000,,J] ;TO SQ + MOVE R,OCMSQ(R) ;MAP IT + SKIPGE RPIECE(Q) ;K MOVING ? + JRST [ LDB S,[241000,,J] ;YES, GET ORIG SQ + MOVE S,OCMSQ(S) ;SEE IF THIS IS REALLY CASTLING + SUB S,R + MOVM ZR,S + CAIE ZR,2 + JRST .+1 ;NOT CASTLING + MOVEI R,376 ;O-O + SKIPL S + MOVEI R,377 ;O-O-O + POPJ P,] + SKIPGE LMGT(Q) + JRST [ LDB S,[241000,,J] ;EP? GET ORIG SQ + MOVE S,OCMSQ(S) ;TO SAME RANK AS DEST SQ? + LDB ZR,[BRANK,,BPREL(S)] + LDB T1,[BRANK,,BPREL(R)] + TLNN Q,1 ;SKIP ON THIS P REALLY PROMOTED + CAME ZR,T1 ;CHEOPS RETURNS EP CAPTS AS P(B5)-N5 FOR EXAMPLE + JRST .+1 +; SKIPLE S,BOARD(R) ;UNFORTUNATELY, IF ITS THE 2ND OR 3RD PLY IT +; SKIPL LMGT-PIECE(S) ; MAY NOT BE THERE YET +; .VALUE ;HAD BETTER BE A P THERE. + ADDI R,BW ;BUT OCM LIKES TO SEE P-N6 + SKIPGE PIECE(Q) + SUBI R,2*BW + JRST .+1] + HRLM Q,R + POPJ P, + + +PARGB: MOVEM 17,DUACS+17 ;DISPLAY ARG BLOCK IN C (MANUAL ENTRY FOR DEBUGGING) + MOVEI 17,DUACS + BLT 17,DUACS+16 + MOVE 17,DUACS+17 + SETOM NOINCU + PUSHJ P,DBLKB ;DISPLAY BLANK BOARD + MOVE TT,C + ADD TT,[242000,,HBMEM+17] +PARGB1: ILDB B,TT + JUMPE B,PARGX ;END OF PIECE LIST + PUSH P,TT + LDB A,[001000,,B] + MOVE A,OCMSQ(A) + LDB Q,[101000,,B] + SKIPGE TT,OCMPC(Q) + .VALUE + ADDI TT,PIECE + PUSHJ P,DSQC + POP P,TT + JRST PARGB1 + +PARGX: MOVSI 17,DUACS + BLT 17,17 + POPJ P, + +DBLKB: MOVSI A,-BD2 +DBLKB1: SKIPGE BOARD(A) + JRST DBLKB2 + MOVEI TT,0 + PUSH P,A + PUSHJ P,DSQC + POP P,A +DBLKB2: AOBJN A,DBLKB1 + POPJ P, + +OCMPC: ;MAP FROM CHEOPS PIECE # TO OCM PC # + REPEAT 16.,-1 ;NULL PIECES + 4 ? 5 ? 3 ? 6 ? 2 ? 7 ? 1 ? 10 ? ;W PS + 24 ? 25 ? 23 ? 26 ? 22 ? 27 ? 21 ? 30 ? ;B PS + 14 ? 15 ? 11 ? 20 ? 13 ? 16 ? 12 ? 17 ? ;W NOBLES + 34 ? 35 ? 31 ? 40 ? 33 ? 36 ? 32 ? 37 ? ;B NOBLES + 1,,4 ? 1,,5 ? 1,,3 ? 1,,6 ? + 1,,2 ? 1,,7 ? 1,,1 ? 1,,10 ? ;W PS (ANOTHER COPY SINCE OCM USES + 1,,24 ? 1,,25 ? 1,,23 ? 1,,26 ? + 1,,22 ? 1,,27 ? 1,,21 ? 1,,30 ? ;B PS SAME NUMBERS FOR PROMOTED PS) + +PP CHEOPC:, ;MAP FROM OCM PC # TO CHEOPS PIECE # + SETZ 26 ? SETZ 24 ? SETZ 22 ? SETZ 20 ? SETZ 21 ? SETZ 23 ? SETZ 25 ? SETZ 27 ? + 42 ? 46 ? 44 ? 40 ? 41 ? 45 ? 47 ? 43 ? + SETZ 36 ? SETZ 34 ? SETZ 32 ? SETZ 30 ? SETZ 31 ? SETZ 33 ? SETZ 35 ? SETZ 37 ? + 52 ? 56 ? 54 ? 50 ? 51 ? 55 ? 57 ? 53 ? + +OCMSQ: ;CHEOPS SQ TO OCM SQ +REPEAT 8,[ + ZZQCH==2*BW+.RPCNT*BW + REPEAT 8, ZZQCH+1+7-.RPCNT +] + +CHEOSQ==.-2*BW ;OCM SQ TO CHEOPS SQ +REPEAT 8,[ + ZZQCH==.RPCNT + 0 + REPEAT 8, ZZQCH*10+7-.RPCNT + 0 +] +CONSTANTS + +.INSRT CCHEOP > +IFN CHNET, .INSRT CHNET > + +CBBMT: BLOCK </40>+10 ;HBMEML (BUFFER MEM LENGTH) IS DEFINED IN CCHEOP + +] +.INSRT OCAUX > +IFN DSPLY, .INSRT OCDIS > + +;EXPAND TRACE MACROS. MAKE SURE THIS AFTER OCAUX. +TRT: REPEAT NRMM, CONC ZZ,\.RPCNT +LTRT==.-TRT + +STRT: REPEAT NSMM, CONC ZQ,\.RPCNT +LSTRT==.-STRT + +TTRT: REPEAT NTMM, CONC ZW,\.RPCNT +LTTRT==.-TTRT + +PATT: +PATCH": BLOCK 200 +PAT: BLOCK 100 + +CONSTANTS +VARIABLES +HSICT: 0 +ICORSZ==<.+1777>_-12 + +END GO +