Appendix
A
FIG-FORTH 1.1.
Glossary
The glossary is given in FIG-FORTH 1.1.
Based on the Installation Manual
glossary. We have seen many
words in the text, this is indicated by chapter numbers or assignments in
brackets, without any further explanation, eg:
Other
references refer to the original text of the glossary and to the words of
the glossary.
There are words whose stack is not marked.
They either do not have a toggle
(FORGET), or they can not be labeled with this technique (for example, COLD
evacuates the vermet). Markings
used to describe the stack effect:
b bytes, c character (so also a byte value), n one word, signed value, u one-word, unsigned value, d double word, signed value (ie 2 elements in the stack), ud double word, unsigned value (2 elements), f indicator, true true value flag, false counterfeit indicator, title one-word, unsigned value, ! (n title ---)
Store the 16-bit n value at address ( 7.2 ).CSP
The CSP sets the current value of the pointer ( 17.2 )# (ud1 --- ud2)
When converting numbers to strings, we use the word <# and #>. Generates the following character code in the output string. The duplicate value added is required to produce additional characters (this is a fraction of the division with BASE content and the character code is generated from the remainder). ( 11.1. )#> (ud-tag length)
Completion of converting numbers into strings. The title string and the length of the output string are placed on the stack, so this can be typed immediately with the TYPE word ( 11.1 ).#S (ud1 --- ud2)
When converting numbers into strings, we use the word <# and #>. Repeating the # word generates character codes in the output string as long as it has a precious value, that is, until the ratio for the additional conversion is 0. ( 11.1 ).' (--- title)
So we use
' nnnn.
The nnnn vocabulary word gives the parsing address of the verme. If used in the definition, the title is translated literally into the word that is defined. If there is no such dictionary word, the line is interrupted by the corresponding error message ( 14 4.2 and 16.5 ).( (---)
So we use:
(cccc)
A) to the delimiter comment is ignored. A) The delimiter must be (in words, it must be in a row!), It can be used in the same way as in executing state, do not forget the (after the word spacing space ( 1.4 , 10.3 , 16.2 )(. ") (---)
A. " is a translated word running, which writes the following (prominent) text ( 16.3 ).(; CODE) (---)
A; CODE is a running word that sets the pointer to the code stored in the parser in the last code of the word that is defined in the last word (CODE).(+ LOOP) (n ---)
A + LOOP is a running word that increases cindex by n and checks whether the cycle has ended.(ABORT)
Interruption defined by the user executing -1 of the WARNING variable. If you do not change it, call ABORT ( 13.3 , 14.4.3 ).(DO) (n1 n2 ---)
The DO is translated by the DO, which makes the cindex start value and the cycle bound for the vire.(
Title1 title2 --- pmmath length byte is true) or
(title1 title2 --- false)
Title2 searches for the name given in the dictionary by the title FORTH. If you find it, it will give you the paramname, the length of the search field and a true flag, if not, only a false sign. FIND calls.(LINE) (n1 n2 --- title length)
Displays the disc buffer address and total line length of the n1th line of the n2 th row ( 13.2 ).(LOOP)
A word translated by LOOP that increases the cindex and checks whether the cycle is over.(NUMBER) (d1 title1 --- d2 address2)
Returns the string starting with address1 + 1 in a doubling to BASE according to BASE and adding it to the d1 received in the vermin to get d2. address2 is the first non-convertible character address. NUMBER calls.[
Used in a double-point definition.
: xxxx [other words];
Pausing the translation. The words after [are not translated, but are executed until]. See LITERAL,] ( 16.4 ).[COMPILE]
Translates the immediate word behind it (which would not be translated without [COMPILE], but would be executed) ( 16.5 ).]
Restore the translation state. See] ( 16.4 ).* (n1 n2 --- product)
Indicates the sign of two signatures ( 1.4 ).* / (N1 n2 n3 n4 ---)
of n4 = (n1 * n2) / n3 enter quotient. All numbers are signed. The n1 * n2 product is stored in duplicate, allowing for greater precision than n1 n2 * n3 / series ( 6.4 ).* / MOD (n1 n2 n3 n4 n5 ---)
to (n1 * n2) / n3 enter division ratio n5 and n4 residue thereof. Store the product n1 * n2 in a duplicate. All values are signed ( 6.4 ).+ (n1 n2 --- sum)
Indicates the signed amount of two signed numbers ( 1.4 ).+! (n title ---)
Enter the signed n number at the 16-bit value on the address and store the amount in the address ( 8.3 ).+ - (n1 n2 --- n3)
If n1 is negative, n3 = -n2 if not, n3 = n2 .+ BUF (title1 --- address2 f)
Displays the title of the next disk buffer2 from the cim1 disk buffer. The returned flag is false if title2 is the address of the buffer stored in the PREV variable.+ LOOP
(n1 ---) (at run time)
(title n2 ---) (translation) In the
double-point definition, use the following form:
DO ... n1 + LOOP
When running, the + LOOP decides whether the control retracts DO respectively. add n1 to the cindex and compare the amount, that is, the new cindex to the cycle limit. (The cindex and the cycle limit are viruses during the cycle.) Returns to the DO until the new cindex is greater than or equal to the cycle limit (n1> 0) is less than or equal to (n1 <0). At exit from the cycle, the cindex and the cycle boundary are removed from the vire ( 4.7.). When translating, the word running (+ LOOP) and the address made by DO on the stack compile a relative bounce address relative to the dictionary dial. The n2 value is used for error checking during translation.+ ORIGIN (n --- address)
The address obtained is the address of the field of the load parameters, increasing by n., (n ---)
The value of n is stored in the place shown by the word counter; increases the value of the word counter with 2 ( 9.3 ).- (n1 n2 --- difference)
gives n1-n2 a difference ( 1.4 ).-> (---)
The interpretation of the shadow goes to ( 2.5 ).-DUP
(n1 --- n1) (if n1 = 0)
(n1 --- n1 n1) (if n1 <> 0)
n1 is doubled only if n1 <> 0. Usually it is used directly before IF to save the single ELSE branch containing the single DROP ( 3.2 ).-FIND
(--- pmcím length-byte true) (if found)
(--- false) (but)
Looks for the next word of my influence (space-bounded) in the dictionary. Once you find it, it will give you the title, the length of the name field and a true marker. If not, we only get a false sign ( 14.4 ).-TRAILING (title n1 --- address n2)
Changes the length of n1 in the title string so that the spaces at the end of the series are not comprehensible ( 13.2 ).. (n ---)
Prints n, converted to BASE, followed by a space ( 1.2 ).. " (---)
Used as follows:.
" cccc "
If used in the definition, it will translate the cccc text into the new word together with a running word that outputs the text to run on a run when running. Using a definition, the cccc text is immediately written ( 1.7 , 10.3 , 16.3 )..CPU (---)
Specifies the type of processor, that is, it gives us the message Z80.. LINE (Line Render ---)
Enter the specified line of the specified number of jets (without the end-of-space) on the device ( 13.2 )..R (n1 n2 ---)
Write the number n1 in a n2 length field aligned to the right ( 4.4 )./ (n1 n2 --- quotient)
The n1 / n2 indicates the vermin ( 1.4 )./ MOD (n1 n2 --- residual quotient)
Returns the remainder of the n1 / n2 division and its subscript ratio. The rest has the same sign as the dealer.0
1
2
3 (--- n)
Frequently used numbers, which are therefore constant in the dictionary ( 8.2.1 , 8.4 ).0 < (n --- f)
The signal obtained is true if n <0 ( 2.4 ).0 = (n --- f)
The signal obtained is true if n = 0 ( 2.4 ).0BRANCH (f ---)
The contingent running word running. If f is false, then with the parameter field after 0BRANCH, the address where the title interpreter continues to work (the parameter can be negative, this means the backward jump) increases. IF, UNTIL, WHILE are translated (among others) ( 17.1 ).1- (n1 --- n2)
n1 is reduced by 1 ( 2.4 ).
Increases 1+ (n1 --- n2) n1 to 1 ( 2.4 ).2- (n1 --- n2)
n1 to 2 ( 2.4 ).2+ (n1 --- n2) increases
n1 to 2 ( 2.4 ).2 * (n1 --- n2)
n1 is multiplied by 2.2 / (n1 --- n2)
n1 is divided by 2.2! (Title d ---)
The double word is stored on the title and the next 3 bytes (the previous contents of 4 bytes will be lost).2 @ (title --- d content)
puts a double word on the address and the next 3 bytes.2DUP (n1 n2 --- n1 n2 n1 n2) Copies the duplicate word
at the top of the stack to the top of the stack.: We use the
so called double-point words.
: cccc. ;
Creates a dictionary element named cccc into which the next FORTH words are translated; or CODE. The textinterpreter translates until the STATE status value is 0. The CONTEXT dictionary is the same as CURRENT ( 1.1 ).;
Completion of the colon word definition. Stops translation; translates the running word S ( 1.1 ).; CODE
So we use
: cccc ....; CODE assembler mnemonics
Stops the translation, finishes the new word cccc defining the word (; CODE). Converts the CONTEXT vocabulary to ASSEMBLER which translates mnemonics after CODE into machine code. If then defined by cccc, cccc nnnn, then the word nnnn will execute the machine code given after cccc. In cccc, there must be a definitive word before CODE.; S (---)
Stops the interpretation of an umbrella ( 2.5 ). By the end of the double-point definitions, this running word translates the; word ( 14.1 ).< (n1 n2 --- f)
Returned signal is true if n1 <n2 ( 2. ).<#
Convert numbers to strings. Conversion works on a double word, producing text at the pad ( 11.1 ).<BUILDS Used in a
double-point definition, such as:
cccc <BUILDS ... DOES> ...;
The created cccc word will be a definable word; when running, <BUILDS creates a new dictionary element:
cccc nnnn
The nnnn vocabulary element that you create calls in the definition of cccc, the procedure described after DOES>. When the word nnnn starts to run, it finds its own parsing address in the verme ( 15 ).= (n1 n2 --- f)
The signal obtained is true if n1 = n2 ( 2. ).> (n1 n2 --- f)
The signal obtained is true if n1> n2 ( 2.2 ).> R (n ---)
Displays the top element of the stack. Usually, we use the equation R> in equation ( 4.1 ).? (title ---)
Write the 16-bit number on the title to the device ( Task 8.1 ).? COMP With an
error message it interrupts the run if it is not called a translation state ( 17.2 ). CSP is
suspended by error message if the value of the pointer differs from the value stored in the CSP variable ( 17.2 ).? ERROR (f error row ---)
With an error message with the specified number, it interrupts the run if the flag is true ( 13.3 ). EXEC With
error message, it interrupts run when called in translation mode.? LOADING
An error message interrupts the run if it is not called a caller.? PAIRS (n1 n2 ---)
An error message interrupts the run if n1 <> n2. The error message indicates a bad match between the control structure keywords ( 17.2 ). STACK
An error message stops running if the stack is under or overflowed ( 18 ).? TERMINAL (--- f)
Checks whether the terminal has been interrupted (most of the time, if any key is pressed). ( 12.1. ).@ (title ---- n)
Returns the 16-bit content of the address ( 7.2 ).ABORT
Empties the dam, the virus, and the execution state. Provides control to the terminal; install-dependent message ( 13.3 ).ABS (n --- u)
Returns the absolute value of n number ( 1 ).AGAIN (address n ---) (translation)
Definition:
BEGIN ... AGAIN
When running, AGAIN gives control to BEGIN. The vermet remains unchanged. The cycle does not end (unless an R> DROP is executed at a call level below) ( 5.1 ).
When translating, the word BRANCH is translated, from the HERE to the address given to the worm. It is for error checking under translation ( 17. 3. ).ALLOT (n ---)
Displays the nominal number n for DP marking. We use it for booking, to organize memory ( 9.3 ).AND (n1 n2 --- n)
Performs bitwise AND operation between n1 and n2 ( 2.3 ).B / BUF (--- n)
Constant; the length of the disk buffers, the length at which BLOCK reads the virtual memory ( 13.1 ).B / SCR (--- n)
Constants, it specifies the number of blocks that each piece contains. According to the convention, the size of the screens is 1024 bytes, 16 by 64 characters ( 13.2 ).BACK (title ---)
The relative address is calculated from the HERE to jump to the given address in the verme. The calculated address is translated into the dictionary ( 17.3 ).BASE (--- address)
User variable; the base number of input and output conversions ( 8.2.1 ).BDOS ( parm fcode --- dircode)
where parm stands for the parameter passed to the BDOS in the DE register pair, and fcode is the BDOS function number. Dircode is the directory code returned by the BDOS. This enables you to access CP/M files using high level definitions.BEGIN (title --- n) (translation)
Definition:
BEGIN ... UNTIL,
BEGIN ... AGAIN,
BEGIN ... WHILE ... REPEAT
When running, BEGIN indicates the beginning of the cycle core, this return point is the corresponding UNTIL , AGAIN or REPEAT. UNTIL returns to BEGIN if the flag found on the stack is false, AGAIN and REPEAT always return ( 5.1 , 5.2 , 5.3 ). When translating, BEGIN leaves the return address and n (for serving for translation-proof error) n to the bug ( 17.3 ).BL (--- c)
The constant of the space code ( 8.4 ).BLANKS (Title Length ---) Spans
the length of the long memory area starting with the title ( Task 7.1 ).BLK (--- address)
User variable contains the number of the block that is being interpreted. If 0 is the interpreter works from the command buffer ( 13.1 ).BLOCK (n --- address) Returns the address of the disc buffer containing the nth block. If the block is not in memory, it will be scanned in the buffer that was the last one to refer to last. If the buffer was modified to read the block in a modified block then it will be released to the disk first. See also BUFFER, UPDATE, FLUSH ( 13.1 ).
BRANCH
The unconditional branching running word. The next field parameter increases the address where the interpreter performs his job (the parameter may be negative, which indicates a backward jump). The ELSE, AGAIN and REPEAT translations ( 17.1 ).BUFFER (n --- address)
Stores the next disc buffer as n-th block. If the previous contents of the buffer were modified, it will be written to the disc. The nth block is not read. The received address is the buffer for the first data storage address.BYE
Exits the FORTH interpreter. The modified blocks are written before exiting (the word FLUSH is executed), but no confirmation is expected.C! (b title ---)
The b bit of b is stored at the specified address ( 7.1 ).C, (b ---)
The b bit of b is stored in the next free byte of the dictionary, increasing the value of the word counter ( 9.3 ).C / L (--- b)
System constant. It gives the length of the queue lines (in characters), that is, fig-Forth 64 ( 13.2 ).C @ (title --- b)
Returns the title of the title to 8 bit ( 7.1 ).CFA (pmc --- code field address)
Produces the code field address ( 12.1 ) from the parameter field address of a dictionary word .CMOVE (where to where ---)
Moves the specified number of bytes from where the address is moved to. The byte at the lower address is first transmitted ( task 7.1.c ).COLD
The so-called. cold start. Set the dictionary to the minimum standard and restart it with ABORT. You can call from Terminal, delete our programs and restart the system ( 1.3 , 18 ).COMPILE
When the word containing the COMPILE is executed, the code field address of the word after the COMPILE is translated into the dictionary. We can handle some special translation situations ( 16.3 ).CONSTANT (n ---)
Defining word, like this:
n CONSTANT cccc
There is a n number in the parsed word cccc. If after this the word cccc is executed, the value n is placed on the stack ( 8.4 ).CONTEXT (--- address)
User variable; contains a pointer to the search dictionary.COUNT (Title1 --- Title2 Length)
The title of the text (which is no title other than title1 + 1) and the length of the text (the content of the length of the title1) begins with the title 1. COUNT is typically used before TYPE ( 10.1 ).CR (---)
Returns a carriage return and a line output character to the output device ( 1 ).CREATE Definition word
:
CREATE cccc
The code field of the cccc created word contains the parsing address of the word, the parser is empty (can be uploaded to CREATE afterwards). The new word is created in the chaining dictionary. The definition of; so we can close it down.CURRENT
CSP (--- address)
User variable to temporarily store the tax rate. Used for error checking under translation ( 17.2 ).D + (d1 d2 --- d sum)
Doubles the sum of the two double-blind values ( 6 ).D + - (d1 n --- d2)
If n is negative, d2 = -d1, if not, d2 = d1.D. (d ---)
Displays the doubling value for the output device, followed by a space. The upper part of the stack is the larger part of the stack. The conversion is done according to the BASE value ( 6.3 ).DR (dn ---)
Displays a double-blind value in a n-length field right-aligned ( 6.3 ).DABS (d-ud)
Returns the absolute value of d doubling ud ( 6.3 ).DECIMAL (---) Sets
the BASE value to 10 (so the numbers are written and scanned in a decimal system) ( 8.2.1 ).DEFINITIONS
We use:
cccc DEFINITIONS
Adjusts the chaining dictionary to the search dictionary. Executing the cccc dictionary name will make cccc a search dictionary, and after the DEFINITIONS the chaining dictionary will be cccc ( 12.2 ).DIGIT
(c n1 --- n2 true) (successful conversion)
(c n1 --- false) (unsuccessful conversion)
The c character code is converted to the binary equivalent of n2 by the base number n1. If the conversion succeeds, it will give a true flag. If conversion is not possible, we only get a false flag.DIGIT (--- b)
System variable. Indicates the result of the last disc operation. There was no error in 0.DISK-ERROR
DLITERAL
(d --- d) (in execution state)
(d ---) (at translation) When
translated, the double-word value found on the vermin translates to double-liter literals. The translated word will run on the stack when it runs. No effect at execution stage ( 16.4 ).DMINUS (d1 --- d2)
Returns duplicate d1 (duplicate) 1 times ( 6 ).DO
(n1 n2 ---) (running)
(--- address n) (translation) In the
definition of a double-point,
DO .. LOOP
DO ... + LOOP
When running, the DO launches an index cycle with a cycle limit of n1, the starting value of the cindex while n2. DO removes these values from the stack. When the program reaches the LOOP, the cindex increases by one. The program will always go back to DO after the LOOP until the cindex reaches or does not exceed the cycle limit. The cutoff of the cycle also means removing the cindex and the cycle limit, n1 and n2 must be given at run, which may be the result of other operations. Within the loop core, the actual value of the cindex can be copied to the stack by the word I. See I, LOOP, + LOOP. LEAVE ( 4.2 ,4.7. ).
When translating (DO), the word running at the start of the cycle core and the n value for the translation error checking are left on the worm.DOES>
Used together with <BUILDS. See <BUILDS ( 15. ).DP (--- title)
User variable, the word counter. Displays the first free memory address above the dictionary. Its value is read with the word HERE and can be changed with ALLOT ( 9.1 ).DPL (--- address)
User variable contains the number of digits after the decimal point of NUMBER last reading. If there was no decimal point, its value is - 1. ( 11.2 ).DR0
DR1
DROP (n ---)
Removes the top of the stack ( 1.5 ).DUP (n --- nn)
Duplicates the top element of the stack ( 1.5 ).ELSE (address1 n1 --- address2 n2) (translation) In the
definition of a double-point definition:
IF ... ELSE ... ENDIF.
When running, ELSE indicates the end of a true line after IF. The end of the true branch goes to ENDIF. There is no need for a drum ( 3.2 ). When translating the word BRANCH, it places the jump address, leaves the address of the fake branch2 and the n2 number for translation error checking. IF's translated jump address is calculated from address1 and HERE and stores the relative address on address1 ( 17.4 ).EMIT (c ---)
Write the character c to the output device ( 1 ). The value of the OUT variable is increased by one (see 8.2.2 ).EMPTY-BUFFERS
All blocks buffer is blank, possibly without changing its contents. Modified blocks are not written out. It also serves as the initial initialization procedure for the disc ( 13.1 ).ENCLOSE (title1 c --- title1 n1 n2 n3)
The WORD is a text analyzer primitiva. The vermen gets ca delimiter, title1 is the start address of the text to be analyzed. Returned addresses n1, n2, n3 are relative to address1, n1 is the first character of the first character after the address1, n2 is the first delimiter character after n1, n3 is the first non-analyzed character. Binary zero is considered bounded by irons regardless of the ac value.END is
the synonym for UNTIL.ENDIF (title n ---) (translation)
Use in a double-point definition:
IF ... ENDIF
IF ... ELSE ... ENDIF
When executing, ENDIF selects the IF or ELSE jumps. THEN is the synonym for ENDIF. See also IF and ELSE ( 3.1 ). When translating, ENDIF calculates the relative address of the heading to the HERE from the address and stores it in the address. The n number serves for error-checking during translation ( 17.4 ).ERASE (title n ---) Resets
n bytes from address ( task 7.1.e ).ERROR (n --- in blk)
Indicates a fault and restarts the system. The procedure performed depends on the value of WARNING. If WARNING 1 is the nth line counted from the 0th line of the fourth screen, an error message. (N may be negative too, but it may show too much on Screen 4.) If WARNING is 0, n is output as an error message (no virtual memory). If WARNING -1, the word (ABORT) is executed, which calls ABORT. The (ABORT) function can be changed by the programmer ( 14.4.3 ). The values of the IN and BLK system variables are stored on the stack so the error can be localized. The system is restarted with QUIT. ( 13.3. )EXECUTE (title ---)
Performs the word whose code field is in the worm ( 14.4.1 ).EXPECT (Address Character) - It
reads characters from the terminal to the title to the carriage curb or access to the specified character. At the end of the text one or more binary 0 ( 7.1 ) is added.EXTEND ( n ---)
extends (sic!) the logged in screens file by n blocks, as long as disc space permits. You could start by SAVE-ing a 0-size file at CCP level and then expand it after you logged in same file at the time you invoke FORTH (e.g. FORTH D:SCREENS.FRT).FCB (--- address)
leaves the address of the current file control block on the stack.FENCE (--- address)
User variable. It contains the address at which a lower address can not be deleted by FORGET (the dictionary is protected).FILL (address length b ---)
The memory is filled by the byte of the length of the memory by title (length 7.1.d ).FIRST (--- n)
Constant; the first block buffer address.FLD (--- address)
User variable; FIG-FORTH does not use it.FLUSH
Displays all modified blocks on disk.FORGET
This is how we use:
FORGET cccc
Deletes the word element cccc together with all the above. If the search and chaining dictionary does not match, we get an error message. ( 1.3. )FORTH
The name of the primary dictionary. Implementing FORTH as a search engine. The word FORTH is immediate, so it is executed at translation. ( 12.2. )HERE (--- address)
Returns the first free byte address above the dictionary ( 9.1 ).HEX (---)
Adjusts the conversion count to 16 (hexadecimal) ( 8.2.1 ).HLD (- address)
User variable. When converting numbers into strings, it contains the title of the last converted character.HOLD (c ---)
When converting numbers into strings, we use the word <# and #>. In the output string enter the ac code character; eg. 2E HOLD is a decimal point ( 11.1 ).I (--- n)
DO ... LOOP cycle; the cindex is placed on the stack ( 4.1 , 4.4 ).ID. (title ---)
Displays the name of the dictionary element whose name field is in the vermin ( 12.1 ).IF
(f ---) (run)
(--- title n) (translation)
Use in a double-point definition:
IF (true part) ... ENDIF IF (true part) ... ELSE (false part) ENDIF
IF based on the signal received, decides that the true or the false part will be executed. If the signal received is true, the true part is run, if not, the false part after the ELSE (if any). In both cases, the program continues after ENDIF. If the ELSE part is missing and the signal received is false, then control (END , 3.1 , 3.2 ) goes directly from IF to ENDIF . When translating, 0BRANCH is translated and leaves the jump address. The title and n will be used for later insertion of the jump address. ( 17.4 ).IMMEDIATE
Immediately defines the last word defined (sets its precedent). This means that if used in the instant word definition, it will be performed at translation and will not be translated into the new word. Instant words can be translated with the word [COMPILE]. ( 16.2. )IN (--- address)
User variable; it contains the title of the text relative to the beginning of the command buffer or block buffer that the WORD will read next. The IN value is used and set by the WORD ( 13.1 ).INDEX (tó --- ---) Between
the two borders, it lists the first lines of the viewers (which, according to the convention, are the comments about the content of the umbrella) ( 2.5 ).INTERPRET
An external textinterpreter that executes or translates words from my terminal (terminals or disks) to STATE. If the word
can not be found in the dictionary, it converts it into the BASE value. If that does not work, we get an error signal. Text is tagged by WORD. If a number contains a decimal point, it converts it into a double slice; the decimal point has no other effect (see NUMBER). ( 18 )KEY (--- c)
Displays the key code key on the terminal ( 2.1 ).LATEST (title)
Specifies the name of the top element of the linking dictionary ( 12.1 ).LEAVE
DO ... LOOP or DO ... + LOOP cycle. The cycle limit is adjusted to the cindex, reaching the end of the loop at the nearest LOOP or + LOOP. The value of the cindex remains unchanged ( 4.6 ).LFA (pmc --- chain address)
Displays the chain address address of a dictionary element ( 12.1 ).LIMIT (--- title)
Constant; the last available memory buffer for the disc buffer. In general, this is the highest memory address for the system.LIST (n ---)
Displays the text of the n-th screen for the device. The SCR variable will contain after the LIST the number of the numbered listener ( 2.5 , 13.2 ).LIT (--- n) In a
double-point definition, the translator translates LIT before compiling a 16-bit number. When running, LIT puts the field parameter behind it on the stack ( 16.4 ).LITERAL
(n ---) (translation)
(n --- n) (in execution state) When
translated, the value found in the vermin is translated into 16-bit literals. (The word is immediate, so it will be translated.) Typical use is the following.
: xxxx [calculations] LITERAL ...;
(The translation is suspended during calculations.) No effect is in effect ( 16.4 ).LOAD (n ---)
Starts the nth capsule to interpret. Interpretation (loading the umbrella) ends at the end of the umbrella or ends with the word S. See S and - ( 2.5 , 18 ).LOOP (address n ---) (when translating)
Use in a double-point definition:
DO ... LOOP
When running, the LOOP determines whether the control returns to DO by the cindex and its cycle limit value. Increase cindex by 1 and compare it with the cycle limit. It will go back to DO until the cindex reaches or does not exceed the cycle limit. Once it reaches the cindex and throws the cycle boundary, the program is moved ( 4.2 ). When translating the word (LOOP), it uses the address to calculate the address of the back to DO. It serves a turn-by-turn error check.M * (n1 n2 --- d)
Mixed action: multiplies the double-word multiplier ( 6 ).M / (d n1 --- n2 n3)
Blended operation: gives the n2 residues and n3 quotients of the ad / n1 divisional sign (6 ).M / MOD (ud1 u2 --- u3 ud4)
Unsigned mixed operation: gives ud1 / u2 division u3 residues and ud4 double-blind quotients ( 6 ).MAX (n1 n2 --- max)
Returns the two digits ( 1. )MESSAGE (n ---)
Displays the nth number of nurses (n can be negative) from the 0th row of the fourth screen. If WARNING 0 (because there is no virtual memory, for example), just type n ( 13.3 ).MIN (n1 n2 --- min)
The smaller of the two numbers ( 1. ).MINUS (n1 --- n2)
n2 = -n1 ( 1. ).MOD (n1 n2 --- mod)
Returns the remainder of n1 / n2, with the sign n1.NFA (pmname ---
name field ) Displays the address field name of a dictionary element ( 12.1 ).NOOP (---)
No operation (empty word).NUMBER (Title --- d)
Converts the FORTH item that starts with the title to a signed double-word value (corresponding to the BASE value). If the text contains a decimal point, its position is preserved in the DPL variable, but the decimal point has no other effect. If conversion is not possible, we will get an error message ( 11.2 ).OFFSET (--- title)
OR (n1 n2 --- or)
Bit-by-lease or logical operation ( 2.3 ).OUT (--- address)
User variable, EMIT increases. The programmer can change or examine the control format ( 8.2.2 ).OVER (n1 n2 --- n1 n2 n1)
Copy the second element of the stack to the top of the stack ( 1.5 ).P! (b b2 ---)
b1 to the b2 port Z80.P @ (b1 --- b2)
b1 of the Z80 port is read into b2.PAD (--- address)
Enter the address of the buffer used for text storage; this buffer is at a constant distance from HERE ( 7.1 , 9.1 ).PFA (name field name --- point name)
Returns the field name of a dictionary word ( 12.1 ).PREV (--- title)
Variable; contains the last reference block buffer number. The UPDATE command will mark this buffer as modified ( 13.1 ).QUERY
Scans a line from the terminal until ENTER is pressed, but up to 80 characters. The text is placed in the address provided by TIB and the IN variable is set to 0 ( 18 ).QUIT
Empty the virus, stop the translation and return the control to the terminal ( 7.3 , 18 ).R (--- n)
Copies the top element of the wine onto the stack ( 4.1 ).R / W
R # (--- address)
User variable is used by editors to store the cursor position.R> (--- n)
The top element of the vibe is placed on the stack. See> R and R ( 4.1 ).R0 (--- address)
User variable contains the initial value of the vibration index.REC# pushes the corresponding record count address onto the stack.
REPEAT (address n ---) (compile-time)
used specifically Dual definition:
BEGIN ... WHILE ... REPEAT
Running When control returns without BEGIN REPEAT condition beyond ( 5.3. ).ROT (n1 n2 n3 --- n2 n3 n1)
The third element of the stack is over ( 1.5 ).RP!
The vibration indicator is initialized by the variable R0.RP @ (--- address)
Returns the memory heading at which the vibration indicator is currently pointing.S-> D (n --- d)
Returns the duplicate equivalent of the signed number n.S0 (--- address)
User variable contains the initial value of the pointer (see SP!) ( 7.3 ).SCR (--- address)
User variable; ( 13.2 , 13.4 ) of the current (the last listed LIST ).SIGN (nd --- d)
When converting numbers to strings, we use the words <# and #>. If n is negative then inserts a - signal into the output string. Removes n from the stack, but leave the duplicate above it in peace ( 11.1 ).SMUDGE
The so-called. "smudge bit" is used. The "smudge bit" in the word field of the words is the length of the longitudinal bits. This allows you to validate the words at the end of the definition, so the unfinished definitions are invalid, and the interpreter does not even find them.SP!
Initializes the pointer with the value stored in S0.SP @ (--- address)
Returns the decimal point (before executing SP @) (eg 1 2 SP @ @ result: 2 2 1) ( 7.3 ).SPACE Write
a space on the device ( 1 ).SPACES (n ---)
n writes space for the device ( 4.3 ).STATE (--- address)
User variable indicates the system's translation or execution state. The non-0 value translates ( 16.1 ).SWAP (n1 n2 --- n2 n1)
Replaces the top two elements of the stack ( 1.5 ).TASK
Blank word, used for separating individual applications. If you translate the TASK before your own words, we can delete your words (application) at once by forgetting TASK FORGET.THEN is
the synonym for ENDIF.TIB (--- address)
User variable, contains the command buffer address ( 13.1 ).TOGGLE (title b ---)
Complements the title content by ab bit pattern.TRAVERSE (address1 n --- address2)
Passes the word field of a FORTH word. Title1 is the address of the longitude or last letter of the name field. If n = 1, from the beginning to the end of the name field, if n = -1, we move from the end to the beginning. Returned address2 is the address of the other end of the domain.TRIAD (listener)
lists 3 screens on the device: these include the specified number, and the first number is divisible by 3. You can interrupt the list of individual screens by pressing any key.TYPE (title character)
From the title, it outputs the specified number of characters to the device ( task 7.1 , task 7.1 ).U * (u1 u2 --- ud)
Denotes double unsigned, unmarked numbers of two unsigned numbers ( 6 ).U. (u ---)
Displays the unsigned value found on the screen, followed by a space ( 6.1 ).U / (ud u1 --- u2 u3)
The ud / u1 divide the u2 residues and u3 quotients. All values are unsigned, ud duplicate ( 6. ).U < (u1 u2 --- f)
Compares the unsigned value found on two worms. f is true if u1 <u2.UNTIL
(f ---) (at run time)
(title n ---) (translation) In the
definition of a double-point, use:
BEGIN ... UNTIL
When running, UNTIL returns the control to BEGIN conditionally (false value of the received flag); if the signal received is true, it will go further ( 5.2 ). When translating, it translates the 0BRANCH and the address from the HERE to the address to the address. It serves for error checking under translation (page 17.3 ).UPDATE
The last referenced block (the number of which is in the PREV variable) is denoted as modified. If the buffer containing the block then needs to store another block then the block is written to disk ( 13.1 ).USE (--- title)
Variable. It contains the number of block buffer to use (which is the last one in the buffer).USER (n ---)
Defining word, so use:
n USER cccc
This creates a cccc user variable. The cccc parity is n; the relative address of the user variable relative to the beginning of the table of user variables. If cccc is executed after that, the variable's address (the title of the table and the sum of n) is placed on the stack ( 14.3 ).VARIABLE (n ---)
Defining word, so use:
n VARIABLE cccc
VARIABLE creates a cccc word whose parser is initialized to n. If after these cccc is executed, the parame- ter is placed on the stack. This way we can read or change the value of the variable ( 8.3 ).VLIST
Lists the names of the search engine dictionary. Press any key) to stop the listing ( 1.1 , 12.1 ).VOC-LINK (--- address)
User variable contains a pointer for the last dictionary defined. Dictionary names are chained.VOCABULARY Defining
word is used:
VOCABULARY cccc
This creates a cccc dictionary, executing cccc as a search dictionary itself, and makes the
cccc DEFINITIONS
series a cccc-linking dictionary. Cccc contains the words in which the cccc was created. so all the dictionaries contain the words of the FORTH dictionary. Dictionary names are defined as immediate. ( 12.3. )WARM
The so-called. hot start. All blocks are blank, and the modified blocks are not written out. It drains the vermet and the virus and then enters the execution state.WARNING (--- address)
User variable controls the output of error messages. If the value is 1 and there is a virtual memory, the error messages are from the beginning of the fourth screen. If 0, the error message only identifies the error with its number. If -1, the word (ABORT) is executed (user defined interrupt, 14.4.3 ). See MESSAGE, ERROR ( 13.3 ).WHILE
(f ---) (running)
(address1 n1 --- address1 n1 address2 n2) (translation)
Used in a double-point definition.
BEGIN ... WHILE ... REPEAT
When running, WHILE's action depends on the signal received. If the flag is true, it will transfer the program to the true part of the REPEAT. REPEAT returns the control to BEGIN. If the signal is false, the control is output after REPEAT. When translating, WHILE translates 0BRANCH and places the address of the jump address address2 on the stack. This will enable REPEAT to swap the bounce address.WIDTH (--- address)
User variable contains the maximum word length. It can be between 1 and 31; if we do nothing, it is worth 31.WORD (c ---)
Reads the next portion of the string to be interpreted to the delimiter character c. The scanned part is made in the form of a FORTH garland to the HERE address. Add one or more spaces at the end of the text. C characters before the text to be scanned are ignored. If the BLK is 0, the text is taken from the command buffer, if not, from the block number stored in the BLK. See BLK, IN ( 10 ; 13.1 ).XOR (n1 n2 --- xor)
Returns the result of the bit-by-bit error OR between the two values (2.3 ).
The words of the Forth Extensions add-on:
2DROP (d ---)
Removes the double word at the top of the stack ( task 6.1 ).2OVER (d1 d2 --- d1 d2 d1)
Copy the second duplex word on the stack to the top of the stack ( task 6.1 ).2ROT (d1 d2 d3 --- d2 d3 d1)
The third double stack of the stack is top ( task 6.1 ).2SWAP (d1 d2 --- d2 d1)
Replaces the top two doubles of the stack ( task 6.1 )..STACK (---)
Lists the contents of the stack. .STACK does not change the vermet ( 1.6 , 7.3 )CASE ... OF ... ENDOF ... ENDCASE
A value-dependent control structure ( 17.5. )CLS (---)
Clears the screen. (Sends a 12 character code to the outboard).D- (d1 d2 --- d-coefficient
) Returns the difference d1 and d2 d1 to d2 (d1-d2) ( task 6.2 ).D = (d1 d2 --- f)
The signal obtained is true if the d1 and d2 doubling equals are equal ( task 6.2 ).D < (d1 d2 --- f)
The signal obtained is true if d2 doubling is greater than d1 doubling ( task 6.2 ).DEPTH (--- n)
Displays the stack elements (before DEPTH is executed) on the stack ( 1.6 , 7.3 )FREE (---)
Displays the amount of available memory available in bytes.INK (b ---)
Adjusts the color of the ink according to its b value (see IS-DOS User's Guide ).J (--- n)
The external cindex is placed on the stack ( 4.4 , 4.5 ).PICK (n1 --- n2)
Copy the stack n1 to the top of the stack ( 1.6 , 7.3 )ROLL (n ---)
Sends the nth element of the stack to the stack ( 1.6 , 7.3 ).SN (n1 --- n2)
-1 gives the worm if n1 is negative, + 1 is positive and 0 is zero.
error Number | error Message | |
December | hex | |
1 | 1 | empty
stack The stack is empty. |
2 | 2 | dictionary
full There is no more space in the dictionary. |
3 | 3 | has
incorrect address mode Wrong addressing mode. |
4 | 4 | is
not unique There is such a name in the dictionary. |
5 | 5 | |
6 | 6 | disc
range? There is no such block in virtual memory. |
7 | 7 | full
stack The stack is full. |
8 | 8 | disc
error! Disk error. |
9 | 9 | |
10 | THE | |
11 | B | |
12 | C | |
13 | D | |
14 | E | |
15 | F | |
16 | 10 | |
17 | 11 | compilation
only, use in definition Used in definition only. |
18 | 12 | execution
only Can be used in execution only . |
19 | 13 | conditionals
not paired Pairing of control structure keywords is incorrect. |
20 | 14 | definition
not finished Unfinished Definition. |
21 | 15 | in
protected dictionary is in the protected part of the dictionary. |
22 | 16 | use
only when loading Only used when printing. |
23 | 17 | off
current editing screen There is no current screen . |
24 | 18 | declare vocabulary |
There is no error message for error number 0, which we get if we try a word that is not in the dictionary and can not be interpreted as a number.
C) Appendix
The
text editor (editor)
The Ragsdale ditor itself is written in FORTH so you have to download it from the virtual memory before using it. The editor - according to the conventions - starts with the 7th wrap, and the editor's 2.0 version occupies 5 frames. So loading a
7 LOAD
with
instructions. The editor first
loads the FORTH Extensions plugin (whose words are described at the end of
Appendix A), creates its own dictionary, defines the editor's words, and
then sets the WARNING system variable to 1 (triggers the display of error
messages.) (Note: FORTH Extensions- you can use it without loading the editor,
so you will need to load it from the 17th.)
The words of the editor:
TEXT (c ---)
To c border character c reads the text of the influence and places it in the previously filled pad.LINE (n --- address)
Returns the title of the nth row of the current node.WHERE (blk in ---)
Using the parameters left by the ERROR, prints the number of the grid and row containing the error and the wrong line.#LOCATE (--- divide row) Displays
the current character position data: the number of the character row (row) and the number of characters within the row (spoz).#LEAD (--- line item extension) Displays
the current character position data: the memory address of the character containing the character and the number of characters within the line.#LAG (--- title
line length) Specifies the number of characters (line length) of the character address (character address ) of the current character position and of the character to the end of the line that contains the character.-MOVE (title line ---)
The line in the title is entered in the specified number of rows of the current quilt.
The words given so far are used by the other words in the editor, the user is not advised to use them. The words "user" of the editor:
B (---)
The current character position is retracted with the length of the text in the pad.C (---)
After entering the current character position, the text in the next line of my influence is entered.D (
Sort ---) Deletes the specified number of lines from the current pointer, but keeps the text in the pad (so you can move it elsewhere).E (
Sort ---) Displays a specified number of lines in the current window with spaces.F (---)
Looks for the next line of my influence in the current umbrella.H (
Sort ---) Copies the specified number of lines of the current window into the pad.I (
sort ---) Insert the line in the row with the specified number of rows (push the other rows below).L (---)
Lists the current screen. After the list, print out the current line again.M (n ---)
Increases the current character position with n, writes the line containing the new position.N (---)
Looks for the next occurrence of the FORTH garland in the pad; prints the line containing the new character position.P (
sort ---) Replaces the specified number of lines with the next line of my influence.R (
sort ---) Replaces the specified number of lines with the line in the pad.S (
Sort ---) Moves the rows of the current viewer down from the rows, and fills the nth line with space.T (sort ---)
The current character position will be the beginning of the specified number of lines; prints the line with the new position.X (---)
Finds the text in the next line of my influence in the current screen and deletes it.CLEAR (Number of nicks ---) Places
the number of umbrellas filled with space and makes it real.COPY (number1 number2 ---)
Copies the contents of the first screen to the second.DELETE (n ---)
Deletes the n characters before the current character position; fills the end of the line with space.FIND (---)
Looks for the text with the FORTH string in the pad in the current queue. If you can not find it, it will give you an error message and the beginning of the screen will have the current character position. If you find it, the current character position will be the end of the text.TILL (---)
Finds the text entered in the next row of its influence in the current character position row and deletes the part between the cursor and the end of the text.TOP (---)
The current character position will be the first character of the umbrella.TS (---)
Lists the current screen.1LINE (--- f)
In the current character position row of the current screen, after the current character position, searches for the text with the FORTH string in the pad, f will be true if found; the current character position will end with the text found. If you did not find it, f is false, and the current character position is the end of the line.
Note: A node is current because the SCR variable contains its serial number. The character position within the umbrella (cursor position) is actual from the fact that the variable R £ contains its serial number (relative to the front of the umbrella).
Practical
advice for editing an umbrella:
First, with INDEX, look for a (blank) umbrella for us.
If the content of an earlier
screen has become redundant and you want to enter a new program, you can
clear it with the CLEAR command.
Before using the editor's words,
remember to use the word EDITOR to make its dictionary default.
If you have a set of shades, you must first make it realistic, so use the
LIST word to find the actual content.
Then we have enough to use
the editor L word for the current list.
You can use the P command to
enter the current queue rows.
Example of using
it:
0 P: TABLA (multiplier)
1 P 11 1 DO
2 P CR 11 1 DO
3 P IJ * 4 .R
4 P LOOP
5 P LOOP CR
6 P;
Of
course, lines are not mandatory to start inside, or even write words in a
row up to 64 characters long.
The end of longer lines is
lost, we have to pay attention to that!
AP also means that you have
to leave a space, but this does not count in the length of the line.
The lines are, of course, not
required to be in ascending order and leave blank lines for clarity.
If you want to insert a line somewhere in the back, it is worth doing the
S word. You can also copy a
line by using the H and I words sequentially.
To move the row, the words
D and I can be used sequentially.
We can not just move / copy
within a window, but we also need to switch between the two words (preferably
using the LIST word).
D) Appendix
A
fig-Forth memory allocation
file: /Techref/language/FORTH/z80fig-Forth1_1g_files/appendix.htm, 218KB, , updated: 2018/11/8 19:12, local time: 2024/11/9 00:02,
44.211.24.175:LOG IN ©2024 PLEASE DON'T RIP! THIS SITE CLOSES OCT 28, 2024 SO LONG AND THANKS FOR ALL THE FISH!
|
©2024 These pages are served without commercial sponsorship. (No popup ads, etc...).Bandwidth abuse increases hosting cost forcing sponsorship or shutdown. This server aggressively defends against automated copying for any reason including offline viewing, duplication, etc... Please respect this requirement and DO NOT RIP THIS SITE. Questions? <A HREF="http://www.ecomorder.com/techref/language/FORTH/z80fig-Forth1_1g_files/appendix.htm"> appendix </A> |
Did you find what you needed? |
Welcome to ecomorder.com! |
Welcome to www.ecomorder.com! |
.