blob: 04d22c85e489831223911375ef0ff9b61a037516 [file] [log] [blame]
\ tag: FCode table setup
\
\ this code implements an fcode evaluator
\ as described in IEEE 1275-1994
\
\ Copyright (C) 2003 Stefan Reinauer
\
\ See the file "COPYING" for further information about
\ the copyright and warranty status of this work.
\
hex
: undefined-fcode ." undefined fcode word." cr ;
: reserved-fcode ." reserved fcode word." cr ;
: ['], ( <word> -- )
' ,
;
: n['], ( n <word> -- )
' swap 0 do
dup ,
loop
drop
;
\ the table used
create fcode-master-table
['], end0
f n['], reserved-fcode
['], b(lit)
['], b(')
['], b(")
['], bbranch
['], b?branch
['], b(loop)
['], b(+loop)
['], b(do)
['], b(?do)
['], i
['], j
['], b(leave)
['], b(of)
['], execute
['], +
['], -
['], *
['], /
['], mod
['], and
['], or
['], xor
['], invert
['], lshift
['], rshift
['], >>a
['], /mod
['], u/mod
['], negate
['], abs
['], min
['], max
['], >r
['], r>
['], r@
['], exit
['], 0=
['], 0<>
['], 0<
['], 0<=
['], 0>
['], 0>=
['], <
['], >
['], =
['], <>
['], u>
['], u<=
['], u<
['], u>=
['], >=
['], <=
['], between
['], within
['], drop
['], dup
['], over
['], swap
['], rot
['], -rot
['], tuck
['], nip
['], pick
['], roll
['], ?dup
['], depth
['], 2drop
['], 2dup
['], 2over
['], 2swap
['], 2rot
['], 2/
['], u2/
['], 2*
['], /c
['], /w
['], /l
['], /n
['], ca+
['], wa+
['], la+
['], na+
['], char+
['], wa1+
['], la1+
['], cell+
['], chars
['], /w*
['], /l*
['], cells
['], on
['], off
['], +!
['], @
['], l@
['], w@
['], <w@
['], c@
['], !
['], l!
['], w!
['], c!
['], 2@
['], 2!
['], move
['], fill
['], comp
['], noop
['], lwsplit
['], wljoin
['], lbsplit
['], bljoin
['], wbflip
['], upc
['], lcc
['], pack
['], count
['], body>
['], >body
['], fcode-revision
['], span
['], unloop
['], expect
['], alloc-mem
['], free-mem
['], key?
['], key
['], emit
['], type
['], (cr
['], cr
['], #out
['], #line
['], hold
['], <#
['], u#>
['], sign
['], u#
['], u#s
['], u.
['], u.r
['], .
['], .r
['], .s
['], base
['], convert \ reserved (compatibility)
['], $number
['], digit
['], -1
['], 0
['], 1
['], 2
['], 3
['], bl
['], bs
['], bell
['], bounds
['], here
['], aligned
['], wbsplit
['], bwjoin
['], b(<mark)
['], b(>resolve)
['], set-token-table
['], set-table
['], new-token
['], named-token
['], b(:)
['], b(value)
['], b(variable)
['], b(constant)
['], b(create)
['], b(defer)
['], b(buffer:)
['], b(field)
['], b(code)
['], instance
['], reserved-fcode
['], b(;)
['], b(to)
['], b(case)
['], b(endcase)
['], b(endof)
['], #
['], #s
['], #>
['], external-token
['], $find
['], offset16
['], evaluate
['], reserved-fcode
['], reserved-fcode
['], c,
['], w,
['], l,
['], ,
['], um*
['], um/mod
['], reserved-fcode
['], reserved-fcode
['], d+
['], d-
['], get-token
['], set-token
['], state
['], compile,
['], behavior
11 n['], reserved-fcode
['], start0
['], start1
['], start2
['], start4
8 n['], reserved-fcode
['], ferror
['], version1
['], 4-byte-id
['], end1
['], reserved-fcode
['], (dma-alloc)
['], my-address
['], my-space
['], memmap
['], free-virtual
['], >physical
8 n['], reserved-fcode
['], my-params
['], property
['], encode-int
['], encode+
['], encode-phys
['], encode-string
['], encode-bytes
['], reg
['], intr
['], driver
['], model
['], device-type
['], parse-2int
['], is-install
['], is-remove
['], is-selftest
['], new-device
['], diagnostic-mode?
['], display-status
['], memory-test-suite
['], group-code
['], mask
['], get-msecs
['], ms
['], finish-device
['], decode-phys \ 128
['], push-package
['], pop-package
['], interpose \ extension (recommended practice)
4 n['], reserved-fcode
['], map-low
['], sbus-intr>cpu
1e n['], reserved-fcode
['], #lines
['], #columns
['], line#
['], column#
['], inverse?
['], inverse-screen?
['], frame-buffer-busy?
['], draw-character
['], reset-screen
['], toggle-cursor
['], erase-screen
['], blink-screen
['], invert-screen
['], insert-characters
['], delete-characters
['], insert-lines
['], delete-lines
['], draw-logo
['], frame-buffer-adr
['], screen-height
['], screen-width
['], window-top
['], window-left
3 n['], reserved-fcode
['], default-font
['], set-font
['], char-height
['], char-width
['], >font
['], fontbytes
10 n['], reserved-fcode \ fb1 words
['], fb8-draw-character
['], fb8-reset-screen
['], fb8-toggle-cursor
['], fb8-erase-screen
['], fb8-blink-screen
['], fb8-invert-screen
['], fb8-insert-characters
['], fb8-delete-characters
['], fb8-insert-lines
['], fb8-delete-lines
['], fb8-draw-logo
['], fb8-install
4 n['], reserved-fcode \ reserved
7 n['], reserved-fcode \ VME-bus support
9 n['], reserved-fcode \ reserved
['], return-buffer
['], xmit-packet
['], poll-packet
['], reserved-fcode
['], mac-address
5c n['], reserved-fcode \ 1a5-200 reserved
['], device-name
['], my-args
['], my-self
['], find-package
['], open-package
['], close-package
['], find-method
['], call-package
['], $call-parent
['], my-parent
['], ihandle>phandle
['], reserved-fcode
['], my-unit
['], $call-method
['], $open-package
['], processor-type
['], firmware-version
['], fcode-version
['], alarm
['], (is-user-word)
['], suspend-fcode
['], abort
['], catch
['], throw
['], user-abort
['], get-my-property
['], decode-int
['], decode-string
['], get-inherited-property
['], delete-property
['], get-package-property
['], cpeek
['], wpeek
['], lpeek
['], cpoke
['], wpoke
['], lpoke
['], lwflip
['], lbflip
['], lbflips
['], adr-mask
4 n['], reserved-fcode \ 22a-22d
64bit? [IF]
['], (rx@)
['], (rx!)
[ELSE]
2 n['], reserved-fcode \ 22e-22f
[THEN]
['], rb@
['], rb!
['], rw@
['], rw!
['], rl@
['], rl!
['], wbflips
['], lwflips
['], probe
['], probe-virtual
['], reserved-fcode
['], child
['], peer
['], next-property
['], byte-load
['], set-args
['], left-parse-string \ 240
64bit? [IF]
['], bxjoin
['], <l@
['], lxjoin
['], wxjoin
['], x,
['], x@
['], x!
['], /x
['], /x*
\ ['], /xa+
\ ['], /xa1+
['], xbflip
['], xbflips
['], xbsplit
['], xlflip
['], xlflips
['], xlsplit
['], xwflip
['], xwflips
['], xwsplit
[ELSE]
7 n['], reserved-fcode \ 241-247 (Part of IEEE1275 64-bit draft standard)
['], /x
c n['], reserved-fcode \ 249-254 (Part of IEEE1275 64-bit draft standard)
[THEN]
here fcode-master-table - constant fcode-master-table-size
: nreserved ( fcode-table-ptr first last xt -- )
-rot 1+ swap do
2dup swap i cells + !
loop
2drop
;
:noname
800 cells alloc-mem to fcode-sys-table
fcode-sys-table
dup 0 5ff ['] reserved-fcode nreserved \ built-in fcodes
dup 600 7ff ['] undefined-fcode nreserved \ vendor fcodes
\ copy built-in fcodes
fcode-master-table swap fcode-master-table-size move
; initializer
: (init-fcode-table) ( -- )
fcode-sys-table fcode-table 800 cells move
\ clear local fcodes
fcode-table 800 fff ['] undefined-fcode nreserved
;
['] (init-fcode-table) to init-fcode-table