BASIC stamp manual v2.2
5: BASIC Stamp Command Reference – GOSUB
BASIC Stamp Syntax and Reference Manual 2.2 • www.parallax.com • Page 211
BASIC Stamp encounters a RETURN without a previous GOSUB, the
entire program starts over from the beginning. Take care to avoid these
phenomena.
Demo Program (GOSUB.bs1)
' 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 ten
' 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
' after GOSUB that got us here
1