The dollar, $, is a symbol with multiple meanings on the BBC Micro series and in RISC OS:
- it represents the root directory in a filing system;
- it is used as a word separator in the names of RISC OS environment variables;
- it may appear at the end of a BASIC variable name, to identify it as a string variable;
- it is also a BBC BASIC operator to read or change ASCII strings in memory.
This page is concerned with $ as an operator.
|Availability||Present in all original versions of BBC BASIC.|
|Syntax||BASIC I-V|| <string-var> = |
|Token (hex)||BASIC I-V|| |
|Description||BASIC I-V|| In the first form, |
In the second form, the string assigned to
|Associated keywords|| |
$ is an operator providing access to the memory of the
machine running BASIC. It allows strings in memory to be created,
inspected or replaced. A string consists of 8-bit wide ASCII characters,
and may be 0 up to 255 characters long.
Unlike string variables, which are stored in BASIC's internal format,
strings in memory are written as one might expect: bare, with the first
character at the starting address and proceeding upwards in memory. These
strings are terminated with a carriage return code, byte value &0D. When
$ operator adds this terminator automatically,
$ is a unary operator that will either read or write to
memory, depending on whether it is evaluated as an expression, or assigned
a value. In the latter case the whole
serves as an lvalue, or <string-var>.
$oscli_block% = "ENABLE" places the string
ENABLE plus carriage return in memory, starting from the
address given by
name$ = $table%, fills
the contents of memory starting from the address in variable
table%. If there is a carriage return at
name$ is left empty. Otherwise bytes of memory are added to
name$ in ascending address order, until a carriage return is
found (which is not added to
name$). If no carriage return
is found within 255 bytes, the string is left empty.
BBC BASIC does not allow memory in zero page to be treated as a
string. If the
$ operand address is less than 256, a
range error results.
The BBC Microcomputer User Guide is peppered with warnings about the use
$. They are not to be
used to access memory-mapped devices or the system's internal variables –
at least, not in published programs. The relevant addresses may change or
disappear on different machines and MOS versions, or the program may find
itself running on the other side of a Tube! The MOS offers a
comprehensive API to access system functions in a portable way.
The address space in which
$ operates is the one BASIC
chooses to provide for
$. Normally this is the address space
of the processor running BASIC. The BASIC program appears in this space,
TOP, but as mentioned
above, well-behaved programs must not alter it.
BAS128 for the B+ and Master puts the 6502
address space from 0 to &FFFF, and adds an extended space between &10000
and &1FFFF. This is made of the four slots of sideways RAM and
contains the user's program, variables and memory blocks. The MOS cannot
access this space (unless its own extended addressing system is enabled)
and machine code definitely cannot run in it although it can be assembled
OPTions 4 to 7.
-- beardo 23:01, 30 March 2007 (BST)