.menu LDA menu_entry,X \ Store the menu's size (i.e. the number of entries) in STA QQ25 \ QQ25 LDA menu_offset,X \ Store the token number of the menu's first item in STA QQ29 \ QQ29 LDA menu_query,X \ Store the menu's query token number on the stack, PHA \ which contains the query prompt we show at the bottom \ of the menu LDA menu_title,X \ Store the menu's title token number on the stack PHA LDA menu_titlex,X \ Store the menu's title x-coordinate on the stack PHA LDA #32 \ Clear the top part of the screen, draw a border box, JSR TT66 \ and set the current view type in QQ11 to 32 JSR MT1 \ Switch to ALL CAPS when printing extended tokens PLA \ Retrieve the menu's title x-coordinate from the stack STA XC \ and move the text cursor to it PLA \ Retrieve the menu's title token number from the stack JSR write_msg3 \ and print it (the menu tokens are in the msg_3 table) JSR NLIN4 \ Draw a horizontal line at pixel row 19 to box in the \ title INC YC \ Move the text cursor down a line LDX #0 \ We are now going to work our way through the items in \ the menu, printing as we go, so set a counter in X to \ hold the number of the current item (starting from 0) .menu_loop STX XX13 \ Store the current menu item number in XX13 JSR TT67 \ Print a newline LDX XX13 \ Print the current item number + 1 to 3 digits, left- INX \ padding with spaces, and with no decimal point, so the CLC \ items are numbered from 1 JSR pr2 JSR TT162 \ Print a space JSR MT2 \ Switch to Sentence Case when printing extended tokens LDA #%10000000 \ Set bit 7 of QQ17 to switch standard tokens to STA QQ17 \ Sentence Case CLC \ Set A = XX13 + QQ29 LDA XX13 \ ADC QQ29 \ This will contain the token number for the first entry \ in this menu, as QQ29 contains the number of the first \ token in this menu, and XX13 contains the number of \ this entry within the menu JSR write_msg3 \ Print the extended token for this menu item (the menu \ tokens are in the msg_3 table) LDX XX13 \ Fetch the menu item number from XX13 INX \ Increment the menu item number to point to the next \ item CPX QQ25 \ Loop back to menu_loop until we have shown all QQ25 BCC menu_loop \ menu items JSR CLYNS \ Clear the bottom three text rows of the upper screen, \ and move the text cursor to the first cleared row PLA \ Retrieve the menu's query token number from the stack JSR write_msg3 \ and print it LDA #'?' \ Print a question mark JSR DASC JSR gnum \ Call gnum to get a number from the keyboard, which \ will be the menu item number of the menu item we want \ to show, returning the number entered in A and R, and \ setting the C flag if the number is bigger than the \ highest menu item number in QQ25 BEQ menu_start \ If no number was entered, jump to menu_start to show \ the cargo bay BCS menu_start \ If the number entered was too big, jump to menu_start \ show the cargo bay RTS \ Return from the subroutine .menu_start JMP BAY \ Jump to BAY to go to the docking bay (i.e. show the \ Encyclopedia screen)Name: menu [Show more] Type: Subroutine Category: Encyclopedia Summary: Display a menu and ask for a choice Deep dive: The Encyclopedia GalacticaContext: See this subroutine in context in the source code References: This subroutine is called as follows: * controls calls menu * encyclopedia calls menu * equip_data calls menu * ships_ag calls menu
Arguments: X The number of the menu to display (0 to 4)
Returns: A The number entered R Also contains the number entered C flag Set if the number is too large, clear otherwise
[X]
Subroutine BAY (category: Status)
Go to the docking bay (i.e. show the Status Mode screen)
[X]
Subroutine CLYNS (category: Drawing the screen)
Clear the bottom three text rows of the mode 4 screen by sending a clr_line command to the I/O processor
[X]
Subroutine MT1 (category: Text)
Switch to ALL CAPS when printing extended tokens
[X]
Subroutine MT2 (category: Text)
Switch to Sentence Case when printing extended tokens
[X]
Subroutine NLIN4 (category: Drawing lines)
Draw a horizontal line at pixel row 19 to box in a title
[X]
Subroutine TT162 (category: Text)
Print a space
[X]
Subroutine TT66 (category: Drawing the screen)
Clear the screen and set the current view type
[X]
Subroutine TT67 (category: Text)
Print a newline
[X]
Subroutine gnum (category: Market)
Get a number from the keyboard
[X]
Subroutine pr2 (category: Text)
Print an 8-bit number, left-padded to 3 digits, and optional point
[X]
Subroutine write_msg3 (category: Text)
Print an extended recursive token from the msg_3 token table