~pmdj/ubuntu/trusty/qemu/2.9+applesmc+fadtv3

« back to all changes in this revision

Viewing changes to roms/SLOF/slof/fs/fcode/tokens.fs

  • Committer: Phil Dennis-Jordan
  • Date: 2017-07-21 08:03:43 UTC
  • mfrom: (1.1.1)
  • Revision ID: phil@philjordan.eu-20170721080343-2yr2vdj7713czahv
New upstream release 2.9.0.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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    \ 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
 
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 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
 
357
 
 
358
\ Tokens 0x170 to 0x17C are obsolete fb1 functions
 
359
\ Tokens 0x17D to 0x17F are reserved
 
360
 
 
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
 
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