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 DO I . LOOP ;
ok
oneToTen
1 2 3 4 5 6 7 8 9 10 ok
limit start DO words delta +LOOP
This variation on the basic DO LOOP adds the given delta value to the loop index instead of always adding one. You can use this type of loop to count backwards by supplying a negative
delta.
BEGIN body UNTIL
This 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 stuff 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 current state of the buttons into the RCX_BUTTON variable. Then
the value of RCX_BUTTON is retrieved (with @) and compared 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
This variation on BEGIN UNTIL loops forever, executing its body each time through the loop.
pbFORTH Words
pbFORTH 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 with 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 top 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 --)
Page 126
Need help?
Do you have a question about the MINDSTORMS Robots and is the answer not in the manual?
Questions and answers