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 --)
   132   133   134   135   136   137   138   139   140   141   142