

AVOC   A variable that hold the old CONTEXT vocabulary
CODE is the defining word for FORTH assembler definitions.
   It saves the context vocabulary and hides the name.

END-CODE    terminates a code definition and restores vocs.

#USER     Count of how many user variables are allocated
USER      Vocabulary that holds task versions of defining words
ALLOT     Allocate some space in the user area for a task.
   When used with CREATE, you can define arrays this way.
CREATE    Define a word that returns the address of the next
   available user memory location.
VARIABLE  Define a task type variable.  This is similar to the
   old FIG version of USER.
DEFER     Defines an execution vector that is task local.

>IS   Maps a code field into a data field.  If the word is in
   the USER class of words, then the data address must be
   calculated relative to the current user pointer.  Otherwise
   it is just the parameter field.

(IS)     The code compiled by IS.  Sets the following DEFERred
   word to the address on the parameter stack.
IS       Depending on STATE, either sets the following DEFERred
   word immediatly or compiles the setting for later.

                                                      11Feb87TJZ

(=:)    ( N1 --- )
                Primitive used by the following definitions,
                gets compiled into colon definition, and stores
                value on the stack into the following defs
                body field.

=:    ( N1 T1 --- )
                Used to assign values into the body of the
                following definition, like variables or
                constants.

                                                      11Feb87TJZ

INCR>   ( --- )
        Increment the body of the word following, used to
        modify the following constant or variable.

DECR>   ( --- )
        Decrement the body of the word following, used to
        modify the following constant or variable.

                                                      11Feb87TJZ

+!>     ( N1 --- )
        Increment the body field of the following definition
        by value n1 on the stack.

RUN
   Allows for multiline compilation.  Thus you may enter a :
   definition that spans several lines.
QUIT
   The main loop in Forth.  Gets more input from the terminal
   and Interprets it.  Responds with OK if healthy.
BOOT   The very first high level word executed during cold start
WARM   Performs a warm start, jumped to by vector at hex 104

COLD   The high level cold start code.  For ordinary forth,
   BOOT should initialize and pass control to QUIT.

INITIAL   The screen number to load for an application.
OK        Loads in an application from the INITIAL screen
START     Used to compile from a file after meta compilation
   has finished.
BYE     Returns control to CP/M.  First it moves the heads
   down next to the code such that the system is contiguous
   when saved.  Calculates the size in pages.


WARM   Initialize the warm start entry point in low memory
   and jump immediately into hi level
COLD   Initialize the cold start entry point in low memory
   Then calculate how much space is consumed by CP/M and
   round it down to an even HEX boundary for safety.  We
   then patch FIRST and LIMIT with this value and calculate
   the locations of the return stack and the Terminal Input
   buffer.  We also set up the initial parameter stack and
   finally call the Hi Level COLD start routine.

Finally we must initialize the user variables that were defined
earlier.  User variables are relocatable, and sit on the top of
the dictionary in whatever task they occur in.  They must be
laid down in the exact same order as their definitions.

DEPTH      Returns the number of items on the parameter stack
.S
   Displays the contents of the parameter stack non
   destructively.  Very useful when debugging.

.ID
   Display the variable length name whose name field address
   is on the stack.  If it is shorter than its count, it is
   padded with underscores.  Only valid Ascii is typed.

DUMP
   A primitive little dump routine to help you debug after
   you have changed the system source and nothing works any
   more.

These words are in the reference word sets,           29Sep83map
and are only include for completeness.
We prefer to use RECURSIVE rather than RECURSE.
( See RECURSIVE )

We must resolve the forward references that were required in
the Meta Compiler.  These are all run time code which wasn't
known at the time the meta compiling version was defined.  These
are all either defining words or special case immediate words.

These are forward references that were generated in the course
of compiling the system source.  Most of these are here because
(DO) (?DO) and ROLL are written in high level and are defined
very early in the system.  While forward references should be
avoided when possible, they should not be shunned as a matter
of dogma.  Since the meta compiler makes it easy to create and
resolve forward references, why not take advantage of it when
you need to.

In order to run, we must initialize all of the defferred words
that were defined to something meaningful.  Deferred words are
also known as execution vectors.  The most important execution
vectors in the system are listed here.  You can certainly create
your own with the defining word DEFER.  Be sure you initialize
them however, or else you will surely crash.

Initialize the CURRENT vocabulary to point to FORTH
Initialize the CONTEXT vocabulary to point to FORTH
Initialize the Threads in the Forth vocabulary
The value of DP-BODY is only now know, so we must init it here
The rest of the variables that are initialize are ordinary
variables, which are resident in the dictionary, and must be
correct upon cold boot.  You can change some of these depending
on how you want your system to come up initially.


