|
|
1.1 root 1: \ tag: FCode table setup
2: \
3: \ this code implements an fcode evaluator
4: \ as described in IEEE 1275-1994
5: \
6: \ Copyright (C) 2003 Stefan Reinauer
7: \
8: \ See the file "COPYING" for further information about
9: \ the copyright and warranty status of this work.
10: \
11:
12: hex
13:
14: : undefined-fcode ." undefined fcode word." cr ;
15: : reserved-fcode ." reserved fcode word." cr ;
16:
17: : ['], ( <word> -- )
18: ' ,
19: ;
20:
21: : n['], ( n <word> -- )
22: ' swap 0 do
23: dup ,
24: loop
25: drop
26: ;
27:
28: \ the table used
29: create fcode-master-table
30: ['], end0
31: f n['], reserved-fcode
32: ['], b(lit)
33: ['], b(')
34: ['], b(")
35: ['], bbranch
36: ['], b?branch
37: ['], b(loop)
38: ['], b(+loop)
39: ['], b(do)
40: ['], b(?do)
41: ['], i
42: ['], j
43: ['], b(leave)
44: ['], b(of)
45: ['], execute
46: ['], +
47: ['], -
48: ['], *
49: ['], /
50: ['], mod
51: ['], and
52: ['], or
53: ['], xor
54: ['], invert
55: ['], lshift
56: ['], rshift
57: ['], >>a
58: ['], /mod
59: ['], u/mod
60: ['], negate
61: ['], abs
62: ['], min
63: ['], max
64: ['], >r
65: ['], r>
66: ['], r@
67: ['], exit
68: ['], 0=
69: ['], 0<>
70: ['], 0<
71: ['], 0<=
72: ['], 0>
73: ['], 0>=
74: ['], <
75: ['], >
76: ['], =
77: ['], <>
78: ['], u>
79: ['], u<=
80: ['], u<
81: ['], u>=
82: ['], >=
83: ['], <=
84: ['], between
85: ['], within
86: ['], drop
87: ['], dup
88: ['], over
89: ['], swap
90: ['], rot
91: ['], -rot
92: ['], tuck
93: ['], nip
94: ['], pick
95: ['], roll
96: ['], ?dup
97: ['], depth
98: ['], 2drop
99: ['], 2dup
100: ['], 2over
101: ['], 2swap
102: ['], 2rot
103: ['], 2/
104: ['], u2/
105: ['], 2*
106: ['], /c
107: ['], /w
108: ['], /l
109: ['], /n
110: ['], ca+
111: ['], wa+
112: ['], la+
113: ['], na+
114: ['], char+
115: ['], wa1+
116: ['], la1+
117: ['], cell+
118: ['], chars
119: ['], /w*
120: ['], /l*
121: ['], cells
122: ['], on
123: ['], off
124: ['], +!
125: ['], @
126: ['], l@
127: ['], w@
128: ['], <w@
129: ['], c@
130: ['], !
131: ['], l!
132: ['], w!
133: ['], c!
134: ['], 2@
135: ['], 2!
136: ['], move
137: ['], fill
138: ['], comp
139: ['], noop
140: ['], lwsplit
141: ['], wljoin
142: ['], lbsplit
143: ['], bljoin
144: ['], wbflip
145: ['], upc
146: ['], lcc
147: ['], pack
148: ['], count
149: ['], body>
150: ['], >body
151: ['], fcode-revision
152: ['], span
153: ['], unloop
154: ['], expect
155: ['], alloc-mem
156: ['], free-mem
157: ['], key?
158: ['], key
159: ['], emit
160: ['], type
161: ['], (cr
162: ['], cr
163: ['], #out
164: ['], #line
165: ['], hold
166: ['], <#
167: ['], u#>
168: ['], sign
169: ['], u#
170: ['], u#s
171: ['], u.
172: ['], u.r
173: ['], .
174: ['], .r
175: ['], .s
176: ['], base
177: ['], convert \ reserved (compatibility)
178: ['], $number
179: ['], digit
180: ['], -1
181: ['], 0
182: ['], 1
183: ['], 2
184: ['], 3
185: ['], bl
186: ['], bs
187: ['], bell
188: ['], bounds
189: ['], here
190: ['], aligned
191: ['], wbsplit
192: ['], bwjoin
193: ['], b(<mark)
194: ['], b(>resolve)
195: ['], set-token-table
196: ['], set-table
197: ['], new-token
198: ['], named-token
199: ['], b(:)
200: ['], b(value)
201: ['], b(variable)
202: ['], b(constant)
203: ['], b(create)
204: ['], b(defer)
205: ['], b(buffer:)
206: ['], b(field)
207: ['], b(code)
208: ['], instance
209: ['], reserved-fcode
210: ['], b(;)
211: ['], b(to)
212: ['], b(case)
213: ['], b(endcase)
214: ['], b(endof)
215: ['], #
216: ['], #s
217: ['], #>
218: ['], external-token
219: ['], $find
220: ['], offset16
221: ['], evaluate
222: ['], reserved-fcode
223: ['], reserved-fcode
224: ['], c,
225: ['], w,
226: ['], l,
227: ['], ,
228: ['], um*
229: ['], um/mod
230: ['], reserved-fcode
231: ['], reserved-fcode
232: ['], d+
233: ['], d-
234: ['], get-token
235: ['], set-token
236: ['], state
237: ['], compile,
238: ['], behavior
239: 11 n['], reserved-fcode
240: ['], start0
241: ['], start1
242: ['], start2
243: ['], start4
244: 8 n['], reserved-fcode
245: ['], ferror
246: ['], version1
247: ['], 4-byte-id
248: ['], end1
249: ['], reserved-fcode
250: ['], dma-alloc
251: ['], my-address
252: ['], my-space
253: ['], memmap
254: ['], free-virtual
255: ['], >physical
256: 8 n['], reserved-fcode
257: ['], my-params
258: ['], property
259: ['], encode-int
260: ['], encode+
261: ['], encode-phys
262: ['], encode-string
263: ['], encode-bytes
264: ['], reg
265: ['], intr
266: ['], driver
267: ['], model
268: ['], device-type
269: ['], parse-2int
270: ['], is-install
271: ['], is-remove
272: ['], is-selftest
273: ['], new-device
274: ['], diagnostic-mode?
275: ['], display-status
276: ['], memory-test-suite
277: ['], group-code
278: ['], mask
279: ['], get-msecs
280: ['], ms
281: ['], finish-device
282: ['], decode-phys \ 128
283: ['], push-package
284: ['], pop-package
285: ['], interpose \ extension (recommended practice)
286: 4 n['], reserved-fcode
287: ['], map-low
288: ['], sbus-intr>cpu
289: 1e n['], reserved-fcode
290: ['], #lines
291: ['], #columns
292: ['], line#
293: ['], column#
294: ['], inverse?
295: ['], inverse-screen?
296: ['], frame-buffer-busy?
297: ['], draw-character
298: ['], reset-screen
299: ['], toggle-cursor
300: ['], erase-screen
301: ['], blink-screen
302: ['], invert-screen
303: ['], insert-characters
304: ['], delete-characters
305: ['], insert-lines
306: ['], delete-lines
307: ['], draw-logo
308: ['], frame-buffer-adr
309: ['], screen-height
310: ['], screen-width
311: ['], window-top
312: ['], window-left
313: 3 n['], reserved-fcode
314: ['], default-font
315: ['], set-font
316: ['], char-height
317: ['], char-width
318: ['], >font
319: ['], fontbytes
320: 10 n['], reserved-fcode \ fb1 words
321: ['], fb8-draw-character
322: ['], fb8-reset-screen
323: ['], fb8-toggle-cursor
324: ['], fb8-erase-screen
325: ['], fb8-blink-screen
326: ['], fb8-invert-screen
327: ['], fb8-insert-characters
328: ['], fb8-delete-characters
329: ['], fb8-insert-lines
330: ['], fb8-delete-lines
331: ['], fb8-draw-logo
332: ['], fb8-install
333: 4 n['], reserved-fcode \ reserved
334: 7 n['], reserved-fcode \ VME-bus support
335: 9 n['], reserved-fcode \ reserved
336: ['], return-buffer
337: ['], xmit-packet
338: ['], poll-packet
339: ['], reserved-fcode
340: ['], mac-address
341: 5c n['], reserved-fcode \ 1a5-200 reserved
342: ['], device-name
343: ['], my-args
344: ['], my-self
345: ['], find-package
346: ['], open-package
347: ['], close-package
348: ['], find-method
349: ['], call-package
350: ['], $call-parent
351: ['], my-parent
352: ['], ihandle>phandle
353: ['], reserved-fcode
354: ['], my-unit
355: ['], $call-method
356: ['], $open-package
357: ['], processor-type
358: ['], firmware-version
359: ['], fcode-version
360: ['], alarm
361: ['], (is-user-word)
362: ['], suspend-fcode
363: ['], abort
364: ['], catch
365: ['], throw
366: ['], user-abort
367: ['], get-my-property
368: ['], decode-int
369: ['], decode-string
370: ['], get-inherited-property
371: ['], delete-property
372: ['], get-package-property
373: ['], cpeek
374: ['], wpeek
375: ['], lpeek
376: ['], cpoke
377: ['], wpoke
378: ['], lpoke
379: ['], lwflip
380: ['], lbflip
381: ['], lbflips
382: ['], adr-mask
383: 4 n['], reserved-fcode \ 22a-22d
384: 64bit? [IF]
385: ['], (rx@)
386: ['], (rx!)
387: [ELSE]
388: 2 n['], reserved-fcode \ 22e-22f
389: [THEN]
390: ['], rb@
391: ['], rb!
392: ['], rw@
393: ['], rw!
394: ['], rl@
395: ['], rl!
396: ['], wbflips
397: ['], lwflips
398: ['], probe
399: ['], probe-virtual
400: ['], reserved-fcode
401: ['], child
402: ['], peer
403: ['], next-property
404: ['], byte-load
405: ['], set-args
406: ['], left-parse-string \ 240
407: 64bit? [IF]
408: ['], bxjoin
409: ['], <l@
410: ['], lxjoin
411: ['], wxjoin
412: ['], x,
413: ['], x@
414: ['], x!
415: ['], /x
416: ['], /x*
417: \ ['], /xa+
418: \ ['], /xa1+
419: ['], xbflip
420: ['], xbflips
421: ['], xbsplit
422: ['], xlflip
423: ['], xlflips
424: ['], xlsplit
425: ['], xwflip
426: ['], xwflips
427: ['], xwsplit
428: [ELSE]
429: 7 n['], reserved-fcode \ 241-247 (Part of IEEE1275 64-bit draft standard)
430: ['], /x
431: c n['], reserved-fcode \ 249-254 (Part of IEEE1275 64-bit draft standard)
432: [THEN]
433:
434:
435: here fcode-master-table - constant fcode-master-table-size
436:
437:
438: : nreserved ( fcode-table-ptr first last xt -- )
439: -rot 1+ swap do
440: 2dup swap i cells + !
441: loop
442: 2drop
443: ;
444:
445: :noname
446: 800 cells alloc-mem to fcode-sys-table
447:
448: fcode-sys-table
449: dup 0 5ff ['] reserved-fcode nreserved \ built-in fcodes
450: dup 600 7ff ['] undefined-fcode nreserved \ vendor fcodes
451:
452: \ copy built-in fcodes
453: fcode-master-table swap fcode-master-table-size move
454: ; initializer
455:
456: : (init-fcode-table) ( -- )
457: fcode-sys-table fcode-table 800 cells move
458: \ clear local fcodes
459: fcode-table 800 fff ['] undefined-fcode nreserved
460: ;
461:
462: ['] (init-fcode-table) to init-fcode-table
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.