Annotation of qemu/roms/SLOF/slof/fs/fcode/tokens.fs, revision 1.1.1.2

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: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.