Page 37 of 62
SBasic User's Manual SBasic Version 2.7 Page 37
Printed: December 5, 1999
This statement repeatedly reads the 8-bit value at the address
contained in variable J and ANDs that value with the low eight bits in
variable N, until the result is not zero. When the result is not
zero, the loop terminates.
You must be aware of a few characteristics of the WAIT loops. The
first argument is always treated as an address, even if you use a
variable. In the second example above, the loop does not test the
value in J, it uses the value in J as the address to test.
Second, the WAIT statements always test an 8-bit address; you cannot
test a 16-bit I/O port with these statements.
Also, the WAIT statements always use the low eight bits of the mask
argument. Thus, if you specify a variable as the mask value, the WAIT
statements will automatically use just the low eight bits in the loop
test.
Finally, you can improve the speed of the generated code by using only
constants, numbers, or variables as arguments to these statements.
Using an argument that contains math or logical operations will
generate larger, slower test loops.
Example:
waitwhile j+4, n/q ' this runs slowly
will run slowly, since the two math operations will be performed
inside each test loop. A better way to write this is:
adr = j+4 ' calc the address
mask = n/q ' calc the mask
waitwhile adr, mask ' now do the loop
The ADDR function returns the address of a specified label or
variable.
Example:
a = addr(MyLabel) ' put address of MyLabel in A
You can use the ADDR() function to locate the first element in an
array. To do this, simply leave off the parentheses when supplying
the array's name. For example:
declare foo(5)
a = addr(foo)
causes A to contain the address of FOO(0).