# GOSUB Examples

Syntax: GOSUB

    ' GOSUB.BS1
    ' This program is a guessing game that generates a random number in a
    ' subroutine called Pick_A_Number. It is written to stop after three
    ' guesses. To see a common bug associated with GOSUB, delete or comment
    ' out the line beginning with END after the FOR-NEXT loop. This means
    ' that after the loop is finished, the program will wander into the
    ' Pick_A_Number subroutine. When the RETURN at the end executes, the
    ' program will go back to the beginning of the program. This will cause
    ' the program to execute endlessly. Make sure that your programs can't
    ' accidentally execute subroutines!

    ' {$STAMP BS1}
    ' {$PBASIC 1.0}

    SYMBOL  rounds          = B2            ' number of reps
    SYMBOL  numGen          = W0            ' random number holder
    SYMBOL  myNum           = B3            ' random number, 1-10

    Setup:
      numGen = 11500                        ' initialize random "seed"

    Main:
      FOR rounds = 1 TO 10
        DEBUG CLS, "Pick a number from 1 to 10", CR
        GOSUB Pick_A_Number
        PAUSE 2000                          ' dramatic pause
        DEBUG "My number was: ", #myNum     ' show the number
        PAUSE 1000                          ' another pause.
      NEXT
      DEBUG CLS, "Done"
      END                                   ' end program

    ' Random-number subroutine. A subroutine is just a piece of code with
    ' the RETURN instruction at the end. Always make sure your program enters
    ' subroutines with a GOSUB. If you don't, the RETURN won't have the
    ' correct address, and your program will have a bug!

    Pick_A_Number:
      RANDOM numGen                         ' stir up the bits of NumGen.
      DEBUG numGen, CR
      myNum = numGen / 6550 MIN 1           ' scale to fit 1-10 range.
      RETURN                                ' go back to 1st instruction

NOTE: The example below is written for the BS2 and will run on any of the BS2-family modules. Modify the $STAMP directive (as required) before downloading to the BS2e, BS2sx, BS2p, BS2pe, or BS2px.

    ' GOSUB.BS2
    ' This program is a guessing game that generates a random number in a
    ' subroutine called Pick_A_Number. It is written to stop after three
    ' guesses. To see a common bug associated with GOSUB, delete or comment
    ' out the line beginning with END after the FOR-NEXT loop. This means
    ' that after the loop is finished, the program will wander into the
    ' Pick_A_Number subroutine. When the RETURN at the end executes, the
    ' program will go back to the beginning of the program. This will cause
    ' the program to execute endlessly. Make sure that your programs can't
    ' accidentally execute subroutines!

    ' {$STAMP BS2}
    ' {$PBASIC 2.5}

    rounds          VAR     Byte            ' number of reps
    numGen          VAR     Word            ' random number holder
    myNum           VAR     Byte            ' random number, 1-10

    Setup:
      numGen = 11500                        ' initialize random "seed"

    Main:
      FOR rounds = 1 TO 10
        DEBUG CLS, "Pick a number from 1 to 10", CR
        GOSUB Pick_A_Number
        PAUSE 2000                          ' dramatic pause
        DEBUG "My number was: ", DEC myNum  ' show the number
        PAUSE 1000                          ' another pause.
      NEXT
      DEBUG CLS, "Done"
      END                                   ' end program

    ' Random-number subroutine. A subroutine is just a piece of code with
    ' the RETURN instruction at the end. Always make sure your program enters
    ' subroutines with a GOSUB. If you don't, the RETURN won't have the
    ' correct address, and your program will have a bug!

    Pick_A_Number:
      RANDOM numGen                         ' stir up the bits of NumGen.
      DEBUG DEC ? numGen
      myNum = numGen / 6550 MIN 1           ' scale to fit 1-10 range.
      RETURN                                ' go back to 1st instruction
                                            '  after GOSUB that got us here

Go to Welcome page

BASIC Stamp Help Version 2.5.4

Copyright © Parallax Inc.

8/8/2012