--- /dev/null
+TITLE SPECS FOR MUDDLE
+
+RELOCA
+
+MAIN==1
+.GLOBAL TYPVLC,PBASE,TYPBOT,MAINPR,PTIME,IDPROC,ROOT,TTICHN,TTOCHN,TYPVEC
+.GLOBAL %UNAM,%JNAM,NOTTY,GCHAPN,INTHLD,PURBOT,PURTOP,N.CHNS,SPCCHK,CURFCN
+.GLOBAL TD.GET,TD.PUT,TD.LNT,NOSHUF,GLOTOP,RSTACK,RCYCHN,START,TVSTRT,REALTV
+.GLOBAL IJFNS,IJFNS1,SJFNS,OPSYS,HASHTB,MULTSG,PURBTB,NSEGS,NOATMS,NOSETG,NOSET
+
+.INSRT MUDDLE >
+
+SYSQ
+
+CONSTANTS
+
+IFN ITS,[
+ N.CHNS==16.
+ FATINS==.VALUE
+]
+IFE ITS,[
+ N.CHNS==102
+]
+
+IMPURE
+
+LOC100: JRST START
+IFN ITS,[
+%UNAM: 0 ; HOLDS UNAME
+%JNAM: 0 ; HOLDS JNAME
+OPSYS: -1 ; MINUS ONE (-1) IF ITS
+RLTSAV: -1 ; SAVED ARG TO REALTIMER
+]
+IFE ITS,[
+IJFNS: 0 ; AGCS JFN,,MUDDLE'S JFN
+IJFNS1: 0 ; SGCS JFN
+SJFNS: 0 ; SQUOZE JFN,,SAVE JFN
+OPSYS: 0 ; ZERO IF TOPS20, ONE IF TENEX
+MULTSG: 0 ; NON-ZERO MEANS TRYING TO USE MULTI SEG STUFF
+NSEGS: MAXSEG
+PURBTB: REPEAT MAXSEG,HIBOT
+]
+IDPROC: 0 ; ENVIRONMENT NUMBER GENERATOR
+PTIME: 0 ; UNIQUE NUMBER FOR PROCID AND ENVIRONMENTS
+OBLNT": 13. ; LENGTH OF DEFAULT OBLISTS (SMALL)
+PARTOP":
+GCSTOP":
+VECTOP": VECLOC ; TOP OF CURRENT GARBAGE COLLECTED SPACE
+GCSBOT":
+PARBOT":
+VECBOT": PARBASE ; BOTTOM OF GARBAGE COLLECTED SPACE
+FRETOP": 120000
+CODBOT: 0 ; ABSOLUTE BOTTOM OF CODE
+CODTOP": PARBASE ; TOP OF IMPURE CODE (INCLUDING "STORAGE")
+HITOP: 0 ; TOP OF INTERPRETER PURE CORE
+GCSNEW":
+PARNEW":
+VECNEW": 0 ; LOCATION FOR OFFSET BETWWEN OLD GCSTOP AND NEW GCSTOP
+INTFLG: 0 ; INTERRUPT PENDING FLAG
+MAINPR: 0 ; HOLDS POINTER TO THE MAIN PROCESS
+NOTTY: 0 ; NON-ZERO==> THIS MUDDLE HAS NO TTY
+GCHAPN: 0 ; NON-ZERO A GC HAS HAPPENED RECENTLY
+INTHLD: 0 ; NON-ZERO INTERRUPTS CANT HAPPEN
+PURBOT: HIBOT ; BOTTOM OF DYNAMICALLY ALLOCATED PURE
+PURTOP: HIBOT ; TOP OF DYNAMICALLY ALLOCATED PURE
+SPCCHK: SETZ ; SPECIAL/UNSPECIAL CHECKING?
+NOSHUF: 0 ; FLAG TO BUILD A NON MOVING HI SEG
+NOATMS: 0 ; FLAG DISALLOWING CREATION OF NEW ATOMS
+NOSETG: 0 ; FLAG DISALLOWING AUTO-CREATE OF GBINDS
+NOSET: 0 ; FLAG DISALLOWING AUTO-CREATE OF BINDINGS
+;PAGE MAP USAGE TABLE FOR MUDDLE
+;EACH PAGE IS REPRESENTED BY ONE BIT IN THE TABLE
+;IF BIT = 0 THEN PAGE IS FREE OTHERWISE BUSY
+;FOR PAGE n USE BIT (n MOD 32.) IN WORD PMAP+n/32.
+PMAPB": 525252,,525252 ;SECTION 0 -- BELONGS TO AGC
+ 525252,,525252
+ 525252,,525252 ;SECTION 1 -- BELONGS TO AGC
+ 525252,,525252
+ 525252,,525252 ;SECTION 2 -- BELONGS TO AGC
+ 525252,,525252
+ 525252,,525252 ;SECTION 3 -- BELONGS TO AGC
+ 525252,,525252
+ 525252,,525252 ;SECTION 4 -- BELONGS TO AGC
+ 525252,,525252
+ 525252,,525252 ;SECTION 5 -- BELONGS TO AGC (DEPENDS ON HIBOT)
+ 525252,,525252
+ 525252,,525252 ;SECTION 6 -- START OF PURE CORE (FILLED IN BY INITM)
+ 525252,,525252
+ 525252,,525252
+ 525252,,525252
+
+NINT==72. ; NUMBER OF POSSIBLE ITS INTERRUPTS
+NASOCS==159. ; LENGTH OF ASSOCIATION VECTOR
+PDLBUF==100 ; EXTRA INSURENCE PDL
+ASOLNT==10 ; LENGTH OF ASSOCIATION BLOCKS
+
+
+.GLOBAL PATCH,TBINIT,LERR,LPROG,PIDSTO,PROCID,PTIME,GCPDL,INTFLG,WTYP1,WTYP2
+.GLOBAL PAT,PDLBUF,INTINT,PARNEW,GCPVP,START,SWAP,ICR,SPBASE,TPBASE,GLOBAS,GLOBSP,TPBAS
+.GLOBAL GCSBOT,GCSTOP,FRETOP,GCSNEW,TD.AGC,SPSTOR,PVSTOR
+.GLOBAL TOPLEVEL,INTNUM,INTVEC,INTOBL,ASOVEC,ERROBL,MAINPR,RESFUN,.BLOCK,ASOLNT,NODES
+.GLOBAL WRONGT,TTYOPE,OPEN,CLOSE,IOT,ILVAL,MESS,FACTI,REFVEC,MUDOBL,INITIA
+.GLOBAL LSTRES,BINDID,DUMNOD,PSTAT,1STEPR,IDPROC,EVATYP,APLTYP,PRNTYP,PURVEC,STOLST
+
+TVSTRT==1400 ; THIS SHOULD BE LARGE ENOUGH SO THAT WE HAVE ENOUGH
+ ; ROOM FOR INITAL FREE STORAGE
+
+
+VECTGO
+TVBASE": BLOCK TVLNT
+ GENERAL
+ TVLNT+2,,0
+TVLOC==TVBASE
+
+
+
+;INITIAL TYPE TABLE
+
+TYPVLC":
+ BLOCK 2*NUMPRI+2
+ GENERAL
+ 2*NUMPRI+2+2,,0
+
+TYPTP==.-2 ; POINT TO TOP OF TYPES
+
+; INITIAL SYMBOL TABEL FOR RSUBRS
+
+SQULOC==.
+SQUTBL: BLOCK 2*NSUBRS
+ TWORD,,0
+ 2*NSUBRS+2,,0
+
+INTVCL: BLOCK 2*NINT
+ TLIST,,0
+ 2*NINT+2,,0
+
+NODLST: TTP,,0
+ 0
+ TASOC,,0
+ BLOCK ASOLNT-3
+ GENERAL+<SASOC,,0>
+ ASOLNT+2,,0
+
+NODDUM: BLOCK ASOLNT
+ GENERAL+<SASOC,,0>
+ ASOLNT+2,,0
+
+
+
+ASOVCL: BLOCK NASOCS
+ TASOC,,0
+ NASOCS+2,,0
+
+
+
+;THESE ENTRIES MUST NOT MOVE DURING INITILAIZATION
+
+ADDTV TVEC,[-2*NUMPRI-2,,TYPVLC]
+TYPVEC==TVOFF+TVSTRT-1
+
+ADDTV TVEC,[-2*NUMPRI-2,,TYPVLC]
+TYPBOT==TVOFF+TVSTRT-1 ; POINT TO CURRENT TOP OF TYPE VECTORS
+
+;ENTRY FOR ROOT,TTICHN,TTOCHN
+
+ADDTV TCHAN,0
+TTICHN==TVOFF+TVSTRT-1
+
+ADDTV TCHAN,0
+TTOCHN==TVOFF+TVSTRT-1
+
+ADDTV TOBLS,0
+ROOT==TVOFF+TVSTRT-1
+ADDTV TOBLS,0
+INITIA==TVOFF+TVSTRT-1
+ADDTV TOBLS,0
+INTOBL==TVOFF+TVSTRT-1
+ADDTV TOBLS,0
+ERROBL==TVOFF+TVSTRT-1
+ADDTV TOBLS,0
+MUDOBL==TVOFF+TVSTRT-1
+ADDTV TVEC,0
+GRAPHS==TVOFF+TVSTRT-1
+ADDTV TFIX,0
+INTNUM==TVOFF+TVSTRT-1
+ADDTV TVEC,[-2*NINT,,INTVCL]
+INTVEC==TVOFF+TVSTRT-1
+ADDTV TUVEC,[-NASOCS,,ASOVCL]
+ASOVEC==TVOFF+TVSTRT-1
+ADDTV TSP,0
+SPSTOR==TVOFF+TVSTRT-1
+ADDTV TPVP,0
+PVSTOR==TVOFF+TVSTRT-1
+ADDTV TUVEC,0
+HASHTB==TVOFF+TVSTRT-1
+ADDTV TLIST,0
+CHNL0"==TVOFF+TVSTRT-1 ;LIST FOR CURRENTLY OPEN PSUEDO CHANNELS
+
+
+IFN ITS,[
+DEFINE ADDCHN N
+ ADDTV TCHAN,0
+ CHNL!N==TVOFF+TVSTRT-1
+ .GLOBAL CHNL!N
+ TERMIN
+
+REPEAT 15.,ADDCHN \.RPCNT+1
+
+DEFINE ADDIPC N
+ ADDTV TLIST,0
+ IPCS!N==TVOFF+TVSTRT-1
+ .GLOBAL IPCS!N
+ TERMIN
+
+REPEAT 15.,ADDIPC \.RPCNT+1
+]
+
+IFE ITS,[
+ADDTV TCHAN,0
+CHNL1==TVOFF+TVSTRT-1
+.GLOBAL CHNL1
+REPEAT N.CHNS-1,[ADDTV TCHAN,0
+]
+]
+
+ADDTV TASOC,[-ASOLNT,,NODLST]
+NODES==TVOFF+TVSTRT-1
+
+ADDTV TASOC,[-ASOLNT,,NODDUM]
+DUMNOD==TVOFF+TVSTRT-1
+
+ADDTV TVEC,0
+EVATYP==TVOFF+TVSTRT-1
+
+ADDTV TVEC,0
+APLTYP==TVOFF+TVSTRT-1
+
+ADDTV TVEC,0
+PRNTYP==TVOFF+TVSTRT-1
+
+; SLOTS ASSOCIATED WITH TEMPLATE DATA STRUCTURES
+
+ADDTV TUVEC,0
+TD.GET==TVOFF+TVSTRT-1
+
+ADDTV TUVEC,0
+TD.PUT==TVOFF+TVSTRT-1
+
+ADDTV TUVEC,0
+TD.AGC==TVOFF+TVSTRT-1
+
+ADDTV TUVEC,0
+TD.LNT==TVOFF+TVSTRT-1
+
+ADDTV TUVEC,0
+TD.PTY==TVOFF+TVSTRT-1
+
+ADDTV TCHAN,0
+RCYCHN==TVOFF+TVSTRT-1
+
+
+;GLOBAL SPECIAL PDL
+
+GSP: BLOCK GSPLNT
+ GENERAL
+ GSPLNT+2,,0
+
+ADDTV TVEC,[-GSPLNT,,GSP]
+GLOBASE==TVOFF+TVSTRT-1
+GLOB==.-2
+ADDTV TVEC,GLOB
+GLOBSP==TVOFF+TVSTRT-1 ;ENTRY FOR CURRENT POINTER TO GLOBAL SP
+
+; POINTER VECTOR TO PURE SHARED RSUBRS
+
+PURV: BLOCK 3*20. ; ENOUGH FOR 20 SUCH (INITIALLY)
+ 0
+ 3*20.+2,,0
+
+ADDTV TUVEC,[-3*20.,,PURV]
+PURVEC==TVOFF+TVSTRT-1
+
+ADDTV TLIST,0
+STOLST==TVOFF+TVSTRT-1
+
+ADDTV TVEC,GLOB
+GLOTOP==TVOFF+TVSTRT-1
+
+;PROCESS VECTOR FOR GARBAGE COLLECTOR PROCESS
+
+GCPVP: BLOCK PVLNT*2
+ GENERAL
+ PVLNT*2+2,,0
+
+
+VECRET
+
+PURE
+
+;INITIAL PROCESS VECTOR
+
+PVBASE": BLOCK PVLNT*2
+ GENERAL
+ PVLNT*2+2,,0
+PVLOC==PVBASE
+
+
+;ENTRY FOR PROCESS I.D.
+
+ ADDPV TFIX,1,PROCID
+;THE FOLLOWING IRP MAKES SPACE FO9 SAVED ACS
+
+ZZZ==.
+
+IRP A,,[0,A,B,C,D,E,PVP,TVP,FRM,AB,TB,TP,SP,M,R,P]B,,[0
+0,0,0,0,0,0,0,TTP,TAB,TTB,TTP,0,TCODE,TRSUBR,TPDL]
+
+LOC PVLOC+2*A
+A!STO==.-PVBASE
+B,,0
+0
+TERMIN
+
+PVLOC==PVLOC+16.*2
+LOC ZZZ
+
+
+ADDPV TTB,0,TBINIT
+ADDPV TTP,0,TPBASE
+ADDPV TSP,0,SPBASE
+ADDPV TPDL,0,PBASE
+ADDPV 0,0,RESFUN
+ADDPV TLIST,0,.BLOCK
+ADDPV TLIST,0,MESS
+ADDPV TACT,0,FACTI
+ADDPV TPVP,0,LSTRES
+ADDPV TFIX,0,BINDID
+ADDPV TFIX,1,PSTAT
+ADDPV TPVP,0,1STEPR
+ADDPV TSP,0,CURFCN
+ADDPV TTVP,0,REALTV
+
+
+
+IMPURE
+
+END