1 ; THE FOLLOWING INFORMATION IS MEANT AS GUIDE TO THE CARE AND FEEDING
\r
2 ; OF MUDDLE. IT ATTEMPTS TO SPECIFY PROGRAMMING CONVENTIONS AND
\r
3 ; SUPPLY SYMBOLS AND MACROS NEEDED BY ALL MODULES IN A MUDDLE.
\r
5 ; FOR EFFICIENCY THE STANDARD MODE OF RUNNING IS UNINTERRUPTABLE.
\r
6 ; WITH EXPLICIT CHECKS FOR PENDING INTERRUPTS. THE INTGO MACRO
\r
7 ; PERFORMS THE APPROPRIATE CHECK
\r
9 ; FOR INTERRUPTS TO WORK IN INTERRUPTABLE CODE, IT MUST
\r
10 ; BE ABSOLUTELY PURE. BETWEEN ANY TWO INSTRUCTIONS OF
\r
11 ; INTERRUPTABLE CODE THERE MAY BE AN INTERUPT IN WHICH
\r
12 ; A COMPACTING GARBAGE COLLECTION MAY OCCUR.
\r
13 ; NOTE: A SCRATCH AC MAY CONTAIN POINTERS TO GC SPACE IN
\r
14 ; INTERRUPTABLE CODE OR DURING AN INTGO IF THE TYPE CODE FOR THAT AC'S
\r
15 ; SLOT IN THE PROCESS VECTOR IS SET TO REFLECT ITS CONTENTS.
\r
17 ; ALL ATOM POINTERS WILL BE REFERRED TO IN ASSEMBLED CODE BY
\r
18 ; MQUOTE <PNAME> -- FOR NORMAL ATOMS
\r
19 ; EQUOTE <PNAME> -- FOR ERROR COMMENT ATOMS
\r
21 ; FUNCTION CALLS TO INITIAL FUNCTIONS WILL BE CALLED USING THE FOLLOWING:
\r
23 ; MCALL N,<PNAME> ;SEE MCALL MACRO
\r
24 ; ACALL AC,<PNAME> ; SEE ACALL MACRO
\r
26 ; UNLESS PNAME IS NOT A VALID MIDAS SYMBOL, IN WHICH CASE ANOTHER INTERNAL
\r
29 ; WHEN CALLING A SUBR THROUGH AN INDEX OR INDIRECT, THE UUOS GENERATED
\r
30 ; BY THE MACROS SHOULLD BE USED.
\r
31 ; THESE ARE .MCALL AND .ACALL -- EXAMPLE:
\r
38 \f; ORGANIZATION OF CORE STORAGE IN THE MUDDLE SYSTEM (ENVIRONMENT)
\r
40 ; 20: SPECIAL CODE FOR UUO AND INTERUPTS
\r
42 ;CODBOT: WORD CONTAINING LOCATION OF BOTTOMMOST WORD OF IMPURE CODE
\r
46 ;CODTOP: WORD CONTAINING LOCATION OFWORD AFTER LAST WORD OF CODE
\r
48 ;PARBOT: WORD CONTAINING LOCATION OFBOTTOMMOST LIST
\r
52 ;PARTOP: WORD CONTAINING LOCATION OFWORD AFTER LAST PAIR WORD
\r
54 ;VECBOT: WORD CONTAINING LOCATION OFFIRST WORD OF VECTORS
\r
58 ;VECTOP: WORD CONTAINING LOCATION OFWORD AFTER TOPMOST VECTOR
\r
59 ; THE WORD BEFORE VECTOP IS THE DOPE FOR THE LAST VECTOR
\r
61 ; --GC MARK PDL (SOMETIMES NOT THERE)--
\r
63 ;CORTOP: TOP OF LOW-SEGMENT/IMPURE CORE
\r
65 ;600000: START OF PURE CODE (SHARED ALSO)
\r
72 \f; BASIC DATA TYPES PRE-DEFINED IN MUDDLE
\r
74 ; PRIMITIVE DATA TYPES
\r
75 ; IF T IS A DATA TYPE THEN $T=[T,,0]
\r
77 ; DATA TYPES ARE ASSIGNED BY THE TYPMAK MACRO IN SOME ARBITRARY ORDER
\r
80 ;TLOSE ;ILLEGAL TYPE (USED PRIMARILY FOR ERRORS)
\r
82 ;TFLOAT ;FLOATING POINT
\r
83 ;TCHRS ;WORD OF UP TO 5 ASCII CHARACTERS
\r
84 ;TENTRY ; MARKS BEGINNING OF A FRAME ON TP STACK
\r
85 ;TSUBR ;BUILT IN FUNCTION WITH EVALUATED ARGS
\r
86 ;TFSUBR ;BUILT IN FUNCTION WITH UN-EVALUATED ARGS
\r
87 ;TUNBOU ;TYPE GIVEN TO UNBOUND OR UNASSIGNED ATOM
\r
88 ;TBIND ;MARKS BEGINNING OF BINDING BLOCK ON TP STACK
\r
89 ;TILLEG ;POINTER PREVIOUSLY HERE NOW ILLEGAL
\r
90 ;TTIME ;UNIQUE NUMBER (SEE FLOAD)
\r
91 ;TLIST ;POINTER TO LIST ELEMENT
\r
92 ;TFORM ;POINTER TO LIST ELEMENT BUT USED AS AN EXPRESSION
\r
93 ;TSEG ;SAME AS FORM BUT VALUE IS MUST BE STRUCTURED AND IS USED
\r
95 ;TEXPR ;POINTER TO LIST ELEMENT BUT USED AS AN INTERPRETIVE FUNCTION
\r
96 ;TFUNAR ;LIKE TEXPR BUT HAS PARTIALLY EVALUATED ARGS
\r
97 ;TLOCL ;LOCATIVE TO LIST ELEMENT (SEE AT,IN AND SETLOC)
\r
99 ;TDEFER ;POINTER TO REAL VALUE (ONLY APPEARS AS CAR OF LIST)
\r
100 ;TUVEC ;AOBJN POINTER TO UNIFORM VECTOR
\r
101 ;TOBLS ;AOBJN TO UVEC OF LISTS OF ATOMS. USED AS SYMBOL TABLE
\r
102 ;TVEC ;VECTOR (AOBJN POINTER TO GENERALIZED VECTOR)
\r
103 ;TCHAN ;VECTOR OF INFO DESCRIBING AN I/O CHANNEL
\r
104 ;TLOCV ;LOCATIVE TO GENERAL VECTOR (SEE AT,IN AND SETLOC)
\r
105 ;TTVP ;POINTER TO TRANSFER VECTOR
\r
106 ;TBVL ;BEGINS A VECTOR BINDING ON THE TP STACK
\r
107 ;TTAG ;VECTOR OF INFO SPECIFYING A GENERALIZED TAG
\r
108 ;TPVP ;POINTER TO PROCESS VECTOR
\r
109 ;TLOCI ;POINTER TO ATOM VALUE ON STACK (INTERNAL NOT SEEN BY USER)
\r
110 ;TTP ;POINTER TO MAIN MARKED STACK
\r
111 ;TSP ;POINTER TO CURRENT BINDINGS ON STACK
\r
112 ;TLOCS ;LOCATIVE TO STACK (NOT CURRENTLY USED)
\r
113 ;TPP ;POINTER TO PLANNER PDL (NOT CURRENTLY USED)
\r
114 ;TPLD ;POINTER TO P-STACK (UNMARKED)
\r
115 ;TARGS ;POINTER TO AN ARG BLOCK (HAIRY KLUDGE)
\r
116 ;TAB ;SAVED AB (NOT GIVEN TO USER)
\r
117 ;TTB ;SAVED TB (NOT GIVEN TO USER)
\r
118 ;TFRAME ;USER POINTER TO STACK FRAME
\r
119 ;TCHSTR ;BYTE POINTER TO STRING OF CHARS (COUNT ALSO INCLUDED)
\r
120 ;TATOM ;POINTER TO ATOM
\r
121 ;TLOCD ;USER LOCATIVE TO ATOM VALUE
\r
122 ;TBYTE :POINTER TO ARBITRARY BYTE STRING (NOT CURRENTLY USED)
\r
123 ;TENV ;USER POINTER TO FRAME USED AS AN ENVIRONMENT
\r
124 ;TACT ;USER POINTER TO FRAME FOR A NAMED ACTIVATION
\r
125 ;TASOC ;ASSOCIATION TRIPLE
\r
126 ;TLOCU ;LOCATIVE TO UVECTOR ELEMENT (SEE AT,IN AND SETLOC)
\r
127 ;TLOCS ;LOCATIVE TO A BYTE IN A CHAR STRING (SEE AT,IN AND SETLOC)
\r
128 ;TLOCA ;LOCATIVE TO ELEMENT IN ARG BLOCK
\r
133 ;TINFO ;POINTER TO LIST ELEMENT USED WITH ARG POINTERS
\r
136 ;TCSUBR ;CARE SUBR (USED ONLY WITH CUDDLE SEE -- WJL)
\r
137 ;TWORD ;36-BIT WORD
\r
138 ;TRSUBR ;COMPILED PROGRAM (ACTUALLY A VECTOR POINTER)
\r
139 ;TCODE ;UNIFORM VECTOR OF INSTRUCTIONS
\r
141 ;TBITS ;GENERAL BYTE POINTER
\r
142 ;TSTORA ;POINTER TO NON GC IMPURE STUFF
\r
143 ;TPICTU ;E&S CODE IN NON GC SPACE
\r
144 ;TSKIP ;ENVIRONMENT SPLICE
\r
145 ;TLINK ;LEXICAL LINK
\r
146 ;TINTH ;INTERRUPT HEADER
\r
147 ;THAND ;INTERRUPT HANDLER
\r
148 ;TLOCN ;LOCATIVE TO ASSOCIATION
\r
149 ;TDECL ;POINTER TO LIST OF ATOMS AND TYPE DECLARATIONS
\r
150 ;TDISMI ;TYPE MEANING DONT RUN REST OF HANDLERS
\r
151 ;TDCLI ; INTERNAL TYPE FOR SAVED FUNCTION BODY
\r
152 ;TMENT ; POINTER TO MAIN ENTRY OF WHICH THIS IS PART
\r
153 ;TENTER ; NON-MAIN ENTRY TO AN RSUBR
\r
154 ;TSPLICE ; RETURN FROM READ MACRO MEANS SPLICE SUBELEMENTS IN
\r
155 ;TPCODE ; PURE CODE POINTER IN FUNNY FORMAT
\r
156 ;TTYPEW : TYPE WORD
\r
157 ;TTYPEC ; TYPE CODE
\r
158 ;TGATOM ; ATOM WITH GVALUE
\r
159 ;TREADA ; READ ACTIVATION HACK
\r
160 ;TUNWIN ; INTERNAL FOR UNWIND SPEC ON STACK
\r
161 ;TUBIND ; BINDING OF UNSPECIAL ATOM
\r
162 ;TMACRO ; EVAL MACRO
\r
164 ; STORGE ALLOCATION TYPES. ALLOCATED BY AN "IRP" LATER IN THIS FILE
\r
167 ;S1WORD ;UNMARKED STUFF OF NO INTEREST TO AGC
\r
168 ;S2WORD ;POINTERS TO ELEMENTS IN PAIR SPACE (LIST, FORM, EXPR ETC.)
\r
169 ;S2DEFR ;DEFERRED LIST VALUES
\r
170 ;SNWORD ;POINTERS TO UNIFORM VECTORS
\r
171 ;S2NWOR ;POINTERS TO GENERAL VECTORS
\r
172 ;STPSTK ;STACK POINTERS
\r
173 ;SPSTK ;UNMARKED STACK POINTERS
\r
174 ;SARGS ;POINTERS TO ARG BLOCKS (USER)
\r
175 ;SABASE ;POINTER TO ARG BLOCK (INTERNAL)
\r
176 ;STBASE ;POINTER TO FRAME (INTERNAL)
\r
177 ;SFRAME ;POINTER TO FRAME (USER)
\r
178 ;SBYTE ;GENERAL BYTE POINTER
\r
179 ;SATOM ;POINTER TO ATOM
\r
180 ;SLOCID ;POINTER TO VALUE CELL OF ATOM
\r
181 ;SPVP ;PROCESS VECTORS
\r
182 ;SCHSTR ;ASCII BYTE POINTER
\r
183 ;SASOC ;POINTER TO ASSOCIATION BLOCK
\r
184 ;SINFO ;LIST CELL CONTAINING EXTRA ARGBLOCK INFO
\r
185 ;SSTORE ;NON GC STORGAGE POINTER
\r
186 ;SLOCA ;ARG BLOCK LOCATIVE
\r
187 ;SLOCD ;USER VALUE CELL LOCATIVE
\r
188 ;SLOCS ;LOCATIVE TO STRING
\r
189 ;SLOCU ;LOCATIVE TO UVECTOR
\r
190 ;SLOCV ;LOCATIVE TO GENERAL VECTOR
\r
191 ;SLOCL ;LOCATIVE TO LIST ELEENT
\r
192 ;SLOCN ;LOCATIVE TO ASSOCIATION
\r
193 ;SGATOM ;REALLY ATOM BUT SPECIAL GC HACK
\r
195 ;NOTE: TO FIND OUT IF A GIVEN STORAGE ALLOCATION TYPE NEEDS TO BE DEFERRED, REFER TO
\r
196 ;LOCATION "MKTBS:" OFFSET BY THE STORAGE TYPE. IF IT IS <0, THAT SAT NEEDS TO BE DEFERRED.
\r
198 ;ONE WAY TO DO THIS IS TO PUT A REAL TYPE CODE IN AC A AND PUHSJ P,NWORDT
\r
199 ; A WILL CONTAIN 1 IF NO DEFERRED NEEDED OR 2 IF DEFER IS NEEDED
\r
201 \f; SOME MUDDLE DATA FORMATS
\r
203 ; FORMAT OF LIST ELEMENT
\r
205 ; WORD 1: SIGN BIT, RESERVED FOR GARBAGE COLLECTOR
\r
206 ; BITS 1-17 TYPE OF FIRST ELEMENT OF LIST
\r
207 ; BITS 18-35 POINTS TO REST OF LIST (ALWAYS ANOTHER LIST OR 0)
\r
209 ; WORD 2: DATUM OF FIRST ELEMENT OF LIST OF TYPE SPECIFIED
\r
211 ; IF DATUM REQUIRES 54 BITS TO SPECIFY, TYPE WILL BE "TDEFER" AND
\r
212 ; VALUE WILL BE AN 18 BIT POINTER TO FULL 2 WORD PAIR
\r
216 ;FORMAT OF GENERAL VECTOR (OF N ELEMENTS)
\r
217 ;POINTED INTO BY AOBJN POINTER
\r
218 ;A GENERAL VECTOR HAS FEWER THAN 2^16 ELEMENTS
\r
221 ; TYPE<1> TYPE OF FIRST OBJECT (THE RIGHT HALF OF THE TYPE WORD MIGHT BE NONZERO)
\r
222 ; OBJ<1> OBJECT OF SPECIFIED TYPE
\r
230 ; VD(1)-VECTOR DOPE--SIGN-NOT UNIFORM, BITS 1-17 TYPE,,18-35 GROWTH/SHRINKAGE
\r
231 ; VD(2)-VECTOR DOPE--SIGN-G.C.; BITS 1-17 ARE 2*N+1,,18-35 G.C. RELOCATION EITHER UP OR DOWN
\r
234 \f;SPECIAL VECTORS IN THE INITIAL SYSTEM
\r
236 ;THE SYSTEM KEEPS RELEVANT INFORMATION CONCERNING ALL TYPES
\r
237 ;IN A TYPE VECTOR, TYPVEC, WHICH MAY BE INDEXED BY THE TYPE NUMBER
\r
238 ;FOUND IN THE TYPE FIELD OF ANY GOODIE. TABLES APLTYP AND EVLTYP ALSO EXIST
\r
239 ;THEY SPECIFY HOW DIFFERENT TYPES EVAL AND APPLY.
\r
241 ;TYPE IN AC A, PUSHJ P,SAT RETURNS STORAGE TYPE IN A
\r
243 ;TYPE TO NAME OF TYPE TRANSLATION TABLE
\r
245 ; TATOM,,<STORAGE ALLOCATION TYPE>+CHBIT+TMPLBT
\r
249 ; CHBIT ON MEANS YOU CANT RANDOMLY CHTYPE INTO THIS TYPE
\r
250 ; TMPLBT ON MEANS A TEMPLATE EXISTS DESCRIBING THIS
\r
252 ;AN ATOM IS A BLOCK IN VECTOR SPACE WITH THE FOLLOWING FORMAT
\r
254 ; <TUNBOU OR TLOCI>,,<0 OR BINDID> ; TLOCI MEANS VAL EXISTS.
\r
256 ; ; BINDID SPECS ENV IN
\r
257 ; WHICH LOCAL VAL EXISTS
\r
258 ; <LOCATIVE TO VALUE OR 0>
\r
259 ; <POINTER TO OBLIST OR 0>
\r
261 ; <400000+SATOM,,0>
\r
262 ; <LNTH>,,0 (SIGN BIT FOR G.C. RH FOR G.C. RELOCATION)
\r
264 ;POINTERS TO INITIAL STRUCTURES AND ATOMS NEEDED BY COMPILED CODE
\r
265 ;WILL BE POINTED TO BY THE TRANSFER VECTOR
\r
266 ;A POINTER TO THIS VECTOR ALWAYS EXISTS IN AC TVP
\r
267 ;THE FORMAT OF THIS VECTOR IS:
\r
277 ;INFORMATION CONCERNING EACH PROCESS IS KEPT IN THE PROCESS VECTOR
\r
278 ;A POINTER TO THE CURRENT PROCESS ALWAYS EXISTS IN AC PVP
\r
279 ;THE FORMAT OF A PROCESS VECTOR IS:
\r
282 ; PROCID ;UNIQUE ID OF THIS PROCESS
\r
284 ; 20 ELEMENTS (I.E. 40 WORDS) CONTAINIG SAVED ACS
\r
285 ; CAN BE REFERENCED SYMBOLICALLY USING SYMBOLS
\r
286 ; OF THE FORM AC!STO(PVP)
\r
288 ; OTHER PROCESS LOCAL INFO LIKE LEXICAL STATE, PROCESS STATE,LAST RESUMER
\r
297 ;FORMAT OF PUSH DOWN STACKS USED AND CONVENTIONS
\r
300 PRINTC /MUDDLE - INSERT FILE FOR ALL PROGRAMS
\r
304 IF2 [PRINTC /MUDDLE
\r
309 P"=17 ;THE UNMARKED PDL POINTER (USED BY THE OUTSIDE WORLD AND MUDDLE)
\r
310 R"=16 ;REFERENCE BASE FOR RSUBRS
\r
311 M"=15 ;CODE BASE FOR RSUBRS
\r
312 SP"=14 ;SPECIAL PDL (USED BY MUDDLE FOR VARIABLE BINDINGS)(SPECIAL PDL IS PART OF TP)
\r
313 TP"=13 ;MARKED PDL (USED BY MUDDLE FOR ARGS TO FUNCTIONS
\r
314 ;AND MARKED TEMPORARIES)
\r
315 TB"=12 ;MARKED PDL BASE POINTER AND CURRENT FRAME POINTER
\r
316 AB"=11 ;ARGUMENT PDL BASE (MARKED)
\r
317 ;AB IS AN AOBJN POINTER TO THE ARGUMENTS
\r
318 TVP"=7 ;TRANSFER VECTOR POINTER
\r
319 PVP"=6 ;PROCESS VECTOR POINTER
\r
321 ;THE FOLLOWING ACS ARE 'SCRATCH' FOR MUDDLE
\r
323 A"=1 ; A AND B CONTAIN TYPE AND VALUE UPON FUNCTION RETURNS
\r
329 NIL"=0 ;END OF LIST MARKER
\r
331 ;MACRO TO DEFINE MAIN IF NOT DEFINED
\r
336 IFE <<<.AFNM1>_-24.>-<SIXBIT / T./>>,ITS==0
\r
337 IFN ITS,[PRINTC /ITS VERSION
\r
339 IFE ITS,[PRINTC /TENEX VERSION
\r
344 DEFINE DEFMAI ARG,\D
\r
356 \f;DEFINE TYPES AND $TYPES AND IF MAIN NOT 0, MAKE THE $TYPE WORDS
\r
359 IFN MAIN,NUMPRI==-1
\r
362 NUMPRI==-1 ;NUMBER OF PRIMITIVE TYPES
\r
364 DEFINE TYPMAK SAT,LIST
\r
370 IFN MAIN,[$!T!B=[T!B,,0]
\r
380 ;MACRO TO ADD STUFF TO TYPE VECTOR
\r
383 DEFINE ADDTYP SAT,TYPE,NAME,CHF,\CH
\r
385 IFSN [CHF],CH==CHBIT
\r
386 IFSE [NAME]IN,CH==CHBIT
\r
389 IFSN [NAME],[IFSE [NAME]IN,MQUOTE INTERNAL
\r
390 IFSN [NAME]IN,MQUOTE [NAME]
\r
392 IFSE [NAME],MQUOTE TYPE
\r
401 IF2 [IFE MAIN,[DEFINE TYPMAK SAT,LIST
\r
408 ;DEFINE THE STORAGE ALLOCATION TYPES IN THE WORLD
\r
412 GENERAL==400000,,0 ;FLAG FOR BEING A GENERAL VECTOR
\r
415 DEFINE PRMACR HACKER
\r
417 IRP A,,[1WORD,2WORD,2DEFRD,NWORD,2NWORD,TPSTK,PSTK,ARGS
\r
418 ABASE,TBASE,FRAME,BYTE,ATOM,LOCID,PVP,CHSTR,ASOC,INFO,STORE
\r
419 LOCA,LOCD,LOCS,LOCU,LOCV,LOCL,LOCN,GATOM,LOCT]
\r
438 ;MACRO FOR SAVING STUFF TO DO LATER
\r
442 DEFINE HERE G00002,G00003
\r
443 G00002!G00003!TERMIN
\r
447 HERE [DEFINE HERE G00002,G00003
\r
448 G00002!][A!G00003!TERMIN]
\r
453 RMT [EXPUNGE GENERAL,NUMSTA
\r
471 ; FLAG INDICATING VECTOR FOR GCHACK
\r
475 ; DEFINE SYMBLOS FOR VARIOUS OBLISTS
\r
477 SYSTEM==0 ;MAIN SYSTEM OBLIST
\r
478 ERRORS==1 ;ERROR COMMENT OBLIST
\r
479 INTRUP==2 ;INERRUPT OBLIST
\r
480 MUDDLE==3 ;MUDDLE GLOBAL SYMBOLS (ADDRESSES)
\r
482 RMT [EXPUNGE SYSTEM,ERRORS,INTRUP
\r
484 ; DEFINE SYMBOLS FOR PROCESS STATES
\r
492 IFE MAIN,[RMT [EXPUNGE RESMBL,RUNABL,RUNING,DEAD,BLOCKED
\r
494 ]
\f;BUILD THE TYPE CODES AND ADD STUFF TO TYPVEC AND DEFINE $!TYPE)
\r
496 IFN MAIN,[RMT [SAVE==.
\r
502 TYPMAK S1WORD,[[LOSE],FIX,FLOAT,[CHRS,CHARACTER],[ENTRY,IN],[SUBR,,1],[FSUBR,,1]]
\r
503 TYPMAK S1WORD,[[UNBOUND,,1],[BIND,IN],[ILLEGAL,,1],TIME]
\r
504 TYPMAK S2WORD,[LIST,FORM,[SEG,SEGMENT],[EXPR,FUNCTION],[FUNARG,CLOSURE]]
\r
505 TYPMAK SLOCL,[LOCL]
\r
506 TYPMAK S2WORD,[FALSE]
\r
507 TYPMAK S2DEFRD,[[DEFER,IN]]
\r
508 TYPMAK SNWORD,[[UVEC,UVECTOR],[OBLS,OBLIST,-1]]
\r
509 TYPMAK S2NWORD,[[VEC,VECTOR],[CHAN,CHANNEL,1]]
\r
510 TYPMAK SLOCV,[LOCV]
\r
511 TYPMAK S2NWORD,[[TVP,IN],[BVL,IN],[TAG,,1]]
\r
512 TYPMAK SPVP,[[PVP,PROCESS]]
\r
513 TYPMAK STPSTK,[[LOCI,IN],[TP,IN],[SP,IN],[LOCS,IN]]
\r
514 TYPMAK S2WORD,[[MACRO]]
\r
515 TYPMAK SPSTK,[[PDL,IN]]
\r
516 TYPMAK SARGS,[[ARGS,TUPLE]]
\r
517 TYPMAK SABASE,[[AB,IN]]
\r
518 TYPMAK STBASE,[[TB,IN]]
\r
519 TYPMAK SFRAME,[FRAME]
\r
520 TYPMAK SCHSTR,[[CHSTR,STRING]]
\r
521 TYPMAK SATOM,[ATOM]
\r
522 TYPMAK SLOCID,[LOCD]
\r
523 TYPMAK SBYTE,[BYTE]
\r
524 TYPMAK SFRAME,[[ENV,ENVIRONMENT],[ACT,ACTIVATION,1]]
\r
525 TYPMAK SASOC,[ASOC]
\r
526 TYPMAK SLOCU,[LOCU]
\r
527 TYPMAK SLOCS,[LOCS]
\r
528 TYPMAK SLOCA,[LOCA]
\r
529 TYPMAK S1WORD,[[CBLK,IN]]
\r
530 TYPMAK STMPLT,[[TMPLT,TEMPLATE]]
\r
531 TYPMAK SLOCT,[LOCT]
\r
532 ;THE FOLLOWING TYPES (THROUGH CSUBR) CAN PROBABLY BE RECYCLED
\r
533 TYPMAK S1WORD,[[PC,IN]]
\r
534 TYPMAK SINFO,[[INFO,IN]]
\r
535 TYPMAK SATOM,[[BNDS,IN]]
\r
536 TYPMAK S2NWORD,[[BVLS,IN]]
\r
537 TYPMAK S1WORD,[[CSUBR,,1]]
\r
539 TYPMAK S1WORD,[[WORD]]
\r
540 TYPMAK S2NWORD,[[RSUBR,,1]]
\r
541 TYPMAK SNWORD,[CODE]
\r
542 ;TYPE CLIST CAN PROBABLY BE RECYCLED
\r
543 TYPMAK S2WORD,[[CLIST,IN]]
\r
544 TYPMAK S1WORD,[[BITS]]
\r
545 TYPMAK SSTORE,[STORAGE,PICTURE]
\r
546 TYPMAK STPSTK,[[SKIP,IN]]
\r
547 TYPMAK SATOM,[[LINK,,1]]
\r
548 TYPMAK S2NWORD,[[INTH,IHEADER,1],[HAND,HANDLER,1]]
\r
549 TYPMAK SLOCN,[[LOCN,LOCAS]]
\r
550 TYPMAK S2WORD,[DECL]
\r
551 TYPMAK SATOM,[DISMISS]
\r
552 TYPMAK S2WORD,[[DCLI,IN]]
\r
553 TYPMAK S2NWORD,[[ENTER,RSUBR-ENTRY,1]]
\r
554 TYPMAK S2WORD,[SPLICE]
\r
555 TYPMAK S1WORD,[[PCODE,PCODE,1],[TYPEW,TYPE-W,1],[TYPEC,TYPE-C,1]]
\r
556 TYPMAK SGATOM,[[GATOM,IN]]
\r
557 TYPMAK SFRAME,[[READA,,1]]
\r
558 TYPMAK STBASE,[[UNWIN,IN]]
\r
559 TYPMAK S1WORD,[[UBIND,IN]]
\r
560 IFN MAIN,[RMT [LOC SAVE
\r
563 IF2,EXPUNGE TYPMAK,DOTYPS
\r
565 RMT [EQUALS XP EXPUNGE
\r
582 MONMSK==TYPMSK#777777
\r
588 DEFINE GETYP AC,ADR
\r
589 LDB AC,[221500,,ADR]
\r
592 DEFINE GETYPF AC,ADR
\r
593 LDB AC,[003700,,ADR]
\r
600 .GLOBAL .MONWR,.MONRD,.MONEX
\r
601 RMT [IF2 IFE MAIN, XP .WRMON,.RDMON,.EXMON
\r
608 IFE MAIN,[RMT [XP SATMSK,TYPMSK,MONMSK,CHBIT
\r
611 \f;MUDDLE WIDE GLOBALS
\r
613 ;DEFINE ENTRIES IN PROCESS VECTOR AS BEING GLOBAL
\r
616 IRP A,,[0,A,B,C,D,E,PVP,TVP,TP,TB,AB,P,PB,SP,M,R]
\r
620 .GLOBAL CALER1,FINIS,VECTOP,VECBOT,INTFLG
\r
622 ;GLOBALS FOR MACROS IN VECTOR AND PAIR SPACE
\r
624 .GLOBAL VECLOC,PARLOC,TVBASE,TVLOC,PVLOC,PVBASE,SQUTBL,SQULOC
\r
625 .GLOBAL PARTOP,CODTOP,HITOP,HIBOT,SPECBIND,LCKINT
\r
626 .GLOBAL GETWNA,WNA,TFA,TMA,WRONGT,WTYP,WTYP1,WTYP2,WTYP3,CALER,CALER1
\r
630 ;STORAGE ALLOCATIN SPECIFICATION GLOBALS
\r
632 NSUBRS==600. ; ESTIMATE OF # OF SUBRS IN WOLD
\r
633 TPLNT"==2000 ;TEMP PDL LENGTHH
\r
634 GSPLNT==2000 ;INITIAL GLOBAL SP
\r
635 GCPLNT"==100. ;GARBAGE COLLECTOR'S PDL LENGTH
\r
636 PVLNT"==100 ;LENGTH OF INITIAL PROCESS VECTOR
\r
637 TVLNT"==6000 ;MAX TRANSFER VECTOR
\r
638 ITPLNT"==100 ;TP FOR GC
\r
639 PLNT"==1000 ;PDL FOR USER PROCESS
\r
641 ;LOCATIONS OF VARIOUS STORAGE AREAS
\r
643 PARBASE"==32000 ;START OF PAIR SPACE
\r
644 VECBASE"==44000 ;START OF VECTOR SPACE
\r
645 IFN MAIN,[PARLOC"==PARBASE
\r
651 ;SYMBLOS ASSOCIATED WITH STACK FRAMES
\r
652 ;TB POINTS TO CURRENT FRAME, THE SYMBOLS BELOW ARE OFFSETS ON TB
\r
654 FRAMLN==7 ;LENGTH OF A FRAME
\r
655 FSAV==-7 ;POINT TO CALLED FUNCTION
\r
656 OTBSAV==-6 ;POINT TO PREVIOUS FRAME AND CONTAINS TIME
\r
657 ABSAV==-5 ;ARGUMENT POINTER
\r
658 SPSAV==-4 ;BINDING POINTER
\r
659 PSAV==-3 ;SAVED P-STACK
\r
660 TPSAV==-2 ;TOP OF STACK POINTER
\r
663 RMT [EXPUNGE FRAMLN
\r
665 IFE MAIN,[RMT [EXPUNGE PCSAV TPSAV SPSAV PSAV ABSAV FSAV OTBSAV
\r
670 ; ARGS ARE PUSHED ON THE STACK AS TYPE VALUE PAIRS
\r
672 .GLOBAL .MCALL,.ACALL,FINIS,CONTIN,.ECALL,FATINS
\r
674 ; CALL WITH AN ASSEMBLE TIME KNOWN NUMBER OF ARGUMENTS
\r
679 IFGE <17-N>,.MCALL N,F
\r
680 IFL <17-N>,[PRINTC /LOSSAGE AT MCALL - TOO MANY ARGS
\r
686 ; CALL WITH RUN TIME KNOWN NUMBER OF ARGS IN AC SPECIFIED BY N
\r
693 ; STANDARD SUBROUTINE RETURN
\r
697 ; ARGUMENTS WILL NO LONGER BE ON THE STACK WHEN RETURN HAS HAPPENED
\r
698 ; VALUE SHOULD BE IN A AND B
\r
700 ;CHECK THAT THE ENTRY POINT WAS CALLED WITH N ARGUMENTS
\r
710 ; MACROS ASSOCIATED WIT INTERRUPT PROCESSING
\r
711 ;INTERRUPT IF THERE IS A WAITING INTERRUPT
\r
718 ;TO BECOME INTERRUPTABLE
\r
725 ;TO BECOME UNITERRUPTABLE
\r
732 ;MACRO TO BUILD TYPE DISPATCH TABLES EASILY
\r
734 DEFINE TBLDIS NAME,DEFAULT,LIST,LNTH
\r
737 REPEAT LNTH+1,DEFAULT
\r
748 ; DISPATCH FOR NUMPRI GOODIES
\r
750 DEFINE DISTBL NAME,DEFAULT,LIST
\r
751 TBLDIS NAME,DEFAULT,[LIST]NUMPRI
\r
754 DEFINE DISTBS NAME,DEFAULT,LIST
\r
755 TBLDIS NAME,DEFAULT,[LIST]NUMSAT
\r
764 ;MACROS FOR INITIIAL MUDDLE LIST STRUCTURE
\r
766 ;CHAR STRING MAKER, RETURNS POINTER AND TYPE
\r
769 DEFINE MACHAR NAME,TYPE,VAL,\LNT,WHERE,LAST
\r
772 LNT==.LENGTH \NAME!\
\r
781 ;MACRO TO DEFINE ATOMS
\r
783 DEFINE MAKAT NAME,TYAT,VALU,OBLIS,REFER,LOCN,\TVENT,FIRST
\r
791 TVENT==FIRST-.+2,,FIRST
\r
792 IFSN [LOCN],LOCN==TVENT
\r
793 ADDTV TATOM,TVENT,REFER
\r
798 \f;MACROS TO SWITCH BACK AND FORTH INTO AND OUT OF VECTOR AND PAIR SPACE
\r
801 DEFINE LOCSET LOCN,RETNAM,NEWLOC,OTHLOC,F1,F2,TOPWRD,\SAVE,SAVEF1,SAVEF2,NEW
\r
806 IFN F2,OTHLOC==SAVE
\r
829 LOCSET LOCN,VECRET,VECLOC,PARLOC,VECFLG,PARFLG,VECTOP
\r
833 LOCSET LOCN,PARRET,PARLOC,VECLOC,PARFLG,VECFLG,PARTOP
\r
836 DEFINE ADDSQU NAME,\SAVE
\r
845 DEFINE ADDTV TYPE,GOODIE,REFER,\SAVE
\r
855 ;MACRO TO ADD TO PROCESS VECTOR
\r
857 DEFINE ADDPV TYPE,GOODIE,OFFS,\SAVE
\r
861 IFSN OFFS,,OFFS==PVOFF
\r
872 ;MACRO TO DEFINE A FUNCTION ATOM
\r
874 DEFINE MFUNCTION NAME,TYPE,PNAME
\r
879 IFSE [PNAME],MAKAT NAME,T!TYPE,NAME,SYSTEM,<NAME-1>
\r
880 IFSN [PNAME],MAKAT [PNAME]T!TYPE,NAME,SYSTEM,<NAME-1>
\r
884 ; VERSION OF MQUOTE WITH IMPURE BIT ON
\r
886 DEFINE IMQUOTE ARG,PNAME,OBLIS,\LOCN
\r
891 IFSE [PNAME],MAKAT [ARG]<400000+TUNBOU>,0,OBLIS,LOCN
\r
893 IFSN [PNAME],MAKAT [PNAME]<400000+TUNBOU>,0,OBLIS,LOCN
\r
897 ;MACRO TO DEFINE QUOTED GOODIE
\r
899 DEFINE MQUOTE ARG,PNAME,OBLIS,\LOCN
\r
904 IFSE [PNAME],MAKAT [ARG]TUNBOU,0,OBLIS,LOCN
\r
905 IFSN [PNAME],MAKAT [PNAME]TUNBOU,0,OBLIS,LOCN
\r
912 DEFINE CHQUOTE NAME,\LOCN,TYP,VAL
\r
915 MACHAR [NAME]TYP,VAL
\r
921 ; SPECIAL ERROR MQUOTE
\r
923 DEFINE EQUOTE ARG,PNAME
\r
924 MQUOTE ARG,[PNAME]ERRORS TERMIN
\r
927 ; MACRO DO .CALL UUOS
\r
929 DEFINE DOTCAL NM,LIST,\LOCN
\r
938 IFSE [R][][<SETZ>\<Q>
\r
944 ; MACRO TO HANDLE FATAL ERRORS
\r
947 FATINS [ASCIZ /:
\e FATAL ERROR MSG
\e\r
956 ;CHARACTER TABLE GENERATING MACROS
\r
958 DEFINE SETSYM WRDL,BYTL,COD
\r
959 WRD!WRDL==<WRD!WRDL>&<MSK!BYTL>
\r
960 WRD!WRDL==<WRD!WRDL>\<<COD&177>_<<4-BYTL>*7+1>>
\r
963 DEFINE INIWRD N,INIT
\r
971 ;MACRO TO KILL THESE SYMBOLS LATER
\r
977 MSK!N==<177_<<4-N>*7+1>>#<-1>
\r
980 ;MACRO TO KILL MASKS LATER
\r
986 NWRDS==<NCHARS+CHRWD-1>/CHRWD
\r
988 REPEAT CHRWD,SETMSK \.RPCNT
\r
990 REPEAT NWRDS,INIWRD \.RPCNT,004020100402
\r
993 REPEAT NWRDS,OUTWRD \.RPCNT
\r
997 ;MACRO TO GENERATE THE DUMMIES EASLILIER
\r
999 DEFINE INITCH \DUM1,DUM2,DUM3
\r
1002 DEFINE SETCOD COD,LIST
\r
1006 SETSYM \DUM1,\DUM2,COD
\r
1010 DEFINE SETCHR COD,LIST
\r
1015 SETSYM \DUM1,\DUM2,COD
\r
1019 DEFINE INCRCO OCOD,LIST
\r
1023 SETSYM \DUM1,\DUM2,\<OCOD+.IRPCN>
\r
1027 DEFINE INCRCH OCOD,LIST
\r
1032 SETSYM \DUM1,\DUM2,\<OCOD+.IRPCN>
\r
1035 RMT [EXPUNGE DUM1,DUM2,DUM3
\r
1036 REPEAT NWRDS,KILLWD \.RPCNT
\r
1037 REPEAT CHRWD,KILMSK \.RPCNT
\r
1045 ;REDEFINE END DO ALL THE REMOTES (ON LAST PASS ONLY)
\r
1071 IF2 EXPUNGE PARFLG,VECFLG,CHRWD,NN,NUMPRI,PURITY,EAD,ACD,PUSHED
\r
1072 IF2 EXPUNGE INSTNT,DUMMY1,PRIM,PPLNT,GSPLNT,MEDIAT
\r
1077 ;MACROS TO PRINT VERSIONS OF PROGRAMS DURING ASSEMBLY
\r
1080 DEFINE NUMGEN SYM,\REST,N
\r
1084 IFN N,IFGE <31-N>,IFGE <N-20>,TOTAL==TOTAL*10.+<N-20>
\r
1085 IFN NN,NUMGEN REST
\r
1090 PRINTC /VERSION = N
\r
1109 DEFINE VATOM SYM,\LOCN,TV,A,B
\r
1115 A==<<<<SYM_-30.>&77>+40>_29.>
\r
1116 B==<<SYM_-24.>&77>
\r
1117 IFN B,A==A+<<B+40>_22.>
\r
1118 B==<<SYM_-18.>&77>
\r
1119 IFN B,A==A+<<B+40>_15.>
\r
1120 B==<<SYM_-12.>&77>
\r
1121 IFN B,A==A+<<B+40>_8.>
\r
1123 IFN B,A==A+<<B+40>_1.>
\r
1125 IFN <SYM&77>,<<SYM&77>+40>_29.
\r
1128 TV==LOCN-.+2,,LOCN
\r
1133 ;VATOM .FNAM1 ;"HACK REMOVED FOR EFFICIENCY"
\r
1136 ;MACRO TO REMMVE SYMBOLS OF THE FORM "GXXXXX"
\r
1138 DEFINE GEXPUN \SYM
\r
1141 NUMGEN \<SIXBIT /SYM!/>
\r
1153 DEFINE ..LOC NEW,OLD
\r
1154 .LIFS .LPUR"+.LIMPU"
\r
1167 ; PURE - MACRO TO SWITCH LOADING TO PURE CORE.
\r
1170 IFE PURITY-1, ..LOC .LPUR,.LIMPU
\r
1174 ; IMPURE - MACRO TO SWITCH LOADING TO IMPURE CORE.
\r
1177 IFE PURITY, ..LOC .LIMPU,.LPUR
\r