VOYEUR T2.0 Development Notes An explanation for the way BASIC tokens are decoded may be of interest to VOYEUR users. Tandy BASIC uses all bytes from 128 to 255 as tokens, and no others. The keywords that these tokens represent are listed in ROM, starting at address 128, in order of their token values; there is no separation between keywords, but the byte (ASCII value) for the first letter of each keyword is raised by 128, as is the byte representing single characters such as math symbols. (These raised-byte characters can be read in their unraised form by VOYEUR, at the left end of the information line.) Since the tokens and addresses are monotonically related, the address of each keyword can be approximated from its token by a linear equation. This is done in line 11; a string of printable 7-bit ASCII characters stores the correction for the exact value. (A scan-search was first used, counting the raised bytes to match the token, but some keywords took several seconds to locate.) In exploring the way BASIC programs are stored, a number of questions come to mind: Why is a colon prefixed to the "ELSE" token and to the remark apostrophe token. (Yes, a token is actually used for the apostrophe, and yet is prefixed by the REM token! Don't ask.) These required extra lines to be correctly decoded by VOYEUR. Of the many keywords requiring parentheses (often unnecessarily) only "TAB" has the opening parenthesis attached to it in ROM, saving a byte in .BA files. Why are tokens wasted on single-byte math functions, while "AS" and the last half of words such as "OUTPUT" and "MAXRAM" are not tokenized, and "MAXFILES" uses two tokens, one for each half? Then, of course, there are those aptly-named "dummy" expressions! End