1 ;CONVENTIONS USED IN ALL INTERNAL MUDDLE PROGRAMS
3 ;FOR EFFICIENCY THE STANDARD MODE OF RUNNING IS UNINTERRUPTABLE
5 ;FOR PENDING INTERRUPTS
8 ; FOR INTERRUPTS TO WORK IN INTERRUPTABLE CODE, IT MUST
10 ;BETWEEN ANY TWO INSTRUCTIONS OF
11 ;INTERRUPTABLE CODE THERE MAY
12 ;BE AN INTERUPT IN WHICH
13 ;A COMPACTING GARBAGE COLLECTION IS CALLED
14 ;AND THEN THE PROCESS WHICH WAS RUNNING IS
15 ;PASSIVATED AND ANOTHER RESUMED.
17 ; ALL ATOM HEADERS WILL BE REFERRED TO IN ASSEMBLED CODE BY
19 ; FUNCTION CALLS TO INITIAL FUNCTIONS WILL BE CALLED USING THE FOLLOWING:
21 ; MCALL N,<PNAME> ;SEE MCALL MACRO
23 ; UNLESS PNAME IS NOT A VALID MIDAS SYMBOL, IN WHICH CASE FUNINESS
27 \f; ORGANIZATION OF CORE STORAGE IN THE MUDDLE SYSTEM (ENVIRONMENT)
29 ; 20: SPECIAL CODE FOR UUO AND INTERUPTS
31 ;CODBOT: WORD CONTAINING LOCATION OFBOTTOMMOST WORD OF CODE
35 ;CODTOP: WORD CONTAINING LOCATION OFWORD AFTER LAST WORD OF CODE
37 ;PARBOT: WORD CONTAINING LOCATION OFBOTTOMMOST LIST
41 ;PARTOP: WORD CONTAINING LOCATION OFWORD AFTER LAST PAIR WORD
43 ;VECBOT: WORD CONTAINING LOCATION OFFIRST WORD OF VECTORS
47 ;VECTOP: WORD CONTAINING LOCATION OFWORD AFTER TOPMOST VECTOR
48 ; THE WORD BEFORE VECTOP IS THE DOPE FOR THE LAST VECTOR
51 \f;BASIC DATA TYPES PRE-DEFINED IN MUDDLE
53 ; PRIMITIVE DATA TYPES
54 ; IF T IS A DATA TYPE THEN $T=[T,,0]
56 ; DATA TYPES ARE ASSIGNED BY THE TYPMAK MACRO IN SOME ARBITRARY ORDER
59 ;TLOSE ;ILLEGAL TYPE (USED PRIMARILY FOR ERRORS)
61 ;TFLOT ;FLOATING POINT
62 ;TCHRS ;WORD OF UP TO 5 ASCII CHARACTERS
64 ;TVEC ;VECTOR (AOBJN POINTER TO GENERALIZED VECTOR)
66 ;TAB ;SAVED AB (CANT APPEAR IN LISTS)
69 ;TATOM ;ATOM WHICH IS REALLY A SPECIAL TYPE OF VECTOR BUT MAY CHANGE
70 ;TEXPR ;FUNCTIONS CORRESPONDING TO THE STANDARD LISP FUNCTIONS
71 ;TSUBR ;MACHINE LANGUAGE 'EXPR'
72 ;TFSUBR ;MACHINE LANGUAGE PROGRAM (TAKES LIST AS ARG)
73 ;TENTRY ;RETURN ADDRESS FROM MCALL MACRO
75 ;TUNBOU ;UNBOUND VALUE
76 ;TLOCI ;IDENTIFIER LOCATIVE
77 ;TFUNARG ;FUNCTIONAL ARGUMENT
78 ;TTIME ;SPECIAL TIME POINTER-NOT MARKED (USER CAN'T SEE OR CHANGE)
79 ;TSKIP ;SKIP WORD ON SPECIAL PDL
80 ;TCHVEC ;VECTOR OF UNIFORM CHARACTERS NOT MARKED
81 ;TCHSTR ;GENERAL VECTOR OF CHARACTERS
82 ;TTVP ;SAVE TRANSFER VEVTOR POINTER
83 ;TPVP ;SAVED PROCESS VECTOR POINTER
84 ;TCHAN ;CHANNEL VECTOR (SEE FOPEN FOR FULL DOCUMENTATION)
85 ;TENV ;ENVIRONMENT POINTER
90 ;STORAGE ALLOCATION TYPES SAT (ALLOCATED VALUES BY AN IRP)
92 ;1WORD ;UNMARKED ONE WORD ENTITIES
93 ;2WORD ;LIST STRUCTURE GOODIES
94 ;2NWORD ;VECTOR STRUCTURE GOODIES
95 ;STACK ;PUSH DOWN STACKS
96 ;BASE ;ONE MEMBER, NAMELY AB
97 \f; FORMAT OF LIST ELEMENT
99 ; WORD 1: SIGN BIT, RESERVED FOR GARBAGE COLLECTOR
100 ; BITS 1-17 TYPE OF FIRST ELEMENT OF LIST
101 ; BITS 18-35 POINTS TO REST OF LIST (ALWAYS ANOTHER LIST OR 0)
103 ; WORD 2: DATUM OF FIRST ELEMENT OF LIST OF TYPE SPECIFIED
107 ;FORMAT OF GENERAL VECTOR (OF N ELEMENTS)
108 ;POINTED INTO BY AOBJN POINTER
109 ;A GENERAL VECTOR HAS FEWER THAN 2^16 ELEMENTS
112 ; TYPE<1> TYPE OF FIRST OBJECT (THE RIGHT HALF OF THE TYPE WORD MIGHT BE NONZERO)
113 ; OBJ<1> OBJECT OF SPECIFIED TYPE
121 ; VD-VECTOR DOPE--SIGN-G.C.; BITS 1-17 ARE 2*N+1,,18-35 G.C. RELOCATION EITHER UP OR DOWN
124 \f;SPECIAL VECTORS IN THE INITIAL SYSTEM
126 ;THE SYSTEM KEEPS RELEVANT INFORMATION CONCERNING ALL TYPES
127 ;IN A TYPE VECTOR, TYPVEC, WHICH MAY BE INDEXED BY THE TYPE NUMBER
128 ;FOUND IN THE TYPE FIELD OF ANY GOODIE.
130 ;THE INFORMATION MAY BE ACCESSED WITH FUNCTIONS "SAT" AND "TYPE"
133 ;TYPE TO NAME OF TYPE TRANSLATION TABLE
135 ; TATOM,,<STORAGE ALLOCATION TYPE>
138 ;AN ATOM IS A VECTOR WITH 3 ELEMENTS AS FOLLOWS
140 ; TYPE OF VALUE TYPES ARE FULL WORD QUANTITIES
142 ; TLIST,,<PROCESS I.D.>
143 ; PLIST (PROPERTY LIST)
144 ; TVEC (OR TCHRS IF LESS THAN 6 CHARS)
145 ; PNAME (VECTOR OF ELEMENTS OF TYPE TCHRS)
146 ; 7,,0 (SIGN BIT FOR G.C. RH FOR G.C. RELOCATION)
148 ;WARNING THE FORMAT OF ATOMS WILL CHANGE
149 ;USE THE INTERNAL FUNCTIONS IVCELL,IGVALU,ILVALU,IPNAME,IPLIST
150 ;AND THE EXTERNALS VCELL,GVALUE,LVALUE,PNAME,PLIST
152 ;POINTERS TO INITIAL STRUCTURES AND ATOMS NEEDED BY COMPILED CODE
153 ;WILL BE POINTED TO BY THE TRANSFER VECTOR
154 ;A POINTER TO THIS VECTOR ALWAYS EXISTS IN AC TVP
155 ;THE FORMAT OF THIS VECTOR IS:
165 ;INFORMATION CONCERNING EACH PROCESS IS KEPT IN THE PROCESS VECTOR
166 ;A POINTER TO THE CURRENT PROCESS ALWAYS EXISTS IN AC PVP
167 ;THE FORMAT OF A PROCESS VECTOR IS:
170 ; PROCID ;UNIQUE ID OF THIS PROCESS
172 ; 20 ELEMENTS (I.E. 40 WORDS) CONTAINIG SAVED ACS
173 ; CAN BE REFERENCED SYMBOLICALLY USING SYMBOLS
174 ; OF THE FORM AC!STO(PVP)
177 ; <TP AT LAST ERROR CALL> ;CAN BE REFERENCED SYMBOLICALLY AS LERR(PVP)
180 ; <LAST PROG> ;LPROG(PVP)
189 ;FORMAT OF PUSH DOWN STACKS USED AND CONVENTIONS
197 ; OLD CONTENTS OF VALUE CELL
199 ; LOCATION OF VALUE CELL
208 ;THE FORMAT FOR TP (TEMPORARY PDL MARKED) AND AP (ARGUMENT PDL) ARE NOW THE SAME
210 ;CHANGE BY BLOCKING THE AP WITH
211 ;VECTOR DESCRIPTORS AT THE HEAD OF EACH BLOCK
223 ; VD (VECTOR DOPE FOR THE VECTOR WHICH IS PDL)
228 PRINTC /MUDDLE - INSERT FILE FOR ALL PROGRAMS
237 P"=17 ;THE UNMARKED PDL POINTER (USED BY THE OUTSIDE WORLD AND MUDDLE)
238 SP"=15 ;SPECIAL PDL (USED BY MUDDLE FOR VARIABLE BINDINGS) (NOT USED NOW)
239 TP"=14 ;MARKED PDL (USED BY MUDDLE FOR ARGS TO FUNCTIONS
240 ;AND MARKED TEMPORARIES)
241 TB"=13 ;MARKED PDL BASE POINTER
242 R"=12 ;RELOCATION INDEX FOR LOCATION INSENSITIVE SUBRS
243 AB"=11 ;ARGUMENT PDL BASE (MARKED)
244 ;AB IS AN AOBJN POINTER TO THE ARGUMENTS
245 PP"=10 ;PLANNER PDL (MAY NOT BE IN DYNAMIC MODELLING)
246 TVP"=7 ;TRANSFER VECTOR POINTER
247 PVP"=6 ;PROCESS VECTOR POINTER
249 ;THE FOLLOWING ACS ARE 'SCRATCH' FOR MUDDLE
257 NIL"=0 ;END OF LIST MARKER
259 ;MACRO TO DEFINE MAIN IF NOT DEFINED
272 ; DEFINE SYMBLOS FOR VARIOUS OBLISTS
274 SYSTEM==0 ;MAIN SYSTEM OBLIST
275 ERRORS==1 ;ERROR COMMENT OBLIST
276 INTRUP==2 ;INERRUPT OBLIST
278 \f;DEFINE TYPES AND $TYPES AND IF MAIN NOT 0, MAKE THE $TYPE WORDS
280 NUMPRI==-1 ;NUMBER OF PRIMITIVE TYPES
283 DEFINE TYPMAK SAT,LIST
289 IFN MAIN,[$!T!B=[T!B,,0]
297 IFE MAIN,[RMT [EXPUN [LIST]
302 ;MACRO TO ADD STUFF TO TYPE VECTOR
305 DEFINE ADDTYP TYPE,SAT,\LOCN
308 IFSN [NAME],[IFSE [NAME]IN,MQUOTE INTERNAL
309 IFSN [NAME]IN,MQUOTE [NAME]
311 IFSE [NAME],MQUOTE TYP
317 ;DEFINE THE STORAGE ALLOCATION TYPES IN THE WORLD
321 GENERAL==400000,,0 ;FLAG FOR BEING A GENERAL VECTOR
323 IRP A,,[1WORD,2WORD,2DEFRD,NWORD,2NWORD,TPSTK,PSTK,ARGS
324 ABASE,TBASE,FRAME,BYTE,ATOM,PVP,CHSTR,ASOC,INFO]
330 ;MACRO FOR SAVING STUFF TO DO LATER
334 DEFINE HERE G00002,G00003
338 HERE [DEFINE HERE G00002,G00003
339 G00002!][A!G00003!TERMIN]
343 RMT [EXPUNGE SYSTEM,ERRORS,INTRUP
345 \f;BUILD THE TYPE CODES AND ADD STUFF TO TYPVEC AND DEFINE $!TYPE)
347 IFN MAIN,[RMT [SAVE==.
352 TYPMAK S1WORD,[LOSE,FIX,FLOAT,[CHRS,CHARACTER],[ENTRY,IN],SUBR,FSUBR,UNBOUND,[BIND,IN],ILLEGAL]
354 TYPMAK S2WORD,[LIST,FORM,[SEG,SEGMENT],[EXPR,FUNCTION],[FUNARG,CLOSURE],LOCL,FALSE]
355 TYPMAK S2DEFRD,[[DEFER,IN]]
356 TYPMAK SNWORD,[[UVEC,UVECTOR],[OBLS,OBLIST]]
357 TYPMAK S2NWORD,[[VEC,VECTOR],[CHAN,CHANNEL],LOCV,[TVP,IN],[BVL,IN],TAG]
358 TYPMAK SPVP,[[PVP,IN]]
359 TYPMAK S2NWORD,[[LOCI,IN]]
360 TYPMAK STPSTK,[[TP,IN]]
361 TYPMAK S2NWORD,[[SP,IN]]
362 TYPMAK STPSTK,[[LOCS,IN],[PP,IN]]
363 TYPMAK SPSTK,[[PDL,IN]]
364 TYPMAK SARGS,[[ARGS,ARGUMENTS]]
365 TYPMAK SABASE,[[AB,IN]]
366 TYPMAK STBASE,[[TB,IN]]
367 TYPMAK SFRAME,[FRAME]
368 TYPMAK SCHSTR,[[CHSTR,STRING]]
370 TYPMAK S2NWORD,[LOCD]
372 TYPMAK S2NWORD,[[ENV,ENVIRONMENT]]
373 TYPMAK SFRAME,[[ACT,ACTIVATION]]
374 TYPMAK S2WORD,[[PIC,PICTURE],[MOVTO,MOVE-TO],[MOVREL,MOVE-REL],[DRWTO,DRAW-TO],[DRWREL,DRAW-REL],TEXT]
379 TYPMAK S1WORD,[[ENTS,IN],[TBS,IN],[PDLS,IN],[PC,IN]]
380 TYPMAK SINFO,[[INFO,IN]]
381 TYPMAK S2WORD,[[UNAS,UNASSIGNED],[AF,ACTORFORM],[SAF,SACTORFORM]]
382 TYPMAK S2WORD,[ACTOR,[ACTF,ACTOR-FUNCTION]]
385 IFN MAIN,[RMT [LOC SAVE
390 RMT [EQUALS XP EXPUNGE
412 ;DEFINE ENTRIES IN PROCESS VECTOR AS BEING GLOBAL
414 IRP A,,[0,A,B,C,D,E,PVP,TVP,TP,TB,AP,AB,P,PB,SP,PP]
421 .GLOBAL FOPEN,VECTOR,EVECTOR,CALER1,IVAL,SPECBIND,6TOCHS,CHMAK
425 .GLOBAL PROCID,LPROG,LERR,FINIS,PARTOP,VECTOP,TVLNTH,PVLNTH,SAT
428 .GLOBAL SAVCAL,RESCAL,SAVCN,RESCN,LCKINT,SAVEUP,WNA,NOTATOM,INTFLG,TYPVEC
430 ;PRINTER GLOBALS NEEDED (WILL GO WHEN CHANNLES USED)
434 ;GLOBALS ASSOCIATED WITH CHANNELS (SEE 'FOPEN >' FOR DETAILS)
436 .GLOBAL CHANNO,DIRECT,DEVICE,NAME1,NAME2,SNAME,RNAME1,RNAME2,STATUS,IOINS,LINLN
437 .GLOBAL CHRPOS,PAGLN,LINPOS,UNAME,FDIR,CALER1,ROOT,TTICHN,TTOCHN
440 ;GLOBALS FOR MACROS IN VECTOR AND PAIR SPACE
442 .GLOBAL VECLOC,PARLOC,TVBASE,TVLOC,PVLOC,PVBASE
443 .GLOBAL PARTOP,VECTOP,TVLNTH,PVLNTH
446 ;STORAGE ALLOCATIN SPECIFICATION GLOBALS
448 PROLOC=10 ;NUMBER OF INITIAL LOCALS PER PROCESS
449 PPLNT==150. ;PLANNER PDL LENGTH
450 TPLNT"=1500. ;TEMP PDL LENGTHH
451 GSPLNT==2000 ;INITIAL GLOBAL SP
452 SPLNT"=300. ;SPECIAL LENGTH
453 GCPLNT"=1000. ;GARBAGE COLLECTOR'S PDL LENGTH
454 PVLNT"=100 ;LENGTH OF INITIAL PROCESS VECTOR
455 TVLNT"==2000 ;MAX TRANSFER VECTOR
456 IAPLNT"=100 ;AP FOR GC
457 ITPLNT"=100 ;TP FOR GC
458 PLNT"=300. ;PDL FOR USER PROCESS
460 ;LOCATIONS OF VARIOUS STORAGE AREAS
464 PARBASE"=26000 ;START OF PAIR SPACE
465 VECBASE"=40000 ;START OF VECTOR SPACE
466 IFN MAIN,[PARLOC"=PARBASE
474 ;STANDARD SUBROUTINE CALL TO F WITH N ARGUMENTS
475 ;VALUE COMES BACK IN B WITH TYPE IN A
476 ;IN ORDER TO BE ABLE TO BUM CALLS IN THE FUTURE, ALL CALLS SHOULD BE
477 ;COMMENTED AS TO WHICH STACK POINTERS THEY ASSUME ARE SAVED.
479 ;SYMBLOS ASSOCIATED WITH STACK FRAMES
480 FRAMLN==10 ;LENGTH OF A FRAME
481 FSAV==-8 ;POINT TO CALLED FUNCTION
482 OTBSAV==-7 ;POINT TO PREVIOUS FRAME AND CONTAINS TIME
483 ABSAV==-6 ;ARGUMENT POINTER
484 SPSAV==-5 ;BINDING POINTER
485 PSAV==-4 ;SAVED P-STACK
486 TPSAV==-3 ;TOP OF STACK POINTER
487 PPSAV==-2 ;SAVED PLANNER PDL
492 IFE MAIN,[RMT [EXPUNGE PCSAV TPSAV SPSAV PSAV ABSAV FSAV TBSAV
496 ;STANDARD SUBROUTINE RETURN
500 .GLOBAL .MCALL,.ACALL,FINIS,CONTIN
504 IFGE <17-N>,.MCALL N,F
505 IFL <17-N>,[PRINTC /LOSSAGE AT MCALL - TOO MANY ARGS
523 ;INTERRUPT IF THERE IS A WAITING INTERRUPT
531 ;CHECK THAT THE ENTRY POINT WAS CALLED WITH N ARGUMENTS
532 ;AND SEE IF THERE ARE PENDING INTERRUPTS
533 ;THEN PROBABLY WANT TO SAVE TB WITH GENTEM (BELOW)
543 ;TO BECOME INTERRUPTABLE
551 ;TO BECOME UNITERRUPTABLE
556 \f;MACRO TO BUILD TYPE DISPATCH TABLES EASILY
558 DEFINE TBLDIS NAME,DEFAULT,LIST,LNTH
561 REPEAT LNTH+1,DEFAULT
572 ; DISPATCH FOR NUMPRI GOODIES
574 DEFINE DISTBL NAME,DEFAULT,LIST
575 TBLDIS NAME,DEFAULT,[LIST]NUMPRI
578 DEFINE DISTBS NAME,DEFAULT,LIST
579 TBLDIS NAME,DEFAULT,[LIST]NUMSAT
587 ;MACROS FOR INITIIAL MUDDLE LIST STRUCTURE
589 ;CHAR STRING MAKER, RETURNS POINTER AND TYPE
591 DEFINE MACHAR NAME,TYPE,VAL,\LNT,WHERE,LAST
598 VAL==-<LAST-WHERE>,,WHERE
602 ;MACRO TO DEFINE ATOMS
604 DEFINE MAKAT NAME,TYAT,VALU,OBLIS,REFER,LOCN,\TVENT,FIRST
611 TVENT==FIRST-.+2,,FIRST
612 IFSN [LOCN],LOCN==TVENT
613 ADDTV TATOM,TVENT,REFER
618 \f;MACROS TO SWITCH BACK AND FORTH INTO AND OUT OF VECTOR AND PAIR SPACE
621 DEFINE LOCSET LOCN,RETNAM,NEWLOC,OTHLOC,F1,F2,TOPWRD,\SAVE,SAVEF1,SAVEF2,NEW
649 LOCSET LOCN,VECRET,VECLOC,PARLOC,VECFLG,PARFLG,VECTOP
653 LOCSET LOCN,PARRET,PARLOC,VECLOC,PARFLG,VECFLG,PARTOP
656 DEFINE ADDTV TYPE,GOODIE,REFER,\SAVE
666 ;MACRO TO ADD TO PROCESS VECTOR
668 DEFINE ADDPV TYPE,GOODIE,OFFS,\SAVE
672 IFSN OFFS,,OFFS==PVOFF
682 \f;MACRO TO DEFINE A FUNCTION ATOM
684 DEFINE MFUNCTION NAME,TYPE,PNAME
688 IFSE [PNAME],MAKAT NAME,T!TYPE,NAME,SYSTEM,<NAME-1>
689 IFSN [PNAME],MAKAT [PNAME]T!TYPE,NAME,SYSTEM,<NAME-1>
693 ;MACRO TO DEFINE QUOTED GOODIE
695 DEFINE MQUOTE ARG,PNAME,OBLIS,\LOCN
700 IFSE [PNAME],MAKAT [ARG]TUNBOU,0,OBLIS,LOCN
701 IFSN [PNAME],MAKAT [PNAME]TUNBOU,0,OBLIS,LOCN
708 DEFINE CHQUOTE NAME,\LOCN,TYP,VAL
721 ;CHARACTER TABLE GENERATING MACROS
723 DEFINE SETSYM WRDL,BYTL,COD
724 WRD!WRDL==<WRD!WRDL>&<MSK!BYTL>
725 WRD!WRDL==<WRD!WRDL>\<<COD&177>_<<4-BYTL>*7+1>>
736 ;MACRO TO KILL THESE SYMBOLS LATER
742 MSK!N=<177_<<4-N>*7+1>>#<-1>
745 ;MACRO TO KILL MASKS LATER
751 NWRDS==<NCHARS+CHRWD-1>/CHRWD
753 REPEAT CHRWD,SETMSK \.RPCNT
755 REPEAT NWRDS,INIWRD \.RPCNT,004020100402
758 REPEAT NWRDS,OUTWRD \.RPCNT
762 ;MACRO TO GENERATE THE DUMMIES EASLILIER
764 DEFINE INITCH \DUM1,DUM2,DUM3
767 DEFINE SETCOD COD,LIST
771 SETSYM \DUM1,\DUM2,COD
775 DEFINE SETCHR COD,LIST
780 SETSYM \DUM1,\DUM2,COD
784 DEFINE INCRCO OCOD,LIST
788 SETSYM \DUM1,\DUM2,\<OCOD+.IRPCN>
792 DEFINE INCRCH OCOD,LIST
797 SETSYM \DUM1,\DUM2,\<OCOD+.IRPCN>
800 RMT [EXPUNGE DUM1,DUM2,DUM3
801 REPEAT NWRDS,KILLWD \.RPCNT
802 REPEAT CHRWD,KILMSK \.RPCNT
810 ;REDEFINE END DO ALL THE REMOTES (ON LAST PASS ONLY)
831 ;MACROS TO PRINT VERSIONS OF PROGRAMS DURING ASSEMBLY
833 DEFINE NUMGEN SYM,\REST,N
837 IFN N,IFGE <31-N>,IFGE <N-20>,TOTAL==TOTAL*10.+<N-20>
863 DEFINE VATOM SYM,\LOCN,TV,A,B
868 A==<<<<SYM_-30.>&77>+40>_29.>
870 IFN B,A==A+<<B+40>_22.>
872 IFN B,A==A+<<B+40>_15.>
874 IFN B,A==A+<<B+40>_8.>
876 IFN B,A==A+<<B+40>_1.>
878 IFN <SYM&77>,<<SYM&77>+40>_29.
889 ;MACRO TO REMMVE SYMBOLS OF THE FORM "GXXXXX"
894 NUMGEN \<SIXBIT /SYM!/>
904 \f;MACRO TO SET A FAILPOINT WITH ADDRESS PC, GIVEN N WORDS PUSHED ABOVE -1(TB)
907 PUSH PP,$TPC ;PUSH PC MARKER
909 PUSH PP,[TTP,,ON] ;PUSH FRAME LOCATION
913 MOVEM TP,TPSAV(TB) ;MAKE SURE TP SLOT IS CORRECT
915 PUSHJ P,BCKTRE ;COPY FRAME