j
: Next unread message k
: Previous unread message j a
: Jump to all threads
j l
: Jump to MailingList overview
Segher Boessenkool wrote:
Some Open Firmware implementations have a special FCode x'f4 which allows FCode#s up to x'ffff; x'f4 followed by "high" byte, "low" byte.
SmartFirmware currently doesn't allow Fcodes greater than 0xFFF, as per the (current) spec. But that's only for tokenizing, so that the resulting image file is 1275-compliant. SF's internal Forth execution-token representation is mostly Fcode to save memory.
Forth toks that aren't tokenzied/fcodes are limited to 0x3FFF_FFFF. The vendor-specific marker 0x6 is used to indicate a token value greater than 0xfff. 2 additional bytes for values 0x1000:0x7fff, 3 more bytes for 0x8000:0x3fffff, and 4 bytes for 0x400000:0x3fffffff.
The 1st MSB bits of the byte after the 0x06 indicates 4, 3, or 2 additional bytes: 0xC0 == 4; 0x80 == 3; else 2. No reason that some scheme like this couldn't be used for extending Fcodes too.
(SF also uses the vendor-specific range codes 0x7* as a sort of prefix for internal use. It's also not used for tokenizing.)
Anyway, just throwing this out, for what it's worth.