Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / SLOF / slof / fs / fcode / tokens.fs
1 \ *****************************************************************************
2 \ * Copyright (c) 2004, 2011 IBM Corporation
3 \ * All rights reserved.
4 \ * This program and the accompanying materials
5 \ * are made available under the terms of the BSD License
6 \ * which accompanies this distribution, and is available at
7 \ * http://www.opensource.org/licenses/bsd-license.php
8 \ *
9 \ * Contributors:
10 \ *     IBM Corporation - initial implementation
11 \ ****************************************************************************/
12
13 : fc-abort ." FCode called abort: IP " get-ip . ( ." STACK: " .s ) depth dup 0< IF abort THEN . rdepth . cr  abort ;
14 : fc-0 ." 0(lit): STACK ( S: " depth . ." R: " rdepth . ." ): " depth 0> IF .s THEN 0 ;
15 : fc-1 ." 1(lit): STACK ( S: " depth . ." R: " rdepth . ." ): " depth 0> IF .s THEN 1 ;
16
17 : parse-1hex 1 hex-decode-unit ;
18
19 \ Adjust functions for accessing MMIO registers. According to IEEE 1275,
20 \ a bus device can substitute bus-specific implementations of r*@ and r*!
21 \ for use by its children, e.g. with respect to byte-order. Since PCI is
22 \ little endian by default, we've got to use the little endian accessor
23 \ functions for the PCI bus (some FCODE programs are expecting this behavior).
24 : fc-set-pci-mmio-tokens  ( -- )
25    ['] rw@-le  0 232 set-token
26    ['] rw!-le  0 233 set-token
27    ['] rl@-le  0 234 set-token
28    ['] rl!-le  0 235 set-token
29    ['] rx@-le  0 22E set-token
30    ['] rx!-le  0 22F set-token
31 ;
32
33 \ Set normal MMIO access token behavior:
34 : fc-set-normal-mmio-tokens  ( -- )
35    ['] rw@  0 232 set-token
36    ['] rw!  0 233 set-token
37    ['] rl@  0 234 set-token
38    ['] rl!  0 235 set-token
39    ['] rx@  0 22E set-token
40    ['] rx!  0 22F set-token
41 ;
42
43 : reset-token-table
44   FFF 0 DO ['] ferror 0 i set-token LOOP
45   ;
46
47 reset-token-table
48
49 ' end0 0        00 set-token
50
51 \ 01...0F beginning code of 2-byte FCode sequences
52
53 ' b(lit)      1 10 set-token
54
55 ' b(')        1 11 set-token
56 ' b(")        1 12 set-token
57 ' bbranch     1 13 set-token
58 ' b?branch    1 14 set-token
59 ' b(loop)     1 15 set-token
60 ' b(+loop)    1 16 set-token
61 ' b(do)       1 17 set-token
62 ' b(?do)      1 18 set-token
63 ' i           0 19 set-token
64 ' j           0 1A set-token
65 ' b(leave)    1 1B set-token
66 ' b(of)       1 1C set-token
67 ' execute     0 1D set-token
68 ' +           0 1E set-token
69 ' -           0 1F set-token
70 ' *           0 20 set-token
71 ' /           0 21 set-token
72 ' mod         0 22 set-token 
73 ' and         0 23 set-token 
74 ' or          0 24 set-token 
75 ' xor         0 25 set-token 
76 ' invert      0 26 set-token 
77 ' lshift      0 27 set-token 
78 ' rshift      0 28 set-token 
79 ' >>a         0 29 set-token 
80 ' /mod        0 2A set-token 
81 ' u/mod       0 2B set-token
82 ' negate      0 2C set-token 
83 ' abs         0 2D set-token 
84 ' min         0 2E set-token 
85 ' max         0 2F set-token 
86 ' >r          0 30 set-token 
87 ' r>          0 31 set-token 
88 ' r@          0 32 set-token 
89 ' exit        0 33 set-token 
90 ' 0=          0 34 set-token 
91 ' 0<>         0 35 set-token 
92 ' 0<          0 36 set-token 
93 ' 0<=         0 37 set-token 
94 ' 0>          0 38 set-token 
95 ' 0>=         0 39 set-token 
96 ' <           0 3A set-token
97 ' >           0 3B set-token
98 ' =           0 3C set-token
99 ' <>          0 3D set-token
100 ' u>          0 3E set-token
101 ' u<=         0 3F set-token 
102 ' u<          0 40 set-token 
103 ' u>=         0 41 set-token 
104 ' >=          0 42 set-token 
105 ' <=          0 43 set-token 
106 ' between     0 44 set-token 
107 ' within      0 45 set-token 
108 ' DROP        0 46 set-token
109 ' DUP         0 47 set-token
110 ' OVER        0 48 set-token
111 ' SWAP        0 49 set-token
112 ' ROT         0 4A set-token
113 ' -ROT        0 4B set-token
114 ' TUCK        0 4C set-token
115 ' nip         0 4D set-token 
116 ' pick        0 4E set-token 
117 ' roll        0 4F set-token 
118 ' ?dup        0 50 set-token 
119 ' depth       0 51 set-token 
120 ' 2drop       0 52 set-token 
121 ' 2dup        0 53 set-token 
122 ' 2over       0 54 set-token 
123 ' 2swap       0 55 set-token 
124 ' 2rot        0 56 set-token 
125 ' 2/          0 57 set-token 
126 ' u2/         0 58 set-token 
127 ' 2*          0 59 set-token 
128 ' /c          0 5A set-token
129 ' /w          0 5B set-token 
130 ' /l          0 5C set-token 
131 ' /n          0 5D set-token 
132 ' ca+         0 5E set-token 
133 ' wa+         0 5F set-token 
134 ' la+         0 60 set-token 
135 ' na+         0 61 set-token 
136 ' char+       0 62 set-token 
137 ' wa1+        0 63 set-token 
138 ' la1+        0 64 set-token 
139 ' cell+       0 65 set-token 
140 ' chars       0 66 set-token 
141 ' /w*         0 67 set-token 
142 ' /l*         0 68 set-token 
143 ' cells       0 69 set-token 
144 ' on          0 6A set-token 
145 ' off         0 6B set-token 
146 ' +!          0 6C set-token 
147 ' @           0 6D set-token 
148 ' fc-l@       0 6E set-token 
149 ' fc-w@       0 6F set-token 
150 ' fc-<w@      0 70 set-token 
151 ' fc-c@       0 71 set-token 
152 ' !           0 72 set-token 
153 ' fc-l!       0 73 set-token 
154 ' fc-w!       0 74 set-token 
155 ' fc-c!       0 75 set-token 
156 ' 2@          0 76 set-token 
157 ' 2!          0 77 set-token 
158 ' fc-move     0 78 set-token 
159 ' fc-fill     0 79 set-token 
160 ' comp        0 7A set-token 
161 ' noop        0 7B set-token
162 ' lwsplit     0 7C set-token 
163 ' wljoin      0 7D set-token 
164 ' lbsplit     0 7E set-token 
165 ' bljoin      0 7F set-token 
166 ' wbflip      0 80 set-token 
167 ' upc         0 81 set-token 
168 ' lcc         0 82 set-token 
169 ' pack        0 83 set-token 
170 ' count       0 84 set-token 
171 ' body>       0 85 set-token 
172 ' >body       0 86 set-token 
173 ' fcode-revision 0 87 set-token 
174 ' span        0 88 set-token 
175 ' unloop      0 89 set-token 
176 ' expect      0 8A set-token 
177 ' alloc-mem   0 8B set-token
178 ' free-mem    0 8C set-token
179 ' key?        0 8D set-token 
180 ' key         0 8E set-token 
181 ' emit        0 8F set-token 
182 ' type        0 90 set-token 
183 ' (cr         0 91 set-token
184 ' cr          0 92 set-token 
185 ' #out        0 93 set-token
186 ' #line       0 94 set-token
187 ' hold        0 95 set-token 
188 ' <#          0 96 set-token 
189 ' u#>         0 97 set-token 
190 ' sign        0 98 set-token 
191 ' u#          0 99 set-token 
192 ' u#s         0 9A set-token 
193 ' u.          0 9B set-token 
194 ' u.r         0 9C set-token 
195 ' .           0 9D set-token 
196 ' .r          0 9E set-token 
197 ' .s          0 9F set-token 
198 ' base        0 A0 set-token 
199 \ ' convert   0 A1 set-token            \ historical, not supported
200 ' $number     0 A2 set-token 
201 ' digit       0 A3 set-token 
202 ' -1          0 A4 set-token
203 '  0          0 A5 set-token
204 '  1          0 A6 set-token
205 '  2          0 A7 set-token
206 '  3          0 A8 set-token
207 ' bl          0 A9 set-token
208 ' bs          0 AA set-token 
209 ' bell        0 AB set-token 
210 ' bounds      0 AC set-token 
211 ' here        0 AD set-token 
212 ' aligned     0 AE set-token 
213 ' wbsplit     0 AF set-token 
214 ' bwjoin      0 B0 set-token 
215 ' b(<mark)    1 B1 set-token
216 ' b(>resolve) 1 B2 set-token
217 \ ' set-token-table   0 B3 set-token    \ historical, not supported
218 \ ' set-table 0 B4 set-token            \ historical, not supported
219 ' new-token   0 B5 set-token 
220 ' named-token 0 B6 set-token
221 ' b(:)        1 B7 set-token
222 ' b(value)    1 B8 set-token 
223 ' b(variable) 1 B9 set-token 
224 ' b(constant) 1 BA set-token 
225 ' b(create)   1 BB set-token 
226 ' b(defer)    1 BC set-token 
227 ' b(buffer:)  1 BD set-token 
228 ' b(field)    1 BE set-token 
229 \ ' b(code)   0 BF set-token            \ historical, not supported
230 ' fc-instance 1 C0 set-token 
231 \ ' ferror    0 C1 set-token            \ Reserved
232 ' b(;)        1 C2 set-token
233 ' b(to)       1 C3 set-token 
234 ' b(case)     1 C4 set-token
235 ' b(endcase)  1 C5 set-token
236 ' b(endof)    1 C6 set-token
237 ' #           0 C7 set-token
238 ' #s          0 C8 set-token
239 ' #>          0 C9 set-token
240 ' external-token 0 CA set-token 
241 ' $find       0 CB set-token
242 ' offset16    0 CC set-token 
243 ' evaluate    0 CD set-token
244 \             0  CE reserved
245 \             0  CF reserved
246 ' c,          0  D0 set-token
247 ' w,          0  D1 set-token
248 ' l,          0  D2 set-token
249 ' ,           0  D3 set-token
250 ' um*         0  D4 set-token
251 ' um/mod      0  D5 set-token
252 \             0  D6 reserved
253 \             0  D7 reserved
254 ' d+          0  D8 set-token
255 ' d-          0  D9 set-token
256 ' get-token   0  DA set-token 
257 ' set-token   0  DB set-token 
258 ' state       0  DC set-token  \ possibly broken
259 ' compile,    0  DD set-token
260 ' behavior    0  DE set-token 
261
262 \ Tokens 0xDF to 0xEF are reserved
263
264 ' start0            0  F0 set-token
265 ' start1            0  F1 set-token
266 ' start2            0  F2 set-token
267 ' start4            0  F3 set-token
268
269 \ Tokens 0xF4 to 0xFB are reserved
270
271 ' ferror            0  FC set-token
272 ' version1          0  FD set-token
273
274 \ ' 4-byte-id       0  FE set-token    \ Historical, not supported
275 ' end1              0  FF set-token
276
277 \                   0 100 set-token    \ reserved
278 ' dma-alloc         0 101 set-token    \ Obsolete
279 ' my-address        0 102 set-token 
280 ' my-space          0 103 set-token
281 \ ' memmap          0 104 set-token    \ Obsolete
282 ' free-virtual      0 105 set-token
283 \ ' >physical       0 106 set-token    \ Obsolete
284
285 \ Tokens 0x107 to 0x10e are reserved
286
287 ' my-params         0 10f set-token    \ Obsolete
288 ' property          0 110 set-token
289 ' encode-int        0 111 set-token
290 ' encode+           0 112 set-token
291 ' encode-phys       0 113 set-token
292 ' encode-string     0 114 set-token
293 ' encode-bytes      0 115 set-token
294 ' reg               0 116 set-token
295 ' intr              0 117 set-token    \ Obsolete
296 ' driver            0 118 set-token    \ Obsolete
297 ' model             0 119 set-token
298 ' device-type       0 11A set-token
299 ' parse-2int        0 11B set-token
300 \ ' is-install      0 11C set-token    \ Will be set by framebuffer code
301 \ ' is-remove       0 11D set-token    \ Will be set by framebuffer code
302 \ ' is-selftest     0 11E set-token    \ Will be set by framebuffer code
303 ' new-device        0 11F set-token
304 ' diagnostic-mode?  0 120 set-token
305 ' display-status    0 121 set-token    \ Maybe obsolete
306 ' memory-test-suite 0 122 set-token
307 ' group-code        0 123 set-token    \ Obsolete
308 ' mask              0 124 set-token
309 ' get-msecs         0 125 set-token
310 ' ms                0 126 set-token
311 ' finish-device     0 127 set-token
312 ' decode-phys       0 128 set-token
313 \ ' push-package    0 129 set-token    \ TODO - from proposal 215
314 \ ' pop-package     0 12A set-token    \ TODO - from proposal 215
315 ' interpose         0 12B set-token    \ Recommended practice: Interposition
316
317 \ Tokens 0x12C to 0x12F are reserved
318
319 ' map-low           0 130 set-token
320 ' sbus-intr>cpu     0 131 set-token    \ Obsolete
321
322 \ Tokens 0x132 to 0x14f are reserved
323
324 \ The following tokens will be set by the framebuffer code:
325 \ ' #lines            0 150 set-token
326 \ ' #columns          0 151 set-token
327 \ ' line#             0 152 set-token
328 \ ' column#           0 153 set-token
329 \ ' inverse?          0 154 set-token
330 \ ' inverse-screen?   0 155 set-token
331 \ ' frame-buffer-busy 0 156 set-token  \ Historical, not supported
332 \ ' draw-character    0 157 set-token
333 \ ' reset-screen      0 158 set-token
334 \ ' toggle-cursor     0 159 set-token
335 \ ' erase-screen      0 15A set-token
336 \ ' blink-screen      0 15B set-token
337 \ ' invert-screen     0 15C set-token
338 \ ' insert-characters 0 15D set-token
339 \ ' delete-characters 0 15E set-token
340 \ ' insert-lines      0 15F set-token
341 \ ' delete-lines      0 160 set-token
342 \ ' draw-logo         0 161 set-token
343 \ ' frame-buffer-adr  0 162 set-token
344 \ ' screen-height     0 163 set-token
345 \ ' screen-width      0 164 set-token
346 \ ' window-top        0 165 set-token
347 \ ' window-left       0 166 set-token
348 \ '                   0 167 set-token  \ Reserved
349 \ ' foreground-color  0 168 set-token  \ From 16-color recommended practice
350 \ ' background-color  0 169 set-token  \ From 16-color recommended practice
351 \ ' default-font      0 16A set-token
352 \ ' set-font          0 16B set-token
353 \ ' char-height       0 16C set-token
354 \ ' char-width        0 16D set-token
355 \ ' >font             0 16E set-token
356 \ ' fontbytes         0 16F set-token
357
358 \ Tokens 0x170 to 0x17C are obsolete fb1 functions
359 \ Tokens 0x17D to 0x17F are reserved
360
361 \ The following tokens will be set by the framebuffer code, too:
362 \ ' fb8-draw-character 0 180 set-token
363 \ ' fb8-reset-screen   0 181 set-token
364 \ ' fb8-toggle-cursor  0 182 set-token
365 \ ' fb8-erase-screen   0 183 set-token
366 \ ' fb8-blink-screen   0 184 set-token
367 \ ' fb8-invert-screen  0 185 set-token
368 \ ' fb8-insert-characters 0 186 set-token
369 \ ' fb8-delete-characters 0 187 set-token
370 \ ' fb8-insert-lines   0 188 set-token
371 \ ' fb8-delete-lines   0 189 set-token
372 \ ' fb8-draw-logo      0 18A set-token
373 \ ' fb8-install        0 18B set-token
374
375 \ Tokens 0x18C to 0x18F are reserved
376 \ Tokens 0x190 to 0x196 are obsolete VMEbus tokens
377 \ Tokens 0x197 to 0x19F are reserved
378
379 \ ' return-buffer   0 1A0 set-token       \ Historical, not supported
380 \ ' xmit-packet     0 1A1 set-token       \ Historical, not supported
381 \ ' poll-packet     0 1A2 set-token       \ Historical, not supported
382 \                   0 1A3 set-token       \ reserved
383 ' mac-address       0 1A4 set-token
384
385 \ Tokens 0x1A5 to 0x200 are reserved
386
387 ' device-name       0 201 set-token
388 ' my-args           0 202 set-token
389 ' my-self           0 203 set-token
390 ' find-package      0 204 set-token
391 ' open-package      0 205 set-token
392 ' close-package     0 206 set-token
393 ' find-method       0 207 set-token
394 ' call-package      0 208 set-token
395 ' $call-parent      0 209 set-token
396 ' my-parent         0 20A set-token
397 ' ihandle>phandle   0 20B set-token
398 \                   0 20C set-token       \ reserved
399 ' my-unit           0 20D set-token
400 ' $call-method      0 20E set-token
401 ' $open-package     0 20F set-token
402 ' processor-type    0 210 set-token       \ Obsolete
403 ' firmware-version  0 211 set-token       \ Obsolete
404 ' fcode-version     0 212 set-token       \ Obsolete
405 \ ' alarm           0 213 set-token       \ TODO
406 ' (is-user-word)    0 214 set-token
407 ' suspend-fcode     0 215 set-token
408 ' fc-abort          0 216 set-token
409 ' catch             0 217 set-token
410 ' throw             0 218 set-token
411 \ ' user-abort      0 219 set-token       \ TODO
412 ' get-my-property   0 21A set-token
413 ' decode-int        0 21B set-token
414 ' decode-string     0 21C set-token
415 ' get-inherited-property 0 21D set-token  
416 ' delete-property   0 21E set-token  
417 ' get-package-property 0 21F set-token
418 ' cpeek             0 220 set-token 
419 ' wpeek             0 221 set-token 
420 ' lpeek             0 222 set-token 
421 ' cpoke             0 223 set-token 
422 ' wpoke             0 224 set-token 
423 ' lpoke             0 225 set-token 
424 ' lwflip            0 226 set-token 
425 ' lbflip            0 227 set-token 
426 ' lbflips           0 228 set-token
427 \ ' adr-mask        0 229 set-token       \ Historical, not supported
428
429 \ Tokens 0x22A to 0x22F are reserved
430
431 ' rb@               0 230 set-token
432 ' rb!               0 231 set-token
433 fc-set-normal-mmio-tokens                 \ Set rw@, rw!, rl@, rl!, rx@ and rx!
434
435 ' wbflips           0 236 set-token 
436 ' lwflips           0 237 set-token 
437 \ ' probe           0 238 set-token       \ Obsolete
438 \ ' probe-virtual   0 239 set-token       \ Obsolete
439 \                   0 23A reserved
440 ' child             0 23B set-token
441 ' peer              0 23C set-token
442 ' next-property     0 23D set-token
443 ' byte-load         0 23E set-token
444 ' set-args          0 23F set-token
445 ' left-parse-string 0 240 set-token
446
447 \ 64-bit extension tokens:
448 ' bxjoin            0 241 set-token
449 ' fc-<l@            0 242 set-token
450 ' lxjoin            0 243 set-token
451 ' wxjoin            0 244 set-token
452 ' x,                0 245 set-token
453 ' fc-x@             0 246 set-token
454 ' fc-x!             0 247 set-token
455 ' /x                0 248 set-token
456 ' /x*               0 249 set-token
457 ' xa+               0 24A set-token
458 ' xa1+              0 24B set-token
459 ' xbflip            0 24C set-token
460 ' xbflips           0 24D set-token
461 ' xbsplit           0 24E set-token
462 ' xlflip            0 24F set-token
463 ' xlflips           0 250 set-token
464 ' xlsplit           0 251 set-token
465 ' xwflip            0 252 set-token
466 ' xwflips           0 253 set-token
467 ' xwsplit           0 254 set-token
468
469 \                    0 255 RESERVED FCODES 
470 \                    ...
471 \                    0 5FF RESERVED FCODES 
472
473 \                    0 600 VENDOR FCODES 
474 \                    ...
475 \                    0 7FF VENDOR FCODES 
476
477 \                    0 800 LOCAL FCODES 
478 \                    ...
479 \                    0 FFF LOCAL FCODES 
480