;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