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 \ for framebuffer code
301
' is-remove 0 11D set-token \ for framebuffer code
302
' is-selftest 0 11E set-token \ for 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 are for 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 are for 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