ERROR MESSAGES
ERROR TYPES
The TDS9092 gives the following error messages. If the message
is followed by the usual 'ok' then it is a warning only. In the absence
of 'ok' then this was a true error and the procedure has aborted.
These are messages you may see during compilation or at run
time. If this is a syntax error compilation stops and the line number at which
the problem was identified is given. The actual error may be a few lines earlier.
ERRORS LIST
COMP. ONLY
|
Referenced
word was found during execution. It should only be used when compiling.
Perhaps a colon is missing?
|
CRASHED MACHINE
|
is
not part of the Forth error system. It indicates that the microprocessor
on the TDS9092 lost control through execution from an invalid address
or an undefined machine op-code. If this happens the hardware facilities
are used to safely re-enter the Forth system. The message indicates what
has happened. Although this is a warm restart there can be no guarantee
that the memory data remained intact while the microprocessor was running
out of control. When the application program is in EPROM the cold-start
word whose cfa is at address 08+ORIGIN will be re-entered after the error
message has been transmitted. This means that applications can be designed
to tolerate most crashes from spikes etc. The action to be taken on a
crash can be altered to something you define by changing the action of
the TRAP interrupt. See the section
INTERRUPTS
for details. E.g. TRAP ASSIGN WORK will cause WORK to
be entered on a crash; this can do whatever you want.
|
DICT FULL
|
There
is not enough room left in the dictionary for the proposed operation.
This message is given on executing WORD or
PAD or words containing these. The
value of the variable FENCE marking the end of available
dictionary may be too low. See DICTIONARY
ALLOCATION for details of dictionary allocation.
|
EMPTY STK
|
Too
many items have been pulled off the data stack.
|
EXEC. ONLY
|
The
referenced word was found during compilation. It should only be used when
executing. Perhaps a semicolon is missing from the previous definition.
|
FULL STACK
|
The
stack is close to overflowing. Check whether an extra unwanted parameter
is being left on the stack each loop.
|
INCOMPLETE
|
An IF without
a THEN or
something similar.
|
MEM RANGE
|
Attempted
access to a block not allocated, see PORTABLE
USE OF MEMORY.
|
NOT PAIRED
|
The
word shown has no pair, e.g. a LOOP without a
DO will give this error.
|
NOT UNIQUE
|
Word
is already present, warning only. The new word will supersede the old
unless the new one is erased with FORGET.
|
PICK/ROLL
|
The
number on the stack was illegal for word PICK or
ROLL or a word containing one of
these. Should be 1 or greater.
|
PROTECTED
|
System
tried to FORGET a
word behind the protective fence. The fence is in address 1C +ORIGIN and can be changed.
|
UNDEFINED
|
The
word specified is not in the context or Forth vocabularies. If VLIST shows
it in the dictionary, then the word was never properly defined, e.g. the
compiler found a syntax error while trying to compile this word. Eliminate
it by
SMUDGE FORGET cccc , where cccc is the word.
|
When the error comes from normal processing, not a CRASHED MACHINE,
your own error messages or actions can be defined by putting the Code Field
Address (cfa) of the word you want to execute into the user variable WARNING . (Normally this contains zero, which activates the above
messages). E.g.
: ERRORS
CASE 1 OF ." Error type 1" ENDOF
2 OF ." Error type 2" ENDOF
3 OF ." Error type 3" ENDOF
ENDCASE ;
: INITIALISE ' ERRORS CFA WARNING ! ;
If INITIALISE has been executed in the application program then the
word ?ERROR will
enter ERRORS
as defined above if the flag is set:
1 1 ?ERROR gives 'Error type 1'
1 2 ?ERROR gives 'Error type 2'
1 3 ?ERROR gives 'Error type 3'
0 2 ?ERROR gives no error, flag not set.
See CRASHED MACHINE above
for details on defining the action to be taken when the microprocessor loses
control because of electrical spikes, etc.
|