Page 54 of 62
SBasic User's Manual SBasic Version 2.7 Page 54
Printed: December 5, 1999
known variables, constants, and labels. If found, the underscore and
following characters are replaced with SBasic's internal name. Since
this internal name is what the assembler will use to resolve operands,
the SBasic name will be understood by the assembler. In the above
example, SBasic would convert the string "_time" to something like
"var009."
SBasic can handle multiple occurences of underscores within a source
line. For example, it will properly resolve a line such as:
ldx #_main+2*_cons0 uses a label and a constant
If SBasic cannot resolve the character string following an underscore
into the name of a variable, constant, or label, the line is passed
unchanged to the output file. This will usually result in an
assembler error message, but it will not cause an SBasic error! This
it will not cause an SBasic error!
means that if you use inline assembly language, you must check not
only for SBasic errors but for assembler errors as well. SBasic will
not know that the assembler could not resolve the label.
It is easy to lose track of which addresses are known to SBasic and
which are known to the assembler. Remember that labels known to
SBasic are automatically converted to an internal label before SBasic
writes them to the output file. Thus, your SBasic source may refer to
a label WAMPUM, but it will be converted to something like lbl010
before the assembler sees it.
To refer to standard assembler labels such as I/O registers, make sure
that you make them known to the assembler by including them within an
ASM section. The above example could have been written:
foo:
asm ' switch to assembly language
iobase equ $1000 address of I/O regs
tcnt equ $0e offset to TCNT reg
ldx #ioregs point x at i/o regs
ldd tcnt,x get 16-bit counter TCNT
std _time save in variable TIME
endasm ' switch back to SBasic
return ' and return