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

6542 lines
137 KiB
Plaintext
Executable File
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
;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,<CBLEN/10000> ;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/<CURRENT VAL> 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 <SIZE*1000>+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**<LENGTH OF FIELD>
; 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:
; <OTHER-STUFF> .. -3 <GENERATION #> <NUMBER SYMBOL-LOCS> <SYMBOL-LOCS> 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