Skip to navigation

Elite on the BBC Micro and NES

Equipment: qv

[Elite-A, Docked]

Name: qv [Show more] Type: Subroutine Category: Equipment Summary: Print a menu of the four space views, for buying lasers
Context: See this subroutine in context in the source code References: This subroutine is called as follows: * EQSHP calls qv

Print a menu in the bottom-middle of the screen, at row 16, column 12, that lists the four available space views, like this: 0 Front 1 Rear 2 Left 3 Right Also print a "View ?" prompt and ask for a view number. The menu is shown when we choose to buy a new laser in the Equip Ship screen.
Returns: X The chosen view number (0-3)
.qv LDA tek \ If the current system's tech level is less than 8, CMP #8 \ skip the next two instructions, otherwise we clear the BCC P%+7 \ screen to prevent the view menu from clashing with the \ longer equipment menu available in higher tech systems LDA #32 \ Clear the top part of the screen, draw a white border, JSR TT66 \ and set the current view type in QQ11 to 32 (Equip \ Ship screen) LDY #16 \ Move the text cursor to row 16, and at the same time STY YC \ set YC to a counter going from 16 to 19 in the loop \ below .qv1 LDX #12 \ Move the text cursor to column 12 STX XC \ --- Mod: Code removed for Elite-A: ------------------> \ TYA \ Transfer the counter value from Y to A \ --- And replaced by: --------------------------------> LDA YC \ Fetch the counter value from YC into A \ --- End of replacement ------------------------------> CLC \ Print ASCII character "0" - 16 + A, so as A goes from ADC #'0'-16 \ 16 to 19, this prints "0" through "3" followed by a JSR spc \ space LDA YC \ Print recursive text token 80 + YC, so as YC goes from CLC \ 16 to 19, this prints "FRONT", "REAR", "LEFT" and ADC #80 \ "RIGHT" JSR TT27 INC YC \ Move the text cursor down a row, and increment the \ counter in YC at the same time \ --- Mod: Code removed for Elite-A: ------------------> \ LDY YC \ Update Y with the incremented counter in YC \ \ CPY #20 \ If Y < 20 then loop back up to qv1 to print the next \ BCC qv1 \ view in the menu \ --- And replaced by: --------------------------------> LDA new_mounts \ Set A = new_mounts + 16, so A now contains a value of ORA #16 \ 17, 18 or 20, depending on the number of laser mounts \ that our current ship supports (in other words, it's \ one more than the corresponding value in the YC \ counter, which is going from 16 to 19, not 17 to 20) CMP YC \ If the loop counter in YC hasn't yet reached the BNE qv1 \ value in A, then loop back up to qv1 to print the next \ view in the menu, so this loops us back until we have \ printed all of the laser mounts defined by the value \ of new_mounts \ --- End of replacement ------------------------------> JSR CLYNS \ Clear the bottom three text rows of the upper screen, \ and move the text cursor to column 1 on row 21, i.e. \ the start of the top row of the three bottom rows .qv2 LDA #175 \ Print recursive text token 15 ("VIEW ") followed by JSR prq \ a question mark JSR TT217 \ Scan the keyboard until a key is pressed, and return \ the key's ASCII code in A (and X) SEC \ Subtract ASCII "0" from the key pressed, to leave the SBC #'0' \ numeric value of the key in A (if it was a number key) \ --- Mod: Code removed for Elite-A: ------------------> \ CMP #4 \ If the number entered in A < 4, then it is a valid \ BCC qv3 \ view number, so jump down to qv3 as we are done \ --- And replaced by: --------------------------------> CMP new_mounts \ If A < new_mounts, then our current ship supports this BCC qv3 \ view number, so jump down to qv3 as we are done \ --- End of replacement ------------------------------> JSR CLYNS \ Otherwise we didn't get a valid view number, so clear \ the bottom three text rows of the upper screen, and \ move the text cursor to column 1 on row 21 JMP qv2 \ Jump back to qv2 to try again .qv3 TAX \ We have a valid view number, so transfer it to X RTS \ Return from the subroutine