ppc64: Don't set Kp bit on SLB
[openbios/afaerber.git] / forth / device / table.fs
blob5c58f2d9d2153a73bbed0e557e90387e0e5dd448
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.
12 hex
14 : undefined-fcode ." undefined fcode word." cr ;
15 : reserved-fcode ." reserved fcode word." cr ;
17 : ['], ( <word> -- )
18 ' ,
21 : n['], ( n <word> -- )
22 ' swap 0 do
23 dup ,
24 loop
25 drop
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]
435 here fcode-master-table - constant fcode-master-table-size
438 : nreserved ( fcode-table-ptr first last xt -- )
439 -rot 1+ swap do
440 2dup swap i cells + !
441 loop
442 2drop
445 :noname
446 800 cells alloc-mem to fcode-sys-table
448 fcode-sys-table
449 dup 0 5ff ['] reserved-fcode nreserved \ built-in fcodes
450 dup 600 7ff ['] undefined-fcode nreserved \ vendor fcodes
452 \ copy built-in fcodes
453 fcode-master-table swap fcode-master-table-size move
454 ; initializer
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
462 ['] (init-fcode-table) to init-fcode-table