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 47reset-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 433fc-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 481