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 RMT [EXPUNGE SYSTEM,ERRORS,INTRUP
280 \f;DEFINE TYPES AND $TYPES AND IF MAIN NOT 0, MAKE THE $TYPE WORDS
282 NUMPRI==-1 ;NUMBER OF PRIMITIVE TYPES
285 DEFINE TYPMAK SAT,LIST
291 IFN MAIN,[$!T!B=[T!B,,0]
299 IFE MAIN,[RMT [EXPUN [LIST]
304 ;MACRO TO ADD STUFF TO TYPE VECTOR
307 DEFINE ADDTYP TYPE,SAT,\LOCN
310 IFSN [NAME],[IFSE [NAME]IN,MQUOTE INTERNAL
311 IFSN [NAME]IN,MQUOTE [NAME]
313 IFSE [NAME],MQUOTE TYP
319 ;DEFINE THE STORAGE ALLOCATION TYPES IN THE WORLD
323 GENERAL==400000,,0 ;FLAG FOR BEING A GENERAL VECTOR
325 IRP A,,[1WORD,2WORD,2DEFRD,NWORD,2NWORD,TPSTK,PSTK,ARGS
326 ABASE,TBASE,FRAME,BYTE,ATOM,LOCID,PVP,CHSTR,ASOC,INFO]
332 ;MACRO FOR SAVING STUFF TO DO LATER
336 DEFINE HERE G00002,G00003
340 HERE [DEFINE HERE G00002,G00003
341 G00002!][A!G00003!TERMIN]
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 STPSTK,[[LOCI,IN],[TP,IN],[SP,IN],[LOCS,IN],[PP,IN]]
360 TYPMAK SPSTK,[[PDL,IN]]
361 TYPMAK SARGS,[[ARGS,ARGUMENTS]]
362 TYPMAK SABASE,[[AB,IN]]
363 TYPMAK STBASE,[[TB,IN]]
364 TYPMAK SFRAME,[FRAME]
365 TYPMAK SCHSTR,[[CHSTR,STRING]]
369 TYPMAK SFRAME,[[ENV,ENVIRONMENT],[ACT,ACTIVATION]]
370 TYPMAK S2WORD,[[PIC,PICTURE],[MOVTO,MOVE-TO],[MOVREL,MOVE-REL],[DRWTO,DRAW-TO],[DRWREL,DRAW-REL],TEXT]
375 TYPMAK S1WORD,[[ENTS,IN],[TBS,IN],[PDLS,IN],[PC,IN]]
376 TYPMAK SINFO,[[INFO,IN]]
377 TYPMAK SATOM,[[BNDS,IN]]
378 TYPMAK S2NWORD,[[BVLS,IN]]
380 IFN MAIN,[RMT [LOC SAVE
385 RMT [EQUALS XP EXPUNGE
407 ;DEFINE ENTRIES IN PROCESS VECTOR AS BEING GLOBAL
409 IRP A,,[0,A,B,C,D,E,PVP,TVP,TP,TB,AP,AB,P,PB,SP,PP]
416 .GLOBAL FOPEN,VECTOR,EVECTOR,CALER1,IVAL,SPECBIND,6TOCHS,CHMAK
420 .GLOBAL PROCID,LPROG,LERR,FINIS,PARTOP,VECTOP,TVLNTH,PVLNTH,SAT
423 .GLOBAL SAVCAL,RESCAL,SAVCN,RESCN,LCKINT,SAVEUP,WNA,NOTATOM,INTFLG,TYPVEC
425 ;PRINTER GLOBALS NEEDED (WILL GO WHEN CHANNLES USED)
429 ;GLOBALS ASSOCIATED WITH CHANNELS (SEE 'FOPEN >' FOR DETAILS)
431 .GLOBAL CHANNO,DIRECT,DEVICE,NAME1,NAME2,SNAME,RNAME1,RNAME2,STATUS,IOINS,LINLN
432 .GLOBAL CHRPOS,PAGLN,LINPOS,UNAME,FDIR,CALER1,ROOT,TTICHN,TTOCHN
435 ;GLOBALS FOR MACROS IN VECTOR AND PAIR SPACE
437 .GLOBAL VECLOC,PARLOC,TVBASE,TVLOC,PVLOC,PVBASE
438 .GLOBAL PARTOP,VECTOP,TVLNTH,PVLNTH
441 ;STORAGE ALLOCATIN SPECIFICATION GLOBALS
443 PROLOC=10 ;NUMBER OF INITIAL LOCALS PER PROCESS
444 PPLNT==150. ;PLANNER PDL LENGTH
445 TPLNT"=1500. ;TEMP PDL LENGTHH
446 GSPLNT==2000 ;INITIAL GLOBAL SP
447 SPLNT"=300. ;SPECIAL LENGTH
448 GCPLNT"=1000. ;GARBAGE COLLECTOR'S PDL LENGTH
449 PVLNT"=100 ;LENGTH OF INITIAL PROCESS VECTOR
450 TVLNT"==2000 ;MAX TRANSFER VECTOR
451 IAPLNT"=100 ;AP FOR GC
452 ITPLNT"=100 ;TP FOR GC
453 PLNT"=300. ;PDL FOR USER PROCESS
455 ;LOCATIONS OF VARIOUS STORAGE AREAS
459 PARBASE"=26000 ;START OF PAIR SPACE
460 VECBASE"=40000 ;START OF VECTOR SPACE
461 IFN MAIN,[PARLOC"=PARBASE
469 ;STANDARD SUBROUTINE CALL TO F WITH N ARGUMENTS
470 ;VALUE COMES BACK IN B WITH TYPE IN A
471 ;IN ORDER TO BE ABLE TO BUM CALLS IN THE FUTURE, ALL CALLS SHOULD BE
472 ;COMMENTED AS TO WHICH STACK POINTERS THEY ASSUME ARE SAVED.
474 ;SYMBLOS ASSOCIATED WITH STACK FRAMES
475 FRAMLN==10 ;LENGTH OF A FRAME
476 FSAV==-8 ;POINT TO CALLED FUNCTION
477 OTBSAV==-7 ;POINT TO PREVIOUS FRAME AND CONTAINS TIME
478 ABSAV==-6 ;ARGUMENT POINTER
479 SPSAV==-5 ;BINDING POINTER
480 PSAV==-4 ;SAVED P-STACK
481 TPSAV==-3 ;TOP OF STACK POINTER
482 PPSAV==-2 ;SAVED PLANNER PDL
487 IFE MAIN,[RMT [EXPUNGE PCSAV TPSAV SPSAV PSAV ABSAV FSAV TBSAV
491 ;STANDARD SUBROUTINE RETURN
495 .GLOBAL .MCALL,.ACALL,FINIS,CONTIN
499 IFGE <17-N>,.MCALL N,F
500 IFL <17-N>,[PRINTC /LOSSAGE AT MCALL - TOO MANY ARGS
518 ;INTERRUPT IF THERE IS A WAITING INTERRUPT
526 ;CHECK THAT THE ENTRY POINT WAS CALLED WITH N ARGUMENTS
527 ;AND SEE IF THERE ARE PENDING INTERRUPTS
528 ;THEN PROBABLY WANT TO SAVE TB WITH GENTEM (BELOW)
538 ;TO BECOME INTERRUPTABLE
546 ;TO BECOME UNITERRUPTABLE
551 \f;MACRO TO BUILD TYPE DISPATCH TABLES EASILY
553 DEFINE TBLDIS NAME,DEFAULT,LIST,LNTH
556 REPEAT LNTH+1,DEFAULT
567 ; DISPATCH FOR NUMPRI GOODIES
569 DEFINE DISTBL NAME,DEFAULT,LIST
570 TBLDIS NAME,DEFAULT,[LIST]NUMPRI
573 DEFINE DISTBS NAME,DEFAULT,LIST
574 TBLDIS NAME,DEFAULT,[LIST]NUMSAT
582 ;MACROS FOR INITIIAL MUDDLE LIST STRUCTURE
584 ;CHAR STRING MAKER, RETURNS POINTER AND TYPE
586 DEFINE MACHAR NAME,TYPE,VAL,\LNT,WHERE,LAST
593 VAL==-<LAST-WHERE>,,WHERE
597 ;MACRO TO DEFINE ATOMS
599 DEFINE MAKAT NAME,TYAT,VALU,OBLIS,REFER,LOCN,\TVENT,FIRST
606 TVENT==FIRST-.+2,,FIRST
607 IFSN [LOCN],LOCN==TVENT
608 ADDTV TATOM,TVENT,REFER
613 \f;MACROS TO SWITCH BACK AND FORTH INTO AND OUT OF VECTOR AND PAIR SPACE
616 DEFINE LOCSET LOCN,RETNAM,NEWLOC,OTHLOC,F1,F2,TOPWRD,\SAVE,SAVEF1,SAVEF2,NEW
644 LOCSET LOCN,VECRET,VECLOC,PARLOC,VECFLG,PARFLG,VECTOP
648 LOCSET LOCN,PARRET,PARLOC,VECLOC,PARFLG,VECFLG,PARTOP
651 DEFINE ADDTV TYPE,GOODIE,REFER,\SAVE
661 ;MACRO TO ADD TO PROCESS VECTOR
663 DEFINE ADDPV TYPE,GOODIE,OFFS,\SAVE
667 IFSN OFFS,,OFFS==PVOFF
677 \f;MACRO TO DEFINE A FUNCTION ATOM
679 DEFINE MFUNCTION NAME,TYPE,PNAME
683 IFSE [PNAME],MAKAT NAME,T!TYPE,NAME,SYSTEM,<NAME-1>
684 IFSN [PNAME],MAKAT [PNAME]T!TYPE,NAME,SYSTEM,<NAME-1>
688 ;MACRO TO DEFINE QUOTED GOODIE
690 DEFINE MQUOTE ARG,PNAME,OBLIS,\LOCN
695 IFSE [PNAME],MAKAT [ARG]TUNBOU,0,OBLIS,LOCN
696 IFSN [PNAME],MAKAT [PNAME]TUNBOU,0,OBLIS,LOCN
703 DEFINE CHQUOTE NAME,\LOCN,TYP,VAL
716 ;CHARACTER TABLE GENERATING MACROS
718 DEFINE SETSYM WRDL,BYTL,COD
719 WRD!WRDL==<WRD!WRDL>&<MSK!BYTL>
720 WRD!WRDL==<WRD!WRDL>\<<COD&177>_<<4-BYTL>*7+1>>
731 ;MACRO TO KILL THESE SYMBOLS LATER
737 MSK!N=<177_<<4-N>*7+1>>#<-1>
740 ;MACRO TO KILL MASKS LATER
746 NWRDS==<NCHARS+CHRWD-1>/CHRWD
748 REPEAT CHRWD,SETMSK \.RPCNT
750 REPEAT NWRDS,INIWRD \.RPCNT,004020100402
753 REPEAT NWRDS,OUTWRD \.RPCNT
757 ;MACRO TO GENERATE THE DUMMIES EASLILIER
759 DEFINE INITCH \DUM1,DUM2,DUM3
762 DEFINE SETCOD COD,LIST
766 SETSYM \DUM1,\DUM2,COD
770 DEFINE SETCHR COD,LIST
775 SETSYM \DUM1,\DUM2,COD
779 DEFINE INCRCO OCOD,LIST
783 SETSYM \DUM1,\DUM2,\<OCOD+.IRPCN>
787 DEFINE INCRCH OCOD,LIST
792 SETSYM \DUM1,\DUM2,\<OCOD+.IRPCN>
795 RMT [EXPUNGE DUM1,DUM2,DUM3
796 REPEAT NWRDS,KILLWD \.RPCNT
797 REPEAT CHRWD,KILMSK \.RPCNT
805 ;REDEFINE END DO ALL THE REMOTES (ON LAST PASS ONLY)
826 ;MACROS TO PRINT VERSIONS OF PROGRAMS DURING ASSEMBLY
828 DEFINE NUMGEN SYM,\REST,N
832 IFN N,IFGE <31-N>,IFGE <N-20>,TOTAL==TOTAL*10.+<N-20>
858 DEFINE VATOM SYM,\LOCN,TV,A,B
863 A==<<<<SYM_-30.>&77>+40>_29.>
865 IFN B,A==A+<<B+40>_22.>
867 IFN B,A==A+<<B+40>_15.>
869 IFN B,A==A+<<B+40>_8.>
871 IFN B,A==A+<<B+40>_1.>
873 IFN <SYM&77>,<<SYM&77>+40>_29.
884 ;MACRO TO REMMVE SYMBOLS OF THE FORM "GXXXXX"
889 NUMGEN \<SIXBIT /SYM!/>