|
|
1.1 root 1: \ ***************************************************************************** 1.1.1.2 ! root 2: \ * Copyright (c) 2004, 2011 IBM Corporation 1.1 root 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: 1.1.1.2 ! root 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: ; 1.1 root 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 1.1.1.2 ! root 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 1.1 root 152: ' ! 0 72 set-token 1.1.1.2 ! root 153: ' fc-l! 0 73 set-token ! 154: ' fc-w! 0 74 set-token ! 155: ' fc-c! 0 75 set-token 1.1 root 156: ' 2@ 0 76 set-token 157: ' 2! 0 77 set-token 1.1.1.2 ! root 158: ' fc-move 0 78 set-token ! 159: ' fc-fill 0 79 set-token 1.1 root 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 1.1.1.2 ! root 169: ' pack 0 83 set-token 1.1 root 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 1.1.1.2 ! root 177: ' alloc-mem 0 8B set-token ! 178: ' free-mem 0 8C set-token 1.1 root 179: ' key? 0 8D set-token 180: ' key 0 8E set-token 181: ' emit 0 8F set-token 182: ' type 0 90 set-token 1.1.1.2 ! root 183: ' (cr 0 91 set-token 1.1 root 184: ' cr 0 92 set-token 1.1.1.2 ! root 185: ' #out 0 93 set-token ! 186: ' #line 0 94 set-token 1.1 root 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 1.1.1.2 ! root 199: \ ' convert 0 A1 set-token \ historical, not supported 1.1 root 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 1.1.1.2 ! root 217: \ ' set-token-table 0 B3 set-token \ historical, not supported ! 218: \ ' set-table 0 B4 set-token \ historical, not supported 1.1 root 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 1.1.1.2 ! root 229: \ ' b(code) 0 BF set-token \ historical, not supported ! 230: ' fc-instance 1 C0 set-token ! 231: \ ' ferror 0 C1 set-token \ Reserved 1.1 root 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: 1.1.1.2 ! root 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 1.1 root 270: 1.1.1.2 ! root 271: ' ferror 0 FC set-token ! 272: ' version1 0 FD set-token 1.1 root 273: 1.1.1.2 ! root 274: \ ' 4-byte-id 0 FE set-token \ Historical, not supported ! 275: ' end1 0 FF set-token 1.1 root 276: 1.1.1.2 ! root 277: \ 0 100 set-token \ reserved ! 278: ' dma-alloc 0 101 set-token \ Obsolete 1.1 root 279: ' my-address 0 102 set-token 280: ' my-space 0 103 set-token 1.1.1.2 ! root 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 1.1 root 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 1.1.1.2 ! root 295: ' intr 0 117 set-token \ Obsolete ! 296: ' driver 0 118 set-token \ Obsolete ! 297: ' model 0 119 set-token 1.1 root 298: ' device-type 0 11A set-token 299: ' parse-2int 0 11B set-token 1.1.1.2 ! root 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 1.1 root 303: ' new-device 0 11F set-token 304: ' diagnostic-mode? 0 120 set-token 1.1.1.2 ! root 305: ' display-status 0 121 set-token \ Maybe obsolete 1.1 root 306: ' memory-test-suite 0 122 set-token 1.1.1.2 ! root 307: ' group-code 0 123 set-token \ Obsolete 1.1 root 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 1.1.1.2 ! root 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 1.1 root 384: 1.1.1.2 ! root 385: \ Tokens 0x1A5 to 0x200 are reserved 1.1 root 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 1.1.1.2 ! root 398: \ 0 20C set-token \ reserved 1.1 root 399: ' my-unit 0 20D set-token 400: ' $call-method 0 20E set-token 401: ' $open-package 0 20F set-token 1.1.1.2 ! root 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 1.1 root 406: ' (is-user-word) 0 214 set-token 407: ' suspend-fcode 0 215 set-token 1.1.1.2 ! root 408: ' fc-abort 0 216 set-token 1.1 root 409: ' catch 0 217 set-token 410: ' throw 0 218 set-token 1.1.1.2 ! root 411: \ ' user-abort 0 219 set-token \ TODO 1.1 root 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 1.1.1.2 ! root 427: \ ' adr-mask 0 229 set-token \ Historical, not supported ! 428: ! 429: \ Tokens 0x22A to 0x22F are reserved ! 430: 1.1 root 431: ' rb@ 0 230 set-token 432: ' rb! 0 231 set-token 1.1.1.2 ! root 433: fc-set-normal-mmio-tokens \ Set rw@, rw!, rl@, rl!, rx@ and rx! ! 434: 1.1 root 435: ' wbflips 0 236 set-token 436: ' lwflips 0 237 set-token 1.1.1.2 ! root 437: \ ' probe 0 238 set-token \ Obsolete ! 438: \ ' probe-virtual 0 239 set-token \ Obsolete 1.1 root 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 1.1.1.2 ! root 446: ! 447: \ 64-bit extension tokens: 1.1 root 448: ' bxjoin 0 241 set-token 1.1.1.2 ! root 449: ' fc-<l@ 0 242 set-token 1.1 root 450: ' lxjoin 0 243 set-token 451: ' wxjoin 0 244 set-token 452: ' x, 0 245 set-token 1.1.1.2 ! root 453: ' fc-x@ 0 246 set-token ! 454: ' fc-x! 0 247 set-token 1.1 root 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 1.1.1.2 ! root 468: ! 469: \ 0 255 RESERVED FCODES 1.1 root 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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.