Just do something like this:
getkey -> Z
If Z = 11 and S≠1: goto M1 // S is the current screen, with 0 being the game, 1 being the f1 menu, etc.
If Z = 12 and S≠2: goto M2
If Z = 13 and S≠2: goto M3
I'm pretty sure I could user expr( to do something like this, but more optimized.
also, and example of a custom menu:
clrdraw: 1 -> S
repeat ans: getkey -> Z: End
//stuff for moving the options cursor, switching to other menus/back to the game, etc.
I've done something very similar, in the form of a mapmaking utility. I was working on an rpg for the Ti and I was having trouble making all of the maps by hand, so I decided to 1) make a mapmaking utility to speed it up and 2) use lists since they can be individually archived/unarchived without using assembly, and 3) I can do a startup-hasher to ensure they haven't been tampered with, which I can't do with a program (that routine can be tampered with, but whatever :p )
I ended up never finishing the rpg since I was polishing my mapmaker endlessly, which sucks, since I had a nearly complete engine (it was only missing half the battle stuff). If I ever find the files on my old computer's hard drive (the rest of it no longer works >.>) then I'll upload them and see if other people can help add content.
Anyway, to answer the original question, you just need something simple like that. Also, you might want to sacrifice a row of graph screen ext at the bottom to draw little indicators as to what each button brings up (i.e Options, Quit, Help,)