Contained Within
Find More Documentation
Featured Support Resources
| Scarica il manuale in formato PDF
Differences Between FCode 2.x and 3.x
D
- This appendix discusses the FCodes and macros that have changed between FCode 2.x and FCode 3.x. The 3.x tokenizer will still tokenize code correctly using FCode 2.x names (excepting old #>, # and #s). The function of each of the equivalent FCodes is unchanged. The existing tokenized FCode programs using 2.x FCodes will not be affected on 3.x OpenBoot PROMs. The only functional exception is in the FCode 2.x names #>, #, and #s. FCode 3.x has the same names associated with functionally different FCodes and different byte values. If you have tokenized FCode using the 2.x tokenizer with these FCodes (for instance, #), you will get the same response (since the operation of old # is equivalent to new u# and tokenized code has 0x99 as byte value for your old#).
-
Table D-1
| FCode 2.x | FCode 3.x (equivalent) | Byte Value |
| not | invert | 26 |
| << | lshift | 27 |
| >> | rshift | 28 |
| ca1+ | char+ | 62 |
| na1+ | cell+ | 65 |
| /c* | chars | 66 |
| /n* | cells | 69 |
| flip | wbflip | 80 |
| version | FCode-revision | 37 |
-
Table D-1 (Continued)
| FCode 2.x | FCode 3.x (equivalent) | Byte Value |
| b(is) | b(to) | C3 |
| eval | evaluate | CD |
| u*x | um* | D4 |
| xu/mod | um/mod | D5 |
| x+ | d+ | D8 |
| x- | d- | D9 |
| attribute | property | 0110 |
| xdrint | encode-int | 0111 |
| xdr+ | encode+ | 0112 |
| xdrphys | encode-phys | 0113 |
| xdrstring | encode-string | 0114 |
| xdrbytes | encode-bytes | 0115 |
| decode-2int | parse-2int | 011B |
| map-sbus | map-low | 0130 (stack diag. enhanced) |
| get-my-attribute | get-my-property | 021A |
| xdrtoint | decode-int | 021B |
| xdrtostring | decode-string | 021C |
| get-inherited-attribute | get-inherited-property | 021D |
| delete-attribute | delete-property | 021E |
| get-package-attribute | get-package-property | 02 1F |
| wflips | wbflips | 0236 |
| lflips | lwflips | 0237 |
| is | to |
|
-
Note - The following 2.x FCodes have changed names. The new 3.x FCodes with the same names function differently.
-
Table D-2
| FCode 2.x | FCode 3.x (equivalent) | Byte Value |
| #> | u#> | 97 |
| # | u# | 99 |
| #s | u#s | 9A |
- So if you are using the 3.x tokenizer to elicit the old response from #>, #, and #s, the source code must be changed so that the commands are replaced by u#>, u# and u#s respectively. For code previously tokenized using the 2.x tokenizer, the result is the same on both OpenBoot 2.x and 3.x PROMs .
-
Table D-3
| FCode 2.x | Byte Value |
| 4-byte-id | FE |
| dma-alloc | 0101 |
| memmap | 0104 |
| >physical | 0106 |
| my-params | 010F |
| intr | 0117 |
| driver | 0118 |
| group-code | 0123 |
| processor-type | 0210 |
| firmware-version | 0211 |
| fcode-version | 0212 |
| probe | 0238 |
| probe-virtual | 0239 |
- To access the functionality provided by dma-alloc, do:
-
-
: my-dma-alloc ( size -- addr ) " dma-alloc" $call-parent ;
- and use my-dma-alloc.
- To access the functionality provided by memmap, use map-low appropriately.
- To replace intr, create "intr" properties using property.
- To access the functionality provided by firmware-version or fcode-version, use firmware-revision.
-
Table D-4
| FCode 3.x | ByteValue |
| unloop | 89 |
| get-token | DA |
| set-token | DB |
| state | DC |
| compile, | DD |
| behavior | DE |
| decode-phys | 0128 |
| push-package | 0129 |
| pop-package | 012A |
| interpose | 012B |
| lwflip | 0226 |
| lbflip | 0227 |
| lbflips | 0228 |
| next-property | 023D |
| byte-load | 023E |
| set-args | 023F |
-
Table D-5
| FCode 3.x | Byte Value |
| # | C7 |
| #s | C8 |
| #> | C9 |
-
Table D-6
| 3.x FCodes | Stack Diagrams | Byte Value |
| rx@ | ( oaddr -- o ) | 022E |
| rx! | ( o oaddr -- ) | 022F |
| bxjoin | ( b.lo b.2 b.3 b.4 b.5 b.6 b.7 b.hi -- o ) | 0241 |
| <l@ | ( qaddr -- n ) | 0242 |
| lxjoin | ( quad.lo quad.hi -- o ) | 0243 |
| wxjoin | ( w.lo w.2 w.3 w.hi -- o ) | 0244 |
| x, | ( o -- ) | 0245 |
| x@ | ( oaddr -- o ) | 0246 |
| x! | ( o oaddr -- ) | 0247 |
| /x | ( -- n ) | 0248 |
| /x* | ( nu1 -- nu2 ) | 0249 |
| xa+ | ( addr1 index -- addr2 ) | 024A |
| xa1+ | ( addr1 -- addr2 ) | 024B |
| xbflip | ( oct1 -- oct2 ) | 024C |
| xbflips | ( oaddr len -- ) | 024D |
| xbsplit | ( o -- b.lo b.2 b.3 b.4 b.5 b.6 b.7 b.hi ) | 024E |
| xlflip | ( oct1 -- oct2 ) | 024F |
| xlflips | ( oaddr len -- ) | 0250 |
| xlsplit | ( o -- quad.lo quad.hi ) | 0251 |
| xwflip | ( oct1 -- oct2 ) | 0252 |
| xwflips | ( oaddr len -- ) | 0253 |
| xwsplit | ( o -- w.lo w.2 w.3 w.hi ) | 0254 |
- The following device-handling-related user interface commands have changed between OpenBoot 2.x and OpenBoot 3.x. Their functional behavior is the same. Determine your system's OpenBoot PROM version by entering .version at the ok> prompt, then using the appropriate commands from the following table.
-
Table D-7
| OpenBoot 2.x Command | OpenBoot 3.x Command |
| .attributes | .properties |
| cd | dev |
| reset (to reset full system) | reset-all |
|
|