This appendix contains three lists:
The following tables describe FCodes currently supported by OpenBoot. Both the FCode token values and Forth names are included. A token value entry of CR indicates a tokenizer-generated sequence, while - indicates that no FCode is generated.
Table A-1 Stack Manipulation
-------------------------------------------------------------------------------------------------------------------
Value Function Stack Description -------------------------------------------------------------------------------------------------------------------
51 depth ( -- u ) How many items on stack?
46 drop ( x -- ) Removes x from the stack
52 2drop ( x1 x2 -- ) Removes 2 items from stack
CR 3drop ( x1 x2 x3 -- ) Removes 3 items from stack
47 dup ( x -- x x ) Duplicates x
53 2dup ( x1 x2 -- x1 x2 x1 x2 ) Duplicates 2 stack items
CR 3dup ( x1 x2 x3 -- x1 x2 x3 x1 x2 x3 ) Copies top 3 stack items
50 ?dup ( x -- 0 | x x) Duplicates x if it is non-zero
4D nip ( x1 x2 -- x2 ) Discards the second stack item
48 over ( x1 x2 -- x1 x2 x1 ) Copies second stack item to top of stack
54 2over ( x1 x2 x3 x4 -- x1 x2 x3 x4 x1 x2 ) Copies 2 stack items
4E pick ( xu ... x1 x0 u -- xu ... x1 x0 xu ) Copies u-th stack item
30 >r ( x -- ) ( R: -- x) Moves a stack item to the return stack
31 r'> ( -- x ) ( R: x -- ) Moves item from return stack to data stack
32 r@ ( -- x ) ( R: x -- x ) Copies the top of the return stack to the data stack
4F roll ( xu ... x1 x0 u -- xu-1 ... x1 x0 xu ) Rotates u stack items
4A rot ( x1 x2 x3 -- x2 x3 x1 ) Rotates 3 stack items
4B -rot ( x1 x2 x3 -- x3 x1 x2 ) Shuffles top 3 stack items
56 2rot ( x1 x2 x3 x4 x5 x6 -- x3 x4 x5 x6 x1 x2 ) Rotates 3 pairs of stack items
49 swap ( x1 x2 -- x2 x1 ) Exchanges the top 2 stack items
55 2swap ( x1 x2 x3 x4 -- x3 x4 x1 x2 ) Exchanges 2 pairs of stack items
4C tuck ( x1 x2 -- x2 x1 x2 ) Copies the top stack item below the second item
-------------------------------------------------------------------------------------------------------------------
Table A-2 Arithmetic Operations
--------------------------------------------------------------------------------------------------------------------
Value Function Stack Description --------------------------------------------------------------------------------------------------------------------
20 * ( nu1 nu2 -- prod ) Multiplies nu1 times nu2
1E + ( nu1 nu2 -- sum ) Adds nu1+nu2
1F - ( nu1 nu2 -- diff ) Subtracts nu1-nx2
21 / ( n1 n2 -- quot ) Divides n1/n2
CR 1+ ( nu1 -- nu2 ) Adds one
CR 1- ( nu1 -- nu2 ) Subtracts one
CR 2+ ( nu1 -- nu2 ) Adds 2
CR 2- ( nu1 -- nu2 ) Subtracts 2
59 2* ( x1 -- x2 ) Multiplies by 2
57 2/ ( x1 -- x2 ) Divides by 2
27 lshift ( x1 u -- x2 ) Left shifts x1 by u places
28 rshift ( x1 u -- x2 ) Right shifts x1 by u places
CR <<a ( n1 u -- n2 ) Arithmetic left shifts (same as lshift)
29 >a ( x1 u -- x2 ) Arithmetic right shifts n1 by u places
2D abs ( n -- u ) Absolute value
AE aligne ( n1 -- n1|a-addr ) Adjusts an address to a machine word boundary
d
23 and ( x1 x2 -- x3 ) Logical and
AC bounds ( n cnt -- n+cnt n ) Converts start,len to end,start for do loop
2F max ( n1 n2 -- n1|n2 ) n3 is maximum of n1 and n2
2E min ( n1 n2 -- n1|n2 ) n3 is minimum of n1 and n2
22 mod ( n1 n2 -- rem ) Remainder of n1/n2
CR */mod ( n1 n2 n3 -- rem quot ) Remainder, quotient of n1*n2/n3
2A /mod ( n1 n2 -- rem quot ) Remainder, quotient of n1/n2
2C negate ( n1 -- n2 ) Changes the sign of n1
26 invert ( x1 -- x2 ) One's complement
CR not ( x1 -- x2 ) Synonym for invert
24 or ( x1 x2 -- x3 ) Logical or
2B u/mod ( u1 u2 -- urem uquot ) Unsigned 32-bit divide of u1/u2
58 u2/ ( x1 -- x2 ) Logical right shifts 1 bit
25 xor ( x1 x2 -- x3 ) Exclusive or
D4 um* ( u1 u2 -- ud.prod ) Multiplies two unsigned quadlets, yields an unsigned 64-bit
product.
D5 um/mod ( ud u -- urem uquot ) Divides an unsigned 64-bit number by an unsigned quadlet, yields a
32-bit remainder and quotient
D8 d+ ( d1 d2 --d.sum ) Adds two 64-bit numbers
D9 d- ( d1 d2 -- d.diff ) Subtracts two 64-bit numbers
--------------------------------------------------------------------------------------------------------------------
Table A-3 Memory Operations
-----------------------------------------------------------------------------------------------------------------
Value Function Stack Description -----------------------------------------------------------------------------------------------------------------
72 ! ( x a-addr -- ) Stores a number into the variable at a-addr
6C +! ( nu a-addr -- ) Adds nu to the number stored in the variable at a-addr
77 2! ( x1 x2 a-addr -- ) Stores 2 numbers at a-addr; x2 at lower address
76 2@ ( a-addr -- x1 x2 ) Fetches 2 numbers from a-addr; x2 from lower address
6D @ ( a-addr -- x ) Fetches a number from the variable at a-addr
CR ? ( a-addr -- ) Displays the number at a-addr
75 c! ( byte addr -- ) Stores low byte of n at addr
71 c@ ( addr -- byte ) Fetches a byte from addr
CR blank ( addr len -- ) Sets len bytes of memory to ASCII space, starting at addr
7A comp ( addr1 addr2 len -- n ) Compares two byte arrays including case. n=0 if same
CR erase ( addr len -- ) Sets len bytes of memory to zero, starting at addr
79 fill ( addr len byte -- ) Sets len bytes of memory to value byte
0228 lbflip ( qaddr len -- ) Reverses bytes within each quadlet in given region
s
0237 lwflip ( qaddr len -- ) Exchanges doublets within quadlets in qaddr len
s
73 l! ( quad qaddr -- ) Stores the quadlet at qaddr, must be 32-bit aligned
6E l@ ( qaddr -- quad ) Fetches the quadlet at qaddr, must be 32-bit aligned
78 move ( src-addr dest-addr len -- ) Copies len bytes from src-addr to dest-addr, handles overlap
correctly.
6B off ( a-addr -- ) Stores false (32-bit 0) at a-addr
6A on ( a-addr -- ) Stores true (32-bit -1) at a-addr
0236 wbflip ( waddr len -- ) Exchanges bytes within doublets in the specified region
s
74 w! ( w waddr -- ) Stores a doublet at waddr, must be 16-bit aligned
6F w@ ( waddr -- w ) Fetches the unsigned doublet at waddr, must be 16-bit aligned
70 <w@ ( waddr -- n ) Fetches the signed doublet at waddr, must be 16-bit aligned
-----------------------------------------------------------------------------------------------------------------
Table A-4 Atomic Access
-------------------------------------------------------------------------------------------------
Value Function Stack Description -------------------------------------------------------------------------------------------------
0230 rb@ ( addr -- byte ) Reads the 8-bit value at the given address, atomically
0231 rb! ( byte addr -- ) Writes the 8-bit value at the given address, atomically
0232 rw@ ( waddr -- w ) Reads the doublet at the given address, atomically
0233 rw! ( w waddr -- ) Writes the doublet at the given address, atomically
0234 rl@ ( qaddr -- quad ) Reads the quadlet at the given address, atomically
0235 rl! ( quad qaddr -- ) Writes the quadlet at the given address, atomically
-------------------------------------------------------------------------------------------------
Table A-5 Data Exception Tests
-----------------------------------------------------------------------------------------------------------------------------
Value Function Stack Description -----------------------------------------------------------------------------------------------------------------------------
0220 cpeek ( addr -- false | byte true ) Reads 8-bit value at given address, returns false if unsuccessful
0221 wpeek ( waddr -- false | w true ) Reads doublet at given address, returns false if unsuccessful
0222 lpeek ( qaddr -- false | quad true ) Reads quadlet at given address, returns false if unsuccessful
0223 cpoke ( byte addr -- okay? ) Writes 8-bit value at given address, returns false if unsuccessful
0224 wpoke ( w waddr -- okay? ) Writes doublet at given address, returns false if unsuccessful
0225 lpoke ( quad qaddr -- okay? ) Writes quadlet at given address, returns false if unsuccessful
-----------------------------------------------------------------------------------------------------------------------------
Table A-6 Comparison Operations
---------------------------------------------------------------------------------------------
Value Function Stack Description ---------------------------------------------------------------------------------------------
36 0< ( n -- less-than-0? ) True if n < 0
37 0<= ( n -- less-or-equal-to-0? ) True if n <= 0
35 0<'> ( n -- not-equal-to-0? ) True if n < 0
34 0= ( nulflag -- equal-to-0? ) True if n = 0, also inverts any flag
38 0'> ( n -- greater-than-0? ) True if n 0
39 0= ( n -- greater-or-equal-to-0? ) True if n = 0
<
3A ( n1 n2 -- less? ) True if n1 < n2
43 <= ( n1 n2 -- less-or-equal? ) True if n1 <= n2
3D <'> ( x1 x2 -- not-equal? ) True if x1 < x2
3C = ( x1 x2 -- equal? ) True if x1 = x2
>
3B ( n1 n2 -- greater? ) True if n1 n2
42 >= ( n1 n2 -- greater-or-equal? ) True if n1 = n2
44 between ( n min max -- min<=n<=max? ) True if min <= n <= max
CR false ( -- false ) The value false
CR true ( -- true ) The value true
40 u< ( u1 u2 -- unsigned-less? ) True if u1 < u2, unsigned
3F u<= ( u1 u2 -- unsigned-less-or-equal? ) True if u1 <= u2, unsigned
3E u'> ( u1 u2 -- unsigned-greater? ) True if u1 u2, unsigned
41 u= ( u1 u2 -- unsigned-greater-or-equal? ) True if u1 = u2, unsigned
45 within ( n min max -- min<=n<max? ) True if min <= n < max
---------------------------------------------------------------------------------------------
Table A-7 Text Input
---------------------------------------------------------------------------------------------------------------
Value Function Stack Description ---------------------------------------------------------------------------------------------------------------
- ( ( [text<) --) Begins a comment (ignored)
- \ ( -- ) Ignore rest of line (comment)
CR ascii ( [text< ] -- char ) ASCII value of next character
CR control ( [text< ] -- char ) Interprets next character as ASCII control character
8E key ( -- char ) Reads a character from the keyboard
8D key? ( -- pressed? ) True if a key has been typed on the keyboard
CR accept ( addr len1 -- len2 ) Gets an edited input line, stores it at addr
8A expect ( addr len -- ) Gets a line of edited input from the keyboard; stores it at addr
88 span ( -- a-addr ) Variable containing the number of characters read by expect
---------------------------------------------------------------------------------------------------------------
Table A-8 ASCII Constants
------------------------------------------------------------------------------------------
Value Function Stack Description ------------------------------------------------------------------------------------------
AB bell ( -- 0x07 ) The ASCII code for the bell character; decimal 7
A9 bl ( -- 0x20 ) The ASCII code for the space character; decimal 32
AA bs ( -- 0x08 ) The ASCII code for the backspace character; decimal 8
CR carret ( -- 0x0D ) The ASCII code for the carriage return character; decimal 13
CR linefeed ( -- 0x0A ) The ASCII code for the linefeed character; decimal 10
CR newline ( -- n ) The ASCII code for the newline character; decimal 10
------------------------------------------------------------------------------------------
Table A-9 Numeric Input
-------------------------------------------------------------------------------------
Value Function Stack Description -------------------------------------------------------------------------------------
A4 -1 ( -- -1 ) Constant -1
A5 0 ( -- 0 ) Constant 0
A6 1 ( -- 1 ) Constant 1
A7 2 ( -- 2 ) Constant 2
A8 3 ( -- 3 ) Constant 3
CR d# ( [number< ] -- n ) Interprets next number in decimal
- decimal ( -- ) If outside definition, input text in decimal
CR h# ( [number< ] -- n ) Interprets next number in hexadecimal
- hex ( -- ) If outside definition, input text in hexadecimal
CR o# ( [number< ] -- n ) Interprets next number in octal
- octal ( -- ) If outside definition, input text in octal
-------------------------------------------------------------------------------------
Table A-10 Numeric Primitives
------------------------------------------------------------------------------------------------------------------
Value Function Stack Description ------------------------------------------------------------------------------------------------------------------
99 u# ( u1 -- u2 ) Converts a digit in pictured numeric output
97 u#'> ( u -- str len ) Ends pictured numeric output
96 <# ( -- ) Initializes pictured numeric output
C7 # ( ud1 -- ud2 ) Converts a digit in pictured numeric output
conversion
C9 #'> ( ud -- str len ) Ends pictured numeric output conversion
A0 base ( -- a-addr ) Variable containing number base
A3 digit ( char base -- digit true | char false ) Converts a character to a digit
95 hold ( char -- ) Inserts the char in the pictured numeric output string
C8 #s ( ud -- 0 0 ) Converts remaining digits in pictured numeric
output
9A u#s ( u1 -- u2 ) Converts rest of the digits in pictured numeric output
98 sign ( n -- ) Sets sign of pictured output
A2 $numbe ( addr len -- true | n false ) Converts a string to a number
r
------------------------------------------------------------------------------------------------------------------
Table A-11 Numeric Output
---------------------------------------------------------------------------------
Value Function Stack Description ---------------------------------------------------------------------------------
9D . ( nu -- ) Displays a number
CR .d ( n -- ) Displays number in decimal
CR decimal ( -- ) If inside definition, output in decimal
CR .h ( n -- ) Displays number in hexadecimal
CR hex ( -- ) If inside definition, output in hexadecimal
CR octal ( -- ) If inside definition, output in octal
9E .r ( n size -- ) Displays a number in a fixed width field
9F .s ( ... -- ... ) Displays the contents of the data stack
CR s. ( n -- ) Displays n as a signed number
9B u. ( u -- ) Displays an unsigned number
9C u.r ( u size -- ) Prints an unsigned number in a fixed width field
---------------------------------------------------------------------------------
Table A-12 General-purpose Output
---------------------------------------------------------------------------------
Value Function Stack Description ---------------------------------------------------------------------------------
CR .( ( [text<)] -- ) Displays a string now
91 (cr ( -- ) Outputs ASCII CR character; decimal 13
92 cr ( -- ) Starts a new line of display output
8F emit ( char -- ) Displays the character
CR space ( -- ) Outputs a single space character
CR spaces ( cnt -- ) Outputs cnt spaces
90 type ( text-str text-len -- ) Displays n characters
---------------------------------------------------------------------------------
Table A-13 Formatted Output
-----------------------------------------------------------------------------------------
Value Function Stack Description -----------------------------------------------------------------------------------------
94 #line ( -- a-addr ) Variable holding the line number on the output device
93 #out ( -- a-addr ) Variable holding the column number on the output device
-----------------------------------------------------------------------------------------
Table A-14 begin Loops
-------------------------------------------------------------------------------------------------------
Value Function Stack Description -------------------------------------------------------------------------------------------------------
CR again ( C: dest-sys -- ) Ends begin...again (infinite) loop
CR begin ( C: -- dest-sys ) ( -- ) Starts conditional loop
CR repeat ( C: orig-sys dest-sys -- ) ( -- ) Returns to loop start
CR until ( C: dest-sys -- ) ( done? -- ) If true, exits begin...until loop
CR while ( C: dest-sys -- orig-sys dest-sys ) If true, continues begin...while...repeat loop,
( continue? -- ) else exits loop
-------------------------------------------------------------------------------------------------------
Table A-15 Conditionals
----------------------------------------------------------------------------------------------------
Value Function Stack Description ----------------------------------------------------------------------------------------------------
CR if ( C: -- orig-sys ) ( do-next? -- ) If true, executes next FCode(s)
CR else ( C: orig-sys1 -- orig-sys2 ) ( -- ) (optional) Executes next FCode(s) if if failed
CR then ( C: orig-sys -- ) ( -- ) Terminates if...else...then
----------------------------------------------------------------------------------------------------
Table A-16 Case Statements
---------------------------------------------------------------------------------------------------------
Value Function Stack Description ---------------------------------------------------------------------------------------------------------
CR case ( C: -- case-sys) ( sel -- sel ) Begins a case (multiple selection) statement
CR endcase ( C: case-sys -- ) ( sel | <nothing -- ) Marks end of a case statement
CR of ( C: case-sys1 -- case-sys2 of-sys ) Returns to loop start
( sel of-val -- sel | <nothing )
CR endof ( C: case-sys1 of-sys -- case-sys2 ) ( -- ) If true, exits begin...until loop
---------------------------------------------------------------------------------------------------------
Table A-17 do Loops
---------------------------------------------------------------------------------------------------------------
Value Function Stack Description ---------------------------------------------------------------------------------------------------------------
CR do ( C: -- dodest-sys ) Loops, index start to end-1 inclusive
( limit start -- ) (R: -- sys )
CR ?do ( C: -- dodest-sys ) Like do, but skips loop if end = start
( limit start -- ) ( R: -- sys )
19 i ( -- index ) ( R: sys -- sys ) Returns current loop index value
1A j ( -- index ) ( R: sys -- sys ) Returns value of next outer loop index
CR leave ( -- ) ( R: sys -- ) Exits do loop immediately
CR ?leave ( exit? -- ) ( R: sys -- ) If flag is true, exits do loop
CR loop ( C: dodest-sys -- ) ( -- ) Increments index, returns to do
( R: sys1 -- <nothing | sys2)
CR +loop ( C: dodest-sys -- ) ( delta -- ) Increments by n, returns to do. If n<0, index start to
end
( R: sys1 -- <nothing | sys2 )
89 unloop ( -- ) ( R: sys -- ) Discards loop control parameters
---------------------------------------------------------------------------------------------------------------
Table A-18 Control Words
------------------------------------------------------------------------------------------------
Value Function Stack Description ------------------------------------------------------------------------------------------------
1D execute ( ... xt -- ??? ) Executes the word whose compilation address is on the stack
33 exit ( -- ) (R: sys -- ) Returns from the current word
------------------------------------------------------------------------------------------------
Table A-19 Strings
------------------------------------------------------------------------------------------------------
Value Function Stack Description ------------------------------------------------------------------------------------------------------
CR " ( [text<"< ] -- text-str text-len ) Collects a string
CR s" ( [text<"] -- test-str text-len ) Gathers the immediately-following string
84 count ( pstr -- str len ) Unpacks a packed string
82 lcc ( char1 -- char2 ) Converts char to lower case
83 pack ( str len addr -- pstr ) Makes a packed string from addr len,
placing it at pstr
81 upc ( char1 -- char2 ) Converts char to upper case
0240 left-parse- ( str len char Splits a string at the given delimiter (which
string is discarded)
-- R-str R-len L-str L-len )
011B parse-2int ( str len -- val.lo val.hi ) Converts a string into a physical address
and space
------------------------------------------------------------------------------------------------------
Table A-20 Defining Words
----------------------------------------------------------------------------------------------------
Value Function Stack Description ----------------------------------------------------------------------------------------------------
CR : (colon) ( -- ) Begins colon definition
name
CR ; ( -- ) Ends colon definition
(semicolon
)
- alias ( E: ... -- ???) Creates newname with behavior of
oldname
( "new-name< old-name< " -- )
CR buffer: ( E: -- a-addr ) Creates data array of size bytes
( len "new-name< " -- )
CR constant ( E: -- x ) ( x "new-name< " -- ) Creates a constant
CR create ( E: -- a-addr ) ( "new-name< " -- ) Generic defining word
CR defer ( E: ... -- ??? ) ( "new-name< " -- ) Execution vector (change with is)
CR field ( E: addr -- addr+offset ) ( offset size "new- Creates a named offset pointer
name< " -- offset+size )
C0 instance ( -- ) Declare a data type to be local
CR struct ( -- 0 ) Initializes for field creation
CR variable ( E: -- a-addr ) ( "new-name< "-- ) Creates a data variable
CR value ( E: -- x) ( x "new-name< "-- ) Creates named value-type variable
(change with is)
----------------------------------------------------------------------------------------------------
Table A-21 Dictionary Compilation
--------------------------------------------------------------------------------------------
Value Function Stack Description --------------------------------------------------------------------------------------------
D3 , ( x -- ) Places a number in the dictionary
D0 c, ( byte -- ) Places a byte in the dictionary
AD here ( -- addr ) Address of top of dictionary
D2 l, ( quad -- ) Places a quadlet in the dictionary
D1 w, ( w -- ) Places a doublet in the dictionary
CR allot ( len -- ) Allocates len bytes in the dictionary
CR to ( param [old-name< ] -- ) Changes value in a defer word or a value
DD compile ( -- ) Compiles following command at run time
DC state ( -- a-addr ) Variable containing true if in compilation state
--------------------------------------------------------------------------------------------
Table A-22 Dictionary Search
----------------------------------------------------------------------------------------------------
Value Function Stack Description ----------------------------------------------------------------------------------------------------
CR ' ( "old-name< " -- xt ) Finds the word (while executing)
CR ['] name ( -- xt ) Finds word (while compiling)
CB $find ( name-str name-len Finds a name in the dictionary
-- xt true | name-str name-len false )
CD eval ( ... str len -- ??? ) Executes Forth commands within a string
CD evaluate ( ... str len -- ??? ) Interprets Forth text from the given string
----------------------------------------------------------------------------------------------------
Table A-23 Conversion Operators
--------------------------------------------------------------------------------------------
Value Function Stack Description --------------------------------------------------------------------------------------------
7F bljoin ( bl.lo b2 b3 b4.hi -- quad ) Joins four bytes to form a quadlet
B0 bwjoin ( b.lo b.hi -- w ) Joins two bytes to form a doublet
5A /c ( -- n ) Address increment for a byte; 1
- /c* ( nu1 -- nu2 ) Synonym for chars
66 chars ( nu1 -- nu2 ) Multiplies by /c
5E ca+ ( addr1 index -- addr2 ) Increments addr1 by index times /c
CR ca1+ ( addr1 -- addr2 ) Synonym for chars+
62 char+ ( addr1 -- addr2 ) Increments addr1 by /c
80 wbflip ( w1 -- w2 ) Swaps the bytes within a doublet
5C /l ( -- n ) Address increment for a quadlet;
68 /l* ( nu1 -- nu2 ) Multiplies by /l
60 la+ ( addr1 index -- addr2 ) Increments addr1 by index times /l
64 la1+ ( addr1 -- addr2 ) Increments addr1 by /l
0227 lbflip ( quad1 -- quad2 ) Reverses the bytes within a quadlet
7E lbsplit ( quad -- b.lo b2 b3 b4.hi ) Splits a quadlet into four bytes
7E lwflip ( quad1 -- quad2 ) Swaps the doublets within a quadlet
7C lwsplit ( quad -- w1.lo w2.hi ) Splits a quadlet into two doublets
5D /n ( -- n ) Address increment for a normal;
CR /n* ( nu1 -- nu2 ) Synonym for cells
69 cells ( nu1 -- nu2 ) Multiplies by /n
61 na+ ( addr1 index -- addr2 ) Increments addr1 by index times /n
CR na1+ ( addr1 -- addr2 ) Synonym for cell+
65 cell+ ( addr1 -- addr2 ) Increments addr1 by /n
5B /w ( -- n ) Address increment for a doublet;
67 /w* ( nu1 -- nu2 ) Multiplies by /w
5F wa+ ( addr1 index -- addr2 ) Increments addr1 by index times /w
63 wa1+ ( addr1 -- addr2 ) Increments addr1 by /w
AF wbsplit ( w -- b1.lo b2.hi ) Splits a doublet into two bytes
7D wljoin ( w.lo w.hi -- quad ) Joins two doublets to form a quadlet
--------------------------------------------------------------------------------------------
Table A-24 Memory Buffers Allocation
-----------------------------------------------------------------------------------------
Value Function Stack Description -----------------------------------------------------------------------------------------
8B alloc- ( len -- a-addr ) Allocates nbytes of memory and returns its address
mem
8C free-mem ( a-addr len -- ) Frees memory allocated by alloc-mem
-----------------------------------------------------------------------------------------
Table A-25 Miscellaneous Operators
--------------------------------------------------------------------------------------------------
Value Function Stack Description --------------------------------------------------------------------------------------------------
86 >body ( xt -- a-addr ) Finds parameter field address from compilation address
85 body'> ( a-addr -- xt ) Finds compilation address from parameter field address
DA get-token ( FCode# -- xt Converts FCode Number to function execution token
immediate? )
DB set-token ( xt immediate? Assigns FCode Number to existing function
FCode# -- )
00 end0 ( -- ) Marks the end of FCode
FF end1 ( -- ) Alternates form for end0 (not recommended)
CR fcode- ( -- ) Begins FCode program
version1
023E byte-load ( addr xt -- ) Interprets FCode beginning at location addr
- fload ( [filename<cr] -- ) Begins tokenizing filename
- headerless ( -- ) Creates new names with new-token (no name fields)
- headers ( -- ) Creates new names with named-token (default)
7B noop ( -- ) Does nothing
CC offset16 ( -- ) All further branches use 16-bit offsets (instead of 8-bit)
- tokenizer[ ( -- ) Begins tokenizer program commands
- ]tokenizer ( -- ) Ends tokenizer program commands
CR fcode- ( -- ) Begins 2.0 FCode program, compiles start1
version2
- external ( -- ) Creates new names with external-token
--------------------------------------------------------------------------------------------------
Table A-26 Internal Operators, (invalid for program text)
---------------------------------------------------------------------------------------------------------------
Value Function Stack Description ---------------------------------------------------------------------------------------------------------------
01-0F First byte of a two byte FCode
10 b(lit) ( -- n ) ( F: /FCode-num32/ -- ) Followed by 32-bit#. Compiled by numeric data
11 b(') ( -- xt ) ( F: /FCode#/ -- ) Followed by a token (1 or 2-byte code) . Compiled
by ['] or '
12 b(") ( -- str len ) Followed by count byte, text. Compiled by " or ."
( F: /FCode-string/ -- )
C3 b(to) ( x -- ) Compiled by to
FD version1 ( -- ) Followed by reserved byte, checksum (2 bytes) ,
length (4 bytes). Compiled by fcode-version1, as
the first FCode bytes
13 bbranch ( -- ) ( F: /FCode-offset/ -- ) Followed by offset. Compiled by else or again
14 b?branch ( don't-branch? -- ) Followed by offset. Compiled by if or until
( F: /FCode-offset/ -- )
15 b(loop) ( -- ) ( F: /FCode-offset/ -- ) Followed by offset. Compiled by loop
16 b(+loop) ( delta -- ) Followed by offset. Compiled by +loop
( F: /FCode-offset/ -- )
17 b(do) ( limit start -- ) Followed by offset. Compiled by do
( F: /FCode-offset/ -- )
18 b(?do) ( limit start -- ) Followed by offset. Compiled by ?do
( F: /FCode-offset/ -- )
1B b(leave) ( F: -- ) Compiled by leave or ?leave
B1 b(<mark) ( F: -- ) Compiled by begin
B2 b(resolve) ( -- ) ( F: -- ) Compiled by else or then
C4 b(case) ( sel -- sel ) ( F: -- ) Compiled by case
C5 b(endcase) ( sel | <nothing -- ) ( F: -- ) Compiled by endcase
C6 b(endof) ( -- ) ( F: /FCode-offset/ -- ) Compiled by endof
1C b(of) ( sel of-val -- sel | <nothing ) Followed by offset. Compiled by of
(F: /FCode-offset/ -- )
B5 new-token ( -- ) ( F: /FCode#/ -- ) Followed by table#, code#, token-type. Compiled
by any defining word. Headerless, not used
normally.
B6 named-token ( -- ) Followed by packed string (count,text), table#,
code#, token-type. Compiled by any defining
( F: /FCode-string FCode#/ -- ) word (: value constant etc.)
B7 b(:) ( E: ... -- ??? ) ( F: -- colon-sys )Token-type compiled by :
B8 b(value) ( E: -- x ) ( F: x -- ) Token-type compiled by value
B9 b(variable) ( E: -- a-addr ) ( F: -- ) Token-type compiled by variable
BA b(constant) ( E: -- n ) ( F: n -- ) Token-type compiled by constant
BB b(create) ( E: -- a-addr ) ( F: -- ) Token-type compiled by create
BC b(defer) ( E: ... -- ??? ) ( F: -- ) Token-type compiled by defer
BD b(buffer:) ( E: -- a-addr ) ( F: size -- ) Token-type compiled by buffer:
BE b(field) ( E: addr -- addr+offset ) Token-type compiled by field
( F: offset size -- offset+size)
C2 b(;) ( -- ) ( F: colon-sys -- ) End a colon definition. Compiled by ;
CA external- ( -- ) vt
token
( F: /FCode-string FCode#/ -- )
F0 start0 ( -- ) Like version1, but for version 2.0 FCodes. Uses 16-
bit branches. Fetches successive tokens from same
address
F1 start1 ( -- ) Like version1, but for version 2.0 FCodes. Uses 16-
bit branches. Fetches successive tokens from
consecutive addresses. Compiled by fcode-
version2
F2 start2 ( -- ) Like version1, but for version 2.0 FCodes. Uses 16-
bit branches. Fetches successive tokens from
consecutive 16-bit addresses
F3 start4 ( -- ) Like version1, but for version 2.0 FCodes. Uses 16-
bit branches. Fetches successive tokens from
consecutive 32-bit addresses
---------------------------------------------------------------------------------------------------------------
Table A-27 Memory Allocation
-----------------------------------------------------------------------------------------
Value Function Stack Description -----------------------------------------------------------------------------------------
0105 free- ( virt size -- ) Frees virtual memory from memmap, dma-alloc,or map-low
virtual
-----------------------------------------------------------------------------------------
Table A-28 Properties
----------------------------------------------------------------------------------------------------------
Value Function Stack Description ----------------------------------------------------------------------------------------------------------
0110 property ( prop-addr prop-len name-str name-len -- ) Declares a property with the
given value structure, for the
given name string.
021E delete-property ( nam-str nam-len -- ) Deletes the property with the
given name
0115 encode-bytes ( data-addr data-len -- prop-addr prop-len ) Converts a byte array into an
prop-format string
0111 encode-int ( n -- prop-addr prop-len ) Converts a number into an prop-
format string
0113 encode-phys ( phys.lo ... phys.hi -- prop-addr prop-len )Converts physical address and
space into an prop-format string
0114 encode-string ( str len -- prop-addr prop-len ) Converts a string into an prop-
format string
0112 encode+ ( prop-addr1 prop-len1 prop-addr2 prop- Merges two prop-format strings.
len2 They must have been created
sequentially
-- prop-addr3 prop-len3 )
CR decode-bytes ( prop-addr1 prop-len1 data-len -- Decodes a byte array from a
prop-encoded-array
prop-addr2 prop-len2 data-addr data-len )
021B decode-int ( prop-addr1 prop-len1 Converts the beginning of an
-- prop-addr2 prop-len2 n ) prop-format string to an integer
021C decode-string ( prop-addr1 prop-len1 Converts the beginning of a prop-
-- prop-addr2 prop-len2 str len ) format string to a normal string
0128 decode-phys ( prop-addr1 prop-len1 -- Decode a unit-address from a
prop-encoded array
prop-addr2 prop-len2 phys.lo ... phys.hi )
021A get-my-property ( nam-str nam-len Returns the prop-format string for
-- true | prop-addr prop-len false ) the given property name
021D get-inherited- ( nam-str nam-len Returns the value string for the
property -- true | prop-addr prop-len false ) given property, searches parents'
properties if not found
021F get-package- ( name-str name-len phandle Returns the prop-format string for
property -- true | prop-addr prop-len false ) the given property name in the
package phandle
----------------------------------------------------------------------------------------------------------
Table A-29 Commonly-used Properties
-----------------------------------------------------------------------------------------------------
Value Function Stack Description -----------------------------------------------------------------------------------------------------
0116 reg ( phys.lo ... phys.hi size -- )Declares location and size of device registers
0119 model ( str len -- ) Declares model# for this device, such as " SUNW,501-
1415-01"
011A device- ( str len -- ) Declares type of device, e.g. " display", " block", "
type network", or " byte"
CR name ( addr len -- ) Declares SunOS driver name, as in " SUNW,zebra"
0201 device- ( str len -- ) Creates the "name" property with the given value
name
-----------------------------------------------------------------------------------------------------
Table A-30 System Version Information
----------------------------------------------------------------------
Value Function Stack Description ----------------------------------------------------------------------
87 fcode- ( -- n ) Returns major/minor FCode interface version
revision
----------------------------------------------------------------------
Table A-31 Device Activation Vector Setup
----------------------------------------------------------------------------------------
Value Function Stack Description ----------------------------------------------------------------------------------------
011C is-install ( xt -- ) Identifies "install" routine to allocate a frame buffer
011D is-remove ( xt -- ) Identifies "remove" routine, to deallocate a frame buffer
011E is-selftest ( xt -- ) Identifies "selftest" routine for this frame buffer
011F new-device ( -- ) Opens an additional device, using this driver package
0127 finish- ( -- ) Closes out current device, ready for new-device
device
----------------------------------------------------------------------------------------
Table A-32 Self-test Utility Routines
-----------------------------------------------------------------------------------------------
Value Function Stack Description -----------------------------------------------------------------------------------------------
0120 diagnostic- ( -- diag? ) Returns "true" if extended diagnostics are desired
mode?
0121 display-status ( n -- ) Obsolete
0122 memory-test- ( addr len -- fail? ) Calls memory tester for given region
suite
0124 mask ( -- a-addr ) Variable, holds "mask" used by memory-test-suite
-----------------------------------------------------------------------------------------------
Table A-33 Time Utilities
--------------------------------------------------------------------------------------
Value Function Stack Description --------------------------------------------------------------------------------------
0125 get-msecs ( -- n ) Returns the current time, in milliseconds, approx.
0126 ms ( n -- ) Delays for n milliseconds. Resolution is 1 millisecond
0213 alarm ( xt n -- ) Periodically execute xt. If n=0, stop.
--------------------------------------------------------------------------------------
Table A-34 Machine-specific Support
-----------------------------------------------------------------------------------------------
Value Function Stack Description -----------------------------------------------------------------------------------------------
0130 map-low ( phys.lo ... size -- virt ) Maps a region of memory in 'sbus' address space
0131 sbus- ( sbus-intr# -- cpu-intr# ) Translates SBus interrupt# into CPU interrupt#
intrcpu
-----------------------------------------------------------------------------------------------
Note - Table A-35 through Table A-41 apply only to display device-types.
Table A-35 User-set Terminal Emulation Values
---------------------------------------------------------------------------------------------------------------
Value Function Stack Description ---------------------------------------------------------------------------------------------------------------
0150 #lines ( -- rows ) Number of lines of text being used for display. This word must be
initialized (using is). fbx-install does this automatically, and also properly
incorporates the NVRAM parameter "screen-#rows"
0151 #column ( -- columns ) Number of columns (chars/line) used for display. This word must be
s initialized (using is). fbx-install does this automatically, and also
properly incorporates the NVRAM parameter "screen-#columns"
---------------------------------------------------------------------------------------------------------------
Table A-36 Terminal Emulator-set Terminal Emulation Values
-------------------------------------------------------------------------------------------
Value Function Stack Description -------------------------------------------------------------------------------------------
0152 line# ( -- line# ) Current cursor position (line#). 0 is top line
0153 column# ( -- column# ) Current cursor position. 0 is left char.
0154 inverse? ( -- white-on-black? ) True if output is inverted (white-on-black)
0155 inverse- ( -- black? ) True if screen has been inverted (black background)
screen?
-------------------------------------------------------------------------------------------
Table A-37 Terminal Emulation Routines*
-----------------------------------------------------------------------------------------------------------------------------------
Value Function Stack Description -----------------------------------------------------------------------------------------------------------------------------------
0157 draw-character ( char -- ) Paints the given character and advances the
cursor
0158 reset-screen ( -- ) Initializes the display device
0159 toggle-cursor ( -- ) Draws or erase the cursor
015A erase-screen ( -- ) Clears all pixels on the display
015B blink-screen ( -- ) Flashes the display momentarily
015C invert-screen ( -- ) Changes all pixels to the opposite color
015D insert- ( n -- ) Inserts n blanks just before the cursor
characters
015E delete- ( n -- ) Deletes n characters to the right of the cursor
characters Remaining chars slide left
015F insert-lines ( n -- ) Inserts n blank lines just before the current line,
lower lines are scrolled downward
0160 delete-lines ( n -- ) Deletes n lines starting with the current line,
lower lines are scrolled upward
0161 draw-logo ( line# addr width height -- ) Draws the logo
*defer-type loadable routines.
-----------------------------------------------------------------------------------------------------------------------------------
Table A-38 Frame Buffer Parameter Values*
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Value Function Stack Description ----------------------------------------------------------------------------------------------------------------------------------------------------------------
016C char-height ( -- height ) Height (in pixels) of a character (usually 22)
016D char-width ( -- width ) Width (in pixels) of a character (usually 12)
016F fontbytes ( -- bytes ) Number of bytes/scan line for font entries (usually 2)
0162 frame-buffer- ( -- addr ) Address of frame buffer memory
adr
0163 screen-height ( -- height ) Total height of the display (in pixels)
0164 screen-width ( -- width ) Total width of the display (in pixels)
0165 window-top ( -- border-height ) Distance (in pixels) between display top and text window
0166 window-left ( -- border-width ) Distance (in pixels) between display left edge and text
window left edge
*These must all be initialized before using any fbx- routines.
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Table A-39 Font Operators
-----------------------------------------------------------------------------------------------------------
Value Function Stack Description -----------------------------------------------------------------------------------------------------------
016A default- ( -- addr width height advance min- char #glyphs ) Returns default font values, plugs
font directly into set-font
016B set-font ( addr width height advance min-char #glyphs -- ) Sets the character font for text output
016E >font ( char -- addr ) Returns font address for given ASCII
character
-----------------------------------------------------------------------------------------------------------
Table A-40 One-bit Frame Buffer Utilities
------------------------------------------------------------------------------------------------------------
Value Function Stack Description ------------------------------------------------------------------------------------------------------------
0170 fb1-draw- ( char -- ) Paints the character and advance the cursor
character
0171 fb1-reset- ( -- ) Initializes the display device (noop)
screen
0172 fb1-toggle- ( -- ) Draws or erases the cursor
cursor
0173 fb1-erase- ( -- ) Clears all pixels on the display
screen
0174 fb1-blink- ( -- ) Inverts the screen, twice (slow)
screen
0175 fb1-invert- ( -- ) Changes all pixels to the opposite color
screen
0176 fb1-insert- ( n -- ) Inserts n blanks just before the cursor
characters
0177 fb1-delete- ( n -- ) Deletes n characters, starting at with cursor
characters character, rightward. Remaining chars slide left
0178 fb1-insert- ( n -- ) Inserts n blank lines just before the current line,
lines lower lines are scrolled downward
0179 fb1-delete- ( n -- ) Deletes n lines starting with the current line,lower
lines lines are scrolled upward
017A fb1-draw-logo ( line# addr width height -- ) Draws the logo
017B fb1-install ( width height #columns Installs the one-bit built-in routines
#lines -- )
017C fb1-slide-up ( n -- ) Like fb1-delete-lines, but doesn't clear lines at
bottom
------------------------------------------------------------------------------------------------------------
Table A-41 Eight-bit Frame Buffer Utilities
-----------------------------------------------------------------------------------------------------------
Value Function Stack Description -----------------------------------------------------------------------------------------------------------
0180 fb8-draw- ( char -- ) Paints the character and advance the cursor
character
0181 fb8-reset- ( -- ) Initializes the display device (noop)
screen
0182 fb8-toggle- ( -- ) Draws or erases the cursor
cursor
0183 fb8-erase- ( -- ) Clears all pixels on the display
screen
0184 fb8-blink- ( -- ) Inverts the screen, twice (slow)
screen
0185 fb8-invert- ( -- ) Changes all pixels to the opposite color
screen
0186 fb8-insert- ( n -- ) Inserts n blanks just before the cursor
characters
0187 fb8-delete- ( n -- ) Deletes n characters starting with cursor char,
characters rightward. Remaining chars slide left
0188 fb8-insert- ( n -- ) Inserts n blank lines just before the current
lines line, lower lines are scrolled downward
0189 fb8-delete- ( n -- ) Deletes n lines starting with the current line,
lines lower lines are scrolled upward
018A fb8-draw-logo ( line# addr width height -- ) Draws the logo
018B fb8-install ( width height #columns #lines -- ) Installs the eight-bit built-in routines
-----------------------------------------------------------------------------------------------------------
Table A-42 Package Support
-------------------------------------------------------------------------------------------------------
Value Function Stack Description -------------------------------------------------------------------------------------------------------
023C peer ( phandle -- phandle.sibling ) Returns phandle of package that is the next
child of the the parent of the package
023B child ( phandle.parent -- phandle.child ) Returns phandle of the package that is the
first child of the package parent-phandle
0204 find-package ( name-str name-len Finds a package named "name-str"
-- false | phandle true )
0205 open-package ( arg-str arg-len phandle Opens an instance of the package "phandle,"
passes arguments "arg-str arg-len"
-- ihandle | 0 )
020F $open-package ( arg-str arg-len name-str name-len Finds a package "name-str name-len" then
opens it with arguments "arg-str arg-len"
-- ihandle | 0 )
020A my-parent ( -- ihandle ) Returns the ihandle of the parent of the
current package instance
0203 my-self ( -- ihandle ) Returns the instance handle of currently-
executing package instance
020B ihandlephand ( ihandle -- phandle ) Converts an ihandle to a phandle
le
0206 close-package ( ihandle -- ) Closes an instance of a package
0207 find-method ( method-str method-len phandle Finds the method (command) named
"method-str" in the package "phandle"
-- false | xt true )
0208 call-package ( ... xt ihandle -- ??? ) Executes the method "xt" in the instance
"ihandle"
020E $call-method ( ... method-str method-len ihandle Executes the method named "method-str" in
the instance "ihandle"
-- ??? )
0209 $call-parent ( ... method-str method-len -- ??? ) Executes the method "method-str" in the
parent's package
0202 my-args ( -- arg-str arg-len ) Returns the argument str passed when this
package was opened
020D my-unit ( -- phys.lo ... phys.hi ) Returns the physical unit number pair for
this package
0102 my-address ( -- phys.lo ... ) Returns the physical addr of this plug-in
device. "phys" is a "magic" number, usable
by other routines
0103 my-space ( -- phys.hi ) Returns address space of plug-in device.
"space" is a "magic" number, usable by other
routines
-------------------------------------------------------------------------------------------------------
Table A-43 Asynchronous Support
-------------------------------------------------------------------------------------------------------------
Value Function Stack Description -------------------------------------------------------------------------------------------------------------
0213 alarm ( xt n -- ) Executes method (command) indicated by "xt" every "n" milliseconds
0219 user- ( ... -- ) ( R: ... -- )Abort after alarm routine finishes execution
abort
-------------------------------------------------------------------------------------------------------------
Table A-44 Miscellaneous Operations
---------------------------------------------------------------------------------------------------------
Value Function Stack Description ---------------------------------------------------------------------------------------------------------
0214 (is-user- ( E: ... -- ??? ) Creates a new word called "name-str" which executes "xt"
word)
( name-str name-len xt -- )
01A4 mac- ( -- mac-str mac-len ) Returns the MAC address
address
---------------------------------------------------------------------------------------------------------
Table A-45 Interpretation
------------------------------------------------------------------------------------------------
Value Function Stack Description ------------------------------------------------------------------------------------------------
0215 suspend- ( -- ) Suspends execution of FCode, resumes later if an undefined command is
fcode required
------------------------------------------------------------------------------------------------
Table A-46 Error Handling
-----------------------------------------------------------------------------------------------------------------
Value Function Stack Description -----------------------------------------------------------------------------------------------------------------
0216 abort ( ... -- ) (R:... -- ) Aborts FCode execution, returns to the "ok" prompt
0217 catch ( ... xt -- ??? error-code | ??? false )Executes "xt," returns throw error code or 0 if throw
not encountered
0218 throw ( ... error-code -- ??? error-code | ...)Returns given error code to catch
FC ferror ( -- ) Displays "Unimplemented FCode" and stops FCode
interpretation
-----------------------------------------------------------------------------------------------------------------
The following table lists, in hexadecimal order, currently-assigned FCode byte values.
Table A-47 FCodes by Byte Value
------------------------------------------------------------------------------------------
Value Function Stack ------------------------------------------------------------------------------------------
00 end0 ( -- )
10 b(lit) ( -- n ) ( F: /FCode-num32/ -- )
11 b(') ( -- xt ) ( F: /FCode#/ -- )
12 b(") ( -- str len ) ( F: /FCode-string/ -- )
13 bbranch ( -- ) ( F: /FCode-offset/ -- )
14 b?branch ( don't-branch? -- ) ( F: /FCode-offset/ --)
15 b(loop) ( -- ) ( F: /FCode-offset/ -- )
16 b(+loop) ( delta -- ) ( F: /FCode-offset/ -- )
17 b(do) ( limit start -- ) ( F: /FCode-offset/ -- )
18 b(?do) ( limit start -- ) ( F: /FCode-offset/ -- )
19 i ( -- index ) ( R: sys -- sys )
1A j ( -- index ) ( R: sys -- sys )
1B b(leave) ( F: -- )
1C b(of) ( sel of-val -- sel | <nothing ) ( F: /FCode-offset/ -- )
1D execute ( ... xt -- ??? )
1E + ( nu1 nu2 -- sum )
1F - ( nu1 nu2 -- diff )
20 * ( nu1 nu2 -- prod )
21 / ( n1 n2 -- quot )
22 mod ( n1 n2 -- rem )
23 and ( x1 x2 -- x3 )
24 or ( x1 x2 -- x3 )
25 xor ( x1 x2 -- x3 )
26 invert ( x1 -- x2 )
27 lshift ( x1 u -- x2 )
28 rshift ( x1 u -- x2 )
29 >a ( x1 u -- x2 )
2A /mod ( n1 n2 -- rem quot )
2B u/mod ( u1 u2 -- urem uquot )
2C negate ( n1 -- n2 )
2D abs ( n -- u )
2E min ( n1 n2 -- n1|n2 )
2F max ( n1 n2 -- n1|n2 )
30 >r ( x -- ) ( R: -- x)
31 r'> ( -- x ) ( R: x -- )
32 r@ ( -- x ) ( R: x -- x )
33 exit ( -- ) (R: sys -- )
34 0= ( nulflag -- equal-to-0? )
35 0<'> ( n -- not-equal-to-0? )
36 0< ( n -- less-than-0? )
37 0<= ( n -- less-or-equal-to-0? )
38 0'> ( n -- greater-than-0? )
39 0= ( n -- greater-or-equal-to-0? )
<
3A ( n1 n2 -- less? )
>
3B ( n1 n2 -- greater? )
3C = ( x1 x2 -- equal? )
3D <'> ( x1 x2 -- not-equal? )
3E u'> ( u1 u2 -- unsigned-greater? )
3F u<= ( u1 u2 -- unsigned-less-or-equal? )
40 u< ( u1 u2 -- unsigned-less? )
41 u= ( u1 u2 -- unsigned-greater-or-equal? )
42 >= ( n1 n2 -- greater-or-equal? )
43 <= ( n1 n2 -- less-or-equal? )
44 between ( n min max -- min<=n<=max? )
45 within ( n min max -- min<=n<max? )
46 drop ( x -- )
47 dup ( x -- x x )
48 over ( x1 x2 -- x1 x2 x1 )
49 swap ( x1 x2 -- x2 x1 )
4A rot ( x1 x2 x3 -- x2 x3 x1 )
4B -rot ( x1 x2 x3 -- x3 x1 x2 )
4C tuck ( x1 x2 -- x2 x1 x2 )
4D nip ( x1 x2 -- x2 )
4E pick ( xu ... x1 x0 u -- xu ... x1 x0 xu )
4F roll ( xu ... x1 x0 u -- xu-1 ... x1 x0 xu )
50 ?dup ( x -- 0 | x x)
51 depth ( -- u )
52 2drop ( x1 x2 -- )
53 2dup ( x1 x2 -- x1 x2 x1 x2 )
54 2over ( x1 x2 x3 x4 -- x1 x2 x3 x4 x1 x2 )
55 2swap ( x1 x2 x3 x4 -- x3 x4 x1 x2 )
56 2rot ( x1 x2 x3 x4 x5 x6 -- x3 x4 x5 x6 x1 x2 )
57 2/ ( x1 -- x2 )
58 u2/ ( x1 -- x2 )
59 2* ( x1 -- x2 )
5A /c ( -- n )
5B /w ( -- n )
5C /l ( -- n )
5D /n ( -- n )
5E ca+ ( addr1 index -- addr2 )
5F wa+ ( addr1 index -- addr2 )
60 la+ ( addr1 index -- addr2 )
61 na+ ( addr1 index -- addr2 )
62 char+ ( addr1 -- addr2 )
63 wa1+ ( addr1 -- addr2 )
64 la1+ ( addr1 -- addr2 )
65 cell+ ( addr1 -- addr2 )
66 chars ( nu1 -- nu2 )
67 /w* ( nu1 -- nu2 )
68 /l* ( nu1 -- nu2 )
69 cells ( nu1 -- nu2 )
6A on ( a-addr -- )
6B off ( a-addr -- )
6C +! ( nu a-addr -- )
6D @ ( a-addr -- x )
6E l@ ( qaddr -- quad )
6F w@ ( waddr -- w )
70 <w@ ( waddr -- n )
71 c@ ( addr -- byte )
72 ! ( x a-addr -- )
73 l! ( quad qaddr -- )
74 w! ( w waddr -- )
75 c! ( byte addr -- )
76 2@ ( a-addr -- x1 x2 )
77 2! ( x1 x2 a-addr -- )
78 move ( src-addr dest-addr len -- )
79 fill ( addr len byte -- )
7A comp ( addr1 addr2 len -- n )
7B noop ( -- )
7C lwsplit ( quad -- w1.lo w2.hi )
7D wljoin ( w.lo w.hi -- quad )
7E lbsplit ( quad -- b.lo b2 b3 b4.hi )
7F bljoin ( bl.lo b2 b3 b4.hi -- quad )
80 wbflip ( w1 -- w2 )
81 upc ( char1 -- char2 )
82 lcc ( char1 -- char2 )
83 pack ( str len addr -- pstr )
84 count ( pstr -- str len )
85 body'> ( a-addr -- xt )
86 >body ( xt -- a-addr )
87 fcode- ( -- n )
revision
88 span ( -- a-addr )
89 unloop ( -- ) ( R: sys -- )
8A expect ( addr len -- )
8B alloc-mem ( len -- a-addr )
8C free-mem ( a-addr len -- )
8D key? ( -- pressed? )
8E key ( -- char )
8F emit ( char -- )
90 type ( text-str text-len -- )
91 (cr ( -- )
92 cr ( -- )
93 #out ( -- a-addr )
94 #line ( -- a-addr )
95 hold ( char -- )
96 <# ( -- )
97 u#'> ( u -- str len )
98 sign ( n -- )
99 u# ( u1 -- u2 )
9A u#s ( u1 -- u2 )
9B u. ( u -- )
9C u.r ( u size -- )
9D . ( nu -- )
9E .r ( n size -- )
9F .s ( ... -- ... )
A0 base ( -- a-addr )
A2 $number ( addr len -- true | n false )
A3 digit ( char base -- digit true | char false )
A4 -1 ( -- -1 )
A5 0 ( -- 0 )
A6 1 ( -- 1 )
A7 2 ( -- 2 )
A8 3 ( -- 3 )
A9 bl ( -- 0x20 )
AA bs ( -- 0x08 )
AB bell ( -- 0x07 )
AC bounds ( n cnt -- n+cnt n )
AD here ( -- addr )
AE aligned ( n1 -- n1|a-addr )
AF wbsplit ( w -- b1.lo b2.hi )
B0 bwjoin ( b.lo b.hi -- w )
B1 b(<mark) ( F: -- )
B2 b(resolve ( -- ) ( F: -- )
)
B5 new-token ( -- ) ( F: /FCode#/ -- )
B6 named- ( -- ) ( F: /FCode-string FCode#/ -- )
token
B7 b(:) ( E: ... -- ??? ) ( F: -- colon-sys )
B8 b(value) ( E: -- x ) ( F: x -- )
B9 b(variable ( E: -- a-addr ) ( F: -- )
)
BA b(constant ( E: -- n ) ( F: n -- )
)
BB b(create) ( E: -- a-addr ) ( F: -- )
BC b(defer) ( E: ... -- ??? ) ( F: -- )
BD b(buffer:) ( E: -- a-addr ) ( F: size -- )
BE b(field) ( E: addr -- addr+offset ) ( F: offset size -- offset+size )
C0 instance ( -- )
C2 b(;) ( -- ) ( F: colon-sys -- )
C3 b(to) ( x -- )
C4 b(case) ( sel -- sel ) ( F: -- )
C5 b(endcase) ( sel | <nothing -- ) ( F: -- )
C6 b(endof) ( -- ) ( F: /FCode-offset/ -- )
C7 # ( ud1 -- ud2 )
C8 #s ( ud -- 0 0 )
C9 #'> ( ud -- str len )
CA external- ( -- ) ( F: /FCode-string FCode#/ -- )
token
CB $find ( name-str name-len -- xt true | name-str name-len false )
CC offset16 ( -- )
CD eval ( ... str len -- ??? )
D0 c, ( byte -- )
D1 w, ( w -- )
D2 l, ( quad -- )
D3 , ( x -- )
D4 um* ( u1 u2 -- ud.prod )
D5 um/mod ( ud u -- urem uquot )
D8 d+ ( d1 d2 --d.sum )
D9 d- ( d1 d2 -- d.diff )
DA get-token ( fcode# -- xt immediate? )
DB set-token ( xt immediate? fcode# -- )
DC state ( -- a-addr )
DD compile, ( xt -- )
DE behavior ( defer-xt -- contents-xt )
F0 start0 ( -- )
F1 start1 ( -- )
F2 start2 ( -- )
F3 start4 ( -- )
FC ferror ( -- )
FD version1 ( -- )
FF end1 ( -- )
0102 my-address ( -- phys.lo ... )
0103 my-space ( -- phys.hi )
0105 free- ( virt size -- )
virtual
0110 property ( prop-addr prop-len name-str name-len -- )
0111 encode-int ( n -- prop-addr prop-len )
0112 encode+ ( prop-addr1 prop-len1 prop-addr2 prop-len2 -- prop-addr3 prop-len3 )
0113 encode- ( phys.lo ... phys.hi -- prop-addr prop-len )
phys
0114 encode- ( str len -- prop-addr prop-len )
string
0115 encode- ( data-addr data-len -- prop-addr prop-len )
bytes
0116 reg ( phys.lo ... phys.hi size -- )
0119 model ( str len -- )
011A device- ( str len -- )
type
011B parse-2int ( str len -- val.lo val.hi )
011C is-install ( xt -- )
011D is-remove ( xt -- )
011E is- ( xt -- )
selftest
011F new-device ( -- )
0120 diagnostic ( -- diag? )
-mode?
0121 display- ( n -- )
status
0122 memory- ( addr len -- fail? )
test-suite
0124 mask ( -- a-addr )
0125 get-msecs ( -- n )
0126 ms ( n -- )
0127 finish- ( -- )
device
0128 decode- ( prop-addr1 prop-len1 -- prop-addr2 prop-len2 phys.lo ... phys.hi )
phys
0130 map-low ( phys.lo ... size -- virt )
0131 sbus- ( sbus-intr# -- cpu-intr# )
intrcpu
0150 #lines ( -- rows )
0151 #columns ( -- columns )
0152 line# ( -- line# )
0153 column# ( -- column# )
0154 inverse? ( -- white-on-black? )
0155 inverse- ( -- black? )
screen?
0157 draw- ( char -- )
character
0158 reset- ( -- )
screen
0159 toggle- ( -- )
cursor
015A erase- ( -- )
screen
015B blink- ( -- )
screen
015C invert- ( -- )
screen
015D insert- ( n -- )
characters
015E delete- ( n -- )
characters
015F insert- ( n -- )
lines
0160 delete- ( n -- )
lines
0161 draw-logo ( line# addr width height -- )
0162 frame- ( -- addr )
buffer-adr
0163 screen- ( -- height )
height
0164 screen- ( -- width )
width
0165 window-top ( -- border-height )
0166 window- ( -- border-width )
left
016A default- ( -- addr width height advance min-char #glyphs )
font
016B set-font ( addr width height advance min-char #glyphs -- )
016C char- ( -- height )
height
016D char-width ( -- width )
016E >font ( char -- addr )
016F fontbytes ( -- bytes )
0170 fb1-draw- ( char -- )
character
0171 fb1-reset- ( -- )
screen
0172 fb1- ( -- )
toggle-
cursor
0173 fb1-erase- ( -- )
screen
0174 fb1-blink- ( -- )
screen
0175 fb1- ( -- )
invert-
screen
0176 fb1- ( n -- )
insert-
characters
0177 fb1- ( n -- )
delete-
characters
0178 fb1- ( n -- )
insert-
lines
0179 fb1- ( n -- )
delete-
lines
017A fb1-draw- ( line# addr width height -- )
logo
017B fb1- ( width height #columns #lines -- )
install
017C fb1-slide- ( n -- )
up
0180 fb8-draw- ( char -- )
character
0181 fb8-reset- ( -- )
screen
0182 fb8- ( -- )
toggle-
cursor
0183 fb8-erase- ( -- )
screen
0184 fb8-blink- ( -- )
screen
0185 fb8- ( -- )
invert-
screen
0186 fb8- ( n -- )
insert-
characters
0187 fb8- ( n -- )
delete-
characters
0188 fb8- ( n -- )
insert-
lines
0189 fb8- ( n -- )
delete-
lines
018A fb8-draw- ( line# addr width height -- )
logo
018B fb8- ( width height #columns #lines -- )
install
01A4 mac- ( -- mac-str mac-len )
address
0201 device- ( str len -- )
name
0202 my-args ( -- arg-str arg-len )
0203 my-self ( -- ihandle )
0204 find- ( name-str name-len -- false | phandle true )
package
0205 open- ( arg-str arg-len phandle -- ihandle | 0 )
package
0206 close- ( ihandle -- )
package
0207 find- ( method-str method-len phandle -- false | xt true )
method
0208 call- ( ... xt ihandle -- ??? )
package
0209 $call- ( ... method-str method-len -- ??? )
parent
020A my-parent ( -- ihandle )
020B ihandleph ( ihandle -- phandle )
andle
020D my-unit ( -- phys.lo ... phys.hi )
020E $call- ( ... method-str method-len ihandle -- ??? )
method
020F $open- ( arg-str arg-len name-str name-len -- ihandle | 0 )
package
0213 alarm ( xt n -- )
0214 (is-user- ( E: ... -- ??? ) ( name-str name-len xt -- )
word)
0215 suspend- ( -- )
fcode
0216 abort ( ... -- ) (R:... -- )
0217 catch ( ... xt -- ??? error-code | ??? false )
0218 throw ( ... error-code -- ??? error-code | ...)
0219 user-abort ( ... -- ) ( R: ... -- )
021A get-my- ( nam-str nam-len -- true | prop-addr prop-len false )
property
021B decode-int ( prop-addr1 prop-len1 -- prop-addr2 prop-len2 n )
021C decode- ( prop-addr1 prop-len1 -- prop-addr2 prop-len2 str len )
string
021D get- ( nam-str nam-len -- true | prop-addr prop-len false )
inherited-
property
021E delete- ( nam-str nam-len -- )
property
021F get- ( name-str name-len phandle -- true | prop-addr prop-len false )
package-
property
0220 cpeek ( addr -- false | byte true )
0221 wpeek ( waddr -- false | w true )
0222 lpeek ( qaddr -- false | quad true )
0223 cpoke ( byte addr -- okay? )
0224 wpoke ( w waddr -- okay? )
0225 lpoke ( quad qaddr -- okay? )
0226 lwflip ( quad1 -- quad2 )
0227 lbflip ( quad1 -- quad2 )
0228 lbflips ( qaddr len -- )
0230 rb@ ( addr -- byte )
0231 rb! ( byte addr -- )
0232 rw@ ( waddr -- w )
0233 rw! ( w waddr -- )
0234 rl@ ( qaddr -- quad )
0235 rl! ( quad qaddr -- )
0236 wbflips ( waddr len -- )
0237 lwflips ( qaddr len -- )
023B child ( phandle.parent -- phandle.child )
023C peer ( phandle -- phandle.sibling )
023D next- ( previous-str previous-len phandle -- false | name-str name-len true )
property
023E byte-load ( addr xt -- )
023F set-args ( arg-str arg-len unit-str unit-len -- )
0240 left- ( str len char -- R-str R-len L-str L-len )
parse-
string
- ( ( [text<) --)
- ]tokenizer ( -- )
- \ ( -- )
- alias ( E: ... -- ???)
( "new-name< old-name< " -- )
- decimal ( -- )
- external ( -- )
- fload ( [filename<cr] -- )
- headerless ( -- )
- headers ( -- )
- hex ( -- )
- octal ( -- )
- tokenizer[ ( -- )
CR " ( [text<"< ] -- text-str text-len )
CR ' ( "old-name< " -- xt )
CR (.) ( n -- str len )
CR ." ( [text<)] -- )
CR .( ( [text<)] -- )
CR : (colon) ( "new-name< " -- colon-sys ) ( E: ... -- ??? )
CR ; ( -- )
(semicolon
)
<<
CR ( x1 u -- x2 )
CR >'> ( x1 u -- x2 )
CR ? ( addr -- )
CR ['] ( [old-name< ] -- xt )
CR 1+ ( nu1 -- nu2 )
CR 1- ( nu1 -- nu2 )
CR 2+ ( nu1 -- nu2 )
CR 2- ( nu1 -- nu2 )
CR accept ( addr len1 -- len2 )
CR again ( C: dest-sys -- )
CR allot ( len -- )
CR ascii ( [text< ] -- char )
CR begin ( C: -- dest-sys ) ( -- )
CR blank ( addr len -- )
CR buffer: ( E: -- a-addr ) ( len "new-name< " -- )
CR /c* ( nu1 -- nu2 )
CR ca1+ ( addr1 -- addr2 )
CR carret ( -- 0x0D )
CR case ( C: -- case-sys) ( sel -- sel )
CR constant ( E: -- x ) ( x "new-name< " -- )
CR control ( [text< ] -- char )
CR create ( E: -- a-addr ) ( "new-name< " -- )
CR d# ( [number< ] -- n )
CR .d ( n -- )
CR decimal ( -- )
CR decode- ( prop-addr1 prop-len1 data-len -- prop-addr2 prop-len2 data-addr
bytes data-len )
CR defer ( E: ... -- ??? ) ( "new-name< " -- )
CR do ( C: -- dodest-sys ) ( limit start -- ) (R: -- sys )
CR ?do ( C: -- dodest-sys ) ( limit start -- ) ( R: -- sys )
CR 3drop ( x1 x2 x3 -- )
CR 3dup ( x1 x2 x3 -- x1 x2 x3 x1 x2 x3 )
CR else ( C: orig-sys1 -- orig-sys2 ) ( -- )
CR endcase ( C: case-sys -- ) ( sel | <nothing -- )
CR endof ( C: case-sys1 of-sys -- case-sys2 ) ( -- )
CR erase ( addr len -- )
CR eval ( ... str len -- ??? )
CR false ( -- false )
CR fcode- ( -- )
version2
CR field ( E: addr -- addr+offset ) ( offset size "new-name< " -- offset+size )
CR h# ( [number< ] -- n )
CR .h ( n -- )
CR hex ( -- )
CR if ( C: -- orig-sys ) ( do-next? -- )
CR leave ( -- ) ( R: sys -- )
CR ?leave ( exit? -- ) ( R: sys -- )
CR linefeed ( -- 0x0A )
CR loop ( C: dodest-sys -- ) ( -- ) ( R: sys1 -- <nothing | sys2)
CR +loop ( C: dodest-sys -- ) ( delta -- ) ( R: sys1 -- <nothing | sys2 )
CR /n* ( nu1 -- nu2 )
CR na1+ ( addr1 -- addr2 )
CR not ( x1 -- x2 )
CR o# ( [number< ] -- n )
CR octal ( -- )
CR of ( C: case-sys1 -- case-sys2 of-sys ) ( sel of-val -- sel | <nothing )
CR repeat ( C: orig-sys dest-sys -- ) ( -- )
CR s" ( [text<"] -- test-str text-len )
CR s. ( n -- )
CR space ( -- )
CR spaces ( cnt -- )
CR struct ( -- 0 )
CR then ( C: orig-sys -- ) ( -- )
CR to ( param [old-name< ] -- )
CR true ( -- true )
CR (u.) ( u -- str len )
CR until ( C: dest-sys -- ) ( done? -- )
CR value ( E: -- x) ( x "new-name< "-- )
CR variable ( E: -- a-addr ) ( "new-name< "-- )
CR while ( C: dest-sys -- orig-sys dest-sys ) ( continue? -- )
------------------------------------------------------------------------------------------
The following table lists, in alphabetic order, currently-assigned FCodes.
Table A-48 Fcodes by Name
---------------------------------------------------------------------
Va Function Stack lu e ---------------------------------------------------------------------
72 ! ( x a-addr -- )
CR " ( [text<"< ] -- text-str text-len )
C7 # ( ud1 -- ud2 )
C9 #'> ( ud -- str len )
CR ' ( "old-name< " -- xt )
- ( ( [text<) --)
CR (.) ( n -- str len )
20 * ( nu1 nu2 -- prod )
1E + ( nu1 nu2 -- sum )
6C +! ( nu a-addr -- )
D3 , ( x -- )
1F - ( nu1 nu2 -- diff )
9D . ( nu -- )
CR ." ( [text<)] -- )
CR .( ( [text<)] -- )
21 / ( n1 n2 -- quot )
CR : (colon) ( "new-name< " -- colon-sys ) ( E: ... -- ??? )
C ; ( -- )
R (semicolo
n)
<
3A ( n1 n2 -- less? )
96 <# ( -- )
<<
CR ( x1 u -- x2 )
43 <= ( n1 n2 -- less-or-equal? )
3D <'> 30
3C = ( n1 n2 -- greater? )
>
0B ( n1 n2 -- greater? )
42 >= ( n1 n2 -- greater-or-equal? )
CR >'> ( x1 u -- x2 )
CR ? ( addr -- )
6D @ ( a-addr -- x )
CR ['] ( [old-name< ] -- xt )
- \ ( -- )
- ]tokenize ( -- )
r
A5 0 ( -- 0 )
36 0< ( n -- less-than-0? )
37 0<= ( n -- less-or-equal-to-0? )
35 0<'> ( n -- not-equal-to-0? )
34 0= ( nulflag -- equal-to-0? )
38 0'> ( n -- greater-than-0? )
39 0= ( n -- greater-or-equal-to-0? )
A6 1 ( -- 1 )
CR 1+ ( nu1 -- nu2 )
CR 1- ( nu1 -- nu2 )
A4 -1 ( -- -1 )
A7 2 ( -- 2 )
77 2! ( x1 x2 a-addr -- )
59 2* ( x1 -- x2 )
CR 2+ ( nu1 -- nu2 )
CR 2- ( nu1 -- nu2 )
57 2/ ( x1 -- x2 )
76 2@ ( a-addr -- x1 x2 )
A8 3 ( -- 3 )
29 >a ( x1 u -- x2 )
02 abort ( ... -- ) (R:... -- )
16
2D abs ( n -- u )
CR accept ( addr len1 -- len2 )
CR again ( C: dest-sys -- )
02 alarm ( xt n -- )
13
- alias ( E: ... -- ???) ( "new-name< old-name< " -
- )
A aligned ( n1 -- n1|a-addr )
E
8B alloc-mem ( len -- a-addr )
CR allot ( len -- )
23 and ( x1 x2 -- x3 )
CR ascii ( [text< ] -- char )
12 b(") ( -- str len ) ( F: /FCode-string/ -- )
11 b(') ( -- xt ) ( F: /FCode#/ -- )
B7 b(:) ( E: ... -- ??? ) ( F: -- colon-sys )
C2 b(;) ( -- ) ( F: colon-sys -- )
A0 base ( -- a-addr )
13 bbranch ( -- ) ( F: /FCode-offset/ -- )
14 b?branch ( don't-branch? -- ) ( F: /FCode-offset/ --)
B b(buffer: ( E: -- a-addr ) ( F: size -- )
D )
C4 b(case) ( sel -- sel ) ( F: -- )
B b(constan ( E: -- n ) ( F: n -- )
A t)
BB b(create) ( E: -- a-addr ) ( F: -- )
BC b(defer) ( E: ... -- ??? ) ( F: -- )
17 b(do) ( limit start -- ) ( F: /FCode-offset/ -- )
18 b(?do) ( limit start -- ) ( F: /FCode-offset/ -- )
CR begin ( C: -- dest-sys ) ( -- )
D behavior ( defer-xt -- contents-xt )
E
A bell ( -- 0x07 )
B
C5 b(endcase ( sel | <nothing -- ) ( F: -- )
)
C6 b(endof) ( -- ) ( F: /FCode-offset/ -- )
44 between ( n min max -- min<=n<=max? )
BE b(field) ( E: addr -- addr+offset ) ( F: offset size --
offset+size )
A9 bl ( -- 0x20 )
CR blank ( addr len -- )
1B b(leave) ( F: -- )
01 blink- ( -- )
5B screen
10 b(lit) ( -- n ) ( F: /FCode-num32/ -- )
7F bljoin ( bl.lo b2 b3 b4.hi -- quad )
15 b(loop) ( -- ) ( F: /FCode-offset/ -- )
16 b(+loop) ( delta -- ) ( F: /FCode-offset/ -- )
B1 b(<mark) ( F: -- )
85 body'> ( a-addr -- xt )
86 >body ( xt -- a-addr )
1C b(of) ( sel of-val -- sel | <nothing ) ( F: /FCode-
offset/ -- )
A bounds ( n cnt -- n+cnt n )
C
B2 b(resolv ( -- ) ( F: -- )
e)
A bs ( -- 0x08 )
A
C3 b(to) ( x -- )
CR buffer: ( E: -- a-addr ) ( len "new-name< " -- )
B8 b(value) ( E: -- x ) ( F: x -- )
B9 b(variabl ( E: -- a-addr ) ( F: -- )
e)
B0 bwjoin ( b.lo b.hi -- w )
02 byte-load ( addr xt -- )
3E
75 c! ( byte addr -- )
D0 c, ( byte -- )
5A /c ( -- n )
- /c* ( nu1 -- nu2 )
71 c@ ( addr -- byte )
5E ca+ ( addr1 index -- addr2 )
CR ca1+ ( addr1 -- addr2 )
62 char+ ( addr1 -- addr2 )
02 $call- ( ... method-str method-len ihandle -- ??? )
0E method
02 call- ( ... xt ihandle -- ??? )
08 package
02 $call- ( ... method-str method-len -- ??? )
09 parent
CR carret ( -- 0x0D )
CR case ( C: -- case-sys) ( sel -- sel )
02 catch ( ... xt -- ??? error-code | ??? false )
17
65 cell+ ( addr1 -- addr2 )
69 cells ( nu1 -- nu2 )
62 char+ ( addr1 -- addr2 )
01 char- ( -- height )
6C height
66 chars ( nu1 -- nu2 )
01 char- ( -- width )
6D width
02 child ( phandle.parent -- phandle.child )
36
02 close- ( ihandle -- )
06 package
01 column# ( -- column# )
53
01 #columns ( -- columns )
51
7A comp ( addr1 addr2 len -- n )
D compile, ( xt -- )
D
CR constant ( E: -- x ) ( x "new-name< " -- )
CR control ( [text< ] -- char )
84 count ( pstr -- str len )
02 cpeek ( addr -- false | byte true )
20
02 cpoke ( byte addr -- okay? )
23
92 cr ( -- )
91 (cr ( -- )
CR create ( E: -- a-addr ) ( "new-name< " -- )
CR d# ( [number< ] -- n )
D8 d+ ( d1 d2 --d.sum )
D9 d- ( d1 d2 -- d.diff )
CR .d ( n -- )
- decimal ( -- )
CR decimal ( -- )
02 decode- ( prop-addr1 prop-len1 -- prop-addr2 prop-
1B int len2 n )
01 decode- ( prop-addr1 prop-len1 -- prop-addr2 prop-
28 phys len2 phys.lo ... phys.hi )
02 decode- ( prop-addr1 prop-len1 -- prop-addr2 prop-
1C string len2 str len )
01 default- ( -- addr width height advance min-char
6A font #glyphs )
CR defer ( E: ... -- ??? ) ( "new-name< " -- )
01 delete- ( n -- )
5E character
s
01 delete- ( n -- )
60 lines
02 delete- ( nam-str nam-len -- )
1E property
51 depth ( -- u )
02 device- ( str len -- )
01 name
01 device- ( str len -- )
1A type
01 diagnosti ( -- diag? )
20 c-mode?
A3 digit ( char base -- digit true | char false )
01 display- ( n -- )
21 status
CR do ( C: -- dodest-sys ) ( limit start -- ) (R: -- sys )
CR ?do ( C: -- dodest-sys ) ( limit start -- ) ( R: -- sys
)
01 draw- ( char -- )
57 character
01 draw-logo ( line# addr width height -- )
61
46 drop ( x -- )
52 2drop ( x1 x2 -- )
CR 3drop ( x1 x2 x3 -- )
47 dup ( x -- x x )
53 2dup ( x1 x2 -- x1 x2 x1 x2 )
CR 3dup ( x1 x2 x3 -- x1 x2 x3 x1 x2 x3 )
50 ?dup ( x -- 0 | x x)
CR else ( C: orig-sys1 -- orig-sys2 ) ( -- )
8F emit ( char -- )
01 encode+ ( prop-addr1 prop-len1 prop-addr2 prop-
12 len2 -- prop-addr3 prop-len3 )
01 encode- ( data-addr data-len -- prop-addr prop-len )
15 bytes
01 encode- ( n -- prop-addr prop-len )
11 int
01 encode- ( phys.lo ... phys.hi -- prop-addr prop-len )
13 phys
01 encode- ( str len -- prop-addr prop-len )
14 string
00 end0 ( -- )
FF end1 ( -- )
CR endcase ( C: case-sys -- ) ( sel | <nothing -- )
CR endof ( C: case-sys1 of-sys -- case-sys2 ) ( -- )
CR erase ( addr len -- )
01 erase- ( -- )
5A screen
CR eval ( ... str len -- ??? )
C evaluate (... str len -- ??? )
D
1D execute ( ... xt -- ??? )
33 exit ( -- ) (R: sys -- )
8A expect ( addr len -- )
- external ( -- )
C external- ( -- ) ( F: /FCode-string FCode#/ -- )
A token
CR false ( -- false )
01 fb1- ( -- )
74 blink-
screen
01 fb1- ( n -- )
77 delete-
character
s
01 fb1- ( n -- )
79 delete-
lines
01 fb1-draw- ( char -- )
70 character
01 fb1-draw- ( line# addr width height -- )
7A logo
01 fb1- ( -- )
73 erase-
screen
01 fb1- ( n -- )
76 insert-
character
s
01 fb1- ( n -- )
78 insert-
lines
01 fb1- ( width height #columns #lines -- )
7B install
01 fb1- ( -- )
75 invert-
screen
01 fb1- ( -- )
71 reset-
screen
01 fb1- ( n -- )
7C slide-up
01 fb1- ( -- )
72 toggle-
cursor
01 fb8- ( -- )
84 blink-
screen
01 fb8- ( n -- )
87 delete-
character
s
01 fb8- ( n -- )
89 delete-
lines
01 fb8-draw- ( char -- )
80 character
01 fb8-draw- ( line# addr width height -- )
8A logo
01 fb8- ( -- )
83 erase-
screen
01 fb8- ( n -- )
86 insert-
character
s
01 fb8- ( n -- )
88 insert-
lines
01 fb8- ( width height #columns #lines -- )
8B install
01 fb8- ( -- )
85 invert-
screen
01 fb8- ( -- )
81 reset-
screen
01 fb8- ( -- )
82 toggle-
cursor
87 fcode- ( -- n )
revision
CR fcode- ( -- )
version2
FC ferror ( -- )
CR field ( E: addr -- addr+offset ) ( offset size "new-
name< " -- offset+size )
79 fill ( addr len byte -- )
CB $find ( name-str name-len -- xt true | name-str
name-len false )
02 find- ( method-str method-len phandle -- false |
07 method xt true )
02 find- ( name-str name-len -- false | phandle true )
04 package
01 finish- ( -- )
27 device
01 >font ( char -- addr )
6E
- fload ( [filename<cr] -- )
01 fontbytes ( -- bytes )
6F
01 frame- ( -- addr )
62 buffer-
adr
8C free-mem ( a-addr len -- )
01 free- ( virt size -- )
05 virtual
02 get- ( nam-str nam-len -- true | prop-addr prop-
1d inherited len false )
-property
01 get-msecs ( -- n )
25
02 get-my- ( nam-str nam-len -- true | prop-addr prop-
1A property len false )
02 get- ( name-str name-len phandle -- true | prop-
1F package- addr prop-len false )
property
D get-token ( fcode# -- xt immediate? )
A
CR h# ( [number< ] -- n )
CR .h ( n -- )
- headerles ( -- )
s
- headers ( -- )
A here ( -- addr )
D
- hex ( -- )
CR hex ( -- )
95 hold ( char -- )
19 i ( -- index ) ( R: sys -- sys )
CR if ( C: -- orig-sys ) ( do-next? -- )
02 ihandlep ( ihandle -- phandle )
0B handle
01 insert- ( n -- )
5D character
s
01 insert- ( n -- )
5F lines
C0 instance ( -- )
01 inverse? ( -- white-on-black? )
54
01 inverse- ( -- black? )
55 screen?
26 invert ( x1 -- x2 )
01 invert- ( -- )
5C screen
01 is- ( xt -- )
1C install
01 is-remove ( xt -- )
1D
01 is- ( xt -- )
1E selftest
02 (is-user- ( E: ... -- ??? ) ( name-str name-len xt -- )
14 word)
1A j ( -- index ) ( R: sys -- sys )
8E key ( -- char )
8D key? ( -- pressed? )
73 l! ( quad qaddr -- )
D2 l, ( quad -- )
6E l@ ( qaddr -- quad )
5C /l ( -- n )
68 /l* ( nu1 -- nu2 )
60 la+ ( addr1 index -- addr2 )
64 la1+ ( addr1 -- addr2 )
02 lbflip ( quad1 -- quad2 )
27
02 lbflips ( qaddr len -- )
28
7E lbsplit ( quad -- b.lo b2 b3 b4.hi )
82 lcc ( char1 -- char2 )
CR leave ( -- ) ( R: sys -- )
CR ?leave ( exit? -- ) ( R: sys -- )
02 left- ( str len char -- R-str R-len L-str L-len )
40 parse-
string
01 line# ( -- line# )
52
94 #line ( -- a-addr )
CR linefeed ( -- 0x0A )
01 #lines ( -- rows )
50
CR loop ( C: dodest-sys -- ) ( -- ) ( R: sys1 --
<nothing | sys2)
CR +loop ( C: dodest-sys -- ) ( delta -- ) ( R: sys1 --
<nothing | sys2 )
02 lpeek ( qaddr -- false | quad true )
22
02 lpoke ( quad qaddr -- okay? )
25
27 lshift ( x1 u -- x2 )
02 lwflip ( quad1 -- quad2 )
26
02 lwflips ( qaddr len -- )
37
7C lwsplit ( quad -- w1.lo w2.hi )
01 mac- ( -- mac-str mac-len )
A4 address
01 map-low ( phys.lo ... size -- virt )
30
01 mask ( -- a-addr )
24
2F max ( n1 n2 -- n1|n2 )
01 memory- ( addr len -- fail? )
22 test-
suite
2E min ( n1 n2 -- n1|n2 )
22 mod ( n1 n2 -- rem )
2A /mod ( n1 n2 -- rem quot )
01 model ( str len -- )
19
78 move ( src-addr dest-addr len -- )
01 ms ( n -- )
26
01 my- ( -- phys.lo ... )
02 address
02 my-args ( -- arg-str arg-len )
02
02 my-parent ( -- ihandle )
0A
02 my-self ( -- ihandle )
03
01 my-space ( -- phys.hi )
03
02 my-unit ( -- phys.lo ... phys.hi )
0D
5D /n ( -- n )
CR /n* ( nu1 -- nu2 )
61 na+ ( addr1 index -- addr2 )
CR na1+ ( addr1 -- addr2 )
B6 named- ( -- ) ( F: /FCode-string FCode#/ -- )
token
2C negate ( n1 -- n2 )
01 new- ( -- )
1F device
B5 new-token ( -- ) ( F: /FCode#/ -- )
02 next- ( previous-str previous-len phandle -- false |
3D property name-str name-len true )
4D nip ( x1 x2 -- x2 )
7B noop ( -- )
CR not ( x1 -- x2 )
A2 $number ( addr len -- true | n false )
CR o# ( [number< ] -- n )
- octal ( -- )
CR octal ( -- )
CR of ( C: case-sys1 -- case-sys2 of-sys ) ( sel of-val
-- sel | <nothing )
6B off ( a-addr -- )
C offset16 ( -- )
C
6A on ( a-addr -- )
02 open- ( arg-str arg-len phandle -- ihandle | 0 )
05 package
02 $open- ( arg-str arg-len name-str name-len --
0F package ihandle | 0 )
24 or ( x1 x2 -- x3 )
93 #out ( -- a-addr )
48 over ( x1 x2 -- x1 x2 x1 )
54 2over ( x1 x2 x3 x4 -- x1 x2 x3 x4 x1 x2 )
83 pack ( str len addr -- pstr )
01 parse- ( str len -- val.lo val.hi )
1B 2int
02 peer ( phandle -- phandle.sibling )
3C
4E pick ( xu ... x1 x0 u -- xu ... x1 x0 xu )
01 property ( prop-addr prop-len name-str name-len -- )
10
31 r'> ( -- x ) ( R: x -- )
32 r@ ( -- x ) ( R: x -- x )
9E .r ( n size -- )
30 >r ( x -- ) ( R: -- x)
02 rb! ( byte addr -- )
31
02 rb@ ( addr -- byte )
30
01 reg ( phys.lo ... phys.hi size -- )
16
CR repeat ( C: orig-sys dest-sys -- ) ( -- )
01 reset- ( -- )
58 screen
02 rl! ( quad qaddr -- )
35
02 rl@ ( qaddr -- quad )
34
4F roll ( xu ... x1 x0 u -- xu-1 ... x1 x0 xu )
4A rot ( x1 x2 x3 -- x2 x3 x1 )
4B -rot ( x1 x2 x3 -- x3 x1 x2 )
56 2rot ( x1 x2 x3 x4 x5 x6 -- x3 x4 x5 x6 x1 x2 )
28 rshift ( x1 u -- x2 )
02 rw! ( w waddr -- )
33
02 rw@ ( waddr -- w )
32
CR s" ( [text<"] -- test-str text-len )
CR s. ( n -- )
C8 #s ( ud -- 0 0 )
9F .s ( ... -- ... )
01 sbus- ( sbus-intr# -- cpu-intr# )
31 intrcpu
01 screen- ( -- height )
63 height
01 screen- ( -- width )
64 width
02 set-args ( arg-str arg-len unit-str unit-len -- )
3F
01 set-font ( addr width height advance min-char
6B #glyphs -- )
D set-token ( xt immediate? fcode# -- )
B
98 sign ( n -- )
CR space ( -- )
CR spaces ( cnt -- )
88 span ( -- a-addr )
F0 start0 ( -- )
F1 start1 ( -- )
F2 start2 ( -- )
F3 start4 ( -- )
D state ( -- a-addr )
C
CR struct ( -- 0 )
02 suspend- ( -- )
15 fcode
49 swap ( x1 x2 -- x2 x1 )
55 2swap ( x1 x2 x3 x4 -- x3 x4 x1 x2 )
CR then ( C: orig-sys -- ) ( -- )
02 throw ( ... error-code -- ??? error-code | ...)
18
CR to ( param [old-name< ] -- )
01 toggle- ( -- )
59 cursor
- tokenizer ( -- )
[
CR true ( -- true )
4C tuck ( x1 x2 -- x2 x1 x2 )
90 type ( text-str text-len -- )
99 u# ( u1 -- u2 )
97 u#'> ( u -- str len )
9A u#s ( u1 -- u2 )
9B u. ( u -- )
40 u< ( u1 u2 -- unsigned-less? )
3F u<= ( u1 u2 -- unsigned-less-or-equal? )
3E u'> ( u1 u2 -- unsigned-greater? )
41 u= ( u1 u2 -- unsigned-greater-or-equal? )
CR (u.) ( n -- addr len )
58 u2/ ( x1 -- x2 )
D4 um* ( u1 u2 -- ud.prod )
D5 um/mod ( ud u -- urem uquot )
2B u/mod ( u1 u2 -- urem uquot )
89 unloop ( -- ) ( R: sys -- )
CR until ( C: dest-sys -- ) ( done? -- )
81 upc ( char1 -- char2 )
9C u.r ( u size -- )
02 user- ( ... -- ) ( R: ... -- )
19 abort
CR value ( E: -- x) ( x "new-name< "-- )
CR variable ( E: -- a-addr ) ( "new-name< "-- )
FD version1 ( -- )
74 w! ( w waddr -- )
D1 w, ( w -- )
6F w@ ( waddr -- w )
5B /w ( -- n )
67 /w* ( nu1 -- nu2 )
70 <w@ ( waddr -- n )
5F wa+ ( addr1 index -- addr2 )
63 wa1+ ( addr1 -- addr2 )
80 wbflip ( w1 -- w2 )
02 wbflips ( waddr len -- )
36
AF wbsplit ( w -- b1.lo b2.hi )
CR while ( C: dest-sys -- orig-sys dest-sys ) ( continue?
-- )
01 window- ( -- border-width )
66 left
01 window- ( -- border-height )
65 top
45 within ( n min max -- min<=n<max? )
7D wljoin ( w.lo w.hi -- quad )
02 wpeek ( waddr -- false | w true )
21
02 wpoke ( w waddr -- okay? )
24
25 xor ( x1 x2 -- x3 )
---------------------------------------------------------------------