Page 137 - The Unofficial Guide to Lego Mindstorms Robots
P. 137
126
value of the loop index on the stack with the I word. For example, the following shows how to define a word that prints the
numbers from 1 to 10.
: oneToTen 11 1 D O I . LOOP ;
ok
oneToTen
1 2 3 4 5 6 7 8 9 10 ok
limit start DO words delta +LOOP
T his variation on the basic DO LOOP adds the given delta value to the loop index instead of always adding one. You can
o p to count
use this type of l o backwards by supplying a negative delta.
BEGIN body UNTIL
T his loop performs its body until a false condition is left on the stack. The following example waits for the View button to be
pressed (using some stu ff we haven't covered just yet):
BUTTON_INIT
ok
: waitForViewButton BEGIN RCX_BUTTON DUP BUTTON_GET @ 2 AND UNTIL ;
ok
In the body of this loop we push RCX_BUTTON on the stack and duplicate it. Then we call BUTTON_GET, which retrieves the
cu rrent state of the buttons into the RCX_BUTTON variable. Then t he value of RCX_BUTTON is retrieved (with @) and
c ompared to 2, which corresponds to the View button on the RCX. When this condition is true, the loop ends and
WaitForViewButton is done.
BEGIN body AGAIN
T his variation on BEGIN UNTIL loops forever , executing its body each time through the loop.
p bFORTH Words
p bFORTH includes 34 words that perform RCX-specific functions. In this section, I'll describe them all for you. Each word's
name is listed along w ith the starting and ending state of the stack, like this:
WORD_NAME (startStack -- endStack)
For example, the SWAP word would be listed like this:
SWAP (x1 x2 -- x2 x1)
The starting stack and ending stack are shown such that the to p of the stack is shown on the right side. If you push x1 on the
stack, then x2 and x3, then the stack would be shown like this: x1 x2 x3. The top of the stack is x3. The MOTOR_SET
word, for example, takes three values off the top of the stack:
MOTOR_SET (power mode index --)