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
10 \ * IBM Corporation - initial implementation
11 \ ****************************************************************************/
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 ;
17 : parse-1hex 1 hex-decode-unit ;
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
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
44 FFF 0 DO ['] ferror 0 i set-token LOOP
51 \ 01...0F beginning code of 2-byte FCode sequences
53 ' b(lit) 1 10 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
65 ' b(leave) 1 1B set-token
66 ' b(of) 1 1C set-token
67 ' execute 0 1D set-token
76 ' invert 0 26 set-token
77 ' lshift 0 27 set-token
78 ' rshift 0 28 set-token
81 ' u/mod 0 2B set-token
82 ' negate 0 2C set-token
106 ' between 0 44 set-token
107 ' within 0 45 set-token
108 ' DROP 0 46 set-token
110 ' OVER 0 48 set-token
111 ' SWAP 0 49 set-token
113 ' -ROT 0 4B set-token
114 ' TUCK 0 4C 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
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
143 ' cells 0 69 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
153 ' fc-l! 0 73 set-token
154 ' fc-w! 0 74 set-token
155 ' fc-c! 0 75 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
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
181 ' emit 0 8F set-token
182 ' type 0 90 set-token
185 ' #out 0 93 set-token
186 ' #line 0 94 set-token
187 ' hold 0 95 set-token
190 ' sign 0 98 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
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
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
251 ' um/mod 0 D5 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
262 \ Tokens 0xDF to 0xEF are reserved
264 ' start0 0 F0 set-token
265 ' start1 0 F1 set-token
266 ' start2 0 F2 set-token
267 ' start4 0 F3 set-token
269 \ Tokens 0xF4 to 0xFB are reserved
271 ' ferror 0 FC set-token
272 ' version1 0 FD set-token
274 \ ' 4-byte-id 0 FE set-token \ Historical, not supported
275 ' end1 0 FF set-token
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
285 \ Tokens 0x107 to 0x10e are reserved
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
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
317 \ Tokens 0x12C to 0x12F are reserved
319 ' map-low 0 130 set-token
320 ' sbus-intr>cpu 0 131 set-token \ Obsolete
322 \ Tokens 0x132 to 0x14f are reserved
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
358 \ Tokens 0x170 to 0x17C are obsolete fb1 functions
359 \ Tokens 0x17D to 0x17F are reserved
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
375 \ Tokens 0x18C to 0x18F are reserved
376 \ Tokens 0x190 to 0x196 are obsolete VMEbus tokens
377 \ Tokens 0x197 to 0x19F are reserved
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
385 \ Tokens 0x1A5 to 0x200 are reserved
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
429 \ Tokens 0x22A to 0x22F are reserved
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!
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
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
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
453 ' fc-x@ 0 246 set-token
454 ' fc-x! 0 247 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
469 \ 0 255 RESERVED FCODES
471 \ 0 5FF RESERVED FCODES
473 \ 0 600 VENDOR FCODES
475 \ 0 7FF VENDOR FCODES