1 ; THE FOLLOWING INFORMATION IS MEANT AS GUIDE TO THE CARE AND FEEDING
2 ; OF MUDDLE. IT ATTEMPTS TO SPECIFY PROGRAMMING CONVENTIONS AND
3 ; SUPPLY SYMBOLS AND MACROS NEEDED BY ALL MODULES IN A MUDDLE.
5 ; FOR EFFICIENCY THE STANDARD MODE OF RUNNING IS UNINTERRUPTABLE.
6 ; WITH EXPLICIT CHECKS FOR PENDING INTERRUPTS. THE INTGO MACRO
7 ; PERFORMS THE APPROPRIATE CHECK
9 ; FOR INTERRUPTS TO WORK IN INTERRUPTABLE CODE, IT MUST
10 ; BE ABSOLUTELY PURE. BETWEEN ANY TWO INSTRUCTIONS OF
11 ; INTERRUPTABLE CODE THERE MAY BE AN INTERUPT IN WHICH
12 ; A COMPACTING GARBAGE COLLECTION MAY OCCUR.
13 ; NOTE: A SCRATCH AC MAY CONTAIN POINTERS TO GC SPACE IN
14 ; INTERRUPTABLE CODE OR DURING AN INTGO IF THE TYPE CODE FOR THAT AC'S
15 ; SLOT IN THE PROCESS VECTOR IS SET TO REFLECT ITS CONTENTS.
17 ; ALL ATOM POINTERS WILL BE REFERRED TO IN ASSEMBLED CODE BY
18 ; MQUOTE <PNAME> -- FOR NORMAL ATOMS
19 ; EQUOTE <PNAME> -- FOR ERROR COMMENT ATOMS
21 ; FUNCTION CALLS TO INITIAL FUNCTIONS WILL BE CALLED USING THE FOLLOWING:
23 ; MCALL N,<PNAME> ;SEE MCALL MACRO
24 ; ACALL AC,<PNAME> ; SEE ACALL MACRO
26 ; UNLESS PNAME IS NOT A VALID MIDAS SYMBOL, IN WHICH CASE ANOTHER INTERNAL
29 ; WHEN CALLING A SUBR THROUGH AN INDEX OR INDIRECT, THE UUOS GENERATED
30 ; BY THE MACROS SHOULLD BE USED.
31 ; THESE ARE .MCALL AND .ACALL -- EXAMPLE:
38 \f; ORGANIZATION OF CORE STORAGE IN THE MUDDLE SYSTEM (ENVIRONMENT)
40 ; 20: SPECIAL CODE FOR UUO AND INTERUPTS
42 ;CODBOT: WORD CONTAINING LOCATION OF BOTTOMMOST WORD OF IMPURE CODE
46 ;CODTOP: WORD CONTAINING LOCATION OFWORD AFTER LAST WORD OF CODE
48 ;PARBOT: WORD CONTAINING LOCATION OFBOTTOMMOST LIST
52 ;PARTOP: WORD CONTAINING LOCATION OFWORD AFTER LAST PAIR WORD
54 ;VECBOT: WORD CONTAINING LOCATION OFFIRST WORD OF VECTORS
58 ;VECTOP: WORD CONTAINING LOCATION OFWORD AFTER TOPMOST VECTOR
59 ; THE WORD BEFORE VECTOP IS THE DOPE FOR THE LAST VECTOR
61 ; --GC MARK PDL (SOMETIMES NOT THERE)--
63 ;CORTOP: TOP OF LOW-SEGMENT/IMPURE CORE
65 ;600000: START OF PURE CODE (SHARED ALSO)
72 \f; BASIC DATA TYPES PRE-DEFINED IN MUDDLE
74 ; PRIMITIVE DATA TYPES
75 ; IF T IS A DATA TYPE THEN $T=[T,,0]
77 ; DATA TYPES ARE ASSIGNED BY THE TYPMAK MACRO IN SOME ARBITRARY ORDER
80 ;TLOSE ;ILLEGAL TYPE (USED PRIMARILY FOR ERRORS)
82 ;TFLOAT ;FLOATING POINT
83 ;TCHRS ;WORD OF UP TO 5 ASCII CHARACTERS
84 ;TENTRY ; MARKS BEGINNING OF A FRAME ON TP STACK
85 ;TSUBR ;BUILT IN FUNCTION WITH EVALUATED ARGS
86 ;TFSUBR ;BUILT IN FUNCTION WITH UN-EVALUATED ARGS
87 ;TUNBOU ;TYPE GIVEN TO UNBOUND OR UNASSIGNED ATOM
88 ;TBIND ;MARKS BEGINNING OF BINDING BLOCK ON TP STACK
89 ;TILLEG ;POINTER PREVIOUSLY HERE NOW ILLEGAL
90 ;TTIME ;UNIQUE NUMBER (SEE FLOAD)
91 ;TLIST ;POINTER TO LIST ELEMENT
92 ;TFORM ;POINTER TO LIST ELEMENT BUT USED AS AN EXPRESSION
93 ;TSEG ;SAME AS FORM BUT VALUE IS MUST BE STRUCTURED AND IS USED
95 ;TEXPR ;POINTER TO LIST ELEMENT BUT USED AS AN INTERPRETIVE FUNCTION
96 ;TFUNAR ;LIKE TEXPR BUT HAS PARTIALLY EVALUATED ARGS
97 ;TLOCL ;LOCATIVE TO LIST ELEMENT (SEE AT,IN AND SETLOC)
99 ;TDEFER ;POINTER TO REAL VALUE (ONLY APPEARS AS CAR OF LIST)
100 ;TUVEC ;AOBJN POINTER TO UNIFORM VECTOR
101 ;TOBLS ;AOBJN TO UVEC OF LISTS OF ATOMS. USED AS SYMBOL TABLE
102 ;TVEC ;VECTOR (AOBJN POINTER TO GENERALIZED VECTOR)
103 ;TCHAN ;VECTOR OF INFO DESCRIBING AN I/O CHANNEL
104 ;TLOCV ;LOCATIVE TO GENERAL VECTOR (SEE AT,IN AND SETLOC)
105 ;TTVP ;POINTER TO TRANSFER VECTOR
106 ;TBVL ;BEGINS A VECTOR BINDING ON THE TP STACK
107 ;TTAG ;VECTOR OF INFO SPECIFYING A GENERALIZED TAG
108 ;TPVP ;POINTER TO PROCESS VECTOR
109 ;TLOCI ;POINTER TO ATOM VALUE ON STACK (INTERNAL NOT SEEN BY USER)
110 ;TTP ;POINTER TO MAIN MARKED STACK
111 ;TSP ;POINTER TO CURRENT BINDINGS ON STACK
112 ;TLOCS ;LOCATIVE TO STACK (NOT CURRENTLY USED)
113 ;TPP ;POINTER TO PLANNER PDL (NOT CURRENTLY USED)
114 ;TPLD ;POINTER TO P-STACK (UNMARKED)
115 ;TARGS ;POINTER TO AN ARG BLOCK (HAIRY KLUDGE)
116 ;TAB ;SAVED AB (NOT GIVEN TO USER)
117 ;TTB ;SAVED TB (NOT GIVEN TO USER)
118 ;TFRAME ;USER POINTER TO STACK FRAME
119 ;TCHSTR ;BYTE POINTER TO STRING OF CHARS (COUNT ALSO INCLUDED)
120 ;TATOM ;POINTER TO ATOM
121 ;TLOCD ;USER LOCATIVE TO ATOM VALUE
122 ;TBYTE :POINTER TO ARBITRARY BYTE STRING (NOT CURRENTLY USED)
123 ;TENV ;USER POINTER TO FRAME USED AS AN ENVIRONMENT
124 ;TACT ;USER POINTER TO FRAME FOR A NAMED ACTIVATION
125 ;TASOC ;ASSOCIATION TRIPLE
126 ;TLOCU ;LOCATIVE TO UVECTOR ELEMENT (SEE AT,IN AND SETLOC)
127 ;TLOCS ;LOCATIVE TO A BYTE IN A CHAR STRING (SEE AT,IN AND SETLOC)
128 ;TLOCA ;LOCATIVE TO ELEMENT IN ARG BLOCK
133 ;TINFO ;POINTER TO LIST ELEMENT USED WITH ARG POINTERS
136 ;TCSUBR ;CARE SUBR (USED ONLY WITH CUDDLE SEE -- WJL)
138 ;TRSUBR ;COMPILED PROGRAM (ACTUALLY A VECTOR POINTER)
139 ;TCODE ;UNIFORM VECTOR OF INSTRUCTIONS
141 ;TBITS ;GENERAL BYTE POINTER
142 ;TSTORA ;POINTER TO NON GC IMPURE STUFF
143 ;TPICTU ;E&S CODE IN NON GC SPACE
144 ;TSKIP ;ENVIRONMENT SPLICE
146 ;TINTH ;INTERRUPT HEADER
147 ;THAND ;INTERRUPT HANDLER
148 ;TLOCN ;LOCATIVE TO ASSOCIATION
149 ;TDECL ;POINTER TO LIST OF ATOMS AND TYPE DECLARATIONS
150 ;TDISMI ;TYPE MEANING DONT RUN REST OF HANDLERS
151 ;TDCLI ; INTERNAL TYPE FOR SAVED FUNCTION BODY
152 ;TMENT ; POINTER TO MAIN ENTRY OF WHICH THIS IS PART
153 ;TENTER ; NON-MAIN ENTRY TO AN RSUBR
154 ;TSPLICE ; RETURN FROM READ MACRO MEANS SPLICE SUBELEMENTS IN
155 ;TPCODE ; PURE CODE POINTER IN FUNNY FORMAT
158 ;TGATOM ; ATOM WITH GVALUE
159 ;TREADA ; READ ACTIVATION HACK
160 ;TUNWIN ; INTERNAL FOR UNWIND SPEC ON STACK
161 ;TUBIND ; BINDING OF UNSPECIAL ATOM
163 ;TOFFS ; OFFSET FOR NTHING AND PUTTING
165 ; STORGE ALLOCATION TYPES. ALLOCATED BY AN "IRP" LATER IN THIS FILE
168 ;S1WORD ;UNMARKED STUFF OF NO INTEREST TO AGC
169 ;S2WORD ;POINTERS TO ELEMENTS IN PAIR SPACE (LIST, FORM, EXPR ETC.)
170 ;S2DEFR ;DEFERRED LIST VALUES
171 ;SNWORD ;POINTERS TO UNIFORM VECTORS
172 ;S2NWOR ;POINTERS TO GENERAL VECTORS
173 ;STPSTK ;STACK POINTERS
174 ;SPSTK ;UNMARKED STACK POINTERS
175 ;SARGS ;POINTERS TO ARG BLOCKS (USER)
176 ;SABASE ;POINTER TO ARG BLOCK (INTERNAL)
177 ;STBASE ;POINTER TO FRAME (INTERNAL)
178 ;SFRAME ;POINTER TO FRAME (USER)
179 ;SBYTE ;GENERAL BYTE POINTER
180 ;SATOM ;POINTER TO ATOM
181 ;SLOCID ;POINTER TO VALUE CELL OF ATOM
182 ;SPVP ;PROCESS VECTORS
183 ;SCHSTR ;ASCII BYTE POINTER
184 ;SASOC ;POINTER TO ASSOCIATION BLOCK
185 ;SINFO ;LIST CELL CONTAINING EXTRA ARGBLOCK INFO
186 ;SSTORE ;NON GC STORGAGE POINTER
187 ;SLOCA ;ARG BLOCK LOCATIVE
188 ;SLOCD ;USER VALUE CELL LOCATIVE
189 ;SLOCS ;LOCATIVE TO STRING
190 ;SLOCU ;LOCATIVE TO UVECTOR
191 ;SLOCV ;LOCATIVE TO GENERAL VECTOR
192 ;SLOCL ;LOCATIVE TO LIST ELEENT
193 ;SLOCN ;LOCATIVE TO ASSOCIATION
194 ;SGATOM ;REALLY ATOM BUT SPECIAL GC HACK
195 ;SOFFS ;OFFSET (SAT BECAUSE LIST IN LH, FIX IN RH)
197 ;NOTE: TO FIND OUT IF A GIVEN STORAGE ALLOCATION TYPE NEEDS TO BE DEFERRED, REFER TO
198 ;LOCATION "MKTBS:" OFFSET BY THE STORAGE TYPE. IF IT IS <0, THAT SAT NEEDS TO BE DEFERRED.
200 ;ONE WAY TO DO THIS IS TO PUT A REAL TYPE CODE IN AC A AND PUHSJ P,NWORDT
201 ; A WILL CONTAIN 1 IF NO DEFERRED NEEDED OR 2 IF DEFER IS NEEDED
203 \f; SOME MUDDLE DATA FORMATS
205 ; FORMAT OF LIST ELEMENT
207 ; WORD 1: SIGN BIT, RESERVED FOR GARBAGE COLLECTOR
208 ; BITS 1-17 TYPE OF FIRST ELEMENT OF LIST
209 ; BITS 18-35 POINTS TO REST OF LIST (ALWAYS ANOTHER LIST OR 0)
211 ; WORD 2: DATUM OF FIRST ELEMENT OF LIST OF TYPE SPECIFIED
213 ; IF DATUM REQUIRES 54 BITS TO SPECIFY, TYPE WILL BE "TDEFER" AND
214 ; VALUE WILL BE AN 18 BIT POINTER TO FULL 2 WORD PAIR
218 ;FORMAT OF GENERAL VECTOR (OF N ELEMENTS)
219 ;POINTED INTO BY AOBJN POINTER
220 ;A GENERAL VECTOR HAS FEWER THAN 2^16 ELEMENTS
223 ; TYPE<1> TYPE OF FIRST OBJECT (THE RIGHT HALF OF THE TYPE WORD MIGHT BE NONZERO)
224 ; OBJ<1> OBJECT OF SPECIFIED TYPE
232 ; VD(1)-VECTOR DOPE--SIGN-NOT UNIFORM, BITS 1-17 TYPE,,18-35 GROWTH/SHRINKAGE
233 ; VD(2)-VECTOR DOPE--SIGN-G.C.; BITS 1-17 ARE 2*N+1,,18-35 G.C. RELOCATION EITHER UP OR DOWN
236 \f;SPECIAL VECTORS IN THE INITIAL SYSTEM
238 ;THE SYSTEM KEEPS RELEVANT INFORMATION CONCERNING ALL TYPES
239 ;IN A TYPE VECTOR, TYPVEC, WHICH MAY BE INDEXED BY THE TYPE NUMBER
240 ;FOUND IN THE TYPE FIELD OF ANY GOODIE. TABLES APLTYP AND EVLTYP ALSO EXIST
241 ;THEY SPECIFY HOW DIFFERENT TYPES EVAL AND APPLY.
243 ;TYPE IN AC A, PUSHJ P,SAT RETURNS STORAGE TYPE IN A
245 ;TYPE TO NAME OF TYPE TRANSLATION TABLE
247 ; TATOM,,<STORAGE ALLOCATION TYPE>+CHBIT+TMPLBT
251 ; CHBIT ON MEANS YOU CANT RANDOMLY CHTYPE INTO THIS TYPE
252 ; TMPLBT ON MEANS A TEMPLATE EXISTS DESCRIBING THIS
254 ;AN ATOM IS A BLOCK IN VECTOR SPACE WITH THE FOLLOWING FORMAT
256 ; <TUNBOU OR TLOCI>,,<0 OR BINDID> ; TLOCI MEANS VAL EXISTS.
258 ; ; BINDID SPECS ENV IN
259 ; WHICH LOCAL VAL EXISTS
260 ; <LOCATIVE TO VALUE OR 0>
261 ; <POINTER TO OBLIST OR 0>
264 ; <LNTH>,,0 (SIGN BIT FOR G.C. RH FOR G.C. RELOCATION)
266 ;POINTERS TO INITIAL STRUCTURES AND ATOMS NEEDED BY COMPILED CODE
267 ;WILL BE POINTED TO BY THE TRANSFER VECTOR
268 ;A POINTER TO THIS VECTOR ALWAYS EXISTS IN AC TVP
269 ;THE FORMAT OF THIS VECTOR IS:
279 ;INFORMATION CONCERNING EACH PROCESS IS KEPT IN THE PROCESS VECTOR
280 ;A POINTER TO THE CURRENT PROCESS ALWAYS EXISTS IN AC PVP
281 ;THE FORMAT OF A PROCESS VECTOR IS:
284 ; PROCID ;UNIQUE ID OF THIS PROCESS
286 ; 20 ELEMENTS (I.E. 40 WORDS) CONTAINIG SAVED ACS
287 ; CAN BE REFERENCED SYMBOLICALLY USING SYMBOLS
288 ; OF THE FORM AC!STO(PVP)
290 ; OTHER PROCESS LOCAL INFO LIKE LEXICAL STATE, PROCESS STATE,LAST RESUMER
299 ;FORMAT OF PUSH DOWN STACKS USED AND CONVENTIONS
302 PRINTC /MUDDLE - INSERT FILE FOR ALL PROGRAMS
311 P"=17 ;THE UNMARKED PDL POINTER (USED BY THE OUTSIDE WORLD AND MUDDLE)
312 R"=16 ;REFERENCE BASE FOR RSUBRS
313 M"=15 ;CODE BASE FOR RSUBRS
314 SP"=10 ;SPECIAL PDL (USED BY MUDDLE FOR VARIABLE BINDINGS)(SPECIAL PDL IS PART OF TP)
315 TP"=13 ;MARKED PDL (USED BY MUDDLE FOR ARGS TO FUNCTIONS
316 ;AND MARKED TEMPORARIES)
317 TB"=12 ;MARKED PDL BASE POINTER AND CURRENT FRAME POINTER
318 AB"=11 ;ARGUMENT PDL BASE (MARKED)
319 ;AB IS AN AOBJN POINTER TO THE ARGUMENTS
320 FRM"=14 ;FUNNY FRAME POINTER
321 TVP"=7 ;TRANSFER VECTOR POINTER
322 PVP"=6 ;PROCESS VECTOR POINTER
324 ;THE FOLLOWING ACS ARE 'SCRATCH' FOR MUDDLE
326 A"=1 ; A AND B CONTAIN TYPE AND VALUE UPON FUNCTION RETURNS
332 NIL"=0 ;END OF LIST MARKER
334 ;MACRO TO DEFINE MAIN IF NOT DEFINED
339 ; IFE <<<.AFNM1>_-24.>-<SIXBIT / T./>>,ITS==0
340 IFN ITS,[PRINTC /ITS VERSION
342 IFE ITS,[PRINTC /TENEX VERSION
347 ; SEGMENT INFO IF TOPS 20
351 GCSEG==36 ; GC COPY SEGMENT
352 STATM==40 ; STORED IN GC DUMP BYTE POINTER TO SAY
366 \f;DEFINE TYPES AND $TYPES AND IF MAIN NOT 0, MAKE THE $TYPE WORDS
372 NUMPRI==-1 ;NUMBER OF PRIMITIVE TYPES
374 DEFINE TYPMAK SAT,LIST
380 IFN MAIN,[$!T!B=[T!B,,0]
390 ;MACRO TO ADD STUFF TO TYPE VECTOR
393 DEFINE ADDTYP SAT,TYPE,NAME,CHF,IMP,\CH
396 IFSE [NAME]IN,CH==CHBIT
398 IFSN [NAME],[IFSE [NAME]IN,MQUOTE INTERNAL
399 IFSN [NAME]IN,[IFSE [IMP],MQUOTE [NAME]
400 IFSN [IMP],IMQUOTE [NAME]
403 IFSE [NAME],[IFSE [IMP],MQUOTE TYPE
404 IFSN [IMP],IMQUOTE TYPE
409 IF2 [IFE MAIN,[DEFINE TYPMAK SAT,LIST
416 ;DEFINE THE STORAGE ALLOCATION TYPES IN THE WORLD
420 GENERAL==440000,,0 ;FLAG FOR BEING A GENERAL VECTOR
426 IRP A,,[1WORD,2WORD,2DEFRD,NWORD,2NWORD,TPSTK,PSTK,ARGS
427 ABASE,TBASE,FRAME,BYTE,ATOM,LOCID,PVP,CHSTR,ASOC,INFO,STORE
428 LOCA,LOCD,LOCS,LOCSX,LOCU,LOCV,LOCL,LOCN,GATOM,LOCR,LOCT,RDTB,LOCB
448 ;MACRO FOR SAVING STUFF TO DO LATER
452 DEFINE HERE G00002,G00003
457 HERE [DEFINE HERE G00002,G00003
458 G00002!][A!G00003!TERMIN]
463 RMT [EXPUNGE GENERAL,NUMSAT
481 C.INTL==200 ; INTERRUPT ON LINE FEEDS
487 ; FLAG INDICATING VECTOR FOR GCHACK
491 ; DEFINE SYMBLOS FOR VARIOUS OBLISTS
493 SYSTEM==0 ;MAIN SYSTEM OBLIST
494 ERRORS==1 ;ERROR COMMENT OBLIST
495 INTRUP==2 ;INERRUPT OBLIST
496 MUDDLE==3 ;MUDDLE GLOBAL SYMBOLS (ADDRESSES)
498 RMT [EXPUNGE SYSTEM,ERRORS,INTRUP
500 ; DEFINE SYMBOLS FOR PROCESS STATES
508 IFE MAIN,[RMT [EXPUNGE RESMBL,RUNABL,RUNING,DEAD,BLOCKED
510 ]
\f;BUILD THE TYPE CODES AND ADD STUFF TO TYPVEC AND DEFINE $!TYPE)
512 IFN MAIN,[RMT [SAVE==.
518 TYPMAK S1WORD,[[LOSE],[FIX,,,1],[FLOAT,,,1],[CHRS,CHARACTER,,1],[ENTRY,IN],[SUBR,,1]]
519 TYPMAK S1WORD,[[FSUBR,,1]]
520 TYPMAK S1WORD,[[UNBOUND,,1],[BIND,IN],[ILLEGAL,,1],TIME]
521 TYPMAK S2WORD,[[LIST,,,1],[FORM,,,1],[SEG,SEGMENT,,1],[EXPR,FUNCTION,,1]]
522 TYPMAK S2WORD,[[FUNARG,CLOSURE]]
523 TYPMAK SLOCL,[[LOCL,,,1]]
524 TYPMAK S2WORD,[[FALSE,,,1]]
525 TYPMAK S2DEFRD,[[DEFER,IN]]
526 TYPMAK SNWORD,[[UVEC,UVECTOR,,1],[OBLS,OBLIST,1,1]]
527 TYPMAK S2NWORD,[[VEC,VECTOR,,1],[CHAN,CHANNEL,1,1]]
528 TYPMAK SLOCV,[[LOCV,,,1]]
529 TYPMAK S2NWORD,[[TVP,IN],[BVL,IN],[TAG,,1]]
530 TYPMAK SPVP,[[PVP,PROCESS]]
531 TYPMAK STPSTK,[[LOCI,IN],[TP,IN],[SP,IN],[LOCS,IN]]
532 TYPMAK S2WORD,[[MACRO]]
533 TYPMAK SPSTK,[[PDL,IN]]
534 TYPMAK SARGS,[[ARGS,TUPLE,1,1]]
535 TYPMAK SABASE,[[AB,IN]]
536 TYPMAK STBASE,[[TB,IN]]
537 TYPMAK SFRAME,[[FRAME,,,1]]
538 TYPMAK SCHSTR,[[CHSTR,STRING,,1]]
539 TYPMAK SATOM,[[ATOM,,,1]]
540 TYPMAK SLOCID,[[LOCD,,,1]]
541 TYPMAK SBYTE,[[BYTE,BYTES]]
542 TYPMAK SFRAME,[[ENV,ENVIRONMENT],[ACT,ACTIVATION,1,1]]
544 TYPMAK SLOCU,[[LOCU,,,1]]
545 TYPMAK SLOCS,[[LOCSX,,,1]]
546 TYPMAK SLOCA,[[LOCA,,,1]]
547 TYPMAK S1WORD,[[CBLK,IN]]
548 TYPMAK STMPLT,[[TMPLT,TEMPLATE,1,1]]
549 TYPMAK SLOCT,[[LOCT]]
550 TYPMAK SLOCR,[[LOCR,,,1]]
551 TYPMAK SINFO,[[INFO,IN]]
552 TYPMAK S2NWORD,[[QRSUBR,QUICK-RSUBR,1],[QENT,QUICK-ENTRY,1]]
553 TYPMAK SRDTB,[[RDTB,IN]]
555 TYPMAK S1WORD,[[WORD,,,1]]
556 TYPMAK S2NWORD,[[RSUBR,,,1]]
557 TYPMAK SNWORD,[[CODE,,,1]]
558 TYPMAK S1WORD,[[SATC,PRIMTYPE-C,1]]
559 TYPMAK S1WORD,[[BITS]]
560 TYPMAK SSTORE,[[STORAGE,,,1],PICTURE]
561 TYPMAK STPSTK,[[SKIP,IN]]
562 TYPMAK SATOM,[[LINK,,1]]
563 TYPMAK S2NWORD,[[INTH,IHEADER,1],[HAND,HANDLER,1]]
564 TYPMAK SLOCN,[[LOCN,LOCAS,,1]]
565 TYPMAK S2WORD,[[DECL,,,1]]
566 TYPMAK SATOM,[DISMISS]
567 TYPMAK S2WORD,[[DCLI,IN]]
568 TYPMAK S2NWORD,[[ENTER,RSUBR-ENTRY,1,1]]
569 TYPMAK S2WORD,[SPLICE]
570 TYPMAK S1WORD,[[PCODE,PCODE,1],[TYPEW,TYPE-W,1],[TYPEC,TYPE-C,1]]
571 TYPMAK SGATOM,[[GATOM,IN]]
572 TYPMAK SFRAME,[[READA,,1]]
573 TYPMAK STBASE,[[UNWIN,IN]]
574 TYPMAK S1WORD,[[UBIND,IN]]
576 TYPMAK SDEFQ,[[DEFQ,IN]]
577 TYPMAK SOFFS,[[OFFS,OFFSET]]
578 IFN MAIN,[RMT [LOC SAVE
583 RMT [EQUALS XP EXPUNGE
600 MONMSK==TYPMSK#777777
622 .GLOBAL .MONWR,.MONRD,.MONEX
623 RMT [IF2 IFE MAIN, XP .WRMON,.RDMON,.EXMON
630 IFE MAIN,[RMT [XP SATMSK,TYPMSK,MONMSK,CHBIT
633 \f;MUDDLE WIDE GLOBALS
635 ;DEFINE ENTRIES IN PROCESS VECTOR AS BEING GLOBAL
638 IRP A,,[0,A,B,C,D,E,PVP,TVP,TP,TB,AB,P,PB,SP,M,R,FRM]
642 .GLOBAL CALER1,FINIS,VECTOP,VECBOT,INTFLG
644 ;GLOBALS FOR MACROS IN VECTOR AND PAIR SPACE
646 .GLOBAL VECLOC,PARLOC,TVBASE,TVLOC,PVLOC,PVBASE,SQUTBL,SQULOC
647 .GLOBAL PARTOP,CODTOP,HITOP,HIBOT,SPECBIND,LCKINT
648 .GLOBAL GETWNA,WNA,TFA,TMA,WRONGT,WTYP,WTYP1,WTYP2,WTYP3,CALER,CALER1
652 ;STORAGE ALLOCATIN SPECIFICATION GLOBALS
654 NSUBRS==600. ; ESTIMATE OF # OF SUBRS IN WOLD
655 TPLNT"==2000 ;TEMP PDL LENGTHH
656 GSPLNT==2000 ;INITIAL GLOBAL SP
657 GCPLNT"==100. ;GARBAGE COLLECTOR'S PDL LENGTH
658 PVLNT"==100 ;LENGTH OF INITIAL PROCESS VECTOR
659 TVLNT"==6000 ;MAX TRANSFER VECTOR
660 ITPLNT"==100 ;TP FOR GC
661 PLNT"==1000 ;PDL FOR USER PROCESS
663 ;LOCATIONS OF VARIOUS STORAGE AREAS
665 PARBASE"==32000 ;START OF PAIR SPACE
666 VECBASE"==44000 ;START OF VECTOR SPACE
667 IFN MAIN,[PARLOC"==PARBASE
673 ;SYMBLOS ASSOCIATED WITH STACK FRAMES
674 ;TB POINTS TO CURRENT FRAME, THE SYMBOLS BELOW ARE OFFSETS ON TB
676 FRAMLN==7 ;LENGTH OF A FRAME
677 FSAV==-7 ;POINT TO CALLED FUNCTION
678 OTBSAV==-6 ;POINT TO PREVIOUS FRAME AND CONTAINS TIME
679 ABSAV==-5 ;ARGUMENT POINTER
680 SPSAV==-4 ;BINDING POINTER
681 PSAV==-3 ;SAVED P-STACK
682 TPSAV==-2 ;TOP OF STACK POINTER
687 IFE MAIN,[RMT [EXPUNGE PCSAV TPSAV SPSAV PSAV ABSAV FSAV OTBSAV
692 ; ARGS ARE PUSHED ON THE STACK AS TYPE VALUE PAIRS
694 .GLOBAL .MCALL,.ACALL,FINIS,CONTIN,.ECALL,FATINS,.ERRUU
696 ; CALL WITH AN ASSEMBLE TIME KNOWN NUMBER OF ARGUMENTS
705 IFGE <17-N>,.MCALL N,F
706 IFL <17-N>,[PRINTC /LOSSAGE AT MCALL - TOO MANY ARGS
712 ; CALL WITH RUN TIME KNOWN NUMBER OF ARGS IN AC SPECIFIED BY N
719 ; STANDARD SUBROUTINE RETURN
723 ; ARGUMENTS WILL NO LONGER BE ON THE STACK WHEN RETURN HAS HAPPENED
724 ; VALUE SHOULD BE IN A AND B
726 ;CHECK THAT THE ENTRY POINT WAS CALLED WITH N ARGUMENTS
736 ; MACROS ASSOCIATED WIT INTERRUPT PROCESSING
737 ;INTERRUPT IF THERE IS A WAITING INTERRUPT
744 ;TO BECOME INTERRUPTABLE
751 ;TO BECOME UNITERRUPTABLE
758 ;MACRO TO BUILD TYPE DISPATCH TABLES EASILY
760 DEFINE TBLDIS NAME,DEFAULT,LIST,LNTH,LH,\NN,FLG
769 IFE <NN-TYPE>,[FLG==1
784 ; DISPATCH FOR NUMPRI GOODIES
786 DEFINE DISTBL NAME,DEFAULT,LIST
787 TBLDIS NAME,DEFAULT,[LIST]NUMPRI,0
790 DEFINE DISTBS NAME,DEFAULT,LIST
791 TBLDIS NAME,DEFAULT,[LIST]NUMSAT,0
794 DEFINE DISTB2 NAME,DEFAULT,LIST
795 TBLDIS NAME,DEFAULT,[LIST]NUMSAT,400000
803 ;MACROS FOR INITIIAL MUDDLE LIST STRUCTURE
805 ;CHAR STRING MAKER, RETURNS POINTER AND TYPE
808 DEFINE MACHAR NAME,TYPE,VAL,\LNT,WHERE,LAST
820 ;MACRO TO DEFINE ATOMS
822 DEFINE MAKAT NAME,TYAT,VALU,OBLIS,REFER,LOCN,\TVENT,FIRST
830 TVENT==FIRST-.+2,,FIRST
831 IFSN [LOCN],LOCN==TVENT
832 ADDTV TATOM,TVENT,REFER
837 \f;MACROS TO SWITCH BACK AND FORTH INTO AND OUT OF VECTOR AND PAIR SPACE
840 DEFINE LOCSET LOCN,RETNAM,NEWLOC,OTHLOC,F1,F2,TOPWRD,\SAVE,SAVEF1,SAVEF2,NEW
868 LOCSET LOCN,VECRET,VECLOC,PARLOC,VECFLG,PARFLG,VECTOP
872 LOCSET LOCN,PARRET,PARLOC,VECLOC,PARFLG,VECFLG,PARTOP
875 DEFINE ADDSQU NAME,\SAVE
884 DEFINE ADDTV TYPE,GOODIE,REFER,\SAVE
894 ;MACRO TO ADD TO PROCESS VECTOR
896 DEFINE ADDPV TYPE,GOODIE,OFFS,\SAVE
900 IFSN OFFS,,OFFS==PVOFF
911 ;MACRO TO DEFINE A FUNCTION ATOM
913 DEFINE MFUNCTION NAME,TYPE,PNAME
914 XMFUNCTION NAME,TYPE,PNAME,0
917 DEFINE IMFUNCTION NAME,TYPE,PNAME
918 XMFUNCTION NAME,TYPE,PNAME,400000
921 DEFINE XMFUNCTION NAME,TYPE,PNAME,IMP
926 IFSE [PNAME],MAKAT NAME,T!TYPE+IMP,NAME,SYSTEM,<NAME-1>
927 IFSN [PNAME],MAKAT [PNAME]T!TYPE+IMP,NAME,SYSTEM,<NAME-1>
931 ; VERSION OF MQUOTE WITH IMPURE BIT ON
933 DEFINE IMQUOTE ARG,PNAME,OBLIS,\LOCN
938 IFSE [PNAME],MAKAT [ARG]<400000+TUNBOU>,0,OBLIS,LOCN
940 IFSN [PNAME],MAKAT [PNAME]<400000+TUNBOU>,0,OBLIS,LOCN
944 ;MACRO TO DEFINE QUOTED GOODIE
946 DEFINE MQUOTE ARG,PNAME,OBLIS,\LOCN
951 IFSE [PNAME],MAKAT [ARG]TUNBOU,0,OBLIS,LOCN
952 IFSN [PNAME],MAKAT [PNAME]TUNBOU,0,OBLIS,LOCN
959 DEFINE CHQUOTE NAME,\LOCN,TYP,VAL
968 ; SPECIAL ERROR MQUOTE
970 DEFINE EQUOTE ARG,PNAME
971 MQUOTE ARG,[PNAME]ERRORS TERMIN
974 ; MACRO DO .CALL UUOS
976 DEFINE DOTCAL NM,LIST,\LOCN
985 IFSE [R][][<SETZ>\<Q>
991 ; MACRO TO HANDLE FATAL ERRORS
994 FATINS [ASCIZ /:
\e FATAL ERROR MSG
\e\r/]
1002 ;CHARACTER TABLE GENERATING MACROS
1004 DEFINE SETSYM WRDL,BYTL,COD
1005 WRD!WRDL==<WRD!WRDL>&<MSK!BYTL>
1006 WRD!WRDL==<WRD!WRDL>\<<COD&177>_<<4-BYTL>*7+1>>
1009 DEFINE INIWRD N,INIT
1017 ;MACRO TO KILL THESE SYMBOLS LATER
1023 MSK!N==<177_<<4-N>*7+1>>#<-1>
1026 ;MACRO TO KILL MASKS LATER
1032 NWRDS==<NCHARS+CHRWD-1>/CHRWD
1034 REPEAT CHRWD,SETMSK \.RPCNT
1036 REPEAT NWRDS,INIWRD \.RPCNT,004020100402
1039 REPEAT NWRDS,OUTWRD \.RPCNT
1043 ;MACRO TO GENERATE THE DUMMIES EASLILIER
1045 DEFINE INITCH \DUM1,DUM2,DUM3
1048 DEFINE SETCOD COD,LIST
1050 DUM1==<CHAR+CHROFF>/5
1051 DUM2==CHROFF+CHAR-DUM1*5
1052 SETSYM \DUM1,\DUM2,COD
1053 IFE CHROFF,[DUM1==<CHAR+200>/5
1054 DUM2==<CHAR+200-<DUM1*5>>
1055 SETSYM \DUM1,\DUM2,COD
1060 DEFINE SETCHR COD,LIST
1062 DUM3==<"CHAR>+CHROFF
1065 SETSYM \DUM1,\DUM2,COD
1066 IFE CHROFF,[DUM3==DUM3+200
1069 SETSYM \DUM1,\DUM2,COD
1074 DEFINE INCRCO OCOD,LIST
1076 DUM1==<CHAR+CHROFF>/5
1077 DUM2==CHROFF+CHAR-DUM1*5
1078 SETSYM \DUM1,\DUM2,\<OCOD+.IRPCN>
1079 IFE CHROFF,[DUM1==<CHAR+200>/5
1080 DUM2==<CHAR+200-<DUM1*5>>
1081 SETSYM \DUM1,\DUM2,<OCOD.IRPCN>
1086 DEFINE INCRCH OCOD,LIST
1088 DUM3==<"CHAR>+CHROFF
1091 SETSYM \DUM1,\DUM2,\<OCOD+.IRPCN>
1092 IFE CHROFF,[DUM3==DUM3+200
1095 SETSYM \DUM1,\DUM2,<OCOD+.IRPCN>
1099 RMT [EXPUNGE DUM1,DUM2,DUM3
1100 REPEAT NWRDS,KILLWD \.RPCNT
1101 REPEAT CHRWD,KILMSK \.RPCNT
1109 ;REDEFINE END DO ALL THE REMOTES (ON LAST PASS ONLY)
1136 IF2 EXPUNGE PARFLG,VECFLG,CHRWD,NN,NUMPRI,PURITY,EAD,ACD,PUSHED
1137 IF2 EXPUNGE INSTNT,DUMMY1,PRIM,PPLNT,GSPLNT,MEDIAT
1142 ;MACROS TO PRINT VERSIONS OF PROGRAMS DURING ASSEMBLY
1145 DEFINE NUMGEN SYM,\REST,N
1149 IFN N,IFGE <31-N>,IFGE <N-20>,TOTAL==TOTAL*10.+<N-20>
1174 DEFINE VATOM SYM,\LOCN,TV,A,B
1180 A==<<<<SYM_-30.>&77>+40>_29.>
1182 IFN B,A==A+<<B+40>_22.>
1184 IFN B,A==A+<<B+40>_15.>
1186 IFN B,A==A+<<B+40>_8.>
1188 IFN B,A==A+<<B+40>_1.>
1190 IFN <SYM&77>,<<SYM&77>+40>_29.
1198 ;VATOM .FNAM1 ;"HACK REMOVED FOR EFFICIENCY"
1201 ;MACRO TO REMMVE SYMBOLS OF THE FORM "GXXXXX"
1206 NUMGEN \<SIXBIT /SYM!/>
1218 DEFINE ..LOC NEW,OLD
1219 .LIFS .LPUR"+.LIMPU"
1232 ; PURE - MACRO TO SWITCH LOADING TO PURE CORE.
1235 IFE PURITY-1, ..LOC .LPUR,.LIMPU
1239 ; IMPURE - MACRO TO SWITCH LOADING TO IMPURE CORE.
1242 IFE PURITY, ..LOC .LIMPU,.LPUR